UNPKG

neutrinoscript

Version:
63 lines (60 loc) 2.02 kB
// 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; }); } }); })();