From 841aa64462548c5cede13e1d53fbceb4c6914324 Mon Sep 17 00:00:00 2001 From: Jelle De Loecker Date: Sat, 15 Jun 2024 17:54:12 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Deduplicate=20self-ancesto?= =?UTF-8?q?r=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/element/custom_element.js | 53 ++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/lib/element/custom_element.js b/lib/element/custom_element.js index 866bc34..5c998ff 100644 --- a/lib/element/custom_element.js +++ b/lib/element/custom_element.js @@ -1267,13 +1267,7 @@ function renderContentsWithTemplate(element, template, variables, slot_data, ple variables.hawkejs_renderer = renderer; if (element.is_custom_hawkejs_element) { - variables.setEphemeralGetter('self', () => { - - // Ensure the element options are ready - element.ensureConstructed(); - - return element; - }); + addSelfAncestor(variables, element); } Hawkejs.series(next => { @@ -2855,21 +2849,7 @@ Element.setMethod(function applyCompiledTemplate(fnc) { render_vars = renderer.prepareVariables(); } - render_vars.setEphemeralGetter('self', () => { - - // Ensure the element options are ready - this.ensureConstructed(); - - return this; - }); - - render_vars.setEphemeralGetter('$ancestor_element', () => { - - // Ensure the element options are ready - this.ensureConstructed(); - - return this; - }); + addSelfAncestor(render_vars, this); let elements = renderer.evaluate(fnc, render_vars), i; @@ -2883,6 +2863,35 @@ Element.setMethod(function applyCompiledTemplate(fnc) { _finishRender.call(this); }); +/** + * Add `self` and `$ancestor_element` ephemeral variables + * + * @author Jelle De Loecker + * @since 2.4.0 + * @version 2.4.0 + * + * @param {Hawkejs.Variables} variables + * @param {Element} element + */ +const addSelfAncestor = (variables, element) => { + + variables.setEphemeralGetter('self', () => { + + // Ensure the element options are ready + element.ensureConstructed(); + + return element; + }); + + variables.setEphemeralGetter('$ancestor_element', () => { + + // Ensure the element options are ready + element.ensureConstructed(); + + return element; + }); +}; + /** * Make sure this element is ready for use. *