Mercurial > hg > rc1
comparison plugins/managesieve/codemirror/addon/selection/selection-pointer.js @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
| author | Charlie Root |
|---|---|
| date | Thu, 04 Jan 2018 15:50:29 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1e000243b222 |
|---|---|
| 1 // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
| 2 // Distributed under an MIT license: http://codemirror.net/LICENSE | |
| 3 | |
| 4 (function(mod) { | |
| 5 if (typeof exports == "object" && typeof module == "object") // CommonJS | |
| 6 mod(require("../../lib/codemirror")); | |
| 7 else if (typeof define == "function" && define.amd) // AMD | |
| 8 define(["../../lib/codemirror"], mod); | |
| 9 else // Plain browser env | |
| 10 mod(CodeMirror); | |
| 11 })(function(CodeMirror) { | |
| 12 "use strict"; | |
| 13 | |
| 14 CodeMirror.defineOption("selectionPointer", false, function(cm, val) { | |
| 15 var data = cm.state.selectionPointer; | |
| 16 if (data) { | |
| 17 CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove); | |
| 18 CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout); | |
| 19 CodeMirror.off(window, "scroll", data.windowScroll); | |
| 20 cm.off("cursorActivity", reset); | |
| 21 cm.off("scroll", reset); | |
| 22 cm.state.selectionPointer = null; | |
| 23 cm.display.lineDiv.style.cursor = ""; | |
| 24 } | |
| 25 if (val) { | |
| 26 data = cm.state.selectionPointer = { | |
| 27 value: typeof val == "string" ? val : "default", | |
| 28 mousemove: function(event) { mousemove(cm, event); }, | |
| 29 mouseout: function(event) { mouseout(cm, event); }, | |
| 30 windowScroll: function() { reset(cm); }, | |
| 31 rects: null, | |
| 32 mouseX: null, mouseY: null, | |
| 33 willUpdate: false | |
| 34 }; | |
| 35 CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove); | |
| 36 CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout); | |
| 37 CodeMirror.on(window, "scroll", data.windowScroll); | |
| 38 cm.on("cursorActivity", reset); | |
| 39 cm.on("scroll", reset); | |
| 40 } | |
| 41 }); | |
| 42 | |
| 43 function mousemove(cm, event) { | |
| 44 var data = cm.state.selectionPointer; | |
| 45 if (event.buttons == null ? event.which : event.buttons) { | |
| 46 data.mouseX = data.mouseY = null; | |
| 47 } else { | |
| 48 data.mouseX = event.clientX; | |
| 49 data.mouseY = event.clientY; | |
| 50 } | |
| 51 scheduleUpdate(cm); | |
| 52 } | |
| 53 | |
| 54 function mouseout(cm, event) { | |
| 55 if (!cm.getWrapperElement().contains(event.relatedTarget)) { | |
| 56 var data = cm.state.selectionPointer; | |
| 57 data.mouseX = data.mouseY = null; | |
| 58 scheduleUpdate(cm); | |
| 59 } | |
| 60 } | |
| 61 | |
| 62 function reset(cm) { | |
| 63 cm.state.selectionPointer.rects = null; | |
| 64 scheduleUpdate(cm); | |
| 65 } | |
| 66 | |
| 67 function scheduleUpdate(cm) { | |
| 68 if (!cm.state.selectionPointer.willUpdate) { | |
| 69 cm.state.selectionPointer.willUpdate = true; | |
| 70 setTimeout(function() { | |
| 71 update(cm); | |
| 72 cm.state.selectionPointer.willUpdate = false; | |
| 73 }, 50); | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 function update(cm) { | |
| 78 var data = cm.state.selectionPointer; | |
| 79 if (!data) return; | |
| 80 if (data.rects == null && data.mouseX != null) { | |
| 81 data.rects = []; | |
| 82 if (cm.somethingSelected()) { | |
| 83 for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling) | |
| 84 data.rects.push(sel.getBoundingClientRect()); | |
| 85 } | |
| 86 } | |
| 87 var inside = false; | |
| 88 if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) { | |
| 89 var rect = data.rects[i]; | |
| 90 if (rect.left <= data.mouseX && rect.right >= data.mouseX && | |
| 91 rect.top <= data.mouseY && rect.bottom >= data.mouseY) | |
| 92 inside = true; | |
| 93 } | |
| 94 var cursor = inside ? data.value : ""; | |
| 95 if (cm.display.lineDiv.style.cursor != cursor) | |
| 96 cm.display.lineDiv.style.cursor = cursor; | |
| 97 } | |
| 98 }); |
