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