-
Notifications
You must be signed in to change notification settings - Fork 86
/
json-formatter.min.js
7 lines (7 loc) · 2.95 KB
/
json-formatter.min.js
1
2
3
4
5
6
7
/*!
* jsonformatter
*
* Version: 0.3.0 - 2015-07-09T13:22:11.371Z
* License: MIT
*/
"use strict";angular.module("jsonFormatter",["RecursionHelper"]).directive("jsonFormatter",["RecursionHelper",function(n){function e(n){return n.replace('"','"')}function t(n){if(void 0===n)return"";if(null===n)return"Object";if("object"==typeof n&&!n.constructor)return"Object";var e=/function (.{1,})\(/,t=e.exec(n.constructor.toString());return t&&t.length>1?t[1]:""}function r(n){return null===n?"null":typeof n}function s(n,s,o){n.isArray=function(){return Array.isArray(n.json)},n.isObject=function(){return n.json&&"object"==typeof n.json},n.getKeys=function(){return n.isObject()?Object.keys(n.json).map(function(n){return""===n?'""':n}):void 0},n.type=r(n.json),n.hasKey="undefined"!=typeof n.key,n.getConstructorName=function(){return t(n.json)},"string"===n.type&&("Invalid Date"!==new Date(n.json).toString()&&(n.isDate=!0),0===n.json.indexOf("http")&&(n.isUrl=!0)),n.isEmptyObject=function(){return n.getKeys()&&!n.getKeys().length&&n.isOpen&&!n.isArray()},n.isOpen=!!n.open,n.toggleOpen=function(){n.isOpen=!n.isOpen},n.childrenOpen=function(){return n.open>1?n.open-1:0},n.openLink=function(e){e&&(window.location.href=n.json)},n.parseValue=function(t){return n.type=r(n.json),"null"===n.type?"null":"undefined"===n.type?"undefined":("string"===n.type&&(t='"'+e(t)+'"'),"function"===n.type?n.json.toString().replace(/[\r\n]/g,"").replace(/\{.*\}/,"")+"{ ... }":t)}}return{templateUrl:"json-formatter.html",restrict:"E",replace:!0,scope:{json:"=",key:"=",open:"="},compile:function(e){return n.compile(e,s)}}}]),angular.module("RecursionHelper",[]).factory("RecursionHelper",["$compile",function(n){return{compile:function(e,t){angular.isFunction(t)&&(t={post:t});var r,s=e.contents().remove();return{pre:t&&t.pre?t.pre:null,post:function(e,o){r||(r=n(s)),r(e,function(n){o.append(n)}),t&&t.post&&t.post.apply(null,arguments)}}}}}]),angular.module("jsonFormatter").run(["$templateCache",function(n){n.put("json-formatter.html",'<div ng-init="isOpen = open && open > 0" class="json-formatter-row"><a ng-click="toggleOpen()"><span class="toggler {{isOpen ? \'open\' : \'\'}}" ng-if="isObject()"></span> <span class="key" ng-if="hasKey">{{key}}:</span> <span class="value"><span ng-if="isObject()"><span class="constructor-name">{{getConstructorName(json)}}</span> <span ng-if="isArray()"><span class="bracket">[</span><span class="number">{{json.length}}</span><span class="bracket">]</span></span></span> <span ng-if="!isObject()" ng-click="openLink(isUrl)" class="{{type}}" ng-class="{date: isDate, url: isUrl}">{{parseValue(json)}}</span></span></a><div class="children" ng-if="getKeys().length && isOpen"><json-formatter ng-repeat="key in getKeys() track by $index" json="json[key]" key="key" open="childrenOpen()"></json-formatter></div><div class="children empty object" ng-if="isEmptyObject()"></div><div class="children empty array" ng-if="getKeys() && !getKeys().length && isOpen && isArray()"></div></div>')}]);