123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /**
- * DO NOT EDIT THIS FILE.
- * See the following change record for more information,
- * https://www.drupal.org/node/2815083
- * @preserve
- **/
- (function ($, Drupal, drupalSettings) {
- function findFieldForFormatSelector($formatSelector) {
- var fieldId = $formatSelector.attr('data-editor-for');
- return $('#' + fieldId).get(0);
- }
- function filterXssWhenSwitching(field, format, originalFormatID, callback) {
- if (format.editor.isXssSafe) {
- callback(field, format);
- } else {
- $.ajax({
- url: Drupal.url('editor/filter_xss/' + format.format),
- type: 'POST',
- data: {
- value: field.value,
- original_format_id: originalFormatID
- },
- dataType: 'json',
- success: function success(xssFilteredValue) {
- if (xssFilteredValue !== false) {
- field.value = xssFilteredValue;
- }
- callback(field, format);
- }
- });
- }
- }
- function changeTextEditor(field, newFormatID) {
- var previousFormatID = field.getAttribute('data-editor-active-text-format');
- if (drupalSettings.editor.formats[previousFormatID]) {
- Drupal.editorDetach(field, drupalSettings.editor.formats[previousFormatID]);
- } else {
- $(field).off('.editor');
- }
- if (drupalSettings.editor.formats[newFormatID]) {
- var format = drupalSettings.editor.formats[newFormatID];
- filterXssWhenSwitching(field, format, previousFormatID, Drupal.editorAttach);
- }
- field.setAttribute('data-editor-active-text-format', newFormatID);
- }
- function onTextFormatChange(event) {
- var $select = $(event.target);
- var field = event.data.field;
- var activeFormatID = field.getAttribute('data-editor-active-text-format');
- var newFormatID = $select.val();
- if (newFormatID === activeFormatID) {
- return;
- }
- var supportContentFiltering = drupalSettings.editor.formats[newFormatID] && drupalSettings.editor.formats[newFormatID].editorSupportsContentFiltering;
- var hasContent = field.value !== '';
- if (hasContent && supportContentFiltering) {
- var message = Drupal.t('Changing the text format to %text_format will permanently remove content that is not allowed in that text format.<br><br>Save your changes before switching the text format to avoid losing data.', {
- '%text_format': $select.find('option:selected').text()
- });
- var confirmationDialog = Drupal.dialog('<div>' + message + '</div>', {
- title: Drupal.t('Change text format?'),
- dialogClass: 'editor-change-text-format-modal',
- resizable: false,
- buttons: [{
- text: Drupal.t('Continue'),
- class: 'button button--primary',
- click: function click() {
- changeTextEditor(field, newFormatID);
- confirmationDialog.close();
- }
- }, {
- text: Drupal.t('Cancel'),
- class: 'button',
- click: function click() {
- $select.val(activeFormatID);
- confirmationDialog.close();
- }
- }],
- closeOnEscape: false,
- create: function create() {
- $(this).parent().find('.ui-dialog-titlebar-close').remove();
- },
- beforeClose: false,
- close: function close(event) {
- $(event.target).remove();
- }
- });
- confirmationDialog.showModal();
- } else {
- changeTextEditor(field, newFormatID);
- }
- }
- Drupal.editors = {};
- Drupal.behaviors.editor = {
- attach: function attach(context, settings) {
- if (!settings.editor) {
- return;
- }
- $(context).find('[data-editor-for]').once('editor').each(function () {
- var $this = $(this);
- var field = findFieldForFormatSelector($this);
- if (!field) {
- return;
- }
- var activeFormatID = $this.val();
- field.setAttribute('data-editor-active-text-format', activeFormatID);
- if (settings.editor.formats[activeFormatID]) {
- Drupal.editorAttach(field, settings.editor.formats[activeFormatID]);
- }
- $(field).on('change.editor keypress.editor', function () {
- field.setAttribute('data-editor-value-is-changed', 'true');
- $(field).off('.editor');
- });
- if ($this.is('select')) {
- $this.on('change.editorAttach', { field: field }, onTextFormatChange);
- }
- $this.parents('form').on('submit', function (event) {
- if (event.isDefaultPrevented()) {
- return;
- }
- if (settings.editor.formats[activeFormatID]) {
- Drupal.editorDetach(field, settings.editor.formats[activeFormatID], 'serialize');
- }
- });
- });
- },
- detach: function detach(context, settings, trigger) {
- var editors = void 0;
- if (trigger === 'serialize') {
- editors = $(context).find('[data-editor-for]').findOnce('editor');
- } else {
- editors = $(context).find('[data-editor-for]').removeOnce('editor');
- }
- editors.each(function () {
- var $this = $(this);
- var activeFormatID = $this.val();
- var field = findFieldForFormatSelector($this);
- if (field && activeFormatID in settings.editor.formats) {
- Drupal.editorDetach(field, settings.editor.formats[activeFormatID], trigger);
- }
- });
- }
- };
- Drupal.editorAttach = function (field, format) {
- if (format.editor) {
- Drupal.editors[format.editor].attach(field, format);
- Drupal.editors[format.editor].onChange(field, function () {
- $(field).trigger('formUpdated');
- field.setAttribute('data-editor-value-is-changed', 'true');
- });
- }
- };
- Drupal.editorDetach = function (field, format, trigger) {
- if (format.editor) {
- Drupal.editors[format.editor].detach(field, format, trigger);
- if (field.getAttribute('data-editor-value-is-changed') === 'false') {
- field.value = field.getAttribute('data-editor-value-original');
- }
- }
- };
- })(jQuery, Drupal, drupalSettings);
|