annotate core/modules/ckeditor/js/ckeditor.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 /**
Chris@0 2 * DO NOT EDIT THIS FILE.
Chris@0 3 * See the following change record for more information,
Chris@0 4 * https://www.drupal.org/node/2815083
Chris@0 5 * @preserve
Chris@0 6 **/
Chris@0 7
Chris@0 8 (function (Drupal, debounce, CKEDITOR, $, displace, AjaxCommands) {
Chris@0 9 Drupal.editors.ckeditor = {
Chris@0 10 attach: function attach(element, format) {
Chris@0 11 this._loadExternalPlugins(format);
Chris@0 12
Chris@0 13 format.editorSettings.drupal = {
Chris@0 14 format: format.format
Chris@0 15 };
Chris@0 16
Chris@0 17 var label = $('label[for=' + element.getAttribute('id') + ']').html();
Chris@17 18 format.editorSettings.title = Drupal.t('Rich Text Editor, !label field', {
Chris@17 19 '!label': label
Chris@17 20 });
Chris@0 21
Chris@0 22 return !!CKEDITOR.replace(element, format.editorSettings);
Chris@0 23 },
Chris@0 24 detach: function detach(element, format, trigger) {
Chris@0 25 var editor = CKEDITOR.dom.element.get(element).getEditor();
Chris@0 26 if (editor) {
Chris@0 27 if (trigger === 'serialize') {
Chris@0 28 editor.updateElement();
Chris@0 29 } else {
Chris@0 30 editor.destroy();
Chris@0 31 element.removeAttribute('contentEditable');
Chris@0 32 }
Chris@0 33 }
Chris@0 34 return !!editor;
Chris@0 35 },
Chris@0 36 onChange: function onChange(element, callback) {
Chris@0 37 var editor = CKEDITOR.dom.element.get(element).getEditor();
Chris@0 38 if (editor) {
Chris@0 39 editor.on('change', debounce(function () {
Chris@0 40 callback(editor.getData());
Chris@0 41 }, 400));
Chris@0 42
Chris@0 43 editor.on('mode', function () {
Chris@0 44 var editable = editor.editable();
Chris@0 45 if (!editable.isInline()) {
Chris@0 46 editor.on('autoGrow', function (evt) {
Chris@0 47 var doc = evt.editor.document;
Chris@0 48 var scrollable = CKEDITOR.env.quirks ? doc.getBody() : doc.getDocumentElement();
Chris@0 49
Chris@0 50 if (scrollable.$.scrollHeight < scrollable.$.clientHeight) {
Chris@0 51 scrollable.setStyle('overflow-y', 'hidden');
Chris@0 52 } else {
Chris@0 53 scrollable.removeStyle('overflow-y');
Chris@0 54 }
Chris@0 55 }, null, null, 10000);
Chris@0 56 }
Chris@0 57 });
Chris@0 58 }
Chris@0 59 return !!editor;
Chris@0 60 },
Chris@0 61 attachInlineEditor: function attachInlineEditor(element, format, mainToolbarId, floatedToolbarId) {
Chris@0 62 this._loadExternalPlugins(format);
Chris@0 63
Chris@0 64 format.editorSettings.drupal = {
Chris@0 65 format: format.format
Chris@0 66 };
Chris@0 67
Chris@0 68 var settings = $.extend(true, {}, format.editorSettings);
Chris@0 69
Chris@0 70 if (mainToolbarId) {
Chris@0 71 var settingsOverride = {
Chris@0 72 extraPlugins: 'sharedspace',
Chris@0 73 removePlugins: 'floatingspace,elementspath',
Chris@0 74 sharedSpaces: {
Chris@0 75 top: mainToolbarId
Chris@0 76 }
Chris@0 77 };
Chris@0 78
Chris@0 79 var sourceButtonFound = false;
Chris@0 80 for (var i = 0; !sourceButtonFound && i < settings.toolbar.length; i++) {
Chris@0 81 if (settings.toolbar[i] !== '/') {
Chris@0 82 for (var j = 0; !sourceButtonFound && j < settings.toolbar[i].items.length; j++) {
Chris@0 83 if (settings.toolbar[i].items[j] === 'Source') {
Chris@0 84 sourceButtonFound = true;
Chris@0 85
Chris@0 86 settings.toolbar[i].items[j] = 'Sourcedialog';
Chris@0 87 settingsOverride.extraPlugins += ',sourcedialog';
Chris@0 88 settingsOverride.removePlugins += ',sourcearea';
Chris@0 89 }
Chris@0 90 }
Chris@0 91 }
Chris@0 92 }
Chris@0 93
Chris@0 94 settings.extraPlugins += ',' + settingsOverride.extraPlugins;
Chris@0 95 settings.removePlugins += ',' + settingsOverride.removePlugins;
Chris@0 96 settings.sharedSpaces = settingsOverride.sharedSpaces;
Chris@0 97 }
Chris@0 98
Chris@0 99 element.setAttribute('contentEditable', 'true');
Chris@0 100
Chris@0 101 return !!CKEDITOR.inline(element, settings);
Chris@0 102 },
Chris@0 103 _loadExternalPlugins: function _loadExternalPlugins(format) {
Chris@0 104 var externalPlugins = format.editorSettings.drupalExternalPlugins;
Chris@0 105
Chris@0 106 if (externalPlugins) {
Chris@14 107 Object.keys(externalPlugins || {}).forEach(function (pluginName) {
Chris@14 108 CKEDITOR.plugins.addExternal(pluginName, externalPlugins[pluginName], '');
Chris@14 109 });
Chris@0 110 delete format.editorSettings.drupalExternalPlugins;
Chris@0 111 }
Chris@0 112 }
Chris@0 113 };
Chris@0 114
Chris@0 115 Drupal.ckeditor = {
Chris@0 116 saveCallback: null,
Chris@0 117
Chris@0 118 openDialog: function openDialog(editor, url, existingValues, saveCallback, dialogSettings) {
Chris@0 119 var $target = $(editor.container.$);
Chris@0 120 if (editor.elementMode === CKEDITOR.ELEMENT_MODE_REPLACE) {
Chris@0 121 $target = $target.find('.cke_contents');
Chris@0 122 }
Chris@0 123
Chris@0 124 $target.css('position', 'relative').find('.ckeditor-dialog-loading').remove();
Chris@0 125
Chris@0 126 var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : [];
Chris@0 127 classes.push('ui-dialog--narrow');
Chris@0 128 dialogSettings.dialogClass = classes.join(' ');
Chris@0 129 dialogSettings.autoResize = window.matchMedia('(min-width: 600px)').matches;
Chris@0 130 dialogSettings.width = 'auto';
Chris@0 131
Chris@0 132 var $content = $('<div class="ckeditor-dialog-loading"><span style="top: -40px;" class="ckeditor-dialog-loading-link">' + Drupal.t('Loading...') + '</span></div>');
Chris@0 133 $content.appendTo($target);
Chris@0 134
Chris@0 135 var ckeditorAjaxDialog = Drupal.ajax({
Chris@0 136 dialog: dialogSettings,
Chris@0 137 dialogType: 'modal',
Chris@0 138 selector: '.ckeditor-dialog-loading-link',
Chris@0 139 url: url,
Chris@0 140 progress: { type: 'throbber' },
Chris@0 141 submit: {
Chris@0 142 editor_object: existingValues
Chris@0 143 }
Chris@0 144 });
Chris@0 145 ckeditorAjaxDialog.execute();
Chris@0 146
Chris@0 147 window.setTimeout(function () {
Chris@0 148 $content.find('span').animate({ top: '0px' });
Chris@0 149 }, 1000);
Chris@0 150
Chris@0 151 Drupal.ckeditor.saveCallback = saveCallback;
Chris@0 152 }
Chris@0 153 };
Chris@0 154
Chris@0 155 $(window).on('dialogcreate', function (e, dialog, $element, settings) {
Chris@0 156 $('.ui-dialog--narrow').css('zIndex', CKEDITOR.config.baseFloatZIndex + 1);
Chris@0 157 });
Chris@0 158
Chris@0 159 $(window).on('dialog:beforecreate', function (e, dialog, $element, settings) {
Chris@0 160 $('.ckeditor-dialog-loading').animate({ top: '-40px' }, function () {
Chris@0 161 $(this).remove();
Chris@0 162 });
Chris@0 163 });
Chris@0 164
Chris@0 165 $(window).on('editor:dialogsave', function (e, values) {
Chris@0 166 if (Drupal.ckeditor.saveCallback) {
Chris@0 167 Drupal.ckeditor.saveCallback(values);
Chris@0 168 }
Chris@0 169 });
Chris@0 170
Chris@0 171 $(window).on('dialog:afterclose', function (e, dialog, $element) {
Chris@0 172 if (Drupal.ckeditor.saveCallback) {
Chris@0 173 Drupal.ckeditor.saveCallback = null;
Chris@0 174 }
Chris@0 175 });
Chris@0 176
Chris@0 177 $(document).on('drupalViewportOffsetChange', function () {
Chris@0 178 CKEDITOR.config.autoGrow_maxHeight = 0.7 * (window.innerHeight - displace.offsets.top - displace.offsets.bottom);
Chris@0 179 });
Chris@0 180
Chris@0 181 function redirectTextareaFragmentToCKEditorInstance() {
Chris@17 182 var hash = window.location.hash.substr(1);
Chris@0 183 var element = document.getElementById(hash);
Chris@0 184 if (element) {
Chris@0 185 var editor = CKEDITOR.dom.element.get(element).getEditor();
Chris@0 186 if (editor) {
Chris@0 187 var id = editor.container.getAttribute('id');
Chris@17 188 window.location.replace('#' + id);
Chris@0 189 }
Chris@0 190 }
Chris@0 191 }
Chris@0 192 $(window).on('hashchange.ckeditor', redirectTextareaFragmentToCKEditorInstance);
Chris@0 193
Chris@0 194 CKEDITOR.config.autoGrow_onStartup = true;
Chris@0 195
Chris@0 196 CKEDITOR.timestamp = drupalSettings.ckeditor.timestamp;
Chris@0 197
Chris@0 198 if (AjaxCommands) {
Chris@0 199 AjaxCommands.prototype.ckeditor_add_stylesheet = function (ajax, response, status) {
Chris@0 200 var editor = CKEDITOR.instances[response.editor_id];
Chris@0 201
Chris@0 202 if (editor) {
Chris@0 203 response.stylesheets.forEach(function (url) {
Chris@0 204 editor.document.appendStyleSheet(url);
Chris@0 205 });
Chris@0 206 }
Chris@0 207 };
Chris@0 208 }
Chris@0 209 })(Drupal, Drupal.debounce, CKEDITOR, jQuery, Drupal.displace, Drupal.AjaxCommands);