LinkBaseToken (EN) - bhsd-harry/wikiparser-node GitHub Wiki

Table of Contents

Other Languages

Introduction

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.

Properties

fragment

🌐 Expand

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

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

link

✅ Expand

type: Title
Full link target.

// 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

✅ Expand

type: string
Normalized target page name, read-only.

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

Methods

cloneNode

Expand

param: this
Deep clone the node.

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

json

🌐 Expand

Save the syntax tree as JSON.

// 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

✅ 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 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

🌐 Expand

returns: string
Output in HTML format.

// 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

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

setLinkText

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

setTarget

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

toHtml

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:&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** ⚠️