LinkBaseToken - bhsd-harry/wikiparser-node GitHub Wiki

目录

Other Languages

简介

CategoryTokenFileTokenLinkTokenRedirectTargetToken 的父类。这个类继承了 Token 类的全部属性和方法,这里不再列出。

✅ 在 MiniBrowser 版本中可用。
🌐 在 Browser 版本中可用。

Properties

fragment

🌐 展开

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]]');

interwiki

展开

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]]');

link

✅ 展开

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');

name

✅ 展开

type: string
规范化的目标页面名称,只读。

// name
var {firstChild} = Parser.parse('[[category:a b]]');
assert.strictEqual(firstChild.name, 'Category:A_b');

Methods

cloneNode

展开

param: this
深拷贝节点。

// cloneNode (main)
var {firstChild} = Parser.parse('[[a|b]]');
assert.deepStrictEqual(firstChild.cloneNode(), firstChild);

json

🌐 展开

以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',
				},
			],
		},
	],
});

lint

✅ 展开

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',
		},
	},
]);

print

🌐 展开

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>`,
);

setFragment

展开

param: string
设置fragment。

// setFragment (main)
var {firstChild} = Parser.parse('[[a#a]]');
firstChild.setFragment();
assert.equal(firstChild, '[[A]]'); // 这个方法会同时规范化页面名
firstChild.setFragment(']');
assert.equal(firstChild, '[[A#%5D]]');

setLinkText

展开

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]]');

setTarget

展开

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]]'); // 自动在开头添加':'

toHtml

展开

加入的版本: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:&quot;"> c </a>',
);
assert.strictEqual(
	Parser.parse('[[ #< ]]').firstChild.toHtml(),
	'<a href="#%3C">#&lt; </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(),
	'',
);
⚠️ **GitHub.com Fallback** ⚠️