diff --git a/core/modules/parsers/wikiparser/rules/prettylink.js b/core/modules/parsers/wikiparser/rules/prettylink.js index 56a2850a3..4d7839979 100644 --- a/core/modules/parsers/wikiparser/rules/prettylink.js +++ b/core/modules/parsers/wikiparser/rules/prettylink.js @@ -23,8 +23,8 @@ exports.types = {inline: true}; exports.init = function(parser) { this.parser = parser; - // Regexp to match - this.matchRegExp = /\[\[(.*?)(?:\|(.*?))?\]\]/mg; + // Regexp to match `[[Title^blockId|Alias]]`, the `^blockId` and `|Alias` are optional. + this.matchRegExp = /\[\[(.*?)(?:\^([^|\s^]+))?(?:\|(.*?))?\]\]/mg; }; exports.parse = function() { @@ -32,8 +32,13 @@ exports.parse = function() { this.parser.pos = this.matchRegExp.lastIndex; // Process the link var text = this.match[1], - link = this.match[2] || text; + blockId = this.match[2] || "", + link = this.match[3] || text; if($tw.utils.isLinkExternal(link)) { + // add back the part after `^` to the ext link, if it happen to has one. + if(blockId) { + link = link + "^" + blockId; + } return [{ type: "element", tag: "a", @@ -51,7 +56,8 @@ exports.parse = function() { return [{ type: "link", attributes: { - to: {type: "string", value: link} + to: {type: "string", value: link}, + id: {type: "string", value: blockId}, }, children: [{ type: "text", text: text