/** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function ($, _, Backbone, Drupal) { var reload = false; Drupal.quickedit.AppView = Backbone.View.extend({ initialize: function initialize(options) { this.activeFieldStates = ['activating', 'active']; this.singleFieldStates = ['highlighted', 'activating', 'active']; this.changedFieldStates = ['changed', 'saving', 'saved', 'invalid']; this.readyFieldStates = ['candidate', 'highlighted']; this.listenTo(options.entitiesCollection, 'change:state', this.appStateChange); this.listenTo(options.entitiesCollection, 'change:isActive', this.enforceSingleActiveEntity); this.listenTo(options.fieldsCollection, 'change:state', this.editorStateChange); this.listenTo(options.fieldsCollection, 'change:html', this.renderUpdatedField); this.listenTo(options.fieldsCollection, 'change:html', this.propagateUpdatedField); this.listenTo(options.fieldsCollection, 'add', this.rerenderedFieldToCandidate); this.listenTo(options.fieldsCollection, 'destroy', this.teardownEditor); }, appStateChange: function appStateChange(entityModel, state) { var app = this; var entityToolbarView = void 0; switch (state) { case 'launching': reload = false; entityToolbarView = new Drupal.quickedit.EntityToolbarView({ model: entityModel, appModel: this.model }); entityModel.toolbarView = entityToolbarView; entityModel.get('fields').each(function (fieldModel) { app.setupEditor(fieldModel); }); _.defer(function () { entityModel.set('state', 'opening'); }); break; case 'closed': entityToolbarView = entityModel.toolbarView; entityModel.get('fields').each(function (fieldModel) { app.teardownEditor(fieldModel); }); if (entityToolbarView) { entityToolbarView.remove(); delete entityModel.toolbarView; } if (reload) { reload = false; location.reload(); } break; } }, acceptEditorStateChange: function acceptEditorStateChange(from, to, context, fieldModel) { var accept = true; if (context && (context.reason === 'stop' || context.reason === 'rerender')) { if (from === 'candidate' && to === 'inactive') { accept = true; } } else { if (!Drupal.quickedit.FieldModel.followsStateSequence(from, to)) { accept = false; if (_.indexOf(this.activeFieldStates, from) !== -1 && to === 'candidate') { accept = true; } else if ((from === 'changed' || from === 'invalid') && to === 'candidate') { accept = true; } else if (from === 'highlighted' && to === 'candidate') { accept = true; } else if (from === 'saved' && to === 'candidate') { accept = true; } else if (from === 'invalid' && to === 'saving') { accept = true; } else if (from === 'invalid' && to === 'activating') { accept = true; } } if (accept) { var activeField = void 0; var activeFieldState = void 0; if ((this.readyFieldStates.indexOf(from) !== -1 || from === 'invalid') && this.activeFieldStates.indexOf(to) !== -1) { activeField = this.model.get('activeField'); if (activeField && activeField !== fieldModel) { activeFieldState = activeField.get('state'); if (this.activeFieldStates.indexOf(activeFieldState) !== -1) { activeField.set('state', 'candidate'); } else if (activeFieldState === 'changed' || activeFieldState === 'invalid') { activeField.set('state', 'saving'); } if (from === 'invalid') { this.model.set('activeField', fieldModel); accept = false; } } } else if (_.indexOf(this.activeFieldStates, from) !== -1 && to === 'candidate') { if (context && context.reason === 'mouseleave') { accept = false; } } else if ((from === 'changed' || from === 'invalid') && to === 'candidate') { if (context && context.reason === 'mouseleave') { accept = false; } else if (context && context.confirmed) { accept = true; } } } } return accept; }, setupEditor: function setupEditor(fieldModel) { var entityModel = fieldModel.get('entity'); var entityToolbarView = entityModel.toolbarView; var fieldToolbarRoot = entityToolbarView.getToolbarRoot(); var editorName = fieldModel.get('metadata').editor; var editorModel = new Drupal.quickedit.EditorModel(); var editorView = new Drupal.quickedit.editors[editorName]({ el: $(fieldModel.get('el')), model: editorModel, fieldModel: fieldModel }); var toolbarView = new Drupal.quickedit.FieldToolbarView({ el: fieldToolbarRoot, model: fieldModel, $editedElement: $(editorView.getEditedElement()), editorView: editorView, entityModel: entityModel }); var decorationView = new Drupal.quickedit.FieldDecorationView({ el: $(editorView.getEditedElement()), model: fieldModel, editorView: editorView }); fieldModel.editorView = editorView; fieldModel.toolbarView = toolbarView; fieldModel.decorationView = decorationView; }, teardownEditor: function teardownEditor(fieldModel) { if (typeof fieldModel.editorView === 'undefined') { return; } fieldModel.toolbarView.remove(); delete fieldModel.toolbarView; fieldModel.decorationView.remove(); delete fieldModel.decorationView; fieldModel.editorView.remove(); delete fieldModel.editorView; }, confirmEntityDeactivation: function confirmEntityDeactivation(entityModel) { var that = this; var discardDialog = void 0; function closeDiscardDialog(action) { discardDialog.close(action); that.model.set('activeModal', null); if (action === 'save') { entityModel.set('state', 'committing', { confirmed: true }); } else { entityModel.set('state', 'deactivating', { confirmed: true }); if (entityModel.get('reload')) { reload = true; entityModel.set('reload', false); } } } if (!this.model.get('activeModal')) { var $unsavedChanges = $('
' + Drupal.t('You have unsaved changes') + '
'); discardDialog = Drupal.dialog($unsavedChanges.get(0), { title: Drupal.t('Discard changes?'), dialogClass: 'quickedit-discard-modal', resizable: false, buttons: [{ text: Drupal.t('Save'), click: function click() { closeDiscardDialog('save'); }, primary: true }, { text: Drupal.t('Discard changes'), click: function click() { closeDiscardDialog('discard'); } }], closeOnEscape: false, create: function create() { $(this).parent().find('.ui-dialog-titlebar-close').remove(); }, beforeClose: false, close: function close(event) { $(event.target).remove(); } }); this.model.set('activeModal', discardDialog); discardDialog.showModal(); } }, editorStateChange: function editorStateChange(fieldModel, state) { var from = fieldModel.previous('state'); var to = state; if (_.indexOf(this.singleFieldStates, to) !== -1 && this.model.get('highlightedField') !== fieldModel) { this.model.set('highlightedField', fieldModel); } else if (this.model.get('highlightedField') === fieldModel && to === 'candidate') { this.model.set('highlightedField', null); } if (_.indexOf(this.activeFieldStates, to) !== -1 && this.model.get('activeField') !== fieldModel) { this.model.set('activeField', fieldModel); } else if (this.model.get('activeField') === fieldModel && to === 'candidate') { if (from === 'changed' || from === 'invalid') { fieldModel.editorView.revert(); } this.model.set('activeField', null); } }, renderUpdatedField: function renderUpdatedField(fieldModel, html, options) { var $fieldWrapper = $(fieldModel.get('el')); var $context = $fieldWrapper.parent(); var renderField = function renderField() { fieldModel.destroy(); $fieldWrapper.replaceWith(html); Drupal.attachBehaviors($context.get(0)); }; if (!options.propagation) { _.defer(function () { fieldModel.set('state', 'candidate'); _.defer(function () { fieldModel.set('state', 'inactive', { reason: 'rerender' }); renderField(); }); }); } else { renderField(); } }, propagateUpdatedField: function propagateUpdatedField(updatedField, html, options) { if (options.propagation) { return; } var htmlForOtherViewModes = updatedField.get('htmlForOtherViewModes'); Drupal.quickedit.collections.fields.where({ logicalFieldID: updatedField.get('logicalFieldID') }).forEach(function (field) { if (field === updatedField) {} else if (field.getViewMode() === updatedField.getViewMode()) { field.set('html', updatedField.get('html')); } else if (field.getViewMode() in htmlForOtherViewModes) { field.set('html', htmlForOtherViewModes[field.getViewMode()], { propagation: true }); } }); }, rerenderedFieldToCandidate: function rerenderedFieldToCandidate(fieldModel) { var activeEntity = Drupal.quickedit.collections.entities.findWhere({ isActive: true }); if (!activeEntity) { return; } if (fieldModel.get('entity') === activeEntity) { this.setupEditor(fieldModel); fieldModel.set('state', 'candidate'); } }, enforceSingleActiveEntity: function enforceSingleActiveEntity(changedEntityModel) { if (changedEntityModel.get('isActive') === false) { return; } changedEntityModel.collection.chain().filter(function (entityModel) { return entityModel.get('isActive') === true && entityModel !== changedEntityModel; }).each(function (entityModel) { entityModel.set('state', 'deactivating'); }); } }); })(jQuery, _, Backbone, Drupal);