classie.js 1.9 KB

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