Files
simple-bookreader/client/islets/core/y-block-mixin/y-block-mixin.js
Oleg Mokhov f3546ef3a5 Release
2015-06-20 14:48:34 +05:00

71 lines
2.1 KiB
JavaScript

modules.define(
'y-block-mixin',
['inherit', 'y-event-emitter', 'y-event-manager'],
function (provide, inherit, YEventEmitter, YEventManager) {
var YBlockMixin = inherit(YEventEmitter, {
__constructor: function (blockInstance, options) {
this._block = blockInstance;
this._options = options;
this._eventManager = new YEventManager(this);
},
_getBlock: function () {
return this._block;
},
_bindTo: function (emitter, event, callback) {
this._eventManager.bindTo(emitter, event, callback);
return this;
}
}, {
/**
* Возвращает имя миксина.
* Этот метод следует перекрывать при создании новых миксинов.
*
* @static
* @returns {String|null}
*
* @example
* provide(inherit(YBlockMixin, {}, {
* getMixinName: function() {
* return 'auto-focus';
* }
* });
*/
getMixinName: function () {
return 'y-block-mixin';
},
fromBlock: function (blockInstance, options) {
var mixinName = this.getMixinName();
var mixins = this._getMixinsFromDomNode(blockInstance.getDomNode());
if (!mixins[mixinName]) {
var Mixin = this;
mixins[mixinName] = new Mixin(blockInstance, options);
}
return mixins[mixinName];
},
/**
* Возвращает инстанции миксинов для данного DOM-элемента.
*
* @param {jQuery} domNode
* @param {Boolean} [skipCreating]
*/
_getMixinsFromDomNode: function (domNode, skipCreating) {
var data = domNode.data(this._mixinsStorageKey);
if (!data && !skipCreating) {
data = {};
domNode.data(this._mixinsStorageKey, data);
}
return data;
},
_mixinsStorageKey: 'y-block-mixin'
});
provide(YBlockMixin);
});