From d706e09da1cee7f1dc963424b12e55d6b1ec3fe8 Mon Sep 17 00:00:00 2001 From: DarkWiiPlayer Date: Tue, 12 Apr 2022 22:36:35 +0200 Subject: [PATCH] Replace mechanism for creating customized built-in elements --- skooma.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/skooma.js b/skooma.js index 0d37468..524a36c 100644 --- a/skooma.js +++ b/skooma.js @@ -31,6 +31,19 @@ const parseAttribute = (attribute) => { return JSON.stringify(attribute) } + +const defined = (value, fallback) => typeof value != "undefined" ? value : fallback +const getCustom = args => String( + args.reduce( + (current, argument) => Array.isArray(argument) + ? defined(getCustom(argument), current) + : (argument && typeof argument == "object") + ? defined(argument.is, current) + : current + ,null + ) +) + const parseArgs = (element, before, ...args) => { if (element.content) element = element.content for (let arg of args) if (arg !== empty) @@ -64,11 +77,9 @@ const parseArgs = (element, before, ...args) => { } const nop = object => object -const node = (_name, args, options) => { +const node = (name, args, options) => { let element - const [name, custom] = _name - .match(/[^$]+/g) - .map(options.nameFilter ?? nop) + let custom = getCustom(args) if (options.xmlns) element = document.createElementNS(options.xmlns, name, {is: custom}) else