refactor and split runtine function

pull/8394/head
baseballyama 4 years ago
parent a128e3c56f
commit 535623de61

@ -17,19 +17,19 @@ export default class MustacheTagWrapper extends Tag {
} }
render(block: Block, parent_node: Identifier, parent_nodes: Identifier, data: Record<string, unknown> | undefined) { render(block: Block, parent_node: Identifier, parent_nodes: Identifier, data: Record<string, unknown> | undefined) {
const contenteditable = const contenteditable_attributes =
this.parent instanceof ElementWrapper && this.parent instanceof ElementWrapper &&
this.parent.attributes.filter((a) => a.node.name === 'contenteditable'); this.parent.attributes.filter((a) => a.node.name === 'contenteditable');
const spread_attres = const spread_attributes =
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 is_contenteditable: Expression | undefined = undefined; let is_contenteditable: Expression | undefined = undefined;
if (contenteditable.length > 0) { if (contenteditable_attributes.length > 0) {
const value = (contenteditable[0] as AttributeWrapper).get_value(block); const value = (contenteditable_attributes[0] as AttributeWrapper).get_value(block);
is_contenteditable = x`~@contenteditable_truly_values.indexOf(${value})`; is_contenteditable = x`~@contenteditable_truly_values.indexOf(${value})`;
} else if (spread_attres.length > 0 && data.element_data_name) { } else if (spread_attributes.length > 0 && data.element_data_name) {
is_contenteditable = x`~@contenteditable_truly_values.indexOf(${data.element_data_name}['contenteditable'])`; is_contenteditable = x`~@contenteditable_truly_values.indexOf(${data.element_data_name}['contenteditable'])`;
} }
@ -37,7 +37,7 @@ export default class MustacheTagWrapper extends Tag {
block, block,
value => { value => {
if (is_contenteditable) { if (is_contenteditable) {
return x`@set_data(${this.var}, ${value}, ${is_contenteditable})`; return x`@set_data_contenteditable(${this.var}, ${value}, ${is_contenteditable})`;
} else { } else {
return x`@set_data(${this.var}, ${value})`; return x`@set_data(${this.var}, ${value})`;
} }

@ -83,13 +83,16 @@ export function dataset_dev(node: HTMLElement, property: string, value?: any) {
dispatch_dev('SvelteDOMSetDataset', { node, property, value }); dispatch_dev('SvelteDOMSetDataset', { node, property, value });
} }
export function set_data_dev(text: Text, data: unknown, is_contenteditable: boolean | undefined) { export function set_data_dev(text: Text, data: unknown) {
data = '' + data; data = '' + data;
if (is_contenteditable) { if (text.data === data) return;
if (text.wholeText === data) return; dispatch_dev('SvelteDOMSetData', { node: text, data });
} else { text.data = (data as string);
if (text.data === data) return; }
}
export function set_data_contenteditable_dev(text: Text, data: unknown) {
data = '' + data;
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);
} }

@ -581,14 +581,16 @@ export function claim_html_tag(nodes, is_svg: boolean) {
return new HtmlTagHydration(claimed_nodes, is_svg); return new HtmlTagHydration(claimed_nodes, is_svg);
} }
export function set_data(text: Text, data: unknown, is_contenteditable: boolean | undefined) { export function set_data(text: Text, data: unknown) {
data = '' + data; data = '' + data;
if (is_contenteditable) { if (text.data === data) return;
if (text.wholeText === data) return; text.data = (data as string);
} else { }
if (text.data === data) return;
} export function set_data_contenteditable(text: Text, data: unknown) {
text.data = (data as string); data = '' + data;
if (text.wholeText === data) return;
text.data = (data as string);
} }
export function set_input_value(input, value) { export function set_input_value(input, value) {

Loading…
Cancel
Save