Version 3.18.1
Show:

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;