#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: dom/js/dom-class.js

    var addClass, hasClass, removeClass;

    Y.mix(Y.DOM, {
        /**
         * Determines whether a DOM element has the given className.
         * @method hasClass
         * @for DOM
         * @param {HTMLElement} element The DOM element.
         * @param {String} className the class name to search for
         * @return {Boolean} Whether or not the element has the given class.
         */
        hasClass: function(node, className) {
            var re = Y.DOM._getRegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
            return re.test(node.className);
        },

        /**
         * Adds a class name to a given DOM element.
         * @method addClass
         * @for DOM
         * @param {HTMLElement} element The DOM element.
         * @param {String} className the class name to add to the class attribute
         */
        addClass: function(node, className) {
            if (!Y.DOM.hasClass(node, className)) { // skip if already present
                node.className = Y.Lang.trim([node.className, className].join(' '));
            }
        },

        /**
         * Removes a class name from a given element.
         * @method removeClass
         * @for DOM
         * @param {HTMLElement} element The DOM element.
         * @param {String} className the class name to remove from the class attribute
         */
        removeClass: function(node, className) {
            if (className && hasClass(node, className)) {
                node.className = Y.Lang.trim(node.className.replace(Y.DOM._getRegExp('(?:^|\\s+)' +
                                className + '(?:\\s+|$)'), ' '));

                if ( hasClass(node, className) ) { // in case of multiple adjacent
                    removeClass(node, className);
                }
            }
        },

        /**
         * Replace a class with another class for a given element.
         * If no oldClassName is present, the newClassName is simply added.
         * @method replaceClass
         * @for DOM
         * @param {HTMLElement} element The DOM element
         * @param {String} oldClassName the class name to be replaced
         * @param {String} newClassName the class name that will be replacing the old class name
         */
        replaceClass: function(node, oldC, newC) {
            //Y.log('replaceClass replacing ' + oldC + ' with ' + newC, 'info', 'Node');
            removeClass(node, oldC); // remove first in case oldC === newC
            addClass(node, newC);
        },

        /**
         * If the className exists on the node it is removed, if it doesn't exist it is added.
         * @method toggleClass
         * @for DOM
         * @param {HTMLElement} element The DOM element
         * @param {String} className the class name to be toggled
         * @param {Boolean} addClass optional boolean to indicate whether class
         * should be added or removed regardless of current state
         */
        toggleClass: function(node, className, force) {
            var add = (force !== undefined) ? force :
                    !(hasClass(node, className));

            if (add) {
                addClass(node, className);
            } else {
                removeClass(node, className);
            }
        }
    });

    hasClass = Y.DOM.hasClass;
    removeClass = Y.DOM.removeClass;
    addClass = Y.DOM.addClass;