|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
}; |
|
}; |
|
|