Skip to content

LinkBaseToken

bhsd edited this page Jul 23, 2024 · 6 revisions
目录

Other Languages

简介

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

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

Properties

name

✅ 展开

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

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

link

展开

type: Title
完整链接。

// link (main)
var {firstChild} = Parser.parse('[[a]]');
assert.equal(firstChild.link, 'A');
firstChild.link = 'file:b';
assert.equal(firstChild, '[[:file:b]]'); // 自动在开头添加':'
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');

fragment

展开

type: string

// fragment (main)
var {firstChild} = Parser.parse('[[a#%7B%7D]]');
assert.strictEqual(firstChild.fragment, '{}');
firstChild.fragment = undefined;
assert.equal(firstChild, '[[A]]'); // 自动规范化页面名
firstChild.fragment = 'b';
assert.equal(firstChild, '[[A#b]]');

interwiki

展开

type: string
跨维基前缀。

// interwiki (main)
var firstChild;
Parser.config = 'moegirl'; // 跨维基前缀依赖每个MediaWiki站点具体的设定
({firstChild} = Parser.parse('[[zhwp:a]]'));
assert.strictEqual(firstChild.interwiki, 'zhwp');
firstChild.interwiki = 'enwp';
assert.equal(firstChild, '[[enwp:A]]');

Methods

lint

✅ 展开

returns: LintError[]
报告潜在语法错误。

// lint
var {firstChild} = Parser.parse('[[category:%61{{lj|a}}#b|c|]]');
assert.deepStrictEqual(firstChild.lint(), [
	{
		rule: 'unknown-page',
		severity: 'warning',
		message: 'template in an internal link target',
		startLine: 0,
		startCol: 2,
		startIndex: 2,
		endLine: 0,
		endCol: 24,
		endIndex: 24,
	},
	{
		rule: 'url-encoding',
		severity: 'error',
		message: 'unnecessary URL encoding in an internal link',
		startLine: 0,
		startCol: 2,
		startIndex: 2,
		endLine: 0,
		endCol: 24,
		endIndex: 24,
	},
	{
		rule: 'pipe-like',
		severity: 'warning',
		message: 'additional "|" in the link text',
		startLine: 0,
		startCol: 25,
		startIndex: 25,
		endLine: 0,
		endCol: 27,
		endIndex: 27,
		suggestions: [
			{
				desc: 'escape',
				range: [25, 27],
				text: 'c|',
			},
		],
	},
	{
		rule: 'no-ignored',
		severity: 'error',
		message: 'useless fragment',
		startLine: 0,
		startCol: 2,
		startIndex: 2,
		endLine: 0,
		endCol: 24,
		endIndex: 24,
		fix: {
			range: [22, 24],
			text: '',
		},
	},
]);

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

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

setFragment

展开

param: string
设置fragment。

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

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(firstChild.querySelector('template#Template:B'));
firstChild.setLinkText('c');
assert.equal(firstChild, '[[a|c]]');

toHtml

展开

加入的版本: 1.10.0

returns: string
转换为 HTML。

// toHtml (main)
var firstChild, lastChild;
Parser.config = 'enwiki';
({firstChild, lastChild} = Parser.parse([[mw:"?| c ]][[ #< ]]'));
assert.strictEqual(
	firstChild.toHtml(),
	'<a class="extiw" href="/wiki/mw%3A%22%3F" title="mw:&quot;?"> c </a>',
);
assert.strictEqual(
	lastChild.toHtml(),
	'<a href="#%3C">#&lt; </a>',
);
Clone this wiki locally