UNPKG

routebar

Version:

A visual component for navigating between panel cells containing user content.

170 lines (164 loc) 7.19 kB
define([], function() { "use strict"; // todo может быть можно унаследовать от IPlugin? // todo а почему это класс, а не модуль? /** * @class * Менеджер управлений панелью. * @constructor ControlManager */ function ControlManager() { this._controls = {}; } /** * Добавляет экземпляр управления панелью к общему набору экземпляров, которыми можно управлять панелью. * @param {string} id - название экземпляра управления панелью * @param {IControl} control - добавляемый экземпляр управления панелью * @param {boolean} [doEnable] - включать управление панелью при добавлении * @returns {ControlManager} менеджер управления панелью * @memberOf ControlManager */ ControlManager.prototype.add = function(id, control, doEnable) { if (this._controls.hasOwnProperty(id)) { console.log('ControlManager - add - control already exists: ' + id); } else { this._controls[id] = control; if (doEnable) { this.enable(id); } } return this; }; /** * Удаляет экземпляр управления панелью из общего набора экземпляров * @param {string} id - название экземпляра управления панелью * @returns {ControlManager} менеджер управления панелью * @memberOf ControlManager */ ControlManager.prototype.remove = function(id) { if (this._controls.hasOwnProperty(id)) { delete this._controls[id]; } else { console.log('ControlManager - remove - control not found: ' + id); } return this; }; /** * Возвращает флаг, является ли экземпляр управления включенным. * @param {string} id - название экземпляра * @returns {boolean|null} - true если включен, false если выключен, null если не найден * @memberOf ControlManager */ ControlManager.prototype.isEnable = function(id) { if (this._controls.hasOwnProperty(id)) { return this._controls[id].isEnable(); } else { //todo выводить как-то иначе console.log('ControlManager - isEnable - control not found: ' + id); } return null; }; /** * Включить экземпляр управления панелью. * @param {string} id - название экземпляра * @returns {ControlManager} менеджер управления панелью * @memberOf ControlManager */ ControlManager.prototype.enable = function(id) { if (this._controls.hasOwnProperty(id)) { this._controls[id].enable(); } else { console.log('ControlManager - enable - control not found: ' + id); } return this; }; /** * Выключить экземпляр управления панелью. * @param {string} id - название экземпляра * @returns {ControlManager} менеджер управления панелью * @memberOf ControlManager */ ControlManager.prototype.disable = function(id) { if (this._controls.hasOwnProperty(id)) { this._controls[id].disable(); } else { console.log('ControlManager - disable - control not found: ' + id); } return this; }; ControlManager.prototype._doAll = function(isEnable) { var res = {}; for (var id in this._controls) { if (this._controls.hasOwnProperty(id)) { res[id] = this.isEnable(id); if (isEnable) { this.enable(id); } else { this.disable(id); } } } return res; }; /** * Выключить все экземпляры управления панелью. * @returns {Object.<string, boolean>} Объект, сопоставляющий название экземпляра управления со значением, * был ли этот экземпляр включен перед применением функции. * @see {@link ControlManager#enableByValues} * @memberOf ControlManager */ ControlManager.prototype.disableAll = function() { return this._doAll(false); }; /** * Включить все экземпляры управления панелью. * @returns {Object.<string, boolean>} Объект, сопоставляющий название экземпляра управления со значением, * был ли этот экземпляр включен перед применением функции. * @see {@link ControlManager#enableByValues} * @memberOf ControlManager */ ControlManager.prototype.enableAll = function() { return this._doAll(true); }; /** * Функция включения экземпляров управления панелью по маске включения * @param {Object.<string, boolean>} values - Объект, сопоставляющий название экземпляра управления с флагом, * включать ли данный экземпляр управления или выключать. * @returns {ControlManager} менеджер управления панелью * @memberOf ControlManager */ ControlManager.prototype.enableByValues = function(values) { for (var id in values) { if (values.hasOwnProperty(id)) { if (values[id]) { this.enable(id); } else { this.disable(id); } } } return this; }; /** * Применить конфигурацию к панели. Применяет конфигурацию к списку экземпляров управления панелью. * @param {Moving~config} config - конфигурация * @memberOf ControlManager * @see {@link IControl#configure} */ ControlManager.prototype.configure = function(config) { for (var name in this._controls) { if (this._controls.hasOwnProperty(name)) { this._controls[name].configure(config); } } }; /** * Уничтожить экземпляр ControlManager * @memberOf ControlManager */ ControlManager.prototype.destroy = function() { this.disableAll(); this._controls = null; }; return ControlManager; });