1+ 'use strict' ;
2+
13angular . 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