Merge branch 'MDL-32509' of git://github.com/danpoltawski/moodle
[moodle.git] / lib / yui / 3.5.0 / build / dom-class / dom-class-debug.js
blobe79b84523e7deab5425951da3fec03bc1109b8f7
1 /*
2 YUI 3.5.0 (build 5089)
3 Copyright 2012 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
6 */
7 YUI.add('dom-class', function(Y) {
9 var addClass, hasClass, removeClass;
11 Y.mix(Y.DOM, {
12     /**
13      * Determines whether a DOM element has the given className.
14      * @method hasClass
15      * @for DOM
16      * @param {HTMLElement} element The DOM element. 
17      * @param {String} className the class name to search for
18      * @return {Boolean} Whether or not the element has the given class. 
19      */
20     hasClass: function(node, className) {
21         var re = Y.DOM._getRegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
22         return re.test(node.className);
23     },
25     /**
26      * Adds a class name to a given DOM element.
27      * @method addClass         
28      * @for DOM
29      * @param {HTMLElement} element The DOM element. 
30      * @param {String} className the class name to add to the class attribute
31      */
32     addClass: function(node, className) {
33         if (!Y.DOM.hasClass(node, className)) { // skip if already present 
34             node.className = Y.Lang.trim([node.className, className].join(' '));
35         }
36     },
38     /**
39      * Removes a class name from a given element.
40      * @method removeClass         
41      * @for DOM
42      * @param {HTMLElement} element The DOM element. 
43      * @param {String} className the class name to remove from the class attribute
44      */
45     removeClass: function(node, className) {
46         if (className && hasClass(node, className)) {
47             node.className = Y.Lang.trim(node.className.replace(Y.DOM._getRegExp('(?:^|\\s+)' +
48                             className + '(?:\\s+|$)'), ' '));
50             if ( hasClass(node, className) ) { // in case of multiple adjacent
51                 removeClass(node, className);
52             }
53         }                 
54     },
56     /**
57      * Replace a class with another class for a given element.
58      * If no oldClassName is present, the newClassName is simply added.
59      * @method replaceClass  
60      * @for DOM
61      * @param {HTMLElement} element The DOM element 
62      * @param {String} oldClassName the class name to be replaced
63      * @param {String} newClassName the class name that will be replacing the old class name
64      */
65     replaceClass: function(node, oldC, newC) {
66         //Y.log('replaceClass replacing ' + oldC + ' with ' + newC, 'info', 'Node');
67         removeClass(node, oldC); // remove first in case oldC === newC
68         addClass(node, newC);
69     },
71     /**
72      * If the className exists on the node it is removed, if it doesn't exist it is added.
73      * @method toggleClass  
74      * @for DOM
75      * @param {HTMLElement} element The DOM element
76      * @param {String} className the class name to be toggled
77      * @param {Boolean} addClass optional boolean to indicate whether class
78      * should be added or removed regardless of current state
79      */
80     toggleClass: function(node, className, force) {
81         var add = (force !== undefined) ? force :
82                 !(hasClass(node, className));
84         if (add) {
85             addClass(node, className);
86         } else {
87             removeClass(node, className);
88         }
89     }
90 });
92 hasClass = Y.DOM.hasClass;
93 removeClass = Y.DOM.removeClass;
94 addClass = Y.DOM.addClass;
98 }, '3.5.0' ,{requires:['dom-core']});