-
Notifications
You must be signed in to change notification settings - Fork 3
LinkBaseToken (EN)
Table of Contents
The parent class of CategoryToken, FileToken, LinkToken and RedirectTargetToken. This class inherits all the properties and methods of the Token class which are not repeated here.
✅ Available in the Mini and Browser versions.
🌐 Available in the Browser version.
🌐 Expand
type: string
Fragment (anchor) of the target page. Read-only in the Browser version.
// fragment (print)
var {
firstChild,
lastChild,
} = Parser.parse("[[a#%7B%7D]][[b]]");
assert.strictEqual(firstChild.fragment, "{}");
assert.strictEqual(lastChild.fragment, undefined);// fragment (main)
var {firstChild} = Parser.parse("[[a#]]");
firstChild.fragment = undefined;
assert.equal(firstChild, "[[A]]"); // auto normalize the target page name
firstChild.fragment = "b";
assert.equal(firstChild, "[[A#b]]");Expand
type: string
Interwiki prefix.
// interwiki (main)
var firstChild;
Parser.getConfig();
Parser.config.interwiki = ["zhwp", "enwp"];
({firstChild} = Parser.parse("[[zhwp:a#b]]"));
assert.strictEqual(firstChild.interwiki, "zhwp");
firstChild.interwiki = "enwp";
assert.equal(firstChild, "[[enwp:A#b]]");✅ Expand
type: Title
Full link target. Read-only in the Mini and Browser versions.
// link
var {firstChild: {link}} = Parser.parse("[[a]]");
assert.deepStrictEqual(
link,
Parser.normalizeTitle("A"),
);// link (main)
var {firstChild} = Parser.parse("[[a]]");
firstChild.link = "file:b";
assert.equal(firstChild, "[[:file:b]]"); // auto add ':' at the beginning
({firstChild} = Parser.parse("[[category:c]]"));
firstChild.link = "category:d";
assert.equal(firstChild, "[[category:d]]");✅ Expand
type: string
Normalized target page name, read-only.
// name
var {firstChild} = Parser.parse("[[category:a b]]");
assert.strictEqual(firstChild.name, "Category:A_b");Expand
param: this
Deep clone the node.
// cloneNode (main)
var link = Parser.parse("[[a|b]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("[[category:a|b]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("#redirect [[a#b]]").querySelector("redirect-target");
assert.equal(link, "[[a#b]]");
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("[[file:a|thumb|b|link=c]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);🌐 Expand
Save the syntax tree as JSON.
// json (print)
var root = Parser.parse("#redirect [[c#d]]"),
target = root.querySelector("redirect-target");
assert.equal(target, "[[c#d]]");
assert.deepStrictEqual(target.json(), {
range: [10, 17],
type: "redirect-target",
name: "C",
fragment: "d",
childNodes: [
{
range: [12, 15],
type: "link-target",
childNodes: [
{
range: [12, 15],
data: "c#d",
},
],
},
],
});✅ Expand
returns: LintError[]
Report potential grammar errors.
// lint
assert.deepStrictEqual(Parser.parse("[[{{x}}]]").firstChild.lint(), [
{
rule: "unknown-page",
severity: "warning",
message: "template in an internal link target",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 7,
endIndex: 7,
},
]);
assert.deepStrictEqual(Parser.parse("[[%3F]]").firstChild.lint(), [
{
rule: "url-encoding",
severity: "warning",
message: "unnecessary percent-encoding in an internal link",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 5,
endIndex: 5,
fix: {
desc: "decode",
range: [2, 5],
text: "?",
},
},
]);
assert.deepStrictEqual(Parser.parse("[[a|A|]]").firstChild.lint(), [
{
rule: "pipe-like",
severity: "warning",
message: 'additional "|" in the link text',
startLine: 0,
startCol: 4,
startIndex: 4,
endLine: 0,
endCol: 6,
endIndex: 6,
suggestions: [
{
desc: "escape",
range: [4, 6],
text: "A|",
},
],
},
]);
assert.deepStrictEqual(Parser.parse("[[category:a#b]]").firstChild.lint(), [
{
rule: "no-ignored",
severity: "warning",
message: "useless fragment",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 14,
endIndex: 14,
fix: {
range: [12, 14],
text: "",
desc: "remove",
},
},
]);🌐 Expand
returns: string
Output in HTML format.
// print (print)
var {firstChild} = Parser.parse("[[a#b|b]]");
assert.equal(
firstChild.print(),
`<span class="wpb-link">[[<span class="wpb-link-target">a#b</span>|<span class="wpb-link-text">b</span>]]</span>`,
);Expand
param: string
Set fragment.
// setFragment (main)
var {firstChild} = Parser.parse("[[a#a]]");
firstChild.setFragment();
// this method will normalize the target page name
assert.equal(firstChild, "[[A]]");
firstChild.setFragment("]");
assert.equal(firstChild, "[[A#%5D]]");Expand
param: string
Set the displayed link text.
// setLinkText (main)
var {firstChild} = Parser.parse("[[a|a]]");
firstChild.setLinkText();
assert.equal(firstChild, "[[a]]");
firstChild.setLinkText("''b''");
assert.equal(firstChild, "[[a|''b'']]");
assert.ok(firstChild.querySelector("quote"));
firstChild.setLinkText("-{c}-");
assert.equal(firstChild, "[[a|-{c}-]]");
assert.ok(firstChild.querySelector("converter"));Expand
param: string
Set the target page name.
// setTarget (main)
var {firstChild} = Parser.parse("[[a]]");
firstChild.setTarget("b");
assert.equal(firstChild, "[[b]]");
firstChild.setTarget("<!---->category:c");
// auto add ':' at the beginning
assert.equal(firstChild, "[[:<!---->category:c]]");Expand
version added: 1.10.0
returns: string
Convert to HTML.
// toHtml (main)
Parser.getConfig();
Parser.config.interwiki = ["mw"];
assert.strictEqual(
Parser.parse('[[mw:"| c ]]').firstChild.toHtml(),
'<a class="extiw" href="/wiki/mw%3A%22" title="mw:""> c </a>',
);
assert.strictEqual(
Parser.parse("[[ #< ]]").firstChild.toHtml(),
'<a href="#%3C">#< </a>',
);
assert.strictEqual(
Parser.parse("[[ media : a ]]").firstChild.toHtml(),
'<a href="/wiki/Media%3AA" class="internal" title="A">media : a </a>',
);
assert.strictEqual(
Parser.parse("[[category:a]]").firstChild.toHtml(),
"",
);对维基文本批量执行语法检查的命令行工具
轻量级的维基模板解析器
维基文本语言服务器协议实现
用于维基文本的 VS Code 扩展
A command-line tool that performs linting on Wikitext in bulk
A lightweight Wikitext template parser
An implementation of the Language Server Protocol for Wikitext
VS Code extension for Wikitext