From cafa01c3a52d1f5787d7d39cbc49e4a961432ece Mon Sep 17 00:00:00 2001 From: bellord13 Date: Sun, 21 Nov 2021 22:33:57 +0300 Subject: [PATCH] fix --- assets/collection/collection.js | 54 ++++--- assets/core/core.register.js | 12 +- assets/logger/logger.js | 151 +++--------------- .../loggerService.css} | 4 +- assets/loggerService/loggerService.js | 134 ++++++++++++++++ assets/support/support.js | 27 +++- assets/testing/testing.js | 11 +- tests/index.php | 79 ++++++++- tests/kit.CollectionTest.php | 3 + 9 files changed, 311 insertions(+), 164 deletions(-) rename assets/{logger/logger.css => loggerService/loggerService.css} (97%) create mode 100644 assets/loggerService/loggerService.js diff --git a/assets/collection/collection.js b/assets/collection/collection.js index f7915a1..33b384b 100644 --- a/assets/collection/collection.js +++ b/assets/collection/collection.js @@ -22,27 +22,26 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob return new Collection([]); } - function setLastIndex(key){ - var n = Number(key); - if (support.arr.isKey(key) && n > this.__lastIndex) { - this.__lastIndex = n; - } - return this.__lastIndex; - } - function actualParams() { - var index; - this.length = this.__keys.length; - this.__lastIndex = 0; - for(index in this.__keys) { - setLastIndex.call(this, this.__keys[index]); - } - } /** * @class Collection + * @property length * @memberOf kit */ var Collection = function (data = []) { + var self = this; this.data = data; + + support.definePropertyGet(this, 'length', function () { + return self.__keys.length; + }); + + if(data instanceof Collection) { + this.__type = data.__type; + this.__keys = data.__keys; + this.__values = data.__values; + return; + } + if(Array.isArray(data)) { this.__type = 'array'; } @@ -58,18 +57,28 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob console.warn('collection: not support data' + typeof data); } var key; - this.__lastIndex = 0; - this.length = 0; this.__keys = []; this.__values = []; for(key in this.data) { if(!this.data.hasOwnProperty(key)) continue; - setLastIndex.call(this, key); - this.length = this.__keys.push(safeArrayKey(key)); + this.__keys.push(safeArrayKey(key)); this.__values.push(this.data[key]); } }; + /** + * @private + */ + Collection.prototype.__getLastIndex = function () { + var lastIndex = -1, n = 0, index; + for(index in this.__keys) { + n = this.__keys[index]; + if (support.isNumber(n) && n > lastIndex) { + lastIndex = n; + } + } + return lastIndex; + }; Collection.prototype.all = function () { if(this.__type === 'array' || this.__type === 'arrayObject') { return this.toArray(); @@ -115,7 +124,6 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob } this.length = this.__keys.push(safeArrayKey(key)); this.data[key] = this.__values[this.length-1] = value; - setLastIndex.call(this, key); return this; }; /** @@ -123,7 +131,7 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob * @return {kit.Collection} */ Collection.prototype.push = function (value) { - this.set(this.__lastIndex + 1, value); + this.set(this.__getLastIndex() + 1, value); return this; }; Collection.prototype.get = function (key, defValue = undefined) { @@ -296,7 +304,6 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob var index = this.indexKey(key); this.__keys.splice(index, 1); this.__values.splice(index, 1); - actualParams.call(this); delete this.data[key]; return this; }; @@ -315,7 +322,6 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob var value = this.__values[index]; this.__keys.splice(index, 1); this.__values.splice(index, 1); - actualParams.call(this); delete this.data[key]; return value; }; @@ -331,7 +337,6 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob var value = this.__values[index]; this.__keys.splice(index, 1); this.__values.splice(index, 1); - actualParams.call(this); delete this.data[key]; return value; }; @@ -347,7 +352,6 @@ kit.PluginManager.register('Collection', function(module, exports, require, glob var value = this.__values[index]; this.__keys.splice(index, 1); this.__values.splice(index, 1); - actualParams.call(this); delete this.data[key]; return value; }; diff --git a/assets/core/core.register.js b/assets/core/core.register.js index ffed094..1ff25e3 100644 --- a/assets/core/core.register.js +++ b/assets/core/core.register.js @@ -212,14 +212,20 @@ __PluginManager__.registerPlugins({ path: __pmConfig__.assetsPath + '/testing', module: '/testing.js', type: 'loader', - deps: ['Logger'], + deps: ['loggerService'], }, Logger: { path: __pmConfig__.assetsPath + '/logger', module: '/logger.js', - css: '/logger.css', type: 'loader', - deps: ['support'] + deps: ['support', 'Collection'] + }, + loggerService: { + path: __pmConfig__.assetsPath + '/loggerService', + module: '/loggerService.js', + css: '/loggerService.css', + type: 'loader', + deps: ['Logger', 'support'] }, }); diff --git a/assets/logger/logger.js b/assets/logger/logger.js index f973a4a..5e1d4d4 100644 --- a/assets/logger/logger.js +++ b/assets/logger/logger.js @@ -1,162 +1,61 @@ -/** @module logger */ +/** @module Logger */ __PluginManager__.register('Logger', function(module, exports, require, global){ var support = require('support'); - - var lightMap = [ - {class: '', keys: []}, - {class: 'text-danger', keys: []}, - {class: 'text-secondary', keys: []}, - ]; - var getLightClass = function(key) { - key = ''+key; - var addClass = '', ar; - for(var i=0; i < lightMap.length; i++){ - ar = lightMap[i]['keys']; - addClass = ar.includes(key)?lightMap[i]['class']:addClass; - } - return addClass; - }; - var collectionTemplater = '
'; - // function dump(value) { - // var rArray = []; - // if(value === null) { - // rArray[0] = 'null'; - // } else { - // rArray[0] = String(typeof value); - // rArray[1] = emptyPHP(value)?'empty':''; - // } - // return rArray.join(' '); - // }; - function getRowNode(level, key, value, opClass = ''){ - if(opClass) { - opClass = ' kit-logger-row--'+opClass; - } - var i = 0, lvlTemplate = ''; - key = String(key); - value = String(value); - lvlTemplate = level?'style="--logger-lvl:'+level+';" ':''; - var result = ''+key+''+value+''; - - return support.makeNode(result); - } - function getItemObjectNode(id = ''){ - var entity = '', css = '', style = ''; - if(id) { - css = ''; - entity = ' data-entity-id="'+id+'"'; - style = ' style="display: none"' - } - return support.makeNode(''+css+''); - } - - function args2array(arguments) { - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - return args; - } + var Collection = require('Collection'); /** * @class Logger * @memberOf kit */ var Logger = function() { - this.collection = undefined; + this.collection = new Collection(); + this.onLog = new Collection(); }; + /** - * @param node {HTMLElement} + * @param collection {kit.Collection} */ - Logger.prototype.setCollection = function (node) { - /** - * @type {HTMLElement} - */ - this.collection = node || document.getElementById('kit-logger') || document.querySelector('.kit-logger') || support.makeNode(collectionTemplater); - - if((this.collection instanceof HTMLElement) && !this.collection.parentElement) { - document.body.appendChild(this.collection) - } - }; - - Logger.prototype.__row = function(message, lvl = 0, opClass = '') { - if (!this.collection) { - this.setCollection(); - } - var log = this.collection; - - function setObjectValue(log, lvl, key, value, opClass, depth = 3, openDepth = 1, isRoot = true) { - var rowChild, isObj = support.isObject(value), id = isObj?support.uniqueId():'', - val = (isObj&&depth)?'':value, inp, j, - len = isObj?Object.keys(value).length:0; - - if(!isRoot || (isRoot && !isObj)) { - log.appendChild(getRowNode(lvl, key, '' + val + (isObj?(' ['+len+']'):''), opClass)); - } - if(isObj&&depth) { - !isRoot && ++lvl; - depth = Math.max(0, depth - 1); - log.appendChild(inp = support.makeNode('')); - inp.checked = !!openDepth; - openDepth = Math.max(0, openDepth - 1); - log.appendChild(rowChild = getItemObjectNode(id)); - for(j in value) { - if(value.hasOwnProperty(j)) - setObjectValue(rowChild, lvl, j, value[j], opClass, depth, openDepth, false); - } - } - } - - setObjectValue(log, lvl, '', message, opClass, 6, 3); - - log.scrollTop = log.scrollHeight; - }; - - Logger.prototype.__log = function(lvl, type, message, context){ - lvl = Number(lvl); - var opClass = ''; - if(arguments.length >= 2) opClass = type; - if(arguments.length >= 3) - this.__row(message, lvl, opClass); - if(arguments.length >= 4) - this.__row(context, lvl+1); + Logger.prototype.setCollection = function (collection) { + this.collection = collection; }; Logger.prototype.emergency = function (message, context) { - this.__log.apply(this, [0, 'emergency'].concat(args2array(arguments))); + this.log(0, message, context, 'emergency'); }; Logger.prototype.alert = function (message, context) { - this.__log.apply(this, [0, 'alert'].concat(args2array(arguments))); + this.log(0, message, context, 'alert'); }; Logger.prototype.critical = function (message, context) { - this.__log.apply(this, [0, 'critical'].concat(args2array(arguments))); + this.log(0, message, context, 'critical'); }; Logger.prototype.error = function (message, context) { - this.__log.apply(this, [0, 'error'].concat(args2array(arguments))); + this.log(0, message, context, 'error'); }; Logger.prototype.warning = function (message, context) { - this.__log.apply(this, [0, 'warning'].concat(args2array(arguments))); + this.log(0, message, context, 'warning'); }; Logger.prototype.notice = function (message, context) { - this.__log.apply(this, [0, 'notice'].concat(args2array(arguments))); + this.log(0, message, context, 'notice'); }; Logger.prototype.info = function (message, context) { - this.__log.apply(this, [0, 'info'].concat(args2array(arguments))); + this.log(0, message, context, 'info'); }; Logger.prototype.debug = function (message, context) { - this.__log.apply(this, [0, 'debug'].concat(args2array(arguments))); + this.log(0, message, context, 'debug'); }; Logger.prototype.success = function (message, context) { - this.__log.apply(this, [0, 'success'].concat(args2array(arguments))); + this.log(0, message, context, 'success'); }; Logger.prototype.log = function (lvl = 0, message = '', context, type) { - lvl = Number(lvl); - var opClass = ''; - if(arguments.length >= 4) opClass = type; - if(arguments.length >= 2) - this.__row(message, lvl, opClass); - if(arguments.length >= 3) - this.__row(context, lvl+1, opClass); + var data = { + lvl: lvl, + type: type, + message: message, + context: context, + }; + this.collection.push(data); + this.onLog.eachCall(this, data); }; return module.exports = Logger; diff --git a/assets/logger/logger.css b/assets/loggerService/loggerService.css similarity index 97% rename from assets/logger/logger.css rename to assets/loggerService/loggerService.css index 0df8223..6f5ccdc 100644 --- a/assets/logger/logger.css +++ b/assets/loggerService/loggerService.css @@ -16,11 +16,13 @@ font-family: monospace; background: hsla(0, 0%, 11%, 1); color: #909090; - height: 100%; overflow-y: scroll !important; word-break: break-all; display: block; } +.kit-logger:empty, #kit-logger:empty { + display: none; +} .kit-logger--fixed { position: sticky; bottom: 0; diff --git a/assets/loggerService/loggerService.js b/assets/loggerService/loggerService.js new file mode 100644 index 0000000..9fabe71 --- /dev/null +++ b/assets/loggerService/loggerService.js @@ -0,0 +1,134 @@ +/** @module loggerService */ +__PluginManager__.register('loggerService', function(module, exports, require, global){ + + var support = require('support'); + var Logger = require('Logger'); + + var lightMap = [ + {class: '', keys: []}, + {class: 'text-danger', keys: []}, + {class: 'text-secondary', keys: []}, + ]; + var getLightClass = function(key) { + key = ''+key; + var addClass = '', ar; + for(var i=0; i < lightMap.length; i++){ + ar = lightMap[i]['keys']; + addClass = ar.includes(key)?lightMap[i]['class']:addClass; + } + return addClass; + }; + var htmlCollectionTemplater = '
'; + // function dump(value) { + // var rArray = []; + // if(value === null) { + // rArray[0] = 'null'; + // } else { + // rArray[0] = String(typeof value); + // rArray[1] = emptyPHP(value)?'empty':''; + // } + // return rArray.join(' '); + // }; + function getRowNode(level, key, value, opClass = ''){ + if(opClass) { + opClass = ' kit-logger-row--'+opClass; + } + var lvlTemplate; + key = String(key); + value = String(value); + lvlTemplate = level?'style="--logger-lvl:'+level+';" ':''; + var result = ''+key+''+value+''; + + return support.makeNode(result); + } + function getItemObjectNode(id = ''){ + var entity = '', css = '', style = ''; + if(id) { + css = ''; + entity = ' data-entity-id="'+id+'"'; + style = ' style="display: none"' + } + return support.makeNode(''+css+''); + } + + + + /** + * @extends kit.Logger + * @class LoggerService + * @memberOf kit + */ + var LoggerService = function() { + Logger.prototype.constructor.apply(this, arguments); + this.onLog.push(this.__log); + }; + + support.extend(LoggerService.prototype, Logger.prototype); + + LoggerService.prototype.setHtmlCollection = function (node) { + /** + * @type {HTMLElement} + */ + this.__htmlCollection = node || document.getElementById('kit-logger') || document.querySelector('.kit-logger') || support.makeNode(__htmlCollectionTemplater); + + if((this.__htmlCollection instanceof HTMLElement) && !this.__htmlCollection.parentElement) { + document.body.appendChild(this.__htmlCollection) + } + }; + + LoggerService.prototype.__row = function(message, lvl = 0, opClass = '') { + if (!this.__htmlCollection) { + this.setHtmlCollection(); + } + var log = this.__htmlCollection; + + function setObjectValue(log, lvl, key, value, opClass, depth = 3, openDepth = 1, isRoot = true) { + var rowChild, isObj = support.isObject(value), id = isObj?support.uniqueId():'', + val = (isObj&&depth)?'':value, inp, j, + len = isObj?Object.keys(value).length:0; + + if(!isRoot || (isRoot && !isObj)) { + log.appendChild(getRowNode(lvl, key, '' + val + (isObj?(' ['+len+']'):''), opClass)); + } + if(isObj&&depth) { + !isRoot && ++lvl; + depth = Math.max(0, depth - 1); + log.appendChild(inp = support.makeNode('')); + inp.checked = !!openDepth; + openDepth = Math.max(0, openDepth - 1); + log.appendChild(rowChild = getItemObjectNode(id)); + for(j in value) { + if(value.hasOwnProperty(j)) + setObjectValue(rowChild, lvl, j, value[j], opClass, depth, openDepth, false); + } + } + } + + setObjectValue(log, lvl, '', message, opClass, 6, 3); + + log.scrollTop = log.scrollHeight; + }; + + LoggerService.prototype.__log = function(data = { + lvl: 0, + message: '', + context: [], + type: '' + }){ + lvl = support.toNumber(data.lvl); + var opClass = String(data.type); + this.__row(data.message, lvl, opClass); + if(support.isObject(data.context)) + this.__row(data.context, lvl+1); + }; + + /** + * @memberOf kit.service + * @class logger + **/ + var logger = new LoggerService(); + + global.service.logger = logger; + + module.exports = logger; +}); diff --git a/assets/support/support.js b/assets/support/support.js index ee6e78b..9fbf5bd 100644 --- a/assets/support/support.js +++ b/assets/support/support.js @@ -68,6 +68,13 @@ __PluginManager__.register('support', function(module, exports, require, global) function isNumber(value) { return !Number.isNaN(value) && isFinite(value) && typeof value === 'number'; } + /** + * @return {number} + */ + function toNumber(value, def = 0) { + var n = Number(value); + return isNumber(n)?n:def; + } function isInteger(value) { return isNumber(value) && (value % 1) === 0; } @@ -134,7 +141,20 @@ __PluginManager__.register('support', function(module, exports, require, global) } return null; } - + function definePropertyGet(obj, key, val) { + Object.defineProperty(obj, key, { + get: function () { + return valueEx(val); + }, + }); + } + function args2array(arguments) { + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + return args; + } /** * @memberOf kit */ @@ -158,7 +178,10 @@ __PluginManager__.register('support', function(module, exports, require, global) isA, makeNode, setKit, - getKit + getKit, + toNumber, + definePropertyGet, + args2array }; return module.exports = support; diff --git a/assets/testing/testing.js b/assets/testing/testing.js index eb49a62..e7f60ca 100644 --- a/assets/testing/testing.js +++ b/assets/testing/testing.js @@ -1,13 +1,22 @@ /** @module testing */ __PluginManager__.register('testing', function(module, exports, require, global){ + var loggerService = require('loggerService'); + /** * @constructor */ function Unit() { - this.logger = new kit.Logger(); + this.logger = loggerService; } + /** + * @param logger {kit.Logger} + */ + Unit.prototype.setLogger = function (logger) { + this.logger = logger; + }; + Unit.prototype.assertSame = function (expected, actual, message) { if(expected === actual) { this.logger.success({pass: message}); diff --git a/tests/index.php b/tests/index.php index 6343ac7..8492fbb 100644 --- a/tests/index.php +++ b/tests/index.php @@ -1,17 +1,84 @@ + + +
- + $clName"; - } + //echo "$clName"; + ?> + + +
+ + +
+
\ No newline at end of file diff --git a/tests/kit.CollectionTest.php b/tests/kit.CollectionTest.php index e18c61b..4a62791 100644 --- a/tests/kit.CollectionTest.php +++ b/tests/kit.CollectionTest.php @@ -28,6 +28,7 @@ kit.ready(['collection', 'testing', 'flexKit'], function () { unit.logger.info('Коллекции by php collection: Array ( [10] => 10 [1] => 1 )'); unit.logger.notice(' '); unit.logger.info('ARRAY'); + unit.logger.notice(' '); var assertSame = unit.assertSame.bind(unit); @@ -231,6 +232,8 @@ kit.ready(['collection', 'testing', 'flexKit'], function () { y = x.pluck('age'); assertSame('20-19-18', y.toArray().join('-'), 'pluck с проверкой сохранения порядка'); + + assertSame('10', 20, 'Спец ошибка'); });