Skip to content

Commit

Permalink
Merge pull request #45 from Megadesty/master
Browse files Browse the repository at this point in the history
Fixes #44
  • Loading branch information
alexcastillo committed Apr 6, 2016
2 parents d7b1823 + e4ccbc7 commit 170a7d2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 28 deletions.
67 changes: 40 additions & 27 deletions angular-css.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,7 @@
function $directiveAddEventListener(event, directive, scope) {
// Binds directive's css
if (scope && directive.hasOwnProperty('css')) {
angular.forEach(directive.css, function(css){
$css.bind(parse(css), scope);
});
$css.bind(directive.css, scope);
}
}

Expand Down Expand Up @@ -576,6 +574,17 @@
**/
var $directives = [];
var originalModule = angular.module;
var arraySelect = function(array, action) {
return array.reduce(
function(previous, current) {
previous.push(action(current));
return previous;
}, []);
};
var arrayExists = function(array, value) {
return array.indexOf(value) > -1;
};

angular.module = function () {
var module = originalModule.apply(this, arguments);
var originalDirective = module.directive;
Expand All @@ -585,36 +594,40 @@
try {
var directive = angular.copy(originalDirectiveFactory)();
directive.directiveName = directiveName;
if (directive.hasOwnProperty('css')) {
$directives.push(directive);
if (directive.hasOwnProperty('css') && !arrayExists(arraySelect($directives, function(x) {return x.dir.directiveName}), directiveName)) {
$directives.push({dir: directive, handled: false});
}
} catch (e) { }
return originalDirective.apply(this, arguments);
};
module.config(['$provide','$injector', function ($provide, $injector) {
angular.forEach($directives, function ($directive) {
var dirProvider = $directive.directiveName + 'Directive';
if ($injector.has(dirProvider)) {
$provide.decorator(dirProvider, ['$delegate', '$rootScope', '$timeout', function ($delegate, $rootScope, $timeout) {
var directive = $delegate[0];
var compile = directive.compile;
if (directive.css) {
$directive.css = directive.css;
}
directive.compile = function() {
var link = compile ? compile.apply(this, arguments): false;
return function(scope) {
var linkArgs = arguments;
$timeout(function () {
if (link) {
link.apply(this, linkArgs);
}
});
$rootScope.$broadcast('$directiveAdd', directive, scope);
angular.forEach($directives, function ($dir) {
if (!$dir.handled) {
var $directive = $dir.dir;
var dirProvider = $directive.directiveName + 'Directive';
if ($injector.has(dirProvider)) {
$dir.handled = true;
$provide.decorator(dirProvider, ['$delegate', '$rootScope', '$timeout', function ($delegate, $rootScope, $timeout) {
var directive = $delegate[0];
var compile = directive.compile;
if (directive.css) {
$directive.css = directive.css;
}
directive.compile = function() {
var link = compile ? compile.apply(this, arguments): false;
return function(scope) {
var linkArgs = arguments;
$timeout(function () {
if (link) {
link.apply(this, linkArgs);
}
});
$rootScope.$broadcast('$directiveAdd', directive, scope);
};
};
};
return $delegate;
}]);
return $delegate;
}]);
}
}
});
}]);
Expand Down
2 changes: 1 addition & 1 deletion angular-css.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 170a7d2

Please sign in to comment.