/** * Theme logic. * * @abstract * @class * * @constructor * @param {Object} [config] Configuration options */ OO.ui.Theme = function OoUiTheme( config ) { // Configuration initialization config = config || {}; }; /* Setup */ OO.initClass( OO.ui.Theme ); /* Methods */ /** * Get a list of classes to be applied to a widget. * * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes, * otherwise state transitions will not work properly. * * @param {OO.ui.Element} element Element for which to get classes * @return {Object.} Categorized class names with `on` and `off` lists */ OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) { return { on: [], off: [] }; }; /** * Update CSS classes provided by the theme. * * For elements with theme logic hooks, this should be called any time there's a state change. * * @param {OO.ui.Element} element Element for which to update classes * @return {Object.} Categorized class names with `on` and `off` lists */ OO.ui.Theme.prototype.updateElementClasses = function ( element ) { var classes = this.getElementClasses( element ); element.$element .removeClass( classes.off.join( ' ' ) ) .addClass( classes.on.join( ' ' ) ); };