From e6bdc5a4ffc938ccc2c4e80e0a55c068413ddd72 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Mon, 20 Mar 2023 12:06:40 +0100 Subject: [PATCH] refactor into smaller compiler output --- .../compile/render_dom/wrappers/MustacheTag.ts | 10 +++++----- src/runtime/internal/dev.ts | 15 ++++++++++----- src/runtime/internal/dom.ts | 14 +++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/MustacheTag.ts b/src/compiler/compile/render_dom/wrappers/MustacheTag.ts index cfece7bc5f..f636f1028b 100644 --- a/src/compiler/compile/render_dom/wrappers/MustacheTag.ts +++ b/src/compiler/compile/render_dom/wrappers/MustacheTag.ts @@ -25,19 +25,19 @@ export default class MustacheTagWrapper extends Tag { this.parent instanceof ElementWrapper && this.parent.attributes.filter((a) => a.node.is_spread); - let is_contenteditable: Expression | undefined = undefined; + let contenteditable_attr_value: Expression | undefined = undefined; if (contenteditable_attributes.length > 0) { const value = (contenteditable_attributes[0] as AttributeWrapper).get_value(block); - is_contenteditable = x`~@contenteditable_truthy_values.indexOf(${value})`; + contenteditable_attr_value = x`${value}`; } else if (spread_attributes.length > 0 && data.element_data_name) { - is_contenteditable = x`~@contenteditable_truthy_values.indexOf(${data.element_data_name}['contenteditable'])`; + contenteditable_attr_value = x`${data.element_data_name}['contenteditable']`; } const { init } = this.rename_this_method( block, value => { - if (is_contenteditable) { - return x`${is_contenteditable} ? @set_data_contenteditable(${this.var}, ${value}) : @set_data(${this.var}, ${value})` + if (contenteditable_attr_value) { + return x`@set_data_maybe_contenteditable(${this.var}, ${value}, ${contenteditable_attr_value})` } else { return x`@set_data(${this.var}, ${value})`; } diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 8dec822a41..ae50e365d2 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -1,6 +1,7 @@ import { custom_event, append, append_hydration, insert, insert_hydration, detach, listen, attr } from './dom'; import { SvelteComponent } from './Component'; import { is_void } from '../../shared/utils/names'; +import { contenteditable_truthy_values } from './utils'; export function dispatch_dev(type: string, detail?: T) { document.dispatchEvent(custom_event(type, { version: '__VERSION__', ...detail }, { bubbles: true })); @@ -90,11 +91,15 @@ export function set_data_dev(text: Text, data: unknown) { text.data = (data as string); } -export function set_data_contenteditable_dev(text: Text, data: unknown) { - data = '' + data; - if (text.wholeText === data) return; - dispatch_dev('SvelteDOMSetData', { node: text, data }); - text.data = (data as string); +export function set_data_maybe_contenteditable_dev(text: Text, data: unknown, attr_value: string) { + if (~contenteditable_truthy_values.indexOf(attr_value)) { + data = '' + data; + if (text.wholeText === data) return; + dispatch_dev('SvelteDOMSetData', { node: text, data }); + text.data = (data as string); + } else { + set_data_dev(text, data); + } } export function validate_each_argument(arg) { diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 4b0b27f628..2e54305c46 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -1,4 +1,4 @@ -import { has_prop } from './utils'; +import { contenteditable_truthy_values, has_prop } from './utils'; // Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM // at the end of hydration without touching the remaining nodes. @@ -587,10 +587,14 @@ export function set_data(text: Text, data: unknown) { text.data = (data as string); } -export function set_data_contenteditable(text: Text, data: unknown) { - data = '' + data; - if (text.wholeText === data) return; - text.data = (data as string); +export function set_data_maybe_contenteditable(text: Text, data: unknown, attr_value: string) { + if (~contenteditable_truthy_values.indexOf(attr_value)) { + data = '' + data; + if (text.wholeText === data) return; + text.data = (data as string); + } else { + set_data(text, data); + } } export function set_input_value(input, value) {