Improve parsing of wiki links
This commit is contained in:
parent
1f8340ca3c
commit
6b760d19a8
6
editor/package-lock.json
generated
6
editor/package-lock.json
generated
|
@ -8605,9 +8605,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wiki-list-editor": {
|
"wiki-list-editor": {
|
||||||
"version": "0.7.2",
|
"version": "0.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/wiki-list-editor/-/wiki-list-editor-0.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/wiki-list-editor/-/wiki-list-editor-0.7.3.tgz",
|
||||||
"integrity": "sha512-Rw5Cn+BztW+q/JRhOKjOSwZ4Wyx/Llv/8YuxYRDkMPV/buCUethIAYeywoStaoSxkXft3ONHcXq8Hgu9AFwtjw==",
|
"integrity": "sha512-JZTHH0b5Q2O4UO+nBesOUP1C4W3awh4mfMtsga8j1sR65P+I5MIBj/ymrvtZCGVYI2PL3RDA3aGWBsfp7s2u4w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"dragula": "^3.7.2",
|
"dragula": "^3.7.2",
|
||||||
"he": "^1.2.0",
|
"he": "^1.2.0",
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
"node-sass": "^4.14.1",
|
"node-sass": "^4.14.1",
|
||||||
"sass-loader": "^7.3.1",
|
"sass-loader": "^7.3.1",
|
||||||
"style-loader": "^1.0.0",
|
"style-loader": "^1.0.0",
|
||||||
"wiki-list-editor": "^0.7.2"
|
"wiki-list-editor": "^0.7.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "node_modules/.bin/mocha -r esm",
|
"test": "node_modules/.bin/mocha -r esm",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import listEditor from 'wiki-list-editor';
|
import listEditor from 'wiki-list-editor';
|
||||||
import MarkdownIt from 'markdown-it';
|
import MarkdownIt from 'markdown-it';
|
||||||
import MarkdownItWikilinks from 'markdown-it-wikilinks';
|
import MarkdownItWikilinks from './wikilinks';
|
||||||
import MarkdownItMark from 'markdown-it-mark';
|
import MarkdownItMark from 'markdown-it-mark';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import qs from 'querystring'
|
import qs from 'querystring'
|
||||||
|
@ -178,7 +178,10 @@ if (holder) {
|
||||||
MD.use(MarkdownItWikilinks({
|
MD.use(MarkdownItWikilinks({
|
||||||
baseURL: holder.dataset.baseUrl,
|
baseURL: holder.dataset.baseUrl,
|
||||||
uriSuffix: '',
|
uriSuffix: '',
|
||||||
relativeBaseURL: '/edit/'
|
relativeBaseURL: '/edit/',
|
||||||
|
htmlAttributes: {
|
||||||
|
class: 'wiki-link'
|
||||||
|
}
|
||||||
})).use(MarkdownItMark)
|
})).use(MarkdownItMark)
|
||||||
const options = {
|
const options = {
|
||||||
transform(text, callback) {
|
transform(text, callback) {
|
||||||
|
|
|
@ -12,20 +12,14 @@ body {
|
||||||
font-family: 'Inter', sans-serif;
|
font-family: 'Inter', sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content a::before {
|
.content a.wiki-link::before {
|
||||||
content: "[[";
|
content: "[[";
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
}
|
}
|
||||||
.content a::after {
|
.content a.wiki-link::after {
|
||||||
content: "]]";
|
content: "]]";
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
}
|
}
|
||||||
.content a.tag::before {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
.content a.tag::after {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
@supports (font-variation-settings: normal) {
|
@supports (font-variation-settings: normal) {
|
||||||
html {
|
html {
|
||||||
|
|
82
editor/src/wikilinks.js
Normal file
82
editor/src/wikilinks.js
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const Plugin = require('markdown-it-regexp')
|
||||||
|
const extend = require('extend')
|
||||||
|
const sanitize = require('sanitize-filename')
|
||||||
|
|
||||||
|
module.exports = (options) => {
|
||||||
|
|
||||||
|
const defaults = {
|
||||||
|
baseURL: '/',
|
||||||
|
relativeBaseURL: './',
|
||||||
|
makeAllLinksAbsolute: false,
|
||||||
|
uriSuffix: '.html',
|
||||||
|
htmlAttributes: {
|
||||||
|
},
|
||||||
|
generatePageNameFromLabel: (label) => {
|
||||||
|
return label
|
||||||
|
},
|
||||||
|
postProcessPageName: (pageName) => {
|
||||||
|
pageName = pageName.trim()
|
||||||
|
pageName = pageName.split('/').map(sanitize).join('/')
|
||||||
|
pageName = pageName.replace(/\s+/, '_')
|
||||||
|
return pageName
|
||||||
|
},
|
||||||
|
postProcessLabel: (label) => {
|
||||||
|
label = label.trim()
|
||||||
|
return label
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
options = extend(true, defaults, options)
|
||||||
|
|
||||||
|
function isAbsolute(pageName) {
|
||||||
|
return options.makeAllLinksAbsolute || pageName.charCodeAt(0) === 0x2F/* / */
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeInitialSlashes(str) {
|
||||||
|
return str.replace(/^\/+/g, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
return Plugin(
|
||||||
|
/(#?)\[\[([:\w\s/]+)\]\]/,
|
||||||
|
(match, utils) => {
|
||||||
|
let label = ''
|
||||||
|
let pageName = ''
|
||||||
|
let href = ''
|
||||||
|
let htmlAttrs = []
|
||||||
|
let htmlAttrsString = ''
|
||||||
|
|
||||||
|
let tag = match[1]
|
||||||
|
|
||||||
|
label = match[2]
|
||||||
|
pageName = options.generatePageNameFromLabel(label)
|
||||||
|
|
||||||
|
label = options.postProcessLabel(label)
|
||||||
|
pageName = options.postProcessPageName(pageName)
|
||||||
|
|
||||||
|
// make sure none of the values are empty
|
||||||
|
if (!label || !pageName) {
|
||||||
|
return match.input
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAbsolute(pageName)) {
|
||||||
|
pageName = removeInitialSlashes(pageName)
|
||||||
|
href = options.baseURL + pageName + options.uriSuffix
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
href = options.relativeBaseURL + pageName + options.uriSuffix
|
||||||
|
}
|
||||||
|
href = utils.escape(href)
|
||||||
|
|
||||||
|
htmlAttrs.push(`href="${href}"`)
|
||||||
|
for (let attrName in options.htmlAttributes) {
|
||||||
|
const attrValue = options.htmlAttributes[attrName]
|
||||||
|
htmlAttrs.push(`${attrName}="${attrValue}"`)
|
||||||
|
}
|
||||||
|
htmlAttrsString = htmlAttrs.join(' ')
|
||||||
|
|
||||||
|
return `<a ${htmlAttrsString}>${tag}${label}</a>`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user