Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5977585
ItemModel.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
ItemModel.js
View Options
/**
* RCFilter base item model.
*
* @class mw.rcfilters.dm.ItemModel
* @ignore
* @mixes OO.EventEmitter
*
* @param {string} param Filter param name
* @param {Object} config Configuration object
* @param {string} [config.label] The label for the filter
* @param {string} [config.description] The description of the filter
* @param {string|Object} [config.labelPrefixKey] An i18n key defining the prefix label for this
* group. If the prefix has 'invert' state, the parameter is expected to be an object
* with 'default' and 'inverted' as keys.
* @param {boolean} [config.active=true] The filter is active and affecting the result
* @param {boolean} [config.selected] The item is selected
* @param {any} [config.value] The value of this item
* @param {string} [config.namePrefix='item_'] A prefix to add to the param name to act as a unique
* identifier
* @param {string} [config.cssClass] The class identifying the results that match this filter
* @param {string|null} [config.helpLink] Link to a help page for this filter
* @param {string[]} [config.identifiers] An array of identifiers for this item. They will be
* added and considered in the view.
* @param {string} [config.defaultHighlightColor=null] If set, highlight this filter by default with this color
*/
const
ItemModel
=
function
MwRcfiltersDmItemModel
(
param
,
config
)
{
config
=
config
||
{};
// Mixin constructor
OO
.
EventEmitter
.
call
(
this
);
this
.
param
=
param
;
this
.
namePrefix
=
config
.
namePrefix
||
'item_'
;
this
.
name
=
this
.
namePrefix
+
param
;
this
.
label
=
config
.
label
||
this
.
name
;
this
.
labelPrefixKey
=
config
.
labelPrefixKey
;
this
.
description
=
config
.
description
||
''
;
this
.
setValue
(
config
.
value
||
config
.
selected
);
this
.
identifiers
=
config
.
identifiers
||
[];
// Highlight
this
.
cssClass
=
config
.
cssClass
;
this
.
helpLink
=
config
.
helpLink
;
this
.
highlightColor
=
config
.
defaultHighlightColor
||
null
;
};
/* Initialization */
OO
.
initClass
(
ItemModel
);
OO
.
mixinClass
(
ItemModel
,
OO
.
EventEmitter
);
/* Events */
/**
* The state of this filter has changed.
*
* @event update
* @ignore
*/
/* Methods */
/**
* Return the representation of the state of this item.
*
* @return {Object} State of the object
*/
ItemModel
.
prototype
.
getState
=
function
()
{
return
{
selected
:
this
.
isSelected
()
};
};
/**
* Get the name of this filter
*
* @return {string} Filter name
*/
ItemModel
.
prototype
.
getName
=
function
()
{
return
this
.
name
;
};
/**
* Get the message key to use to wrap the label. This message takes the label as a parameter.
*
* @param {boolean} inverted Whether this item should be considered inverted
* @return {string|null} Message key, or null if no message
*/
ItemModel
.
prototype
.
getLabelMessageKey
=
function
(
inverted
)
{
if
(
this
.
labelPrefixKey
)
{
if
(
typeof
this
.
labelPrefixKey
===
'string'
)
{
return
this
.
labelPrefixKey
;
}
return
this
.
labelPrefixKey
[
// Only use inverted-prefix if the item is selected
// Highlight-only an inverted item makes no sense
inverted
&&
this
.
isSelected
()
?
'inverted'
:
'default'
];
}
return
null
;
};
/**
* Get the param name or value of this filter
*
* @return {string} Filter param name
*/
ItemModel
.
prototype
.
getParamName
=
function
()
{
return
this
.
param
;
};
/**
* Get the message representing the state of this model.
*
* @return {string} State message
*/
ItemModel
.
prototype
.
getStateMessage
=
function
()
{
// Display description
return
this
.
getDescription
();
};
/**
* Get the label of this filter
*
* @return {string} Filter label
*/
ItemModel
.
prototype
.
getLabel
=
function
()
{
return
this
.
label
;
};
/**
* Get the description of this filter
*
* @return {string} Filter description
*/
ItemModel
.
prototype
.
getDescription
=
function
()
{
return
this
.
description
;
};
/**
* Get the default value of this filter
*
* @return {boolean} Filter default
*/
ItemModel
.
prototype
.
getDefault
=
function
()
{
return
this
.
default
;
};
/**
* Get the selected state of this filter
*
* @return {boolean} Filter is selected
*/
ItemModel
.
prototype
.
isSelected
=
function
()
{
return
!!
this
.
value
;
};
/**
* Toggle the selected state of the item
*
* @param {boolean} [isSelected] Filter is selected
* @fires update
*/
ItemModel
.
prototype
.
toggleSelected
=
function
(
isSelected
)
{
isSelected
=
isSelected
===
undefined
?
!
this
.
isSelected
()
:
isSelected
;
this
.
setValue
(
isSelected
);
};
/**
* Get the value
*
* @return {any}
*/
ItemModel
.
prototype
.
getValue
=
function
()
{
return
this
.
value
;
};
/**
* Convert a given value to the appropriate representation based on group type
*
* @param {any} value
* @return {any}
*/
ItemModel
.
prototype
.
coerceValue
=
function
(
value
)
{
return
this
.
getGroupModel
().
getType
()
===
'any_value'
?
value
:
!!
value
;
};
/**
* Set the value
*
* @param {any} newValue
*/
ItemModel
.
prototype
.
setValue
=
function
(
newValue
)
{
newValue
=
this
.
coerceValue
(
newValue
);
if
(
this
.
value
!==
newValue
)
{
this
.
value
=
newValue
;
this
.
emit
(
'update'
);
}
};
/**
* Set the highlight color
*
* @param {string|null} highlightColor
*/
ItemModel
.
prototype
.
setHighlightColor
=
function
(
highlightColor
)
{
if
(
!
this
.
isHighlightSupported
()
)
{
return
;
}
// If the highlight color on the item and in the parameter is null/undefined, return early.
if
(
!
this
.
highlightColor
&&
!
highlightColor
)
{
return
;
}
if
(
this
.
highlightColor
!==
highlightColor
)
{
this
.
highlightColor
=
highlightColor
;
this
.
emit
(
'update'
);
}
};
/**
* Clear the highlight color
*/
ItemModel
.
prototype
.
clearHighlightColor
=
function
()
{
this
.
setHighlightColor
(
null
);
};
/**
* Get the highlight color, or null if none is configured
*
* @return {string|null}
*/
ItemModel
.
prototype
.
getHighlightColor
=
function
()
{
return
this
.
highlightColor
;
};
/**
* Get the CSS class that matches changes that fit this filter
* or null if none is configured
*
* @return {string|null}
*/
ItemModel
.
prototype
.
getCssClass
=
function
()
{
return
this
.
cssClass
;
};
/**
* Get a link to a help page for this filter
* or null if none is configured
*
* @return {string|null}
*/
ItemModel
.
prototype
.
getHelpLink
=
function
()
{
return
this
.
helpLink
;
};
/**
* Get the item's identifiers
*
* @return {string[]}
*/
ItemModel
.
prototype
.
getIdentifiers
=
function
()
{
return
this
.
identifiers
;
};
/**
* Check if the highlight feature is supported for this filter
*
* @return {boolean}
*/
ItemModel
.
prototype
.
isHighlightSupported
=
function
()
{
return
!!
this
.
getCssClass
()
&&
!
OO
.
ui
.
isMobile
();
};
/**
* Check if the filter is currently highlighted
*
* @return {boolean}
*/
ItemModel
.
prototype
.
isHighlighted
=
function
()
{
return
!!
this
.
getHighlightColor
();
};
module
.
exports
=
ItemModel
;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 3, 19:59 (2 d, 22 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
76/af/38a8ce3b0c42c221adaef366842f
Default Alt Text
ItemModel.js (6 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment