[ Index ] |
PHP Cross Reference of MyBB 1.8.38 |
[Summary view] [Print] [Text view]
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 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |