1 // Open simple dialogs on top of an editor. Relies on dialog.css.
4 function dialogDiv(cm
, template
, bottom
) {
5 var wrap
= cm
.getWrapperElement();
7 dialog
= wrap
.appendChild(document
.createElement("div"));
9 dialog
.className
= "CodeMirror-dialog CodeMirror-dialog-bottom";
11 dialog
.className
= "CodeMirror-dialog CodeMirror-dialog-top";
13 dialog
.innerHTML
= template
;
17 CodeMirror
.defineExtension("openDialog", function(template
, callback
, options
) {
18 var dialog
= dialogDiv(this, template
, options
&& options
.bottom
);
19 var closed
= false, me
= this;
23 dialog
.parentNode
.removeChild(dialog
);
25 var inp
= dialog
.getElementsByTagName("input")[0], button
;
27 CodeMirror
.on(inp
, "keydown", function(e
) {
28 if (options
&& options
.onKeyDown
&& options
.onKeyDown(e
, inp
.value
, close
)) { return; }
29 if (e
.keyCode
== 13 || e
.keyCode
== 27) {
33 if (e
.keyCode
== 13) callback(inp
.value
);
36 if (options
&& options
.onKeyUp
) {
37 CodeMirror
.on(inp
, "keyup", function(e
) {options
.onKeyUp(e
, inp
.value
, close
);});
39 if (options
&& options
.value
) inp
.value
= options
.value
;
41 CodeMirror
.on(inp
, "blur", close
);
42 } else if (button
= dialog
.getElementsByTagName("button")[0]) {
43 CodeMirror
.on(button
, "click", function() {
48 CodeMirror
.on(button
, "blur", close
);
53 CodeMirror
.defineExtension("openConfirm", function(template
, callbacks
, options
) {
54 var dialog
= dialogDiv(this, template
, options
&& options
.bottom
);
55 var buttons
= dialog
.getElementsByTagName("button");
56 var closed
= false, me
= this, blurring
= 1;
60 dialog
.parentNode
.removeChild(dialog
);
64 for (var i
= 0; i
< buttons
.length
; ++i
) {
67 CodeMirror
.on(b
, "click", function(e
) {
68 CodeMirror
.e_preventDefault(e
);
70 if (callback
) callback(me
);
73 CodeMirror
.on(b
, "blur", function() {
75 setTimeout(function() { if (blurring
<= 0) close(); }, 200);
77 CodeMirror
.on(b
, "focus", function() { ++blurring
; });