/
jmfcool.js
executable file
·125 lines (93 loc) · 2.81 KB
/
jmfcool.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var jmfcool = jmfcool || {};
jmfcool.formatters = {
this : (o) => { if (typeof o != 'string') o = (o).toString(); return o; },
currency : (o) => { if (typeof o == 'number') o = (o).toFixed(2); return o; }
};
jmfcool.init = () => {};
jmfcool.model = (file, callback) => {
fetch(file).then(response => response.json()).then(data => callback(data)).catch(error => error);
};
jmfcool.view = (file, callback) => {
fetch(file).then(response => response.text()).then(data => callback(data)).catch(error => error);
};
jmfcool.hook = (name) => {
let c = document.getElementsByClassName(name)[0],
i = document.getElementById(name);
return c ? c : i;
};
jmfcool.display = (args) => {
var hook = args.hook,
view = args.view,
model = args.model,
display, render;
display = jmfcool.hook(hook);
render = jmfcool.render({ view:view, model:model });
return display.innerHTML = render;
};
jmfcool.render = (args) => {
var view = args.view,
model = args.model;
return jmfcool.template({ view:view, model:model });
};
jmfcool.template = (args) => {
var view = args.view,
model = args.model,
tags, tag, value, tmp, filter;
filter = /\$\{([^}]*)}/g;
if(String(view).match(filter) === null) return view;
tags = String(view).match(filter);
filter = /\$\{([^}]*)}/;
for(var i=0; i<tags.length; i++)
{
tag = tags[i].match(filter)[0];
value = tags[i].match(filter)[1];
tmp = jmfcool.evaluator({ model:model, value:value, type:'tags' });
view = view.replace(tag,tmp);
}
return view;
};
jmfcool.evaluator = (args) => {
var value = args.value,
model = args.model,
type = args.type,
result;
if(type === 'tags') result = jmfcool.object({ value:value, model:model });
return result;
};
jmfcool.object = (args) => {
var value = args.value,
model = args.model,
lookup;
if(/\?/.test(value))
{
value = value.split('?');
value = value[0];
}
lookup = value.split('.');
for (var i=0; i<lookup.length; i++)
{
model = model[lookup[i]];
if (model === undefined) return '';
if(/\?/.test(args.value))
{
var checks, formatter;
checks = args.value.split('?');
formatter = jmfcool.formatter({ checks:checks[1] });
model = formatter(model);
}
}
return model;
};
jmfcool.formatter = (args) => {
var checks = args.checks,
func = jmfcool.formatters,
check = checks.split('.');
for (var i=0; i<check.length; i++)
{
func = func[check[i]];
if (func === undefined) return null;
}
return func;
};
window.addEventListener('load',jmfcool.init,false);
export { jmfcool };