drupal/core/modules/quickedit/js/models/FieldModel.js

92 lines
2.6 KiB
JavaScript

/**
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function (_, Backbone, Drupal) {
Drupal.quickedit.FieldModel = Drupal.quickedit.BaseModel.extend({
defaults: {
el: null,
fieldID: null,
id: null,
entity: null,
metadata: null,
acceptStateChange: null,
logicalFieldID: null,
state: 'inactive',
isChanged: false,
inTempStore: false,
html: null,
htmlForOtherViewModes: null
},
initialize: function initialize(options) {
this.set('html', options.el.outerHTML);
this.get('entity').get('fields').add(this);
this.set('logicalFieldID', this.get('fieldID').split('/').slice(0, 4).join('/'));
Drupal.quickedit.BaseModel.prototype.initialize.call(this, options);
},
destroy: function destroy(options) {
if (this.get('state') !== 'inactive') {
throw new Error('FieldModel cannot be destroyed if it is not inactive state.');
}
Drupal.quickedit.BaseModel.prototype.destroy.call(this, options);
},
sync: function sync() {},
validate: function validate(attrs, options) {
var current = this.get('state');
var next = attrs.state;
if (current !== next) {
if (_.indexOf(this.constructor.states, next) === -1) {
return '"' + next + '" is an invalid state';
}
if (!this.get('acceptStateChange')(current, next, options, this)) {
return 'state change not accepted';
}
}
},
getEntityID: function getEntityID() {
return this.get('fieldID').split('/').slice(0, 2).join('/');
},
getViewMode: function getViewMode() {
return this.get('fieldID').split('/').pop();
},
findOtherViewModes: function findOtherViewModes() {
var currentField = this;
var otherViewModes = [];
Drupal.quickedit.collections.fields.where({ logicalFieldID: currentField.get('logicalFieldID') }).forEach(function (field) {
if (field !== currentField && field.get('fieldID') !== currentField.get('fieldID')) {
otherViewModes.push(field.getViewMode());
}
});
return otherViewModes;
}
}, {
states: ['inactive', 'candidate', 'highlighted', 'activating', 'active', 'changed', 'saving', 'saved', 'invalid'],
followsStateSequence: function followsStateSequence(from, to) {
return _.indexOf(this.states, from) < _.indexOf(this.states, to);
}
});
Drupal.quickedit.FieldCollection = Backbone.Collection.extend({
model: Drupal.quickedit.FieldModel
});
})(_, Backbone, Drupal);