├── favicon.ico ├── images ├── bg.png ├── logo.png ├── fabric.png ├── noise.png ├── stitch.png ├── teaser.png ├── logo-retina.png └── double-stitch.png ├── stylesheets ├── wide.css ├── mobile.css └── screen.css ├── Procfile ├── Gemfile ├── sass ├── wide.scss ├── partials │ └── _header.scss ├── mobile.scss └── screen.scss ├── config.rb ├── Rakefile ├── Termfile ├── Gemfile.lock ├── index.html ├── javascripts ├── master.js └── modernizr.js └── capabilities.json /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/favicon.ico -------------------------------------------------------------------------------- /images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/bg.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/fabric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/fabric.png -------------------------------------------------------------------------------- /images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/noise.png -------------------------------------------------------------------------------- /images/stitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/stitch.png -------------------------------------------------------------------------------- /images/teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/teaser.png -------------------------------------------------------------------------------- /stylesheets/wide.css: -------------------------------------------------------------------------------- 1 | .group{width:18%;padding:0 1%}.group:nth-child(4){clear:none} 2 | -------------------------------------------------------------------------------- /images/logo-retina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/logo-retina.png -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bundle exec serve 8022 2 | compass: bundle exec compass watch . 3 | -------------------------------------------------------------------------------- /images/double-stitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/philippbosch/haz/HEAD/images/double-stitch.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source :rubygems 2 | gem "rake" 3 | gem "compass" 4 | gem "compass-growl" 5 | gem "rb-fsevent" 6 | gem "foreman" 7 | -------------------------------------------------------------------------------- /sass/wide.scss: -------------------------------------------------------------------------------- 1 | .group { 2 | width: 18%; 3 | padding: 0 1%; 4 | 5 | &:nth-child(4) { 6 | clear: none; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | require "compass-growl" 2 | 3 | http_path = "/" 4 | css_dir = "stylesheets" 5 | sass_dir = "sass" 6 | images_dir = "images" 7 | javascripts_dir = "javascripts" 8 | 9 | output_style = :compressed 10 | line_comments = false 11 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | desc "Deploy to server" 2 | task :deploy do 3 | sh "BRANCH=$(git describe --contains --all HEAD) && echo Deploying $BRANCH … && compass compile && rsync -rtz --exclude .git --exclude .sass-cache . pb@haz.io:projects/haz/$BRANCH/" 4 | end 5 | -------------------------------------------------------------------------------- /Termfile: -------------------------------------------------------------------------------- 1 | # WestOst App 2 | 3 | PROJECT_NAME = "haz" 4 | 5 | setup do 6 | run "bundle install" 7 | end 8 | 9 | before do 10 | run "cd ~/Sites/#{PROJECT_NAME}" 11 | end 12 | 13 | tab "#{PROJECT_NAME}" do 14 | pane do 15 | run "foreman start" 16 | 17 | pane do 18 | run "mate ." 19 | run "open http://localhost:8022/" 20 | run "clear && ls -alG" 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /sass/partials/_header.scss: -------------------------------------------------------------------------------- 1 | #header { 2 | width: 680px; 3 | margin: 0 auto; 4 | @include clearfix; 5 | 6 | h1 { 7 | text-align: left; 8 | width: 230px; 9 | height: 200px; 10 | float: left; 11 | } 12 | 13 | p { 14 | text-align: left; 15 | margin-top: 84px; 16 | @include text-shadow(rgba(0,0,0,0.3) 0 1px); 17 | line-height: 1.4; 18 | 19 | a { 20 | @include text-shadow(rgba(255,255,255,0.7) 0 1px); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /stylesheets/mobile.css: -------------------------------------------------------------------------------- 1 | body{padding:24px 16px;padding-top:0}#header{width:100%}#header h1{height:135px;display:inline;float:none}#header p{margin-top:24px;margin-bottom:16px;text-align:center}.group{width:100%;padding:0;display:inline;float:none}.features li .title{padding-top:0.5em;padding-bottom:0.5em}footer{margin-left:-16px;margin-right:-16px}#github-ribbon{display:none}@media only screen and (-webkit-min-device-pixel-ratio: 2), 2 | only screen and (min-device-pixel-ratio: 2){#header h1{width:193px;height:134px;display:block;margin:0 auto;background:url('/images/logo-retina.png?1311583719');background-size:100%}#header h1 img{display:none}} 3 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | chunky_png (1.2.5) 5 | compass (0.11.5) 6 | chunky_png (~> 1.2) 7 | fssm (>= 0.2.7) 8 | sass (~> 3.1) 9 | compass-growl (0.0.5) 10 | compass (~> 0.11.1) 11 | growl_notify 12 | foreman (0.26.1) 13 | term-ansicolor (~> 1.0.5) 14 | thor (>= 0.13.6) 15 | fssm (0.2.7) 16 | growl_notify (0.0.3) 17 | rb-appscript 18 | rake (0.9.2.2) 19 | rb-appscript (0.6.1) 20 | rb-fsevent (0.4.3.1) 21 | sass (3.1.10) 22 | term-ansicolor (1.0.7) 23 | thor (0.14.6) 24 | 25 | PLATFORMS 26 | ruby 27 | 28 | DEPENDENCIES 29 | compass 30 | compass-growl 31 | foreman 32 | rake 33 | rb-fsevent 34 | -------------------------------------------------------------------------------- /sass/mobile.scss: -------------------------------------------------------------------------------- 1 | @import "compass"; 2 | 3 | body { 4 | padding: 24px 16px; 5 | padding-top: 0; 6 | } 7 | 8 | #header { 9 | width: 100%; 10 | 11 | h1 { 12 | height: 135px; 13 | @include float(none); 14 | } 15 | 16 | p { 17 | margin-top: 24px; 18 | margin-bottom: 16px; 19 | text-align: center; 20 | } 21 | } 22 | 23 | .group { 24 | width: 100%; 25 | padding: 0; 26 | @include float(none); 27 | } 28 | 29 | .features { 30 | li { 31 | .title { 32 | padding-top: 0.5em; 33 | padding-bottom: 0.5em; 34 | } 35 | } 36 | } 37 | 38 | footer { 39 | margin-left: -16px; 40 | margin-right: -16px; 41 | } 42 | 43 | #github-ribbon { 44 | display: none; 45 | } 46 | 47 | 48 | @media 49 | only screen and (-webkit-min-device-pixel-ratio: 2), 50 | only screen and (min-device-pixel-ratio: 2) { 51 | 52 | #header { 53 | h1 { 54 | width: 193px; 55 | height: 134px; 56 | display: block; 57 | margin: 0 auto; 58 | background: image-url("logo-retina.png"); 59 | background-size: 100%; 60 | 61 | img { 62 | display: none; 63 | } 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /stylesheets/screen.css: -------------------------------------------------------------------------------- 1 | html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}body{background-image:url('/images/bg.png?1311440663');background-color:#78b814;background-position:top center;color:#fff;font-family:"Droid Sans", sans-serif;padding:48px;padding-top:0;-webkit-text-size-adjust:100%}a{color:#3c5c0a;text-decoration:none}a.spec:after{content:" ›";color:rgba(136,135,95,0.5);text-transform:uppercase;font-size:75%;text-shadow:none}a.spec:hover:after{content:"   Spec ›"}#wrapper{overflow:hidden;*zoom:1}#wrapper > header{text-align:center;margin-bottom:1em}#header{width:680px;margin:0 auto;overflow:hidden;*zoom:1}#header h1{text-align:left;width:230px;height:200px;float:left}#header p{text-align:left;margin-top:84px;text-shadow:rgba(0,0,0,0.3) 0 1px;line-height:1.4}#header p a{text-shadow:rgba(255,255,255,0.7) 0 1px}p.info{text-align:center}.group{width:30%;display:inline;float:left;padding:0 1.5%;margin-bottom:2em}.group:nth-child(4){clear:left}.group h1{margin:0 -5px;padding:32px 0 16px 0;text-align:center;font-size:24px;font-weight:bold;color:rgba(136,135,95,0.7);letter-spacing:-2px;background:url('/images/stitch.png?1311440663') center 8px repeat-x;text-shadow:rgba(255,255,255,0.7) 0 1px,rgba(0,0,0,0.2) 0 -1px}.features{width:100%;margin-top:1em;padding-bottom:0.5em;background:#e7e6cf url('/images/fabric.png?1311440663');-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:rgba(0,0,0,0.5) 0 1px 2px;-webkit-box-shadow:rgba(0,0,0,0.5) 0 1px 2px;-o-box-shadow:rgba(0,0,0,0.5) 0 1px 2px;box-shadow:rgba(0,0,0,0.5) 0 1px 2px}.features,.features a{color:#88875F}.features li{margin:0 1em;position:relative}.features li:last-child{border-bottom:0}.features li .title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0.5em 64px 0.5em 0}.features .support{text-align:right;color:#FFF;color:rgba(255,255,255,0.8);position:absolute;top:0.6em;right:0;display:block;padding:4px 6px;-moz-border-radius:12px;-webkit-border-radius:12px;-o-border-radius:12px;-ms-border-radius:12px;-khtml-border-radius:12px;border-radius:12px;text-transform:uppercase;font-size:12px;font-weight:bold;-moz-box-shadow:rgba(0,0,0,0.2) 0 1px inset,rgba(255,255,255,0.8) 0 -1px inset;-webkit-box-shadow:rgba(0,0,0,0.2) 0 1px inset,rgba(255,255,255,0.8) 0 -1px inset;-o-box-shadow:rgba(0,0,0,0.2) 0 1px inset,rgba(255,255,255,0.8) 0 -1px inset;box-shadow:rgba(0,0,0,0.2) 0 1px inset,rgba(255,255,255,0.8) 0 -1px inset}.features .support-yes > .support{background-color:#78b814;background-color:rgba(120,184,20,0.9)}.features .support-no > .support{background-color:#b83314;background-color:rgba(184,51,20,0.9)}.features .support-maybe > .support{background-color:#cfd12b;background-color:rgba(207,209,43,0.9)}.subfeatures{margin-bottom:0.5em}.subfeatures li{font-size:80%;border:0;margin-right:0}.subfeatures li .support{top:0.5em}footer{background:url('/images/double-stitch.png?1311440663') top center repeat-x;font-size:12px;clear:both;text-align:center;line-height:1.4;padding-top:48px;margin:16px -48px 0 -48px}footer a{color:#54800e;text-decoration:none}#useragent{margin-bottom:1em}#social{margin-top:1em}#github-ribbon{position:absolute;top:0;right:0;border:0} 2 | -------------------------------------------------------------------------------- /sass/screen.scss: -------------------------------------------------------------------------------- 1 | @import "compass/reset"; 2 | @import "compass"; 3 | 4 | $green: #78b814; 5 | $light-green: mix($green, #FFF); 6 | $even-lighter-green: mix($green, #FFF, 30%); 7 | $dark-green: mix($green, #000, 70%); 8 | $even-darker-green: mix($green, #000); 9 | $red: #b83314; 10 | $yellow: #cfd12b; 11 | $white-kinda: #FFF; 12 | //$noise: url("http://noisepng.com/64-90-4.png"); 13 | $noise: image-url("noise.png"); 14 | 15 | body { 16 | background-image: image-url("bg.png"); 17 | background-color: $green; 18 | background-position: top center; 19 | color: $white-kinda; 20 | font-family: "Droid Sans", sans-serif; 21 | padding: 48px; 22 | padding-top: 0; 23 | -webkit-text-size-adjust: 100%; 24 | } 25 | 26 | a { 27 | color: $even-darker-green; 28 | text-decoration: none; 29 | 30 | &.spec { 31 | &:after { 32 | content: " ›"; 33 | color: rgba(#88875F, 0.5); 34 | text-transform: uppercase; 35 | font-size: 75%; 36 | @include text-shadow(none); 37 | } 38 | 39 | &:hover:after { 40 | content: "   Spec ›"; 41 | } 42 | } 43 | } 44 | 45 | #wrapper { 46 | @include clearfix; 47 | 48 | & > header { 49 | text-align: center; 50 | margin-bottom: 1em; 51 | } 52 | } 53 | 54 | @import "partials/header"; 55 | 56 | p.info { 57 | text-align: center; 58 | } 59 | 60 | .group { 61 | width: 30%; 62 | @include float(left); 63 | padding: 0 1.5%; 64 | margin-bottom: 2em; 65 | 66 | &:nth-child(4) { 67 | clear: left; 68 | } 69 | 70 | h1 { 71 | margin: 0 -5px; 72 | padding: 32px 0 16px 0; 73 | text-align: center; 74 | font-size: 24px; 75 | font-weight: bold; 76 | color: rgba(#88875F, 0.7); 77 | letter-spacing: -2px; 78 | @include background(image-url("stitch.png") center 8px repeat-x); 79 | @include text-shadow(rgba(255,255,255,0.7) 0 1px, rgba(0,0,0,0.2) 0 -1px); 80 | } 81 | } 82 | 83 | .features { 84 | width: 100%; 85 | margin-top: 1em; 86 | padding-bottom: 0.5em; 87 | background: #E7E6CF image-url("fabric.png"); 88 | @include border-radius(3px); 89 | @include box-shadow(rgba(0,0,0,0.5) 0 1px 2px); 90 | 91 | &, a { 92 | color: #88875F; 93 | } 94 | 95 | li { 96 | margin: 0 1em; 97 | position: relative; 98 | 99 | &:last-child { 100 | border-bottom: 0; 101 | } 102 | 103 | .title { 104 | white-space: nowrap; 105 | overflow: hidden; 106 | text-overflow: ellipsis; 107 | display: block; 108 | padding: 0.5em 64px 0.5em 0; 109 | } 110 | } 111 | 112 | .support { 113 | text-align: right; 114 | color: #FFF; 115 | color: rgba(255,255,255,0.8); 116 | position: absolute; 117 | top: 0.6em; 118 | right: 0; 119 | display: block; 120 | padding: 4px 6px; 121 | @include border-radius(12px); 122 | text-transform: uppercase; 123 | font-size: 12px; 124 | font-weight: bold; 125 | @include box-shadow(rgba(0,0,0,0.2) 0 1px inset, rgba(255,255,255,0.8) 0 -1px inset); 126 | } 127 | 128 | .support-yes > .support { 129 | background-color: $green; 130 | background-color: rgba($green,0.9); 131 | } 132 | 133 | .support-no > .support { 134 | background-color: $red; 135 | background-color: rgba($red,0.9); 136 | } 137 | 138 | .support-maybe > .support { 139 | background-color: $yellow; 140 | background-color: rgba($yellow,0.9); 141 | } 142 | } 143 | 144 | .subfeatures { 145 | margin-bottom: 0.5em; 146 | 147 | li { 148 | font-size: 80%; 149 | border: 0; 150 | margin-right: 0; 151 | 152 | .support { 153 | top: 0.5em; 154 | } 155 | } 156 | } 157 | 158 | footer { 159 | @include background(image-url("double-stitch.png") top center repeat-x); 160 | font-size: 12px; 161 | clear: both; 162 | text-align: center; 163 | line-height: 1.4; 164 | padding-top: 48px; 165 | margin: 16px -48px 0 -48px; 166 | 167 | a { 168 | color: $dark-green; 169 | text-decoration: none; 170 | } 171 | } 172 | 173 | #useragent { 174 | margin-bottom: 1em; 175 | } 176 | 177 | #social { 178 | margin-top: 1em; 179 | } 180 | 181 | #github-ribbon { 182 | position: absolute; 183 | top: 0; 184 | right: 0; 185 | border: 0; 186 | } 187 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | haz.io › HTML5 & CSS3 Browser Capabilities 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 |
22 | 26 | 29 | 30 |
31 |
32 | 57 | Fork me on GitHub 58 | 87 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /javascripts/master.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | var sectionTemplateSource = $('#section-template').html(), 3 | sectionTemplate = Handlebars.compile(sectionTemplateSource), 4 | useragentTemplateSource = $('#useragent-template').html(), 5 | useragentTemplate = Handlebars.compile(useragentTemplateSource), 6 | features = ""; 7 | 8 | $.each(Modernizr.input, function(attr, support) { 9 | $('html').addClass((!support?'no-':'')+'input-'+attr); 10 | }); 11 | 12 | $.each(Modernizr.inputtypes, function(type, support) { 13 | $('html').addClass((!support?'no-':'')+'inputtypes-'+type); 14 | }); 15 | 16 | $.each(Modernizr.video, function(type, support) { 17 | $('html').addClass((support===''?'no-':(support=='maybe'?'maybe-':''))+'video-'+type); 18 | }); 19 | 20 | $.each(Modernizr.audio, function(type, support) { 21 | $('html').addClass((support===''?'no-':(support=='maybe'?'maybe-':''))+'audio-'+type); 22 | }); 23 | 24 | 25 | function setSupport($feature, supported) { 26 | if (supported == 'yes' || supported == 'probably') { 27 | $feature.addClass('support-yes').find('> .support').text('yes'); 28 | } else if (supported == 'no' || supported === '') { 29 | $feature.addClass('support-no').find('> .support').text('no'); 30 | } else if (supported == 'maybe') { 31 | $feature.addClass('support-maybe').find('> .support').text('maybe'); 32 | } 33 | } 34 | $.getJSON('capabilities.json?v=2.1', function(capabilities) { 35 | $(capabilities.sections).each(function(i, section) { 36 | $('#features').append(sectionTemplate(section)); 37 | $(section.features).each(function(i, feature) { 38 | var supported, 39 | $feature = $('.feature.' + section.name + '-' + feature.name); 40 | if (!(section.name in Modernizr)) { 41 | supported = !!Modernizr[feature.name] ? 'yes' : 'no'; 42 | } else { 43 | supported = !!Modernizr[section.name][feature.name] ? 'yes' : 'no'; 44 | } 45 | setSupport($feature, supported); 46 | 47 | if(feature.subfeatures) { 48 | $(feature.subfeatures).each(function(i, subfeature) { 49 | var supported = !!Modernizr[feature.name] && Modernizr[feature.name][subfeature.name.substr(subfeature.name.indexOf('-')+1)] || 'no', 50 | $subfeature = $('.feature.' + subfeature.name); 51 | setSupport($subfeature, supported); 52 | }); 53 | } 54 | }); 55 | }); 56 | }); 57 | 58 | 59 | /* BrowserDetect, 60 | by PPK, http://www.quirksmode.org/js/detect.html */ 61 | var BrowserDetect = { 62 | init: function () { 63 | this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; 64 | this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; 65 | this.OS = this.searchString(this.dataOS) || "an unknown OS"; 66 | }, 67 | searchString: function (data) { 68 | for (var i=0;i",a,""].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),x,y={}.hasOwnProperty,z;!C(y,c)&&!C(y.call,c)?z=function(a,b){return y.call(a,b)}:z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)};var G=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return w("dragstart")&&w("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var I in r)z(r,I)&&(x=I.toLowerCase(),e[x]=r[I](),u.push((e[x]?"":"no-")+x));e.input||H(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)z(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},A(""),j=l=null,e._version=d,e._prefixes=o,e._domPrefixes=p,e.hasEvent=w,e.testProp=function(a){return E([a])},e.testAllProps=F,e.testStyles=v,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+u.join(" "):"");return e}(this,this.document),function(){function a(a){return window.getComputedStyle?getComputedStyle(a,null).getPropertyValue("background"):a.currentStyle.background}Modernizr.testStyles(" #modernizr { background-repeat: round; } ",function(b,c){Modernizr.addTest("bgrepeatround",a(b)=="round")}),Modernizr.testStyles(" #modernizr { background-repeat: space; } ",function(b,c){Modernizr.addTest("bgrepeatspace",a(b)=="space")})}(),function(){function c(b){a(b,"",-1)}function b(a){var b=a+"=",c=document.cookie.split(";");for(var d=0;d").getAttribute("name")=="test"}catch(a){return!1}}),Modernizr.addTest("pointerevents",function(){var a=document.createElement("x"),b=document.documentElement,c=window.getComputedStyle,d;if(!("pointerEvents"in a.style))return!1;a.style.pointerEvents="auto",a.style.pointerEvents="x",b.appendChild(a),d=c&&c(a,"").pointerEvents==="auto",b.removeChild(a);return!!d}),Modernizr.addTest("progressbar",function(){return document.createElement("progress").max!=undefined}),Modernizr.addTest("meter",function(){return document.createElement("meter").max!=undefined}),Modernizr.addTest("emoji",function(){if(!Modernizr.canvastext)return!1;var a=document.createElement("canvas"),b=a.getContext("2d");b.textBaseline="top",b.font="32px Arial",b.fillText("😃",0,0);return b.getImageData(16,16,1,1).data[0]!=0}),Modernizr.addTest("devicemotion","DeviceMotionEvent"in window),Modernizr.addTest("deviceorientation","DeviceOrientationEvent"in window),Modernizr.addTest("file",function(){return!!(window.File&&window.FileList&&window.FileReader)}),function(){var a=Modernizr.input.placeholder="placeholder"in document.createElement("input");a&&((Modernizr.textarea||(Modernizr.textarea={})).placeholder="placeholder"in document.createElement("textarea"))}(),function(){function c(){try{var a=document.createElement("div"),b=document.createElement("span"),c=a.style,d=0,e=0,f=!1,g=!1,h=!1;document.body.appendChild(a),a.appendChild(b),b.innerHTML="Bacon ipsum dolor sit amet jerky velit in culpa hamburger et. Laborum dolor proident, enim dolore duis commodo et strip steak. Salami anim et, veniam consectetur dolore qui tenderloin jowl velit sirloin. Et ad culpa, fatback cillum jowl ball tip ham hock nulla short ribs pariatur aute. Pig pancetta ham bresaola, ut boudin nostrud commodo flank esse cow tongue culpa. Pork belly bresaola enim pig, ea consectetur nisi. Fugiat officia turkey, ea cow jowl pariatur ullamco proident do laborum velit sausage. Magna biltong sint tri-tip commodo sed bacon, esse proident aliquip. Ullamco ham sint fugiat, velit in enim sed mollit nulla cow ut adipisicing nostrud consectetur. Proident dolore beef ribs, laborum nostrud meatball ea laboris rump cupidatat labore culpa. Shankle minim beef, velit sint cupidatat fugiat tenderloin pig et ball tip. Ut cow fatback salami, bacon ball tip et in shank strip steak bresaola. In ut pork belly sed mollit tri-tip magna culpa veniam, short ribs qui in andouille ham consequat. Dolore bacon t-bone, velit short ribs enim strip steak nulla. Voluptate labore ut, biltong swine irure jerky. Cupidatat excepteur aliquip salami dolore. Ball tip strip steak in pork dolor. Ad in esse biltong. Dolore tenderloin exercitation ad pork loin t-bone, dolore in chicken ball tip qui pig. Ut culpa tongue, sint ribeye dolore ex shank voluptate hamburger. Jowl et tempor, boudin pork chop labore ham hock drumstick consectetur tri-tip elit swine meatball chicken ground round. Proident shankle mollit dolore. Shoulder ut duis t-bone quis reprehenderit. Meatloaf dolore minim strip steak, laboris ea aute bacon beef ribs elit shank in veniam drumstick qui. Ex laboris meatball cow tongue pork belly. Ea ball tip reprehenderit pig, sed fatback boudin dolore flank aliquip laboris eu quis. Beef ribs duis beef, cow corned beef adipisicing commodo nisi deserunt exercitation. Cillum dolor t-bone spare ribs, ham hock est sirloin. Brisket irure meatloaf in, boudin pork belly sirloin ball tip. Sirloin sint irure nisi nostrud aliqua. Nostrud nulla aute, enim officia culpa ham hock. Aliqua reprehenderit dolore sunt nostrud sausage, ea boudin pork loin ut t-bone ham tempor. Tri-tip et pancetta drumstick laborum. Ham hock magna do nostrud in proident. Ex ground round fatback, venison non ribeye in.",c.cssText="position:absolute;top:0;left:0;width:5em;text-align:justify;text-justification:newspaper;",d=b.offsetHeight,e=b.offsetWidth,c.cssText="position:absolute;top:0;left:0;width:5em;text-align:justify;text-justification:newspaper;-moz-hyphens:auto;-webkit-hyphens:auto;-o-hyphens:auto;-ms-hyphens:auto;hyphens:auto;",f=b.offsetHeight!=d||b.offsetWidth!=e,a.removeChild(b),document.body.removeChild(a);return f}catch(i){return!1}}function b(a){try{var b=document.createElement("input"),c=document.createElement("div"),d="lebowski",e=!1,f;document.body.appendChild(b),document.body.appendChild(c),c.innerHTML=d+a+d,b.setSelectionRange?(b.focus(),b.setSelectionRange(0,0)):b.createTextRange&&(f=b.createTextRange(),f.collapse(!0),f.moveEnd("character",0),f.moveStart("character",0),f.select());if(window.find)e=window.find(d+d);else try{f=self.document.body.createTextRange(),e=f.findText(d+d)}catch(g){e=!1}document.body.removeChild(c),document.body.removeChild(b);return e}catch(g){return!1}}function a(a,b){try{var c=document.createElement("div"),d=document.createElement("span"),e=c.style,f=0,g=!1,h=!1,i=!1;document.body.appendChild(c),c.appendChild(d),e.cssText="position:absolute;top:0;left:0;overflow:visible;width:1.25em;",d.innerHTML="mm",f=d.offsetHeight,d.innerHTML="m"+a+"m",h=d.offsetHeight>f,b?(d.innerHTML="m
m",f=d.offsetWidth,d.innerHTML="m"+a+"m",i=d.offsetWidth>f):i=!0,h===!0&&i===!0&&(g=!0),c.removeChild(d),document.body.removeChild(c);return g}catch(j){return!1}}Modernizr.addTest("csshyphens",function(){return Modernizr.testAllProps("hyphens")}),Modernizr.addTest("workingcsshyphens",function(){try{return c()}catch(a){return!1}}),Modernizr.addTest("softhyphens",function(){try{return a("­",!0)&&a("​",!1)}catch(b){return!1}}),Modernizr.addTest("softhyphensfind",function(){try{return b("­")&&b("​")}catch(a){return!1}})}(),function(){var a=new Image;a.onerror=function(){Modernizr.addTest("webp",!1)},a.onload=function(){Modernizr.addTest("webp",function(){return a.width==4})},a.src="data:image/webp;base64,UklGRjIAAABXRUJQVlA4ICYAAACyAgCdASoBAAEALmk0mk0iIiIiIgBoSygABc6zbAAA/v56QAAAAA=="}(),function(){if(!!Modernizr.webgl){var a,b,c;try{a=document.createElement("canvas"),b=a.getContext("webgl")||a.getContext("experimental-webgl"),c=b.getSupportedExtensions()}catch(d){return}Modernizr.webgl=new Boolean(!0);for(var e=-1,f=c.length;++e 1", 55 | "specurl": "https://bugs.webkit.org/show_bug.cgi?id=45761" 56 | }, 57 | { 58 | "name": "display-table", 59 | "title": "display: table", 60 | "specurl": "" 61 | }, 62 | { 63 | "name": "flexbox", 64 | "title": "Flexible Box Model", 65 | "specurl": "http://dev.w3.org/csswg/css3-flexbox/" 66 | }, 67 | { 68 | "name": "generatedcontent", 69 | "title": "Generated Content", 70 | "specurl": "http://dev.w3.org/csswg/css3-content/" 71 | }, 72 | { 73 | "name": "hsla", 74 | "title": "hsla()", 75 | "specurl": "http://dev.w3.org/csswg/css3-color/#hsla-color" 76 | }, 77 | { 78 | "name": "csshyphens", 79 | "title": "Hyphenation", 80 | "specurl": "" 81 | }, 82 | { 83 | "name": "multiplebgs", 84 | "title": "Multiple backgrounds", 85 | "specurl": "http://dev.w3.org/csswg/css3-background/#layering" 86 | }, 87 | { 88 | "name": "opacity", 89 | "title": "opacity", 90 | "specurl": "http://dev.w3.org/csswg/css3-color/#transparency" 91 | }, 92 | { 93 | "name": "overflowscrolling", 94 | "title": "overflow-scrolling", 95 | "specurl": "" 96 | }, 97 | { 98 | "name": "pointerevents", 99 | "title": "pointer-events", 100 | "specurl": "developer.mozilla.org/en/CSS/pointer-events" 101 | }, 102 | { 103 | "name": "rgba", 104 | "title": "rgba()", 105 | "specurl": "http://dev.w3.org/csswg/css3-color/#rgba-color" 106 | }, 107 | { 108 | "name": "textshadow", 109 | "title": "text-shadow", 110 | "specurl": "http://dev.w3.org/csswg/css3-text/#text-shadow" 111 | }, 112 | { 113 | "name": "userselect", 114 | "title": "user-select", 115 | "specurl": "" 116 | }, 117 | { 118 | "name": "cssanimations", 119 | "title": "CSS Animations", 120 | "specurl": "http://dev.w3.org/csswg/css3-animations/" 121 | }, 122 | { 123 | "name": "csscolumns", 124 | "title": "CSS Columns", 125 | "specurl": "http://dev.w3.org/csswg/css3-multicol/" 126 | }, 127 | { 128 | "name": "cssgradients", 129 | "title": "CSS Gradients", 130 | "specurl": "http://dev.w3.org/csswg/css3-images/#gradients" 131 | }, 132 | { 133 | "name": "cssreflections", 134 | "title": "CSS Reflections" 135 | }, 136 | { 137 | "name": "csstransforms", 138 | "title": "CSS 2D Transforms", 139 | "specurl": "http://dev.w3.org/csswg/css3-2d-transforms/" 140 | }, 141 | { 142 | "name": "csstransforms3d", 143 | "title": "CSS 3D Transforms", 144 | "specurl": "http://dev.w3.org/csswg/css3-3d-transforms/" 145 | }, 146 | { 147 | "name": "csstransitions", 148 | "title": "CSS Transitions", 149 | "specurl": "http://dev.w3.org/csswg/css3-transitions/" 150 | } 151 | ] 152 | }, 153 | { 154 | "name": "html5", 155 | "title": "HTML5", 156 | "features": [ 157 | { 158 | "name": "applicationcache", 159 | "title": "applicationCache", 160 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html" 161 | }, 162 | { 163 | "name": "canvas", 164 | "title": "Canvas", 165 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html" 166 | }, 167 | { 168 | "name": "canvastext", 169 | "title": "Canvas Text", 170 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#text-0" 171 | }, 172 | { 173 | "name": "details", 174 | "title": "
", 175 | "specurl": "" 176 | }, 177 | { 178 | "name": "devicemotion", 179 | "title": "Device Motion Event", 180 | "specurl": "http://dev.w3.org/geo/api/spec-source-orientation.html" 181 | }, 182 | { 183 | "name": "deviceorientation", 184 | "title": "Device Orientation Event", 185 | "specurl": "http://dev.w3.org/geo/api/spec-source-orientation.html" 186 | }, 187 | { 188 | "name": "draganddrop", 189 | "title": "Drag and Drop", 190 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html" 191 | }, 192 | { 193 | "name": "file", 194 | "title": "File API", 195 | "specurl": "http://dev.w3.org/2006/webapi/FileAPI/" 196 | }, 197 | { 198 | "name": "hashchange", 199 | "title": "hashchange Event", 200 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#handler-window-onhashchange" 201 | }, 202 | { 203 | "name": "history", 204 | "title": "History Management", 205 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#the-history-interface" 206 | }, 207 | { 208 | "name": "audio", 209 | "title": "HTML5 Audio", 210 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-audio-element", 211 | "subfeatures": [ 212 | { 213 | "name": "audio-mp3", 214 | "title": "MP3" 215 | }, 216 | { 217 | "name": "audio-wav", 218 | "title": "WAV" 219 | }, 220 | { 221 | "name": "audio-m4a", 222 | "title": "M4A" 223 | }, 224 | { 225 | "name": "audio-ogg", 226 | "title": "Ogg" 227 | } 228 | ] 229 | }, 230 | { 231 | "name": "video", 232 | "title": "HTML5 Video", 233 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-video-element", 234 | "subfeatures": [ 235 | { 236 | "name": "video-h264", 237 | "title": "H.264" 238 | }, 239 | { 240 | "name": "video-ogg", 241 | "title": "Ogg" 242 | }, 243 | { 244 | "name": "video-webm", 245 | "title": "WebM" 246 | } 247 | ] 248 | }, 249 | { 250 | "name": "indexeddb", 251 | "title": "IndexedDB", 252 | "specurl": "http://www.w3.org/TR/IndexedDB/" 253 | }, 254 | { 255 | "name": "localstorage", 256 | "title": "localStorage", 257 | "specurl": "http://dev.w3.org/html5/webstorage/#the-localstorage-attribute" 258 | }, 259 | { 260 | "name": "meter", 261 | "title": "", 262 | "specurl": "" 263 | }, 264 | { 265 | "name": "postmessage", 266 | "title": "Cross-window Messaging", 267 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#web-messaging" 268 | }, 269 | { 270 | "name": "progressbar", 271 | "title": "", 272 | "specurl": "" 273 | }, 274 | { 275 | "name": "sessionstorage", 276 | "title": "sessionStorage", 277 | "specurl": "http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute" 278 | }, 279 | { 280 | "name": "sharedworkers", 281 | "title": "Shared Workers", 282 | "specurl": "http://dev.w3.org/html5/workers/#shared-workers-introduction" 283 | }, 284 | { 285 | "name": "websockets", 286 | "title": "Web Sockets", 287 | "specurl": "http://dev.w3.org/html5/websockets/" 288 | }, 289 | { 290 | "name": "websqldatabase", 291 | "title": "Web SQL Database", 292 | "specurl": "http://www.w3.org/TR/webdatabase/" 293 | }, 294 | { 295 | "name": "webworkers", 296 | "title": "Web Workers", 297 | "specurl": "http://www.whatwg.org/specs/web-apps/current-work/complete/workers.html" 298 | } 299 | ] 300 | }, 301 | { 302 | "name": "inputtypes", 303 | "title": "Input Types", 304 | "features": [ 305 | { 306 | "name": "search", 307 | "title": "search", 308 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#text-state-and-search-state" 309 | }, 310 | { 311 | "name": "tel", 312 | "title": "tel", 313 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#telephone-state" 314 | }, 315 | { 316 | "name": "url", 317 | "title": "url", 318 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#url-state" 319 | }, 320 | { 321 | "name": "email", 322 | "title": "email", 323 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#e-mail-state" 324 | }, 325 | { 326 | "name": "datetime", 327 | "title": "datetime", 328 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#date-and-time-state" 329 | }, 330 | { 331 | "name": "date", 332 | "title": "date", 333 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#date-state" 334 | }, 335 | { 336 | "name": "month", 337 | "title": "month", 338 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#month-state" 339 | }, 340 | { 341 | "name": "week", 342 | "title": "week", 343 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#week-state" 344 | }, 345 | { 346 | "name": "time", 347 | "title": "time", 348 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#time-state" 349 | }, 350 | { 351 | "name": "datetime-local", 352 | "title": "datetime-local", 353 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#local-date-and-time-state" 354 | }, 355 | { 356 | "name": "number", 357 | "title": "number", 358 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#number-state" 359 | }, 360 | { 361 | "name": "range", 362 | "title": "range", 363 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#range-state" 364 | }, 365 | { 366 | "name": "color", 367 | "title": "color", 368 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#color-state" 369 | } 370 | ] 371 | }, 372 | { 373 | "name": "input", 374 | "title": "Input Attributes", 375 | "features": [ 376 | { 377 | "name": "autocomplete", 378 | "title": "autocomplete", 379 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-autocomplete-attribute" 380 | }, 381 | { 382 | "name": "autofocus", 383 | "title": "autofocus", 384 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#attr-fe-autofocus" 385 | }, 386 | { 387 | "name": "list", 388 | "title": "list", 389 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#attr-input-list" 390 | }, 391 | { 392 | "name": "placeholder", 393 | "title": "placeholder", 394 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-placeholder-attribute" 395 | }, 396 | { 397 | "name": "max", 398 | "title": "max", 399 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-min-and-max-attributes" 400 | }, 401 | { 402 | "name": "min", 403 | "title": "min", 404 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-min-and-max-attributes" 405 | }, 406 | { 407 | "name": "multiple", 408 | "title": "multiple", 409 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-multiple-attribute" 410 | }, 411 | { 412 | "name": "pattern", 413 | "title": "pattern", 414 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-pattern-attribute" 415 | }, 416 | { 417 | "name": "required", 418 | "title": "required", 419 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-required-attribute" 420 | }, 421 | { 422 | "name": "step", 423 | "title": "step", 424 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#the-step-attribute" 425 | } 426 | ] 427 | }, 428 | { 429 | "name": "misc", 430 | "title": "Miscellaneous", 431 | "features": [ 432 | { 433 | "name": "cookies", 434 | "title": "Cookies", 435 | "specurl": "" 436 | }, 437 | { 438 | "name": "customprotocolhandler", 439 | "title": "Custom Protocol Handlers", 440 | "specurl": "" 441 | }, 442 | { 443 | "name": "datauri", 444 | "title": "data URIs", 445 | "specurl": "" 446 | }, 447 | { 448 | "name": "emoji", 449 | "title": "Emoji", 450 | "specurl": "http://en.wikipedia.org/wiki/Emoji" 451 | }, 452 | { 453 | "name": "fullscreen", 454 | "title": "Fullscreen API", 455 | "specurl": "https://developer.mozilla.org/en/API/Fullscreen" 456 | }, 457 | { 458 | "name": "geolocation", 459 | "title": "Geolocation API", 460 | "specurl": "http://dev.w3.org/geo/api/spec-source.html" 461 | }, 462 | { 463 | "name": "inlinesvg", 464 | "title": "Inline SVG", 465 | "specurl": "http://dev.w3.org/html5/spec/Overview.html#svg-0" 466 | }, 467 | { 468 | "name": "smil", 469 | "title": "SMIL", 470 | "specurl": "http://www.w3.org/TR/REC-smil/" 471 | }, 472 | { 473 | "name": "svg", 474 | "title": "SVG", 475 | "specurl": "http://www.w3.org/TR/SVG/" 476 | }, 477 | { 478 | "name": "svgclippaths", 479 | "title": "SVG Clip paths", 480 | "specurl": "http://www.w3.org/TR/SVG/masking.html#ClipPathProperty" 481 | }, 482 | { 483 | "name": "touch", 484 | "title": "Touch Events", 485 | "specurl": "http://www.w3.org/TR/2011/WD-touch-events-20110505/" 486 | }, 487 | { 488 | "name": "webgl", 489 | "title": "WebGL", 490 | "specurl": "http://www.khronos.org/registry/webgl/specs/latest/" 491 | }, 492 | { 493 | "name": "webp", 494 | "title": "WebP", 495 | "specurl": "http://code.google.com/speed/webp/" 496 | } 497 | ] 498 | } 499 | ] 500 | } 501 | --------------------------------------------------------------------------------