ParameterToken - bhsd-harry/wikiparser-node GitHub Wiki
目录
模板或魔术字的参数。这个类继承了 Token 类的全部属性和方法,这里不再列出。
✅ 在 Mini 和 Browser 版本中可用。
🌐 在 Browser 版本中可用。
✅ 展开
type: string
参数名,只读。
// name
var [anonymous, named] = Parser.parse('{{a|b|c=}}')
.querySelectorAll('parameter');
assert.equal(anonymous, 'b');
assert.equal(named, 'c=');
assert.strictEqual(anonymous.name, '1');
assert.strictEqual(named.name, 'c');
// name (main)
var named = Parser.parse('{{a|b=1}}').querySelector('parameter');
named.firstChild.replaceChildren('c');
assert.strictEqual(named.name, 'c');
✅ 展开
type: boolean
是否是匿名参数。
// anon
var [anonymous, named] = Parser.parse('{{a|b|c=}}')
.querySelectorAll('parameter');
assert.equal(anonymous, 'b');
assert.equal(named, 'c=');
assert.ok(anonymous.anon);
assert.ok(!named.anon);
// anon (main)
var [anonymous] = Parser.parse('{{a|b}}').querySelectorAll('parameter');
anonymous.anon = false;
assert.equal(anonymous, '1=b');
🌐 展开
type: boolean
是否是重复参数。
// duplicated (print)
var root = Parser.parse('{{a|b|1=}}'),
[anonymous, named] = root.querySelectorAll('parameter');
assert.equal(anonymous, 'b');
assert.equal(named, '1=');
assert.ok(anonymous.duplicated);
assert.ok(named.duplicated);
// duplicated (main)
var root = Parser.parse('{{a|b|1=}}'),
[anonymous] = root.querySelectorAll('parameter');
assert.equal(anonymous, 'b');
anonymous.duplicated = false;
assert.equal(root, '{{a|b}}');
✅ 展开
returns: LintError[]
报告潜在语法错误。
// lint
var parameter = Parser.parse('{{a|http://a.com/index.php?a=1}}')
.querySelector('parameter');
assert.equal(parameter, 'http://a.com/index.php?a=1');
assert.deepStrictEqual(parameter.lint(), [
{
rule: 'unescaped',
severity: 'error',
message: 'unescaped query string in an anonymous parameter',
startLine: 0,
startCol: 28,
startIndex: 28,
endLine: 0,
endCol: 29,
endIndex: 29,
fix: {
range: [28, 29],
text: '{{=}}',
desc: 'escape',
},
},
]);
🌐 展开
以HTML格式输出。
// json
var parameter = Parser.parse('{{a|1=|}}').querySelector('parameter');
assert.equal(parameter, '1=');
assert.deepStrictEqual(parameter.json(), {
range: [4, 6],
type: 'parameter',
name: '1',
anon: false,
duplicated: true,
childNodes: [
{
range: [4, 5],
type: 'parameter-key',
childNodes: [
{
range: [4, 5],
data: '1',
},
],
},
{
range: [6, 6],
type: 'parameter-value',
childNodes: [
{
range: [6, 6],
data: '',
},
],
},
],
});
展开
returns: this
深拷贝节点。
// cloneNode (main)
var [anonymous, named] = Parser.parse('{{a|b|c=}}')
.querySelectorAll('parameter');
assert.equal(anonymous, 'b');
assert.equal(named, 'c=');
assert.deepStrictEqual(anonymous.cloneNode(), anonymous);
assert.deepStrictEqual(named.cloneNode(), named);
展开
returns: string
获取参数值。
// getValue (main)
var [anonymous, named] = Parser.parse('{{a| b | c = 1 }}')
.querySelectorAll('parameter');
assert.equal(anonymous, ' b ');
assert.equal(named, ' c = 1 ');
assert.strictEqual(anonymous.getValue(), ' b '); // 模板的匿名参数保留首尾的空白字符
assert.strictEqual(named.getValue(), '1'); // 模板的命名参数不保留首尾的空白字符
展开
param: string
参数值
设置参数值。
// setValue (main)
var parameter = Parser.parse('{{a|b=1}}').querySelector('parameter');
assert.equal(parameter, 'b=1');
parameter.setValue(' 2 ');
assert.equal(parameter, 'b= 2 '); // setValue方法总是保留空白字符,哪怕是无效的
展开
param: string
新参数名
修改参数名。
// rename (main)
var parameter = Parser.parse('{{a|b=1}}').querySelector('parameter');
assert.equal(parameter, 'b=1');
parameter.rename('c');
assert.equal(parameter, 'c=1');
展开
加入的版本:1.1.4
转义参数值中的 =
。
// escape (main)
var parameter = Parser.parse('{{a|1=b=c}}').querySelector('parameter');
assert.equal(parameter, '1=b=c');
parameter.escape();
assert.equal(parameter, '1=b{{=}}c');