optimize for static contenteditable value

pull/8394/head
Simon Holthausen 4 years ago
parent 866e52a722
commit 55209c44f5

@ -25,10 +25,14 @@ export default class MustacheTagWrapper extends Tag {
this.parent instanceof ElementWrapper && this.parent instanceof ElementWrapper &&
this.parent.attributes.filter((a) => a.node.is_spread); this.parent.attributes.filter((a) => a.node.is_spread);
let contenteditable_attr_value: Expression | undefined = undefined; let contenteditable_attr_value: Expression | true | undefined = undefined;
if (contenteditable_attributes.length > 0) { if (contenteditable_attributes.length > 0) {
const value = (contenteditable_attributes[0] as AttributeWrapper).get_value(block); const attribute = contenteditable_attributes[0] as AttributeWrapper;
contenteditable_attr_value = x`${value}`; if ([true, 'true', ''].includes(attribute.node.get_static_value())) {
contenteditable_attr_value = true;
} else {
contenteditable_attr_value = x`${attribute.get_value(block)}`;
}
} else if (spread_attributes.length > 0 && data.element_data_name) { } else if (spread_attributes.length > 0 && data.element_data_name) {
contenteditable_attr_value = x`${data.element_data_name}['contenteditable']`; contenteditable_attr_value = x`${data.element_data_name}['contenteditable']`;
} }
@ -37,7 +41,11 @@ export default class MustacheTagWrapper extends Tag {
block, block,
value => { value => {
if (contenteditable_attr_value) { if (contenteditable_attr_value) {
if (contenteditable_attr_value === true) {
return x`@set_data_contenteditable(${this.var}, ${value})`;
} else {
return x`@set_data_maybe_contenteditable(${this.var}, ${value}, ${contenteditable_attr_value})`; return x`@set_data_maybe_contenteditable(${this.var}, ${value}, ${contenteditable_attr_value})`;
}
} else { } else {
return x`@set_data(${this.var}, ${value})`; return x`@set_data(${this.var}, ${value})`;
} }

@ -91,12 +91,16 @@ export function set_data_dev(text: Text, data: unknown) {
text.data = (data as string); text.data = (data as string);
} }
export function set_data_maybe_contenteditable_dev(text: Text, data: unknown, attr_value: string) { export function set_data_contenteditable_dev(text: Text, data: unknown) {
if (~contenteditable_truthy_values.indexOf(attr_value)) {
data = '' + data; data = '' + data;
if (text.wholeText === data) return; if (text.wholeText === data) return;
dispatch_dev('SvelteDOMSetData', { node: text, data }); dispatch_dev('SvelteDOMSetData', { node: text, data });
text.data = (data as string); 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)) {
set_data_contenteditable_dev(text, data);
} else { } else {
set_data_dev(text, data); set_data_dev(text, data);
} }

@ -587,11 +587,15 @@ export function set_data(text: Text, data: unknown) {
text.data = (data as string); text.data = (data as string);
} }
export function set_data_maybe_contenteditable(text: Text, data: unknown, attr_value: string) { export function set_data_contenteditable(text: Text, data: unknown) {
if (~contenteditable_truthy_values.indexOf(attr_value)) {
data = '' + data; data = '' + data;
if (text.wholeText === data) return; if (text.wholeText === data) return;
text.data = (data as string); 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)) {
set_data_contenteditable(text, data)
} else { } else {
set_data(text, data); set_data(text, data);
} }

Loading…
Cancel
Save