| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| var tinymce, tinyMCE; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| var tinyMCEPopup = { |
| |
| |
| |
| |
| |
| init: function () { |
| var self = this, parentWin, settings, uiWindow; |
|
|
| |
| parentWin = self.getWin(); |
| tinymce = tinyMCE = parentWin.tinymce; |
| self.editor = tinymce.EditorManager.activeEditor; |
| self.params = self.editor.windowManager.getParams(); |
|
|
| uiWindow = self.editor.windowManager.windows[self.editor.windowManager.windows.length - 1]; |
| self.features = uiWindow.features; |
| self.uiWindow = uiWindow; |
|
|
| settings = self.editor.settings; |
|
|
| |
| if (settings.popup_css !== false) { |
| if (settings.popup_css) { |
| settings.popup_css = self.editor.documentBaseURI.toAbsolute(settings.popup_css); |
| } else { |
| settings.popup_css = self.editor.baseURI.toAbsolute("plugins/compat3x/css/dialog.css"); |
| } |
| } |
|
|
| if (settings.popup_css_add) { |
| settings.popup_css += ',' + self.editor.documentBaseURI.toAbsolute(settings.popup_css_add); |
| } |
|
|
| |
| self.dom = self.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document, { |
| ownEvents: true, |
| proxy: tinyMCEPopup._eventProxy |
| }); |
|
|
| self.dom.bind(window, 'ready', self._onDOMLoaded, self); |
|
|
| |
| if (self.features.popup_css !== false) { |
| self.dom.loadCSS(self.features.popup_css || self.editor.settings.popup_css); |
| } |
|
|
| |
| self.listeners = []; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| self.onInit = { |
| add: function (func, scope) { |
| self.listeners.push({ func: func, scope: scope }); |
| } |
| }; |
|
|
| self.isWindow = !self.getWindowArg('mce_inline'); |
| self.id = self.getWindowArg('mce_window_id'); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| getWin: function () { |
| |
| return (!window.frameElement && window.dialogArguments) || opener || parent || top; |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| getWindowArg: function (name, defaultValue) { |
| var value = this.params[name]; |
|
|
| return tinymce.is(value) ? value : defaultValue; |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| getParam: function (name, defaultValue) { |
| return this.editor.getParam(name, defaultValue); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| getLang: function (name, defaultValue) { |
| return this.editor.getLang(name, defaultValue); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| execCommand: function (cmd, ui, val, args) { |
| args = args || {}; |
| args.skip_focus = 1; |
|
|
| this.restoreSelection(); |
| return this.editor.execCommand(cmd, ui, val, args); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| resizeToInnerSize: function () { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| executeOnLoad: function (evil) { |
| this.onInit.add(function () { |
| eval(evil); |
| }); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| storeSelection: function () { |
| this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark(1); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| restoreSelection: function () { |
| var self = tinyMCEPopup; |
|
|
| if (!self.isWindow && tinymce.isIE) { |
| self.editor.selection.moveToBookmark(self.editor.windowManager.bookmark); |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| requireLangPack: function () { |
| var self = this, url = self.getWindowArg('plugin_url') || self.getWindowArg('theme_url'), settings = self.editor.settings, lang; |
|
|
| if (settings.language !== false) { |
| lang = settings.language || "en"; |
| } |
|
|
| if (url && lang && self.features.translate_i18n !== false && settings.language_load !== false) { |
| url += '/langs/' + lang + '_dlg.js'; |
|
|
| if (!tinymce.ScriptLoader.isDone(url)) { |
| document.write('<script type="text/javascript" src="' + url + '"></script>'); |
| tinymce.ScriptLoader.markDone(url); |
| } |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| pickColor: function (e, element_id) { |
| var el = document.getElementById(element_id), colorPickerCallback = this.editor.settings.color_picker_callback; |
| if (colorPickerCallback) { |
| colorPickerCallback.call( |
| this.editor, |
| function (value) { |
| el.value = value; |
| try { |
| el.onchange(); |
| } catch (ex) { |
| |
| } |
| }, |
| el.value |
| ); |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| openBrowser: function (element_id, type) { |
| tinyMCEPopup.restoreSelection(); |
| this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| confirm: function (t, cb, s) { |
| this.editor.windowManager.confirm(t, cb, s, window); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| alert: function (tx, cb, s) { |
| this.editor.windowManager.alert(tx, cb, s, window); |
| }, |
|
|
| |
| |
| |
| |
| |
| close: function () { |
| var t = this; |
|
|
| |
| function close() { |
| t.editor.windowManager.close(window); |
| tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; |
| } |
|
|
| if (tinymce.isOpera) { |
| t.getWin().setTimeout(close, 0); |
| } else { |
| close(); |
| } |
| }, |
|
|
| |
|
|
| _restoreSelection: function () { |
| var e = window.event.srcElement; |
|
|
| if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) { |
| tinyMCEPopup.restoreSelection(); |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| _onDOMLoaded: function () { |
| var t = tinyMCEPopup, ti = document.title, h, nv; |
|
|
| |
| if (t.features.translate_i18n !== false) { |
| var map = { |
| "update": "Ok", |
| "insert": "Ok", |
| "cancel": "Cancel", |
| "not_set": "--", |
| "class_name": "Class name", |
| "browse": "Browse" |
| }; |
|
|
| var langCode = (tinymce.settings ? tinymce.settings : t.editor.settings).language || 'en'; |
| for (var key in map) { |
| tinymce.i18n.data[langCode + "." + key] = tinymce.i18n.translate(map[key]); |
| } |
|
|
| h = document.body.innerHTML; |
|
|
| |
| if (tinymce.isIE) { |
| h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"'); |
| } |
|
|
| document.dir = t.editor.getParam('directionality', ''); |
|
|
| if ((nv = t.editor.translate(h)) && nv != h) { |
| document.body.innerHTML = nv; |
| } |
|
|
| if ((nv = t.editor.translate(ti)) && nv != ti) { |
| document.title = ti = nv; |
| } |
| } |
|
|
| if (!t.editor.getParam('browser_preferred_colors', false) || !t.isWindow) { |
| t.dom.addClass(document.body, 'forceColors'); |
| } |
|
|
| document.body.style.display = ''; |
|
|
| |
| if (tinymce.Env.ie) { |
| if (tinymce.Env.ie < 11) { |
| document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection); |
|
|
| |
| t.dom.add(t.dom.select('head')[0], 'base', { target: '_self' }); |
| } else { |
| document.addEventListener('mouseup', tinyMCEPopup._restoreSelection, false); |
| } |
| } |
|
|
| t.restoreSelection(); |
| t.resizeToInnerSize(); |
|
|
| |
| if (!t.isWindow) { |
| t.editor.windowManager.setTitle(window, ti); |
| } else { |
| window.focus(); |
| } |
|
|
| if (!tinymce.isIE && !t.isWindow) { |
| t.dom.bind(document, 'focus', function () { |
| t.editor.windowManager.focus(t.id); |
| }); |
| } |
|
|
| |
| tinymce.each(t.dom.select('select'), function (e) { |
| e.onkeydown = tinyMCEPopup._accessHandler; |
| }); |
|
|
| |
| |
| tinymce.each(t.listeners, function (o) { |
| o.func.call(o.scope, t.editor); |
| }); |
|
|
| |
| if (t.getWindowArg('mce_auto_focus', true)) { |
| window.focus(); |
|
|
| |
| tinymce.each(document.forms, function (f) { |
| tinymce.each(f.elements, function (e) { |
| if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) { |
| e.focus(); |
| return false; |
| } |
| }); |
| }); |
| } |
|
|
| document.onkeyup = tinyMCEPopup._closeWinKeyHandler; |
|
|
| if ('textContent' in document) { |
| t.uiWindow.getEl('head').firstChild.textContent = document.title; |
| } else { |
| t.uiWindow.getEl('head').firstChild.innerText = document.title; |
| } |
| }, |
|
|
| _accessHandler: function (e) { |
| e = e || window.event; |
|
|
| if (e.keyCode == 13 || e.keyCode == 32) { |
| var elm = e.target || e.srcElement; |
|
|
| if (elm.onchange) { |
| elm.onchange(); |
| } |
|
|
| return tinymce.dom.Event.cancel(e); |
| } |
| }, |
|
|
| _closeWinKeyHandler: function (e) { |
| e = e || window.event; |
|
|
| if (e.keyCode == 27) { |
| tinyMCEPopup.close(); |
| } |
| }, |
|
|
| _eventProxy: function (id) { |
| return function (evt) { |
| tinyMCEPopup.dom.events.callNativeHandler(id, evt); |
| }; |
| } |
| }; |
|
|
| tinyMCEPopup.init(); |
|
|
| tinymce.util.Dispatcher = function (scope) { |
| this.scope = scope || this; |
| this.listeners = []; |
|
|
| this.add = function (callback, scope) { |
| this.listeners.push({ cb: callback, scope: scope || this.scope }); |
|
|
| return callback; |
| }; |
|
|
| this.addToTop = function (callback, scope) { |
| var self = this, listener = { cb: callback, scope: scope || self.scope }; |
|
|
| |
| if (self.inDispatch) { |
| self.listeners = [listener].concat(self.listeners); |
| } else { |
| self.listeners.unshift(listener); |
| } |
|
|
| return callback; |
| }; |
|
|
| this.remove = function (callback) { |
| var listeners = this.listeners, output = null; |
|
|
| tinymce.each(listeners, function (listener, i) { |
| if (callback == listener.cb) { |
| output = listener; |
| listeners.splice(i, 1); |
| return false; |
| } |
| }); |
|
|
| return output; |
| }; |
|
|
| this.dispatch = function () { |
| var self = this, returnValue, args = arguments, i, listeners = self.listeners, listener; |
|
|
| self.inDispatch = true; |
|
|
| |
| |
| for (i = 0; i < listeners.length; i++) { |
| listener = listeners[i]; |
| returnValue = listener.cb.apply(listener.scope, args.length > 0 ? args : [listener.scope]); |
|
|
| if (returnValue === false) { |
| break; |
| } |
| } |
|
|
| self.inDispatch = false; |
|
|
| return returnValue; |
| }; |
| }; |
|
|