AttributesToken (EN) - bhsd-harry/wikiparser-node GitHub Wiki
Table of Contents
Attributes of extension tags, HTML tags and tables. This class inherits all the properties and methods of the Token class which are not repeated here.
✅ Available in the Mini and Browser versions.
Expand
type: Record<string, string | true>
Attribute object.
// attributes (main)
var attrs = Parser.parse('<poem COMPACT id="a/>').querySelector('ext-attrs');
assert.equal(attrs, ' COMPACT id="a');
assert.deepStrictEqual(attrs.attributes, {
compact: true,
id: 'a',
});
attrs.attributes = {title: 'b'};
assert.equal(attrs, ' title="b"');Expand
type: Set<string>
The class attribute as a Set, read-only.
// classList (main)
var attrs = Parser.parse('{|class="a b"\n|}').querySelector('table-attrs');
assert.equal(attrs, 'class="a b"');
assert.deepStrictEqual(attrs.classList, new Set(['a', 'b']));
attrs.classList.add('c');
assert.equal(attrs, 'class="a b c"');
attrs.classList.delete('a');
assert.equal(attrs, 'class="b c"');
attrs.classList.clear();
assert.equal(attrs, 'class=""');Expand
type: string
The class attribute as a string.
// className (main)
var attrs = Parser.parse('<p class>').querySelector('html-attrs');
assert.equal(attrs, ' class');
assert.strictEqual(attrs.className, '');
attrs.className = 'a b';
assert.equal(attrs, ' class="a b"');
assert.strictEqual(attrs.className, 'a b');
attrs.className = '';
assert.equal(attrs, ' ');
assert.strictEqual(attrs.className, '');Expand
type: string
The id attribute.
// id (main)
var attrs = Parser.parse('<p id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id=a');
assert.strictEqual(attrs.id, 'a');
attrs.id = 'b';
assert.equal(attrs, ' id="b"');
assert.strictEqual(attrs.id, 'b');
attrs.id = '';
assert.equal(attrs, ' ');
assert.strictEqual(attrs.id, '');✅ Expand
type: string
The name of the tag in lowercase, read-only.
// name
var extAttrs = Parser.parse('<REF/>').querySelector('ext-attrs'),
tableAttrs = Parser.parse('{|\n!').querySelector('td')
.querySelector('table-attrs');
assert.strictEqual(extAttrs.name, 'ref');
assert.strictEqual(tableAttrs.name, 'th');Expand
type: boolean
Whether the attributes contain invalid characters.
// sanitized (main)
var root = Parser.parse('{|id=a | class=b\n!! title="c"|\n|}'),
tableAttrs = root.querySelector('table>table-attrs'),
thAttrs = root.querySelector('td>table-attrs');
assert.equal(tableAttrs, 'id=a | class=b');
assert.equal(thAttrs, '! title="c"');
assert.ok(!tableAttrs.sanitized);
tableAttrs.sanitized = true;
assert.equal(tableAttrs, 'id=a class=b');
assert.ok(!thAttrs.sanitized);
thAttrs.sanitized = true;
assert.equal(thAttrs, 'title="c"');✅ Expand
type: string
Type of the token.
// type
var attr = Parser.parse('<poem compact/>').querySelector('ext-attrs');
assert.equal(attr, ' compact');
assert.strictEqual(attr.type, 'ext-attrs');
attr = Parser.parse('<br id=a/>').querySelector('html-attrs');
assert.equal(attr, ' id=a');
assert.strictEqual(attr.type, 'html-attrs');
attr = Parser.parse('{|class="wikitable"').querySelector('table-attrs');
assert.equal(attr, 'class="wikitable"');
assert.strictEqual(attr.type, 'table-attrs');Expand
returns: this
Deep clone the node.
// cloneNode (main)
var [ext, html, table] = Parser.parse('<ref name=a/><p id=b>\n{|id=c\n|}')
.querySelectorAll('ext-attrs, html-attrs, table-attrs');
assert.equal(ext, ' name=a');
assert.equal(html, ' id=b');
assert.equal(table, 'id=c');
assert.deepStrictEqual(ext.cloneNode(), ext);
assert.deepStrictEqual(html.cloneNode(), html);
assert.deepStrictEqual(table.cloneNode(), table);Expand
version added: 1.17.1
param: string property name
param: string | number | undefined property value (optional)
returns: string | undefined
Get the value of a style property.
// css (main)
var attrs = Parser.parse('<p style=margin:auto;margin:0;>')
.querySelector('html-attrs');
assert.equal(attrs, ' style=margin:auto;margin:0;');
assert.strictEqual(attrs.css('margin'), '0');
attrs.css('margin', '0 0');
assert.equal(attrs, ' style="margin:auto;margin:0 0;"');
attrs.css('margin', '');
assert.equal(attrs, ' style=""');
attrs.css('padding', '0');
assert.equal(attrs, ' style="padding: 0"');
attrs.css('left', 0);
assert.equal(attrs, ' style="padding: 0; left: 0"');
attrs.css('right', '');
assert.equal(attrs, ' style="padding: 0; left: 0"');
attrs.css('padding', '');
assert.equal(attrs, ' style="left: 0"');
attrs = Parser.parse('<poem/>').querySelector('ext-attrs');
assert.equal(attrs, '');
attrs.css('left', 0);
assert.equal(attrs, ' style="left: 0"');✅ Expand
param: string Attribute name
returns: string | true
Get the value of the specified attribute.
// getAttr
var attrs = Parser.parse('<poem id="a" ID = b compact/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' id="a" ID = b compact');
assert.strictEqual(attrs.getAttr('id'), 'b');
assert.strictEqual(attrs.getAttr('COMPACT'), true);
assert.strictEqual(attrs.getAttr('title'), undefined);Expand
returns(): Set<string>
Get all attribute names.
// getAttrNames (main)
var attrs = Parser.parse('<poem id=a id=b COMPACT/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' id=a id=b COMPACT');
assert.deepStrictEqual(attrs.getAttrNames(), new Set(['id', 'compact']));Expand
returns: Record<string, string | true>
Get all attributes.
// getAttrs (main)
var attrs = Parser.parse('<poem id=a COMPACT/>').querySelector('ext-attrs');
assert.equal(attrs, ' id=a COMPACT');
assert.deepStrictEqual(attrs.getAttrs(), {
id: 'a',
compact: true,
});✅ Expand
param: string Attribute name
returns: AttributeToken
The last AttributeToken with the specified attribute name.
// getAttrToken
var attrs = Parser.parse('<p id=a ID = b>').querySelector('html-attrs'),
[, attr] = attrs.querySelectorAll('html-attr');
assert.equal(attrs, ' id=a ID = b');
assert.equal(attr, 'ID = b');
assert.deepStrictEqual(attrs.getAttrToken('id'), attr);
assert.strictEqual(attrs.getAttrToken('title'), undefined);✅ Expand
param: string Attribute name, optional
returns: AttributeToken[]
All AttributeTokens with the specified attribute name.
// getAttrTokens
var attrs = Parser.parse('<poem id = a COMPACT/>').querySelector('ext-attrs'),
[id, compact] = attrs.querySelectorAll('ext-attr');
assert.equal(attrs, ' id = a COMPACT');
assert.equal(id, 'id = a');
assert.equal(compact, 'COMPACT');
assert.deepStrictEqual(attrs.getAttrTokens(), [id, compact]);
assert.deepStrictEqual(attrs.getAttrTokens('ID'), [id]);
assert.deepStrictEqual(attrs.getAttrTokens('compact'), [compact]);✅ Expand
param: string Attribute name
returns: boolean
Whether the tag has a certain attribute.
// hasAttr
var attrs = Parser.parse('<poem id = a COMPACT/>').querySelector('ext-attrs');
assert.equal(attrs, ' id = a COMPACT');
assert.ok(attrs.hasAttr('ID'));
assert.ok(attrs.hasAttr('compact'));
assert.ok(!attrs.hasAttr('title'));✅ Expand
returns: LintError[]
Report potential grammar errors.
// lint
var attrs = Parser.parse('</p id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id=a');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-ignored',
severity: 'error',
message: 'attributes of a closing tag',
startLine: 0,
startCol: 3,
startIndex: 3,
endLine: 0,
endCol: 8,
endIndex: 8,
suggestions: [
{
desc: 'remove',
range: [3, 8],
text: '',
},
{
desc: 'open',
range: [1, 2],
text: '',
},
],
},
]);
attrs = Parser.parse('<p / >').querySelector('html-attrs');
assert.equal(attrs, ' / ');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-ignored',
severity: 'warning',
message: 'element containing an invalid attribute name',
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 5,
endIndex: 5,
suggestions: [
{
desc: 'remove',
range: [2, 5],
text: ' ',
},
],
},
]);
attrs = Parser.parse('<gallery mode mode="packed" MODE = packed/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' mode mode="packed" MODE = packed');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 9,
startIndex: 9,
endLine: 0,
endCol: 13,
endIndex: 13,
fix: {
desc: 'remove',
range: [9, 13],
text: '',
},
},
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 14,
startIndex: 14,
endLine: 0,
endCol: 27,
endIndex: 27,
suggestions: [
{
desc: 'remove',
range: [14, 27],
text: '',
},
],
},
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 28,
startIndex: 28,
endLine: 0,
endCol: 41,
endIndex: 41,
fix: {
desc: 'remove',
range: [28, 41],
text: '',
},
},
]);Expand
param: string Attribute name
Remove the specified attribute.
// removeAttr (main)
var attrs = Parser.parse('<p id id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id id=a');
attrs.removeAttr('id');
assert.equal(attrs, ' ');Expand
Remove invalid attributes.
// sanitize (main)
var attrs = Parser.parse('<p / id=a | class=b >').querySelector('html-attrs');
assert.equal(attrs, ' / id=a | class=b ');
attrs.sanitize();
assert.equal(attrs, ' id=a class=b ');Expand
param: string | Record<string, string | boolean> Attribute name or attributes
param: string | boolean Attribute value
Set the specified attribute.
// setAttr (main)
var attrs = Parser.parse('<poem id=a/>').querySelector('ext-attrs');
assert.equal(attrs, ' id=a');
attrs.setAttr('class', false);
assert.equal(attrs, ' id=a');
attrs.setAttr('id', 'b');
assert.equal(attrs, ' id="b"');
attrs.setAttr('TITLE', 'b');
assert.equal(attrs, ' id="b" title="b"');
attrs.setAttr('compact', true);
assert.equal(attrs, ' id="b" title="b" compact');
attrs.setAttr({id: 'c', title: false});
assert.equal(attrs, ' id="c" compact');
attrs = Parser.parse('{{template|<p>}}').querySelector('html-attrs');
assert.equal(attrs, '');
attrs.setAttr('id', 'a');
assert.equal(attrs, ' id{{=}}"a"');Expand
param: string Attribute name
Toggle the specified attribute.
// toggleAttr (main)
var attrs = Parser.parse('<poem/>').querySelector('ext-attrs');
assert.equal(attrs, '');
attrs.toggleAttr('compact');
assert.equal(attrs, ' compact');
attrs.toggleAttr('COMPACT');
assert.equal(attrs, '');Expand
version added: 1.10.0
returns: string
Convert to HTML.
// toHtml (main)
var {firstChild: {firstChild}} = Parser.parse('<p / id=a\nID = b>');
assert.equal(firstChild, ' / id=a\nID = b');
assert.strictEqual(firstChild.toHtml(), ' id="b"');