UNPKG

routebar

Version:

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

101 lines (93 loc) 3.32 kB
define(['utils', 'IControl', 'errors'], function(Utils, IControl, Errors) { "use strict"; /** * @class * Класс управления панелью с помощью клавиш на клавиатуре. * @param {JQuery} mainDiv - элемент, в котором располагается панель. Должен содержать класс rb-wrapper. * @param {function} actionFn - функция, определяющая действие при переходе в одну из сторон (Moving.prototype._moveByActionValue) * @constructor KeydownControl * @extends IControl */ function KeydownControl(mainDiv, actionFn) { if (!(mainDiv instanceof $)) { throw new Errors.ArgumentError('mainDiv', mainDiv); } if (typeof actionFn !== 'function') { throw new Errors.ArgumentError('actionFn', actionFn); } this._isEnable = false; this._mainDiv = mainDiv; this._actionFn = actionFn; } Utils.inherite(KeydownControl, IControl); /** * Применить конфигурацию. Учитывает опции leftKey, topKey, rightKey, bottomKey. * @param {Moving~config} config * @memberOf KeydownControl */ KeydownControl.prototype.configure = function(config) { if (typeof config === 'object') { if (config.leftKey !== undefined) { this._leftKey = config.leftKey; } if (config.topKey !== undefined) { this._topKey = config.topKey; } if (config.rightKey !== undefined) { this._rightKey = config.rightKey; } if (config.bottomKey !== undefined) { this._bottomKey = config.bottomKey; } } }; /** * * @returns {boolean} * @memberOf KeydownControl */ KeydownControl.prototype.isEnable = function() { return this._isEnable; }; /** * * @memberOf KeydownControl */ KeydownControl.prototype.enable = function() { if (this._isEnable) return; var self = this; var baseHandler = function(e) { self._actionFn(e.which, [self._leftKey, self._topKey, self._rightKey, self._bottomKey], function(value, defValue) { return value === defValue; }); self._actionFn(e.key, [self._leftKey, self._topKey, self._rightKey, self._bottomKey], function(value, defValue) { return value === defValue; }); e.stopPropagation(); }; var mainDivHandler = function(e) { baseHandler(e); }; this._mainDiv.on('keydown', mainDivHandler); this._mainDivHandler = mainDivHandler; this._isEnable = true; }; /** * * @memberOf KeydownControl */ KeydownControl.prototype.disable = function() { if (!this._isEnable) return; this._mainDiv.off('keydown', this._mainDivHandler); this._mainDivHandler = null; this._isEnable = false; }; /** * * @memberOf KeydownControl */ KeydownControl.prototype.destroy = function() { this.disable(); }; return KeydownControl; });