/** @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; } /** * @class Logger * @memberOf kit */ var Logger = function() { this.collection = undefined; }; /** * @param node {HTMLElement} */ 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; var k = 0, j = 0, i = 0, m = 0, rowNode1, valNode1, rowNode2, isObj, val; if(support.isObject(message)) { for(k in message) { log.appendChild(rowNode2 = getRowNode(lvl, k, message[k], opClass)); if(support.isObject(message[k])) { log.appendChild(rowNode1 = getItemObjectNode()); for(j in message[k]) { isObj = support.isObject(message[k][j]); id = support.uniqueId(); val = isObj?'':message[k][j]; rowNode1.appendChild(getRowNode(lvl+1, j, val)); rowNode1.appendChild(support.makeNode('')); if(isObj) { rowNode1.appendChild(rowNode2 = getItemObjectNode(id)); for(i in message[k][j]) { rowNode2.appendChild(getRowNode(lvl+2, i, message[k][j][i])); // if(typeof message[k][j][i] == 'object') { // for(m in message[k][j][i]) { // log.appendChild(getRowNode(lvl+3, m, message[k][j][i][m])); // } // } } } } } } } else { log.appendChild(getRowNode(lvl, '', message, opClass)); } 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.emergency = function (message, context) { this.__log.apply(this, [0, 'emergency'].concat(args2array(arguments))); }; Logger.prototype.alert = function (message, context) { this.__log.apply(this, [0, 'alert'].concat(args2array(arguments))); }; Logger.prototype.critical = function (message, context) { this.__log.apply(this, [0, 'critical'].concat(args2array(arguments))); }; Logger.prototype.error = function (message, context) { this.__log.apply(this, [0, 'error'].concat(args2array(arguments))); }; Logger.prototype.warning = function (message, context) { this.__log.apply(this, [0, 'warning'].concat(args2array(arguments))); }; Logger.prototype.notice = function (message, context) { this.__log.apply(this, [0, 'notice'].concat(args2array(arguments))); }; Logger.prototype.info = function (message, context) { this.__log.apply(this, [0, 'info'].concat(args2array(arguments))); }; Logger.prototype.debug = function (message, context) { this.__log.apply(this, [0, 'debug'].concat(args2array(arguments))); }; Logger.prototype.success = function (message, context) { this.__log.apply(this, [0, 'success'].concat(args2array(arguments))); }; 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); }; return module.exports = Logger; });