Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / js / 3rdParty / codemirror / addon / display / rulers.js
1 (function(mod) {
2 if (typeof exports == "object" && typeof module == "object") // CommonJS
3 mod(require("../../lib/codemirror"));
4 else if (typeof define == "function" && define.amd) // AMD
5 define(["../../lib/codemirror"], mod);
6 else // Plain browser env
7 mod(CodeMirror);
8 })(function(CodeMirror) {
9 "use strict";
10
11 CodeMirror.defineOption("rulers", false, function(cm, val, old) {
12 if (old && old != CodeMirror.Init) {
13 clearRulers(cm);
14 cm.off("refresh", refreshRulers);
15 }
16 if (val && val.length) {
17 setRulers(cm);
18 cm.on("refresh", refreshRulers);
19 }
20 });
21
22 function clearRulers(cm) {
23 for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) {
24 var node = cm.display.lineSpace.childNodes[i];
25 if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className))
26 node.parentNode.removeChild(node);
27 }
28 }
29
30 function setRulers(cm) {
31 var val = cm.getOption("rulers");
32 var cw = cm.defaultCharWidth();
33 var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left;
34 var bot = -cm.display.scroller.offsetHeight;
35 for (var i = 0; i < val.length; i++) {
36 var elt = document.createElement("div");
37 var col, cls = null;
38 if (typeof val[i] == "number") {
39 col = val[i];
40 } else {
41 col = val[i].column;
42 cls = val[i].className;
43 }
44 elt.className = "CodeMirror-ruler" + (cls ? " " + cls : "");
45 elt.style.cssText = "left: " + (left + col * cw) + "px; top: -50px; bottom: " + bot + "px";
46 cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv);
47 }
48 }
49
50 function refreshRulers(cm) {
51 clearRulers(cm);
52 setRulers(cm);
53 }
54 });