diff options
author | Hugues Hiegel <root@paranoid> | 2015-03-11 16:55:04 +0100 |
---|---|---|
committer | Hugues Hiegel <root@paranoid> | 2015-03-11 16:55:04 +0100 |
commit | 99f904adcc37d93c90defcd8ce898598e25be212 (patch) | |
tree | 60a6c7b7b9cf012d6c0e8dcf5c7f4fe0a5b6fc49 /codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js | |
parent | b2034fdfec040a67988e543a911208ef2491ce7a (diff) |
Diffstat (limited to 'codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js')
-rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js b/codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js new file mode 100644 index 0000000..8950bf0 --- /dev/null +++ b/codemirror_ui/lib/CodeMirror-2.3/lib/util/dialog.js @@ -0,0 +1,63 @@ +// 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; }); + } + }); +})();
\ No newline at end of file |