blob: 8d25c121fdf7fa573bfb314787f9f5d8c800de19 [file] [log] [blame]
{"version":3,"sources":["ng://@covalent/core/json-formatter/json-formatter.component.ts","ng://@covalent/core/json-formatter/json-formatter.module.ts"],"names":["TdJsonFormatterComponent","Object","defineProperty","prototype","this","_levelsOpen","levelsOpen","Number","isInteger","Error","_open","elipsis","_key","length","KEY_MAX_LENGTH","substring","key","_data","data","parseChildren","_children","_dir","dir","refresh","_changeDetectorRef","markForCheck","toggle","isObject","getType","isArray","Array","hasChildren","getValue","value","type","Date","toString","replace","getObjectName","object","date","call","isNaN","getTime","constructor","results","exec","getPreview","previewData","_this","startChar","endChar","slice","PREVIEW_LIMIT","map","obj","previewString","join","ellipsis","PREVIEW_STRING_MAX_LENGTH","push","Component","args","changeDetection","ChangeDetectionStrategy","OnPush","selector","template","animations","tdCollapseAnimation","ChangeDetectorRef","Dir","decorators","Optional","Input","CovalentJsonFormatterModule","NgModule","imports","CommonModule","MatTooltipModule","MatIconModule","declarations","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, Optional } from '@angular/core';\nimport { Dir } from '@angular/cdk/bidi';\nimport { tdCollapseAnimation } from '@covalent/core/common';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'td-json-formatter',\n styleUrls: ['./json-formatter.component.scss' ],\n templateUrl: './json-formatter.component.html',\n animations: [\n tdCollapseAnimation,\n ],\n})\nexport class TdJsonFormatterComponent {\n\n /**\n * Max length for property names. Any names bigger than this get trunctated.\n */\n private static KEY_MAX_LENGTH: number = 30;\n\n /**\n * Max length for preview string. Any names bigger than this get trunctated.\n */\n private static PREVIEW_STRING_MAX_LENGTH: number = 80;\n\n /**\n * Max tooltip preview elements.\n */\n private static PREVIEW_LIMIT: number = 5;\n\n private _key: string;\n private _data: any;\n private _children: string[];\n private _open: boolean = false;\n private _levelsOpen: number = 0;\n\n /**\n * levelsOpen?: number\n * Levels opened by default when JS object is formatted and rendered.\n */\n @Input('levelsOpen')\n set levelsOpen(levelsOpen: number) {\n if (!Number.isInteger(levelsOpen)) {\n throw new Error('[levelsOpen] needs to be an integer.');\n }\n this._levelsOpen = levelsOpen;\n this._open = levelsOpen > 0;\n }\n get levelsOpen(): number {\n return this._levelsOpen;\n }\n\n get open(): boolean {\n return this._open;\n }\n\n /**\n * key?: string\n * Tag to be displayed next to formatted object.\n */\n @Input('key')\n set key(key: string) {\n this._key = key;\n }\n get key(): string {\n let elipsis: string = this._key && this._key.length > TdJsonFormatterComponent.KEY_MAX_LENGTH ? '…' : '';\n return this._key ? this._key.substring(0, TdJsonFormatterComponent.KEY_MAX_LENGTH) + elipsis : this._key;\n }\n\n /**\n * data: any\n * JS object to be formatted.\n */\n @Input('data')\n set data(data: any) {\n this._data = data;\n this.parseChildren();\n }\n get data(): any {\n return this._data;\n }\n\n get children(): string[] {\n return this._children;\n }\n\n get isRTL(): boolean {\n if (this._dir) {\n return this._dir.dir === 'rtl';\n }\n return false;\n }\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Dir) {\n }\n\n /**\n * Refreshes json-formatter and rerenders [data]\n */\n refresh(): void {\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggles collapse/expanded state of component.\n */\n toggle(): void {\n this._open = !this._open;\n }\n\n isObject(): boolean {\n return this.getType(this._data) === 'object';\n }\n\n isArray(): boolean {\n return Array.isArray(this._data);\n }\n\n hasChildren(): boolean {\n return this._children && this._children.length > 0;\n }\n\n /**\n * Gets parsed value depending on value type.\n */\n getValue(value: any): string {\n let type: string = this.getType(value);\n if (type === 'undefined' || (type === 'null')) {\n return type;\n } else if (type === 'date') {\n value = new Date(value).toString();\n } else if (type === 'string') {\n value = '\"' + value + '\"';\n } else if (type === 'function') {\n // Remove content of the function\n return value.toString()\n .replace(/[\\r\\n]/g, '')\n .replace(/\\{.*\\}/, '') + '{…}';\n } else if (Array.isArray(value)) {\n return this.getObjectName() + ' [' + value.length + ']';\n }\n return value;\n }\n\n /**\n * Gets type of object.\n * returns 'null' if object is null and 'date' if value is object and can be parsed to a date.\n */\n getType(object: any): string {\n if (typeof object === 'object') {\n if (!object) {\n return 'null';\n }\n if (Array.isArray(object)) {\n return 'object';\n }\n let date: Date = new Date(object);\n if (Object.prototype.toString.call(date) === '[object Date]') {\n if (!Number.isNaN(date.getTime())) {\n return 'date';\n }\n }\n }\n return typeof object;\n }\n\n /**\n * Generates string representation depending if its an object or function.\n * see: http://stackoverflow.com/a/332429\n */\n getObjectName(): string {\n let object: any = this._data;\n if (this.isObject() && !object.constructor) {\n return 'Object';\n }\n let funcNameRegex: RegExp = /function (.{1,})\\(/;\n let results: RegExpExecArray = (funcNameRegex).exec((object).constructor.toString());\n if (results && results.length > 1) {\n return results[1];\n } else {\n return '';\n }\n }\n\n /**\n * Creates preview of nodes children to render in tooltip depending if its an array or an object.\n */\n getPreview(): string {\n let previewData: string[];\n let startChar: string = '{ ';\n let endChar: string = ' }';\n if (this.isArray()) {\n let previewArray: any[] = this._data.slice(0, TdJsonFormatterComponent.PREVIEW_LIMIT);\n previewData = previewArray.map((obj: any) => {\n return this.getValue(obj);\n });\n startChar = '[';\n endChar = ']';\n } else {\n let previewKeys: string[] = this._children.slice(0, TdJsonFormatterComponent.PREVIEW_LIMIT);\n previewData = previewKeys.map((key: string) => {\n return key + ': ' + this.getValue(this._data[key]);\n });\n }\n let previewString: string = previewData.join(', ');\n let ellipsis: string = previewData.length >= TdJsonFormatterComponent.PREVIEW_LIMIT ||\n previewString.length > TdJsonFormatterComponent.PREVIEW_STRING_MAX_LENGTH ? '…' : '';\n return startChar + previewString.substring(0, TdJsonFormatterComponent.PREVIEW_STRING_MAX_LENGTH) +\n ellipsis + endChar;\n }\n\n private parseChildren(): void {\n if (this.isObject()) {\n this._children = [];\n for (let key in this._data) {\n this._children.push(key);\n }\n }\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TdJsonFormatterComponent } from './json-formatter.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatTooltipModule,\n MatIconModule,\n ],\n declarations: [\n TdJsonFormatterComponent,\n ],\n exports: [\n TdJsonFormatterComponent,\n ],\n})\nexport class CovalentJsonFormatterModule {\n\n}\n"]}