* fix: multi lines and spaces issues * fix: eslint operator-linebreak issue * fix: eslint quotes issue * fix: remaining quotes issues * fix: eslint object curly newline issue * fix: eslint object curly spacing issue * fix: eslint brace-style issues * fix: react jsx indent and props issues * fix: eslint trailing spaces issues * fix: eslint linbreak style issue * fix: eslint space unary operator issue * fix: eslint line around directives issue * fix: void and typeof space unary ops issue
122 lines
3.6 KiB
JavaScript
122 lines
3.6 KiB
JavaScript
define(['backbone'], function(Backbone) {
|
|
/**
|
|
* Model used for metadata setting editors. This model does not do its own saving,
|
|
* as that is done by module_edit.js.
|
|
*/
|
|
var Metadata = Backbone.Model.extend({
|
|
defaults: {
|
|
field_name: null,
|
|
display_name: null,
|
|
value: null,
|
|
explicitly_set: null,
|
|
default_value: null,
|
|
options: null,
|
|
type: null,
|
|
custom: false // Used only for non-metadata fields
|
|
},
|
|
|
|
initialize: function() {
|
|
this.original_value = this.get('value');
|
|
this.original_explicitly_set = this.get('explicitly_set');
|
|
},
|
|
|
|
/**
|
|
* Returns true if the stored value is different, or if the "explicitly_set"
|
|
* property has changed.
|
|
*/
|
|
isModified: function() {
|
|
// A non-metadata field will handle itself
|
|
if (this.get('custom') === true) {
|
|
return false;
|
|
}
|
|
|
|
if (!this.get('explicitly_set') && !this.original_explicitly_set) {
|
|
return false;
|
|
}
|
|
if (this.get('explicitly_set') && this.original_explicitly_set) {
|
|
return this.get('value') !== this.original_value;
|
|
}
|
|
return true;
|
|
},
|
|
|
|
/**
|
|
* Returns true if a non-default/non-inherited value has been set.
|
|
*/
|
|
isExplicitlySet: function() {
|
|
return this.get('explicitly_set');
|
|
},
|
|
|
|
/**
|
|
* The value, as shown in the UI. This may be an inherited or default value.
|
|
*/
|
|
getDisplayValue: function() {
|
|
return this.get('value');
|
|
},
|
|
|
|
/**
|
|
* The value, as should be returned to the server. if 'isExplicitlySet'
|
|
* returns false, this method returns null to indicate that the value
|
|
* is not set at this level.
|
|
*/
|
|
getValue: function() {
|
|
return this.get('explicitly_set') ? this.get('value') : null;
|
|
},
|
|
|
|
/**
|
|
* Sets the displayed value.
|
|
*/
|
|
setValue: function(value) {
|
|
this.set({
|
|
explicitly_set: true,
|
|
value: value
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Returns the field name, which should be used for persisting the metadata
|
|
* field to the server.
|
|
*/
|
|
getFieldName: function() {
|
|
return this.get('field_name');
|
|
},
|
|
|
|
/**
|
|
* Returns the options. This may be a array of possible values, or an object
|
|
* with properties like "max", "min" and "step".
|
|
*/
|
|
getOptions: function() {
|
|
return this.get('options');
|
|
},
|
|
|
|
/**
|
|
* Returns the type of this metadata field. Possible values are SELECT_TYPE,
|
|
* INTEGER_TYPE, and FLOAT_TYPE, GENERIC_TYPE.
|
|
*/
|
|
getType: function() {
|
|
return this.get('type');
|
|
},
|
|
|
|
/**
|
|
* Reverts the value to the default_value specified at construction, and updates the
|
|
* explicitly_set property.
|
|
*/
|
|
clear: function() {
|
|
this.set({
|
|
explicitly_set: false,
|
|
value: this.get('default_value')
|
|
});
|
|
}
|
|
});
|
|
|
|
Metadata.SELECT_TYPE = 'Select';
|
|
Metadata.INTEGER_TYPE = 'Integer';
|
|
Metadata.FLOAT_TYPE = 'Float';
|
|
Metadata.GENERIC_TYPE = 'Generic';
|
|
Metadata.LIST_TYPE = 'List';
|
|
Metadata.DICT_TYPE = 'Dict';
|
|
Metadata.VIDEO_LIST_TYPE = 'VideoList';
|
|
Metadata.RELATIVE_TIME_TYPE = 'RelativeTime';
|
|
|
|
return Metadata;
|
|
});
|