mirror of https://github.com/sveltejs/svelte
parent
10011a5142
commit
f1d704493b
@ -1,62 +0,0 @@
|
|||||||
import Renderer from '../../Renderer';
|
|
||||||
import Block from '../../Block';
|
|
||||||
import Wrapper from './Wrapper';
|
|
||||||
import EventHandler from '../../../nodes/EventHandler';
|
|
||||||
import validCalleeObjects from '../../../../utils/validCalleeObjects';
|
|
||||||
|
|
||||||
export default class EventHandlerWrapper extends Wrapper {
|
|
||||||
node: EventHandler;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
renderer: Renderer,
|
|
||||||
block: Block,
|
|
||||||
parent: Wrapper,
|
|
||||||
node: EventHandler,
|
|
||||||
stripWhitespace: boolean,
|
|
||||||
nextSibling: Wrapper
|
|
||||||
) {
|
|
||||||
super(renderer, block, parent, node);
|
|
||||||
}
|
|
||||||
|
|
||||||
render(block: Block, parentNode: string, parentNodes: string) {
|
|
||||||
const { renderer } = this;
|
|
||||||
const { component } = renderer;
|
|
||||||
|
|
||||||
const hoisted = this.node.shouldHoist;
|
|
||||||
|
|
||||||
if (this.node.insertionPoint === null) return; // TODO handle shorthand events here?
|
|
||||||
|
|
||||||
if (!validCalleeObjects.has(this.node.callee.name)) {
|
|
||||||
const component_name = hoisted ? `component` : block.alias(`component`);
|
|
||||||
|
|
||||||
// allow event.stopPropagation(), this.select() etc
|
|
||||||
// TODO verify that it's a valid callee (i.e. built-in or declared method)
|
|
||||||
if (this.node.callee.name[0] === '$' && !component.methods.has(this.node.callee.name)) {
|
|
||||||
component.code.overwrite(
|
|
||||||
this.node.insertionPoint,
|
|
||||||
this.node.insertionPoint + 1,
|
|
||||||
`${component_name}.store.`
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
component.code.prependRight(
|
|
||||||
this.node.insertionPoint,
|
|
||||||
`${component_name}.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.node.isCustomEvent) {
|
|
||||||
this.node.args.forEach(arg => {
|
|
||||||
arg.overwriteThis(this.parent.var);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (this.node.callee && this.node.callee.name === 'this') {
|
|
||||||
const node = this.node.callee.nodes[0];
|
|
||||||
component.code.overwrite(node.start, node.end, this.parent.var, {
|
|
||||||
storeName: true,
|
|
||||||
contentOnly: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue