';
} else {
obj2htmlContent = '
\
' +
outer +
' \
\
';
}
if (this.isObject(params)) {
var objKeys = this.getObjAllKeys(params);
for (var i = 0; i < objKeys.length; i++) {
var val = params[objKeys[i]];
if (this.isObject(val) || this.isArray(val)) {
obj2htmlContent += '
' + this.obj2html(val, objKeys[i]) + '
';
} else if (this.isNumber(val) || this.isBoolean(val)) {
obj2htmlContent += '
' + objKeys[i] + ': ' + val + '
';
} else {
obj2htmlContent += '
' + objKeys[i] + ': "' + val + '"
';
}
}
} else if (this.isArray(params)) {
for (var i = 0; i < params.length; i++) {
obj2htmlContent += '
' + this.obj2html(params[i]) + '
';
}
}
obj2htmlContent += '
'
return obj2htmlContent;
}
/**
* div打开关闭
*/
public vcfoldclick(params: any) {
var vcFoldElements = params.parentElement.children;
var vcFoldContent = vcFoldElements[vcFoldElements.length - 1];
if (vcFoldContent.classList.contains("vc-hidden")) {
vcFoldContent.classList.remove("vc-hidden");
} else {
vcFoldContent.classList.add("vc-hidden");
}
}
/**
* 搜索并打开div
*/
public searchText(inputValue: string) {
var items;
for (let index = 0; index < this._webix.$view.children.length; index++) {
const element = this._webix.$view.children[index];
if (element.classList.contains("vc-log")) {
items = element;
}
}
this.removeSelected(items);
if (!inputValue) {
return;
}
this.itemContainsText(items, inputValue);
}
public itemContainsText(params: any, inputValue: any) {
for (var i = 0; i < params.children.length; i++) {
var item = params.children[i];
if (item.innerHTML.indexOf(inputValue) !== -1) {
if (item.classList.contains("vc-fold-content")) {
item.classList.remove("vc-hidden");
}
if (item.classList.contains("vc-code-key") ||
item.classList.contains("vc-code-string") ||
item.classList.contains("vc-code-number") ||
item.classList.contains("vc-code-boolean")) {
item.classList.add("vc-code-string-selected");
}
this.itemContainsText(item, inputValue)
}
}
}
public removeSelected(params: any) {
for (var i = 0; i < params.children.length; i++) {
var item = params.children[i];
item.classList.remove("vc-code-string-selected");
this.removeSelected(item)
}
}
/**
* 全部清空
*/
public vcClearAll() {
var vcLog = $('#' + this._webix._domid)[0];
vcLog.innerHTML = '';
}
/**
* 全部收起
*/
public vcCloseAll() {
var vcLog = $('#' + this._webix._domid)[0];
this.closeOrOpen(vcLog, false)
}
/**
* 全部展开
*/
public vcOpenAll() {
var vcLog = $('#' + this._webix._domid)[0];
this.closeOrOpen(vcLog, true)
// var vvv = _.cloneDeepWith(vcLog, function customizer(value) {
// if (_.isElement(value)) {
// return value.cloneNode(true);
// }
// });
// this.closeOrOpen(vvv, true);
// vcLog.innerHTML = vvv.innerHTML;
}
public closeOrOpen(items: any, isOpen: boolean) {
for (var i = 0; i < items.children.length; i++) {
var item = items.children[i];
if (item.classList.contains("vc-fold-content")) {
if (isOpen) {
item.classList.remove("vc-hidden");
} else {
item.classList.add("vc-hidden");
}
}
this.closeOrOpen(item, isOpen)
}
}
/**
* tools
*/
public isNumber(value: any): boolean {
return Object.prototype.toString.call(value) == '[object Number]';
}
public isString(value: any): boolean {
return Object.prototype.toString.call(value) == '[object String]';
}
public isArray(value: any): boolean {
return Object.prototype.toString.call(value) == '[object Array]';
}
public isBoolean(value: any): boolean {
return Object.prototype.toString.call(value) == '[object Boolean]';
}
public isUndefined(value: any): boolean {
return value === undefined;
}
public isNull(value: any): boolean {
return value === null;
}
public isSymbol(value: any): boolean {
return Object.prototype.toString.call(value) == '[object Symbol]';
}
public isFunction(value: any): boolean {
return Object.prototype.toString.call(value) == '[object Function]';
}
public isObject(value: any): boolean {
return (
Object.prototype.toString.call(value) == '[object Object]' ||
// if it isn't a primitive value, then it is a common object
(
!this.isNumber(value) &&
!this.isString(value) &&
!this.isBoolean(value) &&
!this.isArray(value) &&
!this.isNull(value) &&
!this.isFunction(value) &&
!this.isUndefined(value) &&
!this.isSymbol(value)
)
);
}
/**
* Simple JSON stringify, stringify top level key-value
*/
public JSONStringify(stringObject: any): any {
if (!this.isObject(stringObject) && !this.isArray(stringObject)) {
return JSON.stringify(stringObject);
}
let prefix = '{',
suffix = '}';
if (this.isArray(stringObject)) {
prefix = '[';
suffix = ']'
}
let str = prefix;
const keys = this.getObjAllKeys(stringObject);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = stringObject[key];
try {
// key
if (!this.isArray(stringObject)) {
if (this.isObject(key) || this.isArray(key) || this.isSymbol(key)) {
str += Object.prototype.toString.call(key);
} else {
str += key;
}
str += ': ';
}
// value
if (this.isArray(value)) {
str += 'Array[' + value.length + ']';
} else if (this.isObject(value) || this.isSymbol(value) || this.isFunction(value)) {
str += Object.prototype.toString.call(value);
} else {
str += JSON.stringify(value);
}
if (i < keys.length - 1) {
str += ', ';
}
} catch (e) {
continue;
}
}
str += suffix;
return str;
}
/**
* get an object's all keys ignore whether they are not enumerable
*/
public getObjAllKeys(obj: any): any {
if (!this.isObject(obj) && !this.isArray(obj)) {
return [];
}
if (this.isArray(obj)) {
const m: any[] = [];
obj.forEach((_: any, index: any) => {
m.push(index)
});
return m;
}
return Object.getOwnPropertyNames(obj).sort();
}
/**
* get an object's prototype name
*/
public getObjName(obj: any): any {
return Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '');
}
}