Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/addon/display/placeholder.js
1293 views
1
(function() {
2
CodeMirror.defineOption("placeholder", "", function(cm, val, old) {
3
var prev = old && old != CodeMirror.Init;
4
if (val && !prev) {
5
cm.on("blur", onBlur);
6
cm.on("change", onChange);
7
onChange(cm);
8
} else if (!val && prev) {
9
cm.off("blur", onBlur);
10
cm.off("change", onChange);
11
clearPlaceholder(cm);
12
var wrapper = cm.getWrapperElement();
13
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
14
}
15
16
if (val && !cm.hasFocus()) onBlur(cm);
17
});
18
19
function clearPlaceholder(cm) {
20
if (cm.state.placeholder) {
21
cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);
22
cm.state.placeholder = null;
23
}
24
}
25
function setPlaceholder(cm) {
26
clearPlaceholder(cm);
27
var elt = cm.state.placeholder = document.createElement("pre");
28
elt.style.cssText = "height: 0; overflow: visible";
29
elt.className = "CodeMirror-placeholder";
30
elt.appendChild(document.createTextNode(cm.getOption("placeholder")));
31
cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);
32
}
33
34
function onBlur(cm) {
35
if (isEmpty(cm)) setPlaceholder(cm);
36
}
37
function onChange(cm) {
38
var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);
39
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : "");
40
41
if (empty) setPlaceholder(cm);
42
else clearPlaceholder(cm);
43
}
44
45
function isEmpty(cm) {
46
return (cm.lineCount() === 1) && (cm.getLine(0) === "");
47
}
48
})();
49
50