MCPcopy Create free account
hub / github.com/OpenEndedGroup/Field2 / leftButtonStartDrag

Function leftButtonStartDrag

lib/web/CodeMirror/src/edit/mouse_events.js:147–188  ·  view source on GitHub ↗
(cm, event, pos, behavior)

Source from the content-addressed store, hash-verified

145// Start a text drag. When it ends, see if any dragging actually
146// happen, and treat as a click if it didn't.
147function leftButtonStartDrag(cm, event, pos, behavior) {
148 let display = cm.display, moved = false
149 let dragEnd = operation(cm, e => {
150 if (webkit) display.scroller.draggable = false
151 cm.state.draggingText = false
152 if (cm.state.delayingBlurEvent) {
153 if (cm.hasFocus()) cm.state.delayingBlurEvent = false
154 else delayBlurEvent(cm)
155 }
156 off(display.wrapper.ownerDocument, "mouseup", dragEnd)
157 off(display.wrapper.ownerDocument, "mousemove", mouseMove)
158 off(display.scroller, "dragstart", dragStart)
159 off(display.scroller, "drop", dragEnd)
160 if (!moved) {
161 e_preventDefault(e)
162 if (!behavior.addNew)
163 extendSelection(cm.doc, pos, null, null, behavior.extend)
164 // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
165 if ((webkit && !safari) || ie && ie_version == 9)
166 setTimeout(() => {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus()}, 20)
167 else
168 display.input.focus()
169 }
170 })
171 let mouseMove = function(e2) {
172 moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10
173 }
174 let dragStart = () => moved = true
175 // Let the drag handler handle this.
176 if (webkit) display.scroller.draggable = true
177 cm.state.draggingText = dragEnd
178 dragEnd.copy = !behavior.moveOnDrag
179 on(display.wrapper.ownerDocument, "mouseup", dragEnd)
180 on(display.wrapper.ownerDocument, "mousemove", mouseMove)
181 on(display.scroller, "dragstart", dragStart)
182 on(display.scroller, "drop", dragEnd)
183
184 cm.state.delayingBlurEvent = true
185 setTimeout(() => display.input.focus(), 20)
186 // IE's approach to draggable
187 if (display.scroller.dragDrop) display.scroller.dragDrop()
188}
189
190function rangeForUnit(cm, pos, unit) {
191 if (unit == "char") return new Range(pos, pos)

Callers 1

leftButtonDownFunction · 0.70

Calls 7

operationFunction · 0.90
delayBlurEventFunction · 0.90
offFunction · 0.90
e_preventDefaultFunction · 0.90
extendSelectionFunction · 0.90
onFunction · 0.90
focusMethod · 0.45

Tested by

no test coverage detected