diff --git a/src/DotNetCore.CAP/Dashboard/Content/css/jsonview.min.css b/src/DotNetCore.CAP/Dashboard/Content/css/jsonview.min.css new file mode 100644 index 0000000..97805e3 --- /dev/null +++ b/src/DotNetCore.CAP/Dashboard/Content/css/jsonview.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.jsonview{font-family:monospace;font-size:1.1em;white-space:pre-wrap}.jsonview .prop{font-weight:700;text-decoration:none;color:#000}.jsonview .null,.jsonview .undefined{color:red}.jsonview .bool,.jsonview .num{color:#00f}.jsonview .string{color:green;white-space:pre-wrap}.jsonview .string.multiline{display:inline-block;vertical-align:text-top}.jsonview .collapser{position:absolute;left:-1em;cursor:pointer}.jsonview .collapsible{transition:height 1.2s;transition:width 1.2s}.jsonview .collapsible.collapsed{height:.8em;width:1em;display:inline-block;overflow:hidden;margin:0}.jsonview .collapsible.collapsed:before{content:"…";width:1em;margin-left:.2em}.jsonview .collapser.collapsed{transform:rotate(0)}.jsonview .q{display:inline-block;width:0;color:transparent}.jsonview li{position:relative}.jsonview ul{list-style:none;margin:0 0 0 2em;padding:0}.jsonview h1{font-size:1.2em} \ No newline at end of file diff --git a/src/DotNetCore.CAP/Dashboard/Content/js/cap.js b/src/DotNetCore.CAP/Dashboard/Content/js/cap.js index ad8b394..717dc0f 100644 --- a/src/DotNetCore.CAP/Dashboard/Content/js/cap.js +++ b/src/DotNetCore.CAP/Dashboard/Content/js/cap.js @@ -5,12 +5,12 @@ locale: document.documentElement.lang }; - cap.Metrics = (function() { + cap.Metrics = (function () { function Metrics() { this._metrics = {}; } - Metrics.prototype.addElement = function(name, element) { + Metrics.prototype.addElement = function (name, element) { if (!(name in this._metrics)) { this._metrics[name] = []; } @@ -18,7 +18,7 @@ this._metrics[name].push(element); }; - Metrics.prototype.getElements = function(name) { + Metrics.prototype.getElements = function (name) { if (!(name in this._metrics)) { return []; } @@ -26,7 +26,7 @@ return this._metrics[name]; }; - Metrics.prototype.getNames = function() { + Metrics.prototype.getNames = function () { var result = []; var metrics = this._metrics; @@ -77,11 +77,11 @@ if (xSettings) { this._xAxis = new Rickshaw.Graph.Axis.Time($.extend({ - graph: graph, - timeFixture: new Rickshaw.Fixtures.Time.Local() + graph: graph, + timeFixture: new Rickshaw.Fixtures.Time.Local() }, xSettings)); } - + if (ySettings) { this._yAxis = new Rickshaw.Graph.Axis.Y($.extend({ graph: graph, @@ -92,7 +92,7 @@ graph.render(); } - cap.RealtimeGraph = (function() { + cap.RealtimeGraph = (function () { function RealtimeGraph(element, succeeded, failed, succeededStr, failedStr) { this._succeeded = succeeded; this._failed = failed; @@ -100,8 +100,16 @@ this._initGraph(element, { renderer: 'bar', series: new Rickshaw.Series.FixedDuration([ - { name: failedStr, color: '#d9534f' }, - { name: succeededStr, color: '#5cb85c' } + { + name: failedStr, + //color: '#d9534f' + color: 'red' + }, + { + name: succeededStr, + //color: '#5cb85c' + color: '#cb513a' + } ], undefined, { timeInterval: 2000, maxDataPoints: 100 } @@ -122,7 +130,7 @@ this._graph.series.addData({ failed: failed, succeeded: succeeded }); this._graph.render(); } - + this._succeeded = newSucceeded; this._failed = newFailed; }; @@ -130,17 +138,19 @@ return RealtimeGraph; })(); - cap.HistoryGraph = (function() { + cap.HistoryGraph = (function () { function HistoryGraph(element, succeeded, failed, succeededStr, failedStr) { this._initGraph(element, { renderer: 'area', series: [ { color: '#d9534f', + //color: 'red', data: failed, name: failedStr }, { color: '#6ACD65', + //color: 'blue', data: succeeded, name: succeededStr } @@ -153,7 +163,7 @@ return HistoryGraph; })(); - cap.StatisticsPoller = (function() { + cap.StatisticsPoller = (function () { function StatisticsPoller(metricsCallback, statisticsUrl, pollInterval) { this._metricsCallback = metricsCallback; this._listeners = []; @@ -165,9 +175,9 @@ StatisticsPoller.prototype.start = function () { var self = this; - var intervalFunc = function() { + var intervalFunc = function () { try { - $.post(self._statisticsUrl, { metrics: self._metricsCallback() }, function(data) { + $.post(self._statisticsUrl, { metrics: self._metricsCallback() }, function (data) { self._notifyListeners(data); }); } catch (e) { @@ -178,21 +188,21 @@ this._intervalId = setInterval(intervalFunc, this._pollInterval); }; - StatisticsPoller.prototype.stop = function() { + StatisticsPoller.prototype.stop = function () { if (this._intervalId !== null) { clearInterval(this._intervalId); this._intervalId = null; } }; - StatisticsPoller.prototype.addListener = function(listener) { + StatisticsPoller.prototype.addListener = function (listener) { this._listeners.push(listener); }; - StatisticsPoller.prototype._notifyListeners = function(statistics) { + StatisticsPoller.prototype._notifyListeners = function (statistics) { var length = this._listeners.length; var i; - + for (i = 0; i < length; i++) { this._listeners[i](statistics); } @@ -201,7 +211,7 @@ return StatisticsPoller; })(); - cap.Page = (function() { + cap.Page = (function () { function Page(config) { this._metrics = new cap.Metrics(); @@ -219,7 +229,7 @@ this._poller.start(); }; - Page.prototype._createRealtimeGraph = function(elementId) { + Page.prototype._createRealtimeGraph = function (elementId) { var realtimeElement = document.getElementById(elementId); if (realtimeElement) { var succeeded = parseInt($(realtimeElement).data('succeeded')); @@ -233,7 +243,7 @@ realtimeGraph.appendHistory(data); }); - $(window).resize(function() { + $(window).resize(function () { realtimeGraph.update(); }); @@ -243,7 +253,7 @@ return null; }; - Page.prototype._createHistoryGraph = function(elementId) { + Page.prototype._createHistoryGraph = function (elementId) { var historyElement = document.getElementById(elementId); if (historyElement) { var createSeries = function (obj) { @@ -348,11 +358,11 @@ if (!confirmText || confirm(confirmText)) { $this.prop('disabled'); - var loadingDelay = setTimeout(function() { + var loadingDelay = setTimeout(function () { $this.button('loading'); }, 100); - $.post($this.data('ajax'), function() { + $.post($this.data('ajax'), function () { clearTimeout(loadingDelay); window.location.reload(); }); @@ -369,20 +379,20 @@ $expander.text('Less details...'); } - $expandable.slideToggle( - 150, - function() { - if (!$expandable.is(':visible')) { - $expander.text('More details...'); - } - }); + $expandable.slideToggle( + 150, + function () { + if (!$expandable.is(':visible')) { + $expander.text('More details...'); + } + }); e.preventDefault(); }); $('.js-jobs-list').each(function () { var container = this; - var selectRow = function(row, isSelected) { + var selectRow = function (row, isSelected) { var $checkbox = $('.js-jobs-list-checkbox', row); if ($checkbox.length > 0) { $checkbox.prop('checked', isSelected); @@ -390,7 +400,7 @@ } }; - var toggleRowSelection = function(row) { + var toggleRowSelection = function (row) { var $checkbox = $('.js-jobs-list-checkbox', row); if ($checkbox.length > 0) { var isSelected = $checkbox.is(':checked'); @@ -402,13 +412,13 @@ $('.js-jobs-list-select-all', container) .prop('checked', state === 'all-selected') .prop('indeterminate', state === 'some-selected'); - + $('.js-jobs-list-command', container) .prop('disabled', state === 'none-selected'); }; - var updateListState = function() { - var selectedRows = $('.js-jobs-list-checkbox', container).map(function() { + var updateListState = function () { + var selectedRows = $('.js-jobs-list-checkbox', container).map(function () { return $(this).prop('checked'); }).get(); @@ -427,7 +437,7 @@ setListState(state); }; - $(this).on('click', '.js-jobs-list-checkbox', function(e) { + $(this).on('click', '.js-jobs-list-checkbox', function (e) { selectRow( $(this).closest('.js-jobs-list-row').first(), $(this).is(':checked')); @@ -444,21 +454,21 @@ updateListState(); }); - $(this).on('click', '.js-jobs-list-select-all', function() { + $(this).on('click', '.js-jobs-list-select-all', function () { var selectRows = $(this).is(':checked'); - $('.js-jobs-list-row', container).each(function() { + $('.js-jobs-list-row', container).each(function () { selectRow(this, selectRows); }); updateListState(); }); - $(this).on('click', '.js-jobs-list-command', function(e) { + $(this).on('click', '.js-jobs-list-command', function (e) { var $this = $(this); var confirmText = $this.data('confirm'); - var jobs = $("input[name='jobs[]']:checked", container).map(function() { + var jobs = $("input[name='jobs[]']:checked", container).map(function () { return $(this).val(); }).get(); diff --git a/src/DotNetCore.CAP/Dashboard/Content/js/jsonview.min.js b/src/DotNetCore.CAP/Dashboard/Content/js/jsonview.min.js new file mode 100644 index 0000000..de78986 --- /dev/null +++ b/src/DotNetCore.CAP/Dashboard/Content/js/jsonview.min.js @@ -0,0 +1 @@ +!function(e){var t,n,r,l,o;return o=["object","array","number","string","boolean","null"],r=function(){function t(e){null==e&&(e={}),this.options=e}return t.prototype.htmlEncode=function(e){return null!==e?e.toString().replace(/&/g,"&").replace(/"/g,""").replace(//g,">"):""},t.prototype.jsString=function(e){return e=JSON.stringify(e).slice(1,-1),this.htmlEncode(e)},t.prototype.decorateWithSpan=function(e,t){return''+this.htmlEncode(e)+""},t.prototype.valueToHTML=function(t,n){var r;if(null==n&&(n=0),r=Object.prototype.toString.call(t).match(/\s(.+)]/)[1].toLowerCase(),this.options.strict&&!e.inArray(r,o))throw new Error(""+r+" is not a valid JSON value type");return this[""+r+"ToHTML"].call(this,t,n)},t.prototype.nullToHTML=function(e){return this.decorateWithSpan("null","null")},t.prototype.undefinedToHTML=function(){return this.decorateWithSpan("undefined","undefined")},t.prototype.numberToHTML=function(e){return this.decorateWithSpan(e,"num")},t.prototype.stringToHTML=function(e){var t,n;return/^(http|https|file):\/\/[^\s]+$/i.test(e)?'"'+this.jsString(e)+'"':(t="",e=this.jsString(e),this.options.nl2br&&(n=/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g,n.test(e)&&(t=" multiline",e=(e+"").replace(n,"$1
"))),'"'+e+'"')},t.prototype.booleanToHTML=function(e){return this.decorateWithSpan(e,"bool")},t.prototype.arrayToHTML=function(e,t){var n,r,l,o,i,s,a,p;for(null==t&&(t=0),r=!1,i="",o=e.length,l=a=0,p=e.length;p>a;l=++a)s=e[l],r=!0,i+="
  • "+this.valueToHTML(s,t+1),o>1&&(i+=","),i+="
  • ",o--;return r?(n=0===t?"":" collapsible",'[]"):"[ ]"},t.prototype.objectToHTML=function(e,t){var n,r,l,o,i,s,a;null==t&&(t=0),r=!1,i="",o=0;for(s in e)o++;for(s in e)a=e[s],r=!0,l=this.options.escape?this.jsString(s):s,i+='
  • "'+l+'": '+this.valueToHTML(a,t+1),o>1&&(i+=","),i+="
  • ",o--;return r?(n=0===t?"":" collapsible",'{}"):"{ }"},t.prototype.jsonToHTML=function(e){return'
    '+this.valueToHTML(e)+"
    "},t}(),"undefined"!=typeof module&&null!==module&&(module.exports=r),n=function(){function e(){}return e.bindEvent=function(e,t){var n;return e.firstChild.addEventListener("click",function(e){return function(n){return e.toggle(n.target.parentNode.firstChild,t)}}(this)),n=document.createElement("div"),n.className="collapser",n.innerHTML=t.collapsed?"+":"-",n.addEventListener("click",function(e){return function(n){return e.toggle(n.target,t)}}(this)),e.insertBefore(n,e.firstChild),t.collapsed?this.collapse(n):void 0},e.expand=function(e){var t,n;return n=this.collapseTarget(e),""!==n.style.display?(t=n.parentNode.getElementsByClassName("ellipsis")[0],n.parentNode.removeChild(t),n.style.display="",e.innerHTML="-"):void 0},e.collapse=function(e){var t,n;return n=this.collapseTarget(e),"none"!==n.style.display?(n.style.display="none",t=document.createElement("span"),t.className="ellipsis",t.innerHTML=" … ",n.parentNode.insertBefore(t,n),e.innerHTML="+"):void 0},e.toggle=function(e,t){var n,r,l,o,i,s;if(null==t&&(t={}),l=this.collapseTarget(e),n="none"===l.style.display?"expand":"collapse",t.recursive_collapser){for(r=e.parentNode.getElementsByClassName("collapser"),s=[],o=0,i=r.length;i>o;o++)e=r[o],s.push(this[n](e));return s}return this[n](e)},e.collapseTarget=function(e){var t,n;return n=e.parentNode.getElementsByClassName("collapsible"),n.length?t=n[0]:void 0},e}(),t=e,l={collapse:function(e){return"-"===e.innerHTML?n.collapse(e):void 0},expand:function(e){return"+"===e.innerHTML?n.expand(e):void 0},toggle:function(e){return n.toggle(e)}},t.fn.JSONView=function(){var e,o,i,s,a,p,c;return e=arguments,null!=l[e[0]]?(a=e[0],this.each(function(){var n,r;return n=t(this),null!=e[1]?(r=e[1],n.find(".jsonview .collapsible.level"+r).siblings(".collapser").each(function(){return l[a](this)})):n.find(".jsonview > ul > li .collapsible").siblings(".collapser").each(function(){return l[a](this)})})):(s=e[0],p=e[1]||{},o={collapsed:!1,nl2br:!1,recursive_collapser:!1,escape:!0,strict:!1},p=t.extend(o,p),i=new r(p),"[object String]"===Object.prototype.toString.call(s)&&(s=JSON.parse(s)),c=i.jsonToHTML(s),this.each(function(){var e,r,l,o,i,s;for(e=t(this),e.html(c),l=e[0].getElementsByClassName("collapsible"),s=[],o=0,i=l.length;i>o;o++)r=l[o],"LI"===r.parentNode.nodeName?s.push(n.bindEvent(r.parentNode,p)):s.push(void 0);return s}))}}(jQuery); \ No newline at end of file