diff --git a/.travis.yml b/.travis.yml
index 8385de2..70e634e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,6 +3,4 @@ node_js:
- 0.10
before_script:
- export DISPLAY=:99.0
- - sh -e /etc/init.d/xvfb start
-notifications:
- slack: picardy:1mUjogRmeRd1mUdr5a4quAfs
\ No newline at end of file
+ - sh -e /etc/init.d/xvfb start
\ No newline at end of file
diff --git a/src/angular-fontawesome.js b/src/angular-fontawesome.js
index 4acc224..b76cb8e 100644
--- a/src/angular-fontawesome.js
+++ b/src/angular-fontawesome.js
@@ -1,91 +1,18 @@
'use strict';
angular.module('picardy.fontawesome', [])
- .directive('fa', function () {
+ .directive('fa', ['util',function (util) {
return {
restrict: 'E',
template: '',
replace: true,
link: function (scope, element, attrs) {
-
- /*** STRING ATTRS ***/
- // keep a state of the current attrs so that when they change,
- // we can remove the old attrs before adding the new ones.
- var currentClasses = {};
-
- // generic function to bind string attrs
- function _observeStringAttr (attr, baseClass) {
- var className;
-
- attrs.$observe(attr, function () {
- baseClass = baseClass || 'fa-' + attr;
- element.removeClass(currentClasses[attr]);
- if (attrs[attr]) {
- className = [baseClass, attrs[attr]].join('-');
- element.addClass(className);
- currentClasses[attr] = className;
- }
- });
- }
-
- _observeStringAttr('name', 'fa');
- _observeStringAttr('rotate');
- _observeStringAttr('flip');
- _observeStringAttr('stack');
-
- /**
- * size can be passed "large" or an integer
- */
- attrs.$observe('size', function () {
- var className;
- element.removeClass(currentClasses.size);
-
- if (attrs.size === 'large') {
- className = 'fa-lg';
- } else if (!isNaN(parseInt(attrs.size, 10))) {
- className = 'fa-' + attrs.size + 'x';
- }
-
- element.addClass(className);
- currentClasses.size = className;
- });
-
- /**
- * stack can be passed "large" or an integer
- */
- attrs.$observe('stack', function () {
- var className;
- element.removeClass(currentClasses.stack);
-
- if (attrs.stack === 'large') {
- className = 'fa-stack-lg';
- } else if (!isNaN(parseInt(attrs.stack, 10))) {
- className = 'fa-stack-' + attrs.stack + 'x';
- }
-
- element.addClass(className);
- currentClasses.stack = className;
+ var _observeAttrWrapper = util._observeAttrWrapper(attrs, element);
+ util._keys(attrs).forEach(function (e) {
+ _observeAttrWrapper._observeAttr(e);
});
-
- /*** BOOLEAN ATTRS ***/
- // generic function to bind boolean attrs
- function _observeBooleanAttr (attr, className) {
- var value;
-
- attrs.$observe(attr, function () {
- className = className || 'fa-' + attr;
- value = attr in attrs && attrs[attr] !== 'false' && attrs[attr] !== false;
- element.toggleClass(className, value);
- });
- }
-
- _observeBooleanAttr('border');
- _observeBooleanAttr('fw');
- _observeBooleanAttr('inverse');
- _observeBooleanAttr('spin');
-
/*** CONDITIONAL ATTRS ***/
- // automatically populate fa-li if DOM structure indicates
+ // automatically populate fa-li if DOM structure indicates
element.toggleClass('fa-li',
element.parent() &&
element.parent().prop('tagName') === 'LI' &&
@@ -95,7 +22,87 @@ angular.module('picardy.fontawesome', [])
attrs.list !== 'false' &&
attrs.list !== false
);
+ }
+ };
+ }])
+ .directive('faStack',['util', function (util) {
+ return {
+ restrict: 'E',
+ transclude: true,
+ template: '',
+ replace: true,
+ link: function (scope, element, attrs) {
+ var _observeAttrWrapper = util._observeAttrWrapper(attrs, element);
+ _observeAttrWrapper._observeAttr('size');
+ }
+ };
+ }])
+ .factory('util',function () {
+ function _observeAttrWrapper (attrs, element) {
+ /*** STRING ATTRS ***/
+ // keep a state of the current attrs so that when they change,
+ // we can remove the old attrs before adding the new ones.
+ var currentClasses = {};
+
+ // generic function to bind string attrs
+ // attributes like name、rotate、flip
+ function _observeStringAttr (attr, baseClass) {
+ // check attrs[attr] string or empty
+ var className;
+ /*
+ if (!angular.isString(attrs[attr] || !!attrs[attr])) {
+ return;
+ }
+ */
+ attrs.$observe(attr, function () {
+ baseClass = baseClass || 'fa-' + attr; // make baseClass
+ element.removeClass(currentClasses[attr]); // remove old className from dom element
+ className = [baseClass, attrs[attr]].join('-'); // connnect baseClass and attrs[attr] with '-'
+ element.addClass(className); // add className to dom element
+ currentClasses[attr] = className; // override className within currentClass Object
+ });
+ }
+ // generic function to bind string attrs
+ // attributes like size、stack
+ function _observeNumberAttr (attr, baseClass) {
+ // check attrs[attr] String or empty (ignore 0)
+ //var className;
+ /*
+ if (!angular.isString(attrs[attr] || !!attrs[attr])) {
+ return;
+ }
+ */
+ attrs.$observe(attr, function () {
+ var className;
+ baseClass = baseClass || 'fa-' + attr; // make baseClass
+ element.removeClass(currentClasses[attr]); // remove old className from dom element
+ if (attrs[attr] === 'large') {
+ className = [baseClass,'lg'].join('-'); // connnect baseClass and attrs[attr] with '-'
+ } else if (!isNaN(parseInt(attrs[attr], 10))) {
+ className = [baseClass,attrs[attr] + 'x'].join('-');
+ }
+
+ element.addClass(className); // add className to dom element
+ currentClasses.size = className; // override className within currentClass Object
+ });
+
+ }
+
+
+ // generic function to bind boolean attrs
+ function _observeBooleanAttr (attr, className) {
+ var value;
+
+ attrs.$observe(attr, function () {
+ className = className || 'fa-' + attr;
+ value = attr in attrs && attrs[attr] !== 'false' && attrs[attr] !== false;
+ element.toggleClass(className, value);
+ });
+ }
+
+
+ function _observeAltAttr () {
attrs.$observe('alt', function () {
var altText = attrs.alt,
altElem = element.next(),
@@ -117,55 +124,56 @@ angular.module('picardy.fontawesome', [])
}
});
}
- };
- })
- .directive('faStack', function () {
- return {
- restrict: 'E',
- transclude: true,
- template: '',
- replace: true,
- link: function (scope, element, attrs) {
-
- /*** STRING ATTRS ***/
- // keep a state of the current attrs so that when they change,
- // we can remove the old attrs before adding the new ones.
- var currentClasses = {};
-
- // generic function to bind string attrs
- function _observeStringAttr (attr, baseClass) {
- var className;
-
- attrs.$observe(attr, function () {
- baseClass = baseClass || 'fa-' + attr;
- element.removeClass(currentClasses[attr]);
- if (attrs[attr]) {
- className = [baseClass, attrs[attr]].join('-');
- element.addClass(className);
- currentClasses[attr] = className;
- }
- });
- }
- _observeStringAttr('size');
-
- /**
- * size can be passed "large" or an integer
- */
- attrs.$observe('size', function () {
- var className;
-
- element.removeClass(currentClasses.size);
-
- if (attrs.size === 'large') {
- className = 'fa-lg';
- } else if (!isNaN(parseInt(attrs.size, 10))) {
- className = 'fa-' + attrs.size + 'x';
+ function _observeAttr (attr) {
+ switch (attr) {
+ case 'name':
+ _observeStringAttr(attr, 'fa');
+ break;
+ case 'rotate':
+ case 'flip':
+ _observeStringAttr(attr);
+ break;
+ case 'size':
+ _observeNumberAttr(attr,'fa');
+ break;
+ case 'stack':
+ _observeNumberAttr(attr);
+ break;
+ case 'border':
+ case 'fw':
+ case 'inverse':
+ case 'spin':
+ _observeBooleanAttr(attr);
+ break;
+ case 'alt':
+ _observeAltAttr();
+ break;
}
-
- element.addClass(className);
- currentClasses.size = className;
- });
}
+ return {
+ _observeStringAttr : _observeStringAttr,
+ _observeNumberAttr : _observeNumberAttr,
+ _observeBooleanAttr : _observeBooleanAttr,
+ _observeAltAttr : _observeAltAttr,
+ _observeAttr : _observeAttr
+ };
+ }
+
+ // get object keys and filter keys according keyWhiteList
+ // var keyWhiteList = ['name','rotate','flip','size','stack','border','fw','inverse','spin','alt'];
+ function _keys (obj, keyWhiteList) {
+ var keys = [],key;
+ keyWhiteList = keyWhiteList || ['name','rotate','flip','size','stack','border','fw','inverse','spin','alt'];
+ for (key in obj) {
+ if (keyWhiteList.indexOf(key) !== -1) {
+ keys.push(key);
+ }
+ }
+ return keys;
+ }
+ return {
+ _observeAttrWrapper : _observeAttrWrapper,
+ _keys : _keys
};
});