forked from ElektraInitiative/libelektra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmarked.js
143 lines (139 loc) · 3.76 KB
/
marked.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
"use strict";
const hljs = require("highlight.js");
module.exports = [
"markedProvider",
"config",
"webStructure",
function (markedProvider, config, webStructure) {
markedProvider.setOptions({
gfm: true,
tables: true,
highlight: function (code, lang) {
var ret;
try {
if (lang) {
ret = hljs.highlight(code, {
language: lang,
ignoreIllegals: true,
}).value;
} else {
ret = hljs.highlightAuto(code).value;
}
} catch (err) {
ret = code;
}
return ret;
},
});
markedProvider.setRenderer({
table: function (head, body) {
return (
'<table class="table table-striped table-bordered">' +
"<thead>" +
head +
"</thead>" +
"<tbody>" +
body +
"</tbody>" +
"</table>"
);
},
link: function (href, title, text) {
// external link
if (href.indexOf("://") > -1) {
return (
'<a href="' +
href +
'"' +
(title ? ' title="' + title + '"' : "") +
' target="_blank">' +
text +
' <i class="fa fa-external-link"></i></a>'
);
}
// anchor link
if (href.indexOf("#") > -1) {
return (
'<a href="' +
href +
'"' +
(title ? ' title="' + title + '"' : "") +
" >" +
text +
' <i class="fa fa-external-link"></i></a>'
);
}
// internal link
var file = findFileInWebstructure(webStructure, href);
// we don't have the file on the website, make external link
if (file === null) {
return (
'<a href="' +
config.github.website.root +
config.github.website.paths.doc_root +
href +
'"' +
(title ? ' title="' + title + '"' : "") +
' target="_blank">' +
text +
' <i class="fa fa-external-link"></i></a>'
);
}
// we have this file on the website, make internal link
else {
return (
'<a ui-sref="main.dyn.' +
file.ref +
"({file:'" +
file.slug +
"'})\"" +
(title ? ' title="' + title + '"' : "") +
">" +
text +
"</a>"
);
}
},
image: function (href, title, text) {
// external image
if (href.indexOf("://") > -1) {
return (
'<img src="' +
href +
'"' +
(text ? ' alt="' + text + '"' : "") +
(title ? ' title="' + title + '"' : "") +
"/>"
);
}
// internal link, load from github
return (
'<img src="' +
config.website.content_root +
href +
'"' +
(text ? ' alt="' + text + '"' : "") +
(title ? ' title="' + title + '"' : "") +
"/>"
);
},
});
function findFileInWebstructure(list, path) {
var result = null;
for (var i = 0; i < list.length; i++) {
if (list[i].type === "submenu" || list[i].type === "listfiles") {
result = findFileInWebstructure(list[i].children, path);
if (result !== null && result.type === "file") {
if (typeof result.ref === "undefined") {
result.ref = list[i].ref;
}
return result;
}
} else if (list[i].type === "file" && list[i].options.path === path) {
return list[i];
}
}
return null; // did not find path
}
},
];