-
-
Notifications
You must be signed in to change notification settings - Fork 61
/
component.js
94 lines (77 loc) · 2.18 KB
/
component.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
COMPONENT('markdownpreview', 'showsecret:Show secret data;hidesecret:Hide secret data', function(self, config, cls) {
var cls2 = '.' + cls;
var elcache;
var elbody;
// self.bindvisible();
self.readonly();
self.nocompile && self.nocompile();
self.make = function() {
if (!config.html) {
self.append('<div class="{0}-body"></div><div class="{0}-cache hidden"></div>'.format(cls));
elcache = self.find(cls2 + '-cache');
elbody = self.find(cls2 + '-body');
}
};
self.redraw = function(el) {
FUNC.markdownredraw(el); // part of j-Markdown
};
self.setter = function(value) {
if (config.html) {
self.redraw(self.element);
return;
}
// Waits for markdown component
if (!String.prototype.markdown) {
setTimeout(self.setter, 500, value);
return;
}
var cache = {};
var html = (value || '').markdown();
var vdom = $(html);
elcache.empty();
elbody.find('.code').each(function(index) {
var t = this;
var checksum = t.getAttribute('data-checksum') + '_' + index;
cache[checksum] = t;
elcache[0].appendChild(t);
});
elbody.find('img').each(function(index) {
var t = this;
var checksum = t.getAttribute('data-checksum') + '_' + index;
cache[checksum] = t;
elcache[0].appendChild(t);
});
vdom.find('.code').each(function(index) {
var t = this;
var h = 'code' + HASH(t.outerHTML, true) + '_' + index;
if (cache[h])
$(t).replaceWith(cache[h]);
else
t.setAttribute('data-checksum', h);
}).rclass('hidden');
vdom.find('img').each(function(index) {
var t = this;
var h = 'img' + HASH(t.outerHTML, true) + '' + index;
if (cache[h])
$(t).replaceWith(cache[h]);
else
t.setAttribute('data-checksum', h);
});
elbody.html(vdom);
self.redraw(elbody);
config.render && self.EXEC(config.render, elbody);
};
self.readingtime = function() {
var arr = self.find('h1,h2,h3,h4,h5,p,li');
var sum = 0;
for (var i = 0; i < arr.length; i++) {
var text = $(arr[i]).text();
var words = text.split(' ');
for (var j = 0; j < words.length; j++) {
var word = words[j];
sum += (word.length * 0.650) / 10; // Reading time for 10 characters word is 450 ms
}
}
return (sum / 60) >> 0;
};
});