From 41b1322a1b48c68eeea6b6bd9f1bf6016a4d3014 Mon Sep 17 00:00:00 2001 From: Shawn Jansepar Date: Sat, 11 Jan 2014 16:51:37 -0800 Subject: [PATCH 001/146] First pass at implementing the new picture element standard --- bower.json | 2 +- index.html | 8 +- picturefill.js | 270 +++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 234 insertions(+), 46 deletions(-) diff --git a/bower.json b/bower.json index 4568fdd6..e137331c 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "picturefill", "repo": "scottjehl/picturefill", "description": "A Responsive Images approach that you can use today!", - "version": "1.2.1", + "version": "2.0.0", "main": "picturefill.js", "scripts": [ "picturefill.js", diff --git a/index.html b/index.html index cd0cbb0b..a57b1e9b 100644 --- a/index.html +++ b/index.html @@ -18,10 +18,10 @@

Picturefill: A <picture> element polyfill

For more info: see project home.

- - - - + + + + diff --git a/picturefill.js b/picturefill.js index 209dbe9f..f06ef5b1 100644 --- a/picturefill.js +++ b/picturefill.js @@ -1,55 +1,243 @@ -/*! Picturefill - Responsive Images that work today. (and mimic the proposed Picture element with span elements). Author: Scott Jehl, Filament Group, 2012 | License: MIT/GPLv2 */ - -(function( w ){ +/*! Picturefill - Responsive Images that work today. + * Author: Scott Jehl, Filament Group, 2012 + * License: MIT/GPLv2 + * Spec: http://picture.responsiveimages.org/ + */ +(function(w, doc) { // Enable strict mode "use strict"; + var img; + w.srcsetSupported = function() { + img = img || new Image(); + return 'srcset' in img; + } + + // /** + // * Get width of browser in CSS pixels + // * http://www.howtocreate.co.uk/tutorials/javascript/browserwindow + // */ + w._getViewportWidth = function() { + if (typeof( window.innerWidth ) == 'number') { + return window.innerWidth; + } else { + return document.documentElement.clientWidth || document.body && document.body.clientWidth; + } + }; + + w._matchesMedia = function(media) { + return w.matchMedia && w.matchMedia(media).matches; + } + + /* + * Takes a string of sizes and returns the width in pixels as an int + */ + w._findWidthFromSourceSize = function(sourceSizeListStr) { + // Split up source size list, ie (max-width: 30em) 100%, (max-width: 50em) 50%, 33% + var sourceSizeList = sourceSizeListStr.trim().split(/\s*,\s*/); + var winningLength; + for (var i=0, len=sourceSizeList.length; i < len; i++) { + // Match ? length, ie (min-width: 50em) 100% + var sourceSize = sourceSizeList[i]; + var match = sizes.match(/(\([^\s]+\))?\s*([^\s]+)/g); + if (!match) { + continue; + } + var length = match[1]; + var media; + if (!sourceSize[0]) { + // if there is no media query, choose this as our winning length + winningLength = length; + break; + } else { + media = sourceSize[0]; + } + + if (w._matchesMedia(media)) { + // if the media query matches, choose this as our winning length + // and end algorithm + winningLength = length; + break; + } + } + + // default to 300px if no length was selected + if (!winningLength) { + winningLength = '300px'; + } + + // if winningLength is a percentage, calculate width, else, use number + var winningLengthInt; + if (winningLength.slice(-1) === '%') { + // grab the width of the viewport to determine # of pixeles based on + // percentage + var viewportWidth = w._getViewportWidth(); + winningLengthInt = viewportWidth * (parseInt(winningLength.slice(0, -1), 10) / 100); + } else { + winningLengthInt = parseInt(winningLength, 10); + } + return winningLengthInt; + }; + + w._getDpr = function() { + return (window.devicePixelRatio || 1); + } + + /** + * Takes a srcset in the form of url/ + * ex. images/pic-medium.png 1x, images/pic-medium-2x.png 2x and + * images/pic-medium.png 400w, images/pic-medium-2x.png 800w + * Get an array of image candidates in the form of + * {url: "/foo/bar.png", resolution: 1} + * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value + * If sizes is specified, resolution is calculated + */ + w._getCandidatesFromSourceSet = function(srcset, sizes) { + var candidates = srcset.trim().split(/\s*,\s*/); + var formattedCandidates = []; + for (var i = 0; i < candidates.length; i++) { + var candidate = candidates[i]; + var candidateArr = candidate.split(/\s+/); + var sizeDescriptor = candidateArr[1]; + var resolution; + if (sizes) { + var width = w._findWidthFromSourceSize(sizes); + // get the dpr by taking the length / image width + // TODO: must take into account the "w" on sizeDescriptors + resolution = parseFloat((parseInt(sizeDescriptor, 10)/width).toFixed(2)); + } else { + // get the dpr by grabbing the value of Nx + resolution = sizeDescriptor ? parseFloat(sizeDescriptor.slice(0, -1), 10) : w._getDpr(); + } + + var formattedCandidate = { + url: candidateArr[0], + resolution: resolution + }; + formattedCandidates.push(formattedCandidate); + } + return formattedCandidates; + }; + w.picturefill = function() { - var ps = w.document.getElementsByTagName( "span" ); - - // Loop the pictures - for( var i = 0, il = ps.length; i < il; i++ ){ - if( ps[ i ].getAttribute( "data-picture" ) !== null ){ - - var sources = ps[ i ].getElementsByTagName( "span" ), - matches = []; - - // See if which sources match - for( var j = 0, jl = sources.length; j < jl; j++ ){ - var media = sources[ j ].getAttribute( "data-media" ); - // if there's no media specified, OR w.matchMedia is supported - if( !media || ( w.matchMedia && w.matchMedia( media ).matches ) ){ - matches.push( sources[ j ] ); - } - } + // Loop through all images on the page that are `` or `` + var pictures = doc.getElementsByTagName("picture"); + pictures = pictures.length ? pictures : doc.getElementsByTagName("span"); + for (var i=0, plen = pictures.length; i < plen; i++) { + var picture = pictures[i]; + if (picture.nodeName !== 'PICTURE' && picture.getAttribute('data-picture') === null) { + continue; + } + var matches = []; + var sources = picture.childNodes; + // Go through each child, and if they have media queries, evaluate them + // and add them to matches + for (var j=0, slen = sources.length; j < slen; j++) { + var source = sources[j]; + if (source.nodeName !== 'SOURCE' && source.nodeName !== 'SPAN') { + continue; + } + var media = sources[j].getAttribute( "data-media" ); + + // if source does not have a srcset attribute, skip + if (!source.hasAttribute('data-srcset')) { + continue; + } - // Find any existing img element in the picture element - var picImg = ps[ i ].getElementsByTagName( "img" )[ 0 ]; + // if there's no media specified, OR w.matchMedia is supported + if(!media || w._matchesMedia(media)){ + matches.push(source); + } + } - if( matches.length ){ - var matchedEl = matches.pop(); + // Find any existing img element in the picture element + var picImg = picture.getElementsByTagName("img")[0]; + if (matches.length) { + var matchedEl = matches.pop(); if( !picImg || picImg.parentNode.nodeName === "NOSCRIPT" ){ - picImg = w.document.createElement( "img" ); - picImg.alt = ps[ i ].getAttribute( "data-alt" ); - } - else if( matchedEl === picImg.parentNode ){ - // Skip further actions if the correct image is already in place - continue; + picImg = doc.createElement( "img" ); + picImg.alt = picture.getAttribute( "data-alt" ); } + var srcset = matchedEl.getAttribute('data-srcset'); + var candidates; + if (matchedEl.hasAttribute('sizes')) { + var sizes = matchedEl.getAttribute('sizes'); + candidates = w._getCandidatesFromSourceSet(srcset, sizes); + } else { + candidates = w._getCandidatesFromSourceSet(srcset); + } - picImg.src = matchedEl.getAttribute( "data-src" ); - matchedEl.appendChild( picImg ); - picImg.removeAttribute("width"); - picImg.removeAttribute("height"); - } - else if( picImg ){ - picImg.parentNode.removeChild( picImg ); - } - } - } + // Sort image candidates before figuring out which one to use + var sortedCandidates = candidates.sort(function(a, b) { + return a.resolution > b.resolution; + }); + // Determine which image to use based on image candidates array + for (var j=0; j < sortedCandidates.length; j++) { + var candidate = sortedCandidates[j]; + if (candidate.resolution >= w._getDpr()) { + picImg.src = candidate.url; + break; + } + } + + // If none of the image candidates worked out, + // set src to data-src + if (!picImg.src && picImg.hasAttribute('data-src')) { + picImg.src = picImg.getAttribute('data-src'); + } + matchedEl.appendChild(picImg); + } + + } }; + + // w.picturefill = function() { + // var ps = w.document.getElementsByTagName( "span" ); + + // // Loop the pictures + // for( var i = 0, il = ps.length; i < il; i++ ){ + // if( ps[ i ].getAttribute( "data-picture" ) !== null ){ + + // var sources = ps[ i ].getElementsByTagName( "span" ), + // matches = []; + + // // See if which sources match + // for( var j = 0, jl = sources.length; j < jl; j++ ){ + // var media = sources[ j ].getAttribute( "data-media" ); + // // if there's no media specified, OR w.matchMedia is supported + // if( !media || ( w.matchMedia && w.matchMedia( media ).matches ) ){ + // matches.push( sources[ j ] ); + // } + // } + + // // Find any existing img element in the picture element + // var picImg = ps[ i ].getElementsByTagName( "img" )[ 0 ]; + + // if( matches.length ){ + // var matchedEl = matches.pop(); + // if( !picImg || picImg.parentNode.nodeName === "NOSCRIPT" ){ + // picImg = w.document.createElement( "img" ); + // picImg.alt = ps[ i ].getAttribute( "data-alt" ); + // } + // else if( matchedEl === picImg.parentNode ){ + // // Skip further actions if the correct image is already in place + // continue; + // } + + // picImg.src = matchedEl.getAttribute( "data-src" ); + // matchedEl.appendChild( picImg ); + // picImg.removeAttribute("width"); + // picImg.removeAttribute("height"); + // } + // else if( picImg ){ + // picImg.parentNode.removeChild( picImg ); + // } + // } + // } + // }; + // Run on resize and domready (w.load as a fallback) if( w.addEventListener ){ w.addEventListener( "resize", w.picturefill, false ); @@ -64,4 +252,4 @@ w.attachEvent( "onload", w.picturefill ); } -}( this )); +})(this, document); From da5113ecb4dec78193e74747b05b5e605a4f61b0 Mon Sep 17 00:00:00 2001 From: Shawn Jansepar Date: Sun, 12 Jan 2014 15:15:59 -0800 Subject: [PATCH 002/146] Multiple improvements, adds tests, adds example --- {external/imgs => images}/extralarge.jpg | Bin {external/imgs => images}/large.jpg | Bin {external/imgs => images}/medium.jpg | Bin images/pic-large.png | Bin 0 -> 163326 bytes images/pic-medium.png | Bin 0 -> 82354 bytes images/pic-small.png | Bin 0 -> 35483 bytes {external/imgs => images}/psd/extralarge.psd | Bin {external/imgs => images}/psd/large.psd | Bin {external/imgs => images}/psd/medium.psd | Bin {external/imgs => images}/psd/small.psd | Bin {external/imgs => images}/small.jpg | Bin index.html | 26 +- picturefill.js | 97 +- tests/picturefill.html | 141 + tests/resources/jquery-1.7.1.js | 9266 ++++++++++++++++++ tests/resources/qunit-1.10.0.css | 235 + tests/resources/qunit-1.10.0.js | 1977 ++++ 17 files changed, 11693 insertions(+), 49 deletions(-) rename {external/imgs => images}/extralarge.jpg (100%) rename {external/imgs => images}/large.jpg (100%) rename {external/imgs => images}/medium.jpg (100%) create mode 100644 images/pic-large.png create mode 100644 images/pic-medium.png create mode 100644 images/pic-small.png rename {external/imgs => images}/psd/extralarge.psd (100%) rename {external/imgs => images}/psd/large.psd (100%) rename {external/imgs => images}/psd/medium.psd (100%) rename {external/imgs => images}/psd/small.psd (100%) rename {external/imgs => images}/small.jpg (100%) create mode 100644 tests/picturefill.html create mode 100644 tests/resources/jquery-1.7.1.js create mode 100644 tests/resources/qunit-1.10.0.css create mode 100644 tests/resources/qunit-1.10.0.js diff --git a/external/imgs/extralarge.jpg b/images/extralarge.jpg similarity index 100% rename from external/imgs/extralarge.jpg rename to images/extralarge.jpg diff --git a/external/imgs/large.jpg b/images/large.jpg similarity index 100% rename from external/imgs/large.jpg rename to images/large.jpg diff --git a/external/imgs/medium.jpg b/images/medium.jpg similarity index 100% rename from external/imgs/medium.jpg rename to images/medium.jpg diff --git a/images/pic-large.png b/images/pic-large.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3871099105ae89aa3b0e0194604a18d5cf5482 GIT binary patch literal 163326 zcmZU)Wl&sEur)fkySvNa?lQQ$ySuvt!r<-_+y{4u1b26W1a}Ay2^R9@%DeYgz4K#N zpYC4Wr@MC5slB>(th%Zk8Zt35002N!keAj30HBQi$)||W|5ouO%YQ4Os)Ll2x`LDx zrMjn^t%I`-0HBXlZ(yg5JG*q9vjO`v&1+7>6Ms_hl#xkkZZ8cM3JVKQn>H>CNqrDt ztAT~dL6t_!7*|>hF0};EPJWNy51tqO{qc5^pA*p0({oaNQFvW#2!NefSznjWzynvE z`RB$%VynJ%CNp{vazIlJ0ARu7yp(Kf>ywk{@AFo^0LsTPhB$Adzgk!Q{7rE1qi_JQ zz@Y8lfi5s(Od|kng&qSLg#o*Td&ZVO>kAcvv(w>`B)>_IQ`KezHegi$n(2G$jL(kZ z0>aP%v|O2rC{W-H)F~Mp7|CL?6VUn?IT;~7+E}IBXA$8DtjBusw#p$>(rA z#^UVoR*rg>Z0irF8TpCHA0d(a`EYIlmf0`n{FMgEqks$qi7c#BqV~@nR)0^BepV&JY``v!^SZ&Lu&bKJj2Ym`G=o^g@i-~RVNp1Jj9S?sG=@=RbV&&$-Df3Z6Z*rnv>3GE4DMAxW#QEF)l(Jlw;k5Ggec{onA_vr3>>j2t4jwlt)sU{un7R-1})rCwZk0U$&I1EOTcu&T!+dP zlRSo>y1RaZqZr`HhKolG!^A=!3caPGj=?PjS5XPYKv^cOQ?bSHA4Eq`F3Llv#r*_% zra~WactTf8uu=1;2v10rBLqZ!lci5>oPdrivChE3lZ0s4Xe02-x@how!w`qL%4#jJ zc#9jx=@y?ZIGvF_Vr?cT6;mt_p_(fb^3z8FErqgyCowPPgM?^GPUA0V@MWqR61F|u@0khG%&b(o?At%Uzj)bn21V|zy)gkp0-0{Q~ zuo0*i92WEvocHqeRP}21a&QlDciCq;?3v{qO7u|jGV+r1JoPX;Am20H!#dzRK|0tN z)|y_P<{oDra2g>Q$s0Br-U9fLCAuX*3s(!8efNFpec62lEOacGRE|{Y zRQlB4rN*UWrKzQmQkT+Y%P>n_OC(E%5us81QJazNQSQ;pk!U(XI&a!Ax;R=x+6p=u z+ABIOx_L!(1y1>M`A9{wj2?Dg23DFYV6W0^&tn8?V?w)f+>AjEK?|;d)W&QJUQ4hi ztRPu8VmFQF_I=g2ilC~XoS-kzHN_Cj3U}!eJG9S<*STlBcuw$mlW}8lv2k{IX3QSU z8$cT-6TR1Rmg=8n`HewlFO_i>isg!#Q(ij0IwY>9dnMt4FKQD^n}4E5Hl;N* z)qZadmP&U)=(tdfa z;n(km_3d{~?Dc=@Dys-e{AArM3ubzXeRM8mpGKdmUl|_dP^Hn{QIkj#2;+z}(U?(p z2^9$8hzq!g`Lnpu`NizsC#6RtY&}=4=e+A3avfTUY;7H~tkxXnT(4a}ufIbgyJTWU z4dNY?RHo~*W_A6UjcS8xC7h@(0hh#=4kRvlJb8RZE%mim7F+zj_r5$|^L|zJCI*-M zK|ugU+ecp}4J>XpFLs&iwB7sp>BKf#-qcmh?{Zm*PX<(d-S`iOG%BS`i>5<-PJ5DN;=OO!YkZcaq%NUuu^>x$-j>^Lxdp-R{7R^Uq*K`0@09#WH2T;3 z4AP9lyv`)+q{${pQ)h6|Mc+~|^IQ0DzY~XJGEtBKX0SQsE=PY4xSkSX-nP(pYnW=U zp}P3{KxGs|iAOPs%vvPd-MxIJq3t8(s01cD3q6|rnw=Y1%S^zst0m?~dnR9ka);0`8N)G^cF}rrY((8#2s} zyK=qIy0d~@UIWjbQUh;Z3rYC+4P7s`zXd9tubsm;N40DjcRmmkk+c%)qPqqU*3`FqpvIh-FVP+QTze8UYgxKq5=*^XJ8xcY9}D7@3v7a&H=@oK^1>U{39COq{u z%_H?L7pXlqN+Evo`uF8-{~ydZ3lF9@nyvABwU(lWAimchoL9VmexY1VPkry*eeNsx zXt?XO8FM%}c3$~;U_6J>N3r@K^zfTNgkX#yJu5~DGVM9dAF}xo)QsKUf~^G6(Cdfe z@Rtb>hk6bq2E_3LNVjkE!d~>|+H0W1Q?aUGnh{DPf{e0RTQC0PR%O-vf-fN5c5*UnEIYd-d?vc)?6H3z%CN4mAvgCJXxX`d zpjk3I*f~&Kr=0qao>xC$=(+Oy_{k+R&Ig;e?<5DAHWvLV*lOxRdgj!8dB=lEfH4W< zgF}c^mogb%i;S10#G*-6(HJlD8;KYba#<^h9ZNkB8^@sKq1R==b5&4FQoh@9ET}1} zC}?O`;UD(@>QZr-&tx~X(#?SnwHu&&O{3KYEBVF8xLrXxbO+8F_ zLZ{~><#-?5;&Kd;b4=zV`{e!YW<-5d{@8l;x7NBtgX0TvI(MI4`W#+CzxI~a?_=sM zx~J&|y@LkwE?uubwtosp>iP5BwjH|yzcw^iRJXiL6dYvbudQ_4er@>OcKxtZ6vA=e zRQqSAY%NJRnMCNaNAc@npzYdN)a~d8rH9dH_YbAs zFJ+Ct63-HY{DXfcPBZcu@}G$D{p~p0&h=9{WIMFN5oX9_7~jzgi7C`9%6-xQ4cz12 zI;~w+UB2ln|9t!scw@Bl`;6$qnIm7$3dQeBrmn8;xEXXeILgX#9rl`9EPPL9g#pMl z!7;@Vo36v?lv7{;t-rjH)XeXx?Ah#jd8;1a_h7Og0-T^NXZvPKEA<$mpZ@F>O9Z5M zz#>vHa1s=Mv5p+#CBPHTpx1V$31L^*HAz-o@34RmaZ4 zcgyhkv2vBs&jeMhA6HO*Fpcn;2ySS1s5(eA(JGOCaz7I4VwvLS;wKXzF25i|qp>5b zW4{^l)n-)hcP$I+(x|(27&F-unG1YKEVi7-@~*CO2>fvE=&pXGxU^0?cW#qA&i(q4 z{^{oGQ}ve(}9#`Z%No6djDjcKW%%_jQI zwUOGZI4Skyd9dGnq#|TuBzN3|WGw8z>Nn$j7hLhF7Vc#D_WdO`peUgK0sPl|Xt~br zYt&L9LO%!D2}NOGz~O2GR^#_LH+i?6#EvAgfUhqFivj`P+)6z?x89mCLbXaL%EU%L zClw_9k$lU2W_|gzq`Y2tOgjDJnBqj7eD-Z7#Q4mVnjND)sUO;2$~m>t9#eMU-W|D% zEeKg6heJU`0og{~HrvkGPDoa@w2Py*nWJ^4Ma;^{wsD{FNcj+X-*nXvo zIxs4#sG}U-{Cq$9Nc{%cVExAywZYPKMFj<{- zign@6<<7FsN>`*;vA^okg-PoR{0nx3`Fn7CqI%A|wSJfd=KofHYPmbP|9q^~D+Yi4 z_kqOKZD!s2Lhk;uB}LXR z(x2uRmRXYP4c@z?yImYbobPmf%2VsqZO6VXX2^b13u~>_!b{(lY?kdh+ih`OF(!Go zsES6vrUOZ=Lw0$4-tG!}@_V~idWqj+-lBe)O-u`7rn(snn7TK*2k&cZC^mbM z)4lyv$gcNy;(cB?+VhrYVwTFs?AA4@i-U9UYKN!V&%X2Ul;}@e>|(@c`qvqkhP%N{ zr^h($eZhZ<;7y8l2(dqziqyTwz4$EYUrXQ1MK`uS%st-y)%jF*g9OV8K(;76Z^kH0 z2OOCpfL`$dA_)Ki4S@SH+*yMm*l-P+*79`s4-Aw5C`^!n9}~(G1Y?`)JAhz2XEZ>b ztx*V*SWK`ck%j3ijm{bNVnN!1aT4yAs(~vps*b~hxeeF)&D0wzec)#^ZXGenNUFP& zhens;4{j0R9ei8sde{ha=?Tg<%sXk41E>S7G(upScX;T;-lY0$(}4ZFf0#$oWN3A6 z0?k{x5l}NjG(&C1bq0-NdD0H9F3(_m{o6**I_tWd*O|NVq4D&_)bSASRKbAM9&kVN zr2f=vFK=&`wU~*6$zOTGOkd(TdO~#3vKi!oh7>m9H94&ru$0Qx(Sq!W+wJi3Inu}} ziK&A5h3T@!y+*lKOjo$9PmV@=Syo9QPwA7)Y1#F3dvD;?<@H4;(GUKgJj7gu967u& zC$L>}sde&esC?E&s=}O~&=3&D?JKEI;lFgc;`*UsxXtr49`3k^9rh`cX!8X+D?Zhh z`o8`}%s}--+aX%Q?7?&;_F(iB6QZo}YlW+)GNmbDQ}CD`&G0e$x@_5jWQ%HzZ?kcg zzpc||r!u$QEAiHSZ+a}wM#^Ri#1pMEa`p3GzB`IL)RC&hb4n`GswV69KbRW3ROWXi z;o||e#r$aZS6`I4PP@vvnx@DIUVAt=s||Mx+0vjZDf0-cM3+$0NMiFCHyoZe`&%xDhq^ts?^Lg6%mDZ zMJ{^0v>nbfPFyZ!PQw9CGs}C+9%yb0;_l>9CBeCwk#CU!`J;J|^wqHToLO*v>~=

*%!%`M7A_ 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 KMNUMnLSTX$M~3VG literal 0 HcmV?d00001 diff --git a/images/pic-medium.png b/images/pic-medium.png new file mode 100644 index 0000000000000000000000000000000000000000..eda934dd511f1c7fcfe6e5c04d505fb1c93dd8fb GIT binary patch literal 82354 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 bg3bO9e8(4HYu0VJ00000NkvXXu0mjffoj0Z literal 0 HcmV?d00001 diff --git a/images/pic-small.png b/images/pic-small.png new file mode 100644 index 0000000000000000000000000000000000000000..178da8512601609197dd6b5e1029a483f64355d5 GIT binary patch literal 35483 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 Kj<_wAcc<^I%Mv-l|pmpl&&Li;6u- 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 y^mGa-X!VFk!-gpDl0?0000Picturefill: A <picture> element polyfill

For more info: see project home.

+ +
+ + + + +
- - - - - +
+ + + + + - - - + + + +
diff --git a/picturefill.js b/picturefill.js index f06ef5b1..ae74e040 100644 --- a/picturefill.js +++ b/picturefill.js @@ -14,22 +14,40 @@ return 'srcset' in img; } - // /** - // * Get width of browser in CSS pixels - // * http://www.howtocreate.co.uk/tutorials/javascript/browserwindow - // */ - w._getViewportWidth = function() { - if (typeof( window.innerWidth ) == 'number') { - return window.innerWidth; - } else { - return document.documentElement.clientWidth || document.body && document.body.clientWidth; - } - }; - + /* + * Shortcut method for matchMedia (for easy overriding in tests) + */ w._matchesMedia = function(media) { return w.matchMedia && w.matchMedia(media).matches; } + /* + * Shortcut method for `devicePixelRatio` (for easy overriding in tests) + */ + w._getDpr = function() { + return (window.devicePixelRatio || 1); + } + + /** + * Get width in css pixel value from a "length" value + * http://dev.w3.org/csswg/css-values-3/#length-value + */ + var lengthEl; + w._getCachedLengthEl = function() { + lengthEl = lengthEl || document.createElement('div'); + if (!doc.body) { + return; + } + doc.body.appendChild(lengthEl); + return lengthEl; + } + w._getWidthFromLength = function(length) { + var lengthEl = w._getCachedLengthEl(); + lengthEl.style.cssText = 'width: ' + length + ';'; + // Using offsetWidth to get width from CSS + return lengthEl.offsetWidth; + }; + /* * Takes a string of sizes and returns the width in pixels as an int */ @@ -40,18 +58,20 @@ for (var i=0, len=sourceSizeList.length; i < len; i++) { // Match ? length, ie (min-width: 50em) 100% var sourceSize = sourceSizeList[i]; - var match = sizes.match(/(\([^\s]+\))?\s*([^\s]+)/g); + + // Split "(min-width: 50em) 100%" into separate strings + var match = /(\([^)]+\))?\s*([^\s]+)/g.exec(sourceSize); if (!match) { continue; } - var length = match[1]; + var length = match[2]; var media; - if (!sourceSize[0]) { + if (!match[1]) { // if there is no media query, choose this as our winning length winningLength = length; break; } else { - media = sourceSize[0]; + media = match[1]; } if (w._matchesMedia(media)) { @@ -64,30 +84,20 @@ // default to 300px if no length was selected if (!winningLength) { - winningLength = '300px'; + return 300; } - // if winningLength is a percentage, calculate width, else, use number - var winningLengthInt; - if (winningLength.slice(-1) === '%') { - // grab the width of the viewport to determine # of pixeles based on - // percentage - var viewportWidth = w._getViewportWidth(); - winningLengthInt = viewportWidth * (parseInt(winningLength.slice(0, -1), 10) / 100); - } else { - winningLengthInt = parseInt(winningLength, 10); - } + // pass the length to a method that can properly determine length + // in pixels based on these formats: http://dev.w3.org/csswg/css-values-3/#length-value + var winningLengthInt = w._getWidthFromLength(winningLength); return winningLengthInt; }; - w._getDpr = function() { - return (window.devicePixelRatio || 1); - } - /** * Takes a srcset in the form of url/ - * ex. images/pic-medium.png 1x, images/pic-medium-2x.png 2x and - * images/pic-medium.png 400w, images/pic-medium-2x.png 800w + * ex. "images/pic-medium.png 1x, images/pic-medium-2x.png 2x" or + * "images/pic-medium.png 400w, images/pic-medium-2x.png 800w" or + * "images/pic-small.png" * Get an array of image candidates in the form of * {url: "/foo/bar.png", resolution: 1} * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value @@ -96,19 +106,23 @@ w._getCandidatesFromSourceSet = function(srcset, sizes) { var candidates = srcset.trim().split(/\s*,\s*/); var formattedCandidates = []; - for (var i = 0; i < candidates.length; i++) { + if (sizes) { + var widthInCssPixels = w._findWidthFromSourceSize(sizes); + } + for (var i = 0, len = candidates.length; i < len; i++) { var candidate = candidates[i]; var candidateArr = candidate.split(/\s+/); var sizeDescriptor = candidateArr[1]; var resolution; + if (sizeDescriptor && (sizeDescriptor.slice(-1) === 'w' || sizeDescriptor.slice(-1) === 'x')) { + sizeDescriptor = sizeDescriptor.slice(0, -1); + } if (sizes) { - var width = w._findWidthFromSourceSize(sizes); - // get the dpr by taking the length / image width - // TODO: must take into account the "w" on sizeDescriptors - resolution = parseFloat((parseInt(sizeDescriptor, 10)/width).toFixed(2)); + // get the dpr by taking the length / width in css pixels + resolution = parseFloat((parseInt(sizeDescriptor, 10)/widthInCssPixels).toFixed(2)); } else { // get the dpr by grabbing the value of Nx - resolution = sizeDescriptor ? parseFloat(sizeDescriptor.slice(0, -1), 10) : w._getDpr(); + resolution = sizeDescriptor ? parseFloat(sizeDescriptor, 10) : w._getDpr(); } var formattedCandidate = { @@ -161,8 +175,8 @@ } var srcset = matchedEl.getAttribute('data-srcset'); var candidates; - if (matchedEl.hasAttribute('sizes')) { - var sizes = matchedEl.getAttribute('sizes'); + if (matchedEl.hasAttribute('data-sizes')) { + var sizes = matchedEl.getAttribute('data-sizes'); candidates = w._getCandidatesFromSourceSet(srcset, sizes); } else { candidates = w._getCandidatesFromSourceSet(srcset); @@ -172,6 +186,7 @@ var sortedCandidates = candidates.sort(function(a, b) { return a.resolution > b.resolution; }); + debugger; // Determine which image to use based on image candidates array for (var j=0; j < sortedCandidates.length; j++) { var candidate = sortedCandidates[j]; diff --git a/tests/picturefill.html b/tests/picturefill.html new file mode 100644 index 00000000..a071c624 --- /dev/null +++ b/tests/picturefill.html @@ -0,0 +1,141 @@ + + + + + picturefill tests + + + + + + +
+ +
+
+ + + + + diff --git a/tests/resources/jquery-1.7.1.js b/tests/resources/jquery-1.7.1.js new file mode 100644 index 00000000..8ccd0ea7 --- /dev/null +++ b/tests/resources/jquery-1.7.1.js @@ -0,0 +1,9266 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!memory; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + marginDiv, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = marginDiv = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + conMarginTop, ptlm, vb, style, html, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; + vb = "visibility:hidden;border:0;"; + style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Figure out if the W3C box model works as expected + div.innerHTML = ""; + div.style.width = div.style.paddingLeft = "1px"; + jQuery.boxModel = support.boxModel = div.offsetWidth === 2; + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.style.cssText = ptlm + vb; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + body.removeChild( container ); + div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, attr, name, + data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { + attr = this[0].attributes; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + jQuery._data( this[0], "parsedAttrs", true ); + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var self = jQuery( this ), + args = [ parts[0], value ]; + + self.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + + // See #9699 for explanation of this approach (setting first, then removal) + jQuery.attr( elem, name, "" ); + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /\bhover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on.call( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and From 3488c6e0ca0eafe4dd5b065e866fbb5bd36dea38 Mon Sep 17 00:00:00 2001 From: Shawn Jansepar Date: Sun, 2 Mar 2014 16:01:29 -0800 Subject: [PATCH 012/146] Adding support for IE9 through the use of conditional video tags --- README.md | 270 +++++++++++++++++++++++++------------------------ index.html | 38 ++++--- picturefill.js | 24 ++++- 3 files changed, 183 insertions(+), 149 deletions(-) diff --git a/README.md b/README.md index a643a47e..714e96e8 100644 --- a/README.md +++ b/README.md @@ -1,131 +1,139 @@ -# Picturefill -A Responsive Images approach that you can use today that mimics the [proposed picture element](http://www.w3.org/TR/2013/WD-html-picture-element-20130226/) using `span`s, for safety sake. - - -* Author: Scott Jehl (c) 2012 (new proposal implemented by Shawn Jansepar) -* License: MIT/GPLv2 - -**Demo URL:** [http://jansepar.github.com/picturefill/](http://jansepar.github.com/picturefill/) - -**Draft Specification:** [http://picture.responsiveimages.org/](http://picture.responsiveimages.org/) - -**Note:** Picturefill works best in browsers that support CSS3 media queries. The demo page references (externally) the [matchMedia polyfill](https://github.com/paulirish/matchMedia.js/) which makes matchMedia work in `media-query`-supporting browsers that don't support `matchMedia`. `matchMedia` and the `matchMedia` polyfill are not required for `picturefill` to work, but they are required to support the `media` attributes on `picture` `source` elements. In non-media query-supporting browsers, the `matchMedia` polyfill will allow for querying native media types, such as `screen`, `print`, etc. - -## Markup pattern and explanation - -Mark up your responsive images like this. - -```html - - - - - - - - - -``` - -Or when using `sizes`: - -```html - - - - -``` - -### Explained... - -Notes on the markup above... - -* The `span[data-picture]` element's `alt` attribute is used as alternate text for the `img` element that picturefill generates upon a successful source match. -* The `span[data-picture]` element can contain any number of `span` elements. The above example may contain more than the average situation may call for. -* Each `span[data-srcset]` element must have a `data-srcset` attribute specifying the image path. -* It's generally a good idea to include one source element with no `media` qualifier, so it'll apply everywhere - typically a mobile-optimized image is ideal here. -* The `span[data-srcset]` can take in a single image (like "images/small.jpg"), or an array of images ("images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x). -* The `span[data-sizes]` attribute is available to specify the size of the image at different breakpoints. Then, in `data-srcset`, an array of images at different widths are supplied, and based on the breakpoints defined in `data-sizes`, the appropriate image will be chosen. So in the example above, "images/pic-small.png 400w, images/pic-medium.png 800w, images/pic-large.png 1200w" will be converted to "images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x" if the width of the device (in css pixels) was 800px; -* Each `[data-srcset]` element can have an optional `[data-media]` attribute to make it apply in specific media settings. Both media types and queries can be used, like a native `media` attribute, but support for media _queries_ depends on the browser (unsupporting browsers fail silently). -* The `matchMedia` polyfill (included in the `/external` folder) is necessary to support the `data-media` attribute across browsers (such as IE9), even in browsers that support media queries, although it is becoming more widely supported in new browsers. -* The `noscript` element wraps the fallback image for non-JavaScript environments, and including this wrapper prevents browsers from fetching the fallback image during page load (causing unnecessary overhead). Generally, it's a good idea to reference a small mobile optimized image here, as it's likely to be loaded in older/underpowered mobile devices. - - -### How the `img` is appended - -Upon finding a matching `span[data-src]` element, picturefill will generate an `img` element referencing that `span`'s `data-src` attribute value and append the `img` to the active, matching `span[data-src]` element. This means you can target CSS styles specific to the active image based on the breakpoint that is in play, perhaps by adding a class to each span. For example, if you have the following markup... - -```html - - - - -```` - -...then you could write styles specific to each of the images, which may be handy for certain layout situations. - -```css - .picture .sml img { /* Styles for the small image */ } - .picture .med img { /* Styles for the medium image */ } - .picture .lrg img { /* Styles for the large image */ } -```` - - -### HD Media Queries - -Picturefill natively supports HD(Retina) image replacement. While numerous other solutions exist, picturefill has the added benefit of performance for the user in only being served one image. - -* The `data-media` attribute supports [compound media queries](https://developer.mozilla.org/en-US/docs/CSS/Media_queries), allowing for very specific behaviors to emerge. For example, a `data-media="(min-width: 400px) and (min-device-pixel-ratio: 2.0)` attribute can be used to serve a higher resolution version of the source instead of a standard definition image. Note you currently also need to add the `-webkit-min-device-pixel-ratio` prefix (e.g. for iOS devices). - -```html - - - - - - - - - - - - - -``` - -* Note: Supporting this many breakpoints quickly adds size to the DOM and increases implementation and maintenance time, so use this technique sparingly. - -### Supporting IE Desktop - -Internet Explorer 8 and older have no support for CSS3 Media Queries, so in the examples above, IE will receive the first `data-src` - image reference (or the last one it finds that has no `data-media` attribute). If you'd like to serve a larger image to IE desktop -browsers, you might consider using conditional comments, like this: - -```html - - - - - - - - - -``` - -### Deferred loading - -If picturefill is deferred until after load is fired, images will not load unless the browser window is resized. -Picturefill is intentionally exposed to the global space, in the unusual situation where you might want to defer loading of picturefill you can explicitly call window.picturefill(). - -## Support - -Picturefill supports a broad range of browsers and devices (there are currently no known unsupported browsers), provided that you stick with the markup conventions provided. - +# Picturefill +A Responsive Images approach that you can use today that mimics the [proposed picture element](http://www.w3.org/TR/2013/WD-html-picture-element-20130226/) using `span`s, for safety sake. + + +* Author: Scott Jehl (c) 2012 (new proposal implemented by Shawn Jansepar) +* License: MIT/GPLv2 + +**Demo URL:** [http://jansepar.github.com/picturefill/](http://jansepar.github.com/picturefill/) + +**Draft Specification:** [http://picture.responsiveimages.org/](http://picture.responsiveimages.org/) + +**Note:** Picturefill works best in browsers that support CSS3 media queries. The demo page references (externally) the [matchMedia polyfill](https://github.com/paulirish/matchMedia.js/) which makes matchMedia work in `media-query`-supporting browsers that don't support `matchMedia`. `matchMedia` and the `matchMedia` polyfill are not required for `picturefill` to work, but they are required to support the `media` attributes on `picture` `source` elements. In non-media query-supporting browsers, the `matchMedia` polyfill will allow for querying native media types, such as `screen`, `print`, etc. + +## Markup pattern and explanation + +Mark up your responsive images like this. + +```html + + + + + +
+
+ + + + +
+``` + +Or when using `sizes`: + +```html + + + + + + + + +``` + +### Explained... + +Notes on the markup above... + +* The `picture` element's `alt` attribute is used as alternate text for the `img` element that picturefill generates upon a successful source match. +* The `picture` element can contain any number of `span` elements. The above example may contain more than the average situation may call for. +* Each `picture[data-srcset]` element must have a `data-srcset` attribute specifying the image path. +* It's generally a good idea to include one source element with no `media` qualifier, so it'll apply everywhere - typically a mobile-optimized image is ideal here. +* The `picture[data-srcset]` can take in a single image (like "images/small.jpg"), or an array of images ("images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x). +* The `picture[data-sizes]` attribute is available to specify the size of the image at different breakpoints. Then, in `data-srcset`, an array of images at different widths are supplied, and based on the breakpoints defined in `data-sizes`, the appropriate image will be chosen. So in the example above, "images/pic-small.png 400w, images/pic-medium.png 800w, images/pic-large.png 1200w" will be converted to "images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x" if the width of the device (in css pixels) was 800px; +* Each `[picture-srcset]` element can have an optional `[data-media]` attribute to make it apply in specific media settings. Both media types and queries can be used, like a native `media` attribute, but support for media _queries_ depends on the browser (unsupporting browsers fail silently). +* The `matchMedia` polyfill (included in the `/external` folder) is necessary to support the `data-media` attribute across browsers (such as IE9), even in browsers that support media queries, although it is becoming more widely supported in new browsers. +* The `noscript` element wraps the fallback image for non-JavaScript environments, and including this wrapper prevents browsers from fetching the fallback image during page load (causing unnecessary overhead). Generally, it's a good idea to reference a small mobile optimized image here, as it's likely to be loaded in older/underpowered mobile devices. + + +### How the `img` is appended + +Upon finding a matching `picture[data-src]` element, picturefill will generate an `img` element referencing that `span`'s `data-src` attribute value and append the `img` to the picture element. This means you can target CSS styles specific to the active image based on the breakpoint that is in play, perhaps by adding a class to each span. For example, if you have the following markup... + + +```html + + + + +```` + +...then you could write styles specific to each of the images, which may be handy for certain layout situations. + +```css + .picture .sml img { /* Styles for the small image */ } + .picture .med img { /* Styles for the medium image */ } + .picture .lrg img { /* Styles for the large image */ } +```` + + +### HD Media Queries + +Picturefill natively supports HD(Retina) image replacement. While numerous other solutions exist, picturefill has the added benefit of performance for the user in only being served one image. + +* The `data-media` attribute supports [compound media queries](https://developer.mozilla.org/en-US/docs/CSS/Media_queries), allowing for very specific behaviors to emerge. For example, a `data-media="(min-width: 400px) and (min-device-pixel-ratio: 2.0)` attribute can be used to serve a higher resolution version of the source instead of a standard definition image. Note you currently also need to add the `-webkit-min-device-pixel-ratio` prefix (e.g. for iOS devices). + +```html + + +
+ + + + + + + + + + +``` + +* Note: Supporting this many breakpoints quickly adds size to the DOM and increases implementation and maintenance time, so use this technique sparingly. + +### Supporting IE Desktop + +Internet Explorer 8 and older have no support for CSS3 Media Queries, so in the examples above, IE will receive the first `data-src` + image reference (or the last one it finds that has no `data-media` attribute). If you'd like to serve a larger image to IE desktop +browsers, you might consider using conditional comments, like this: + +```html + + + + + + + + + +``` + +### Deferred loading + +If picturefill is deferred until after load is fired, images will not load unless the browser window is resized. +Picturefill is intentionally exposed to the global space, in the unusual situation where you might want to defer loading of picturefill you can explicitly call window.picturefill(). + +## Support + +Picturefill supports a broad range of browsers and devices (there are currently no known unsupported browsers), provided that you stick with the markup conventions provided. + diff --git a/index.html b/index.html index e9ea06f7..339184d3 100644 --- a/index.html +++ b/index.html @@ -1,40 +1,46 @@ - + Picturefill - - - +

Picturefill: A <picture> element polyfill

- +

For more info: see project home.

- - + + + + + - +
- +
- - - - - + + + + + + + + - +
+ + diff --git a/picturefill.js b/picturefill.js index 07636134..c8f807ef 100644 --- a/picturefill.js +++ b/picturefill.js @@ -144,7 +144,27 @@ continue; } var matches = []; - var sources = picture.childNodes; + + // In IE9, elements get removed if they aren't children of + // video elements. Thus, we conditionally wrap source elements + // using + // and must account for that here by moving those source elements + // back into the picture element. + var videos = picture.getElementsByTagName('video'); + if (videos.length > 0) { + var video = videos[0]; + var vsources = video.getElementsByTagName("source"); + vsources = vsources.length ? vsources : doc.getElementsByTagName("span"); + while (vsources.length > 0) { + picture.appendChild(vsources[0]); + } + // Remove the video element once we're finished removing it's children + video.parentNode.removeChild(video); + } + + var sources = picture.getElementsByTagName("source"); + sources = sources.length ? sources : doc.getElementsByTagName("span"); + // Go through each child, and if they have media queries, evaluate them // and add them to matches for (var j=0, slen = sources.length; j < slen; j++) { @@ -153,7 +173,7 @@ continue; } var media = sources[j].getAttribute( "data-media" ); - + // if source does not have a srcset attribute, skip if (!source.hasAttribute('data-srcset')) { continue; From 5a13d11606b8b089df883a8cf74a1a802b70e4a8 Mon Sep 17 00:00:00 2001 From: Shawn Jansepar Date: Sun, 2 Mar 2014 16:05:22 -0800 Subject: [PATCH 013/146] Convert indents to spaces --- index.html | 60 +++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/index.html b/index.html index 339184d3..393e351d 100644 --- a/index.html +++ b/index.html @@ -1,46 +1,46 @@ - - - - Picturefill - - - + + + + Picturefill + + + -

Picturefill: A <picture> element polyfill

+

Picturefill: A <picture> element polyfill

-

For more info: see project home.

+

For more info: see project home.

-
- +
+ - + - - -
+ +
+
-
- +
+ - - - - + + + + - - - -
+ + +
+
- + From b12142e00db2e3a90b6fba0fdd24c59498e93086 Mon Sep 17 00:00:00 2001 From: Shawn Jansepar Date: Sun, 9 Mar 2014 16:44:39 -0700 Subject: [PATCH 014/146] Removing `data-` prefix. Updating README --- README.md | 79 +++++++++++++++----------- index.html | 58 +++++++++++-------- picturefill.js | 14 ++--- tests/{picturefill.html => index.html} | 0 4 files changed, 87 insertions(+), 64 deletions(-) rename tests/{picturefill.html => index.html} (100%) diff --git a/README.md b/README.md index 714e96e8..3dea1c95 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # Picturefill A Responsive Images approach that you can use today that mimics the [proposed picture element](http://www.w3.org/TR/2013/WD-html-picture-element-20130226/) using `span`s, for safety sake. - - * Author: Scott Jehl (c) 2012 (new proposal implemented by Shawn Jansepar) * License: MIT/GPLv2 @@ -13,16 +11,16 @@ A Responsive Images approach that you can use today that mimics the [proposed pi ## Markup pattern and explanation -Mark up your responsive images like this. +The following is an example based on the latest spec without using `sizes`: ```html - - - - + + + + @@ -30,33 +28,48 @@ Mark up your responsive images like this. ``` -Or when using `sizes`: +And using `sizes`: ```html - - - + + ``` +If you're not comfortable using `picture` as the spec has not been finalized, +you can use `` instead: + +```html + + + + + + + +``` + + ### Explained... Notes on the markup above... * The `picture` element's `alt` attribute is used as alternate text for the `img` element that picturefill generates upon a successful source match. -* The `picture` element can contain any number of `span` elements. The above example may contain more than the average situation may call for. -* Each `picture[data-srcset]` element must have a `data-srcset` attribute specifying the image path. +* The `picture` element can contain any number of `source` elements. The above example may contain more than the average situation may call for. +* Each `picture[srcset]` element must have a `srcset` attribute specifying the image path. * It's generally a good idea to include one source element with no `media` qualifier, so it'll apply everywhere - typically a mobile-optimized image is ideal here. -* The `picture[data-srcset]` can take in a single image (like "images/small.jpg"), or an array of images ("images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x). -* The `picture[data-sizes]` attribute is available to specify the size of the image at different breakpoints. Then, in `data-srcset`, an array of images at different widths are supplied, and based on the breakpoints defined in `data-sizes`, the appropriate image will be chosen. So in the example above, "images/pic-small.png 400w, images/pic-medium.png 800w, images/pic-large.png 1200w" will be converted to "images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x" if the width of the device (in css pixels) was 800px; -* Each `[picture-srcset]` element can have an optional `[data-media]` attribute to make it apply in specific media settings. Both media types and queries can be used, like a native `media` attribute, but support for media _queries_ depends on the browser (unsupporting browsers fail silently). -* The `matchMedia` polyfill (included in the `/external` folder) is necessary to support the `data-media` attribute across browsers (such as IE9), even in browsers that support media queries, although it is becoming more widely supported in new browsers. +* The `picture[srcset]` can take in a single image (like "images/small.jpg"), or an array of images ("images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x). +* The `picture[sizes]` attribute is available to specify the size of the image at different breakpoints. Then, in `srcset`, an array of images at different widths are supplied, and based on the breakpoints defined in `sizes`, the appropriate image will be chosen. So in the example above, "images/pic-small.png 400w, images/pic-medium.png 800w, images/pic-large.png 1200w" will be converted to "images/pic-small.png 0.5x, images/pic-medium.png 1x, images/pic-large.png 1.5x" if the width of the device (in css pixels) was 800px; +* Each `[picture-srcset]` element can have an optional `[media]` attribute to make it apply in specific media settings. Both media types and queries can be used, like a native `media` attribute, but support for media _queries_ depends on the browser (unsupporting browsers fail silently). +* The `matchMedia` polyfill (included in the `/external` folder) is necessary to support the `media` attribute across browsers (such as IE9), even in browsers that support media queries, although it is becoming more widely supported in new browsers. * The `noscript` element wraps the fallback image for non-JavaScript environments, and including this wrapper prevents browsers from fetching the fallback image during page load (causing unnecessary overhead). Generally, it's a good idea to reference a small mobile optimized image here, as it's likely to be loaded in older/underpowered mobile devices. +* If you want to use the `picture` markup, you have to stick `` +around the `source` elements, because in IE9 you can't have `source` as the child node of anything except for `video`. ### How the `img` is appended @@ -65,10 +78,10 @@ Upon finding a matching `picture[data-src]` element, picturefill will generate a ```html - - - - + + + + ```` ...then you could write styles specific to each of the images, which may be handy for certain layout situations. @@ -84,18 +97,18 @@ Upon finding a matching `picture[data-src]` element, picturefill will generate a Picturefill natively supports HD(Retina) image replacement. While numerous other solutions exist, picturefill has the added benefit of performance for the user in only being served one image. -* The `data-media` attribute supports [compound media queries](https://developer.mozilla.org/en-US/docs/CSS/Media_queries), allowing for very specific behaviors to emerge. For example, a `data-media="(min-width: 400px) and (min-device-pixel-ratio: 2.0)` attribute can be used to serve a higher resolution version of the source instead of a standard definition image. Note you currently also need to add the `-webkit-min-device-pixel-ratio` prefix (e.g. for iOS devices). +* The `media` attribute supports [compound media queries](https://developer.mozilla.org/en-US/docs/CSS/Media_queries), allowing for very specific behaviors to emerge. For example, a `media="(min-width: 400px) and (min-device-pixel-ratio: 2.0)` attribute can be used to serve a higher resolution version of the source instead of a standard definition image. Note you currently also need to add the `-webkit-min-device-pixel-ratio` prefix (e.g. for iOS devices). ```html - - - - - - - - + + + + + + + +