(cm, event, pos, behavior)
| 10105 | // Start a text drag. When it ends, see if any dragging actually |
| 10106 | // happen, and treat as a click if it didn't. |
| 10107 | function leftButtonStartDrag(cm, event, pos, behavior) { |
| 10108 | var display = cm.display, |
| 10109 | moved = false |
| 10110 | var dragEnd = operation(cm, function (e) { |
| 10111 | if (webkit) { |
| 10112 | display.scroller.draggable = false |
| 10113 | } |
| 10114 | cm.state.draggingText = false |
| 10115 | off(display.wrapper.ownerDocument, "mouseup", dragEnd) |
| 10116 | off(display.wrapper.ownerDocument, "mousemove", mouseMove) |
| 10117 | off(display.scroller, "dragstart", dragStart) |
| 10118 | off(display.scroller, "drop", dragEnd) |
| 10119 | if (!moved) { |
| 10120 | e_preventDefault(e) |
| 10121 | if (!behavior.addNew) { |
| 10122 | extendSelection(cm.doc, pos, null, null, behavior.extend) |
| 10123 | } |
| 10124 | // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) |
| 10125 | if (webkit || (ie && ie_version == 9)) { |
| 10126 | setTimeout(function () { |
| 10127 | display.wrapper.ownerDocument.body.focus() |
| 10128 | display.input.focus() |
| 10129 | }, 20) |
| 10130 | } else { |
| 10131 | display.input.focus() |
| 10132 | } |
| 10133 | } |
| 10134 | }) |
| 10135 | var mouseMove = function (e2) { |
| 10136 | moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10 |
| 10137 | } |
| 10138 | var dragStart = function () { |
| 10139 | return (moved = true) |
| 10140 | } |
| 10141 | // Let the drag handler handle this. |
| 10142 | if (webkit) { |
| 10143 | display.scroller.draggable = true |
| 10144 | } |
| 10145 | cm.state.draggingText = dragEnd |
| 10146 | dragEnd.copy = !behavior.moveOnDrag |
| 10147 | // IE's approach to draggable |
| 10148 | if (display.scroller.dragDrop) { |
| 10149 | display.scroller.dragDrop() |
| 10150 | } |
| 10151 | on(display.wrapper.ownerDocument, "mouseup", dragEnd) |
| 10152 | on(display.wrapper.ownerDocument, "mousemove", mouseMove) |
| 10153 | on(display.scroller, "dragstart", dragStart) |
| 10154 | on(display.scroller, "drop", dragEnd) |
| 10155 | |
| 10156 | delayBlurEvent(cm) |
| 10157 | setTimeout(function () { |
| 10158 | return display.input.focus() |
| 10159 | }, 20) |
| 10160 | } |
| 10161 | |
| 10162 | function rangeForUnit(cm, pos, unit) { |
| 10163 | if (unit == "char") { |
no test coverage detected