Files
kit/assets/UserActionManager/UserActionManager.js
T
2021-10-06 22:13:08 +03:00

191 lines
6.1 KiB
JavaScript

/** @module UserActionManager */
/**
* в разработке
*/
kit.PluginManager.register('UserActionManager',function(module, exports, require, global) {
var Collection = require('collection');
var support = require('support');
var actionList = ['popover', 'hint'];
var UserAction = function () {
this.parentActionHandler = this.parentAction.bind(this);
this.documentListenerHandler = this.documentListener.bind(this);
this.nodeActionHandler = this.nodeAction.bind(this);
this.clickHandlerCollection = new Collection([]);
this.dblclickHandlerCollection = new Collection([]);
this.mouseoverHandlerCollection = new Collection([]);
this.mouseoutHandlerCollection = new Collection([]);
this.handleEvent = function(event) {
switch(event.type) {
case 'mouseover':
this.mouseoverHandlerCollection.each(function (event, ) {
item
});
break;
case 'mouseout':
this.options.hover(event, _thisMenuItem, MenuList[_thisMenuItem.parentId]);
break;
case 'click':
this.options.click(event, _thisMenuItem, MenuList[_thisMenuItem.parentId]);
break;
case 'dblclick':
this.options.dblclick(event, _thisMenuItem, MenuList[_thisMenuItem.parentId]);
break;
}
};
};
var proto = UserAction.prototype;
proto.documentListener = function(event) {
if(this.options.eventType === 'click') {
if (this.needHideByParent(event.target)) {
this.toggle();
}
}
};
proto.parentAction = function (event) {
event.stopPropagation();
// event.stopImmediatePropagation();
switch (event.type) {
case 'mouseout':
if (this.needHideByParent(event.relatedTarget)) {
this.hideNodeDeferred();
}
break;
case 'mouseover':
this.showNode();
break;
case 'click':
this.toggle();
break;
}
};
proto.nodeAction = function (event) {
event.stopPropagation();
// event.stopImmediatePropagation();
switch (event.type) {
case 'mouseout':
break;
case 'mouseover':
break;
case 'mouseleave':
if(this.options.eventType === 'hover') {
this.hideNodeDeferred();
}
break;
case 'mouseenter':
this.deferredHideCancel();
break;
}
};
proto.addDocumentEventListener = function() {
document.addEventListener('click', this.documentListenerHandler, false);
};
proto.removeDocumentEventListener = function() {
document.removeEventListener('click', this.documentListenerHandler, false);
};
proto.removeParentEventListener = function() {
// console.log('Menu: removeParentEventListener');
if(this.node instanceof Element) {
this.node.classList.remove('active');
this.node.removeEventListener('click', this.parentActionHandler, false);
this.node.removeEventListener('mouseover', this.parentActionHandler, false);
this.node.removeEventListener('mouseout', this.parentActionHandler, false);
}
};
proto.addParentEventListener = function() {
if(this.node instanceof Element) {
if(this.options.eventType === 'hover') {
this.node.addEventListener('mouseover', this.parentActionHandler, false);
this.node.addEventListener('mouseout', this.parentActionHandler, false);
}
if(this.options.eventType === 'click') {
this.node.addEventListener(this.options.eventType, this.parentActionHandler, false);
}
}
};
proto.addNodeEventListener = function() {
if(!this.node) {
return;
}
this.node.addEventListener('mouseenter', this.nodeActionHandler, false);
this.node.addEventListener('mouseleave', this.nodeActionHandler, false);
};
proto.removeNodeEventListener = function() {
if(!this.node) {
return;
}
this.node.removeEventListener('mouseenter', this.nodeActionHandler, false);
this.node.removeEventListener('mouseleave', this.nodeActionHandler, false);
};
proto.active = function(){
this.node.addEventListener('mouseover', this, false);
this.node.addEventListener('click', this, false);
this.node.addEventListener('dblclick', this, false);
};
proto.clear = function(){
this.node.removeEventListener('mouseover', this, false);
this.node.removeEventListener('click', this, false);
this.node.removeEventListener('dblclick', this, false);
};
proto.destroy = function(){
};
proto.setAction = function (action) {
if(actionList.indexOf(action) === -1) {
action = 'click';
}
this.action = action;
return this;
};
proto.setNode = function (node) {
this.node = node;
return this;
};
proto.setTakeNode = function (takeNode) {
this.takeNode = takeNode;
return this;
};
/**
* @class UserActionManager
* @memberOf kit
*/
var UserActionManager = function (actions = []) {
this.test = new Collection([]);
this.collection = new Collection([]);
if(!Array.isArray(actions)) {
actions = [actions];
}
actions.forEach(function (act) {
}.bind(this));
/**
* @static
*/
this.actions = {
popover: 'popover',
hint: 'hint',
};
return this;
};
UserActionManager.prototype.setAction = function(action){
this.action = action;
this.collection.put();
};
return module.exports = UserActionManager;
});