-
Notifications
You must be signed in to change notification settings - Fork 56
/
_share.js
116 lines (102 loc) · 2.8 KB
/
_share.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
var format = require('util').format;
var option = require('../option');
var encode = require('../encode');
var hl = require('../highlight');
var iframeCount = 0;
exports.header = function(text, level) {
var id = encode.uri(text);
return format('<h%d id="%s">%s</h%d>', level, id, text, level);
};
exports.blockcode = function(code, language) {
if (!language || language === '+' || language === '-') {
return hl.render(code);
}
var lastChar = language.slice(-1);
var hide = lastChar === '-';
var inject = (lastChar === '-' || lastChar === '+');
if (inject) {
language = language.slice(0, -1);
}
if (language.slice(0, 6) !== 'iframe') {
language = hl.language(language);
}
if (['javascript', 'css', 'html'].indexOf(language) !== -1) {
inject = inject && true;
}
var html = '';
// iframe hack
if (language && language.slice(0, 6) === 'iframe') {
iframeCount++;
var height = language.split(':')[1];
if (height) {
height = format('height="%s"', height);
} else {
height = '';
}
html = [
'<div class="nico-iframe">',
'<iframe src="iframe-%s-%d.html" allowtransparency="true" ',
'frameborder="0" scrolling="0" %s></iframe></div>'
].join('\n');
var iframeId = option.get('iframeId') || '';
html = format(html, iframeId, iframeCount, height);
language = 'html';
} else if (inject) {
html = {
'javascript': format('<script>%s</script>', code),
'css': format('<style type="text/css">%s</style>', code),
'html': format('<div class="nico-insert-code">%s</div>', code)
}[language];
}
if (hide && inject) {
return html;
}
return html + hl.render(code, language);
};
exports.normalRender = function(text, fn) {
iframeCount = 0;
text = text.replace(/^````([\w\:]+)$/gm, '````$1+');
text = text.replace(/^`````([\w\:]+)$/gm, '`````$1-');
if (fn.render) return fn.render(text);
return fn(text);
};
// get toc
var toc = [];
var tocLevel = 3;
exports.tocHeader = function(text, level) {
var id = encode.uri(text);
if (level <= tocLevel) {
toc.push({id: id, text: text, level: level});
}
return format('<h%d id="%s">%s</h%d>', level, id, text, level);
};
exports.tocRender = function(text, level, fn) {
toc = [];
tocLevel = level || 3;
if (fn.render) {
fn.render(text);
} else {
fn(text);
}
return toc;
};
// get iframes
var iframes = {};
exports.iframeBlockcode = function(code, language) {
if (!language) return '';
if (language.slice(0, 6) === 'iframe') {
iframeCount++;
var iframeId = option.get('iframeId') || '';
iframes[format('iframe-%s-%d', iframeId, iframeCount)] = code;
}
};
exports.iframeRender = function(text, fn) {
iframes = {};
iframeCount = 0;
if (fn.render) {
fn.render(text);
} else {
fn(text);
}
return iframes;
};