Chris@0: /** Chris@0: * DO NOT EDIT THIS FILE. Chris@0: * See the following change record for more information, Chris@0: * https://www.drupal.org/node/2815083 Chris@0: * @preserve Chris@0: **/ Chris@0: Chris@0: (function (Drupal, debounce, CKEDITOR, $, displace, AjaxCommands) { Chris@0: Drupal.editors.ckeditor = { Chris@0: attach: function attach(element, format) { Chris@0: this._loadExternalPlugins(format); Chris@0: Chris@0: format.editorSettings.drupal = { Chris@0: format: format.format Chris@0: }; Chris@0: Chris@0: var label = $('label[for=' + element.getAttribute('id') + ']').html(); Chris@17: format.editorSettings.title = Drupal.t('Rich Text Editor, !label field', { Chris@17: '!label': label Chris@17: }); Chris@0: Chris@0: return !!CKEDITOR.replace(element, format.editorSettings); Chris@0: }, Chris@0: detach: function detach(element, format, trigger) { Chris@0: var editor = CKEDITOR.dom.element.get(element).getEditor(); Chris@0: if (editor) { Chris@0: if (trigger === 'serialize') { Chris@0: editor.updateElement(); Chris@0: } else { Chris@0: editor.destroy(); Chris@0: element.removeAttribute('contentEditable'); Chris@0: } Chris@0: } Chris@0: return !!editor; Chris@0: }, Chris@0: onChange: function onChange(element, callback) { Chris@0: var editor = CKEDITOR.dom.element.get(element).getEditor(); Chris@0: if (editor) { Chris@0: editor.on('change', debounce(function () { Chris@0: callback(editor.getData()); Chris@0: }, 400)); Chris@0: Chris@0: editor.on('mode', function () { Chris@0: var editable = editor.editable(); Chris@0: if (!editable.isInline()) { Chris@0: editor.on('autoGrow', function (evt) { Chris@0: var doc = evt.editor.document; Chris@0: var scrollable = CKEDITOR.env.quirks ? doc.getBody() : doc.getDocumentElement(); Chris@0: Chris@0: if (scrollable.$.scrollHeight < scrollable.$.clientHeight) { Chris@0: scrollable.setStyle('overflow-y', 'hidden'); Chris@0: } else { Chris@0: scrollable.removeStyle('overflow-y'); Chris@0: } Chris@0: }, null, null, 10000); Chris@0: } Chris@0: }); Chris@0: } Chris@0: return !!editor; Chris@0: }, Chris@0: attachInlineEditor: function attachInlineEditor(element, format, mainToolbarId, floatedToolbarId) { Chris@0: this._loadExternalPlugins(format); Chris@0: Chris@0: format.editorSettings.drupal = { Chris@0: format: format.format Chris@0: }; Chris@0: Chris@0: var settings = $.extend(true, {}, format.editorSettings); Chris@0: Chris@0: if (mainToolbarId) { Chris@0: var settingsOverride = { Chris@0: extraPlugins: 'sharedspace', Chris@0: removePlugins: 'floatingspace,elementspath', Chris@0: sharedSpaces: { Chris@0: top: mainToolbarId Chris@0: } Chris@0: }; Chris@0: Chris@0: var sourceButtonFound = false; Chris@0: for (var i = 0; !sourceButtonFound && i < settings.toolbar.length; i++) { Chris@0: if (settings.toolbar[i] !== '/') { Chris@0: for (var j = 0; !sourceButtonFound && j < settings.toolbar[i].items.length; j++) { Chris@0: if (settings.toolbar[i].items[j] === 'Source') { Chris@0: sourceButtonFound = true; Chris@0: Chris@0: settings.toolbar[i].items[j] = 'Sourcedialog'; Chris@0: settingsOverride.extraPlugins += ',sourcedialog'; Chris@0: settingsOverride.removePlugins += ',sourcearea'; Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: settings.extraPlugins += ',' + settingsOverride.extraPlugins; Chris@0: settings.removePlugins += ',' + settingsOverride.removePlugins; Chris@0: settings.sharedSpaces = settingsOverride.sharedSpaces; Chris@0: } Chris@0: Chris@0: element.setAttribute('contentEditable', 'true'); Chris@0: Chris@0: return !!CKEDITOR.inline(element, settings); Chris@0: }, Chris@0: _loadExternalPlugins: function _loadExternalPlugins(format) { Chris@0: var externalPlugins = format.editorSettings.drupalExternalPlugins; Chris@0: Chris@0: if (externalPlugins) { Chris@14: Object.keys(externalPlugins || {}).forEach(function (pluginName) { Chris@14: CKEDITOR.plugins.addExternal(pluginName, externalPlugins[pluginName], ''); Chris@14: }); Chris@0: delete format.editorSettings.drupalExternalPlugins; Chris@0: } Chris@0: } Chris@0: }; Chris@0: Chris@0: Drupal.ckeditor = { Chris@0: saveCallback: null, Chris@0: Chris@0: openDialog: function openDialog(editor, url, existingValues, saveCallback, dialogSettings) { Chris@0: var $target = $(editor.container.$); Chris@0: if (editor.elementMode === CKEDITOR.ELEMENT_MODE_REPLACE) { Chris@0: $target = $target.find('.cke_contents'); Chris@0: } Chris@0: Chris@0: $target.css('position', 'relative').find('.ckeditor-dialog-loading').remove(); Chris@0: Chris@0: var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : []; Chris@0: classes.push('ui-dialog--narrow'); Chris@0: dialogSettings.dialogClass = classes.join(' '); Chris@0: dialogSettings.autoResize = window.matchMedia('(min-width: 600px)').matches; Chris@0: dialogSettings.width = 'auto'; Chris@0: Chris@0: var $content = $('
' + Drupal.t('Loading...') + '
'); Chris@0: $content.appendTo($target); Chris@0: Chris@0: var ckeditorAjaxDialog = Drupal.ajax({ Chris@0: dialog: dialogSettings, Chris@0: dialogType: 'modal', Chris@0: selector: '.ckeditor-dialog-loading-link', Chris@0: url: url, Chris@0: progress: { type: 'throbber' }, Chris@0: submit: { Chris@0: editor_object: existingValues Chris@0: } Chris@0: }); Chris@0: ckeditorAjaxDialog.execute(); Chris@0: Chris@0: window.setTimeout(function () { Chris@0: $content.find('span').animate({ top: '0px' }); Chris@0: }, 1000); Chris@0: Chris@0: Drupal.ckeditor.saveCallback = saveCallback; Chris@0: } Chris@0: }; Chris@0: Chris@0: $(window).on('dialogcreate', function (e, dialog, $element, settings) { Chris@0: $('.ui-dialog--narrow').css('zIndex', CKEDITOR.config.baseFloatZIndex + 1); Chris@0: }); Chris@0: Chris@0: $(window).on('dialog:beforecreate', function (e, dialog, $element, settings) { Chris@0: $('.ckeditor-dialog-loading').animate({ top: '-40px' }, function () { Chris@0: $(this).remove(); Chris@0: }); Chris@0: }); Chris@0: Chris@0: $(window).on('editor:dialogsave', function (e, values) { Chris@0: if (Drupal.ckeditor.saveCallback) { Chris@0: Drupal.ckeditor.saveCallback(values); Chris@0: } Chris@0: }); Chris@0: Chris@0: $(window).on('dialog:afterclose', function (e, dialog, $element) { Chris@0: if (Drupal.ckeditor.saveCallback) { Chris@0: Drupal.ckeditor.saveCallback = null; Chris@0: } Chris@0: }); Chris@0: Chris@0: $(document).on('drupalViewportOffsetChange', function () { Chris@0: CKEDITOR.config.autoGrow_maxHeight = 0.7 * (window.innerHeight - displace.offsets.top - displace.offsets.bottom); Chris@0: }); Chris@0: Chris@0: function redirectTextareaFragmentToCKEditorInstance() { Chris@17: var hash = window.location.hash.substr(1); Chris@0: var element = document.getElementById(hash); Chris@0: if (element) { Chris@0: var editor = CKEDITOR.dom.element.get(element).getEditor(); Chris@0: if (editor) { Chris@0: var id = editor.container.getAttribute('id'); Chris@17: window.location.replace('#' + id); Chris@0: } Chris@0: } Chris@0: } Chris@0: $(window).on('hashchange.ckeditor', redirectTextareaFragmentToCKEditorInstance); Chris@0: Chris@0: CKEDITOR.config.autoGrow_onStartup = true; Chris@0: Chris@0: CKEDITOR.timestamp = drupalSettings.ckeditor.timestamp; Chris@0: Chris@0: if (AjaxCommands) { Chris@0: AjaxCommands.prototype.ckeditor_add_stylesheet = function (ajax, response, status) { Chris@0: var editor = CKEDITOR.instances[response.editor_id]; Chris@0: Chris@0: if (editor) { Chris@0: response.stylesheets.forEach(function (url) { Chris@0: editor.document.appendStyleSheet(url); Chris@0: }); Chris@0: } Chris@0: }; Chris@0: } Chris@0: })(Drupal, Drupal.debounce, CKEDITOR, jQuery, Drupal.displace, Drupal.AjaxCommands);