You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.3 KiB
144 lines
4.3 KiB
4 years ago
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
|
||
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||
|
|
||
|
var domToArray = _interopDefault(require('bianco.dom-to-array'));
|
||
|
|
||
|
/**
|
||
|
* Normalize the return values, in case of a single value we avoid to return an array
|
||
|
* @param { Array } values - list of values we want to return
|
||
|
* @returns { Array|string|boolean } either the whole list of values or the single one found
|
||
|
* @private
|
||
|
*/
|
||
|
const normalize = values => values.length === 1 ? values[0] : values;
|
||
|
|
||
|
/**
|
||
|
* Parse all the nodes received to get/remove/check their attributes
|
||
|
* @param { HTMLElement|NodeList|Array } els - DOM node/s to parse
|
||
|
* @param { string|Array } name - name or list of attributes
|
||
|
* @param { string } method - method that will be used to parse the attributes
|
||
|
* @returns { Array|string } result of the parsing in a list or a single value
|
||
|
* @private
|
||
|
*/
|
||
|
function parseNodes(els, name, method) {
|
||
|
const names = typeof name === 'string' ? [name] : name;
|
||
|
return normalize(domToArray(els).map(el => {
|
||
|
return normalize(names.map(n => el[method](n)))
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set any attribute on a single or a list of DOM nodes
|
||
|
* @param { HTMLElement|NodeList|Array } els - DOM node/s to parse
|
||
|
* @param { string|Object } name - either the name of the attribute to set
|
||
|
* or a list of properties as object key - value
|
||
|
* @param { string } value - the new value of the attribute (optional)
|
||
|
* @returns { HTMLElement|NodeList|Array } the original array of elements passed to this function
|
||
|
*
|
||
|
* @example
|
||
|
*
|
||
|
* import { set } from 'bianco.attr'
|
||
|
*
|
||
|
* const img = document.createElement('img')
|
||
|
*
|
||
|
* set(img, 'width', 100)
|
||
|
*
|
||
|
* // or also
|
||
|
* set(img, {
|
||
|
* width: 300,
|
||
|
* height: 300
|
||
|
* })
|
||
|
*
|
||
|
*/
|
||
|
function set(els, name, value) {
|
||
|
const attrs = typeof name === 'object' ? name : { [name]: value };
|
||
|
const props = Object.keys(attrs);
|
||
|
|
||
|
domToArray(els).forEach(el => {
|
||
|
props.forEach(prop => el.setAttribute(prop, attrs[prop]));
|
||
|
});
|
||
|
return els
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get any attribute from a single or a list of DOM nodes
|
||
|
* @param { HTMLElement|NodeList|Array } els - DOM node/s to parse
|
||
|
* @param { string|Array } name - name or list of attributes to get
|
||
|
* @returns { Array|string } list of the attributes found
|
||
|
*
|
||
|
* @example
|
||
|
*
|
||
|
* import { get } from 'bianco.attr'
|
||
|
*
|
||
|
* const img = document.createElement('img')
|
||
|
*
|
||
|
* get(img, 'width') // => '200'
|
||
|
*
|
||
|
* // or also
|
||
|
* get(img, ['width', 'height']) // => ['200', '300']
|
||
|
*
|
||
|
* // or also
|
||
|
* get([img1, img2], ['width', 'height']) // => [['200', '300'], ['500', '200']]
|
||
|
*/
|
||
|
function get(els, name) {
|
||
|
return parseNodes(els, name, 'getAttribute')
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove any attribute from a single or a list of DOM nodes
|
||
|
* @param { HTMLElement|NodeList|Array } els - DOM node/s to parse
|
||
|
* @param { string|Array } name - name or list of attributes to remove
|
||
|
* @returns { HTMLElement|NodeList|Array } the original array of elements passed to this function
|
||
|
*
|
||
|
* @example
|
||
|
*
|
||
|
* import { remove } from 'bianco.attr'
|
||
|
*
|
||
|
* remove(img, 'width') // remove the width attribute
|
||
|
*
|
||
|
* // or also
|
||
|
* remove(img, ['width', 'height']) // remove the width and the height attribute
|
||
|
*
|
||
|
* // or also
|
||
|
* remove([img1, img2], ['width', 'height']) // remove the width and the height attribute from both images
|
||
|
*/
|
||
|
function remove(els, name) {
|
||
|
return parseNodes(els, name, 'removeAttribute')
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set any attribute on a single or a list of DOM nodes
|
||
|
* @param { HTMLElement|NodeList|Array } els - DOM node/s to parse
|
||
|
* @param { string|Array } name - name or list of attributes to detect
|
||
|
* @returns { boolean|Array } true or false or an array of boolean values
|
||
|
* @example
|
||
|
*
|
||
|
* import { has } from 'bianco.attr'
|
||
|
*
|
||
|
* has(img, 'width') // false
|
||
|
*
|
||
|
* // or also
|
||
|
* has(img, ['width', 'height']) // => [false, false]
|
||
|
*
|
||
|
* // or also
|
||
|
* has([img1, img2], ['width', 'height']) // => [[false, false], [false, false]]
|
||
|
*/
|
||
|
function has(els, name) {
|
||
|
return parseNodes(els, name, 'hasAttribute')
|
||
|
}
|
||
|
|
||
|
var index_next = {
|
||
|
get,
|
||
|
set,
|
||
|
remove,
|
||
|
has
|
||
|
};
|
||
|
|
||
|
exports.set = set;
|
||
|
exports.get = get;
|
||
|
exports.remove = remove;
|
||
|
exports.has = has;
|
||
|
exports.default = index_next;
|