From 80ab9d76705df13d84e897ac6d47008b962e862a Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 18 Oct 2015 17:16:34 -0400 Subject: [PATCH] Lazy-load ckeditor.js --- CRM/Admin/Page/CKEditorConfig.php | 3 ++- CRM/Core/Resources.php | 1 - js/wysiwyg/crm.ckeditor.js | 24 +++++++++++++++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/CRM/Admin/Page/CKEditorConfig.php b/CRM/Admin/Page/CKEditorConfig.php index b189c2a8d1..138566f33d 100644 --- a/CRM/Admin/Page/CKEditorConfig.php +++ b/CRM/Admin/Page/CKEditorConfig.php @@ -67,6 +67,7 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { } CRM_Core_Resources::singleton() + ->addScriptFile('civicrm', 'bower_components/ckeditor/ckeditor.js', 0, 'html-header') ->addScriptFile('civicrm', 'bower_components/ckeditor/samples/toolbarconfigurator/js/fulltoolbareditor.js', 1) ->addScriptFile('civicrm', 'bower_components/ckeditor/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js', 2) ->addScriptFile('civicrm', 'bower_components/ckeditor/samples/toolbarconfigurator/js/toolbarmodifier.js', 3) @@ -193,7 +194,7 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { */ public static function getConfigUrl() { if (self::getConfigFile()) { - return Civi::paths()->getUrl(self::CONFIG_FILENAME); + return Civi::paths()->getUrl(self::CONFIG_FILENAME, 'absolute'); } return NULL; } diff --git a/CRM/Core/Resources.php b/CRM/Core/Resources.php index 96c0c844f0..39ae78a90c 100644 --- a/CRM/Core/Resources.php +++ b/CRM/Core/Resources.php @@ -726,7 +726,6 @@ class CRM_Core_Resources { $editor = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'editor_id'); $items[] = "js/wysiwyg/crm.wysiwyg.js"; if ($editor == "CKEditor") { - $items[] = "bower_components/ckeditor/ckeditor.js"; $items[] = "js/wysiwyg/crm.ckeditor.js"; $ckConfig = CRM_Admin_Page_CKEditorConfig::getConfigUrl(); if ($ckConfig) { diff --git a/js/wysiwyg/crm.ckeditor.js b/js/wysiwyg/crm.ckeditor.js index ff0126693d..b91c0eab17 100644 --- a/js/wysiwyg/crm.ckeditor.js +++ b/js/wysiwyg/crm.ckeditor.js @@ -1,5 +1,6 @@ // https://civicrm.org/licensing (function($, _) { + var scriptLoaded = false; function getInstance(item) { var name = $(item).attr("name"), @@ -12,11 +13,20 @@ } } + function loadScript(url) { + var deferred = $.Deferred(), + script = document.createElement('script'); + script.onload = function() {deferred.resolve();}; + script.src = url; + document.getElementsByTagName("head")[0].appendChild(script); + return deferred; + } + CRM.wysiwyg.supportsFileUploads = true; CRM.wysiwyg.create = function(item) { var deferred = $.Deferred(); - + function onReady() { var debounce, editor = this; @@ -71,7 +81,15 @@ } if ($(item).length) { - initialize(); + // Lazy-load ckeditor.js + if (window.CKEDITOR) { + initialize(); + } else { + if (scriptLoaded === false) { + scriptLoaded = loadScript(CRM.config.userFrameworkResourceURL + 'bower_components/ckeditor/ckeditor.js'); + } + scriptLoaded.done(initialize); + } } else { deferred.reject(); } @@ -118,7 +136,7 @@ CRM.wysiwyg._insertIntoTextarea(item, text); } }; - + CRM.wysiwyg.focus = function(item) { var editor = getInstance(item); if (editor) { -- 2.25.1