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