/** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function ($, _, Backbone, Drupal) { let reload = false; Drupal.quickedit.AppView = Backbone.View.extend({ 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(entityModel, state) { const app = this; let entityToolbarView; switch (state) { case 'launching': reload = false; entityToolbarView = new Drupal.quickedit.EntityToolbarView({ model: entityModel, appModel: this.model }); entityModel.toolbarView = entityToolbarView; entityModel.get('fields').each(fieldModel => { app.setupEditor(fieldModel); }); _.defer(() => { entityModel.set('state', 'opening'); }); break; case 'closed': entityToolbarView = entityModel.toolbarView; entityModel.get('fields').each(fieldModel => { app.teardownEditor(fieldModel); }); if (entityToolbarView) { entityToolbarView.remove(); delete entityModel.toolbarView; } if (reload) { reload = false; window.location.reload(); } break; } }, acceptEditorStateChange(from, to, context, fieldModel) { let 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) { let activeField; let activeFieldState; 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(fieldModel) { const entityModel = fieldModel.get('entity'); const entityToolbarView = entityModel.toolbarView; const fieldToolbarRoot = entityToolbarView.getToolbarRoot(); const editorName = fieldModel.get('metadata').editor; const editorModel = new Drupal.quickedit.EditorModel(); const editorView = new Drupal.quickedit.editors[editorName]({ el: $(fieldModel.get('el')), model: editorModel, fieldModel }); const toolbarView = new Drupal.quickedit.FieldToolbarView({ el: fieldToolbarRoot, model: fieldModel, $editedElement: $(editorView.getEditedElement()), editorView, entityModel }); const decorationView = new Drupal.quickedit.FieldDecorationView({ el: $(editorView.getEditedElement()), model: fieldModel, editorView }); fieldModel.editorView = editorView; fieldModel.toolbarView = toolbarView; fieldModel.decorationView = decorationView; }, 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(entityModel) { const that = this; let discardDialog; 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')) { const $unsavedChanges = $(`