Skip to content

Commit e8a3ba5

Browse files
committed
DataManager
1 parent d564ba8 commit e8a3ba5

File tree

4 files changed

+74
-63
lines changed

4 files changed

+74
-63
lines changed

src/DataManager.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'use strict';
2+
3+
function createDataManager(defaultData) {
4+
5+
const DATA = {
6+
_: defaultData
7+
}
8+
9+
async function getData(url) {
10+
11+
if (url) {
12+
if (DATA[url] == undefined) {
13+
DATA[url] = fetch(url)
14+
.then(r => r.json());
15+
}
16+
return DATA[url];
17+
18+
} else {
19+
return DATA['_'];
20+
}
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;
29+
}
30+
31+
return {
32+
getData: getData,
33+
getValue: getValue
34+
}
35+
}
36+

src/Elements.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,17 @@ function append(parent, children) {
5050
}
5151
}
5252

53+
function loadScript(url, onload) {
54+
const script = document.createElement('script');
55+
script.type = 'text/javascript';
56+
script.async = true;
57+
document.head.appendChild(script);
58+
script.onload = onload;
59+
script.src = url;
60+
}
61+
5362
module.exports = {
5463
create: createElement,
55-
append: append
64+
append: append,
65+
loadScript: loadScript
5666
}

src/Hyperdata.js

Lines changed: 21 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,34 @@
11
'use strict';
22

3-
function createInstance(defaultData) {
3+
async function processHyperData(dataManager, str) {
4+
const reg = /([\\]?){{\ *(?:\[([^{}]+)\]\ *)?([^{}]+)\ *}}/g;
45

5-
const DATA = {
6-
_: defaultData
7-
}
6+
const ret = [];
7+
let match;
8+
let i = 0;
9+
while ((match = reg.exec(str)) !== null) {
810

9-
async function getData(key) {
11+
const opr = match[1];
1012

11-
if (key) {
12-
if (DATA[key] == undefined) {
13-
DATA[key] = fetch(key)
14-
.then(r => r.json());
15-
}
16-
return DATA[key];
13+
ret.push(str.slice(i, match.index));
1714

15+
if (opr !== '\\') {
16+
const url = match[2];
17+
const path = match[3];
18+
try {
19+
ret.push(await dataManager.getValue(url, path));
20+
} catch (error) {
21+
ret.push("[ERROR]");
22+
}
1823
} else {
19-
return DATA['_'];
24+
ret.push((match[0] + "").slice(1));
2025
}
2126

27+
i = reg.lastIndex;
2228
}
29+
ret.push(str.slice(i));
2330

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;
29-
}
30-
31-
return {
32-
replace: (str, mark) => {
33-
return str.replace(/{{[^{}]+}}/g, mark);
34-
},
35-
process: async str => {
36-
37-
const reg = /([\\]?){{\ *(?:\[([^{}]+)\]\ *)?([^{}]+)\ *}}/g;
38-
39-
const ret = [];
40-
let match;
41-
let i = 0;
42-
while ((match = reg.exec(str)) !== null) {
43-
44-
const opr = match[1];
45-
46-
ret.push(str.slice(i, match.index));
47-
48-
if (opr !== '\\') {
49-
const url = match[2];
50-
const path = match[3];
51-
try {
52-
ret.push(await getValue(url, path));
53-
} catch (error) {
54-
ret.push("[ERROR]");
55-
}
56-
} else {
57-
ret.push((match[0] + "").slice(1));
58-
}
59-
60-
i = reg.lastIndex;
61-
}
62-
ret.push(str.slice(i));
63-
64-
return ret.join("");
65-
}
66-
}
31+
return ret.join("");
6732
}
6833

69-
module.exports = createInstance;
70-
34+
module.exports = processHyperData;

src/Render.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
const el = require('./Elements.js');
44
const textFormatting = require('./TextFormatting.js');
55

6-
const createInstance = require('./Hyperdata.js');
6+
const createDataManager = require('./DataManager.js');
7+
const processHyperData = require('./Hyperdata.js');
78

8-
let hyperdata;
9+
let dataManager;
910

1011
function render(data) {
1112

12-
hyperdata = createInstance(data);
13+
dataManager = createDataManager(data);
1314

1415
el.append(document.head, [
1516
el.create('meta', { charset: "utf-8" }),
@@ -85,8 +86,8 @@ function setValue(el, str) {
8586
if (!str.includes('{{')) {
8687
el.innerHTML = textFormatting(str)
8788
} else {
88-
el.innerHTML = textFormatting(hyperdata.replace(str, "..."))
89-
hyperdata.process(str)
89+
el.innerHTML = textFormatting(str.replace(/{{[^{}]+}}/g, "..."));
90+
processHyperData(dataManager, str)
9091
.then(s => el.innerHTML = textFormatting(s))
9192
.catch(error => {
9293
console.error(error);

0 commit comments

Comments
 (0)