diff --git a/CHANGELOG.md b/CHANGELOG.md index 7db9d479..0a487e07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Set `data-he-rerendering` attribute while rerendering a custom element * Make custom element keep width & height while rerendering * Fix server-side `HTMLElement#removeAttribute()` not removing dataset attributes with dashes +* Make custom elements use a new renderer scope when it's being rendered in a dialog ## 2.3.16 (2024-02-15) diff --git a/lib/element/custom_element.js b/lib/element/custom_element.js index 0033aae4..dcf72229 100644 --- a/lib/element/custom_element.js +++ b/lib/element/custom_element.js @@ -968,7 +968,7 @@ function renderCustomTemplate(re_render) { render_vars, renderer = this.ensureHawkejsRenderer(); - if (this.constructor.use_new_renderer_scope) { + if (this.constructor.use_new_renderer_scope || renderer?.dialog_open) { renderer = renderer.createSubRenderer(); renderer.scope_id = renderer.getId(); } diff --git a/test/30-renderer.js b/test/30-renderer.js index fa0cae23..1c541aa2 100644 --- a/test/30-renderer.js +++ b/test/30-renderer.js @@ -668,6 +668,18 @@ This is the main content }); }); + describe('#makeDialog()', () => { + it('should create dialogs', async () => { + + let renderer = hawkejs.createRenderer(); + + let html = await renderer.renderHTML('render_dialog_with_custom_element'); + html = despace(html); + + assertEqualHtml(html, `Hello World `); + }); + }); + describe('#renderHTML()', function() { let devices = [ diff --git a/test/templates/render_dialog_with_custom_element.hwk b/test/templates/render_dialog_with_custom_element.hwk new file mode 100644 index 00000000..155962ad --- /dev/null +++ b/test/templates/render_dialog_with_custom_element.hwk @@ -0,0 +1,4 @@ +<% makeDialog() %> +<% addClass('test-dialog-class') %> + + \ No newline at end of file