LinkBaseToken - bhsd-harry/wikiparser-node GitHub Wiki
目录
CategoryToken、FileToken、LinkToken 和 RedirectTargetToken 的父类。这个类继承了 Token 类的全部属性和方法,这里不再列出。
✅ 在 Mini 和 Browser 版本中可用。
🌐 在 Browser 版本中可用。
🌐 展开
type: string
// fragment (print)
var {firstChild} = Parser.parse('[[a#%7B%7D]]');
assert.strictEqual(firstChild.fragment, '{}');
// 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]]');
展开
type: string
跨维基前缀。
// 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]]');
✅ 展开
type: Title
完整链接。
// link
var {firstChild: {link}} = Parser.parse('[[a]]');
assert.strictEqual(link.title, 'A');
// link (main)
var {firstChild} = Parser.parse('[[a]]');
firstChild.link = 'file:b';
assert.equal(firstChild, '[[:file:b]]'); // auto add ':' at the beginning
assert.strictEqual(firstChild.name, 'File:B');
({firstChild} = Parser.parse('[[category:c]]'));
firstChild.link = 'category:d';
assert.equal(firstChild, '[[category:d]]');
assert.strictEqual(firstChild.name, 'Category:D');
✅ 展开
type: string
规范化的目标页面名称,只读。
// name
var {firstChild} = Parser.parse('[[category:a b]]');
assert.strictEqual(firstChild.name, 'Category:A_b');
展开
param: this
深拷贝节点。
// cloneNode (main)
var {firstChild} = Parser.parse('[[a|b]]');
assert.deepStrictEqual(firstChild.cloneNode(), firstChild);
🌐 展开
以HTML格式输出。
// json
var root = Parser.parse('#redirect [[c#d]]\n[[a#b]]'),
target = root.querySelector('redirect-target'),
{lastChild} = root;
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',
},
],
},
],
});
assert.equal(lastChild, '[[a#b]]');
assert.deepStrictEqual(lastChild.json(), {
range: [18, 25],
type: 'link',
name: 'A',
fragment: 'b',
childNodes: [
{
range: [20, 23],
type: 'link-target',
childNodes: [
{
range: [20, 23],
data: 'a#b',
},
],
},
],
});
✅ 展开
returns: LintError[]
报告潜在语法错误。
// 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 URL 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',
},
},
]);
🌐 展开
returns: string
以HTML格式输出。
// 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>`,
);
展开
param: string
设置fragment。
// setFragment (main)
var {firstChild} = Parser.parse('[[a#a]]');
firstChild.setFragment();
assert.equal(firstChild, '[[A]]'); // 这个方法会同时规范化页面名
firstChild.setFragment(']');
assert.equal(firstChild, '[[A#%5D]]');
展开
param: string
设置链接显示文字。
// 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('template#Template:B'));
firstChild.setLinkText('c');
assert.equal(firstChild, '[[a|c]]');
展开
param: string
设置链接目标。
// setTarget (main)
var {firstChild} = Parser.parse('[[a]]');
firstChild.setTarget('b');
assert.equal(firstChild, '[[b]]');
firstChild.setTarget('<!---->category:c');
assert.equal(firstChild, '[[:<!---->category:c]]'); // 自动在开头添加':'
展开
加入的版本:1.10.0
returns: string
转换为 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" title="A">media : a </a>',
);
assert.strictEqual(
Parser.parse('[[category:a]]').firstChild.toHtml(),
'',
);