diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-02-21 18:40:16 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-02-21 18:40:16 +0000 |
commit | b23063bb5200bb1fc6a64e9e811ab1191d114fd9 (patch) | |
tree | 5d4ca12fcc7b32d788d86ae0327e0eb6e73351cf /content/handlers/javascript | |
parent | 2325062ff1429ab9a19ff2db251fa13b0799a276 (diff) | |
download | netsurf-b23063bb5200bb1fc6a64e9e811ab1191d114fd9.tar.gz netsurf-b23063bb5200bb1fc6a64e9e811ab1191d114fd9.tar.bz2 |
JS Generics: Add a NodeMap proxy builder
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'content/handlers/javascript')
-rw-r--r-- | content/handlers/javascript/duktape/generics.js | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/generics.js b/content/handlers/javascript/duktape/generics.js index 29beffc2c..e6e952a46 100644 --- a/content/handlers/javascript/duktape/generics.js +++ b/content/handlers/javascript/duktape/generics.js @@ -27,6 +27,29 @@ var NetSurf = { }, }); }, + /* The make-proxy call for nodemap-type objects */ + makeNodeMapProxy: function(inner) { + return new Proxy(inner, { + has: function(target, key) { + if (typeof key == 'number') { + return (key >= 0) && (key < target.length); + } else { + return target.getNamedItem(key) || (key in target); + } + }, + get: function(target, key) { + if (typeof key == 'number') { + return target.item(key); + } else { + var attr = target.getNamedItem(key); + if (attr) { + return attr; + } + return target[key]; + } + }, + }); + }, consoleFormatter: function Formatter() { if (arguments.length == 0) { |