jam-cloud/jam-ui/node_modules/react-modal/lib/helpers/classList.js

107 lines
3.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dumpClassLists = dumpClassLists;
var htmlClassList = {};
var docBodyClassList = {};
function dumpClassLists() {
if (process.env.NODE_ENV !== "production") {
var classes = document.getElementsByTagName("html")[0].className;
var buffer = "Show tracked classes:\n\n";
buffer += "<html /> (" + classes + "):\n";
for (var x in htmlClassList) {
buffer += " " + x + " " + htmlClassList[x] + "\n";
}
classes = document.body.className;
// eslint-disable-next-line max-len
buffer += "\n\ndoc.body (" + classes + "):\n";
for (var _x in docBodyClassList) {
buffer += " " + _x + " " + docBodyClassList[_x] + "\n";
}
buffer += "\n";
// eslint-disable-next-line no-console
console.log(buffer);
}
}
/**
* Track the number of reference of a class.
* @param {object} poll The poll to receive the reference.
* @param {string} className The class name.
* @return {string}
*/
var incrementReference = function incrementReference(poll, className) {
if (!poll[className]) {
poll[className] = 0;
}
poll[className] += 1;
return className;
};
/**
* Drop the reference of a class.
* @param {object} poll The poll to receive the reference.
* @param {string} className The class name.
* @return {string}
*/
var decrementReference = function decrementReference(poll, className) {
if (poll[className]) {
poll[className] -= 1;
}
return className;
};
/**
* Track a class and add to the given class list.
* @param {Object} classListRef A class list of an element.
* @param {Object} poll The poll to be used.
* @param {Array} classes The list of classes to be tracked.
*/
var trackClass = function trackClass(classListRef, poll, classes) {
classes.forEach(function (className) {
incrementReference(poll, className);
classListRef.add(className);
});
};
/**
* Untrack a class and remove from the given class list if the reference
* reaches 0.
* @param {Object} classListRef A class list of an element.
* @param {Object} poll The poll to be used.
* @param {Array} classes The list of classes to be untracked.
*/
var untrackClass = function untrackClass(classListRef, poll, classes) {
classes.forEach(function (className) {
decrementReference(poll, className);
poll[className] === 0 && classListRef.remove(className);
});
};
/**
* Public inferface to add classes to the document.body.
* @param {string} bodyClass The class string to be added.
* It may contain more then one class
* with ' ' as separator.
*/
var add = exports.add = function add(element, classString) {
return trackClass(element.classList, element.nodeName.toLowerCase() == "html" ? htmlClassList : docBodyClassList, classString.split(" "));
};
/**
* Public inferface to remove classes from the document.body.
* @param {string} bodyClass The class string to be added.
* It may contain more then one class
* with ' ' as separator.
*/
var remove = exports.remove = function remove(element, classString) {
return untrackClass(element.classList, element.nodeName.toLowerCase() == "html" ? htmlClassList : docBodyClassList, classString.split(" "));
};