From dfe1486013667209daf63f6bb4e9fe490292200b Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Thu, 18 Aug 2016 21:49:34 +0200 Subject: [PATCH] fix underscore.template usage++ --- .../themes/aktiv2014/app/scripts/main.js | 11 +- .../themes/aktiv2014/app/styles/main.scss | 18 +- wp-content/themes/aktiv2014/bower.json | 4 +- .../themes/aktiv2014/dist/images/fat-pig1.jpg | Bin 55554 -> 59780 bytes .../aktiv2014/dist/images/icon-menu.svg | 2 +- .../themes/aktiv2014/dist/scripts/main.js | 2 +- .../themes/aktiv2014/dist/scripts/vendor.js | 24420 ++++++++-------- .../themes/aktiv2014/dist/styles/main.css | 15 +- wp-content/themes/aktiv2014/gulpfile.js | 9 +- wp-content/themes/aktiv2014/package.json | 40 +- 10 files changed, 12986 insertions(+), 11535 deletions(-) diff --git a/wp-content/themes/aktiv2014/app/scripts/main.js b/wp-content/themes/aktiv2014/app/scripts/main.js index 378f7d0..cc44fc6 100644 --- a/wp-content/themes/aktiv2014/app/scripts/main.js +++ b/wp-content/themes/aktiv2014/app/scripts/main.js @@ -64,11 +64,11 @@ function format_results(data) { '<% _.each(u.groups, function(g, i) { %><%= g.name %><% if(u.groups.length !== i +1){ %>, <% } %><% }); %>'+ ' <% }); %>' + ''; - var html = header_template + _.template(list, data); + var html = header_template + _.template(list)(data); $('.search-result-list').html(html); var search_meta = 'Antall treff: <%= meta.num_results %>'; - $('.search-results .meta').html(_.template(search_meta, data)); + $('.search-results .meta').html(_.template(search_meta)(data)); } function do_search() { @@ -216,7 +216,6 @@ function mailing_lists_load_initial() { } } jQuery(document).ready(function() { - moment.locale('nb'); var $ = jQuery; @@ -275,7 +274,7 @@ jQuery(document).ready(function() { '' + '<% }); %>'; - var html = _.template(list, data); + var html = _.template(list)(data); $('.groups-select-wrap').html(html); // run chosen $('.groups-select').chosen({ @@ -311,7 +310,7 @@ jQuery(document).ready(function() { // TODO: better mobile layout // TODO: dynamic show/hide of members - /* Load list of lists*/ + /* Load list of lists */ $.getJSON( email_endpoint, { _wpnonce: $('meta[name=x-inside-api-nonce]').attr('content') }, @@ -386,7 +385,7 @@ jQuery(document).ready(function() { var list = '<% _.each(lists, function(r) { %>' + '
  • <%= r.name %>
  • ' + '<% }); %>'; - var html = _.template(list, data); + var html = _.template(list)(data); $('.account-details .email-list').html(html); /*if( params.inherited ) { data.results = data.inherited_results; // reuse template diff --git a/wp-content/themes/aktiv2014/app/styles/main.scss b/wp-content/themes/aktiv2014/app/styles/main.scss index a440851..f2db5ba 100644 --- a/wp-content/themes/aktiv2014/app/styles/main.scss +++ b/wp-content/themes/aktiv2014/app/styles/main.scss @@ -456,10 +456,7 @@ input[type=submit]{ float: left; } input[type=submit] { - padding-left: 8px; - padding-right: 8px; - padding-top: 0; - padding-bottom: 0; + padding: 0 8px; margin: 0; text-align: center; line-height: rem-calc(37); @@ -512,9 +509,10 @@ input[type=submit]{ padding: rem-calc(16); padding-bottom: rem-calc(8); display: block; + @media #{$large-up} { padding-bottom: 0; - padding-top: 8; + padding-top: 8px; } } @@ -540,11 +538,11 @@ footer { padding-bottom: rem-calc(10); background-color: #fff; border: 1px solid #eee; - box-shadow: rgba(0,0,0,0.14902) 0px 1px 0px 0px, rgba(0,0,0,0.09804) 0px 1px 2px 0px; + box-shadow: rgba(0,0,0,0.14902) 0 1px 0 0, rgba(0,0,0,0.09804) 0 1px 2px 0; border-radius: 2px; } .card-z1 { - box-shadow: rgba(0,0,0,0.14902) 0px 1px 0px 0px, rgba(0,0,0,0.09804) 0px 1px 2px 0px; + box-shadow: rgba(0,0,0,0.14902) 0 1px 0 0, rgba(0,0,0,0.09804) 0 1px 2px 0; } .card-z2 { box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); @@ -559,13 +557,13 @@ footer { } @keyframes fadein { from { opacity: 0; top: -10px; } - to { opacity: 1; top: 0px; } + to { opacity: 1; top: 0; } } .dismiss { position: absolute; display: block; - top: 0px; - right: 0px; + top: 0; + right: 0; font-size: rem-calc(30); color: #ccc; padding: 7px; diff --git a/wp-content/themes/aktiv2014/bower.json b/wp-content/themes/aktiv2014/bower.json index ace1eab..a754486 100644 --- a/wp-content/themes/aktiv2014/bower.json +++ b/wp-content/themes/aktiv2014/bower.json @@ -7,9 +7,9 @@ "foundation": "zurb/bower-foundation#~5.5.1", "moment": "~2.8.3", "underscore": "~1.7.0", - "chosen-bower": "~1.1.0", "history.js": "~1.8.0", - "list.js": "~1.1.1" + "list.js": "~1.1.1", + "chosen": "^1.6.2" }, "devDependencies": {}, "overrides": { diff --git a/wp-content/themes/aktiv2014/dist/images/fat-pig1.jpg b/wp-content/themes/aktiv2014/dist/images/fat-pig1.jpg index 647fa242fca76bbf15686da183c70b80f178b633..4e43ebd4530def5c07014b2e984f0364bde08d39 100644 GIT binary patch literal 59780 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 z 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 YOKwoxegV%P?T$KX#-g{dURg;0*~^B;9{>OV literal 55554 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

    mos1;=jK+yo!GS?aAiG-;*zIa`3a`DoUv; zgOoVP+9{wLC6Ax3M)ZB79ghCKF|$iWke*uj$d@N;T_aw97_;HE7*%;jLFB~P9(c(t zIa3PRi4EV)YiIlCH!Ke_aOVS!*(RCFN7BXx?K0C~A>qF9tfPE5f9?~9l2TuvStP}& z1W3`7DDc0xf94c3;3Q+Ll$Ozre|L;#CsJBMWF2b%;(Zkc;8$ zauKUF50?tW=_|rPo!%bX;~%L~4}-^yiAPxmI~=f9Lo-pV6s&y=1cqjL9=u@fbtu5& zG+&kR{o-q4!hI(tq4!xoMnX5g>T!!pcl&O83sNP)Hq~&p4-WK83Ae@o6Mas{ouNtsN5_`ohM(kpZr)LL?Gek78OZ~P94-AHY`|~dd8`jzAPY_iJZF#=9tMyhAia71-ea%ylf#1 zldNV=pcK2wr(huT{{XnA10iRFAZ2naSdI*%nIvVnzq0_7K_s4&rj2}Hlr%&tre^XW z7KXz;hpP9I0C*3qk2pd^fWoEB;T_(00(l&cL=?6eIPQ0jXb@d@rUC)M1VFxi_|7>M z3We)gAH`e|fkw{qD%FyViLe7$Z5O;*NkWwVvahwgbo^uq4Ztb=tU?<1f}H~({qe(K z7*j@rmB6RKjVhSTLs)lAtP%rH3;DqiP-Pwq*PNW{DjRAara(+qjhzm@GH$UjgnSeE z$Tq1eQ0Dl+8jGRa^u=KW+})DX861_GkM6RQD>6g)vmf1(7vsKi5L`N#@X@R*l>9hm zDn^aniTH5vs}`TuZ#o7wo4r3=k$D*WJOOj|0IUFWVSXOKkP`dBc+sC9L)R#tKkUp+>&hDp0*45AE}S zZ{(Nd#JV5}*Ysp`5pZ#djlcse{{XmJho$ENB8^6LEl8FkImqP6NTlg_5uOws0mJ9s zI$Y}?3HszRBA8H~8^A;*t7kaAL7wIZKEK>kMX5}f&J%(96UOzBx!^#ryy!Rsm%cK0 z=gHun`o;jgN%@S9W@s6Y`-bF{nvb~fk zzClugc*rNiCWlytA27|l^^@>pbB+w~4+b!B44h2}&=t1?N)$Rf%I*ZzNj3SLUX%fK z6pdn#@E!~+7{iop@ho%zNFBTLdi9^x${uoXirE=*mnR)Xu}{1-WY9zT-YgZm%*@A^limm^LJQ+8Q~uyG$s|&L<|vdU z&GGc}jD;m*r_&pkdy@dLKI|Y9V#s^<(SyJu7jGTpK#Et3)8|+SHjt8sGGo;#l|a%- zHRBaKEpP+!V+0=vW6R?LDwP**Bh=)ePFFHHTr%STiRT@~Ok#L0L^CG#21X+6C9i+; zCQilrpH6YPPf?KHr=O;Jn;{sA`{b2~6h$I8$Nk7SWG9#EpPZPBQ3QECUL9f3x7Q>> z=3w)Nt)jz>=x;B}b9z(C$Z4M_$QYFuI*yEh3DKf>_Qq3Sscnz%wjxXdroo@{8NsK? z3=f$2F?g{D5*GJ|?L%1*5bv7D?yqIrI{4N}^`NuzbY__r{Z1X~BZ1plJ0ro6^!0#3 zVxptFUM7>LCND(q8=!o@E8a!XnKU0mddQd#A@h36VOXNqiEkH_m`KOBk2wCL1xMdl zx(Kj}eQ`@mv6cae6PR^`oZTSyn0~VCpOSxj%l`oBr~}h=iBw#W67ObQC{S~U+`pK~ zJ#wqn^N5IW?bZC_7@`)zE6bm@Di4<-H68$19bgJXv1Z%;tVb~n z!GZ9>15$+BqIfwnu?blt$kx5#GJi~w)m-_=GH4|~#teoo$FKZxe0X_XxCL0YFejT) z%Md|1Ll|eyPWQ?K6s)7z@4MD=5GSn5^CluVC*XB{KUhj0VD04l<@2c=60hIu2Gj*A zZw^94Qs0v!Hc^EhW01(>3Cyfl^`jkNwMVfg7K5yiZb2D%%*=X`bG^J>&{ar=<1Sko$)L-Y4A7hqwJ< zdD-g*?ap#$Z3EW+%cL3Vk?-dObj$LAX$l?s)} zVk3oul^5`x^Nh1dRKO3`I>C;U;9fAo10W(!>8Bzvs|k11;}AFu6Zpnb9D6u^nIJ@q zmwBbIFegVjCV>3W$p$0uoTia^Uu-|J9t-4$dSh6d5GEW&qY670`EMl*yW5zHTXt3^oyU5C(MHuE!-a*NJGPQ0(bXh*H z&OJ1w{kUCgVo^Xk%>hGPQTxNtQX7>YzZHciBI+u5{2Ue@$-j&d(Y(Bj{5@3hKpYs* z^B4$lkqJHY;kAJfOaB00tVmmfpClT?4Nv_QVPH-mq2f5m0`|goACDh=ETNYgey1d6 z=o?7%nF#bmR2&H3Nsy}MSYy`H)(8dHsUBm$7?7jeLUg=jhsPv*z2`qjzr)@*C_*Rf zWEO&lXLv9(Esr<^5|jS01rYY-<*f?2#|G) z5Jm`!YyRbWr67y%=P3{}x(^5Wk!a9WdQXqzAh-lK1MQGxB@?Cdf!std2QwIbh&S1g zBj{uH!dhJs42bEdi2($6*BH-oV`<4nfmt@E!NH8%ITrm9vr*1PDAKvuej$EvPu-It zdHrM83dq(92HBhETz=yb8#4TJ~0X@{{RE$AXpL@a0kcvls#%ZddKxPByp1MgwlUFjyIR5wQnK8!4!53rI>@waeZJFHA?Sut1sR|#fBbveLwRC0!jvB z;Pv^y!fJYhj9y3}EGzN6yDv3_JLeY!A{Z;iBE(Baw@ykqk8u9u7aHOvP)aBmmj_ z&R%i@GBZED;gKZN1V4C#snf3fV6iL`s(8wv%pmA|e(~CzBO#}G94=`RJ>NL@#yM)85%tTc#P;%km;i;{Cj;mI05WuKQi5L2GA?v8 zJb-_=)DWGa9`O}Z32VcKaY6vp_{PGCrh^SiC`m>uCo&Ly+TC;G8ww#f9&qK>b}{22 zCyH%`sX*yR{lj2-65Ia(anM8#*KD&T0$ufeTf-}vD1SJ+b}FmE);Nn> z7k6Jc$36GhGGvT%BEI?VBNJw4Q|9r}LPo`Gz5C0;_e3#OhddvH>6N6t^MsxE@Q(6ectP1GarF9P2m@tDr>EXE zAPM#48m>nOM@?Z4UmL~V0;e3rvV7u@DmZt74cZA|?*yO#G8%*I_{nVhUTx#N z-~Q$83k8IGkG@AaL@T_XhP6gp`gzLP8MR34a7YA>!_knCAx*CPePa}vVnZrLe@1B~ zp)z_O_al*%AxxbSn{ybdp*T)4n=`;UA2sulfR!zHF`EYHKoj+chN}`_*^|*}b>Vc7 z1oVk~<(Py8w!e3jv;w6(Wx`gg_gu!Z-%XvR>*FK?rB*z~Xoa@l`G(MpRIK&9Dh#xw zesI4j6U23n6NR;ZCQ!8)7x#d&J{OmVhgkv9q*MCK=A|6h&lqBw$pXB2fAGfyFc$XuNxIKmdwAiT^w%?h^W9`VYY$;pD$gXL$8Ed`q& z!NhoN%OwUPCj*YDLj1lkfKodg_q^(hsNWf+J|GkaUT|^H$sP^v@>-ip#;e8SI9dR^ zs7*h3$So14$tU@SK$qndc)&oAYb08+3O}E`D%_9mr{@p=s$_$6fO!oAsVl3vA zDf}D1xqxls`kp#=&n)kn)VW`-l_2J8nWRa7@=N&9$#7ZXL`-TcNN95#FK$Mdn z`om&)R0q>|DG4KFBfJ*2gh^ zPJ;et3!*i2NuoK9@UmARhDFu2+Y8DkCPS)UtNUdn!YUBleB{2^7qoWBvx11ky!(7(Bu5fUx$}># zp&0!8!!R*ylr7zTJz>$)H}3U>T9A~!84RjvE%%WY%TazX)U3&4-bn`d6m01`$+ZC9 z)7;kBO4ZUyJzWm@$rs3|e2e9Vp*kE9xehqTjBf~&uyp&t0?Ha+MiVRA@@{;4$Ps%I z3~Wf58108&ET{A$NAG?zsu8Iez5coPmIz@YpwjL_d}lA=K0*EO0HAF&G4X&7Xe|z} zoH3Q9-^q+kR!J|@;Kn5g%n3Kk_Q1kG-12ywoCrvwb>Hg=2Ri<^&{zk^5fz2V&Gg^q z4KTodh8ePi3LE<5Aps(Y>D$H)ECk5>RO84Z8qSjp64aw11#}#ttTqVPlWb%#VN8<- zpYIre`6kbJ$qB692QsrZPnj`tP|D1{T%Vt45rXMHWV0*u;~|@W;D7TBMF9l~=C}U< zGFqz)PmeEn*buN5KCkhBmWjek)-9L=BKjuhELCfzoN=lF)`JRvDffm2tOfh!o#K$-`wwB z^3pgWJmd9EmWj}H{$OyTiYJ`|9h9Ve&1lH7f+rQid*>Mh z#0{Ts`;Z2AyJMcR-_V4pv(^VqJ3jZk44qI=hu#ge%pXN zRs%sUpFi#p)7V2^JIP7bXBbb_jGh|bI8a3`j@M|Pvv`J^0xiD-dW9bYwx6(`IsL}5K1kEUESrCgXu?N1LGIJKmpzDl1CXp9i8)ZApnlyCBk z67&}bocmSd7S7oznD_b1$`jCd>ilFgAR8;c`;i8*CR5@60GL4DJdcb@ne%^!9x)b{ znFN7hX&v)^J>!sqO=sJv%j}29%Y*&J49X$QeSe~|Y{?R?n={DCseNFuB|qu?)@snU zKtnERY7>j;EB;LC&nCu0D^q!)-jlE za0lxfAbD(jVJNFsuM>#;(iY@tlHB1nFd^Rp*_AUpaM*GQ350GiAjp7>`kn^M)ZRb_`-{Sp z&2P>ah$3g8nr70z`6UddQvU$V62=yolbm@9Y}+32(%B*;UQc+i1mJ}HWW@bA^#1_d zsYFfUxQE_$IqJS!lf#KhqW;Pr)CB9|e@sh0unTro_pjvy!X zo8=q>7@nDKKVotbWNoL;CK$sV3=#o?C9|KVY$~GHSm}e!v(^zcgXqN}Ho2F^AP1uV z0DcKLR!8Q1xgfAhEngjB35(1B0K8%G~PB)Q8iF$b`5DtT~@J*^LY~sr1ezLVU^o z>mPv~Ngvz5UsAij`IR7e8xyCG9&mO1APs}rryx;om`%T&AQh(fxIe2kT88Q6zl@Bk z80&Y-iUh#1QBF^~5PG7mek9MVJuUL}w|AlAnycs7fDx0FoACc|S}x#HNq?6AzfcAV(6+ z+uJMihD2spUcCis35% z0FcB{K!#C{JYkqXplVN-9&v0rUX4!`^PT1aC(kp6@=a@eW8BN3-wyZB+aQe!R^egE z&%8wHz((ik^t=VJq$ZWVwRt?BU~-Wi^~MHK7J*RWYLJ_jsl@)V8ELmB-xKdP48WQz zzHnr2Dg|mE#vu_XzbEU~LF2+!3SeMH)WNy>Wto(qv%U^*5hH+amlQ7~v?2R)3-B$+ zehiA@st7#bVKlfP{{Xnu-Oa}tduiB?H~Yt^40e6aHJnc^U>bndjaQZ$7yPgq=s7CT zPWn}!(S;oah~4_aVNyB^Mflz^$SbbXF~9xDLJB;+IA{?QNPJU*%r36pvQbh?x6hn7 zFgG-CrwTS;B*6Vh3?Zl>*DR*A921fw=oA2azt@Y-k#L*xKNwrtV;8yEAB;sj0ttWh z7!F>oZzQX`!HGeU5_$AaK&XmJxn?WQ3e_p8?6m&?+=~UHQ1XA6Eh`HY-7LR~lOFt@ zalWCPBafUhEJXZYcNInn)0ZU%MYCM?5>I|G#l9mAHQ|#I;+SoeLjH`g`$7Sr{{YI# zX%I}b37iPY-N3BRGi3=5-x)4;hw@m-C3aQE5s*A(*=xp7BD|aa zn#WH{LOJE@5gtNBZ-WtJA(IBO(-y?)kb0L8Y$$do>l5|F%W6xSkf);>C~^^FMOlW~ zBe+8S>196(`>`SP&;j{{X$0T;u6-ZxOEtSD`=U z!PN&Sb)hCW19PWcYySW+!9)cQbM7#zaIm5hjki0)x}ANAU5+_d6ExR$ki<~-vhXWo zua7tkYG4js8F+DcNe#m0`R>e*0HG}#Vqe#qEX_++Xn-G(skb7yG|?0k%)Y_rME4 zEbFHnqXo;xD_=Bt$xt;r92CKM(dn9Wo3s)2)@ZWe1(6BI?eUA5V8Nv887*w%R2j*d zgiJV}i@*cOk#}r{j-pWGAu$`-#yRTO#r|<9WB{5QnDS#PIy-O}Um^(B{{UE=q%YO+ zh7>eKnZlDINZSM$t&z9q8rTa3M3Pyz#_*K%+Y6}%`C-&#{f(40d(i7qkRFjLHi42b zMsk+VOQ^(pV>L*w`5w$zOp`F^8b8(xWP;n%%i{RRV50r;61+Lh=@_Nh!yY@yFoj*F z-$i1;r5+!Ya^ew)rb!7+b}l|EYAa^31gj@t!Fx`tQHfwG5Rj2lq~0$qCqy(lH@>oz zOvIgA%eYyO{23@_ z@Z3(h$1z&6kDoZPE`%GsX&qpVUC498_VgGI56DUO@#`dSA~x|^5T=gU@E_(dU@@}& z{{Zs_0-^r^8Y?4hT6%xnB_-J5?8Y#7yuLw)O1e| z-vql?$o~9iS-ugT;~*fS>#}pbL3DXCa>IY@WCl1v2=a1yDcOJ(F-5V&_ZZ`g`@{E) ztVCeoE%jpS0#74@vVsW!Zwc}9Ka=0N@roW$0TOCQ)?V-+u7k;1kx}(vHG&7WHT7Uw z=FDo1Ch+R#k`PU_$2lNw6ul~Yb3F5iKyvU7r)xZX;DNxLx~ZB!>yuR@6=p7(JjN@Q zVkTB^kNmwKl2p` z17J%zvOHlct`Px8AN7Qmo;&M*Ofe&-liHljeQ}GTm1b5yQ;sa$p?xEdoQ6)ocK*`y z-U2jU&aw<<%W8f9055f#43SRBXa4|j9`O)^)8`;&g~eB6;A7CUEF8Q)Yz|PA*S(me zn$|*BB?*Svxnxf9Rj{xSS+K<)5G9BD!Xv!wc3=D3syJzVH#ElqN2V}*#oZ3S7f zDy_F$!_#t0pve6FBPV9rI+rm{A;lwyYs>y`KG5Nhc}I?6%ijpe+P|5X$Kxd#6QZs0 z^~gZbB*gA%etF3F+MSMBdA%3~$g?HDFcxWgQo$VehEh%0RxQDaOVR%Tf^n1c4VZm8 z0e0)gDgwjG56Vo|>LL!^lM1k-=EwDd(o&VL>lrN#YC=EtIU6eQE*Nq7*h;#X zwH6M1Mv=!l!U<5K4cvX$xtF>ZxLy2CGA>d_tvcVF7HYK#BTg)Q<$a?i^&4lLF*fTO zI@LxT&&I?CxV&Y7!T|g87=@sV>UbYo$79H6uz4Kt5IDZyhH3@d!-dg!w}huG2gK{% zLYPvOpgJ1wd&5$ropeV<^5nraph*`*1Av&}AP|wm0}E^@V|x&~DHW`Rp#akU12qay zohp7wIi{qC18@5VEF5!B(`AE+VS;t}tOFduCpmXu=tv$O@(6B8O7S19WW|Ka7vc}| zCGyZfgH`_kaEHqgsCphT_Y8}<{{AsX3!ulpF^FIXY9~fIHeT5Rquq#)6NVVQ8N7la z0!TGG_{bC$Hj;SB!4bjABVTtL7@Kg-_4YCf%0kuFQA1a}PzLROa_|R#tc5a}G-P47 zR4>;$j(&w7OnX=_llfoUkz$1iv>Nr7;0Z+R#-(wrJ^2_j)TDWjPBFumQDiFNKQ0M} ztR73BB;APEpqnfEMI`jjmZg8RPfaq8Td%v<&*yaaiBws)bRfRa&p>9 zARs3~JG|@>gvT65=OGjJZQd0N2FFLn>PttM3 zsU$P6EnddArA1Q>y~wl>A;q3#h%R7cH92s=tGKqwala%M;Gj#$1jwAm7JI-xsR(w^>Usw?39BkZvP1l@*+aPfsNq&)# z!3#tdx2K$5G?YC&{WEScEUD8=oY*daok8Du6cZj|NBf-hi61|N$1gJBt*&V$g+?f8 zg!1I*AAsH9-meuSAZ`W}JhQyIQNd_T7EO1HjRK@(zo)zffpwd9C|3{poQ)v;(q%m7 z6V_Kt)*NW%6nh-x+?tl(QN!hVZGI0M_M{Gi+)aBXnIOmfmKA!Z;PH zyok^-#Zld5pJ6m%t}a=Q#O#@!t8GTH(S3U)&%_@lv6wqf_Jd25h9x4!Ic5| z$4J;gQ@djNioz@j0)tFEoneD@4BSBvZaK$w=Vk-*jVUQoy>mDUlo}S~igDfAgtE#~ z@x&?;F(8iMzNll^`LI&^^ytLOhmI)gZ!;Y(Wbh zKU?3%3x|wDWc>tr%4A4hp2^X!uzMsUaccPISZ2)RB8GwWJytc8g#A$c;YJRCm2%(C zJ(*6?=a;55>UAVdv%qyevdC*t5}_SOlM;SAE9<9kmO&-pe$~gUj?f}DQ4ZSV^?_!b z)EQv%bV-vH2}3xhpHYGdB(4f8xf^|C(TUn^A~f=2iHrfn1H1vPMjIat(9AOfjhRwh z1(xPG&F13Ez-a3JcYv{)0wn9?{ctq)3=b^XsP%(GN+H{_EuM9i1kkwj(0_RuA|}}> z`?PV!xf4v;+TR!jnYa%U=eNf>#5It=C*g-8RH(bQOyu#E3YyUvp5%neFHgbBSWOR9 zCCD@c!w&*-s$*HNJNWxz={7DB9{6~?92-Ga zcY3eZPk>`G70eg&td)z5zPuyjtXXpkQOdhK;Fw7SmkuzL1Wc@B51#VlXaJ(b*Y`Op z2(0nD8oS1y1!q>d>T{e@>46g-AdWH%5^~Lf%6_+$0yg(g6M>RIej&@Jj&*=&qeM>0 z@mJmi1dxRu&VlzirR^LH7FBbs2+d`)2OMm{m0&uvQRa6zP%cC_gLzZd5PM0Jd7(s* zya}*q`s948*qohxch)k%Wn{-ijbaB+TM{FU=3x^SrwqDMtJj>0E(FZOX5S`CSqOr$ z#)iX;gJA~W9g8)?5>IhLwYoutI9T2&bL7cWWAm?Dfto0Nm;3FFH{LTvWYtblh#!E<6+4ZtSEn8rwD- zqp_`KV%v?)#*J;Xv6IHOC+?Z&eZTLlb^f09TWfINv-iICg&Yosr1{l(stFExy7AXR z7la9U5(4me&FX2zJy)#_IpNb9@~p6PDLbvG-B;8kJ=k{dwZ}J^nhrBH??`!V1HiK^ zD7|Hm&X;EQx8x_o-E%h7;xN{nO%{Bk{*WEQhM8@8o*< zh?GaWD%s(FnHPcy*oSX;!VumiU4@K$>xy*NAIiu~h5?(n=u+!UJ%h(zXD zFm#p_6eq!I|K50@NiAM|#5c&muawtqQb87mP6zz!k?aH#m0E)*wu;A9ck(!T$e9mU zo$+sHGwD8C3}26Y9*i}5!;xw2!;31xAZ#W+ABBo{^Q5t;ys*(x zAJlNBaju*8J$g1PH^XcY$KO8z#C^9T0HOp(7k(4|z+||(PvU7KtV`(9-`1WjvZR=) zo?M~LLU#n%CDO*S;D@WZUWnjd6Ec&+$pW+btAezFBRBkM1z%xeN0=zYprvGPQcryj zxollP+hdaO`uVZ?)+jl2zpN!-ie9OA&QwcjC5cA$=u)AB-IC{FDsj;nIkm zFcm;-;rU)6qBC%dBT!DVDT7_!^%P1_e4Af!Qq`uVQS~Of^!#0j25!yapckiTLi0AM zL)kPJBp4G(=V){HRSf*eIV@?|vcD$qArAP<>mE%3CWpGV--irIinqVM}$z9{tWZ9{Hg$uqF8teZQgF$!~aa*y%KnM5B zk3Z(t(0nkw8O1jD3VzBa#B)Q%N2=q{Ug2qs?R!z>KY#%}Wpc^SX`&%21i2KP?IP1K znoCy`T*QuX8t&3cgMET{YB-uN7IcDdn{u%b)dk9bDb|4hawsqoCF|Rw zQFKP6Q1n+Q>Xw^lfzLeAL(E7fYThQ3PxNwJa%1QF4$bRw*JVPeqi0k(7?GN?or$pl7 zC*z&F8P8RfwtPs=y#2dBz!Gl1f~-6*rL1j$fdGtF3ogd(4hSYr`s#B?)v-o+TFGxf z$08%IZ|8U2RX&+8_)E=ls!bM~(}h^I+e5}{t%g+p+s4zWVQz~7cq>wKtt?S^1c z9X*Jw={^nU_{Vc}wvR-NpjAvbGMFU9fMoJrGY9ui>R0x7lx);QP%lIfLxl+u!T>c-XFAQ^1V5soH_jN-8biU{qcD$?-}1!+XH({ zrc#cRr>V~QEv4ReII1L8ruTA})_ggx?RtaFu7`M#Wipu9)9+JDeB#AL=;|fmRZD%; zs=rf6@`wOg%b@*Rk6vz^V|?;x1!p?@$d^>J#}Qt8?DYXGTtDaOC*k6aF`@iq_;Y#^x8tE>#c!zAZ|V9(_G-;5haUGMA;B|+wZp!WI~ePubzomi$x_L5#h zR+p_CUV8$zYdkUGogQ7w02z>5;woZ_4Un|JX_7)kl}(1!TWx;fp-0bx%s-%8Y;*k? zZUTJ(zx~D7X{gv%m?mx#feCs=<%F~goBQUGRo&Pm!&_-~2W2v{McwG9y`$66@oOVk zS9Ej0Zskb!B3a1MEcY1(d&KpbEU}TL$&Zha!*Djo-h;r=^9;(WyA=^NmOa@kf!5ar zL=17x*emf3{+;Z$Zhnyn^+j?)`0?z#Vc?+IBWg%^g(IG9x=qpk<1KsiJUniN-)h|N zfv&Qc%(8GCy%8mg=3Y{Ou>J4!>K2s_-z(K&jU>nPF*PAn8F71iO%91JwBpAF`ylWi zz)c?4E?*DLxKiVb*uY8U_@0VJe1;K`Uc#k>@lz&P6OQzA!ubpV<>ivVqCT9={OB$)L;VFL)TzeoaoK<~?S54&&dM9{|s7EVcRh+RpDEH6(io{uhXM9tr4AOrGlj z@6cQGf7WC@8}x6{&apm z{X~HFH~^%#F>Xd`@!Oi-g5+q)4DorysCe!pY*o9BQw=N+x5@v_(7sDwCrKM{%p!I4 z-}5#YRy(5^9ei!7WD3}ucKVgM|HE_ecL4T=2nWq&01`W6MpkzpErU-HewxC}Itc4&-4+OIh-|UGzOw1tonqD1ZeyVYZaS;S1l&vg( z<$$&()2k+MaVe*AzV{|d#*60{@bjrl#y*qYVIR&onOMO3c7Ate_YdfW+66uG2g$2m zU?W*QWM!Bu>$&B%c0C-Mf*y5bId(*&j4xw?Jek}yl)b_pAq@J>i`5_V)rFrj{;L&T z{h4_{@xtTIuC_o*ggGR3K}V#WB+8=p*eqDzdLJklg)9-KyCM1-;}@kr_))MhmNsfEqVc8h4Q=4 zvmBL;GhbkhFpIkrkwsgA4qqWslJXAaCILM4w}9RS>|yie%vcTKt(P#9flb%t<8NSr zdSvLyi(U?R?1paLE*X>ztyR{s{~qJ~`sw39IlEE*URH^0SHp!wDZ<@7+ZZE7!l4Ds z+_g5A_)Xu3cXe}6z;iiLt1l$kZtv)D!0*=on|IRkLH($N09^?9xw#ZYnCVbV-W&Xs zH5ouK8V&m>o<8^~ZYP#-ob+(*CNcZ~w3xLww1zuiwgi85IBoU)+GFq|Kk_@2!s0G{ zHTWS{C|I{O;`#0=xH~<~@5T;0;>u#%Vp`o8ffc@~j5QLIcf2pKO(GZTBMV{r+Md?; zMYiW_udoH1=TT2yC!PG}6BF$I@%;eO===pa`yKlpetgGYN_kY6a2Ls=W-?FL0p5Jp zgi}pc^sT=MDIfdBk#bKI{U{=_EfCXy_w<+20zn9+!UzloZ_UA%;^+J_pCvS76D^g=Kt(VF0G z_17U@hj-X(4^uvDYVa%c4Zy4Qe+8reQy%}PNzJc3!35N^em13%WsJpSvjJd0vmr2uwNIs;6ATgGhJoB+>A% z%g^Ijcch~Z*{2h;yDq5*Chn#|AI|)uCOp>0E`sOV%7y%x0QDkkVP!7gndT8_E%b#c z0{9_JH#vSaW@vB_3@BC?U~!?jW`(UM6W(_M%lUM~lv`3^*C46MdWD%2YMt9#gUz2) zRWV1-1tWj)S9yx5KV&_BpsBZu79SIDW$7!*-Se-0prFE$MapZpi?+NefwcG7KLB`Q zjw|kW!r#D*aNFp=HEJSZA(c-#p8Jv@T}n})UmYAGbGz}jcCW^YE9+@J34qHvN9)v?NV(xi9Rj(mi?5_9W(tyysgRO_CNflL!d5`zB8mr{_vu|D*r!Ap${m zpp{E`nAae-dpeL56S^k?@l(kPEG%5Vb(NJr6uely#2b=HeeR81mDFFfVZevS71`6g zl&Kpe`Q5fFqggESvOtv9_N*^hUh777tXppBMx68o=Lu3UL<9Cq(6#8L^lOZYe{VnZ zWr{KRb@yBuD1HMLu<=uqT)iJuWCb~U8KldJT+u$s&W6IFpsevyp_1Tav=}}Q%bC!A z0yyBKUIlB>h{|}+*8Kzcmx!eRj_>pp_lbD4IlnYGmFFO!`Rd&B8E1e)wa{5)acpa1 zcX0PzgiT=ucw%u70rvPWc&^!1^#k3gGmRm2o8R2H0ZCe8r6O*e@ATghN zo3n-_JPHZZ#FTm-q>dMiF+vpie0&3}6uAy6m-c&{VlAKruBAWUDO1DEtl!Yh7{6VI z5wJlKbc#CMT2WIF8Pu-?|`@6{v_)b&4tjZ-5%FMJXol~W0CC#pT=&>IVVP% zHxb?&KK^h;vcDwG1Yn+LX=D>X>CyLLIYRBRcg!AUQ}JEg`*QW#Iwm+&R$0jz$YOgm zgP}jon$v-_H=bvL?Q<3BKI_BPlt*zi3IQysZF>UJ%3~kF1ttlJu-mU%j9_g(4F0no zhCw_M(q#5ZBTkU&5G8y$MAJ&qubm25CL%I;`aDX`CQ+6CI`@2q+7=d6OxAk=xw)5Q z^?og1MNAjy*v_#+u`qP^=f;;webwi$(W%|PPPQNlphc-9xB0Ln?FC0sUB(~zE2;$@ ztB&#O92}`FN0$LBR#&%V(&mrF%K9~2^92qn?7s{TafqcY2fgRsdVUY&@8VTUBo9G4 zv&t|AhlNn2t=H_lzPsW`#$sv9FMJqp@~&daNuwfj;%@W0792-Z&*}vZ)!Ih%c&LvyZsj{iDX9LL>>9OpEV_K{{TCO+0gek z34hIZ-wp*6iPR*vJ_G_IpbqgO>k%J&U-sPT7fqnp9KTPFM(4_z6ue=G+j3!+~kFgi`JVfpkHaLzJ8@k%=W*_R-n$GBNZ&Lrulju1_+?jSWo{B9 zR8PKhnRydI-U63tl4R>iYRrd=BR6GsgX7k4fl*5!{I;xieGZ2;26G9Du^lmjjG)cv27Bq4uumH>DMy?*4u0@%_VVS~f7Tfk;oI zb?N4Ua z)xkWeuv&a$wdD=^%0LmmmSzGelL74Oy^(6racry6@Ge5V3-|dPyB-JK zQMsMgMB3AkL1TVI(4dmMFvuUR|3y&Zuc>q?)^1+l&d&Wn)K|=Wa^aH~HEF^yxaSa< z+fTzbNCgZ?8M{tz+k_mUFi}Faf#_Xg(3%MJO*@O5BF8}h5q)tIm;IUFU(FXTJkY?Y z1mqF@xsd?^F88uT>kdEl(~ICI_*2D3HE%$ zOcn|Ck!tLj@K~X?3f5CAqEF}0y#Ia7QagMby6(d}=?NMk0x8kztxF1T zK#rz_+pVYLEDdwJ? zh^jNgPUf%-pEu_UvSu{VF&bCl;4vHxcXbXE zhd=o8UTShu`Ub`;KMNqp?Ly+*iu3Oh!~P7r8)Ok*ovsuEK$kaA8$DXa+Q#=4*@G? zC_9*39ewYIhwWH8&29cMjH~4%D)S&_I1aPVulao1y>Un|% zI;V^a4^|+M54!}RC^KEV z;Uz#){n8KYRw1B6+r{M0q-29X&WPO*-}w$UkFEI!@D7cKwIO#}vL@+(?tR{SX(ejYN=`a=d#SI3yQP!Qamk?B90+w78Rg3FL^ z5%qfn?`Jprz?BinHMo;H-g4kIKd_6j7(6UmX=sRf*@Y`Qr*=+E26vWwSKcC?o0S)J zZPc}^>_Rwid9spulTrrfY*&Co)q4e1`jGsRi{Xje(Z1^p6=M281eugKVQON5Zlv0B z<*)sK%^^lLCzICx{k`CNTp)LPbqRmql*3D|=$vB)O#1sCMbKyk%@bze<+VQQDkd~5 z`1vlC)L8Tc7>Vca7VC5!j4**HR@qBO&}}9i30;KuSZh`AG(>F61wV?Q3mhmioOshYLQ9v;_866xMEi9*M%0(=h>8aZSixwsNr1wBRvsy=laM5{qXwC@Y~QbSLc~k=dJJ;o8{KTjU6N zsnjM)F{_Ck$$1an{)zkoUt~mfy5@1V`fORf*Z&XDXLlxDg;ukxh@e_8dcz^~&5dR% z4V9!^3#80v0*7Di8==FuCznY?D1^Oxy(Wc343M3da<|{t<28gzOrld}84nDXa=ucf80M8Gy5bIhY})#2y%;JBmQ`(E}8Alh`%ezTz~)<^$`fZzRI zAtsukF~Fr4x(B^|Xz3!O!O16pmBE^@}nAVN>$Ji#!1^7#n17WOOc zrfNg^bw!%W8UU5U2 zq+zn?d|Y)vhB_u?Om*lcavmGt^R>dJPOZZI_9BgL{k0S01P$Z6pLbJ_BTv!Y7lwL0oIXj z7m5Y=@o!{uFEC0o$D%@f`PwQiP1F2@P8Dm>@&uR~O?_jSl6Y5kKwf>CAdEdXQX0~Um`ywD$$9OXRAA3598`Vs{s8KAnug>eualP3p`WexhF;e{dIM(e-r|#GVDQ z5i}C8`3eX(&n;-Z*ap(yV+Oy9yzIg{Jw}rYEds9*$6#rj#-if$19@u)(GHi)~&s@#wpQ-(lWkw7Lo4$CE6p@GfgT_@JG=>W{)4$$>5=Q zC8c<1L-`8j1;lFu$8QpN)4!mLKmwDPtwMGsfC^&U5vK{(==H|4CjL<{LP=`(vb%zV z*ft|Ta?UI2O#n5O>7jy}fJoMlA~bkH@Pls3g!dmHh)u8fgKP{Z^-BIG5g)dfveiB@ z=#z}KcFy@8l74J0)BBmw!D8_I85xoNhyQ^AIaIE3Est==hGj;sEhlP_u%#UlKN|n6xq*#zr0NcwGG@oRS zRB1+zAbhwaFW?vxHgNXY3B|1eK3q;s2ZGsk@upE<6Jb?1KKkzH+u}Il+~8cO`$@vh zSk)_tz3dJ2{UuV8WQMBB%uix<@2mwD6l&)Q;~Iiy>G^_}H#Qk<8%xup^kY7pZ#!OV zNi+91ni7zN3Km&%OVD}IB^+h;1mANg@*k!8C4L@=*MN`$k2)bAEDR4p)qwRMp!a3s zcqDa2KErq8bdwq@^=oipk8qna?9$K6@@^7zm>sY!k@Z^uoH7$ZB=$&0;|FKWPJKxq zE`W$NP=vUoNyl08TBfcG6EU=E`W~vx#b%v?!a?`XhmZ2tQh{oMKMp*Qv?Li{S=<%o zn9(VE=QzPzggBL?EU3r9UT5ToD6c@>;LD57Q)!vg{aBSkl1wiEfP()egbm7RY?&xhl z78XXvz;@uw5*^;;d`Z?-IgsG;xB4f3#dX-9 zfi{)v!c~mN8mW3#DMa|(-vRp!NB8OJA~mN@+({vy&&cjmz^RqZ(HcgV@7>>XghZ#R z$%;5%!FLf=u%nF$>U|e)toY@4usC*SES>PRlq^(+oe-DgLa+U!y7r#ynFdX3cFxE> zo^n-?X&wuhFF|UB;Fz3Xx}5H=aGNbLmd%fq-chnN(#A$-m91-lq^JU+S3~J6g)AbL zCmo;R*7y$WCslx%Awa zWMp@D)g!dvfGa%KfC7jA*3!3 z*%#yCKr74?6DQxdkEw_wlv!Bh@bc--FT%K4Sx6Poj8cc2OvMDSB%pyXAvg@WyE+ zg(2J`2@dX4era8YTwabgHj~1+64q}CpTm0CLhQM0B;Q6PLPIUeJSA1M*h?uPA)Sp* zvhxrtvle)Jej(v_k(hoxPv7&8&~uneH(rv;>Ro_7!iNyG#4^XDjjsK7pCO*63pU>o zMb(1NEtJpUu(;}LSwMA4IueSaABSX3y;nI#s!HPhP#*7ZLVKE5b9jAurVx*ROL%c_ zFWx$n^WBmao-C+$5eU9ia0H_mVRr;4V>vyB9CmucoUC2~NHFw#?wat1VelzlAe%9tu1)Bg2nMfTl&|ArzrGsFA%X_{{t-ZTcy(L^s0E#`R7d>W5T*GtJgI}+gc)ZV&HO;-QI{4 zaAj3$2`;Ym8c|;RV!F(sXv99*qESGZ;tB792cQN~<*9U=ciddI(eaXCDK}rP@N3~x zdm;AE>RH!aCS;6s1?kKuu2V-mdJFh^&_Ay?pPMQX3Hn1J-hIAY)}>UzhFR*|(wlg4 zl6awTDRF`QM`uWVy_E62hqt}6D3U}BNAB_M$zG}2k+3rIv%B(dhP$~{W1y`%bQ3Xi zRYIUN`qN&&u8AiV&Ud8kx)e~h8=}H5(+|@3gFM48^uW&7cCh!uS}HSJfvB~~u27OK zgSmAQUGWvs0WM@$DJ>)+ow6kK3;-gj-NAo&D@%p6`Nc73K3WMKETd?rqU0qXU$1}r zEEy_YBO-H!1LcbWRah9|-WNiD$<1wO20)jyhTs{hh|ncy~y8U0w{wJa{Cd;o&)AW<}Q40gJqk#^?s)b zPnH>SDzG6_1i?2Y=iu=3e*mrTH{Rqi zW?(fq?!j`6gL0%B-!ex(*Hq3;LJGPrBylbj+3hQdwP{-pfrk?UK*PAamaVc+D(c&8 z=ZEYKMlW0qvO3%5ct%+B6MSao98l*w8cT0`S7<{ba_??eA;8jj0a3uxt=Jp*rOw#F z1LDPOWzYb}X>**-(VNfbatzRw_CI-HwZe>s*H^_@nMIvCqL45akNI)$eq&&f%m(VC z)TIQ^FO#H`io>WJzyqKtbvsI=v5Q-?exKv3;?q?Q4U4$Tan>sYcJ<;J0OuzCbSu2(Y%b)%ymW?3*!>Sc z$5oHg-4&P%5$F0K2eLt!o@X!EF;2cg-v0nG%U9S1#G%{)1S*|F3=TYL?!L0A&v&6! z2*l+Bj$!>%6}m(+38;Zu`-=nZMq1`7CKIw&-K*1cLL<83XfZ0*oH z^Zsr<&OhkRF6v~!R7kbJkHFbxYz1eXOKz*~3A$h0pPw=1Linv!eH2fYiV!R(_REK1 zXyO-SM_)D6d=K9W;=-V@ZNBOizHLZWH9tfB)TWNk99zt7o-o2+r$UmpuSo{^GBbe! z`x;ED^c3sm7R#Y6WGHN+VKnDj{4*}Ws&R6WjmJMxyq!P#d=#6JRtCt^mGoByhx3?* z*f7EMZUw(>(0&?9_qm0{2Ac%n16VCPy(01|NY*wqy2v-%yxYr!b@G8KWt^GZd(C)p zYU`vYGkf9NKye#$g)Qi@)d4|xKW(1DXgNQ6`FzrCAvhOciV#WCL%=Dqc_gKDKCI3c zXRI=8#gIaZTz{~4q$%4rM$pE*QHzV%4z)K0KRB(4`O=V(_R3#Ejvt#q;OXj_x8E_6 zGT@a2GKo!bB2tb>C_J$q<^>B1{Jks8b^HfVX&((h(8XaSDSQ8&L*;8d1fZ69RpQ|# zNQI3a^_;oHgfGKtQS9=7w%uW^QHE)gn_Z!x8~ZG%6Xy=Im?FWxT;G&3if>84jNnDO z=+uccC8hv}^Czo}3&j5IG0xu6P*-7UTIY;$XKa^P=LM7Oh~(8;6o?|KAyv%2ym z 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 Zg08yHoDP#fgA5)~3?Bix{{SX)|JmclB$faG diff --git a/wp-content/themes/aktiv2014/dist/images/icon-menu.svg b/wp-content/themes/aktiv2014/dist/images/icon-menu.svg index 69bbae3..bde2f95 100644 --- a/wp-content/themes/aktiv2014/dist/images/icon-menu.svg +++ b/wp-content/themes/aktiv2014/dist/images/icon-menu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/wp-content/themes/aktiv2014/dist/scripts/main.js b/wp-content/themes/aktiv2014/dist/scripts/main.js index c3bcf13..4d9508b 100644 --- a/wp-content/themes/aktiv2014/dist/scripts/main.js +++ b/wp-content/themes/aktiv2014/dist/scripts/main.js @@ -1 +1 @@ -"use strict";function getParameterByName(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)"),a=t.exec(location.search);return null===a?"":decodeURIComponent(a[1].replace(/\+/g," "))}function format_posts(e){var t="",a=0;if(0===e.length)return"Idag er det stille på huset :-/";for(a=0;a',t+=''+moment.unix(s.custom_fields._neuf_events_starttime).utc().format("HH.mm")+": ",t+=''+s.title+"",t+=' '+s.custom_fields._neuf_events_venue+"",t+=""}return t}function format_results(e){var t="";if(e.error)return console.log(e.error),$(".search-result-list").html(""),void $(".search-results .meta").html("");if(0===e.meta.num_results)return $(".search-result-list").html("Uffda, ingen treff."),void $(".search-results .meta").html("");var a='<% _.each(results, function(u) { %> <% }); %>
    NavnBrukernavnEpostTelefonHar medlemskapGrupper
    <%= u.firstname %> <%= u.lastname %><%= u.username %><%= u.email %><%= u.number %><% if(u.is_member != 0) { %>Ja<% } else { %>Nei<% } %><% _.each(u.groups, function(g, i) { %><%= g.name %><% if(u.groups.length !== i +1){ %>, <% } %><% }); %>
    ',s=t+_.template(a,e);$(".search-result-list").html(s);var n="Antall treff: <%= meta.num_results %>";$(".search-results .meta").html(_.template(n,e))}function do_search(){var e=$('.filters [data-search-filter="has_valid_membership"]'),t="",a=$(".groups-select").val();null!==a&&(t=a.join());var s={q:$(".search-field").val(),filter_groups:t};e.hasClass("active")&&(s.has_valid_membership=!0);var n=$.param(s);window.History.pushState(null,null,"?"+n),s._wpnonce=$("meta[name=x-inside-api-nonce]").attr("content"),$.getJSON(user_search_endpoint,s,format_results)}function user_search_load_initial_values(){var e=!1,t=getParameterByName("q");t&&t.length>0&&($(".search-field").val(t),e=!0);var a=getParameterByName("has_valid_membership");a&&"true"===a&&($('.filters [data-search-filter="has_valid_membership"]').addClass("active"),e=!0);var s=getParameterByName("filter_groups"),n=[];if(s&&s.length>0){n=-1!==s.indexOf(",")?s.split(","):[s];var r=!1,i=0;for(i=0;iVis medlemmer på '+a.name+""),$("[data-list-name='"+e+"']").addClass("selected")})}function mailing_lists_load_initial(){var e=getParameterByName("source");e&&e.length>0&&mailing_list_show(e)}var program_endpoint="https://studentersamfundet.no/api/events/get_today/",inside_url="https://inside.studentersamfundet.no",inside_groups_url=inside_url+"/api/groups.php",user_search_endpoint="/inside-api/",email_endpoint="/email-api/",user_profile_url="/profil/",query_params={};jQuery(document).ready(function(){moment.locale("nb");var e=jQuery;e("#menu .menu-toggle").on("click",function(t){t.preventDefault();var a=e("#menu .main-menu, #menu .user-menu-wrap");a.toggleClass("visible")}),e("#menu a.profile-badge").on("click",function(t){t.preventDefault();var a=e("#menu .user-menu");a.toggleClass("visible")}),e("[data-toggle-introduction]").on("click",function(){e(this).parent().fadeOut(600),save_user_meta("introduction_dismissed",!0)}),e(".front-page .introduction").length&&get_user_meta("introduction_dismissed",function(t){t.hasOwnProperty("result")&&"true"!==t.result&&(e(".introduction").show(),e(".introduction").addClass("fadein"))});var t=".program-list";if(e(t).length&&e.getJSON(program_endpoint+"?callback=?",query_params,function(a){if(a&&a.events){var s=format_posts(a.events);e(t).html(s)}}),e(".search-form").length&&(e.getJSON(inside_groups_url,function(t){var a='',s=_.template(a,t);e(".groups-select-wrap").html(s),e(".groups-select").chosen({no_results_text:"Uffda, ingen treff!",allow_single_deselect:!0}).change(function(){do_search()}),user_search_load_initial_values()}),e(".search-field").on("keyup keypress",function(e){(10===e.keyCode||13===e.keyCode)&&e.preventDefault()}),e(".search-field").on("keyup keypress",_.debounce(function(){do_search()},300)),e(".roles a").on("click",function(t){t.preventDefault(),e(this).toggleClass("active"),do_search()})),e(".page-mailinglists").length&&e.getJSON(email_endpoint,{_wpnonce:e("meta[name=x-inside-api-nonce]").attr("content")},function(t){if(t.error)return void e(".lists-list").html(t.error);t.lists=_.filter(t.lists,function(e){return e.num>1}),console.log(t);var a='<% _.each(lists, function(l) { %>

  • <%= l.name %>
    <%= l.num %> medlemmer
  • <% }); %>',s=_.template(a,t);e(".lists-list").html(s);var n={valueNames:["list-name","list-num-members"]};new List("mailinglists",n),mailing_lists_load_initial()}),e(".profile").length){var a={q:e("meta[name=x-username]").attr("content"),exact:!0,_wpnonce:e("meta[name=x-inside-api-nonce]").attr("content")};""!==getParameterByName("username")&&(a.q=getParameterByName("username")),e.getJSON(user_search_endpoint,a,function(t){if(t.hasOwnProperty("results")&&1===t.results.length){for(var a=t.results[0],s="",n=0;n"+a.groups[n].name+"";e(".group-list").html(s);var r=e(".is-member");r.html("1"===a.is_member?"Gyldig medlemskap.":'Du har ikke et gyldig medlemskap. Du kan forny medlemskapet ditt via SMS, via SnappOrder eller via nettbutikken i Inside.'),e(".js-inside-link").attr("href","https://inside.studentersamfundet.no/?page=display-user&userid="+a.id)}}),a.destination=e(".profile-details .user-email").text(),e.getJSON(email_endpoint,a,function(t){var a='<% _.each(lists, function(r) { %>
  • <%= r.name %>
  • <% }); %>',s=_.template(a,t);e(".account-details .email-list").html(s)})}}); \ No newline at end of file +"use strict";function getParameterByName(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)"),a=t.exec(location.search);return null===a?"":decodeURIComponent(a[1].replace(/\+/g," "))}function format_posts(e){var t="",a=0;if(0===e.length)return"Idag er det stille på huset :-/";for(a=0;a',t+=''+moment.unix(s.custom_fields._neuf_events_starttime).utc().format("HH.mm")+": ",t+=''+s.title+"",t+=' '+s.custom_fields._neuf_events_venue+"",t+=""}return t}function format_results(e){var t="";if(e.error)return console.log(e.error),$(".search-result-list").html(""),void $(".search-results .meta").html("");if(0===e.meta.num_results)return $(".search-result-list").html("Uffda, ingen treff."),void $(".search-results .meta").html("");var a='<% _.each(results, function(u) { %> <% }); %>
    NavnBrukernavnEpostTelefonHar medlemskapGrupper
    <%= u.firstname %> <%= u.lastname %><%= u.username %><%= u.email %><%= u.number %><% if(u.is_member != 0) { %>Ja<% } else { %>Nei<% } %><% _.each(u.groups, function(g, i) { %><%= g.name %><% if(u.groups.length !== i +1){ %>, <% } %><% }); %>
    ',s=t+_.template(a)(e);$(".search-result-list").html(s);var n="Antall treff: <%= meta.num_results %>";$(".search-results .meta").html(_.template(n)(e))}function do_search(){var e=$('.filters [data-search-filter="has_valid_membership"]'),t="",a=$(".groups-select").val();null!==a&&(t=a.join());var s={q:$(".search-field").val(),filter_groups:t};e.hasClass("active")&&(s.has_valid_membership=!0);var n=$.param(s);window.History.pushState(null,null,"?"+n),s._wpnonce=$("meta[name=x-inside-api-nonce]").attr("content"),$.getJSON(user_search_endpoint,s,format_results)}function user_search_load_initial_values(){var e=!1,t=getParameterByName("q");t&&t.length>0&&($(".search-field").val(t),e=!0);var a=getParameterByName("has_valid_membership");a&&"true"===a&&($('.filters [data-search-filter="has_valid_membership"]').addClass("active"),e=!0);var s=getParameterByName("filter_groups"),n=[];if(s&&s.length>0){n=s.indexOf(",")!==-1?s.split(","):[s];var r=!1,i=0;for(i=0;iVis medlemmer på '+a.name+""),$("[data-list-name='"+e+"']").addClass("selected")})}function mailing_lists_load_initial(){var e=getParameterByName("source");e&&e.length>0&&mailing_list_show(e)}var program_endpoint="https://studentersamfundet.no/api/events/get_today/",inside_url="https://inside.studentersamfundet.no",inside_groups_url=inside_url+"/api/groups.php",user_search_endpoint="/inside-api/",email_endpoint="/email-api/",user_profile_url="/profil/",query_params={};jQuery(document).ready(function(){moment.locale("nb");var e=jQuery;e("#menu .menu-toggle").on("click",function(t){t.preventDefault();var a=e("#menu .main-menu, #menu .user-menu-wrap");a.toggleClass("visible")}),e("#menu a.profile-badge").on("click",function(t){t.preventDefault();var a=e("#menu .user-menu");a.toggleClass("visible")}),e("[data-toggle-introduction]").on("click",function(){e(this).parent().fadeOut(600),save_user_meta("introduction_dismissed",!0)}),e(".front-page .introduction").length&&get_user_meta("introduction_dismissed",function(t){t.hasOwnProperty("result")&&"true"!==t.result&&(e(".introduction").show(),e(".introduction").addClass("fadein"))});var t=".program-list";if(e(t).length&&e.getJSON(program_endpoint+"?callback=?",query_params,function(a){if(a&&a.events){var s=format_posts(a.events);e(t).html(s)}}),e(".search-form").length&&(e.getJSON(inside_groups_url,function(t){var a='',s=_.template(a)(t);e(".groups-select-wrap").html(s),e(".groups-select").chosen({no_results_text:"Uffda, ingen treff!",allow_single_deselect:!0}).change(function(){do_search()}),user_search_load_initial_values()}),e(".search-field").on("keyup keypress",function(e){10!==e.keyCode&&13!==e.keyCode||e.preventDefault()}),e(".search-field").on("keyup keypress",_.debounce(function(){do_search()},300)),e(".roles a").on("click",function(t){t.preventDefault(),e(this).toggleClass("active"),do_search()})),e(".page-mailinglists").length&&e.getJSON(email_endpoint,{_wpnonce:e("meta[name=x-inside-api-nonce]").attr("content")},function(t){if(t.error)return void e(".lists-list").html(t.error);t.lists=_.filter(t.lists,function(e){return e.num>1}),console.log(t);var a='<% _.each(lists, function(l) { %>
  • <%= l.name %>
    <%= l.num %> medlemmer
  • <% }); %>',s=_.template(a,t);e(".lists-list").html(s);var n={valueNames:["list-name","list-num-members"]};new List("mailinglists",n),mailing_lists_load_initial()}),e(".profile").length){var a={q:e("meta[name=x-username]").attr("content"),exact:!0,_wpnonce:e("meta[name=x-inside-api-nonce]").attr("content")};""!==getParameterByName("username")&&(a.q=getParameterByName("username")),e.getJSON(user_search_endpoint,a,function(t){if(t.hasOwnProperty("results")&&1===t.results.length){for(var a=t.results[0],s="",n=0;n"+a.groups[n].name+"";e(".group-list").html(s);var r=e(".is-member");"1"===a.is_member?r.html("Gyldig medlemskap."):r.html('Du har ikke et gyldig medlemskap. Du kan forny medlemskapet ditt via SMS, via SnappOrder eller via nettbutikken i Inside.'),e(".js-inside-link").attr("href","https://inside.studentersamfundet.no/?page=display-user&userid="+a.id)}}),a.destination=e(".profile-details .user-email").text(),e.getJSON(email_endpoint,a,function(t){var a='<% _.each(lists, function(r) { %>
  • <%= r.name %>
  • <% }); %>',s=_.template(a)(t);e(".account-details .email-list").html(s)})}}); \ No newline at end of file diff --git a/wp-content/themes/aktiv2014/dist/scripts/vendor.js b/wp-content/themes/aktiv2014/dist/scripts/vendor.js index 3075791..42445fe 100644 --- a/wp-content/themes/aktiv2014/dist/scripts/vendor.js +++ b/wp-content/themes/aktiv2014/dist/scripts/vendor.js @@ -1,9194 +1,3 @@ -/*! - * jQuery JavaScript Library v2.1.1 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-05-01T17:11Z - */ - -(function( global, factory ) { - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -// - -var arr = []; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "2.1.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // 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 just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // 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 ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - 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: arr.sort, - splice: arr.splice -}; - -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; - - // skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // 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 ( i === length ) { - 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({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - // 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, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android < 4.0, iOS < 6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // 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.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Support: Android<4.1 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return 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 ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - 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 - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, 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 || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v1.10.19 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-04-18 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( documentIsHTML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document (jQuery #6963) - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // 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 - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== strundefined && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = 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).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, - doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer - if ( parent.addEventListener ) { - parent.addEventListener( "unload", function() { - setDocument(); - }, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", function() { - setDocument(); - }); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { - div.innerHTML = "
    "; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [ m ] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowclip^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "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; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (oldCache = outerCache[ dir ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = ""; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = ""; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ 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 = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // 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 ) { - // 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: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // 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.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} - return cur; -} - -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 sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); -var rnotwhite = (/\S+/g); - - - -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * 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( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // 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, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( 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 - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - 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 ) { - 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 ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( 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 !!fired; - } - }; - - return self; -}; - - -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); - - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // 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 ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // 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.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - -function Data() { - // Support: Android < 4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Math.random(); -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android < 4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; -var data_priv = new Data(); - -var data_user = new Data(); - - - -/* - Implementation Summary - - 1. Enforce API surface and semantic compatibility with 1.9.x branch - 2. Improve the module's maintainability by reducing the storage - paths to a single mechanism. - 3. Use the same single mechanism to support "private" and "user" data. - 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) - 5. Avoid exposing implementation details on user objects (eg. expando properties) - 6. Provide a clear path for implementation upgrade to WeakMap in 2014 -*/ -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - 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 : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", key ] ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - 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, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHidden = function( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); - }; - -var rcheckableType = (/^(?:checkbox|radio)$/i); - - - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // #11217 - WebKit loses check when the name is after the checked attribute - // Support: Windows Web Apps (WWA) - // `name` and `type` need .setAttribute for WWA - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE9-IE11+ - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); -var strundefined = typeof undefined; - - - -support.focusinBubbles = "onfocusin" in window; - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // 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 - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = 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 !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // 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: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - 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; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // 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; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.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 ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // 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 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // 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 ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && 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) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === 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( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - 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 ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // 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 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, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome < 28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - 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(); - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -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.defaultPrevented === undefined && - // Support: Android < 4.0 - src.returnValue === false ? - 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; -}; - -// 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 = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // 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; - } - }; -}); - -// Create "bubbling" focus and blur events -// Support: Firefox, Chrome, Safari -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -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 = 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( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( 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 ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE 9 - option: [ 1, "" ], - - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] - }; - -// Support: IE 9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute("type"); - } - - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Support: IE >= 9 -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Support: IE >= 9 - // Fix Cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Fixes #12346 - // Support: Webkit, IE - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "