|
|
|
@ -17,6 +17,7 @@ import Action from './Action';
|
|
|
|
|
import Text from './Text';
|
|
|
|
|
import * as namespaces from '../../utils/namespaces';
|
|
|
|
|
import mapChildren from './shared/mapChildren';
|
|
|
|
|
import { dimensions } from '../../utils/patterns';
|
|
|
|
|
|
|
|
|
|
// source: https://gist.github.com/ArjanSchouten/0b8574a6ad7f5065a5e7
|
|
|
|
|
const booleanAttributes = new Set('async autocomplete autofocus autoplay border challenge checked compact contenteditable controls default defer disabled formnovalidate frameborder hidden indeterminate ismap loop multiple muted nohref noresize noshade novalidate nowrap open readonly required reversed scoped scrolling seamless selected sortable spellcheck translate'.split(' '));
|
|
|
|
@ -489,13 +490,27 @@ export default class Element extends Node {
|
|
|
|
|
`);
|
|
|
|
|
|
|
|
|
|
group.events.forEach(name => {
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
`@addListener(${this.var}, "${name}", ${handler});`
|
|
|
|
|
);
|
|
|
|
|
if (name === 'resize') {
|
|
|
|
|
// special case
|
|
|
|
|
const resize_listener = block.getUniqueName(`${this.var}_resize_listener`);
|
|
|
|
|
block.addVariable(resize_listener);
|
|
|
|
|
|
|
|
|
|
block.builders.destroy.addLine(
|
|
|
|
|
`@removeListener(${this.var}, "${name}", ${handler});`
|
|
|
|
|
);
|
|
|
|
|
block.builders.mount.addLine(
|
|
|
|
|
`${resize_listener} = @addResizeListener(${this.var}, ${handler});`
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
block.builders.unmount.addLine(
|
|
|
|
|
`${resize_listener}.cancel();`
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
`@addListener(${this.var}, "${name}", ${handler});`
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
block.builders.destroy.addLine(
|
|
|
|
|
`@removeListener(${this.var}, "${name}", ${handler});`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const allInitialStateIsDefined = group.bindings
|
|
|
|
@ -509,6 +524,14 @@ export default class Element extends Node {
|
|
|
|
|
`if (!(${allInitialStateIsDefined})) #component.root._beforecreate.push(${handler});`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (group.events[0] === 'resize') {
|
|
|
|
|
this.compiler.target.hasComplexBindings = true;
|
|
|
|
|
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
`#component.root._beforecreate.push(${handler});`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
this.initialUpdate = mungedBindings.map(binding => binding.initialUpdate).filter(Boolean).join('\n');
|
|
|
|
@ -973,7 +996,7 @@ const events = [
|
|
|
|
|
{
|
|
|
|
|
eventNames: ['resize'],
|
|
|
|
|
filter: (node: Element, name: string) =>
|
|
|
|
|
(name === 'width' || name === 'height')
|
|
|
|
|
dimensions.test(name)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// media events
|
|
|
|
|