PluginProbe ʕ •ᴥ•ʔ
SiteOrigin CSS / 1.2.3
SiteOrigin CSS v1.2.3
1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.10 1.5.11 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 trunk 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.0
so-css / lib / codemirror / addon / dialog / dialog.js
so-css / lib / codemirror / addon / dialog Last commit date
dialog.css 8 years ago dialog.js 8 years ago dialog.min.js 8 years ago
dialog.js
158 lines
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 // Distributed under an MIT license: http://codemirror.net/LICENSE
3
4 // Open simple dialogs on top of an editor. Relies on dialog.css.
5
6 (function(mod) {
7 if (typeof exports == "object" && typeof module == "object") // CommonJS
8 mod(require("../../lib/codemirror"));
9 else if (typeof define == "function" && define.amd) // AMD
10 define(["../../lib/codemirror"], mod);
11 else // Plain browser env
12 mod(CodeMirror);
13 })(function(CodeMirror) {
14 function dialogDiv(cm, template, bottom) {
15 var wrap = cm.getWrapperElement();
16 var dialog;
17 dialog = wrap.appendChild(document.createElement("div"));
18 if (bottom)
19 dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";
20 else
21 dialog.className = "CodeMirror-dialog CodeMirror-dialog-top";
22
23 if (typeof template == "string") {
24 dialog.innerHTML = template;
25 } else { // Assuming it's a detached DOM element.
26 dialog.appendChild(template);
27 }
28 return dialog;
29 }
30
31 function closeNotification(cm, newVal) {
32 if (cm.state.currentNotificationClose)
33 cm.state.currentNotificationClose();
34 cm.state.currentNotificationClose = newVal;
35 }
36
37 CodeMirror.defineExtension("openDialog", function(template, callback, options) {
38 if (!options) options = {};
39
40 closeNotification(this, null);
41
42 var dialog = dialogDiv(this, template, options.bottom);
43 var closed = false, me = this;
44 function close(newVal) {
45 if (typeof newVal == 'string') {
46 inp.value = newVal;
47 } else {
48 if (closed) return;
49 closed = true;
50 dialog.parentNode.removeChild(dialog);
51 me.focus();
52
53 if (options.onClose) options.onClose(dialog);
54 }
55 }
56
57 var inp = dialog.getElementsByTagName("input")[0], button;
58 if (inp) {
59 inp.focus();
60
61 if (options.value) {
62 inp.value = options.value;
63 if (options.selectValueOnOpen !== false) {
64 inp.select();
65 }
66 }
67
68 if (options.onInput)
69 CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);});
70 if (options.onKeyUp)
71 CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);});
72
73 CodeMirror.on(inp, "keydown", function(e) {
74 if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }
75 if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {
76 inp.blur();
77 CodeMirror.e_stop(e);
78 close();
79 }
80 if (e.keyCode == 13) callback(inp.value, e);
81 });
82
83 if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close);
84 } else if (button = dialog.getElementsByTagName("button")[0]) {
85 CodeMirror.on(button, "click", function() {
86 close();
87 me.focus();
88 });
89
90 if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close);
91
92 button.focus();
93 }
94 return close;
95 });
96
97 CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) {
98 closeNotification(this, null);
99 var dialog = dialogDiv(this, template, options && options.bottom);
100 var buttons = dialog.getElementsByTagName("button");
101 var closed = false, me = this, blurring = 1;
102 function close() {
103 if (closed) return;
104 closed = true;
105 dialog.parentNode.removeChild(dialog);
106 me.focus();
107 }
108 buttons[0].focus();
109 for (var i = 0; i < buttons.length; ++i) {
110 var b = buttons[i];
111 (function(callback) {
112 CodeMirror.on(b, "click", function(e) {
113 CodeMirror.e_preventDefault(e);
114 close();
115 if (callback) callback(me);
116 });
117 })(callbacks[i]);
118 CodeMirror.on(b, "blur", function() {
119 --blurring;
120 setTimeout(function() { if (blurring <= 0) close(); }, 200);
121 });
122 CodeMirror.on(b, "focus", function() { ++blurring; });
123 }
124 });
125
126 /*
127 * openNotification
128 * Opens a notification, that can be closed with an optional timer
129 * (default 5000ms timer) and always closes on click.
130 *
131 * If a notification is opened while another is opened, it will close the
132 * currently opened one and open the new one immediately.
133 */
134 CodeMirror.defineExtension("openNotification", function(template, options) {
135 closeNotification(this, close);
136 var dialog = dialogDiv(this, template, options && options.bottom);
137 var closed = false, doneTimer;
138 var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000;
139
140 function close() {
141 if (closed) return;
142 closed = true;
143 clearTimeout(doneTimer);
144 dialog.parentNode.removeChild(dialog);
145 }
146
147 CodeMirror.on(dialog, 'click', function(e) {
148 CodeMirror.e_preventDefault(e);
149 close();
150 });
151
152 if (duration)
153 doneTimer = setTimeout(close, duration);
154
155 return close;
156 });
157 });
158