Skip to content

Instantly share code, notes, and snippets.

@respectTheCode
Created October 17, 2011 11:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save respectTheCode/1292465 to your computer and use it in GitHub Desktop.
Save respectTheCode/1292465 to your computer and use it in GitHub Desktop.
This angularjs directive adds/removes a class if an expression is true. It requires jQuery and uses the expression syntax "(`expression`) ? `className` [: `className`]".
angular.directive("ng:class", function (expression, compiledElement) {
if (typeof(expression) == "string") {
if (expression.indexOf(",")) {
expression = expression.split(",");
} else {
expression = [expression];
}
}
return function (element) {
for (var i = 0; i < expression.length; i ++) {
expression[i] = expression[i].replace(" ", "");
var className = expression[i].substring(expression[i].indexOf(")?") + 2);
var elseClass = "";
if (className.indexOf(":") > 0) {
className = className.split(":");
elseClass = className.pop();
className = className.pop();
}
var watch = expression[i].substring(expression[i].indexOf("(") + 1, expression[i].indexOf(")"));
(function (self, className, watch) {
self.$watch(watch, function (value) {
if (value) $(element).addClass(className).removeClass(elseClass);
else $(element).removeClass(className).addClass(elseClass);
});
})(this, className, watch);
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment