dialog.js
62 lines
| 1.9 KiB
| application/javascript
|
JavascriptLexer
Brian Granger
|
r5941 | // Open simple dialogs on top of an editor. Relies on dialog.css. | |
(function() { | |||
function dialogDiv(cm, template) { | |||
var wrap = cm.getWrapperElement(); | |||
var dialog = wrap.insertBefore(document.createElement("div"), wrap.firstChild); | |||
dialog.className = "CodeMirror-dialog"; | |||
dialog.innerHTML = '<div>' + template + '</div>'; | |||
return dialog; | |||
} | |||
CodeMirror.defineExtension("openDialog", function(template, callback) { | |||
var dialog = dialogDiv(this, template); | |||
var closed = false, me = this; | |||
function close() { | |||
if (closed) return; | |||
closed = true; | |||
dialog.parentNode.removeChild(dialog); | |||
} | |||
var inp = dialog.getElementsByTagName("input")[0]; | |||
if (inp) { | |||
CodeMirror.connect(inp, "keydown", function(e) { | |||
if (e.keyCode == 13 || e.keyCode == 27) { | |||
CodeMirror.e_stop(e); | |||
close(); | |||
me.focus(); | |||
if (e.keyCode == 13) callback(inp.value); | |||
} | |||
}); | |||
inp.focus(); | |||
CodeMirror.connect(inp, "blur", close); | |||
} | |||
return close; | |||
}); | |||
CodeMirror.defineExtension("openConfirm", function(template, callbacks) { | |||
var dialog = dialogDiv(this, template); | |||
var buttons = dialog.getElementsByTagName("button"); | |||
var closed = false, me = this, blurring = 1; | |||
function close() { | |||
if (closed) return; | |||
closed = true; | |||
dialog.parentNode.removeChild(dialog); | |||
me.focus(); | |||
} | |||
buttons[0].focus(); | |||
for (var i = 0; i < buttons.length; ++i) { | |||
var b = buttons[i]; | |||
(function(callback) { | |||
CodeMirror.connect(b, "click", function(e) { | |||
CodeMirror.e_preventDefault(e); | |||
close(); | |||
if (callback) callback(me); | |||
}); | |||
})(callbacks[i]); | |||
CodeMirror.connect(b, "blur", function() { | |||
--blurring; | |||
setTimeout(function() { if (blurring <= 0) close(); }, 200); | |||
}); | |||
CodeMirror.connect(b, "focus", function() { ++blurring; }); | |||
} | |||
}); | |||
})(); |