From 2ab90a303a7a760bbd741ab1aef19aa28b2ca0f7 Mon Sep 17 00:00:00 2001 From: "Julien Carion (juca)" Date: Mon, 30 Sep 2024 13:58:27 +0200 Subject: [PATCH 1/2] [IMP] devtools: allow expansion of empty class This commit makes it possible to expand empty classes to see their prototype instead of displaying them as simple empty objects. --- tools/devtools/src/page_scripts/owl_devtools_global_hook.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/devtools/src/page_scripts/owl_devtools_global_hook.js b/tools/devtools/src/page_scripts/owl_devtools_global_hook.js index 7ec4fa7aa..3e979de9c 100644 --- a/tools/devtools/src/page_scripts/owl_devtools_global_hook.js +++ b/tools/devtools/src/page_scripts/owl_devtools_global_hook.js @@ -834,7 +834,9 @@ case obj instanceof Object: child.contentType = "object"; child.hasChildren = - Object.keys(obj).length || Object.getOwnPropertySymbols(obj).length; + Object.keys(obj).length || + Object.getOwnPropertySymbols(obj).length || + obj.constructor.name !== "Object"; break; default: child.contentType = typeof obj; From 0fbb138029bb9f274fc08367078900fc4640b39a Mon Sep 17 00:00:00 2001 From: "Julien Carion (juca)" Date: Mon, 30 Sep 2024 16:29:15 +0200 Subject: [PATCH 2/2] [IMP] devtools: show objects class name and add special extension cases This commit ensures that class names are displayed for non generic objects and extensions of generic classes will have custom display for their content. --- .../page_scripts/owl_devtools_global_hook.js | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/tools/devtools/src/page_scripts/owl_devtools_global_hook.js b/tools/devtools/src/page_scripts/owl_devtools_global_hook.js index 3e979de9c..889ef630d 100644 --- a/tools/devtools/src/page_scripts/owl_devtools_global_hook.js +++ b/tools/devtools/src/page_scripts/owl_devtools_global_hook.js @@ -109,23 +109,34 @@ object(obj) { const result = []; let length = 0; - for (const [key, value] of Object.entries(obj)) { - if (length > 25) { - result.push("..."); - break; + if (obj instanceof String) { + result[0] = `'${obj.toString()}'`; + } else if (obj instanceof Array) { + return `${obj.constructor.name} ${this.array([...obj])}`; + } else if (obj instanceof Number) { + result[0] = obj.toString(); + } else { + for (const [key, value] of Object.entries(obj)) { + if (length > 25) { + result.push("..."); + break; + } + const element = key + ": " + this.serializeItem(value); + length += element.length; + result.push(element); } - const element = key + ": " + this.serializeItem(value); - length += element.length; - result.push(element); - } - for (const key of Object.getOwnPropertySymbols(obj)) { - if (length > 25) { - result.push("..."); - break; + for (const key of Object.getOwnPropertySymbols(obj)) { + if (length > 25) { + result.push("..."); + break; + } + const element = key.toString() + ": " + this.serializeItem(obj[key]); + length += element.length; + result.push(element); } - const element = key.toString() + ": " + this.serializeItem(obj[key]); - length += element.length; - result.push(element); + } + if (obj.constructor.name !== "Object") { + return obj.constructor.name + " {" + result.join(", ") + "}"; } return "{" + result.join(", ") + "}"; }, @@ -823,7 +834,7 @@ child.contentType = "set"; child.hasChildren = true; break; - case obj instanceof Array: + case obj.constructor.name === "Array": child.contentType = "array"; child.hasChildren = obj.length > 0; break;