Skip to content

Commit 4ad96f3

Browse files
authored
feat: add helper for disabled link, fixed #295 (#296)
1 parent 1f04912 commit 4ad96f3

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

docs/helpers.md

+5
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
5757
[link](/demo2 ":target=_self")
5858
```
5959

60+
## Disable link
61+
62+
```md
63+
[link](/demo ":disabled")
64+
```

src/core/render/compiler.js

+34-16
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ export class Compiler {
2525
if (isFn(mdConf)) {
2626
compile = mdConf(marked, renderer)
2727
} else {
28-
marked.setOptions(merge(mdConf, {
29-
renderer: merge(renderer, mdConf.renderer)
30-
}))
28+
marked.setOptions(
29+
merge(mdConf, {
30+
renderer: merge(renderer, mdConf.renderer)
31+
})
32+
)
3133
compile = marked
3234
}
3335

@@ -91,33 +93,49 @@ export class Compiler {
9193
}
9294
// highlight code
9395
origin.code = renderer.code = function (code, lang = '') {
94-
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
96+
const hl = Prism.highlight(
97+
code,
98+
Prism.languages[lang] || Prism.languages.markup
99+
)
95100

96101
return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
97102
}
98-
origin.link = renderer.link = function (href, title, text) {
99-
let blank = ''
103+
origin.link = renderer.link = function (href, title = '', text) {
104+
let attrs = ''
105+
const config = {}
100106

101-
if (!/:|(\/{2})/.test(href) &&
107+
if (title) {
108+
title = title
109+
.replace(/:(\w+)=?(\w+)?/g, (m, key, value) => {
110+
config[key] = value || true
111+
return ''
112+
})
113+
.trim()
114+
}
115+
116+
if (
117+
!/:|(\/{2})/.test(href) &&
102118
!_self.matchNotCompileLink(href) &&
103-
!/(\s?:ignore)(\s\S+)?$/.test(title)) {
119+
!config.ignore
120+
) {
104121
href = router.toURL(href, null, router.getCurrentPath())
105122
} else {
106-
blank = ` target="${linkTarget}"`
107-
title = title && title.replace(/:ignore/g, '').trim()
123+
attrs += ` target="${linkTarget}"`
124+
}
125+
126+
if (config.target) {
127+
attrs += ' target=' + config.target
108128
}
109129

110-
let target = title && title.match(/:target=\w+/)
111-
if (target) {
112-
target = target[0]
113-
title = title.replace(target, '')
114-
blank = ' ' + target.slice(1)
130+
if (config.disabled) {
131+
attrs += ' disabled'
132+
href = 'javascript:void(0)'
115133
}
116134

117135
if (title) {
118136
title = ` title="${title}"`
119137
}
120-
return `<a href="${href}"${title || ''}${blank}>${text}</a>`
138+
return `<a href="${href}"${title || ''}${attrs}>${text}</a>`
121139
}
122140
origin.paragraph = renderer.paragraph = function (text) {
123141
if (/^!&gt;/.test(text)) {

src/themes/basic/_layout.css

+5
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ img {
7575
max-width: 100%;
7676
}
7777

78+
a[disabled] {
79+
cursor: not-allowed;
80+
opacity: 0.6;
81+
}
82+
7883
kbd {
7984
border: solid 1px #ccc;
8085
border-radius: 3px;

0 commit comments

Comments
 (0)