more tidying up

pull/992/head
Rich Harris 8 years ago
parent 8eacc2597f
commit 48ed685fd9

@ -3,13 +3,11 @@ import { assign } from '../../shared/index.js';
interface StateData { interface StateData {
parentNode?: string; parentNode?: string;
parentNodes?: string; parentNodes?: string;
allUsedContexts?: string[];
} }
export default class State { export default class State {
parentNode?: string; parentNode?: string;
parentNodes?: string; parentNodes?: string;
allUsedContexts?: string[];
constructor(data: StateData = {}) { constructor(data: StateData = {}) {
assign(this, data) assign(this, data)

@ -21,7 +21,8 @@ export default class Binding extends Node {
munge( munge(
block: Block, block: Block,
state: State state: State,
allUsedContexts: Set<string>
) { ) {
const node: Element = this.parent; const node: Element = this.parent;
@ -50,8 +51,7 @@ export default class Binding extends Node {
}); });
contexts.forEach(context => { contexts.forEach(context => {
if (!~state.allUsedContexts.indexOf(context)) allUsedContexts.add(context);
state.allUsedContexts.push(context);
}); });
// view to model // view to model

@ -15,9 +15,6 @@ import Transition from './Transition';
import Text from './Text'; import Text from './Text';
import * as namespaces from '../../utils/namespaces'; import * as namespaces from '../../utils/namespaces';
// temp - move this logic in here
import addBindings from '../dom/visitors/Element/addBindings';
export default class Element extends Node { export default class Element extends Node {
type: 'Element'; type: 'Element';
name: string; name: string;
@ -178,11 +175,11 @@ export default class Element extends Node {
const childState = state.child({ const childState = state.child({
parentNode: this.var, parentNode: this.var,
parentNodes: block.getUniqueName(`${this.var}_nodes`), parentNodes: block.getUniqueName(`${this.var}_nodes`)
allUsedContexts: [],
}); });
const name = childState.parentNode; const name = childState.parentNode;
const allUsedContexts: Set<string> = new Set();
const slot = this.attributes.find((attribute: Node) => attribute.name === 'slot'); const slot = this.attributes.find((attribute: Node) => attribute.name === 'slot');
const parentNode = this.slotted ? const parentNode = this.slotted ?
@ -248,7 +245,7 @@ export default class Element extends Node {
}); });
} }
this.addBindings(block, childState); this.addBindings(block, childState, allUsedContexts);
this.attributes.filter((a: Attribute) => a.type === 'Attribute').forEach((attribute: Attribute) => { this.attributes.filter((a: Attribute) => a.type === 'Attribute').forEach((attribute: Attribute) => {
attribute.render(block, childState); attribute.render(block, childState);
@ -283,8 +280,7 @@ export default class Element extends Node {
contexts.forEach(context => { contexts.forEach(context => {
if (!~usedContexts.indexOf(context)) usedContexts.push(context); if (!~usedContexts.indexOf(context)) usedContexts.push(context);
if (!~childState.allUsedContexts.indexOf(context)) allUsedContexts.add(context);
childState.allUsedContexts.push(context);
}); });
}); });
} }
@ -371,7 +367,7 @@ export default class Element extends Node {
this.addTransitions(block); this.addTransitions(block);
if (childState.allUsedContexts.length || eventHandlerUsesComponent) { if (allUsedContexts.size || eventHandlerUsesComponent) {
const initialProps: string[] = []; const initialProps: string[] = [];
const updates: string[] = []; const updates: string[] = [];
@ -379,7 +375,7 @@ export default class Element extends Node {
initialProps.push(`component: #component`); initialProps.push(`component: #component`);
} }
childState.allUsedContexts.forEach((contextName: string) => { allUsedContexts.forEach((contextName: string) => {
if (contextName === 'state') return; if (contextName === 'state') return;
const listName = block.listNames.get(contextName); const listName = block.listNames.get(contextName);
@ -439,7 +435,8 @@ export default class Element extends Node {
addBindings( addBindings(
block: Block, block: Block,
state: State state: State,
allUsedContexts: Set<string>
) { ) {
const bindings: Binding[] = this.attributes.filter((a: Binding) => a.type === 'Binding'); const bindings: Binding[] = this.attributes.filter((a: Binding) => a.type === 'Binding');
if (bindings.length === 0) return; if (bindings.length === 0) return;
@ -448,7 +445,7 @@ export default class Element extends Node {
const needsLock = this.name !== 'input' || !/radio|checkbox|range|color/.test(this.getStaticAttributeValue('type')); const needsLock = this.name !== 'input' || !/radio|checkbox|range|color/.test(this.getStaticAttributeValue('type'));
const mungedBindings = bindings.map(binding => binding.munge(block, state)); const mungedBindings = bindings.map(binding => binding.munge(block, state, allUsedContexts));
const lock = mungedBindings.some(binding => binding.needsLock) ? const lock = mungedBindings.some(binding => binding.needsLock) ?
block.getUniqueName(`${this.var}_updating`) : block.getUniqueName(`${this.var}_updating`) :

Loading…
Cancel
Save