123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /**
- * DO NOT EDIT THIS FILE.
- * See the following change record for more information,
- * https://www.drupal.org/node/2815083
- * @preserve
- **/
- (function (CKEDITOR) {
- function findElementByName(element, name) {
- if (element.name === name) {
- return element;
- }
- var found = null;
- element.forEach(function (el) {
- if (el.name === name) {
- found = el;
- return false;
- }
- }, CKEDITOR.NODE_ELEMENT);
- return found;
- }
- CKEDITOR.plugins.add('drupalimagecaption', {
- requires: 'drupalimage',
- beforeInit: function beforeInit(editor) {
- editor.lang.image2.captionPlaceholder = '';
- var placeholderText = editor.config.drupalImageCaption_captionPlaceholderText;
- editor.on('widgetDefinition', function (event) {
- var widgetDefinition = event.data;
- if (widgetDefinition.name !== 'image') {
- return;
- }
- var captionFilterEnabled = editor.config.drupalImageCaption_captionFilterEnabled;
- var alignFilterEnabled = editor.config.drupalImageCaption_alignFilterEnabled;
- CKEDITOR.tools.extend(widgetDefinition.features, {
- caption: {
- requiredContent: 'img[data-caption]'
- },
- align: {
- requiredContent: 'img[data-align]'
- }
- }, true);
- var requiredContent = widgetDefinition.requiredContent.getDefinition();
- requiredContent.attributes['data-align'] = '';
- requiredContent.attributes['data-caption'] = '';
- widgetDefinition.requiredContent = new CKEDITOR.style(requiredContent);
- widgetDefinition.allowedContent.img.attributes['!data-align'] = true;
- widgetDefinition.allowedContent.img.attributes['!data-caption'] = true;
- widgetDefinition.editables.caption.allowedContent = 'a[!href]; em strong cite code br';
- var originalDowncast = widgetDefinition.downcast;
- widgetDefinition.downcast = function (element) {
- var img = findElementByName(element, 'img');
- originalDowncast.call(this, img);
- var caption = this.editables.caption;
- var captionHtml = caption && caption.getData();
- var attrs = img.attributes;
- if (captionFilterEnabled) {
- if (captionHtml) {
- attrs['data-caption'] = captionHtml;
- }
- }
- if (alignFilterEnabled) {
- if (this.data.align !== 'none') {
- attrs['data-align'] = this.data.align;
- }
- }
- if (img.parent.name === 'a') {
- return img.parent;
- }
- return img;
- };
- var originalUpcast = widgetDefinition.upcast;
- widgetDefinition.upcast = function (element, data) {
- if (element.name !== 'img' || !element.attributes['data-entity-type'] || !element.attributes['data-entity-uuid']) {
- return;
- }
- if (element.attributes['data-cke-realelement']) {
- return;
- }
- element = originalUpcast.call(this, element, data);
- var attrs = element.attributes;
- if (element.parent.name === 'a') {
- element = element.parent;
- }
- var retElement = element;
- var caption = void 0;
- if (captionFilterEnabled) {
- caption = attrs['data-caption'];
- delete attrs['data-caption'];
- }
- if (alignFilterEnabled) {
- data.align = attrs['data-align'];
- delete attrs['data-align'];
- }
- data['data-entity-type'] = attrs['data-entity-type'];
- delete attrs['data-entity-type'];
- data['data-entity-uuid'] = attrs['data-entity-uuid'];
- delete attrs['data-entity-uuid'];
- if (captionFilterEnabled) {
- if (element.parent.name === 'p' && caption) {
- var index = element.getIndex();
- var splitBefore = index > 0;
- var splitAfter = index + 1 < element.parent.children.length;
- if (splitBefore) {
- element.parent.split(index);
- }
- index = element.getIndex();
- if (splitAfter) {
- element.parent.split(index + 1);
- }
- element.parent.replaceWith(element);
- retElement = element;
- }
- if (caption) {
- var figure = new CKEDITOR.htmlParser.element('figure');
- caption = new CKEDITOR.htmlParser.fragment.fromHtml(caption, 'figcaption');
- var captionFilter = new CKEDITOR.filter(widgetDefinition.editables.caption.allowedContent);
- captionFilter.applyTo(caption);
- caption.attributes['data-placeholder'] = placeholderText;
- element.replaceWith(figure);
- figure.add(element);
- figure.add(caption);
- figure.attributes.class = editor.config.image2_captionedClass;
- retElement = figure;
- }
- }
- if (alignFilterEnabled) {
- if (data.align === 'center' && (!captionFilterEnabled || !caption)) {
- var p = new CKEDITOR.htmlParser.element('p');
- element.replaceWith(p);
- p.add(element);
- p.addClass(editor.config.image2_alignClasses[1]);
- retElement = p;
- }
- }
- return retElement;
- };
- CKEDITOR.tools.extend(widgetDefinition._mapDataToDialog, {
- align: 'data-align',
- 'data-caption': 'data-caption',
- hasCaption: 'hasCaption'
- });
- var originalCreateDialogSaveCallback = widgetDefinition._createDialogSaveCallback;
- widgetDefinition._createDialogSaveCallback = function (editor, widget) {
- var saveCallback = originalCreateDialogSaveCallback.call(this, editor, widget);
- return function (dialogReturnValues) {
- dialogReturnValues.attributes.hasCaption = !!dialogReturnValues.attributes.hasCaption;
- var actualWidget = saveCallback(dialogReturnValues);
- if (dialogReturnValues.attributes.hasCaption) {
- actualWidget.editables.caption.setAttribute('data-placeholder', placeholderText);
- var captionElement = actualWidget.editables.caption.$;
- if (captionElement.childNodes.length === 1 && captionElement.childNodes.item(0).nodeName === 'BR') {
- captionElement.removeChild(captionElement.childNodes.item(0));
- }
- }
- };
- };
- }, null, null, 20);
- },
- afterInit: function afterInit(editor) {
- var disableButtonIfOnWidget = function disableButtonIfOnWidget(evt) {
- var widget = editor.widgets.focused;
- if (widget && widget.name === 'image') {
- this.setState(CKEDITOR.TRISTATE_DISABLED);
- evt.cancel();
- }
- };
- if (editor.plugins.justify && !editor.config.drupalImageCaption_alignFilterEnabled) {
- var cmd = void 0;
- var commands = ['justifyleft', 'justifycenter', 'justifyright', 'justifyblock'];
- for (var n = 0; n < commands.length; n++) {
- cmd = editor.getCommand(commands[n]);
- cmd.contextSensitive = 1;
- cmd.on('refresh', disableButtonIfOnWidget, null, null, 4);
- }
- }
- }
- });
- })(CKEDITOR);
|