BemjsonNode
BEM tree node representation.
Contents
Install
$ npm install --save @bem/sdk.bemjson-node
Usage
const BemjsonNode = require('@bem/sdk.bemjson-node');
const bemjsonNode = new BemjsonNode({ block: 'button', elem: 'text' });
bemjsonNode.block; // button
bemjsonNode.elem; // text
bemjsonNode.mods; // {}
bemjsonNode.elemMods; // {}
API
constructor({ block, mods, elem, elemMods, mix })
block
string
mods
object
elem
string
elemMods
object
elem
field. Optional.mix
string
, object
or array
const BemjsonNode = require('@bem/sdk.bemjson-node');
// The block with modifier
new BemjsonNode({
block: 'button',
mods: { view: 'action' }
});
// The element inside block with modifier
new BemjsonNode({
block: 'button',
mods: { view: 'action' },
elem: 'inner'
});
// The element node with modifier
new BemjsonNode({
block: 'button',
elem: 'icon',
elemMods: { type: 'load' }
});
// The block with a mixed element
new BemjsonNode({
block: 'button',
mix: { block: 'button', elem: 'text' }
});
// Invalid value in mods field
new BemjsonNode({
block: 'button',
mods: 'icon'
});
// ➜ AssertionError: @bem/sdk.bemjson-node: `mods` field should be a simple object or null.
block
The name of block to which entity in this node belongs.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const name = new BemjsonNode({ block: 'button' });
name.block; // button
elem
The name of element to which entity in this node belongs.
Important: Contains null
value if node is a block entity.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node1 = new BemjsonNode({ block: 'button' });
const node2 = new BemjsonNode({ block: 'button', elem: 'text' });
node1.elem; // null
node2.elem; // "text"
mods
The object with modifiers of this node.
Important: Contains modifiers of a scope (block) node if this node IS an element.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const blockNode = new BemjsonNode({ block: 'button' });
const modsNode = new BemjsonNode({ block: 'button', mods: { disabled: true } });
const elemNode = new BemjsonNode({ block: 'button', mods: { disabled: true }, elem: 'text' });
blockNode.mods; // { }
elemNode.mods; // { disabled: true }
modsNode.mods; // { disabled: true }
elemMods
The object with modifiers of this node.
Important: Contains null
if node IS NOT an element.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const blockNode = new BemjsonNode({ block: 'button' });
const modsNode = new BemjsonNode({ block: 'button', mods: { disabled: true } });
const elemNode = new BemjsonNode({ block: 'button', elem: 'text' });
const emodsNode = new BemjsonNode({ block: 'button', elem: 'text', elemMods: { highlighted: true } });
blockNode.elemMods; // null
modsNode.elemMods; // null
elemNode.elemMods; // { }
emodsNode.elemMods; // { disabled: true }
valueOf()
Returns normalized object representing the bemjson node.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({ block: 'button', mods: { focused: true }, elem: 'text' });
node.valueOf();
// ➜ { block: 'button', mods: { focused: true }, elem: 'text', elemMods: { } }
toJSON()
Returns raw data for JSON.stringify()
purposes.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({ block: 'input', mods: { available: true } });
JSON.stringify(node); // {"block":"input","mods":{"available":true}}
toString()
Returns string representing the bemjson node.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({
block: 'button', mods: { focused: true },
mix: { block: 'mixed', mods: { bg: 'red' } }
});
node.toString(); // "button _focused mixed _bg_red"
static isBemjsonNode(bemjsonNode)
Determines whether specified object is an instance of BemjsonNode.
bemjsonNode
*
const BemjsonNode = require('@bem/sdk.bemjson-node');
const bemjsonNode = new BemjsonNode({ block: 'input' });
BemjsonNode.isBemjsonNode(bemjsonNode); // true
BemjsonNode.isBemjsonNode({ block: 'button' }); // false
Serialization
The BemjsonNode
has toJSON
method to support JSON.stringify()
behaviour.
Use JSON.stringify
to serialize an instance of BemjsonNode
.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({ block: 'input', mod: 'available' });
JSON.stringify(node); // {"block":"input","mods":{"available":true}}
Use JSON.parse
to deserialize JSON string and create an instance of BemjsonNode
.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const str = '{"block":"input","mods":{"available"::true}}';
new BemjsonNode(JSON.parse(str)); // BemjsonNode({ block: 'input', mods: { available: true } });
Debuggability
In Node.js, console.log()
calls util.inspect()
on each argument without a formatting placeholder.
BemjsonNode
has inspect()
method to get custom string representation of the object.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({ block: 'input', mods: { available: true } });
console.log(node);
// ➜ BemjsonNode { block: 'input', mods: { available: true } }
You can also convert BemjsonNode
object to string
.
const BemjsonNode = require('@bem/sdk.bemjson-node');
const node = new BemjsonNode({ block: 'input', mods: { available: true } });
console.log(`node: ${node}`);
// ➜ node: input _available
License
Code and documentation © 2017 YANDEX LLC. Code released under the Mozilla Public License 2.0.