-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path_insert-kanji-reading-hint.js
75 lines (61 loc) · 2.21 KB
/
_insert-kanji-reading-hint.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
require(["_tag-builders", "_dom-readers", "_dom-writers"], function(builders, readers, writers){
var kanjiReaderId = "kanji-reader";
var wagoReaderId = "wago-reader";
var kangoReaderId = "kango-reader";
var chigaiReaderId = "chigai-reader";
var oldWagoReaderId = "old-wago-reader";
var oldKangoReaderId = "old-kango-reader";
var oldChigaiReaderId = "old-chigai-reader";
var wagoNumId = "wago-number-reader";
var kangoNumId = "kango-number-reader";
var writerId = "kanji-data-writer";
writers.appendTags(writerId, [buildKanjiHintSpan()]);
function buildKanjiHintSpan(){
var wagoHint = buildHint(wagoSymbolSpan(), wagoNumId, wagoIsPresent());
var kangoHint = buildHint(kangoSymbolSpan(), kangoNumId, kangoIsPresent());
var hints = [wagoHint, kangoHint].filter(Boolean).join(delAnd());
if (hints == ""){ return builders.buildSpan(""); }
return builders.buildSpan([delLeftPara(), hints, delRightPara()].join(""));
}
function buildHint(readingSymbol, numId, isPresent){
var hintNum = readContents(numId);
if(hintNum){ return readNumSpan(hintNum) + readingSymbol; }
return (isPresent) ? readingSymbol : "";
}
function readNumSpan(num){
return buildSpanString(num, "class='reading-no'");
}
function wagoSymbolSpan(){
return buildSpanString("訓", "id='kunyomi'");
}
function kangoSymbolSpan(){
return buildSpanString("音", "id='onyomi'");
}
function buildSpanString(content, extra){
var attributes = (extra) ? extra : "";
return ["<span ", attributes, ">", content, "</span>"].join("");
}
function wagoIsPresent(){
return readingIsAvailable(wagoReaderId, oldWagoReaderId);
}
function kangoIsPresent(){
return readingIsAvailable(kangoReaderId, oldKangoReaderId);
}
function readingIsAvailable(readerId, oldReaderId){
var reading = readContents(readerId);
var oldReading = readContents(oldReaderId);
return [reading, oldReading].filter(Boolean).length > 0;
}
function delAnd(){
return builders.delWrap("と");
}
function delLeftPara(){
return builders.delWrap("(");
}
function delRightPara(){
return builders.delWrap(")");
}
function readContents(id){
return readers.readTagContents(id);
}
});