mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Move debug message utils into core
This commit is contained in:
parent
1c3a97a71a
commit
6c36778cac
@ -116,6 +116,7 @@ module.exports = function(grunt) {
|
|||||||
"editor/js/ui/common/searchBox.js",
|
"editor/js/ui/common/searchBox.js",
|
||||||
"editor/js/ui/common/tabs.js",
|
"editor/js/ui/common/tabs.js",
|
||||||
"editor/js/ui/common/typedInput.js",
|
"editor/js/ui/common/typedInput.js",
|
||||||
|
"editor/js/ui/utils.js",
|
||||||
"editor/js/ui/deploy.js",
|
"editor/js/ui/deploy.js",
|
||||||
"editor/js/ui/keyboard.js",
|
"editor/js/ui/keyboard.js",
|
||||||
"editor/js/ui/workspaces.js",
|
"editor/js/ui/workspaces.js",
|
||||||
|
271
editor/js/ui/utils.js
Normal file
271
editor/js/ui/utils.js
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2016 IBM Corp.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
RED.utils = (function() {
|
||||||
|
|
||||||
|
function formatString(str) {
|
||||||
|
return str.replace(/\r?\n/g,"↵").replace(/\t/g,"→");
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildMessageSummaryValue(value) {
|
||||||
|
var result;
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('array['+value.length+']');
|
||||||
|
} else if (value === null) {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-null">null</span>');
|
||||||
|
} else if (typeof value === 'object') {
|
||||||
|
if (value.hasOwnProperty('type') && value.type === 'Buffer' && value.hasOwnProperty('data')) {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('buffer['+value.data.length+']');
|
||||||
|
} else if (value.hasOwnProperty('type') && value.type === 'array' && value.hasOwnProperty('data')) {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('array['+value.length+']');
|
||||||
|
} else {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-meta">object</span>');
|
||||||
|
}
|
||||||
|
} else if (typeof value === 'string') {
|
||||||
|
subvalue = value;
|
||||||
|
if (subvalue.length > 30) {
|
||||||
|
subvalue = subvalue.substring(0,30)+"…";
|
||||||
|
}
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-string"></span>').html('"'+formatString(subvalue)+'"');
|
||||||
|
} else {
|
||||||
|
result = $('<span class="debug-message-object-value debug-message-type-other"></span>').text(""+value);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
function makeExpandable(el,onexpand) {
|
||||||
|
el.addClass("debug-message-expandable");
|
||||||
|
el.click(function(e) {
|
||||||
|
var parent = $(this).parent();
|
||||||
|
if (parent.hasClass('collapsed')) {
|
||||||
|
if (onexpand && !parent.hasClass('built')) {
|
||||||
|
onexpand();
|
||||||
|
parent.addClass('built');
|
||||||
|
}
|
||||||
|
parent.removeClass('collapsed');
|
||||||
|
} else {
|
||||||
|
parent.addClass('collapsed');
|
||||||
|
}
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildMessageElement(obj,key,typeHint,hideKey) {
|
||||||
|
var i;
|
||||||
|
var e;
|
||||||
|
var entryObj;
|
||||||
|
var header;
|
||||||
|
var headerHead;
|
||||||
|
var value,subvalue;
|
||||||
|
var element = $('<span class="debug-message-element"></span>');
|
||||||
|
if (!key) {
|
||||||
|
element.addClass("debug-message-top-level");
|
||||||
|
}
|
||||||
|
|
||||||
|
header = $('<span></span>').appendTo(element);
|
||||||
|
|
||||||
|
if (key && !hideKey) {
|
||||||
|
$('<span class="debug-message-object-key"></span>').text(key).appendTo(header);
|
||||||
|
$('<span>: </span>').appendTo(header);
|
||||||
|
}
|
||||||
|
entryObj = $('<span class="debug-message-object-value"></span>').appendTo(header);
|
||||||
|
|
||||||
|
var isArray = Array.isArray(obj);
|
||||||
|
var isArrayObject = false;
|
||||||
|
if (obj && typeof obj === 'object' && obj.hasOwnProperty('type') && obj.hasOwnProperty('data')) {
|
||||||
|
isArray = true;
|
||||||
|
isArrayObject = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj === null || obj === undefined) {
|
||||||
|
$('<span class="debug-message-type-null">'+obj+'</span>').appendTo(entryObj);
|
||||||
|
} else if (typeof obj === 'string') {
|
||||||
|
element.addClass('collapsed');
|
||||||
|
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
||||||
|
$('<span class="debug-message-type-string debug-message-object-header"></span>').html('"'+formatString(obj)+'"').appendTo(entryObj);
|
||||||
|
makeExpandable(header, function() {
|
||||||
|
$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html(typeHint||'string').appendTo(header);
|
||||||
|
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(element);
|
||||||
|
$('<pre class="debug-message-type-string"></pre>').html(obj).appendTo(row);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
} else if (typeof obj === 'number') {
|
||||||
|
e = $('<span class="debug-message-type-number"></span>').text(""+obj).appendTo(entryObj);
|
||||||
|
e.click(function(evt) {
|
||||||
|
var format = $(this).data('format');
|
||||||
|
if (format === 'hex') {
|
||||||
|
$(this).text(""+obj).data('format','dec');
|
||||||
|
} else {
|
||||||
|
$(this).text("0x"+(obj).toString(16)).data('format','hex');
|
||||||
|
}
|
||||||
|
evt.preventDefault();
|
||||||
|
});
|
||||||
|
} else if (isArray) {
|
||||||
|
element.addClass('collapsed');
|
||||||
|
|
||||||
|
var originalLength = obj.length;
|
||||||
|
if (typeHint) {
|
||||||
|
var m = /\[(\d+)\]/.exec(typeHint);
|
||||||
|
if (m) {
|
||||||
|
originalLength = parseInt(m[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = obj;
|
||||||
|
var type = 'array';
|
||||||
|
if (isArrayObject) {
|
||||||
|
data = obj.data;
|
||||||
|
if (originalLength === undefined) {
|
||||||
|
originalLength = data.length;
|
||||||
|
}
|
||||||
|
type = obj.type.toLowerCase();
|
||||||
|
} else if (/buffer/.test(typeHint)) {
|
||||||
|
type = 'buffer';
|
||||||
|
}
|
||||||
|
var fullLength = data.length;
|
||||||
|
|
||||||
|
if (originalLength > 0) {
|
||||||
|
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
||||||
|
var arrayRows = $('<div class="debug-message-array-rows"></div>').appendTo(element);
|
||||||
|
element.addClass('debug-message-buffer-raw');
|
||||||
|
makeExpandable(header,function() {
|
||||||
|
if (!key) {
|
||||||
|
headerHead = $('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html(typeHint||(type+'['+originalLength+']')).appendTo(header);
|
||||||
|
}
|
||||||
|
if (type === 'buffer') {
|
||||||
|
var stringRow = $('<div class="debug-message-string-rows"></div>').appendTo(element);
|
||||||
|
var sr = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(stringRow);
|
||||||
|
var stringEncoding = "";
|
||||||
|
try {
|
||||||
|
stringEncoding = String.fromCharCode.apply(null, new Uint16Array(data))
|
||||||
|
} catch(err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
$('<pre class="debug-message-type-string"></pre>').html(stringEncoding).appendTo(sr);
|
||||||
|
var bufferOpts = $('<span class="debug-message-buffer-opts"></span>').appendTo(headerHead);
|
||||||
|
$('<a href="#"></a>').addClass('selected').html('raw').appendTo(bufferOpts).click(function(e) {
|
||||||
|
if ($(this).text() === 'raw') {
|
||||||
|
$(this).text('string');
|
||||||
|
element.addClass('debug-message-buffer-string').removeClass('debug-message-buffer-raw');
|
||||||
|
} else {
|
||||||
|
$(this).text('raw');
|
||||||
|
element.removeClass('debug-message-buffer-string').addClass('debug-message-buffer-raw');
|
||||||
|
}
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var row;
|
||||||
|
if (fullLength <= 10) {
|
||||||
|
for (i=0;i<fullLength;i++) {
|
||||||
|
row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(arrayRows);
|
||||||
|
buildMessageElement(data[i],""+i,false).appendTo(row);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i=0;i<fullLength;i+=10) {
|
||||||
|
var minRange = i;
|
||||||
|
row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(arrayRows);
|
||||||
|
header = $('<span></span>').appendTo(row);
|
||||||
|
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').appendTo(header);
|
||||||
|
makeExpandable(header, (function() {
|
||||||
|
var min = minRange;
|
||||||
|
var max = Math.min(fullLength-1,(minRange+9));
|
||||||
|
var parent = row;
|
||||||
|
return function() {
|
||||||
|
for (var i=min;i<=max;i++) {
|
||||||
|
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(parent);
|
||||||
|
buildMessageElement(data[i],""+i,false).appendTo(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})());
|
||||||
|
$('<span class="debug-message-object-key"></span>').html("["+minRange+" … "+Math.min(fullLength-1,(minRange+9))+"]").appendTo(header);
|
||||||
|
}
|
||||||
|
if (fullLength < originalLength) {
|
||||||
|
$('<div class="debug-message-object-entry collapsed"><span class="debug-message-object-key">['+fullLength+' … '+originalLength+']</span></div>').appendTo(arrayRows);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (key) {
|
||||||
|
headerHead = $('<span class="debug-message-type-meta f"></span>').html(typeHint||(type+'['+originalLength+']')).appendTo(entryObj);
|
||||||
|
} else {
|
||||||
|
headerHead = $('<span class="debug-message-object-header"></span>').appendTo(entryObj);
|
||||||
|
$('<span>[ </span>').appendTo(headerHead);
|
||||||
|
var arrayLength = Math.min(originalLength,10);
|
||||||
|
for (i=0;i<arrayLength;i++) {
|
||||||
|
buildMessageSummaryValue(data[i]).appendTo(headerHead);
|
||||||
|
if (i < arrayLength-1) {
|
||||||
|
$('<span>, </span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (originalLength > arrayLength) {
|
||||||
|
$('<span> …</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
if (arrayLength === 0) {
|
||||||
|
$('<span class="debug-message-type-meta">empty</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
$('<span> ]</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (typeof obj === 'object') {
|
||||||
|
element.addClass('collapsed');
|
||||||
|
var keys = Object.keys(obj);
|
||||||
|
if (key || keys.length > 0) {
|
||||||
|
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
||||||
|
makeExpandable(header, function() {
|
||||||
|
if (!key) {
|
||||||
|
$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html('object').appendTo(header);
|
||||||
|
}
|
||||||
|
for (i=0;i<keys.length;i++) {
|
||||||
|
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(element);
|
||||||
|
buildMessageElement(obj[keys[i]],keys[i],false).appendTo(row);
|
||||||
|
}
|
||||||
|
if (keys.length === 0) {
|
||||||
|
$('<div class="debug-message-object-entry debug-message-type-meta collapsed"></div>').text("empty").appendTo(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (key) {
|
||||||
|
$('<span class="debug-message-type-meta"></span>').html('object').appendTo(entryObj);
|
||||||
|
} else {
|
||||||
|
headerHead = $('<span class="debug-message-object-header"></span>').appendTo(entryObj);
|
||||||
|
$('<span>{ </span>').appendTo(headerHead);
|
||||||
|
var keysLength = Math.min(keys.length,5);
|
||||||
|
for (i=0;i<keysLength;i++) {
|
||||||
|
$('<span class="debug-message-object-key"></span>').text(keys[i]).appendTo(headerHead);
|
||||||
|
$('<span>: </span>').appendTo(headerHead);
|
||||||
|
buildMessageSummaryValue(obj[keys[i]]).appendTo(headerHead);
|
||||||
|
if (i < keysLength-1) {
|
||||||
|
$('<span>, </span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (keys.length > keysLength) {
|
||||||
|
$('<span> …</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
if (keysLength === 0) {
|
||||||
|
$('<span class="debug-message-type-meta">empty</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
$('<span> }</span>').appendTo(headerHead);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$('<span class="debug-message-type-other"></span>').text(""+obj).appendTo(entryObj);
|
||||||
|
}
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
createObjectElement: buildMessageElement,
|
||||||
|
}
|
||||||
|
})();
|
@ -1,3 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2016 IBM Corp.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
.debug-window {
|
.debug-window {
|
||||||
padding:0;
|
padding:0;
|
||||||
margin:0;
|
margin:0;
|
@ -53,6 +53,7 @@
|
|||||||
|
|
||||||
@import "keyboard";
|
@import "keyboard";
|
||||||
|
|
||||||
|
@import "debug";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -187,11 +187,9 @@
|
|||||||
$("#debug-tab-open").click(function(e) {
|
$("#debug-tab-open").click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
subWindow = window.open(document.location.toString().replace(/#.*$/,"")+"debug/view/view.html","nodeREDDebugView","menubar=no,location=no,toolbar=no,chrome,height=500,width=600");
|
subWindow = window.open(document.location.toString().replace(/#.*$/,"")+"debug/view/view.html","nodeREDDebugView","menubar=no,location=no,toolbar=no,chrome,height=500,width=600");
|
||||||
/*
|
subWindow.onload = function() {
|
||||||
* Message format:
|
subWindow.postMessage({event:"workspaceChange",activeWorkspace:RED.workspaces.active()},"*");
|
||||||
*
|
}
|
||||||
*
|
|
||||||
*/
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$(window).unload(function() {
|
$(window).unload(function() {
|
||||||
@ -256,4 +254,3 @@
|
|||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<link rel="stylesheet" href="debug/view/style.css">
|
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2016 IBM Corp.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
if (!RED) {
|
if (!RED) {
|
||||||
var RED = {}
|
var RED = {}
|
||||||
}
|
}
|
||||||
@ -12,13 +28,6 @@ RED.debug = (function() {
|
|||||||
var sbc;
|
var sbc;
|
||||||
var activeWorkspace;
|
var activeWorkspace;
|
||||||
|
|
||||||
/**
|
|
||||||
* messageMouseEnter
|
|
||||||
* messageMouseLeave
|
|
||||||
* messageSourceClick
|
|
||||||
* clear
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function init(_config) {
|
function init(_config) {
|
||||||
config = _config;
|
config = _config;
|
||||||
|
|
||||||
@ -169,251 +178,6 @@ RED.debug = (function() {
|
|||||||
return str.replace(/\n/g,"↵").replace(/\t/g,"→");
|
return str.replace(/\n/g,"↵").replace(/\t/g,"→");
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildMessageSummaryValue(value) {
|
|
||||||
var result;
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('array['+value.length+']');
|
|
||||||
} else if (value === null) {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-null">null</span>');
|
|
||||||
} else if (typeof value === 'object') {
|
|
||||||
if (value.hasOwnProperty('type') && value.type === 'Buffer' && value.hasOwnProperty('data')) {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('buffer['+value.data.length+']');
|
|
||||||
} else if (value.hasOwnProperty('type') && value.type === 'array' && value.hasOwnProperty('data')) {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-meta"></span>').html('array['+value.length+']');
|
|
||||||
} else {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-meta">object</span>');
|
|
||||||
}
|
|
||||||
} else if (typeof value === 'string') {
|
|
||||||
subvalue = value;
|
|
||||||
if (subvalue.length > 30) {
|
|
||||||
subvalue = subvalue.substring(0,30)+"…";
|
|
||||||
}
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-string"></span>').html('"'+formatString(subvalue)+'"');
|
|
||||||
} else {
|
|
||||||
result = $('<span class="debug-message-object-value debug-message-type-other"></span>').text(""+value);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
function makeExpandable(el,onexpand) {
|
|
||||||
el.addClass("debug-message-expandable");
|
|
||||||
el.click(function(e) {
|
|
||||||
var parent = $(this).parent();
|
|
||||||
if (parent.hasClass('collapsed')) {
|
|
||||||
if (onexpand && !parent.hasClass('built')) {
|
|
||||||
onexpand();
|
|
||||||
parent.addClass('built');
|
|
||||||
}
|
|
||||||
parent.removeClass('collapsed');
|
|
||||||
} else {
|
|
||||||
parent.addClass('collapsed');
|
|
||||||
}
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildMessageElement(obj,key,typeHint,hideKey) {
|
|
||||||
var i;
|
|
||||||
var e;
|
|
||||||
var entryObj;
|
|
||||||
var header;
|
|
||||||
var headerHead;
|
|
||||||
var value,subvalue;
|
|
||||||
var element = $('<span class="debug-message-element"></span>');
|
|
||||||
if (!key) {
|
|
||||||
element.addClass("debug-message-top-level");
|
|
||||||
}
|
|
||||||
|
|
||||||
header = $('<span></span>').appendTo(element);
|
|
||||||
|
|
||||||
if (key && !hideKey) {
|
|
||||||
$('<span class="debug-message-object-key"></span>').text(key).appendTo(header);
|
|
||||||
$('<span>: </span>').appendTo(header);
|
|
||||||
}
|
|
||||||
entryObj = $('<span class="debug-message-object-value"></span>').appendTo(header);
|
|
||||||
|
|
||||||
var isArray = Array.isArray(obj);
|
|
||||||
var isArrayObject = false;
|
|
||||||
if (obj && typeof obj === 'object' && obj.hasOwnProperty('type') && obj.hasOwnProperty('data')) {
|
|
||||||
isArray = true;
|
|
||||||
isArrayObject = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (obj === null || obj === undefined) {
|
|
||||||
$('<span class="debug-message-type-null">'+obj+'</span>').appendTo(entryObj);
|
|
||||||
} else if (typeof obj === 'string') {
|
|
||||||
element.addClass('collapsed');
|
|
||||||
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
|
||||||
$('<span class="debug-message-type-string debug-message-object-header"></span>').html('"'+formatString(obj)+'"').appendTo(entryObj);
|
|
||||||
makeExpandable(header, function() {
|
|
||||||
$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html(typeHint||'string').appendTo(header);
|
|
||||||
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(element);
|
|
||||||
$('<pre class="debug-message-type-string"></pre>').html(obj).appendTo(row);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
} else if (typeof obj === 'number') {
|
|
||||||
e = $('<span class="debug-message-type-number"></span>').text(""+obj).appendTo(entryObj);
|
|
||||||
e.click(function(evt) {
|
|
||||||
var format = $(this).data('format');
|
|
||||||
if (format === 'hex') {
|
|
||||||
$(this).text(""+obj).data('format','dec');
|
|
||||||
} else {
|
|
||||||
$(this).text("0x"+(obj).toString(16)).data('format','hex');
|
|
||||||
}
|
|
||||||
evt.preventDefault();
|
|
||||||
});
|
|
||||||
} else if (isArray) {
|
|
||||||
element.addClass('collapsed');
|
|
||||||
|
|
||||||
var originalLength = obj.length;
|
|
||||||
if (typeHint) {
|
|
||||||
var m = /\[(\d+)\]/.exec(typeHint);
|
|
||||||
if (m) {
|
|
||||||
originalLength = parseInt(m[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var data = obj;
|
|
||||||
var type = 'array';
|
|
||||||
if (isArrayObject) {
|
|
||||||
data = obj.data;
|
|
||||||
if (originalLength === undefined) {
|
|
||||||
originalLength = data.length;
|
|
||||||
}
|
|
||||||
type = obj.type.toLowerCase();
|
|
||||||
} else if (/buffer/.test(typeHint)) {
|
|
||||||
type = 'buffer';
|
|
||||||
}
|
|
||||||
var fullLength = data.length;
|
|
||||||
|
|
||||||
if (originalLength > 0) {
|
|
||||||
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
|
||||||
var arrayRows = $('<div class="debug-message-array-rows"></div>').appendTo(element);
|
|
||||||
element.addClass('debug-message-buffer-raw');
|
|
||||||
makeExpandable(header,function() {
|
|
||||||
if (!key) {
|
|
||||||
headerHead = $('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html(typeHint||(type+'['+originalLength+']')).appendTo(header);
|
|
||||||
}
|
|
||||||
if (type === 'buffer') {
|
|
||||||
var stringRow = $('<div class="debug-message-string-rows"></div>').appendTo(element);
|
|
||||||
var sr = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(stringRow);
|
|
||||||
var stringEncoding = "";
|
|
||||||
try {
|
|
||||||
stringEncoding = String.fromCharCode.apply(null, new Uint16Array(data))
|
|
||||||
} catch(err) {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
$('<pre class="debug-message-type-string"></pre>').html(stringEncoding).appendTo(sr);
|
|
||||||
var bufferOpts = $('<span class="debug-message-buffer-opts"></span>').appendTo(headerHead);
|
|
||||||
$('<a href="#"></a>').addClass('selected').html('raw').appendTo(bufferOpts).click(function(e) {
|
|
||||||
if ($(this).text() === 'raw') {
|
|
||||||
$(this).text('string');
|
|
||||||
element.addClass('debug-message-buffer-string').removeClass('debug-message-buffer-raw');
|
|
||||||
} else {
|
|
||||||
$(this).text('raw');
|
|
||||||
element.removeClass('debug-message-buffer-string').addClass('debug-message-buffer-raw');
|
|
||||||
}
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
})
|
|
||||||
}
|
|
||||||
var row;
|
|
||||||
if (fullLength <= 10) {
|
|
||||||
for (i=0;i<fullLength;i++) {
|
|
||||||
row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(arrayRows);
|
|
||||||
buildMessageElement(data[i],""+i,false).appendTo(row);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (i=0;i<fullLength;i+=10) {
|
|
||||||
var minRange = i;
|
|
||||||
row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(arrayRows);
|
|
||||||
header = $('<span></span>').appendTo(row);
|
|
||||||
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').appendTo(header);
|
|
||||||
makeExpandable(header, (function() {
|
|
||||||
var min = minRange;
|
|
||||||
var max = Math.min(fullLength-1,(minRange+9));
|
|
||||||
var parent = row;
|
|
||||||
return function() {
|
|
||||||
for (var i=min;i<=max;i++) {
|
|
||||||
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(parent);
|
|
||||||
buildMessageElement(data[i],""+i,false).appendTo(row);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})());
|
|
||||||
$('<span class="debug-message-object-key"></span>').html("["+minRange+" … "+Math.min(fullLength-1,(minRange+9))+"]").appendTo(header);
|
|
||||||
}
|
|
||||||
if (fullLength < originalLength) {
|
|
||||||
$('<div class="debug-message-object-entry collapsed"><span class="debug-message-object-key">['+fullLength+' … '+originalLength+']</span></div>').appendTo(arrayRows);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (key) {
|
|
||||||
headerHead = $('<span class="debug-message-type-meta f"></span>').html(typeHint||(type+'['+originalLength+']')).appendTo(entryObj);
|
|
||||||
} else {
|
|
||||||
headerHead = $('<span class="debug-message-object-header"></span>').appendTo(entryObj);
|
|
||||||
$('<span>[ </span>').appendTo(headerHead);
|
|
||||||
var arrayLength = Math.min(originalLength,10);
|
|
||||||
for (i=0;i<arrayLength;i++) {
|
|
||||||
buildMessageSummaryValue(data[i]).appendTo(headerHead);
|
|
||||||
if (i < arrayLength-1) {
|
|
||||||
$('<span>, </span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (originalLength > arrayLength) {
|
|
||||||
$('<span> …</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
if (arrayLength === 0) {
|
|
||||||
$('<span class="debug-message-type-meta">empty</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
$('<span> ]</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (typeof obj === 'object') {
|
|
||||||
element.addClass('collapsed');
|
|
||||||
var keys = Object.keys(obj);
|
|
||||||
if (key || keys.length > 0) {
|
|
||||||
$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(header);
|
|
||||||
makeExpandable(header, function() {
|
|
||||||
if (!key) {
|
|
||||||
$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').html('object').appendTo(header);
|
|
||||||
}
|
|
||||||
for (i=0;i<keys.length;i++) {
|
|
||||||
var row = $('<div class="debug-message-object-entry collapsed"></div>').appendTo(element);
|
|
||||||
buildMessageElement(obj[keys[i]],keys[i],false).appendTo(row);
|
|
||||||
}
|
|
||||||
if (keys.length === 0) {
|
|
||||||
$('<div class="debug-message-object-entry debug-message-type-meta collapsed"></div>').text("empty").appendTo(element);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (key) {
|
|
||||||
$('<span class="debug-message-type-meta"></span>').html('object').appendTo(entryObj);
|
|
||||||
} else {
|
|
||||||
headerHead = $('<span class="debug-message-object-header"></span>').appendTo(entryObj);
|
|
||||||
$('<span>{ </span>').appendTo(headerHead);
|
|
||||||
var keysLength = Math.min(keys.length,5);
|
|
||||||
for (i=0;i<keysLength;i++) {
|
|
||||||
$('<span class="debug-message-object-key"></span>').text(keys[i]).appendTo(headerHead);
|
|
||||||
$('<span>: </span>').appendTo(headerHead);
|
|
||||||
buildMessageSummaryValue(obj[keys[i]]).appendTo(headerHead);
|
|
||||||
if (i < keysLength-1) {
|
|
||||||
$('<span>, </span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (keys.length > keysLength) {
|
|
||||||
$('<span> …</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
if (keysLength === 0) {
|
|
||||||
$('<span class="debug-message-type-meta">empty</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
$('<span> }</span>').appendTo(headerHead);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$('<span class="debug-message-type-other"></span>').text(""+obj).appendTo(entryObj);
|
|
||||||
}
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleDebugMessage(o) {
|
function handleDebugMessage(o) {
|
||||||
var msg = document.createElement("div");
|
var msg = document.createElement("div");
|
||||||
|
|
||||||
@ -479,7 +243,7 @@ RED.debug = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var el = $('<span class="debug-message-payload"></span>').appendTo(msg);
|
var el = $('<span class="debug-message-payload"></span>').appendTo(msg);
|
||||||
buildMessageElement(payload,/*true*/null,format).appendTo(el);
|
RED.utils.createObjectElement(payload,/*true*/null,format).appendTo(el);
|
||||||
var atBottom = (sbc.scrollHeight-messageList.height()-sbc.scrollTop) < 5;
|
var atBottom = (sbc.scrollHeight-messageList.height()-sbc.scrollTop) < 5;
|
||||||
var m = {
|
var m = {
|
||||||
el: msg
|
el: msg
|
||||||
@ -514,7 +278,6 @@ RED.debug = (function() {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
buildMessageElement: buildMessageElement,
|
|
||||||
refreshMessageList:refreshMessageList,
|
refreshMessageList:refreshMessageList,
|
||||||
handleDebugMessage: handleDebugMessage
|
handleDebugMessage: handleDebugMessage
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="../../red/style.min.css">
|
<link rel="stylesheet" href="../../red/style.min.css">
|
||||||
<link rel="stylesheet" href="style.css">
|
|
||||||
<link rel="stylesheet" href="../../vendor/font-awesome/css/font-awesome.min.css">
|
<link rel="stylesheet" href="../../vendor/font-awesome/css/font-awesome.min.css">
|
||||||
<title>Node-RED Debug Tools</title>
|
<title>Node-RED Debug Tools</title>
|
||||||
</head>
|
</head>
|
||||||
<body class="debug-window">
|
<body class="debug-window">
|
||||||
</body>
|
</body>
|
||||||
<script src="../../vendor/vendor-jquery.js"></script>
|
<script src="../../vendor/vendor.js"></script>
|
||||||
|
<script src="../../red/red.js"></script>
|
||||||
<script src="debug-utils.js"></script>
|
<script src="debug-utils.js"></script>
|
||||||
<script src="debug.js"></script>
|
<script src="debug.js"></script>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user