Skip to content

Commit 80bd65f

Browse files
committed
transfer render to bundle
1 parent e8a3ba5 commit 80bd65f

File tree

8 files changed

+116
-130
lines changed

8 files changed

+116
-130
lines changed

bundle/package-lock.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bundle/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
],
1818
"dependencies": {
1919
"regenerator-runtime": "^0.13.7",
20-
"wdr-loader": "file:../../wdr-loader"
20+
"wdr-loader": "file:../../wdr-loader",
21+
"wdr-render-basic": "file:.."
2122
},
2223
"devDependencies": {
2324
"@babel/cli": "^7.10.1",

bundle/src/index.js

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,92 @@
11
import 'regenerator-runtime/runtime';
22

33
import loader from 'wdr-loader';
4-
5-
const render = require("../../src/Render");
4+
import render from 'wdr-render-basic';
65

76
import './main.css';
87

98
loader(data => {
10-
render(data);
9+
const dataManager = render.createDataManager(data);
10+
11+
render.appendElement(document.head, [
12+
render.createElement('meta', { charset: "utf-8" }),
13+
render.createElement('meta', { name: "viewport", content: "width=device-width", 'initial-scale': 1 }),
14+
render.createElement('title', {}, (data['#title'] || data['title']))
15+
]);
16+
17+
if (data['#render'] && data['#render'].css) {
18+
render.appendElement(document.head, render.createElement('link', { rel: "stylesheet", href: data['#render'].css }));
19+
}
20+
21+
const main = render.createElement('main', {});
22+
render.appendElement(document.body, main);
23+
24+
renderItem(dataManager, main, '', data, 0);
1125
});
26+
27+
function renderItem(dataManager, parent, key, value, level) {
28+
29+
if (Array.isArray(value)) {
30+
31+
const section = render.createElement('div', { class: key });
32+
render.appendElement(parent, section);
33+
34+
value.forEach(v => {
35+
if (typeof v == 'object') {
36+
const sectionItem = render.createElement('div', {});
37+
render.appendElement(section, sectionItem);
38+
renderItem(dataManager, sectionItem, key, v, level);
39+
} else {
40+
renderItem(dataManager, section, null, v, level);
41+
}
42+
})
43+
44+
} else if (typeof value == 'object') {
45+
46+
let p = parent;
47+
if (level == 1) {
48+
p = render.createElement('section', { class: key });
49+
render.appendElement(parent, [render.createElement('a', { name: key }, ""), p]);
50+
} else if (level > 1) {
51+
p = render.createElement('div', { class: key });
52+
render.appendElement(parent, p);
53+
}
54+
55+
for (const k in value) {
56+
if (value.hasOwnProperty(k)) {
57+
if (k.startsWith('#')) continue;
58+
renderItem(dataManager, p, k, value[k], level + 1);
59+
}
60+
}
61+
62+
} else {
63+
64+
if (value !== undefined) {
65+
66+
let e;
67+
if (key == 'title') {
68+
e = render.createElement(`h${level < 6 ? level : '6'}`, { class: key });
69+
} else {
70+
e = render.createElement('p', { class: key });
71+
}
72+
render.appendElement(parent, e);
73+
74+
setValue(dataManager, e, value + "");
75+
76+
}
77+
78+
}
79+
}
80+
81+
function setValue(dataManager, el, str) {
82+
if (!str.includes('{{')) {
83+
el.innerHTML = render.textFormatting(str)
84+
} else {
85+
el.innerHTML = render.textFormatting(str.replace(/{{[^{}]+}}/g, "..."));
86+
render.processHyperData(dataManager, str)
87+
.then(s => el.innerHTML = render.textFormatting(s))
88+
.catch(error => {
89+
console.error(error);
90+
});
91+
}
92+
}

index.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
const el = require('./src/Elements');
2+
13
module.exports = {
2-
render : require('./src/Render.js'),
3-
el : require('./src/Elements.js'),
4-
textFormatting : require('./src/TextFormatting.js')
4+
createDataManager : require('./src/DataManager'),
5+
createElement: el.createElement,
6+
appendElement: el.appendElement,
7+
loadScript: el.loadScript,
8+
textFormatting : require('./src/TextFormatting'),
9+
processHyperdata: require('./src/Hyperdata')
510
}

src/DataManager.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,23 @@
11
'use strict';
22

3-
function createDataManager(defaultData) {
3+
function createDataManager() {
44

5-
const DATA = {
6-
_: defaultData
7-
}
5+
const DATA = {}
86

9-
async function getData(url) {
7+
async function getDataUrl(url) {
108

119
if (url) {
1210
if (DATA[url] == undefined) {
1311
DATA[url] = fetch(url)
1412
.then(r => r.json());
1513
}
1614
return DATA[url];
17-
18-
} else {
19-
return DATA['_'];
2015
}
21-
22-
}
23-
24-
async function getValue(url, path) {
25-
26-
const data = await getData(url);
27-
const ret = path.split(".").reduce((acc, cur) => acc[(cur+"").trim()], data);
28-
return ret;
2916
}
3017

3118
return {
32-
getData: getData,
33-
getValue: getValue
19+
getDataUrl: getDataUrl
3420
}
3521
}
3622

23+
module.exports = createDataManager;

src/Elements.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function createElementDoc(type) {
4040
}
4141
}
4242

43-
function append(parent, children) {
43+
function appendElement(parent, children) {
4444
if (Array.isArray(children)) {
4545
children.forEach(item => {
4646
item && parent.appendChild(item);
@@ -60,7 +60,7 @@ function loadScript(url, onload) {
6060
}
6161

6262
module.exports = {
63-
create: createElement,
64-
append: append,
65-
loadScript: loadScript
63+
createElement,
64+
appendElement,
65+
loadScript
6666
}

src/Hyperdata.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
async function processHyperData(dataManager, str) {
3+
async function processHyperdata(dataManager, str) {
44
const reg = /([\\]?){{\ *(?:\[([^{}]+)\]\ *)?([^{}]+)\ *}}/g;
55

66
const ret = [];
@@ -16,7 +16,7 @@ async function processHyperData(dataManager, str) {
1616
const url = match[2];
1717
const path = match[3];
1818
try {
19-
ret.push(await dataManager.getValue(url, path));
19+
ret.push(await getValue(dataManager, url, path));
2020
} catch (error) {
2121
ret.push("[ERROR]");
2222
}
@@ -31,4 +31,11 @@ async function processHyperData(dataManager, str) {
3131
return ret.join("");
3232
}
3333

34-
module.exports = processHyperData;
34+
async function getValue(dataManager, url, path) {
35+
36+
const data = url ? await dataManager.getDataUrl(url) : dataManager.data;
37+
const ret = path.split(".").reduce((acc, cur) => acc[(cur+"").trim()], data);
38+
return ret;
39+
}
40+
41+
module.exports = processHyperdata;

src/Render.js

Lines changed: 0 additions & 98 deletions
This file was deleted.

0 commit comments

Comments
 (0)