X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueryItemModel.js diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueryItemModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueryItemModel.js new file mode 100644 index 00000000..81c8306c --- /dev/null +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueryItemModel.js @@ -0,0 +1,116 @@ +( function ( mw ) { + /** + * View model for a single saved query + * + * @class + * @mixins OO.EventEmitter + * + * @constructor + * @param {string} id Unique identifier + * @param {string} label Saved query label + * @param {Object} data Saved query data + * @param {Object} [config] Configuration options + * @param {boolean} [default] This item is the default + */ + mw.rcfilters.dm.SavedQueryItemModel = function MwRcfiltersDmSavedQueriesModel( id, label, data, config ) { + config = config || {}; + + // Mixin constructor + OO.EventEmitter.call( this ); + + this.id = id; + this.label = label; + this.data = data; + this.default = !!config.default; + }; + + /* Initialization */ + + OO.initClass( mw.rcfilters.dm.SavedQueryItemModel ); + OO.mixinClass( mw.rcfilters.dm.SavedQueryItemModel, OO.EventEmitter ); + + /* Events */ + + /** + * @event update + * + * Model has been updated + */ + + /* Methods */ + + /** + * Get an object representing the state of this item + * + * @return {Object} Object representing the current data state + * of the object + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.getState = function () { + return { + data: this.getData(), + label: this.getLabel() + }; + }; + + /** + * Get the query's identifier + * + * @return {string} Query identifier + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.getID = function () { + return this.id; + }; + + /** + * Get query label + * + * @return {string} Query label + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.getLabel = function () { + return this.label; + }; + + /** + * Update the query label + * + * @param {string} newLabel New label + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.updateLabel = function ( newLabel ) { + if ( newLabel && this.label !== newLabel ) { + this.label = newLabel; + this.emit( 'update' ); + } + }; + + /** + * Get query data + * + * @return {Object} Object representing parameter and highlight data + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.getData = function () { + return this.data; + }; + + /** + * Check whether this item is the default + * + * @return {boolean} Query is set to be default + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.isDefault = function () { + return this.default; + }; + + /** + * Toggle the default state of this query item + * + * @param {boolean} isDefault Query is default + */ + mw.rcfilters.dm.SavedQueryItemModel.prototype.toggleDefault = function ( isDefault ) { + isDefault = isDefault === undefined ? !this.default : isDefault; + + if ( this.default !== isDefault ) { + this.default = isDefault; + this.emit( 'update' ); + } + }; +}( mediaWiki ) );