diff --git a/libraries/cms/html/behavior.php b/libraries/cms/html/behavior.php
index a7bbe65c35f8f..467733d80e0b4 100644
--- a/libraries/cms/html/behavior.php
+++ b/libraries/cms/html/behavior.php
@@ -405,23 +405,37 @@ public static function modal($selector = 'a.modal', $params = array())
parse: 'rel'
});
});
- function jModalClose() {
+
+ window.jModalClose = function () {
SqueezeBox.close();
};
- // Patch for tinyMCE
- if (typeof tinyMCE != 'undefined' && tinyMCE) {
- var oldClose = jModalClose;
- jModalClose = function () {
- oldClose.apply(this, arguments);
- tinyMCE.activeEditor.windowManager.close();
- };
-
- var oldSqueezeBox = SqueezeBox.close;
- SqueezeBox.close = function () {
- oldSqueezeBox.apply(this, arguments);
- tinyMCE.activeEditor.windowManager.close();
- };
- }
+
+ // Add extra modal close functionality for tinyMCE-based editors
+ document.onreadystatechange = function () {
+ if (document.readyState == 'interactive' && typeof tinyMCE != 'undefined' && tinyMCE)
+ {
+ if (typeof window.jModalClose_no_tinyMCE === 'undefined')
+ {
+ window.jModalClose_no_tinyMCE = typeof(jModalClose) == 'function' ? jModalClose : false;
+
+ jModalClose = function () {
+ if (window.jModalClose_no_tinyMCE) window.jModalClose_no_tinyMCE.apply(this, arguments);
+ tinyMCE.activeEditor.windowManager.close();
+ };
+ }
+
+ if (typeof window.SqueezeBoxClose_no_tinyMCE === 'undefined')
+ {
+ if (typeof(SqueezeBox) == 'undefined') SqueezeBox = {};
+ window.SqueezeBoxClose_no_tinyMCE = typeof(SqueezeBox.close) == 'function' ? SqueezeBox.close : false;
+
+ SqueezeBox.close = function () {
+ if (window.SqueezeBoxClose_no_tinyMCE) window.SqueezeBoxClose_no_tinyMCE.apply(this, arguments);
+ tinyMCE.activeEditor.windowManager.close();
+ };
+ }
+ }
+ };
"
);
diff --git a/media/system/js/tiny-close.js b/media/system/js/tiny-close.js
index a62b4143288e4..008b56bf239ba 100644
--- a/media/system/js/tiny-close.js
+++ b/media/system/js/tiny-close.js
@@ -5,35 +5,34 @@
/**
* This is used by tinyMCE in order to allow both mootools and bootstrap modals
- * to close correctly
+ * to close correctly, more tinyMCE related functionality maybe added in the future
*
* @package Joomla
- * @since 3.6
+ * @since 3.5.1
* @version 1.0
*/
-jQuery(window).bind("load", function () {
- if (jModalClose === undefined && typeof(jModalClose) != 'function') {
- var jModalClose;
- jModalClose = function () {
- tinyMCE.activeEditor.windowManager.close();
+document.onreadystatechange = function () {
+ if (document.readyState == "interactive" && typeof tinyMCE != 'undefined' && tinyMCE)
+ {
+ if (typeof window.jModalClose_no_tinyMCE === 'undefined')
+ {
+ window.jModalClose_no_tinyMCE = typeof(jModalClose) == 'function' ? jModalClose : false;
+
+ jModalClose = function () {
+ if (window.jModalClose_no_tinyMCE) window.jModalClose_no_tinyMCE.apply(this, arguments);
+ tinyMCE.activeEditor.windowManager.close();
+ };
}
- } else {
- var oldClose = jModalClose;
- jModalClose = function () {
- oldClose.apply(this, arguments);
- tinyMCE.activeEditor.windowManager.close();
- };
- }
- if (SqueezeBox != undefined) {
- var oldSqueezeBox = SqueezeBox.close;
- SqueezeBox.close = function () {
- oldSqueezeBox.apply(this, arguments);
- tinyMCE.activeEditor.windowManager.close();
- }
- } else {
- var SqueezeBox = {};
- SqueezeBox.close = function () {
- tinyMCE.activeEditor.windowManager.close();
+
+ if (typeof window.SqueezeBoxClose_no_tinyMCE === 'undefined')
+ {
+ if (typeof(SqueezeBox) == 'undefined') SqueezeBox = {};
+ window.SqueezeBoxClose_no_tinyMCE = typeof(SqueezeBox.close) == 'function' ? SqueezeBox.close : false;
+
+ SqueezeBox.close = function () {
+ if (window.SqueezeBoxClose_no_tinyMCE) window.SqueezeBoxClose_no_tinyMCE.apply(this, arguments);
+ tinyMCE.activeEditor.windowManager.close();
+ };
}
}
-});
\ No newline at end of file
+};
diff --git a/media/system/js/tiny-close.min.js b/media/system/js/tiny-close.min.js
index ae63845d46c6f..42d51731023cb 100644
--- a/media/system/js/tiny-close.min.js
+++ b/media/system/js/tiny-close.min.js
@@ -1 +1 @@
-jQuery(window).bind("load",function(){if(void 0===i&&"function"!=typeof i){var i;i=function(){tinyMCE.activeEditor.windowManager.close()}}else{var n=i;i=function(){n.apply(this,arguments),tinyMCE.activeEditor.windowManager.close()}}if(void 0!=e){var o=e.close;e.close=function(){o.apply(this,arguments),tinyMCE.activeEditor.windowManager.close()}}else{var e={};e.close=function(){tinyMCE.activeEditor.windowManager.close()}}});
\ No newline at end of file
+document.onreadystatechange=function(){"interactive"==document.readyState&&"undefined"!=typeof tinyMCE&&tinyMCE&&("undefined"==typeof window.jModalClose_no_tinyMCE&&(window.jModalClose_no_tinyMCE="function"==typeof jModalClose?jModalClose:!1,jModalClose=function(){window.jModalClose_no_tinyMCE&&window.jModalClose_no_tinyMCE.apply(this,arguments),tinyMCE.activeEditor.windowManager.close()}),"undefined"==typeof window.SqueezeBoxClose_no_tinyMCE&&("undefined"==typeof SqueezeBox&&(SqueezeBox={}),window.SqueezeBoxClose_no_tinyMCE="function"==typeof SqueezeBox.close?SqueezeBox.close:!1,SqueezeBox.close=function(){window.SqueezeBoxClose_no_tinyMCE&&window.SqueezeBoxClose_no_tinyMCE.apply(this,arguments),tinyMCE.activeEditor.windowManager.close()}))};
\ No newline at end of file
diff --git a/plugins/editors/tinymce/tinymce.php b/plugins/editors/tinymce/tinymce.php
index d91a6a3503f1c..cf913b7627120 100644
--- a/plugins/editors/tinymce/tinymce.php
+++ b/plugins/editors/tinymce/tinymce.php
@@ -949,7 +949,8 @@ function jInsertEditorText( text, editor )
if (!empty($btnsNames))
{
- JFactory::getDocument()->addScript(JUri::root(true) . '/media/system/js/tiny-close.min.js', null, true, false);
+ $modalFix = JHtml::_('script', 'system/tiny-close.min.js', false, true, true, false, true);
+ JFactory::getDocument()->addScript($modalFix, "text/javascript", true, false);
}
JFactory::getDocument()->addScriptDeclaration($script);