1
+ 'use strict' ;
2
+
1
3
angular . module ( 'picardy.fontawesome' , [ ] )
2
- . directive ( 'fa' , function ( ) {
3
- return {
4
- restrict : 'E' ,
5
- template : '<i class="fa"></i>' ,
6
- replace : true ,
7
- link : function ( scope , element , attrs ) {
8
-
9
- /*** STRING ATTRS ***/
10
- // keep a state of the current attrs so that when they change,
11
- // we can remove the old attrs before adding the new ones.
12
- var currentClasses = { } ;
13
-
14
- // generic function to bind string attrs
15
- function _observeStringAttr ( attr , baseClass ) {
16
- attrs . $observe ( attr , function ( ) {
17
- baseClass = baseClass || 'fa-' + attr ;
18
- element . removeClass ( currentClasses [ attr ] ) ;
19
- if ( attrs [ attr ] ) {
20
- var className = [ baseClass , attrs [ attr ] ] . join ( '-' ) ;
21
- element . addClass ( className ) ;
22
- currentClasses [ attr ] = className ;
23
- }
24
- } ) ;
25
- }
26
-
27
- _observeStringAttr ( 'name' , 'fa' ) ;
28
- _observeStringAttr ( 'rotate' ) ;
29
- _observeStringAttr ( 'flip' ) ;
30
- _observeStringAttr ( 'stack' ) ;
31
-
32
- /**
33
- * size can be passed "large" or an integer
34
- */
35
- attrs . $observe ( 'size' , function ( ) {
36
- var className ;
37
- element . removeClass ( currentClasses . size ) ;
38
-
39
- if ( attrs . size === 'large' ) {
40
- className = 'fa-lg' ;
41
- } else if ( ! isNaN ( parseInt ( attrs . size , 10 ) ) ) {
42
- className = 'fa-' + attrs . size + 'x' ;
43
- }
44
-
45
- element . addClass ( className ) ;
46
- currentClasses . size = className ;
47
- } ) ;
48
-
49
- /**
50
- * stack can be passed "large" or an integer
51
- */
52
- attrs . $observe ( 'stack' , function ( ) {
53
- var className ;
54
- element . removeClass ( currentClasses . stack ) ;
55
-
56
- if ( attrs . stack === 'large' ) {
57
- className = 'fa-stack-lg' ;
58
- } else if ( ! isNaN ( parseInt ( attrs . stack , 10 ) ) ) {
59
- className = 'fa-stack-' + attrs . stack + 'x' ;
60
- }
61
-
62
- element . addClass ( className ) ;
63
- currentClasses . stack = className ;
64
- } ) ;
65
-
66
- /*** BOOLEAN ATTRS ***/
67
- // generic function to bind boolean attrs
68
- function _observeBooleanAttr ( attr , className ) {
69
- attrs . $observe ( attr , function ( ) {
70
- className = className || 'fa-' + attr ;
71
- var value = attr in attrs && attrs [ attr ] !== 'false' && attrs [ attr ] !== false ;
72
- element . toggleClass ( className , value ) ;
73
- } ) ;
74
- }
75
-
76
- _observeBooleanAttr ( 'border' ) ;
77
- _observeBooleanAttr ( 'fw' ) ;
78
- _observeBooleanAttr ( 'inverse' ) ;
79
- _observeBooleanAttr ( 'spin' ) ;
80
-
81
- /*** CONDITIONAL ATTRS ***/
82
- // automatically populate fa-li if DOM structure indicates
83
- element . toggleClass ( 'fa-li' , (
84
- element . parent ( ) &&
85
- element . parent ( ) . parent ( ) &&
86
- element . parent ( ) . parent ( ) . hasClass ( 'fa-ul' ) &&
87
- element . parent ( ) . children ( ) [ 0 ] === element [ 0 ] ) &&
88
- attrs . list !== 'false' &&
89
- attrs . list !== false
90
- ) ;
91
-
92
- attrs . $observe ( 'alt' , function ( ) {
93
- if ( attrs . alt ) {
94
- var srText ;
95
- srText = attrs . alt ;
96
- element . removeAttr ( 'alt' )
97
- element . attr ( 'aria-hidden' , 'true' ) ;
98
- element . after ( '<span class="sr-only">' + srText + '</span>' ) ;
99
- }
100
- } ) ;
101
-
102
- }
103
- } ;
104
- } )
105
- . directive ( 'faStack' , function ( ) {
106
- return {
107
- restrict : 'E' ,
108
- transclude : true ,
109
- template : '<span ng-transclude class="fa-stack fa-lg"></span>' ,
110
- replace : true ,
111
- link : function ( scope , element , attrs ) {
112
-
113
- /*** STRING ATTRS ***/
114
- // keep a state of the current attrs so that when they change,
115
- // we can remove the old attrs before adding the new ones.
116
- var currentClasses = { } ;
117
-
118
- // generic function to bind string attrs
119
- function _observeStringAttr ( attr , baseClass ) {
120
- attrs . $observe ( attr , function ( ) {
121
- baseClass = baseClass || 'fa-' + attr ;
122
- element . removeClass ( currentClasses [ attr ] ) ;
123
- if ( attrs [ attr ] ) {
124
- var className = [ baseClass , attrs [ attr ] ] . join ( '-' ) ;
125
- element . addClass ( className ) ;
126
- currentClasses [ attr ] = className ;
127
- }
128
- } ) ;
129
- }
130
-
131
- _observeStringAttr ( 'size' ) ;
132
-
133
- /**
134
- * size can be passed "large" or an integer
135
- */
136
- attrs . $observe ( 'size' , function ( ) {
137
- var className ;
138
- element . removeClass ( currentClasses . size ) ;
139
-
140
- if ( attrs . size === 'large' ) {
141
- className = 'fa-lg' ;
142
- } else if ( ! isNaN ( parseInt ( attrs . size , 10 ) ) ) {
143
- className = 'fa-' + attrs . size + 'x' ;
144
- }
145
-
146
- element . addClass ( className ) ;
147
- currentClasses . size = className ;
148
- } ) ;
149
- }
150
- } ;
151
- } ) ;
4
+ . directive ( 'fa' , function ( ) {
5
+ return {
6
+ restrict : 'E' ,
7
+ template : '<span class="fa" aria-hidden="true"></span>' ,
8
+ replace : true ,
9
+ link : function ( scope , element , attrs ) {
10
+
11
+ /*** STRING ATTRS ***/
12
+ // keep a state of the current attrs so that when they change,
13
+ // we can remove the old attrs before adding the new ones.
14
+ var currentClasses = { } ;
15
+
16
+ // generic function to bind string attrs
17
+ function _observeStringAttr ( attr , baseClass ) {
18
+ var className ;
19
+
20
+ attrs . $observe ( attr , function ( ) {
21
+ baseClass = baseClass || 'fa-' + attr ;
22
+ element . removeClass ( currentClasses [ attr ] ) ;
23
+ if ( attrs [ attr ] ) {
24
+ className = [ baseClass , attrs [ attr ] ] . join ( '-' ) ;
25
+ element . addClass ( className ) ;
26
+ currentClasses [ attr ] = className ;
27
+ }
28
+ } ) ;
29
+ }
30
+
31
+ _observeStringAttr ( 'name' , 'fa' ) ;
32
+ _observeStringAttr ( 'rotate' ) ;
33
+ _observeStringAttr ( 'flip' ) ;
34
+ _observeStringAttr ( 'stack' ) ;
35
+
36
+ /**
37
+ * size can be passed "large" or an integer
38
+ */
39
+ attrs . $observe ( 'size' , function ( ) {
40
+ var className ;
41
+ element . removeClass ( currentClasses . size ) ;
42
+
43
+ if ( attrs . size === 'large' ) {
44
+ className = 'fa-lg' ;
45
+ } else if ( ! isNaN ( parseInt ( attrs . size , 10 ) ) ) {
46
+ className = 'fa-' + attrs . size + 'x' ;
47
+ }
48
+
49
+ element . addClass ( className ) ;
50
+ currentClasses . size = className ;
51
+ } ) ;
52
+
53
+ /**
54
+ * stack can be passed "large" or an integer
55
+ */
56
+ attrs . $observe ( 'stack' , function ( ) {
57
+ var className ;
58
+ element . removeClass ( currentClasses . stack ) ;
59
+
60
+ if ( attrs . stack === 'large' ) {
61
+ className = 'fa-stack-lg' ;
62
+ } else if ( ! isNaN ( parseInt ( attrs . stack , 10 ) ) ) {
63
+ className = 'fa-stack-' + attrs . stack + 'x' ;
64
+ }
65
+
66
+ element . addClass ( className ) ;
67
+ currentClasses . stack = className ;
68
+ } ) ;
69
+
70
+ /*** BOOLEAN ATTRS ***/
71
+ // generic function to bind boolean attrs
72
+ function _observeBooleanAttr ( attr , className ) {
73
+ var value ;
74
+
75
+ attrs . $observe ( attr , function ( ) {
76
+ className = className || 'fa-' + attr ;
77
+ value = attr in attrs && attrs [ attr ] !== 'false' && attrs [ attr ] !== false ;
78
+ element . toggleClass ( className , value ) ;
79
+ } ) ;
80
+ }
81
+
82
+ _observeBooleanAttr ( 'border' ) ;
83
+ _observeBooleanAttr ( 'fw' ) ;
84
+ _observeBooleanAttr ( 'inverse' ) ;
85
+ _observeBooleanAttr ( 'spin' ) ;
86
+
87
+ /*** CONDITIONAL ATTRS ***/
88
+ // automatically populate fa-li if DOM structure indicates
89
+ element . toggleClass ( 'fa-li' ,
90
+ element . parent ( ) &&
91
+ element . parent ( ) . prop ( 'tagName' ) === 'LI' &&
92
+ element . parent ( ) . parent ( ) &&
93
+ element . parent ( ) . parent ( ) . hasClass ( 'fa-ul' ) &&
94
+ element . parent ( ) . children ( ) [ 0 ] === element [ 0 ] &&
95
+ attrs . list !== 'false' &&
96
+ attrs . list !== false
97
+ ) ;
98
+
99
+ attrs . $observe ( 'alt' , function ( ) {
100
+ var altText = attrs . alt ,
101
+ altElem = element . next ( ) ,
102
+ altElemClass = 'fa-alt-text' ;
103
+
104
+ if ( altText ) {
105
+ element . removeAttr ( 'alt' ) ;
106
+
107
+ // create the alt elem if one does not exist
108
+ if ( ! altElem || ! altElem . hasClass ( altElemClass ) ) {
109
+ element . after ( '<span class="sr-only fa-alt-text"></span>' ) ;
110
+ altElem = element . next ( ) ;
111
+ }
112
+
113
+ altElem . text ( altText ) ;
114
+ } else if ( altElem && altElem . hasClass ( altElemClass ) ) {
115
+ // kill the alt elem if we used to have alt text, but now we don't
116
+ altElem . remove ( ) ;
117
+ }
118
+ } ) ;
119
+ }
120
+ } ;
121
+ } )
122
+ . directive ( 'faStack' , function ( ) {
123
+ return {
124
+ restrict : 'E' ,
125
+ transclude : true ,
126
+ template : '<span ng-transclude class="fa-stack fa-lg"></span>' ,
127
+ replace : true ,
128
+ link : function ( scope , element , attrs ) {
129
+
130
+ /*** STRING ATTRS ***/
131
+ // keep a state of the current attrs so that when they change,
132
+ // we can remove the old attrs before adding the new ones.
133
+ var currentClasses = { } ;
134
+
135
+ // generic function to bind string attrs
136
+ function _observeStringAttr ( attr , baseClass ) {
137
+ var className ;
138
+
139
+ attrs . $observe ( attr , function ( ) {
140
+ baseClass = baseClass || 'fa-' + attr ;
141
+ element . removeClass ( currentClasses [ attr ] ) ;
142
+ if ( attrs [ attr ] ) {
143
+ className = [ baseClass , attrs [ attr ] ] . join ( '-' ) ;
144
+ element . addClass ( className ) ;
145
+ currentClasses [ attr ] = className ;
146
+ }
147
+ } ) ;
148
+ }
149
+
150
+ _observeStringAttr ( 'size' ) ;
151
+
152
+ /**
153
+ * size can be passed "large" or an integer
154
+ */
155
+ attrs . $observe ( 'size' , function ( ) {
156
+ var className ;
157
+
158
+ element . removeClass ( currentClasses . size ) ;
159
+
160
+ if ( attrs . size === 'large' ) {
161
+ className = 'fa-lg' ;
162
+ } else if ( ! isNaN ( parseInt ( attrs . size , 10 ) ) ) {
163
+ className = 'fa-' + attrs . size + 'x' ;
164
+ }
165
+
166
+ element . addClass ( className ) ;
167
+ currentClasses . size = className ;
168
+ } ) ;
169
+ }
170
+ } ;
171
+ } ) ;
0 commit comments