Skip to content

Commit 6ddf872

Browse files
committed
Initial support for markdownlint
Signed-off-by: Yukai Huang <yukaihuangtw@gmail.com>
1 parent 85fc41c commit 6ddf872

File tree

12 files changed

+135
-4
lines changed

12 files changed

+135
-4
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
"markdown-it-sub": "~1.0.0",
9595
"markdown-it-sup": "~1.0.0",
9696
"markdown-pdf": "~9.0.0",
97+
"markdownlint": "^0.16.0",
9798
"mathjax": "~2.7.5",
9899
"mattermost-redux": "~5.13.0",
99100
"mermaid": "~8.2.3",

public/images/lint/mark-error.png

193 Bytes
Loading

public/images/lint/mark-multiple.png

126 Bytes
Loading

public/images/lint/mark-warning.png

215 Bytes
Loading

public/images/lint/message-error.png

194 Bytes
Loading
233 Bytes
Loading

public/js/lib/editor/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as utils from './utils'
33
import config from './config'
44
import statusBarTemplate from './statusbar.html'
55
import toolBarTemplate from './toolbar.html'
6+
import './markdown-lint'
67

78
/* config section */
89
const isMac = CodeMirror.keyMap.default === CodeMirror.keyMap.macDefault
@@ -552,6 +553,7 @@ export default class Editor {
552553
this.editor = CodeMirror.fromTextArea(textit, {
553554
mode: defaultEditorMode,
554555
backdrop: defaultEditorMode,
556+
lint: true,
555557
keyMap: 'sublime',
556558
viewportMargin: viewportMargin,
557559
styleActiveLine: true,
@@ -573,7 +575,8 @@ export default class Editor {
573575
gutters: [
574576
'CodeMirror-linenumbers',
575577
'authorship-gutters',
576-
'CodeMirror-foldgutter'
578+
'CodeMirror-foldgutter',
579+
'CodeMirror-lint-markers'
577580
],
578581
extraKeys: this.defaultExtraKeys,
579582
flattenSpans: true,
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import markdownlint from 'markdownlint'
2+
3+
// load lint plugin explicitly
4+
import 'script-loader!@hackmd/codemirror/addon/lint/lint'
5+
import './lint.css'
6+
7+
(function(mod) {
8+
mod(CodeMirror);
9+
})(function(CodeMirror) {
10+
function validator(text, options) {
11+
return lint(text).map(error => {
12+
const lineNumber = error.lineNumber - 1
13+
14+
let start, end
15+
if (error.errorRange) {
16+
start = error.errorRange[0] - 1
17+
end = error.errorRange[1] - 1
18+
} else {
19+
start = 0
20+
end = -1
21+
}
22+
23+
return {
24+
message: error.ruleDescription,
25+
severity: 'error',
26+
from: CodeMirror.Pos(lineNumber, start),
27+
to: CodeMirror.Pos(lineNumber, end)
28+
}
29+
})
30+
}
31+
32+
CodeMirror.registerHelper('lint', 'markdown', validator);
33+
});
34+
35+
function lint (content) {
36+
const { content: errors } = markdownlint.sync({
37+
strings: {
38+
content
39+
}
40+
})
41+
return errors
42+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/* The lint marker gutter */
2+
.CodeMirror-lint-markers {
3+
width: 16px;
4+
}
5+
6+
.CodeMirror-lint-tooltip {
7+
background-color: #ffd;
8+
border: 1px solid black;
9+
border-radius: 4px 4px 4px 4px;
10+
color: black;
11+
font-family: monospace;
12+
font-size: 10pt;
13+
overflow: hidden;
14+
padding: 2px 5px;
15+
position: fixed;
16+
white-space: pre;
17+
white-space: pre-wrap;
18+
z-index: 100;
19+
max-width: 600px;
20+
opacity: 0;
21+
transition: opacity .4s;
22+
-moz-transition: opacity .4s;
23+
-webkit-transition: opacity .4s;
24+
-o-transition: opacity .4s;
25+
-ms-transition: opacity .4s;
26+
}
27+
28+
.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning {
29+
background-position: left bottom;
30+
background-repeat: repeat-x;
31+
}
32+
33+
.CodeMirror-lint-mark-error {
34+
background-image: url(/images/lint/mark-error.png);
35+
;
36+
}
37+
38+
.CodeMirror-lint-mark-warning {
39+
background-image: url(/images/lint/mark-warning.png);
40+
}
41+
42+
.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning {
43+
background-position: center center;
44+
background-repeat: no-repeat;
45+
cursor: pointer;
46+
display: inline-block;
47+
height: 16px;
48+
width: 16px;
49+
vertical-align: middle;
50+
position: relative;
51+
}
52+
53+
.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning {
54+
padding-left: 18px;
55+
background-position: top left;
56+
background-repeat: no-repeat;
57+
}
58+
59+
.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
60+
background-image: url(/images/lint/message-error.png);
61+
}
62+
63+
.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {
64+
background-image: url(/images/lint/message-warning.png);
65+
}
66+
67+
.CodeMirror-lint-marker-multiple {
68+
background-image: url(/images/lint/mark-multiple.png);
69+
background-repeat: no-repeat;
70+
background-position: right bottom;
71+
width: 100%; height: 100%;
72+
}

public/js/url.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exports.URL = window.URL

0 commit comments

Comments
 (0)