diff --git a/.gitignore b/.gitignore index 496ee2c..af56f61 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +.idea/ diff --git a/README.mkdn b/README.mkdn index ff6ebc5..fcf7fcd 100644 --- a/README.mkdn +++ b/README.mkdn @@ -3,32 +3,41 @@ CSS Browser Selector is a very small javascript which empowers CSS selectors.
You can now write code for: browser, browser version, platform, platform version, device, device version.
Best part: no more hacks; all compliant code. -
More info: [http://rafael.adm.br/css_browser_selector](http://rafael.adm.br/css_browser_selector)
beta/experimental versions: [https://github.com/verbatim/css_browser_selector/](https://github.com/verbatim/css_browser_selector/) Identifies
browsers: Firefox; IE; Opera; Safari; Chrome, Konqueror, Iron -
browser versions: (most importantly: ie6, ie7, ie8, ie9) +
browser versions: (most importantly: ie6, ie7, ie8, ie9, ie10, ie11)
rendering engines: Webkit; Mozilla; Gecko -
platforms/OSes: Mac; Win: Win8, Win7, Vista, WinXP, Win2k, WinNT; FreeBSD; Linux/x11 +
platforms/OSes: Mac; Win: Win8.1, Win8, Win7, Vista, WinXP, Win2k, WinNT; FreeBSD; Linux/x11
devices: Ipod; Ipad; Iphone; WebTV; Blackberry; Android; J2me; RIM Playbook; mobile (generic)
enabled technology: JS (use in conjunction with <html class="no-js"> for even more granular control)
language detection -Recent contributors to 0.5, 0.6: +Recent contributors to 0.5, 0.6, 0.7: more detailed IE detection:
https://github.com/kevingessner/css_browser_selector/ +modernized IE detection: +https://github.com/isarmstrong/css_browser_selector + more detailed WIN detection:
https://github.com/saar/css_browser_selector +updated WIN detection +https://github.com/isarmstrong/css_browser_selector + no-js to js:
paul irish: http://paulirish.com/2009/avoiding-the-fouc-v3/ mac versioning
https://github.com/haraldmartin/css_browser_selector +v0.7 2014-12-3 +
Modern IE detection +
Support for Windows 8.1 +
Added an in-project demo page v0.6.1 2012-03-14
iOS version detection @@ -148,3 +157,4 @@ Contributors:
Alex Wiltschko
Chris Warren and Tony Nelson (http://www.imagetrend.com)
glasser +
Ian Armstrong (https://github.com/isarmstrong/) diff --git a/css_browser_selector.js b/css_browser_selector.js index 0668aa7..d85bb5b 100644 --- a/css_browser_selector.js +++ b/css_browser_selector.js @@ -1,8 +1,11 @@ /* -CSS Browser Selector v0.4.0 (Nov 02, 2010) -Rafael Lima (http://rafael.adm.br) -http://rafael.adm.br/css_browser_selector -License: http://creativecommons.org/licenses/by/2.5/ -Contributors: http://rafael.adm.br/css_browser_selector#contributors -*/ -function css_browser_selector(u){var ua=u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent); + CSS Browser Selector (revived) 0.7 + Originally written by Rafael Lima (http://rafael.adm.br) + http://rafael.adm.br/css_browser_selector + Modified by Ian Armstrong (http://imperativeideas.com) + License: http://creativecommons.org/licenses/by/2.5/ + + Forked Repo: + https://github.com/isarmstrong/css_browser_selector + */ +function log(e){window.console&&showLog&&console.log(e)}function css_browser_selector(e){function i(){var e=window.outerWidth||m.clientWidth,i=window.outerHeight||m.clientHeight;t.orientation=i>e?"portrait":"landscape",m.className=m.className.replace(/ ?orientation_\w+/g,"").replace(/ [min|max|cl]+[w|h]_\d+/g,"");for(var n=s-1;n>=0;n--)if(e>=o[n]){t.maxw=o[n];break}widthClasses="";for(var r in t)widthClasses+=" "+r+"_"+t[r];return m.className=m.className+widthClasses,widthClasses}var t={},o=[320,480,640,768,1024,1152,1280,1440,1680,1920,2560],s=o.length,n=e.toLowerCase(),r=function(e){return RegExp(e,"i").test(n)},a=function(e,i){i=i.replace(".","_");for(var t=i.indexOf("_"),o="";t>0;)o+=" "+e+i.substring(0,t),t=i.indexOf("_",t+1);return o+=" "+e+i},p="gecko",d="webkit",g="chrome",l="firefox",x="safari",c="opera",w="mobile",E="android",R="blackberry",$="lang_",_="device_",m=document.documentElement,b=[!/opera|webtv/i.test(n)&&/msie\s(\d+)/.test(n)?"ie ie"+(/trident\/7\.0/.test(n)?"11":RegExp.$1):r(!/opera|webtv/i.test(n)&&/msie\s(\d+)/.test(n))?"ie ie"+(/trident\/6\.0/.test(n)?"10":RegExp.$1):r(!/opera|webtv/i.test(n)&&/msie\s(\d+)/.test(n))?"ie ie"+(/trident\/5\.0/.test(n)?"9":RegExp.$1):r(!/opera|webtv/i.test(n)&&/msie\s(\d+)/.test(n))?"ie ie"+(/trident\/4\.0/.test(n)?"8":RegExp.$1):r("firefox/")?p+" "+l+(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(n)?" "+l+RegExp.$2+" "+l+RegExp.$2+"_"+RegExp.$4:""):r("chrome")?d+" "+g+(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(n)?" "+g+RegExp.$2+(RegExp.$4>0?" "+g+RegExp.$2+"_"+RegExp.$4:""):""):r("gecko/")?p:r("opera")?c+(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(n)?" "+c+RegExp.$2+" "+c+RegExp.$2+"_"+RegExp.$4:/opera(\s|\/)(\d+)\.(\d+)/.test(n)?" "+c+RegExp.$2+" "+c+RegExp.$2+"_"+RegExp.$3:""):r("konqueror")?"konqueror":r("blackberry")?R+(/Version\/(\d+)(\.(\d+)+)/i.test(n)?" "+R+RegExp.$1+" "+R+RegExp.$1+RegExp.$2.replace(".","_"):/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(n)?" "+R+RegExp.$2+(RegExp.$3?" "+R+RegExp.$2+RegExp.$3:""):""):r("android")?E+(/Version\/(\d+)(\.(\d+))+/i.test(n)?" "+E+RegExp.$1+" "+E+RegExp.$1+RegExp.$2.replace(".","_"):"")+(/Android (.+); (.+) Build/i.test(n)?" "+_+RegExp.$2.replace(/ /g,"_").replace(/-/g,"_"):""):r("iron")?d+" iron":r("applewebkit/")?d+" "+x+(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(n)?" "+x+RegExp.$2+" "+x+RegExp.$2+RegExp.$3.replace(".","_"):/ Safari\/(\d+)/i.test(n)?"419"==RegExp.$1||"417"==RegExp.$1||"416"==RegExp.$1||"412"==RegExp.$1?" "+x+"2_0":"312"==RegExp.$1?" "+x+"1_3":"125"==RegExp.$1?" "+x+"1_2":"85"==RegExp.$1?" "+x+"1_0":"":""):r("mozilla/")?p:"",r("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk")?w:"",r("j2me")?"j2me":r("ipad|ipod|iphone")?(/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(n)?"ios"+a("ios",RegExp.$2):"")+" "+(/(ip(ad|od|hone))/gi.test(n)?RegExp.$1:""):r("playbook")?"playbook":r("kindle|silk")?"kindle":r("playbook")?"playbook":r("mac")?"mac"+(/mac os x ((\d+)[.|_](\d+))/.test(n)?" mac"+RegExp.$2+" mac"+RegExp.$1.replace(".","_"):""):r("win")?"win"+(r("windows nt 6.3")?" win8.1":r("windows nt 6.2")?" win8":r("windows nt 6.1")?" win7":r("windows nt 6.0")?" vista":r("windows nt 5.2")||r("windows nt 5.1")?" win_xp":r("windows nt 5.0")?" win_2k":r("windows nt 4.0")||r("WinNT4.0")?" win_nt":""):r("freebsd")?"freebsd":r("x11|linux")?"linux":"",/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(n)?($+RegExp.$2).replace("-","_")+(""!=RegExp.$3?(" "+$+RegExp.$1).replace("-","_"):""):"",r("ipad|iphone|ipod")&&!r("safari")?"ipad_app":""];window.onresize=i,i();var f=b.join(" ")+" js ";return m.className=(f+m.className.replace(/\b(no[-|_]?)?js\b/g,"")).replace(/^ /,"").replace(/ +/g," "),f}showLog=!0,css_browser_selector(navigator.userAgent); \ No newline at end of file diff --git a/css_browser_selector_dev.js b/css_browser_selector_dev.js index 3fddee5..8925249 100644 --- a/css_browser_selector_dev.js +++ b/css_browser_selector_dev.js @@ -1,12 +1,12 @@ /* -CSS Browser Selector 0.6.1 +CSS Browser Selector (revived) 0.7 Originally written by Rafael Lima (http://rafael.adm.br) http://rafael.adm.br/css_browser_selector +Modified by Ian Armstrong (http://imperativeideas.com) License: http://creativecommons.org/licenses/by/2.5/ -Co-maintained by: -https://github.com/verbatim/css_browser_selector - +Forked Repo: +https://github.com/isarmstrong/css_browser_selector */ showLog=true; @@ -19,11 +19,11 @@ function css_browser_selector(u) allScreens = screens.length, ua=u.toLowerCase(), is=function(t) { return RegExp(t,"i").test(ua); }, - version = function(p,n) - { - n=n.replace(".","_"); var i = n.indexOf('_'), ver=""; - while (i>0) {ver += " "+ p+n.substring(0,i);i = n.indexOf('_', i+1);} - ver += " "+p+n; return ver; + version = function(p,n) + { + n=n.replace(".","_"); var i = n.indexOf('_'), ver=""; + while (i>0) {ver += " "+ p+n.substring(0,i);i = n.indexOf('_', i+1);} + ver += " "+p+n; return ver; }, g='gecko', w='webkit', @@ -38,25 +38,29 @@ function css_browser_selector(u) dv='device_', html=document.documentElement, b= [ - + // browser - (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/4\.0/.test(ua) ? '8' : RegExp.$1)) - :is('firefox/')?g+ " " + f+(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+f+RegExp.$2 + ' '+f+RegExp.$2+"_"+RegExp.$4:'') + (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/7\.0/.test(ua) ? '11' : RegExp.$1)) + :is (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/6\.0/.test(ua) ? '10' : RegExp.$1)) + :is (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/5\.0/.test(ua) ? '9' : RegExp.$1)) + :is (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/4\.0/.test(ua) ? '8' : RegExp.$1)) + :is('firefox/')?g+ " " + f+(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+f+RegExp.$2 + ' '+f+RegExp.$2+"_"+RegExp.$4:'') + :is('chrome')?w+ ' '+c+(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+c+RegExp.$2 +((RegExp.$4>0) ? ' '+c+RegExp.$2+"_"+RegExp.$4:''):'') :is('gecko/')?g :is('opera')?o+(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+o+RegExp.$2 + ' '+o+RegExp.$2+"_"+RegExp.$4 : (/opera(\s|\/)(\d+)\.(\d+)/.test(ua)?' '+o+RegExp.$2+" "+o+RegExp.$2+"_"+RegExp.$3:'')) :is('konqueror')?'konqueror' - - :is('blackberry') ? - ( bb + + + :is('blackberry') ? + ( bb + ( /Version\/(\d+)(\.(\d+)+)/i.test(ua) ? " " + bb+ RegExp.$1 + " "+bb+ RegExp.$1+RegExp.$2.replace('.','_') - : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) + : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' +bb+RegExp.$2 + (RegExp.$3?' ' +bb+RegExp.$2+RegExp.$3:'') : '') ) ) // blackberry - - :is('android') ? + + :is('android') ? ( a + ( /Version\/(\d+)(\.(\d+))+/i.test(ua) ? " " + a+ RegExp.$1 + " "+a+ RegExp.$1+RegExp.$2.replace('.','_') @@ -65,36 +69,34 @@ function css_browser_selector(u) ? ' '+dv+( (RegExp.$2).replace(/ /g,"_") ).replace(/-/g,"_") :'' ) ) //android - - :is('chrome')?w+ ' '+c+(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+c+RegExp.$2 +((RegExp.$4>0) ? ' '+c+RegExp.$2+"_"+RegExp.$4:''):'') - + :is('iron')?w+' iron' - - :is('applewebkit/') ? - ( w+ ' '+ s + + + :is('applewebkit/') ? + ( w+ ' '+ s + ( /version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' '+ s +RegExp.$2 + " "+s+ RegExp.$2+RegExp.$3.replace('.','_') - : ( / Safari\/(\d+)/i.test(ua) - ? - ( (RegExp.$1=="419" || RegExp.$1=="417" || RegExp.$1=="416" || RegExp.$1=="412" ) ? ' '+ s + '2_0' + : ( / Safari\/(\d+)/i.test(ua) + ? + ( (RegExp.$1=="419" || RegExp.$1=="417" || RegExp.$1=="416" || RegExp.$1=="412" ) ? ' '+ s + '2_0' : RegExp.$1=="312" ? ' '+ s + '1_3' : RegExp.$1=="125" ? ' '+ s + '1_2' : RegExp.$1=="85" ? ' '+ s + '1_0' : '' ) :'') ) - ) //applewebkit - + ) //applewebkit + :is('mozilla/')?g :'' - + // mobile ,is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk")?m:'' - + // os/platform ,is('j2me')?'j2me' - :is('ipad|ipod|iphone')? - ( + :is('ipad|ipod|iphone')? + ( ( /CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ? 'ios' + version('ios',RegExp.$2) : '' @@ -107,28 +109,29 @@ function css_browser_selector(u) :is('playbook')?'playbook' :is('mac')?'mac'+ (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ( ' mac' + (RegExp.$2) + ' mac' + (RegExp.$1).replace('.',"_") ) : '' ) :is('win')?'win'+ - (is('windows nt 6.2')?' win8' + (is('windows nt 6.3')?' win8.1' + :is('windows nt 6.2')?' win8' :is('windows nt 6.1')?' win7' :is('windows nt 6.0')?' vista' - :is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp' + :is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp' :is('windows nt 5.0')?' win_2k' :is('windows nt 4.0') || is('WinNT4.0') ?' win_nt' : '' - ) + ) :is('freebsd')?'freebsd' :(is('x11|linux'))?'linux' :'' - + // user agent language ,(/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua))?(lang+RegExp.$2).replace("-","_")+(RegExp.$3!=''?(' '+lang+RegExp.$1).replace("-","_"):''):'' - + // beta: test if running iPad app ,( is('ipad|iphone|ipod') && !is('safari') ) ? 'ipad_app' : '' - - + + ]; // b - function screenSize() + function screenSize() { var w = window.outerWidth || html.clientWidth; var h = window.outerHeight || html.clientHeight; @@ -141,16 +144,16 @@ function css_browser_selector(u) html.className = ( html.className +widthClasses ); return widthClasses; } // screenSize - + window.onresize = screenSize; - screenSize(); + screenSize(); var cssbs = (b.join(' ')) + " js "; html.className = ( cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g,"") ).replace(/^ /, "").replace(/ +/g," "); return cssbs; } - + css_browser_selector(navigator.userAgent); diff --git a/index.html b/index.html new file mode 100644 index 0000000..efc4d5e --- /dev/null +++ b/index.html @@ -0,0 +1,105 @@ + + + + + Browser Selector Test + + + + +
+

Information on this browser

+ +

USER AGENT STRING:

+ +
+ +
+ +
+ +
+
+ + + + + + + + + \ No newline at end of file