JAVASCRIPT   97

classie.js

Guest on 24th July 2021 06:09:38 AM

  1. /*!
  2.  * classie - class helper functions
  3.  * from bonzo https://github.com/ded/bonzo
  4.  *
  5.  * classie.has( elem, 'my-class' ) -> true/false
  6.  * classie.add( elem, 'my-new-class' )
  7.  * classie.remove( elem, 'my-unwanted-class' )
  8.  * classie.toggle( elem, 'my-class' )
  9.  */
  10.  
  11. /*jshint browser: true, strict: true, undef: true */
  12. /*global define: false */
  13.  
  14. ( function( window ) {
  15.  
  16. 'use strict';
  17.  
  18. // class helper functions from bonzo https://github.com/ded/bonzo
  19.  
  20. function classReg( className ) {
  21.   return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
  22. }
  23.  
  24. // classList support for class management
  25. // altho to be fair, the api sucks because it won't accept multiple classes at once
  26. var hasClass, addClass, removeClass;
  27.  
  28. if ( 'classList' in document.documentElement ) {
  29.   hasClass = function( elem, c ) {
  30.     return elem.classList.contains( c );
  31.   };
  32.   addClass = function( elem, c ) {
  33.     elem.classList.add( c );
  34.   };
  35.   removeClass = function( elem, c ) {
  36.     elem.classList.remove( c );
  37.   };
  38. }
  39. else {
  40.   hasClass = function( elem, c ) {
  41.     return classReg( c ).test( elem.className );
  42.   };
  43.   addClass = function( elem, c ) {
  44.     if ( !hasClass( elem, c ) ) {
  45.       elem.className = elem.className + ' ' + c;
  46.     }
  47.   };
  48.   removeClass = function( elem, c ) {
  49.     elem.className = elem.className.replace( classReg( c ), ' ' );
  50.   };
  51. }
  52.  
  53. function toggleClass( elem, c ) {
  54.   var fn = hasClass( elem, c ) ? removeClass : addClass;
  55.   fn( elem, c );
  56. }
  57.  
  58. var classie = {
  59.   // full names
  60.   hasClass: hasClass,
  61.   addClass: addClass,
  62.   removeClass: removeClass,
  63.   toggleClass: toggleClass,
  64.   // short names
  65.   has: hasClass,
  66.   add: addClass,
  67.   remove: removeClass,
  68.   toggle: toggleClass
  69. };
  70.  
  71. // transport
  72. if ( typeof define === 'function' && define.amd ) {
  73.   // AMD
  74.   define( classie );
  75. } else {
  76.   // browser global
  77.   window.classie = classie;
  78. }
  79.  
  80. })( window );

Raw Paste


Login or Register to edit or fork this paste. It's free.