-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmyloader.js
46 lines (42 loc) · 1.22 KB
/
myloader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var parser = require('./parser')
module.exports = function (source, map) {
let tree = parser.parseHTML(source);
let template = null;
let script = null;
for (let node of tree.children) {
if (node.tagName == "template") {
template = node.children.filter(e => e.type != "text")[0];
}
if (node.tagName === "script") {
script = node.children[0].content;
}
}
let createCode = ""
let visit = node => {
if (node.type === "text") {
return JSON.stringify(node.content);
}
let attrs = {};
for (let attribute of node.attributes) {
attrs[attribute.name] = attribute.value
}
let children = node.children.map(node => visit(node));
return `createElement("${node.tagName}", ${JSON.stringify(attrs)}, ${children})`
}
let r = `
import { createElement, Text, Wrapper } from './createElement'
export class Carousel {
setAttribute(name, value) {
this[name] = value;
}
render() {
return ${visit(template)}
}
mountTo(parent) {
this.render().mountTo(parent)
}
}
`
console.log(r)
return r;
}