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
8 })(function(CodeMirror
) {
9 CodeMirror
.defineOption("placeholder", "", function(cm
, val
, old
) {
10 var prev
= old
&& old
!= CodeMirror
.Init
;
12 cm
.on("blur", onBlur
);
13 cm
.on("change", onChange
);
15 } else if (!val
&& prev
) {
16 cm
.off("blur", onBlur
);
17 cm
.off("change", onChange
);
19 var wrapper
= cm
.getWrapperElement();
20 wrapper
.className
= wrapper
.className
.replace(" CodeMirror-empty", "");
23 if (val
&& !cm
.hasFocus()) onBlur(cm
);
26 function clearPlaceholder(cm
) {
27 if (cm
.state
.placeholder
) {
28 cm
.state
.placeholder
.parentNode
.removeChild(cm
.state
.placeholder
);
29 cm
.state
.placeholder
= null;
32 function setPlaceholder(cm
) {
34 var elt
= cm
.state
.placeholder
= document
.createElement("pre");
35 elt
.style
.cssText
= "height: 0; overflow: visible";
36 elt
.className
= "CodeMirror-placeholder";
37 elt
.appendChild(document
.createTextNode(cm
.getOption("placeholder")));
38 cm
.display
.lineSpace
.insertBefore(elt
, cm
.display
.lineSpace
.firstChild
);
42 if (isEmpty(cm
)) setPlaceholder(cm
);
44 function onChange(cm
) {
45 var wrapper
= cm
.getWrapperElement(), empty
= isEmpty(cm
);
46 wrapper
.className
= wrapper
.className
.replace(" CodeMirror-empty", "") + (empty
? " CodeMirror-empty" : "");
48 if (empty
) setPlaceholder(cm
);
49 else clearPlaceholder(cm
);
52 function isEmpty(cm
) {
53 return (cm
.lineCount() === 1) && (cm
.getLine(0) === "");