ui-toggleclass.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. angular.module('app')
  2. .directive('uiToggleClass', ['$timeout', '$document', function($timeout, $document) {
  3. return {
  4. restrict: 'AC',
  5. link: function(scope, el, attr) {
  6. el.on('click', function(e) {
  7. e.preventDefault();
  8. var classes = attr.uiToggleClass.split(','),
  9. targets = (attr.target && attr.target.split(',')) || Array(el),
  10. key = 0;
  11. angular.forEach(classes, function( _class ) {
  12. var target = targets[(targets.length && key)];
  13. ( _class.indexOf( '*' ) !== -1 ) && magic(_class, target);
  14. $( target ).toggleClass(_class);
  15. key ++;
  16. });
  17. $(el).toggleClass('active');
  18. function magic(_class, target){
  19. var patt = new RegExp( '\\s' +
  20. _class.
  21. replace( /\*/g, '[A-Za-z0-9-_]+' ).
  22. split( ' ' ).
  23. join( '\\s|\\s' ) +
  24. '\\s', 'g' );
  25. var cn = ' ' + $(target)[0].className + ' ';
  26. while ( patt.test( cn ) ) {
  27. cn = cn.replace( patt, ' ' );
  28. }
  29. $(target)[0].className = $.trim( cn );
  30. }
  31. });
  32. }
  33. };
  34. }]);