-
Notifications
You must be signed in to change notification settings - Fork 0
/
resource.js
57 lines (57 loc) · 1.88 KB
/
resource.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
var RESOURCE = {};
var Resource = {
def: function(id, data) {
RESOURCE[id] = Resource.fun(data);
},
gen: function(context, data) {
return data && (data.apply ? data.apply(context) : data);
},
fun: function(f) {
if (typeof f != 'function') return f;
var len = f.length;
return { apply: function(context) {
var args = context.args;
context.args = context.args.slice(-(context.args.length-len));
return Resource.gen(context, f.apply(null, args));
} };
},
lang: function() {
if (!this._lang) {
this._lang = GNN.URI.location().params.lang || document.body.lang;
}
return this._lang;
},
res: function(/* id[, args...] */) {
var args=[]; args.push.apply(args, arguments);
var id = args.shift();
var data = RESOURCE[id];
return Resource.gen({ lang: Resource.lang(), args: args }, data);
},
L: function(data) {
data = Resource.fun(data);
return { apply: function(context) {
data = Resource.gen(context, data);
return Resource.gen(context, data[context.lang]);
} };
},
F: function(data) {
data = Resource.fun(data);
return { apply: function(context) {
data =Resource.gen(context, data);
var r = new RegExp('(?:^%|([^%])%)s');
while (data.match(r) && context.args.length) {
var prefix = RegExp.$1 || '';
data = data.replace(r, prefix + context.args.shift());
}
data = data.replace(/%%/, '%');
return Resource.gen(context, data);
} };
},
A: function(f, data) {
data = Resource.fun(data);
return { apply: function(context) {
context.args = f(context.args);
return Resource.gen(context, data);
} };
}
};