@@ -23,55 +23,164 @@ identifies
23
23
devices: Ipod; Ipad; Iphone; WebTV; Blackberry; Android; J2me; mobile(generic)
24
24
enabled technology: JS
25
25
26
+ v0.6.3 2014-03-06
27
+
28
+ - Added support to IE11
29
+ @see http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
30
+ @see http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx
26
31
*/
27
32
28
- function css_browser_selector ( u )
29
- {
30
- var ua = u . toLowerCase ( ) ,
31
- is = function ( t ) { return ua . indexOf ( t ) > - 1 } ,
32
- g = 'gecko' ,
33
- w = 'webkit' ,
34
- s = 'safari' ,
35
- o = 'opera' ,
36
- m = 'mobile' ,
37
- f = 'firefox' ,
38
- h = document . documentElement ,
39
- b = [
40
- /* hat tip: https://github.com/kevingessner/css_browser_selector/ */
41
- ( ! ( / o p e r a | w e b t v / i. test ( ua ) ) && / m s i e \s ( \d ) / . test ( ua ) ) ?( 'ie ie' + ( / t r i d e n t \/ 4 \. 0 / . test ( ua ) ? '8' : RegExp . $1 ) )
42
- :is ( 'firefox/' ) ?g + " " + f + ( / f i r e f o x \/ ( \d + ( \. ? \d + ) * ) / . test ( ua ) ?' ' + f + RegExp . $1 . replace ( / \. / g, "" ) . substr ( 0 , 2 ) :'' )
43
- :is ( 'gecko/' ) ?g
44
- :is ( 'opera' ) ?o + ( / v e r s i o n \/ ( ( \d + ) ( \. \d + ) * ) / . test ( ua ) ?' ' + o + RegExp . $2 + ' ' + o + RegExp . $2 + ( RegExp . $3 ) . replace ( "." , "_" ) . substr ( 0 , 2 ) :( / o p e r a ( \s | \/ ) ( \d + ) / . test ( ua ) ?' ' + o + RegExp . $2 :'' ) )
45
- :is ( 'konqueror' ) ?'konqueror'
46
- :is ( 'blackberry' ) ?m + ' blackberry'
47
- :is ( 'android' ) ?m + ' android'
48
- :is ( 'chrome' ) ?w + ' chrome'
49
- :is ( 'iron' ) ?w + ' iron'
50
- :is ( 'applewebkit/' ) ?w + ' ' + s + ( / v e r s i o n \/ ( \d + ) / . test ( ua ) ?' ' + s + RegExp . $1 :'' )
51
- :is ( 'mozilla/' ) ?g :''
52
- , is ( 'j2me' ) ?m + ' j2me'
53
- :is ( 'iphone' ) ?m + ' iphone'
54
- :is ( 'ipod' ) ?m + ' ipod'
55
- :is ( 'ipad' ) ?m + ' ipad'
56
- :is ( 'mac' ) ?'mac'
57
- :is ( 'darwin' ) ?'mac'
58
- :is ( 'webtv' ) ?'webtv'
59
- /* hat tip: https://github.com/saar/css_browser_selector */
60
- :is ( 'win' ) ?'win' +
61
- ( is ( 'windows nt 6.2' ) ?' win8'
62
- :is ( 'windows nt 6.1' ) ?' win7'
63
- :is ( 'windows nt 6.0' ) ?' vista'
64
- :is ( 'windows nt 5.2' ) || is ( 'windows nt 5.1' ) ? ' xp'
65
- :is ( 'windows nt 5.0' ) ?' win2k' : ''
66
- )
67
- :is ( 'freebsd' ) ?'freebsd'
68
- :( is ( 'x11' ) || is ( 'linux' ) ) ?'linux' :''
69
- , 'js'
70
- ] ;
71
- var c = b . join ( ' ' ) ;
72
- /* hat tip, paul irish: http://paulirish.com/2009/avoiding-the-fouc-v3/ */
73
- h . className = ( h . className . replace ( / n o - ? j s / g, "" ) + " " + c ) . replace ( / ^ / , "" ) ;
74
- return c ;
75
- }
33
+ showLog = true ;
34
+ function log ( m ) { if ( window . console && showLog ) { console . log ( m ) ; } }
35
+
36
+ function css_browser_selector ( u ) {
37
+ var uaInfo = { } ,
38
+ screens = [ 320 , 480 , 640 , 768 , 1024 , 1152 , 1280 , 1440 , 1680 , 1920 , 2560 ] ,
39
+ allScreens = screens . length ,
40
+ ua = u . toLowerCase ( ) ,
41
+ is = function ( t ) { return RegExp ( t , "i" ) . test ( ua ) ; } ,
42
+ version = function ( p , n )
43
+ {
44
+ n = n . replace ( "." , "_" ) ; var i = n . indexOf ( '_' ) , ver = "" ;
45
+ while ( i > 0 ) { ver += " " + p + n . substring ( 0 , i ) ; i = n . indexOf ( '_' , i + 1 ) ; }
46
+ ver += " " + p + n ; return ver ;
47
+ } ,
48
+ g = 'gecko' ,
49
+ w = 'webkit' ,
50
+ c = 'chrome' ,
51
+ f = 'firefox' ,
52
+ s = 'safari' ,
53
+ o = 'opera' ,
54
+ m = 'mobile' ,
55
+ a = 'android' ,
56
+ bb = 'blackberry' ,
57
+ lang = 'lang_' ,
58
+ dv = 'device_' ,
59
+ html = document . documentElement ,
60
+ b = [
61
+
62
+ // browser
63
+ ( ( ! ( / o p e r a | w e b t v / i. test ( ua ) ) && / m s i e \s ( \d + ) / . test ( ua ) || ( / t r i d e n t \/ .* r v : ( [ 0 - 9 ] { 1 , } [ \. 0 - 9 ] { 0 , } ) / . test ( ua ) ) ) ) ?( 'ie ie' + ( / t r i d e n t \/ 4 \. 0 / . test ( ua ) ? '8' : RegExp . $1 == '11.0' ?'11' :RegExp . $1 ) )
64
+ :is ( 'firefox/' ) ?g + " " + f + ( / f i r e f o x \/ ( ( \d + ) ( \. ( \d + ) ) ( \. \d + ) * ) / . test ( ua ) ?' ' + f + RegExp . $2 + ' ' + f + RegExp . $2 + "_" + RegExp . $4 :'' )
65
+ :is ( 'gecko/' ) ?g
66
+ :is ( 'opera' ) ?o + ( / v e r s i o n \/ ( ( \d + ) ( \. ( \d + ) ) ( \. \d + ) * ) / . test ( ua ) ?' ' + o + RegExp . $2 + ' ' + o + RegExp . $2 + "_" + RegExp . $4 : ( / o p e r a ( \s | \/ ) ( \d + ) \. ( \d + ) / . test ( ua ) ?' ' + o + RegExp . $2 + " " + o + RegExp . $2 + "_" + RegExp . $3 :'' ) )
67
+ :is ( 'konqueror' ) ?'konqueror'
68
+
69
+ :is ( 'blackberry' ) ?
70
+ ( bb +
71
+ ( / V e r s i o n \/ ( \d + ) ( \. ( \d + ) + ) / i. test ( ua )
72
+ ? " " + bb + RegExp . $1 + " " + bb + RegExp . $1 + RegExp . $2 . replace ( '.' , '_' )
73
+ : ( / B l a c k b e r r y ? ( ( [ 0 - 9 ] + ) ( [ a - z ] ? ) ) [ \/ | ; ] / gi. test ( ua )
74
+ ? ' ' + bb + RegExp . $2 + ( RegExp . $3 ?' ' + bb + RegExp . $2 + RegExp . $3 :'' )
75
+ : '' )
76
+ )
77
+ ) // blackberry
78
+
79
+ :is ( 'android' ) ?
80
+ ( a +
81
+ ( / V e r s i o n \/ ( \d + ) ( \. ( \d + ) ) + / i. test ( ua )
82
+ ? " " + a + RegExp . $1 + " " + a + RegExp . $1 + RegExp . $2 . replace ( '.' , '_' )
83
+ : '' )
84
+ + ( / A n d r o i d ( .+ ) ; ( .+ ) B u i l d / i. test ( ua )
85
+ ? ' ' + dv + ( ( RegExp . $2 ) . replace ( / / g, "_" ) ) . replace ( / - / g, "_" )
86
+ :'' )
87
+ ) //android
88
+
89
+ :is ( 'chrome' ) ?w + ' ' + c + ( / c h r o m e \/ ( ( \d + ) ( \. ( \d + ) ) ( \. \d + ) * ) / . test ( ua ) ?' ' + c + RegExp . $2 + ( ( RegExp . $4 > 0 ) ? ' ' + c + RegExp . $2 + "_" + RegExp . $4 :'' ) :'' )
90
+
91
+ :is ( 'iron' ) ?w + ' iron'
92
+
93
+ :is ( 'applewebkit/' ) ?
94
+ ( w + ' ' + s +
95
+ ( / v e r s i o n \/ ( ( \d + ) ( \. ( \d + ) ) ( \. \d + ) * ) / . test ( ua )
96
+ ? ' ' + s + RegExp . $2 + " " + s + RegExp . $2 + RegExp . $3 . replace ( '.' , '_' )
97
+ : ( / S a f a r i \/ ( \d + ) / i. test ( ua )
98
+ ?
99
+ ( ( RegExp . $1 == "419" || RegExp . $1 == "417" || RegExp . $1 == "416" || RegExp . $1 == "412" ) ? ' ' + s + '2_0'
100
+ : RegExp . $1 == "312" ? ' ' + s + '1_3'
101
+ : RegExp . $1 == "125" ? ' ' + s + '1_2'
102
+ : RegExp . $1 == "85" ? ' ' + s + '1_0'
103
+ : '' )
104
+ :'' )
105
+ )
106
+ ) //applewebkit
107
+
108
+ :is ( 'mozilla/' ) ?g
109
+ :''
110
+
111
+ // mobile
112
+ , is ( "android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk" ) ?m :''
113
+
114
+ // os/platform
115
+ , is ( 'j2me' ) ?'j2me'
116
+ :is ( 'ipad|ipod|iphone' ) ?
117
+ (
118
+ (
119
+ / C P U ( i P h o n e ) ? O S ( \d + [ _ | \. ] \d + ( [ _ | \. ] \d + ) * ) / i. test ( ua ) ?
120
+ 'ios' + version ( 'ios' , RegExp . $2 ) : ''
121
+ ) + ' ' + ( / ( i p ( a d | o d | h o n e ) ) / gi. test ( ua ) ? RegExp . $1 : "" )
122
+ ) //'iphone'
123
+ //:is('ipod')?'ipod'
124
+ //:is('ipad')?'ipad'
125
+ :is ( 'playbook' ) ?'playbook'
126
+ :is ( 'kindle|silk' ) ?'kindle'
127
+ :is ( 'playbook' ) ?'playbook'
128
+ :is ( 'mac' ) ?'mac' + ( / m a c o s x ( ( \d + ) [ . | _ ] ( \d + ) ) / . test ( ua ) ? ( ' mac' + ( RegExp . $2 ) + ' mac' + ( RegExp . $1 ) . replace ( '.' , "_" ) ) : '' )
129
+ :is ( 'win' ) ?'win' +
130
+ ( is ( 'windows nt 6.2' ) ?' win8'
131
+ :is ( 'windows nt 6.1' ) ?' win7'
132
+ :is ( 'windows nt 6.0' ) ?' vista'
133
+ :is ( 'windows nt 5.2' ) || is ( 'windows nt 5.1' ) ? ' win_xp'
134
+ :is ( 'windows nt 5.0' ) ?' win_2k'
135
+ :is ( 'windows nt 4.0' ) || is ( 'WinNT4.0' ) ?' win_nt'
136
+ : ''
137
+ )
138
+ :is ( 'freebsd' ) ?'freebsd'
139
+ :( is ( 'x11|linux' ) ) ?'linux'
140
+ :''
141
+
142
+ // user agent language
143
+ , ( / [ ; | \[ ] ( ( [ a - z ] { 2 } ) ( \- [ a - z ] { 2 } ) ? ) [ ) | ; | \] ] / i. test ( ua ) ) ?( lang + RegExp . $2 ) . replace ( "-" , "_" ) + ( RegExp . $3 != '' ?( ' ' + lang + RegExp . $1 ) . replace ( "-" , "_" ) :'' ) :''
144
+
145
+ // beta: test if running iPad app
146
+ , ( is ( 'ipad|iphone|ipod' ) && ! is ( 'safari' ) ) ? 'ipad_app' : ''
147
+
148
+
149
+ ] ; // b
150
+
151
+ console . debug ( ua ) ;
152
+
153
+ function screenSize ( ) {
154
+ var w = window . outerWidth || html . clientWidth ;
155
+ var h = window . outerHeight || html . clientHeight ;
156
+ uaInfo . orientation = ( ( w < h ) ? "portrait" : "landscape" ) ;
157
+ // remove previous min-width, max-width, client-width, client-height, and orientation
158
+ html . className = html . className . replace ( / ? o r i e n t a t i o n _ \w + / g, "" ) . replace ( / [ m i n | m a x | c l ] + [ w | h ] _ \d + / g, "" )
159
+ for ( var i = ( allScreens - 1 ) ; i >= 0 ; i -- ) { if ( w >= screens [ i ] ) { uaInfo . maxw = screens [ i ] ; break ; } }
160
+ widthClasses = "" ;
161
+ for ( var info in uaInfo ) { widthClasses += " " + info + "_" + uaInfo [ info ] } ;
162
+ html . className = ( html . className + widthClasses ) ;
163
+ return widthClasses ;
164
+ } // screenSize
165
+
166
+ window . onresize = screenSize ;
167
+ screenSize ( ) ;
168
+
169
+ function retina ( ) {
170
+ var r = window . devicePixelRatio > 1 ;
171
+ if ( r ) {
172
+ html . className += ' retina' ;
173
+ }
174
+ else {
175
+ html . className += ' non-retina' ;
176
+ }
177
+ }
178
+ retina ( ) ;
179
+
180
+ var cssbs = ( b . join ( ' ' ) ) + " js " ;
181
+ html . className = ( cssbs + html . className . replace ( / \b ( n o [ - | _ ] ? ) ? j s \b / g, "" ) ) . replace ( / ^ / , "" ) . replace ( / + / g, " " ) ;
182
+
183
+ return cssbs ;
184
+ }
76
185
77
186
css_browser_selector ( navigator . userAgent ) ;
0 commit comments