This commit is contained in:
2021-10-30 17:20:26 +03:00
parent 1a29c16bcd
commit cd65398fb0
18 changed files with 855 additions and 290 deletions
+37
View File
@@ -0,0 +1,37 @@
/** @module Action */
kit.PluginManager.register('Action', function(module, exports, require, global) {
var support = require('support');
/**
* @memberOf kit
*/
var Action = function (node, eventName, handler) {
this.node = support.getNode(node);
this.eventName = eventName;
this.handler = function () {
if(this.count > -1) {
this.count--;
if(this.count === -1) {
return;
}
if(this.count === 0) {
this.stop();
}
}
handler.apply(this, arguments);
}.bind(this);
this.count = -1;
};
Action.prototype.run = function (count = -1) {
this.stop();
this.count = count;
this.node.addEventListener(this.eventName, this.handler, false);
};
Action.prototype.stop = function () {
this.count = -1;
this.node.removeEventListener(this.eventName, this.handler, false);
};
return module.exports = Action;
});
@@ -0,0 +1,27 @@
/** @module ActionCollection */
kit.PluginManager.register('ActionCollection', function(module, exports, require, global) {
var Collection = require('Collection');
/**
* @memberOf kit
*/
var ActionCollection = function (list = []) {
this.collection = new Collection(list);
};
ActionCollection.prototype.push = function (action) {
this.collection.push(action);
};
ActionCollection.prototype.run = function (count = -1) {
this.collection.map(function (action) {
action.run(count);
})
};
ActionCollection.prototype.stop = function () {
this.collection.map(function (action) {
action.stop();
})
};
return module.exports = ActionCollection;
});
@@ -1,190 +0,0 @@
/** @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;
});
+170
View File
@@ -0,0 +1,170 @@
/** @module Viewer */
kit.PluginManager.register('Viewer', function(module, exports, require, global) {
var Collection = require('Collection');
var support = require('support');
var Action = require('Action');
var ActionCollection = require('ActionCollection');
var AnimationTrap = function (node, callbackBefore = function(){}, callbackAfter = function(){}) {
this.node = support.getNode(node);
this.active = 0;
this.__timeoutId = 0;
this.callbackBefore = callbackBefore;
this.callbackAfter = callbackAfter;
this.__callbackAfterHandler = function () {
this.callbackAfter();
this.stop();
}.bind(this);
this.__animationstart = false;
this.__animationStartAction = new Action(this.node, 'animationstart', () => {
this.__animationstart = true;
});
this.__animationEndAction = new ActionCollection([
new Action(this.node, 'animationend', this.__callbackAfterHandler),
new Action(this.node, 'animationcancel', this.__callbackAfterHandler)
]);
};
AnimationTrap.prototype.run = function () {
if(this.active === 1){
return;
}
this.active = 1;
this.__animationStartAction.run(1);
this.callbackBefore();
this.__animationEndAction.run(1);
this.__timeoutId = setTimeout(function () {
if(!this.__animationstart) {
this.__callbackAfterHandler();
}
}.bind(this), 100);
};
AnimationTrap.prototype.stop = function () {
clearTimeout(this.__timeoutId);
this.__timeoutId = 0;
this.__animationstart = false;
this.__animationStartAction.stop();
this.__animationEndAction.stop();
this.active = 0;
};
var removeAnimation = function(animationClass){
if(animationClass && this.node.classList.contains(animationClass)){
this.node.classList.remove(animationClass);
}
};
var addAnimation = function(animationClass){
if(animationClass && !this.node.classList.contains(animationClass)){
this.node.classList.add(animationClass);
}
};
/**
* @memberOf kit
*/
var Viewer = function (node, masterNode) {
this.node = support.getNode(node);
this.masterNode = support.getNode(masterNode);
this.onShow = new Collection();
this.onHide = new Collection();
this.animShowClass = '';
this.animHideClass = '';
this.delayHide = 0;
this.activeMasterClass = 'active';
this.__aminationTrapHide = new AnimationTrap(this.node, function () {
removeAnimation.call(this, this.animShowClass);
addAnimation.call(this, this.animHideClass);
}.bind(this), function () {
if(this.masterNode && this.activeMasterClass) {
this.masterNode.classList.remove(this.activeMasterClass);
}
this.node.classList.add('hide');
this.node.classList.remove('show');
this.onHide.eachCall();
this.node.style.display = 'none';
}.bind(this));
this.__aminationTrapShow = new AnimationTrap(this.node, function () {
this.node.classList.remove('hide');
this.node.classList.add('show');
if(this.node.style.display === 'none') {
this.node.style.display = '';
}
if(this.masterNode && this.activeMasterClass) {
this.masterNode.classList.add(this.activeMasterClass);
}
removeAnimation.call(this, this.animHideClass);
addAnimation.call(this, this.animShowClass);
this.onShow.eachCall();
}.bind(this), function () {
}.bind(this));
};
var deferredHideCancel = function () {
if(this.__deferredHideID) {
clearTimeout(this.__deferredHideID);
this.__deferredHideID = 0;
}
};
var proto = Viewer.prototype;
proto.show = function(){
if(this.isShown()) {
return;
}
deferredHideCancel.call(this);
this.__aminationTrapHide.stop();
this.__aminationTrapShow.run();
};
proto.hide = function(){
if(this.isHidden()) {
return;
}
var hideDeferred = function () {
deferredHideCancel.call(this);
this.__deferredHideID = setTimeout(hide.bind(this), this.delayHide);
}.bind(this);
var hide = function() {
deferredHideCancel.call(this);
this.__aminationTrapShow.stop();
this.__aminationTrapHide.run();
}.bind(this);
hideDeferred();
};
proto.toggle = function(){
if(this.isHidden()) {
this.show();
return true;
}
this.hide();
return false;
};
proto.isShown = function(){
return !this.isHidden() && !this.__aminationTrapHide.active;
};
proto.isHidden = function(){
var result = this.node.classList.contains('hide');
if(this.masterNode && this.activeMasterClass) {
result = result || !this.masterNode.classList.contains(this.activeMasterClass);
}
return result || this.__aminationTrapHide.active;
};
return module.exports = Viewer;
});
+73 -37
View File
@@ -1,6 +1,8 @@
/** @module align */
kit.PluginManager.register('align',function(module, exports, require) {
var support = require('support');
/**
* @class Rect
* @param node
@@ -200,28 +202,28 @@ kit.PluginManager.register('align',function(module, exports, require) {
direction: {
get: function () {
switch (_this.direction) {
case 'start':
case 'left':
case 'top':
return 'start';
case 'end':
case 'right':
case 'bottom':
return 'end';
default:
return _this.direction;
}
}
},
align: {
get: function () {
switch (_this.align) {
case 'start':
case 'left':
case 'top':
return 'start';
case 'end':
case 'right':
case 'bottom':
return 'end';
default:
return _this.align;
}
}
},
@@ -268,6 +270,23 @@ kit.PluginManager.register('align',function(module, exports, require) {
return getShiftWhenHidingNodeUnderLimiterStart(this.shift + this.applicability);
}.bind(this),
},
/**
* todo: applicability, valid, shiftExtra
*/
center: {
shift: function () {
return - this.nodeMetricsLine.offset / 2 + this.offset[this.map.axisNumber()];
}.bind(this),
applicability: function () {
return this.limiterMetricsLine.end - (this.parentMetricsLine.start + this.nodeMetricsLine.length + this.shift);
}.bind(this),
valid: function () {
return this.limiterMetricsLine.end >= (this.parentMetricsLine.start + this.nodeMetricsLine.length + this.shift);
}.bind(this),
shiftExtra: function () {
return getShiftWhenHidingNodeUnderLimiterStart(this.shift + this.applicability);
}.bind(this),
},
},
align: {
start: {
@@ -275,6 +294,11 @@ kit.PluginManager.register('align',function(module, exports, require) {
return this.nodeMetricsLine.clientStart;
}.bind(this),
},
center: {
shift: function () {
return this.parentMetricsLine.offset / 2 - this.parentMetricsLine.clientStart;
}.bind(this),
},
end: {
shift: function () {
return this.parentMetricsLine.offset - this.parentMetricsLine.clientStart;
@@ -414,9 +438,9 @@ kit.PluginManager.register('align',function(module, exports, require) {
/**
* @param node {HTMLElement}
* @param parentNode {HTMLElement}
* @param limiterNode {HTMLElement}
* @param node {HTMLElement|String}
* @param parentNode {HTMLElement|String}
* @param limiterNode {HTMLElement|String}
* @constructor
*/
var AlignClass = function(node, parentNode, limiterNode = window)
@@ -425,7 +449,7 @@ kit.PluginManager.register('align',function(module, exports, require) {
this.withinTheScreen = true;
this.offset = [0, 0];
this.status = {vertical: {}, horizontal: {},};
this.condition = {vertical: {}, horizontal: {},};
this.setNode(node);
this.setParentNode(parentNode);
@@ -435,29 +459,29 @@ kit.PluginManager.register('align',function(module, exports, require) {
AlignClass.prototype.setNode = function(node){
this.unset();
this.node = node;
this.node = support.getNode(node);
this.reset();
if(node instanceof HTMLElement) {
if(this.node instanceof HTMLElement) {
this.node.kit = this.node.kit || {};
this.node.kit.align = this;
}
if(this.calc) {
this.calc.setNode(this.node);
if(this.__calc) {
this.__calc.setNode(this.node);
}
return this;
};
AlignClass.prototype.setParentNode = function(node){
this.parentNode = node;
if(this.calc) {
this.calc.setParentNode(this.parentNode);
this.parentNode = support.getNode(node);
if(this.__calc) {
this.__calc.setParentNode(this.parentNode);
}
return this;
};
AlignClass.prototype.setLimiterNode = function(node){
this.limiterNode = node;
if(this.calc) {
this.calc.setLimiterNode(this.limiterNode);
this.limiterNode = support.getNode(node) || window;
if(this.__calc) {
this.__calc.setLimiterNode(this.limiterNode);
}
return this;
};
@@ -475,7 +499,7 @@ kit.PluginManager.register('align',function(module, exports, require) {
};
AlignClass.prototype.reset = function(bHorizontal = true, bVertical = true){
if(bHorizontal) {
this.status.horizontal = {};
this.condition.horizontal = {};
if(this.node instanceof HTMLElement) {
this.node.style.left = '';
this.node.style.right = '';
@@ -484,7 +508,7 @@ kit.PluginManager.register('align',function(module, exports, require) {
}
}
if(bVertical) {
this.status.vertical = {};
this.condition.vertical = {};
if(this.node instanceof HTMLElement) {
this.node.style.top = '';
this.node.style.bottom = '';
@@ -492,6 +516,7 @@ kit.PluginManager.register('align',function(module, exports, require) {
this.node.removeAttribute('data-kit-align-vertical-align');
}
}
this.__nodeComputedStyle = undefined;
return this;
};
@@ -510,45 +535,56 @@ kit.PluginManager.register('align',function(module, exports, require) {
return this;
};
AlignClass.prototype.__setAdditionalStyles = function(){
if(!this.__nodeComputedStyle) {
this.__nodeComputedStyle = getComputedStyle(this.node);
}
if(!['absolute', 'relative'].includes(this.__nodeComputedStyle.position)) {
this.node.style.position = 'absolute';
}
};
AlignClass.prototype.setEx = function(axis, direction, align){
this.reset(axis === 'horizontal', axis === 'vertical');
this.status[axis].direction = direction;
this.status[axis].align = align;
this.__setAdditionalStyles();
if(!this.calc) {
this.calc = new AlignCalc(this.node, this.parentNode, this.limiterNode);
this.condition[axis].direction = direction;
this.condition[axis].align = align;
if(!this.__calc) {
this.__calc = new AlignCalc(this.node, this.parentNode, this.limiterNode);
}
this.calc.offset = this.offset;
this.__calc.offset = this.offset;
this.node.setAttribute('data-kit-align-'+axis+'-direction', direction);
this.node.setAttribute('data-kit-align-'+axis+'-align', align);
var defAlignResult = this.calc.updateMetrics().setAxis(axis).setDirection(direction).setAlign(align).calc().getData();
var defAlignResult = this.__calc.updateMetrics().setAxis(axis).setDirection(direction).setAlign(align).calc().getData();
// console.log('defAlignResult', axis, align, direction, defAlignResult);
if(this.changeOfDirection) {
if(!defAlignResult.valid) {
this.node.setAttribute('data-kit-align-'+axis+'-direction', this.getInverse(direction));
this.node.setAttribute('data-kit-align-'+axis+'-align', this.getInverse(align));
var inverseAlignResult = this.calc.updateMetrics().setDirection(this.getInverse(direction)).setAlign(this.getInverse(align)).calc().getData();
// console.log('inverseAlignResult', axis, this.getInverse(align), this.getInverse(direction), inverseAlignResult);
this.status[axis].direction = this.getInverse(direction);
this.status[axis].align = this.getInverse(align);
this.node.setAttribute('data-kit-align-'+axis+'-direction', this.__getInverse(direction));
this.node.setAttribute('data-kit-align-'+axis+'-align', this.__getInverse(align));
var inverseAlignResult = this.__calc.updateMetrics().setDirection(this.__getInverse(direction)).setAlign(this.__getInverse(align)).calc().getData();
// console.log('inverseAlignResult', axis, this.__getInverse(align), this.__getInverse(direction), inverseAlignResult);
this.condition[axis].direction = this.__getInverse(direction);
this.condition[axis].align = this.__getInverse(align);
if(!inverseAlignResult.valid && (defAlignResult.applicability > inverseAlignResult.applicability) ) {
this.node.setAttribute('data-kit-align-'+axis+'-direction', direction);
this.node.setAttribute('data-kit-align-'+axis+'-align', align);
this.status[axis].direction = direction;
this.status[axis].align = align;
this.calc.updateMetrics().setDirection(direction).setAlign(align).calc();
this.condition[axis].direction = direction;
this.condition[axis].align = align;
this.__calc.updateMetrics().setDirection(direction).setAlign(align).calc();
}
}
}
this.calc.render(this.withinTheScreen);
this.__calc.render(this.withinTheScreen);
return this;
};
AlignClass.prototype.getInverse = function(value){
AlignClass.prototype.__getInverse = function(value){
var inverseConfig = {
start: 'end',
left: 'right',
+29
View File
@@ -14,3 +14,32 @@
transform: scale(1);
}
}
.anim-scale-out {
-webkit-animation: scale-out-center 0.15s cubic-bezier(0.2, 0, 0.13, 1.5);
animation: scale-out-center 0.15s cubic-bezier(0.2, 0, 0.13, 1.5);
}
@-webkit-keyframes scale-out-center {
0% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 1;
}
100% {
-webkit-transform: scale(0.5);
transform: scale(0.5);
opacity: 0;
}
}
@keyframes scale-out-center {
0% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 1;
}
100% {
-webkit-transform: scale(0.5);
transform: scale(0.5);
opacity: 0;
}
}
+5 -1
View File
@@ -1,4 +1,7 @@
/** @module animations */
/**
* https://animista.net/
* @module animations
**/
kit.PluginManager.register('animations',function(module, exports, require, global) {
/**
@@ -6,6 +9,7 @@ kit.PluginManager.register('animations',function(module, exports, require, globa
*/
var animations = {
scaleIn: 'anim-scale-in',
scaleOut: 'anim-scale-out',
};
Object.assign(animations, global.animations || {});
+69 -5
View File
@@ -1,7 +1,4 @@
/** @module collection */
/**
* в разработке
*/
/** @module Collection */
kit.PluginManager.register('Collection', function(module, exports, require, global) {
var support = require('support');
@@ -107,7 +104,7 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob
* @param value
* @return {kit.Collection}
*/
Collection.prototype.set = Collection.prototype.put = function (key, value) {
Collection.prototype.add = Collection.prototype.set = Collection.prototype.put = function (key, value) {
var index = -1;
if(this.has(key)) {
this.data[key] = this.__values[index = this.indexKey(key)] = value;
@@ -380,6 +377,73 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob
debugger;
return this;
};
/**
* @return {kit.Collection}
*/
Collection.prototype.eachCall = function (context, args1, args2) {
var args = [];
if(arguments.length > 1)
for(var i = 1; arguments.length - 1 >= i;i++) {
args.push(arguments[i]);
}
var BreakException = {}, i;
try {
if(this.__keys.length)
for (i = 0; i < this.__keys.length; i++) {
if(typeof this.__values[i] === 'function' &&
this.__values[i].apply(context, [].concat(args, this.__keys[i])) === false) {
throw BreakException;
}
}
} catch (e) {
if (e !== BreakException) throw e;
}
return this;
};
/**
* аналог Array.includes
*
* @param searchElement
* @param fromIndex
* @return {boolean}
*/
Collection.prototype.includes = function(searchElement, fromIndex) {
var len = this.__keys.length;
if (len === 0) {
return false;
}
var n = fromIndex | 0;
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
function sameValueZero(x, y) {
return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}
while (k < len) {
if (sameValueZero(this.__values[k], searchElement)) {
return true;
}
k++;
}
return false;
};
Collection.prototype.search = function(searchElement) {
var len = this.__keys.length;
if (len === 0) {
return false;
}
var k = 0;
function sameValueZero(x, y) {
return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}
while (k < len) {
if (sameValueZero(this.__values[k], searchElement)) {
return this.__keys[k];
}
k++;
}
return false;
};
return module.exports = Collection;
});
+2 -2
View File
@@ -9,7 +9,7 @@ window.kit = window.kit || {};
kit.config = kit.config || {};
kit.config.assetsPath = '/local/templater.dev/kit/assets';
kit.config.requiredDependencies = ['bsCore', 'toolkit'];
kit.config.autoloadPluginList = ['tooltip'];
kit.config.requiredDependencies = ['bsCore', 'toolkit', 'support'];
kit.config.autoloadPluginList = ['tooltip', 'support'];
kit.config.debug = true;
kit.config.defaultPhoneMask = '+7 (999) 999-99-99';
+24 -5
View File
@@ -6,7 +6,7 @@ __PluginManager__.registerPlugins({
'/menu.css'
],
type: 'loader',
deps: ['lib', 'align', 'dataStructures', 'animations']
deps: ['lib', 'align', 'dataStructures', 'animations', 'userAction', 'Collection', 'support', 'ActionCollection', 'Action', 'Viewer']
},
lib: {
path: __pmConfig__.assetsPath + '/lib',
@@ -17,6 +17,7 @@ __PluginManager__.registerPlugins({
path: __pmConfig__.assetsPath + '/align',
module: '/align.js',
type: 'loader',
deps: ['support']
},
support: {
path: __pmConfig__.assetsPath + '/support',
@@ -158,11 +159,29 @@ __PluginManager__.registerPlugins({
module: '/dataStructures.js',
type: 'loader',
},
UserActionManager: {
path: __pmConfig__.assetsPath + '/UserActionManager',
module: '/UserActionManager.js',
userAction: {
path: __pmConfig__.assetsPath + '/userAction',
module: '/userAction.js',
type: 'loader',
deps: ['Collection'],
deps: ['support', 'ActionCollection', 'Action', 'Viewer'],
},
Viewer: {
path: __pmConfig__.assetsPath + '/Viewer',
module: '/Viewer.js',
type: 'loader',
deps: ['Collection', 'support', 'ActionCollection', 'Action'],
},
ActionCollection: {
path: __pmConfig__.assetsPath + '/ActionCollection',
module: '/ActionCollection.js',
type: 'loader',
deps: ['Collection', 'support', 'Action'],
},
Action: {
path: __pmConfig__.assetsPath + '/Action',
module: '/Action.js',
type: 'loader',
deps: ['support'],
},
});
+2 -1
View File
@@ -11,6 +11,7 @@
--gap-section: 30px;
--gap-wrapper: 30px;
--col-count: 4;
--col-span: 1;
--line-clamp: 3;
--line-clamp-height: 1.3em;
--width-wrapper: 800px;
@@ -108,7 +109,7 @@
}
.flex-list-item {
--gap-row: var(--gap);
--col-width: calc((100%) / var(--col-count));
--col-width: calc(100% / var(--col-count) * var(--col-span));
box-sizing: border-box;
}
.flex-list > .flex-list-item {
+9 -3
View File
@@ -1,8 +1,14 @@
/** @module menu */
//todo: instance, options, auto-options-by-node, userEventManager
//todo: instance, options, auto-options-by-node
__PluginManager__.register('menu',function(module, exports, require) {
var userAction = require('userAction');
var Collection = require('Collection');
var Action = require('Action');
var ActionCollection = require('ActionCollection');
var support = require('support');
var Viewer = require('Viewer');
var align = require('align');
var libModule = require('lib');
var dataStructures = require('dataStructures');
@@ -180,11 +186,11 @@ __PluginManager__.register('menu',function(module, exports, require) {
var hDirection = 'right';
var parentMenu = this.getParentMenu();
if(parentMenu && parentMenu instanceof Menu) {
hDirection = parentMenu.align.status.horizontal.direction;
hDirection = parentMenu.align.condition.horizontal.direction;
}
var hAlign = 'right';
if(parentMenu && parentMenu instanceof Menu) {
hAlign = parentMenu.align.status.horizontal.align;
hAlign = parentMenu.align.condition.horizontal.align;
}
this.align.offset = this.options.alignOffset;
+47 -3
View File
@@ -1,6 +1,11 @@
/** @module support */
__PluginManager__.register('support', function(module, exports, require, global){
var node = {
isRelate: function (node, container = document) {
return node === container || container.contains(node);
}
};
var str = {
ucFirst: function (str) {
if (!str) return str;
@@ -26,13 +31,13 @@ __PluginManager__.register('support', function(module, exports, require, global)
return (idStr);
}
function valueEx(value) {
var arg = [];
var args = [];
if(arguments.length > 1)
for(var i = 1; arguments.length - 1 >= i;i++) {
arg.push(arguments[i]);
args.push(arguments[i]);
}
if(typeof value === 'function') {
return value.apply(this, arg);
return value.apply(this, args);
}
return value;
}
@@ -60,10 +65,46 @@ __PluginManager__.register('support', function(module, exports, require, global)
function isFloat(value) {
return isNumber(value);
}
function isString(value) {
return typeof value === 'string';
}
function isNode(value) {
return value instanceof Node;
}
function isElement(value) {
return value instanceof Element;
}
/**
* @param selector
* @return Element
*/
function getNode(selector) {
if(isString(selector)) {
return document.querySelector(selector);
}
if(isNode(selector) || isElement(selector)) {
return selector;
}
return undefined;
}
var nameFromToStringRegex = /^function\s?([^\s(]*)/;
function className(object, defaultName) {
var result = "";
if (typeof object === 'function') {
result = object.name || object.toString().match(nameFromToStringRegex)[1];
} else if (typeof object.constructor === 'function') {
result = className(object.constructor, defaultName);
}
return result || defaultName;
}
/**
* @memberOf kit
*/
var support = {
node: node,
str: str,
arr: arr,
uniqueId,
@@ -74,6 +115,9 @@ __PluginManager__.register('support', function(module, exports, require, global)
isObject,
isInteger,
isFloat,
isString,
isNode,
getNode,
};
return module.exports = support;
+156
View File
@@ -0,0 +1,156 @@
/** @module userAction */
/**
* в разработке
*/
kit.PluginManager.register('userAction', function(module, exports, require, global) {
var support = require('support');
var ActionCollection = require('ActionCollection');
var Action = require('Action');
var Viewer = require('Viewer');
var Popover = function (masterNode, slaveNode) {
this.__setMasterNode(masterNode);
this.__setSlaveNode(slaveNode);
this.__documentAction = new Action(document, 'click', this.__documentHandler.bind(this));
this.__masterAction = new Action(this.__masterNode, 'click', this.__masterHandler.bind(this));
this.viewer = new Viewer(this.__slaveNode, this.__masterNode);
this.viewer.onShow.set('documentActionRun', this.__documentAction.run.bind(this.__documentAction));
this.viewer.onHide.set('documentActionStop', this.__documentAction.stop.bind(this.__documentAction));
return this;
};
(function () {
var proto = Popover.prototype;
proto.__documentHandler = function(event) {
if(
!support.node.isRelate(event.target, this.__masterNode) &&
!support.node.isRelate(event.target, this.__slaveNode)
) {
this.viewer.hide();
}
};
proto.__masterHandler = function(event) {
if(
!support.node.isRelate(event.target, this.__slaveNode)
) {
this.viewer.toggle();
}
};
proto.__setMasterNode = function(selector){
this.__masterNode = support.getNode(selector);
};
proto.__setSlaveNode = function(selector){
this.__slaveNode = support.getNode(selector);
};
proto.run = function(){
if(this.viewer.isShown()) {
this.__documentAction.run();
}
this.__masterAction.run();
};
proto.stop = function(){
this.__documentAction.stop();
this.__masterAction.stop();
};
})();
var Hint = function (masterNode, slaveNode) {
this.__setMasterNode(masterNode);
this.__setSlaveNode(slaveNode);
this.viewer = new Viewer(this.__slaveNode, this.__masterNode);
this.__masterAction = new ActionCollection([
new Action(this.__masterNode, 'mouseover', function (event) {
if(support.node.isRelate(event.target, this.__masterNode)) {
this.viewer.show();
// console.log('master over ', event.target.id, ' > ', this.__slaveNode.id, 'show');
// console.log(event);
}
}.bind(this)),
new Action(this.__masterNode, 'mouseout', function (event) {
if(
!support.node.isRelate(event.relatedTarget, this.__masterNode) &&
!support.node.isRelate(event.relatedTarget, this.__slaveNode)
) {
this.viewer.hide();
// console.log('master out ', event.target.id, ' > ', this.__slaveNode.id, 'hide');
// console.log(event);
}
}.bind(this))
]);
this.__slaveAction = new ActionCollection([
new Action(this.__slaveNode, 'mouseover', function (event) {
// this.viewer.show();
// console.log('slave over ', event.target.id, ' > ', this.__slaveNode.id, 'show');
}.bind(this)),
new Action(this.__slaveNode, 'mouseout', function (event) {
if(
!support.node.isRelate(event.relatedTarget, this.__masterNode) &&
!support.node.isRelate(event.relatedTarget, this.__slaveNode)
) {
this.viewer.hide();
// console.log('slave out ', event.target.id, ' > ', this.__slaveNode.id, 'hide');
}
}.bind(this))
]);
this.__documentAction = new Action(document, 'click', this.__documentHandler.bind(this));
this.viewer.onShow.set('documentActionRun', (function (){
this.__slaveAction.run();
this.__documentAction.run();
}).bind(this));
this.viewer.onHide.set('documentActionStop', (function (){
this.__slaveAction.stop();
this.__documentAction.stop();
}).bind(this));
return this;
};
(function () {
var proto = Hint.prototype;
proto.__documentHandler = function(event) {
if (
!support.node.isRelate(event.target, this.__slaveNode) &&
!support.node.isRelate(event.target, this.__masterNode) &&
this.viewer.isShown()
) {
this.viewer.hide();
}
};
proto.__setMasterNode = function(selector){
this.__masterNode = support.getNode(selector);
};
proto.__setSlaveNode = function(selector){
this.__slaveNode = support.getNode(selector);
};
proto.run = function(){
if(this.viewer.isShown()) {
this.__documentAction.run();
this.__slaveAction.run();
}
this.__masterAction.run();
};
proto.stop = function(){
this.__documentAction.stop();
this.__masterAction.stop();
this.__slaveAction.stop();
};
})();
/**
* @var userAction
* @memberOf kit
*/
var userAction = {
Popover: Popover,
Hint: Hint,
Action: Action
};
return module.exports = userAction;
});
-41
View File
@@ -1,41 +0,0 @@
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<?
if(\Bitrix\Main\Loader::includeModule('wt.core')) {
app()->service()->assets()->setPlugins([
'kit:config',
'kit:flex-kit',
'kit:core',
'kit:bsCore',
'kit:collapse',
'kit:site',
'kit:toolkit',
'kit:theme',
])->render();
}
$APPLICATION->ShowHead();
?>
<script>
kit.ready(['UserActionManager'], function () {
var m1 = new kit.UserActionManager();
m1.setAction('popover');
});
</script>
<style>
.hide {
display: none;
}
</style>
<div class="kit-wrapper">
<div id="object1" style="width: 300px; height: 50px; background-color: #eaeaea; border: 1px solid;">1</div>
<div id="object2" style="width: 300px; height: 50px; background-color: #3860ff; border: 1px solid; display: none" class="hide">2</div>
<div id="object3" style="width: 300px; height: 50px; background-color: #ff1d34; border: 1px solid; display: none" class="hide">3</div>
</div>
<?
?>
+125
View File
@@ -0,0 +1,125 @@
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<?
if(\Bitrix\Main\Loader::includeModule('wt.core')) {
app()->service()->assets()->setPlugins([
'kit:config',
'kit:flex-kit',
'kit:core',
'kit:bsCore',
'kit:collapse',
'kit:site',
'kit:toolkit',
'kit:theme',
])->render();
}
$APPLICATION->ShowHead();
?>
<style>
.hide {
display: none;
}
.main-body {
display: flex;
width: 250px;
height: 250px;
justify-content: center;
align-items: center;
float: left;
}
.main-list {
width: 100px;
height: 100px;
background-color: #ffc400;
position: relative;
}
.main-item {
width: 50px;
height: 50px;
color: whitesmoke;
font-size: 10px;
line-height: 1.2em;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
</style>
<div class="kit-wrapper">
<div class="main-body">
<div id="object-main" class="main-list">
<div id="object1" class="main-item" style="background-color: green;">'left', 'top', 'left', 'top'</div>
<div id="object2" class="main-item" style="background-color: #0a51ae;">'right', 'top', 'right', 'top'</div>
<div id="object3" class="main-item" style="background-color: #c23a3a;">'right', 'bottom', 'right', 'bottom'</div>
<div id="object4" class="main-item" style="background-color: rebeccapurple;">'left', 'bottom', 'left', 'bottom'</div>
</div>
</div>
<div class="main-body">
<div id="object-main2" class="main-list">
<div id="object5" class="main-item" style="background-color: green;">'left', 'top', 'right', 'top'</div>
<div id="object6" class="main-item" style="background-color: #0a51ae;">'right', 'top', 'right', 'bottom'</div>
<div id="object7" class="main-item" style="background-color: #c23a3a;">'right', 'bottom', 'left', 'bottom'</div>
<div id="object8" class="main-item" style="background-color: rebeccapurple;">'left', 'bottom', 'left', 'top'</div>
</div>
</div>
<div class="main-body">
<div id="object-main3" class="main-list">
<div id="object9" class="main-item" style="background-color: green;">'left', 'top', 'center', 'center'</div>
<div id="object10" class="main-item" style="background-color: #0a51ae;">'right', 'top', 'center', 'center'</div>
<div id="object11" class="main-item" style="background-color: #c23a3a;">'right', 'bottom', 'center', 'center'</div>
<div id="object12" class="main-item" style="background-color: rebeccapurple;">'left', 'bottom', 'center', 'center'</div>
</div>
</div>
<div class="main-body">
<div id="object-main4" class="main-list">
<div id="object13" class="main-item" style="background-color: green;">'center', 'center', 'left', 'top'</div>
<div id="object14" class="main-item" style="background-color: #0a51ae;">'center', 'center', 'right', 'top'</div>
<div id="object15" class="main-item" style="background-color: #c23a3a;">'center', 'center', 'right', 'bottom'</div>
<div id="object16" class="main-item" style="background-color: rebeccapurple;">'center', 'center', 'left', 'bottom'</div>
</div>
</div>
</div>
<script>
kit.ready(['align'], function () {
var align1 = new kit.align.Class('#object1', '#object-main');
align1.set('left', 'top', 'left', 'top');
var align2 = new kit.align.Class('#object2', '#object-main');
align2.set('right', 'top', 'right', 'top');
var align3 = new kit.align.Class('#object3', '#object-main');
align3.set('right', 'bottom', 'right', 'bottom');
var align4 = new kit.align.Class('#object4', '#object-main');
align4.set('left', 'bottom', 'left', 'bottom');
var align5 = new kit.align.Class('#object5', '#object-main2');
align5.set('left', 'top', 'right', 'top');
var align6 = new kit.align.Class('#object6', '#object-main2');
align6.set('right', 'top', 'right', 'bottom');
var align7 = new kit.align.Class('#object7', '#object-main2');
align7.set('right', 'bottom', 'left', 'bottom');
var align8 = new kit.align.Class('#object8', '#object-main2');
align8.set('left', 'bottom', 'left', 'top');
var align9 = new kit.align.Class('#object9', '#object-main3');
align9.set('left', 'top', 'center', 'center');
var align10 = new kit.align.Class('#object10', '#object-main3');
align10.set('right', 'top', 'center', 'center');
var align11 = new kit.align.Class('#object11', '#object-main3');
align11.set('right', 'bottom', 'center', 'center');
var align12 = new kit.align.Class('#object12', '#object-main3');
align12.set('left', 'bottom', 'center', 'center');
var align13 = new kit.align.Class('#object13', '#object-main4');
align13.offset = [5, 5];
align13.set('center', 'center', 'left', 'top');
var align14 = new kit.align.Class('#object14', '#object-main4');
align14.offset = [5, 5];
align14.set('center', 'center', 'right', 'top');
var align15 = new kit.align.Class('#object15', '#object-main4');
align15.offset = [5, 5];
align15.set('center', 'center', 'right', 'bottom');
var align16 = new kit.align.Class('#object16', '#object-main4');
align16.offset = [5, 5];
align16.set('center', 'center', 'left', 'bottom');
});
</script>
+3 -2
View File
@@ -1,12 +1,13 @@
<div style="display: flex; flex-direction: column; align-items: center;">
<a href="cheatsheet.php"><b>cheatsheet</b></a>
<a href="menu.php">Menu</a>
<a href="align.php">align</a>
<a href="templates.svg.php">templates.svg</a>
<a href="flex-kit.php">flex-kit</a>
<a href="cheatsheet.php">cheatsheet</a>
<a href="card/block.php">card/block</a>
<a href="kit.Collection.php">kit.Collection</a>
<a href="UserActionManager.php">UserActionManager</a>
<a href="userAction.php">userAction</a>
<a href="templater.php">templater</a>
</div>
+77
View File
@@ -0,0 +1,77 @@
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<?
if(\Bitrix\Main\Loader::includeModule('wt.core')) {
app()->service()->assets()->setPlugins([
'kit:config',
'kit:flex-kit',
'kit:core',
'kit:bsCore',
'kit:collapse',
'kit:site',
'kit:toolkit',
'kit:theme',
])->render();
}
$APPLICATION->ShowHead();
?>
<script>
kit.ready(['userAction', 'animations'], function () {
var m1 = new kit.userAction.Popover('#object1', '#object2');
m1.run();
var m2 = new kit.userAction.Popover('#object2', '#object3');
m2.run();
var m3 = new kit.userAction.Hint('#object4', '#object5');
m3.run();
m3.viewer.animShowClass = kit.animations.scaleIn;
var m4 = new kit.userAction.Hint('#object5', '#object6');
m4.run();
var m5 = new kit.userAction.Hint('#object7', '#object8');
m5.viewer.animShowClass = kit.animations.scaleIn;
m5.viewer.animHideClass = kit.animations.scaleOut;
m5.run();
var m6 = new kit.userAction.Hint('#object8', '#object9');
m6.run();
m6.viewer.animShowClass = kit.animations.scaleIn;
m6.viewer.animHideClass = kit.animations.scaleOut;
});
</script>
<style>
.hide {
display: none;
}
</style>
<div class="kit-wrapper">
<div style="padding: 40px;">
<div id="object1" style="width: 300px; height: 50px; background-color: #eaeaea; border: 1px solid;">1</div>
<div id="object2" style="width: 300px; height: 50px; background-color: #3860ff; border: 1px solid; display: none" class="hide">
2
<div id="object3" style="width: 300px; height: 50px; background-color: #ff1d34; border: 1px solid; display: none" class="hide">3</div>
</div>
</div>
<div style="padding: 40px;">
<div id="object4" style="width: 300px; height: 50px; background-color: #eaeaea; border: 1px solid;">4</div>
<div id="object5" style="width: 300px; height: 50px; background-color: #3860ff; border: 1px solid; display: none" class="hide">5</div>
<div id="object6" style="width: 300px; height: 50px; background-color: #ff1d34; border: 1px solid; display: none" class="hide">6</div>
</div>
<div style="padding: 40px;" id="box3">
<div id="object7" style="width: 300px; height: 50px; background-color: #eaeaea; border: 1px solid;">
<div>7</div>
<div id="object8" style="width: 300px; height: 50px; background-color: #3860ff; border: 1px solid; display: none" class="hide">
<div>8</div>
<div id="object9" style="width: 300px; height: 50px; background-color: #ff1d34; border: 1px solid; display: none" class="hide">9</div>
</div>
</div>
</div>
</div>
<?
?>