UNPKG

react-native-web-headroom

Version:
107 lines (94 loc) 3.36 kB
"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(" ")); };