Fixes to utils

This commit is contained in:
Jim Cooper
2019-10-03 20:26:10 -06:00
parent fc94b08b0b
commit f6aec34d41
5 changed files with 66 additions and 7 deletions

14
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,14 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}\\utils.js"
}
]
}

5
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"editor.glyphMargin": false,
"editor.folding": false,
"scm.diffDecorations": "none"
}

View File

@@ -1,2 +1,2 @@
# JavaScript Objects, Prototypes and Classes # JavaScript Objects, Prototypes and Classes
This is a demo code for the Pluralsight course at https://app.pluralsight.com/courses/javascript-objects-prototypes-and-classes This is the demo code for the Pluralsight course at https://app.pluralsight.com/courses/javascript-objects-prototypes-and-classes

View File

@@ -1,3 +1,6 @@
'use strict'; 'use strict';
(function() {
display('Hello, world!!!');
})();

View File

@@ -10,6 +10,12 @@ window.display = function () {
domActionBuffer.push({ action: 'display', arguments: arguments }); domActionBuffer.push({ action: 'display', arguments: arguments });
}; };
window.displayRegexArray = function () {
if (!flushTimeout) flushTimeout = setTimeout(flushDomQueue, 100);
domActionBuffer.push({ action: 'displayRegexArray', arguments: arguments });
};
window.clearDisplay = function () { window.clearDisplay = function () {
if (!flushTimeout) flushTimeout = setTimeout(flushDomQueue, 100); if (!flushTimeout) flushTimeout = setTimeout(flushDomQueue, 100);
@@ -25,11 +31,15 @@ function doClearDisplay() {
function doDisplay() { function doDisplay() {
for (var i = 0; i < arguments.length; i++) { for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'object') displayObject(arguments[i]); if (typeof arguments[i] === 'object') displayObject(arguments[i], false);
else displayValue(arguments[i], true); else displayValue(arguments[i], true);
} }
} }
function doDisplayRegexArray() {
displayObject(arguments[0], true)
}
function flushDomQueue() { function flushDomQueue() {
flushTimeout = null; flushTimeout = null;
@@ -42,6 +52,9 @@ function flushDomQueue() {
case 'display': case 'display':
doDisplay(...domAction.arguments); doDisplay(...domAction.arguments);
break; break;
case 'displayRegexArray':
doDisplayRegexArray(...domAction.arguments);
break;
case 'clearDisplay': case 'clearDisplay':
doClearDisplay(); doClearDisplay();
break; break;
@@ -59,12 +72,36 @@ function displayValue(value, addMargin, addPadding) {
outputTag.appendChild(div); outputTag.appendChild(div);
} }
function displayObject(object) { function displayObject(object, regexArray) {
if (object == null) return displayValue('null'); if (object == null) return displayValue('null');
if (getTypeName(object) === 'Array' && !regexArray) {
let appendedArrayValues = object.reduce((acc, cur) => acc+=cur+',', '')
if (appendedArrayValues.length > 0)
appendedArrayValues = appendedArrayValues.substr(0, appendedArrayValues.length - 1)
displayValue('[' + appendedArrayValues + ']')
if (Object.keys(object).length > object.length) {
displayValue('&nbsp;')
displayValue('Additional array properties:')
}
for (let propertyName in object)
{
if (!Number.isInteger(+propertyName) && object[propertyName] !== undefined)
displayValue('&nbsp;&nbsp;' + propertyName + ": " + object[propertyName])
else if (typeof object[propertyName] === 'object', false) {
return displayObject()
}
}
return
}
displayValue(getTypeName(object) + ' {'); displayValue(getTypeName(object) + ' {');
for (var propertyName in object) { for (var propertyName in object) {
if (propertyName != 'constructor') { if (typeof object[propertyName] === 'object', false)
displayValue(propertyName + ': ' + object[propertyName], false, true); displayObject(object[propertyName])
else if (propertyName != 'constructor' && (!regexArray || object[propertyName] !== undefined)) {
let prefix = Number.isInteger(+propertyName) && regexArray ? '[' : ''
let suffix = Number.isInteger(+propertyName) && regexArray ? ']' : ''
displayValue(prefix + propertyName + suffix + ': ' + object[propertyName], false, true);
} }
} }
displayValue('}', true); displayValue('}', true);