forked from w3c-html-ig-zh/w3c-glossary
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunc.js
67 lines (60 loc) · 1.63 KB
/
func.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
/**
* @fileOverview 词汇表数据渲染
* @author Jinjiang <zhaojinjiang@me.com>
*/
// 完成 VM 绑定
new Vue({
el: 'body',
data: {
/**
* 词汇表列表,每一条数据都有 `en`(必填), `simplifed`, `traditional` 三个 html 字符串
*/
glossary: glossary.filter(function (v) {
return v && v.en && v.en.toUpperCase;
}).sort(function (a, b) {
return a.en.toUpperCase() > b.en.toUpperCase();
}
)},
computed: {
/**
* 按照首字母排序+索引的结果
* @return {Array} 形如 [key, wordList[{en, simplified, traditional}]]
*/
initialIndex: function () {
var initialMap = {};
var initialIndex = [];
this.$data.glossary.forEach(function (word) {
var initial;
if (!word || !word.en) {
return;
}
initial = word.en[0].toUpperCase();
if (initial.match(/[0-9]/)) {
// 数字开头词汇
if (!initialMap['0']) {
initialMap['0'] = [];
}
initialMap['0'].push(word);
}
else if (initial.match(/[A-Z]/)) {
// 字母开头词汇
if (!initialMap[initial]) {
initialMap[initial] = [];
}
initialMap[initial].push(word);
}
else {
// 其它特殊字符开头词汇
if (!initialMap._) {
initialMap._ = [];
}
initialMap._.push(word);
}
});
Object.keys(initialMap).sort().forEach(function (key) {
initialIndex.push({key: key, wordList: initialMap[key]});
});
return initialIndex;
}
}
});