From 3e21d0532c222ee93c7ea5ebee79697fcab1d18a Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 4 Aug 2014 15:34:42 -0700 Subject: [PATCH 01/88] Adding in ops helper files and README --- README | 149 +++++++++++++++++++++++++++++++++ ops/pagespeed_bin | Bin 0 -> 2371933 bytes ops/production.ini | 57 +++++++++++++ ops/scripts/seedHars.sh | 15 ++++ ops/scripts/startHarStorage.sh | 4 + ops/scripts/stopHarStorage.sh | 5 ++ 6 files changed, 230 insertions(+) create mode 100644 README create mode 100755 ops/pagespeed_bin create mode 100755 ops/production.ini create mode 100755 ops/scripts/seedHars.sh create mode 100755 ops/scripts/startHarStorage.sh create mode 100755 ops/scripts/stopHarStorage.sh diff --git a/README b/README new file mode 100644 index 0000000..b745b02 --- /dev/null +++ b/README @@ -0,0 +1,149 @@ +Supported platforms +Test Suite Passes: + +Ubuntu 10.04, 11.10 +Mint 12 +Debian 6.0.3 +CentOS 6.2 +Windows XP SP3, Windows 7 +Supported browsers +Test Suite Passes: + +Firefox 3.6, 11.0 +Chrome 17.0 +Safari 5.1 +Opera 11.61 +IE 8, 9 +32-bit limitations +MongoDB uses memory-mapped files. When running on a 32-bit operating system, the total storage size for the server (data, indexes, everything) is 2GB. + +If you are running on a 64-bit os, there is virtually no limit to storage size. + +Thus 64 bit production deployments are recommended. + +Debian/Ubuntu/Mint dependencies +Install the following packages as root: + +apt-get install mongodb + +apt-get install lib32stdc++6 (for 64-bit OS) + +apt-get install python + +apt-get install python-cairo + +apt-get install python-rsvg + +apt-get install python-setuptools + +easy_install pylons==1.0 + +easy_install webob==0.9.8 + +easy_install pymongo +CentOS dependencies +Install and start MongoDB + +Install the following packages as root: + +yum install python + +yum install pycairo + +yum install gnome-python2-rsvg + +yum install python-setuptools + +easy_install pylons==1.0 + +easy_install webob==0.9.8 + +easy_install pymongo +Windows dependencies +Install and start MongoDB + +Install Python 2.7.2 + +Don't forget to add Python directories to the system path. For instance: + +C:\Python27\;C:\Python27\Scripts; +Install PyGTK bundle (All-in-one) + +Install pyrsvg + +Install setuptools + +Finally run in command prompt: + +easy_install pylons==1.0 + +easy_install webob==0.9.8 + +easy_install pymongo +Installation +Download the latest package. Use easy_install to install downloaded egg file (root privileges are required): + +easy_install harstorage-1.0-py2.7.egg +Create a skeleton config file for your application instance called production.ini: + +paster make-config "harstorage" production.ini +After that run the following command, specifying the config file you want to set up, which in this case is production.ini: + +paster setup-app production.ini +Now you can run HAR Storage using the Paste HTTP server: + +paster serve production.ini +Upgrade Notes +In case of upgrade to HAR Storage v0.6 downgrade of WebOb may be necessary: + +easy_install webob==0.9.8 +In case of upgrade to HAR Storage v1.0 go to home page (http://localhost:5000/ by default) and wait until the data was migrated. + +Also check that you are using exactly Pylons 1.0: + +easy_install pylons==1.0 +It really makes sense to backup your test results before upgrade. + +Customization +Once the production.ini file is created, you can customize it for your particular deployment. + +Web server options +host, port - these specify the IP address and port the server should listen on for requests. If you want to serve an application on all interfaces, you will need to change the host option to 0.0.0.0. +MongoDB options +mongo_host - IP address MongoDB database. +mongo_port - port of MongoDB database. +mongo_db - name of database. +mongo_auth - this can be true or false. If true, MongoDB authentication is enabled (false by default). +mongo_user - user name for authentication. +mongo_pswd - password for authentication. +Debugging +debug - this can be true or false. If true, the interactive debugger is enabled to allow you to track down problems (false by default). +Logging +Sometimes it makes sense to redirect application output to log file using --log-file option: + +paster serve production.ini --log-file production.log +Theme +You can also customize chart theme via Preference menu at the top right corner of the browser window. + +Page Speed integration (optional) +There are prepared binaries for two platforms: + +Windows x86 +Linux x86 +You can download them here. + +In order to create own file you should meet prerequisites for your platfrom. + +The next step is installation of depot-tools. + +Now you are ready to build Page Speed library. pagespeed_bin or pagespeed_bin.exe is the only required file. + +If you want to enable Page Speed integration change permissions of pagespeed_bin file (Linux only): + +chmod +x pagespeed_bin +and modify configuration file production.ini: + +ps_enabled - this can be true or false. If true, Page Speed integration in enabled. +bin_store - this parameter specifies base path to pagespeed_bin executable (by default this option is equal to the directory of configuration file production.ini). + +For more information visit - https://code.google.com/p/harstorage/w/list diff --git a/ops/pagespeed_bin b/ops/pagespeed_bin new file mode 100755 index 0000000000000000000000000000000000000000..aa0d8c03c187a568f4578dbcefab38dabb2de3f3 GIT binary patch literal 2371933 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 L(%!Vh$uM41Y%pfu5 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 z�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≥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⪻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Η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

;=U!^SJ#L4)m`aM!^#i$>v8G#bfvz%I_kuw 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%0D-@;!>q#W1+ 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%0Dh+v`&wo7i&tJReKK>p5zvkcH9qLN_ z{ZRaU`RCty?)`{P-=Is?)^GfjORu|6 zbRkb4a_SO<8Sx7Ud4&U6)P@T$!jk82{2Nbx1EP9Q>R;LjmG6stsfAb)+fB@)f4R$N z!Q42y@d|C|BlZ=+fuHs~^XHk@jW?l8GWezb6vh8~<4Qg=hR5Dy{%_oPy+^AT7Ud41 zm6UG$N_6zpJyS)nDE*BW)|m#qzY#othTfmO@xOZT?!_A~^Up8Oo}$gYbsP8aGl*ey zk#?oWzg~bluvI*<{F&etCWB~oKk1bk{*)_MbxpV43tSg}q-~yN^hFOM)>6G2WYumb$Ux(+Pa; zAtiNhieG?(FZ1J<-sa=EJjZisuBbrT>vNklLd6v%|F5@C1xC0?1xo0cNj(1rw7w#3 z`YBz@uAjN_>^eH|V({5=S=9Acc;*>tR*2%+8_(&n7a8USDdR8bP_lwCR}g}A=5_iH z5gBDZ~QC`g-*UAm11HqFt`lzdBKUF zljcf~bPYQXe9++j@eFrlt>_~EeIq(}#f@Kghf*nF0^R-EE>qhfgO65N?uk#FD*znG8d$DruU*cC>ltD-8Z zSe}!#<4xUUO(r`R-;x+%@{s48wxh`sxK-L%{E+rI`JfH&9yjx0fwSeRzGQx0K9q#gZ z6ZCAGB-AqbPWf`l6d2CV646SRh?(@zGmLiRe_oROm#{BXUzTsk6>QRmpEv-K8(`Z7 za@MzGzb^!_cwG<3yz{fCwrIPpM&ELnU^J-$1sIr|&ebqp@$d!fkiv!pKA9I%KKcyR z!2{k7#6XaGc6=C8OK=4!mOj4-b|nX0`aobs85t;omMbta`JEOE7u76*mPOr(RKg>J z)ynZAV)}{)ta!9IzuG9j;!*9dN<7h}L(ugi(DzD&&X882ehOTrGqN8?7D5bpS>fW( zZB*8`94iVWPt*Qov^H53a>y}8(${BwspZq7&q#z;(~F?&a` zlGx-q?*BT#3CeZl%6jY#qIda-7nzZtDh|h)Of&62gMY&>kOM5BquR?vrXC!wqg_0U5v`}D$8 zuq44iQmwFr3VhF)h2R{TEYH}~BO(eS<&%bV$3co-q;$;Ri6vzSI&kbL0(4s(!koVL z%`ZrwBcBB#Y;&$gX*!vNp#KCCRD>u}H)a(RsPIw<;Fwl2ZN;8fVDGaq7z436E8%)W zwh`JVRdG(KtHf?nWNxMqFlT4Ktiwg6VHlu$dtO|Gf3}e~?UBH+kQXDA01j|C*)N4Z zXl2{S<6$V`ZERWV$Pc(rx0j3O2pZ6pq^qwDIN~#iVhSZOdDQ=<7qg#Q4sK)()nk<&JDCB@k%^js7dmBRsT^ZlR7MwD$VJIGN8$`*YTA6Gqamcs)A%k zm7)Z3Ou_hs)@cGpos&q^J-b0o^F`N+rM<7*_(kJ(OvsxGS>OT?! zybNtf5@_Y|!quF~(|eJQ5MKp3$jXwo8_xFXNU>5CgvApsIV9_@jkXY-!&x|5g4`Pl z#uTr*7@AnNn#gRJ1v)yx#~|#ui|K>^C3?}H%rbN-2Z%}d$=_9MFnTQK!BIuWTq1l- z%3ambtzo62L-#6Ctj?Z=NNMfBAf7ZQ)sMSs!3CgSWHu3n;3EX%5k~MsvLs>(J1p}@ zL+wm5<^EYwE16-(6o--O4eBgtJgvuYqwpllGuYPqu&vXrDP zo~!98|9~6S5(Gr0{4$~wE67#T_p?gm+ng(y|&OiPXOXN#%UDfpuSvV=UbD>(AU zA91)2kN%B$Ns?Yc>K>x~d_0_T0I8Uq>GLz1Y#fdazw~WD^Qx$s53JE8&>|j!sUJI-u#;`3KkJ7lBI!-S*O?V;Y z6<_OBHG2Z-ep<;FxG6^F;!z|hO9HIuY6=YAS)t3mQ*`(W{qAkPHVdY^%5iH zb!{GLC2Co)W``u(6j z96)0Q(vBN7rLYdJMi8y~#ZS2?7#%#ReFCkP;B2sCwqBU%B)j^ImCdPl}OU|Gi7IpLJ zH#c8>>gLh^zIpW7%~zkkdGzl$U;U@p-E{Nl?`|Hwd-LcIH;>-Yo++Qc<6Ae6-n@DA z!<$FX`iY~PN1yAq_m=tM5B%?^T<2DLr=Lgf#D5s>?|FF53f6Vw=FyLD9=-0K-*pc+ zk3RNjubEaze7k%rEVpGq`u(SyN59tASw97MoVj_#P_JuFnuPwYi!dJi4^W=>XwklF z#@_m+DT_V7xp`FR_>c~(XQA>P4-_rU77zbK8875 z4|?H&e!%2(jc3`gb`RIO*zc>qS=?CW=l?0X`A2&8Uz!Ev{ed5h{|~kg_nXF|d-(M+ zx1kuCp8k)gn7W?0dGrC~+&p>#b%{n^72YEam z^u7P2fi$r+FHbfUt5OyV9NlDIzmWKre6!Z_l1ABdGsN-UiWQrGRf&(E8ue$ zt~d~O^|Cw1ibC({5Kc<=Vm#z!JCL0v7GN`C64>b6dgpaA43sNZ*o>?)U4}7iSh4q+Y zwcJ#lL**~gApT1UyUUXCZ*HfD zu(n~m42{nHdT|gSNwh?JaWWb-2D)I(i_8g@7z#WvOIOOCBsTBj9Hq^+4WHqaz^u`5}#Y(6vRB%VdcFKk|Za&4`>#l5q8`bQ=x=UYXL zIDJhC_bAJOVj3i$fX*__#AxY{)q{VBj)w)x8!S`vRlCHy8D*uFg|bFq5|)gZ!^2q_ z3sfkm@f_fQVhMWWuQ!_+l$If37*N|u9d#g03of*nj-E>XFDxV6DauekA0n=v6Gz`| z2X(i8oad7-lSgdXT|}#rltZ2}8;HapC8-8|Z#_`*;AUa8ro*QUa%gBhv8*uGgB*Iu zI#1;|zxiKi+2KPBAq*oF3V8+<{F@0aqmDn==$>SV(MletqW#qciL?m6c|?ebE`f;x z?NE5olEJvjztI&m2<87@+^zx+Gb$Mn4-2{%;ske?;)Ke>sxd4jPB7VEjM$(Apa+uu zI?GYfLok4`K}cj7Q0s7pyPq)Pzwj{sDOAI_-}tx4Zdk@8(II=f5-sS>a;r&L_cQ~Z zg+nh}&q8@*Sm^<}Me`9(3ZWR&ka+d z27wt8bwB}bS!`8ITW>oy>ktaveH4=A5qivReP0-&L8M*59m%otk&c|M@vKLVp_vQ4 zLto2#7VrC1g%_H4M_cKD0U)So(ApOT18uMQf9V9mwNAMNn@(YYp&L@mcw_;MSE9vj z3l8nYPX0v+08CF|m?w6XOGz{asigkN!NCi~NHV$j4{YhoQSYu8Ov^wIG)e(R8}_mx zV)|$iJuACF9z4=m6p#G_mse^b^LZ-lnZN!?IiI~V+5>_AA9L^8Bv*B%>*i0%59~lh zAo0INb+o5Uhano`MlCxrWK@UB}T5>!y zozGGFURigW4~vSCG*JM91p`jt<(cHa0fnNE=E@1|CzRNX^>)SHbx~k0`$Hw~oICuz zCyV|flrkm0Q=wvb4(lg$r;3yv1)E?3KWwUR)W{p!1n%Vj)da4Qx8jojHKpeHd_1(k zV%T_a(K;U*aW&#ZFiV$A`mK-6fCQ zYM09^>WJnB>RcAmv9UzFj`5jGJ)0W^6Cj_c!CR6@L*d5aAlx2lY}~gnL;i5t9R~^Z zhv_bPh%ezR0(jn&BN^=Cx(MglDEL;2IM+2@L0dyzu~MV>l32NwKEzo(1)K6h2B1sj zT5>&$qM%>b6sEvp+$3^j85{kGxw-1!^J+%Uz-P30^&h`k3C0(5W1#R7gzI3aDB)!b zQCX-)4oIIKnNs?fo}X%kOpuj-O!@^Mp=yxrcl<3n#alR}3}A4Drkv5db##Ifp<7qx+t!PPpV*N>9dQhrc zgXa7hd)SS6vSZd%wOuN^GN$=n24_b5aKzAUt8Q9&S&bwNvDOQsWI9 z9Yd&e`Y=kSwu|E5TUqsk`FGh!it%#q2aUUcC8%pb41CkWF`i$WxnYG5F(7fM{vyJ< zQoy65EQwtr?SDe>6=`Ww)yk%X)V#z1XVkUUYWWX_S^f7j=O=)Tf{{Dq!!e5i zIhIC^&wG-PXGQ&?AFhy>hwz~1#II(gtJ_}N4PkL(*(gWHBO)~?htgVy*mxG;)hUGLetm`4sCFSe26yqB5zL~@WUa*OecE%+)kC$5zVlO9Z6J5Foy z7V_p>M4zz{+*c~W35ijk+?g40ko(|-z$Ixw+n!W zwhIUet^|yqi8Lb@Joua1^Ejcq0PQ~cWmQj;8OK3HHz})6T^@IaZeX_Z*S)wYXK_3 zWsr}5%istb;!&URFMN~_6pUdV`x-Z;OT6-^*>2VFRCLOqh#$LpQgkpV_l`@1t-x;$ zm)|XH2$Uz)gsqh^(xyF$K}Dcn7da`d^4h<@bqsH|HZ>*`X%l__kuEnyJZ*tN%!O}1 zG*z-@%mxv4>;ln*cBmCyuKGWsC+xsYrUhdF`4Rug$o0;ra4f7uySc%MZ;%)u34fCa zO5xdf=`K(50d%r1j@%>Uf#4Jl$6=pr!YyO7RD^*jM@`CC6Aoo4Az2`iwOfb{8>Zg= z`RqB|ple*Z668CrA|gnls=-0AC`Js8ZUN6EA*hiE%~JGpC$0%bD*16^2&5VTN>B3} zJo{H@1j`8a;$uc;WpV;{IZ%=BpTp5B!DQOzTC{38uO{~}L};b44A1rGQp%!Z z1_zvgyz<`HxTZ$E=!#FtFWjcT+eksDgtP}e!aC4Nt%+p{g7~)=3D5C2{7(O|7;f?x zgmEsX#hYeBD%vUYWQ2;j<$g>C!y;EQ5I2jY1fU5iQJLvh){qrd@1Z#M6?zcNaotMWO3K4`7-9kLP{Y@@GWg&!(Nb^ zxl5s))tJyU+vJt$LbuFW$y}=1Y_UVHWrrV!G9Ws`SXw*(sNk0MpL}^0s7}Gkf(;zP zPei%j;e(~ha<(e873)d9=Ns9`r$sm3y9+UfH5IBfEl?wWuKH!5!cqR_KEyX(eh4gB zzZ(NrSkHnL&*4};!(ZHMS>~7wr9mZ$Yr0l}CYXOuQg$P2Yuk08{O)lrxp&|$Q@SyC zc6fD=)Cx>FA=$bX0=fl6F8vs3>algo*~&;__|n+|sFe}ug+PcgUs+hG-G<@h2z)PF z0EBPavP0NO2Yj5&EX$!%yFm(*A$H_-lbYu)H$!#jqOy<*mf;{3*D*nEj#rnd91DGD z#x>VXD`jOWZ*M|(bv8l?J1s(SY@ljAEf{@ptQ!2G7Yo%Nee>7?esXa=FH3T19X@ zloRVzqxf)GSbcxe{cnfOgMcwgicG`mnOCDJ>A9>oXAhQF&1g5$P@GNq>EjzaS@oCD zfq(q`(PEx)cEI+y01x9**%=3lvFYc0%Jp)q%Lgi<6Wn+rr z-X;4HykLO4kcR%y)%BtI)O+?PP=YGnncBf{@dG2@HSWDOor2mu8INQz#kYr%sz#&J zv4RPV(6e2Fwh6+fNTn-}DlwPcm*=j!6DRah>g`c=z69n^Htpxt6F!1O zZjhJj@dOneeZbnVsw&^nb>l(Tu8ldlvR-oqhEq;WGbm{p zsTD+&_mObd%wWqDp$`$>AnX9W$%s zWh#&eWnm{i;!i$hnP=?nB^H1L2P);NtTv$DpnZjqJMksoQwlSbDw;yQq$t$P+Fgap zvL$mkZ^aXmO(kDLgOEAKE{veIKQy(LggFCit@3YDJKn~}!4GRH=}F(l)VL-YjJtB|Yw`su6fjQSl7)l0 zuprCsKkGoiEpl#io{$LQ3`FOY(|l-mF}LGL+Noqv3((Uxw&(o3N{ZpLn-(lw73kKq z(5bhySfuu|Cj3QMZEoR+<7fi+E}0OT^(Kvth%i_oXqQ1*e#oT_1EwEjylBJ#CZ$i9 zq^Fpcg#ogt4SbQ>oCI_F36+T95K1h(V%3R`aTHz1ZMVJXAzc%MHS-6_hsTI9fugl82TK0rQ=$eXgs@;$T5u(bCssQ3%R|(x ztW@ii7TJ7RTJPV_$aTUzyE4GiROoLt#^;47U5F{uWr!85SSCE1C3AoYKb$hxv{o45 z|3Ae|nh_M%UeKTzF7cM=xxycO@v}BB_F8E#v^dj~J@rBtbo7Zm=z?2^?OtcV%l(?; zjc3~<-gU~C`x^JH%q+C#`PTyPuTlmNJC4;ass?Y|-(Q?*_u2!yiI*2I3_Eu7-u`ln zFS`XZY&_YvCtLh-u|GfNAH3#@*U~R@VM)Im@k{3J^cR>E&Q4q$7t@E8T1#LW6jW-k=Q?RC+cbXJ`&k*xY){Ef2PZ4yySAB z=wZ5ce0InRZ%*$YTrM`A)Dki4N*iCQdI+yqL|dcI7#|b-XdjMu5u1aJnGM}!q>eQf z`&U1+%jOnai~Rw{9<>|)8U`(zV*~8HymHh1j=%9Z@>h-LHp+?q|Ei{Fm zVxgB2oB2@&7cWkDK$saR##c{|T5}7nQQKbe6dWat{EvFG(j!=$FYlR}JFdP?(A%0H za46@OBJIsi%v@4h>{whqz42_<{JAd`$b3XAmfv``HInm1MCmQ?u65pH*K5!6GWcK4 z&G#*g%Mn~TmEk)?Llaj=H6{!1BX9CH=?=Cr_ZqZ21xioDa&}s}G5^I%+&R-mmoXF= z2)CVU32_WQz!Y9{+{T9FL`A)Fd{AW7mH4h7vOQhe79K6yw*UV z0-sC$`9bUIY5XjBXRC^$|FQZE|BDzE-EwX`-*2{8mIqf)3x>xHp>Pr>1qtpukGC!h zz`-0;FW(yvmliZ70gAgwRic+Djy#!lAHMz>Y(HxGpe)qStc##eN}|Z@l1UYm|W}*lJ5kca1ip2LH8J zpd%{FSs9oQTUhQqDldyISk#cILx}O3RcTRgUd@~)1=-yRdL(Wp(@4RJ^3Z_IJx0Fj z5?c2*?i+T1R>F#VLF5Fr9?q@#ZfmZGr#3c@E%$lZcx$DV0y-i=9(F5*0#CUp#lpTC zzm!Gh$6!Gx^Q0VXYkf2lkSRgU(ei9kSbCgmTYN_}YCK}RB0zq0Yl{+*o|f#ln+!j` z<1V7O!z(!fRHr{Jg>GOdVcc7ax`}(E)3gs-@{Jq5HxB&u2AZ%orX&n%=4daZN%dkvsBH3!tJTNZ8q4p~!&2Qo;a@C4Q%@(%271 zF^Jb4yfl3r?@h75D{*@TFNv?v#X>~&SI!n3e8<{L5*u73E!$gez&&nCh{mV5HQMU6 zI;hKET@w?=sMTGN?i@+dJ*;nEGha?z3vAYFT%cut*KiE8hUeIy2%DXqV(a1UbplpQU8uYk{FQAG>c~^M8rR%=Ehp5IA}7%wVPM zjuKN{vtKDLvk_Hj%t*T_g`MkGiJ_F!E#6M+3+|qoOT|s_-41^z zD$261=#0ii*XlZ6o*j)|eqWY-DzJLRg4MI=aZZi}|C|%~Y|f15NOLyK4o;fMtYR{? z3SbeV{-{Mefbd+PfUshD%v8#T@xl!5%j+>=#%Kf_?RnIwpy{?)lT;9(%)uwzS^x#h zsJRoTl)8N;>oRa3--b_ub9=5aI-Ti0-V|-%071FI%j#uEafNx<<)9$c)y(KEV9)p& zdb7S@V$uo3r|KSOg^8E#tC4|N0nSMulrc&qNu7K&W-1Ru3ewQn+1J2dOEhub-%~;w z3FQh}4>PKFuAXiWbRHfqMF}JBe7q!jG zWZGV)B30pXM}OU5l7;KlWbsJg)&Rg`p|h6n6sF*1c!Y)!D>pe5PtC=J7B13k^JZKKM+~j%>>AuDN$DGkja;W&J9a3ms5x40+h$FB&BY_DP9&UV*Y8a#S{Pl|0?tA4yQiv z&E^aoM{5gm27G9hZ~l0=zeFo5=%_>6OMs<%NzRaHO=wHb1|}jvBysEopp6FicP3h5&RDEvHT-k-4e21gk6P3w!Vms(PWB7{ui3i;36>v z;xGcEMfTWlX2y3|WTiKTMe0GQbj;z23c|}A*M#cbwt}t7XZAIJ6$l>`%b0>WZBGdi z3R8cRs$Y4p!IZj@w2|5bSbw-oFXl5Ulo7g2NwxHf>Jc;9(9V}-OQs)U&2qWC2`pFL zDYH)dujipQqN}G-^k`Gg4UlNz?xvz>5*tbP25loOAg)OINC0iD65|9Hsv(xSsUli4 z2?UOrqA4Il^qV7}SIaERAt~;9Eo0bdbeX2dBI%LWT|~W!L(jDi*nR^m%3A1PWc-}O zpl@K?-d(pGJ28moTZ0sWHEVo;GXkN&)&vcWUl2sid+zW6Z$`7|Hs#6cE(T!MGxW6P zzp{}xAd~VK@FA# z+>5ExpceAMUh-(l~@DOm&pVU zv*L-B%S8pS1&rHykUPp8m+x;4u6zpUHR)&f zheJB!ekax4sPWT2dpWJW9mQp%-1=>{dh@NhE9bh0S}ROKXQ9vLG=23hL&37zLq&DX zr;58reDnAI_AGqj(3ST_U_n>YbIaaQ!+fO+e~Dk)1m%s*+2NIsIvuj4ePO*hndHi8 zw8|)mzhtuieE!gtb2BFSFNBtz{>qh0N|nACUu8RefUi()Xm1wPWQ!?hzKcujnn`_g z*H4-Ui{VNSA&ODDu3%jYS5D)((COanu({ZpKUj?Tq`$JvzQg`KD|eyTNjDHFEko)f%?YOV2?8b{t z`OOM0G1KY^n#=3?;D&cFew4R`0A&5<{Gt9}hykx$(wd4Dt?g3t%IQ&iaOJd__R8sD zlK+4_R&#PeaL5&!fwK2r39wu+tb9QK@cmi8Y;g63Zg|^3_yBOZvX%yEjYej5`Q1vt zJC6~V_sVHVn09GVIw)BTB1<;G%_*5A+B4&5#-od$zjFqWm`C6vtw*(ra6b zx3NEXvDSb;Enj`1iOGheEAMs3L)97`;-=#D2U-hUI4ifeVVehA!YxWB#XtssDyl=D zC5vXfb>g~-43ffCymPp6Bje!8- zn9yQXRqa#3(xq-G0*Q;>p@9h3{UGoVrRe?xAOsp|60dfZET*-9jP`GUSC;S_N}L1t z^K01N3Xp1p(uh#rH2>)|vDqTCTsaLiDR%I)MNlTVhcc3BdnBS_Ay}xV(VAE8nezQ# zKwa5PUcwE_aoQ8!GT|u{N0@vdC&(fxk8oxZ* zOMT4)ZT=)2X4sQ31m<2S^Qhe!51W}xcY`m(=B(w-W{(sp{n8(z%hT@72+8Ey8C3QB zY)+~E6m{tMpdynfJw4Q>&Hs%6!)|N7#YT6c0Jv6*(Ebz-WFaZrmD!ng1Jy-t6pUNV z*25L+HhCo5;j8^Q%*ezZmYBG?eB~U+Bo4w!`=D+qbQ5&1lTARYJs0^Wy^j$!#r^;# zQ{GJ2EI40@mP{bxP$*A_-{la+_*ecie<;`lz{qA>!P=#sM)x*;5mGcffg=M@%PSxC z<}nvwI+e=|(9l)Pd0jA>oD3u{^?NLy+e=Ji^;L`!bd@lJZ^9o}Mg-ltd3NsjOVuV~ zW|M(J#P1R+;0K7-HFR%Jrd&cEFFAw|ovC$Mj_z2Vt5U2Q5q6B#s`MObA>BL9-~O1~ zU-dgtfh@3C)WqPeUhhzwhII=35qX`EBgDBl1pPUsN#k`>VLmaR5s~EVKlEhPwUvRh z_wP2NJyUmYhk(HCl&Z;1rvdB9EZu6rrE;_NL9VJN&pf^Zmt98v@jXr7co@cdaJ)i`CZWna=OzpAV5!$y zMp7}QD<6S!qVeE}@h7V+ekII^8MH-K?;Q%61%L_Mt>U@GsPU*}kx=C92p-DcR=2sP zD8(VOU1d`dT3Ifm5rCdV!|8=9tzqL)I4@MpK+>ojWfa5BS&>FrMqSaNQiiPcW{qX3 zR-R5_{m#slOI`8^`8XT?ZlZo-{EUrGVo)0*qiKNM#{Lx*DOH9?-exI>S{>y`+n%>_ zWyN}#X!Gvc3Ih-BP;K}B?a&0U?ZqI2WqchvdrN8dLPL0z&* z_FY|1th?@Q{5)S~mgeQ%oO3(`rjkxCL9~5b6*s6_G3fDQSu#+riTick{<#HJ1~91F zV*oJ|8Hf9qN`1B$S0H_phvo64JO(M|JnHgsan$50xX*9}@3-Ob2Rwk1_BieS7*u5A;QiZSjN z;V+ZAS%_0~E3gr8o~L5otPF^7+tcXKL3JK^2qD|=V&9Av;XYIWgcy+<93FL@9yCGB zd8%e8h*d11bAjmr6V=I|n$F=$6^^p3_5x5UqbTH^EG-nv5g_OaRIt(-BBdQ#IJ;HZ zvqiT%Q_Or(M&=yDys8ZW=ILHBx5)NBKO#n+d z$EvKLTO1Rnr6Em*6p z5QN8SnZHjJM$}a1>{AtxS5D4r$`W*i4VL|t!fL5ZA_y3Bgqvliy)v@gV$eMxWZJzs z%0fvsS#iPOp)Ghls)DfxtV#0j9qpU&w>ZR<=GA(09J%@@0?Ygbxd>OvAB^AA62j*p z1%w7n^U8Yzde@11lUCr!^<3RoDE#Ocf>2P&Srpc_IuGS}x8Ph3NrxFvPfNIz)tdOYLB4)yqqab`f-n1))-jVEt1(|~hgPaZ*d5&& zyv(W!0$<^jIuFMD^a+qR#7dd7YAummWy>P(i>=E?>q9FpmOMrlAV(87s^Y!YB6MU$ zyrI&;jpWloBSlpRat#q+vFg0Jxb!qY+iBgvLTU2sScUD_Bo#}MSqLzTh+14FOha88 zzgF=ZA`)enT|I%KYUhzoNtiBl<_9Q8M-U8AF%JCkuS@Jua2NoiW| zpiat=`KDEC)rK)OA1OxFe>o1#L5ML$3{5}s%heZ*+op2GTg}1UQVvjqaJLK~_-9u| zwTTiy)rJ)r#Y}R%uKL#`H3a~sN`_Q0SYcpZU@Ua^k?;c9+js~@Ft6>Xn@Zyw)muJH zj9OUrKrtNceUKBK2ikVtijVA^N9gdVAeab_s_-PAiQO?rs2#C|ld9@$@1ncJKtlbn zayLgR2$xU0^sne)$&Uj8jr$)oWR;HG%=?s5$Owuk!(>tHN>ZZCRGG*%s$-#{q424g z5GUQCegRW_+r=7dlem%^9Ey^ueK19AEKHf-str+0`iPPS*F zzKa54kw&cypn@6pB*$Q$vY>Jb@%NmrA#aKh%-mU$5S%Hc$Izxs)}Hu^DrnV^=QzeD z#^`(dWqDFJhIp~4Q|=PoJ}qmaCHh93$CL*VfM%91fs4rJjnm=T;F;=s_U%Xxdt>xD znaK9m*won1`flpdXf30Dbko}*S;>ivfQd_yiMv7w3uw+DiAj1WTDG@Rr)=AkI&W%j zBgV|1JW;igAPO}{`h4Y5M-iB8wRrVUOiZbYQ!ja8f=k&^Mob2qp%-VVGjX?jiJytB z#W*--w%u%2raqVUQCOBU*$fOs1z^7NR`U#5m9`%N!qNJ$JtSmT!-NZ}@>WogV?2HB z;g|ZeE$1A0m@JB?fhHtRo1#0&8CQaAQcF78lEoHS@$)5K~>H)1|DJaH+@!J zQ{!KXnQ?Ev!{kDmR);gr1N^OV|G48%OL&xDy};wh5{TI5x^gxAu4&XhpnJ4Sj!Ww%u($;_GjegG_w!(-tAdh;~|>h54%W^n?dnizuvP!!Tgw--?0C z2j%#&xi2x%l2$;{$UoKE=)+@&#=~)fU=Svx!!auODxAsDF!RMCVl^IM^AonE;;!*9 zXJJuz%q)ef($`gJ(AAwA-*P48xQ5O!*f+^%Jx4 zJhv9TyTWz9){kM~^tNOkA+h>{6L$;)q3Wejf8yor~*AuN~_KU<_UJ zbBC_sDY9@csw1PxN9=l?D-CcKa?`HYXrO$Y(qv^+g>@IKqu{qo$=)nY;R9o)o8l`g z@L1#+qHM{*4ID9wwqTyQwn8=xjrGGNazK8mQjC2a3chgKN59=#`s8@d&s{0U_6wjBN%X)d|m=% z!RD$X_Bgq~<_!16LFW~VOIRLHlxNv!EMrL!c~B0}X)R&p+~pEhX1-)T!UT)OP)@`? zQovXTs`z!ETL?5$MZ<7!(x)j@2j+o;@j-sAHXtZ~+=B?W1hMP21`Gb%t`e9t^_TdZ z0k=oJmg4TJNb+{r5XT2L4Tfbi`R}BARqXxWF!;nhxtfE5snpB@_PYCWz+lk;ojNc& z;Mj zIX%6w@xh{ZfKc_XX@?2dxHMv#L{>WM$?lIR#c)ok;1INV%S}Yf!zs;E2M_qg7%+7s zHc909iV^DiDn-?7M6s7MTz7s zy^0moQRhMa6B!tZXl(0Ak=$p~1P^2aLI(}#=m7GEn9m|!M-6y4nWN#vYLwX7(knVZ zwvk9XIY8_T$^;_@>xn#HcvzUNB_MJBwJAz>8luvt9P+DXCHsPJ;-dVm#n$`^c(9J7?t z!`*QYeqtWuyi3H&L4Co5^C}_q_tFkCXt^WsZ01hxnbqlte7SVca%rJ95a}{crcJ8k zXtz>dNn&j}g)(TmT!GmsR6SSkp>%y_it;vw*G6DU|ICH|aC5lHp~+y3@vNp-_yKP`-;L}AMN0Ek z1ro{X@@t5?Y4=sIrIaQv8t3*B%o#FA>o^U{p?X!?`)JW31JLFvj0U8z**js+=;e_9kk5ZN@r5Ewrdz z*=PV1IbUlqOF7AwwRKKXd2DQ+qQ(ne)U!b151EkW0w`sw4xdX2?GcsAeo#oZ+W|Id z`=ruNMgdN87>x)ro&kPSpkxJg3jB~-ci89Vxju;mrD5c0v`X7Xydq?TeQi8}J5-qQ zYYwj^%+0Ce)lHTK4_YM_o)ZAg(vmZmvdi5{)PGVzoeTyRk*V!#{{M+J zYoSvxLf2@Ae-Kq;HvB^IMb$*V7)pg6)kux{a>Sj~d-R>^#i7XuOlBjX7XPhNoXL8p zH|%y)?HuPzz~&h3Kf>2j10wI+*PL>Xcuz0(4yW&mJTg{U%B&WSo_6>Z`>?I8hSYux zK4SaEX2R;Ga=BDI-%Dm7v*JDA6UmM)v>}ki%zY|-RE~Qcub55NDO>hPVL#-t zb_;5^RSB81fD9{T)Q3_{B^Yi)5%usx6U93&*{7U%|t4+g&;QTEod%qQ1ROigN-`{`g#sm04FSrbS(8fAMhAG_xbSWb& zRVE3K{73mic3p?K#W;`!w=yNw{7_k%8hv&Q5&oG!9NK={TjLS2?3o&zXMoyoo|1oM zHCWjbw5YZ#-E&fg>i{{t(Ow#oY;2Buvl9ydH7|NJ2`V!`}WW~`#*SO z*#Yrj$w0>hsAipL18keLd^x@R~Gr1m)A z-Qy<&!zGHA13WC4r~K)*L7P4)wYqJY{+!=O7U@)O+d4rF|8UTrJ=kvP`A!-|bL-G- z__DeX9v`5`b@5<B~-IrMZ+h7Z^BydT>pRd=$jpEDp> zd|D{~@-5QzWeFCIUykfK^IX&Brwj93!a)aO%{Mmvk(xuE{~Z@BdNa#Uxm(tUuNV`R^p=ddMuo8!^m zdEJ{SB<^FDqm<5LTb^c_l@)Cc;4S!ol3Uf@obc&lpXf;d565+8$I86g;@5rrVkzoI z&cF?FAs&(=0pn)?DgndqK z^M}qqaA*Gj+deotGLCz92A_i8o9XG}*pvP_t~pDWK>^MI5-vr9tYxu{R(;R2J;x&x z@iNn*?|ibp8_Tq>`Gbg{eX*(t_9%Mu6LdZ+JxLj8t&K0}@P&fHiWTIPKTo-)3(x)w zkM`gkGY%rk0qOwKqC>O6T7=*Vbxkz;l7bSl_^V)|?wvM-rG&Z&Fds#BP)sB9a~$D? zoYA+J)Dm-t3L}eyOJ+{mmw3X>YSgsm$1+m#a26JTh&3imZZz(bL)uga#mo5-UhuLM z3(I=d2d9SE#LDmqi%h|^Z;?I-be2|z8a z&F>|M2C5w%TyNS|;mL1Q^mw2kf--HUD&lq$@=Ne!Js=iPn68N!D&Gh{N)Qk$o^ydy2u_iJgC7-A3-FqY zo*pu9+1(#L08Zaz5Y*(*%xW=};yd@%MG%XaAL|Kva?cvAg7~uq-3+d%N%cIkPFbRi zKsceYfu88E?cK@vyPJnc>1;Mi5fDtlhES$I*Eg6pe!|oWheVM`7mY^_uTQNH|$2?%vra2;41|0Xgd) z@|NaG*U9&Cou{PnL#>>AWPCzdh!kJ|1l4E}o&8_;x_y3a5DRJ`iDwq_YZ9ng`^qO! z#YGxU#2m2)K_enE?jO?YZYjIeX{aKhIw`Ze0ld~SEFb%mqJ@drM69IMByS83(WD6} z0}Wcruvbkr9Ov$77$V7v?(CR!#|pK{E_Vv01aGDi1pCkV#jaVHF}Eb9ogP3u8_<_3 z)QSnf`XGALe&9wDN`x+V7f+?CKJY0kuuQLBk0Kq5(rvSSohO>8wyMxxznh*{XF|H3 zw{nBbS`{@aeFf)+W*>fc4HA0=g}Sm}-jk9kNW`NYMy5(=dDvZGeM8}`b zw~%8_Md^=ke(r3ZF{73#)03$cZeCJZE?^&25BiT2*>m{si_5el7g17g+)Cwo|0e8Oxcc7m^WQm4rQj0 z#@U5WP*Y14#4`Amx*jT-9MY3M9&%vJTlwgqpnLzRypj&_5bRiT{N(s*SyWu#ts^?8 z(#4Z~!H#O5L*rg)&J3s`=niECzWO1dNrR8@3krMBhuS1`Sya>Lkd7WIFeU@<=Ifa) z4yd{i8aV+c6lD|x3h{iNn+7jXsz%#(ZRU}Fi+jkFAWk=o<+u_ zPU4U!ngXo9G0{s%_l7oBVvcf(oq8Gd^s8PbuYkydbQhrKp*|ui0!fE-s`u#mNTh~+ zz#dP23OCwDq}XrH%bX)-Qx?u8PCq5N=kpJAoo{QW@W=n zC-tl|3{;XO;poMLhdMxKC<6-Lk8oP(*&ag!b zF`}mjd27KW)TU8d8jaBu)vK+s4&SYIp-XIHv&``fM+Ch2v`g*8*w(_~QS`{E)*cxR z#C3AFrfgzI&p)MSz~b)2JSUQw+KT z)dK`G&P;kV|Bv|{7~b(tyHa2z%?1dIY{8+{*3>#c?}PTyXo5FX9qfV1kJ$VE3wCK= z{cHk3mf2wiyOD~jFL;^`T`Z*-&Q2Wne9~4e`?91Rl3;jNF=E zrQW7lxd|nQPhD^AS4C&k50iF`Um3uenAIWTQO3UG21>RM7F$?ZthPyTk3Ni5Sx2;@ zZigvN4WzP1&X)q+Zw4};2Nl?w;02Mf`Wo(3J()UArNPJp<#w2M#wn-jDji0-uPjUf zqAW>C_n3m-JE+G`=FA=4wQ+|wFXw~$^8;zy{bMo8Ow~4k-ER0ZZM0Mk}yl!Qq$#hsHF_V~MTI)k6Iih83w} zVJ?#ODOj)iVJj;}Rij|xg$261+*L)jj>AsmL{LB*k(NIDiWa>52c7c2$sW@#1&Y#G zqPB60s0xDTmSnoO(f)Pgj(h&kr$=c}Y##pO=HcU;hu_;g{OSMs^eO**bN$23^)s96 ze@T1J{#Emv)5i!z-T7mEa_!8^-yVL)YT3>8-)^pbwz>As=K9*^`ZJC4j8>DczB>8T zwWmMXTsyzH_NuzDp|?eKFp`0BT7 z=dK-lISjP9_WI`9`(OU`Wo`R3!phfAZyr9!;?;IapRZroTxTVpY#u(EKG!~D(AnDi zdATc99loSd!e3D5yNtMb_>`0s?yJ?Q#`{V0+V9@@@^7Di{n9&rxzFP&`|9MI-@f|% z=Gw8Zjy-wp{ns|vj&H6X+gy8lbM1(!`*)k`FWOzyT&ztkCv5cf@7~uxCcNU>3!iST zUAp${A)y>s))g?D||CfJ#>&wf}NJO)Dbs#%PV>0}4Gq*!h;O5!|t&=5S z*EHudo9j>c$LCG-KWrX8yt)3d*0BEDYe&za-p#e&ZLXoi^Je;0GuOMC0_8+A5E?29UzuV@)P~@zw^)Y*Umik)$cxtGY})vm4A5c zGjvECgm7cb(s`eI{>#shSMfqvaj-zn@{bt%+EY(|b(wEi{?Bms zq3nejoJc+&+y65vsHX`a`oC#h3V$u*AzqRm-%~s?U$Fi?|dcx zYQwlwY#`+i%w%zxLOUqJCc#a-q@HwKOjtPZZ<(tL843 zHrFpA%D1nby!QSj&Gpy6nH7kjFi|79wPDxs%{8DEAO4%I;}h2JV&b0_z%YPf7<>=N zJ0O@?9x9XQKRwAAIS-XJK#dxKVyq4fs#AEU0wU~^V8WKjm889)eYPD z_V~wNy}JJG%P(Gg|4q;<*pCUcOrjGtp0F6b@U4911!a)hWd?*Ybp?bETY@;P9MS2K)_UEBV``o7u11ap#F4zxnI$u~3ON=8%@sc1D%*oCFtcuDxjK z=fbzIzxwrSM=I0e>~ai+kl$0|LNXc&#oga<@~ePylkR9aEm!akk=yw4^0VK(y%s_Z z`x%izoBBlIBpgrS=;?+pYXVR>Te&u$eb-wW6T`9air-cu)DAi_PrdEd&Q^i#SS2FX zfX+9?uL!f+Wv?B(_9?Ob>^C2NEK`*@hVv;p+77lcBp@s=pwZu0n3C}Y{9r^4U%5HZ!xka_p1bhv>Jt+oLt0mWi0#&AxFplH z$B*Xfwa-`0GZMvsFifs65);eiLcFB1ux6Jn=fg$@ZXi|WU+(kOJTx(!ATd#pn*fF6 zyMY@0po8bJQ3-}0b{39M;6*S&Pn*BjU&u0R??cAFI)0IeP|v*k|L)ic(7 zH2gkG-$qeMIN03^j!M3J|JzefT>DF1DO2J{N+~d>yxP%tw`kXI&OE856N!gex{9A` z&%-dqXT{uJT_=`HDz?6gsT$wD{zhPRRr^Hp5ZpNA!yB=aYtKWDtbUZvGhHIo*T4JV z+R+mtOSv}dGLZxhHy{4vS1&(#?Y$G+$!&!2x38XYkVE#b-i52MSfFeoQs4h}^$*|v zhPv^>wdXE;bNFvYw&6T*lZ$Z>gTV@8Q#(&^w|eZKHdmk3d|J+`EhUmb!__Y@uTnSL z+|Yyf1PkjQlQt^oz`s8$?LdW_aaXOJz+bckr%%R* zAVbuDuyDvGS@RuZMNncKmdKda0RHggv$#>nBe_dZISH!KelAeV|K=vQR1;yp+7lqn z&BG4-=pDhKe_lAp98%RHSEF7W;K{Vi>J9Ebo9lnw6hIuE8Zd;PvR5qPrshnBso>eV z>+w8x{zM8kBvP`uM-2f_{G^>wTW%hH6FI*=3$byJ-6{EE6zUQFeACXG+``;86E?c7 znRMW!oXaCYT=22`SRY}Z)hNa>DympJR$l^?eGaY12uy`BT>Jdw*YCab)he;^+pk{w zR7BGT}?V>KmF<%0LE({Vmd=>>Xah1LnG z+;c1?9mD6htr$mz4n8)-6k|%3-$_&q_&L3s*KREEQ>4Bm@T88++G-FeO}_5MB9U`4 zw#bgfn&XI1RJFl{q)}@-JiWR8v}G7IhOFBeA-FQW;%JA$B_#XUGC`7>3YX5wS1*%k zN@in40(pqEW&|{KGO}0>^4C+AV|Yh>$KdVI>re`0SY^(Nxht^}L6l47Z`VF~d~^NC zx94B6R>=F;{`7`IeAgbR*&}H+j`yG23-j*qj+H{_CyJcJtQUNET5gnJ@gVPlA;bnk zr6+?r&1izVQ*=clL>!5$H^qBHz8c_CmeoyB-&q^K5`pi~D-Zc5b+ObZdmrQ>IFj5G zZs{4VY~0|EIsD@am9}wBbc;F#!g=kOy=JS^_axF~$`p9Y9zJe$6KiL@% zi|r669HJ7}-h1WRNy39d5XKvXfzGDa>pyE?G|3XPo#pnmz; z>&*Y{%fJ8fbE50F>T`dD--y(IdHHSCKWk@mU(rJ8wXQ!WY_8cwg;`9o*09pp6+t2!v?R4oCN4iiA7NUS(@%{_J0X4(rZy*>TO z*S~qvT0PIPG4$2Tl-%w_fGX~jXXD*VyOPUcWu>^% zS7%Os^Nv-Z>^JS|DMa25dIv-BWtcYqd&2&NsvnERqI(>ln8Tm|V(I8xo5H%fVzGuj zmM-SyQ9^OrSvM#keu zX8li_-i}~*`MKX1!FKaSxT+-iiNPwZis@GHwa*B<)AdxM^bmC^Y%enOmx;-;8uWem zDW+Sk0Cu9Un;8YQcI1tCY>*@0tjLDI$^R3@X&5Br#7c;dvJ6SycUGI_N!mVD>o~&T zYS~`uR2mH!m$3s9etq-yJpGEVj?+%aGmIKD)1rU{*Z#s@4BNQo?kX&%Gt#T~Ha6F3 zms6G?Ieti!?c>eEX90D9VKR5bMv7*?-TNXyN3Kd4%xc!?(UUQri%@1PHTq|X9)5Ue zYJ12F&D&T=%#w#`N3imb^d||cB+_IHcD|nGbPa!&KAsr3pcchqQzU+WD$H^-CqOOzD9`!HBR?23x4?uZ$wbp_0vIahL`ZCWo^E?QCvoiSSO4<$OJoa4=tSPD z@{BA=$lDe$k^r=$=_9PBlp$*Lbkr$cc*i}wuJOBzC!1SuzkB_qV_TkIvb1 zeeK=vE?-P%*X*-9{^9z|Pu<=8?(*gB*FR8aRG;4e&;0S=KilR+Y-4P%zq|d~x#srq zqt}nWGkJWW`sMbkm$yDzH2}Q+#D~|9pKEM?e(L)A89PRn9f0$@8r#Q@Z+~>W8UD3( z>GIaQm$y$m-`sxVh3(gUnCU&ax;9RG`D^F;`P^#HMc)J$$i&feW`)U zwqAN^>(o=*kH3H5n*fBl243zxUgA`C;ETGJ3{`1;{hTk6&)N4B1O zl@DYJW&25=tlAo3m0`B+vuj(Y-et(<_L(CXhjAL) z7cV1ollPC<1mVhfLXWSuPaWTS{$!KOqhO~_es}3Zo9_)&diDj(!GBh{uu)zWSLUDN zD%-DLmZo1vUDF!$ciK$3lODgb_2;9(koNqYJzHmwZT;cccNfu+jlK2!E2ggFPjA0| zj7#t{q}am+cae>7MRXy>RFB7Oz4d7mt!;mF^7`>twokm<+?{YulYYCPqVb2}^h#H^AL3xJ2&B=IslKjJs zCHZkFiTg&KFi$f~6yJ5F3b{=xQf;-Xx5xPr9`@D8tTzs_BkU)nnT zI*TVG*eE&hNPY6#=U$y2jM&_MWSBi)8o1#lK9{JPO({Bj}NgVh%SlZlvW$pUQZ%JW-vQMHJB$wxxIwgC$ z;TpqJwD8gq!?6!Q{^fF(T(eaHuLALcR$#E z0*(af_&%PE4KAKTf?Pj&-t&ZQY|IeGK|&-k5WDNYJCZNP`PXfRStDED_ZlczP%u#j zkE~)GGD;WY(zCN!?It2LjP0p3GC#Zd2N=AJiD|d`;g{0LGRei~s&Tq~)UhT}->`0F z6vJ3sa{M-^wAAFSfu86ea4!DN@NXYcuK4axm$xsGGJuHJKJXMymVCikGkTf?$ABH* z{dsl!@KXSvQN%Z%-#$UYUVjfr2^eMCsxzv@G0y9Fl7UstA}aEH zcj;6nx)&dsaO>DAxjs(6b@q&S!KGEe$gIVx{`S(=OXso`p~u%h{qBQRN#{~4!z4Ka z+eCFcoI6sD^DIS7s5xv&&Fzz?uD|xq_K`oK=2Z|wbSzwvFu%sXy$CQjJpB5eJMOXS z%~HW#xCPXC3-b|i@H>?plw7a96ttRvTI<}Z&j5G)IOdxh&26*Y^F3$N*`N?JrD7ku z&kXU(nXNa@2PWzyQvrnIOiO0hhkW>o?4FbReK5ehXny^Lt!F+&GtVkFp$W{dl9aJ` zVy-rP7RBHF>EhNp6!UKj$go&LCS~s&uu9EeKmHyly!eftuV%FKb>1tJ@l&@W_KR@MqC$atLH;{c;hjHIT_$qJ~F z%2z8Q<2hBmM4yiNVqN`uf_qtlV#}D$WX!o8T6ue}*F8-3f}EmMl^0${&Ix zax-h9lu>9r`qY~IUw8m9Rjfu8%4NM;s;Lr7Zw#(3HOs@d-nyJ83Cu`PdKvDFF+`y| z8IsAbsszJpSBssCC%^miyVqaNIyWJnD#2s{apI_>Q3SNB2(Cy+YTbDjWqvGEHKhFH!pO2Mc zrzEG`y7kFBgm~y;P}JE)C8XPQ)nE#R$&oV?B}jv2p-o%6o? z4TDD$TS7EQY z{rktsy9PK%Xxn@chEvkC)KGSzB9NCjlw>niTT^+m19p3zs??*N94=dFjcH>hui;j{p1=C zAUjSH*6XhxPvl=)A}A`>`P1PPePq&pZ~_C}zrAw(@#nWMpOQr1U3?h|ymb~Rr$%s| zAQUaRVcE3-xOS^_ykT~r*73K1f`w1>1K>vVC!kCF)w|PvfDO= zA{*3%!>6kZysbUgfVLK(gfczE9j?jaxLS*7t7U2y+i^YfsIUO3Z+3ime(cuL4hCBASr#_D_>gdUWhj=U{z@Uw^9lx}v zr|3dPnmaUi^)nuJG`{*-r>kfFbK~9mqSfw>M;j;n-9iker!MN%k3741+}ya(X?1xz zl^){uuRKDQ2W|dE*8PuZNmdMQnC^-}zTtE(#2O^=NA?nph4?&@hC z{n*>Ehp99k>GDR!PT?=@*?3=Xo9^*~(3Ykw^O*(+Uoyfx>)~PL?Zu798$Z`-`1_E@ z+g<(4UwEr`-SH0|>txdB|5PC4|7MnQ-$t`M7;jW&;qgvaKjRtF^Tn|If)9&1UKdd; zn*iBdQPq9k0)J?3<3hvUE#6)k_Yq{dXs^tThmHGrmmKlb5c z!CDLvKYEC#3(p-gom~B_)$4T8Ir`)E+sxo!#^L)YLC(}3^18b*E+j?rNbh;xw#SG( z{%h$_r;FD3zu=GN4Q*bSIH?Igx6s@(?Vk1qBHog$85VdJaJ#u@@6}83dRb5(%c*#k zCht4p6@j({z1zy>#REFLQfA{>9Ieh*GA~`=S?L`f`W|i>j;>zfoH4S?%k?@GUR;II z!^-*#JSnRf&r9FAnYaRXOYa)OIQWa+pvRN(_|DL=;KiTj>r5p9?0G)A%b(@LGc|d9 zEpG

7DUb9=#QU%#6G7IFDnNJUp(IcZDt;LW(>72ip2ay~)h{O2TsfKp|YpAU$Xi z6*1y`yiGL-dNZ@}<_DfaG%=g$Ytp>DDHmCB%>}(WYN23-BeN1SVW^E)-BfY*(Rgv=g#6FO&|}wZM!-)`W$t+Rm@asJHdo@-Ggr@} zv#Y1uJk3@5lG%Yj0I6-i>p*YzasuGY#~9*z;3ycz!({z#><)yjNvTL;UBaYKs4WDFGmPq+~Z}rdUrX3g4uHms9g4M$=6yog@+576e6)xR7URvQvDb(2O5=^kc>}9KUTqM& ztx!z2xqyrGT0@>h&r3@WDK1M9ilGAW5uO;UmkbqytEZJv25-@X)x!>ok@uAtlXZDO|D?TBxbTd{J=` zvPhX&{i=f-^_Xtt=_XPX`%xHv!}UZeLzoEMvH^(15hJqqRok zUwF-?vCCq_!*xaCc%2J=L~zb``!jgDzhFgPyHqUmLUzciA{<#Bb&ylWh4s&DyxO!! zV;|%>z+6=<4wGv5JJ)Z#Phep|S-Z?bDU+R8V9;nsE{hyg@zQAzRA`XV^|a9i-jBn8 z5gV)58vM0v?g-Y>XYej1LV?Z31s=H#kO@gLghi#yK|}{t5DPrLmPK!HQv1FzM#0-^ zh4>5$vo)l{DgMdQ4i7&Cq4fTq4xH6+5nL0k=v8GJ0 zs0<8Z3q;wtNT)wH4%CH~v41AGt|pcKRQ|#bcun=#sSUo=;Zf6jl#vbr z;oyQu-@dy*SHpV>LsrLS@|>%e+-5CatvBv)wY}4ZH_deRQLX&=_UGTYfB-yUI?Yso zU-AxY?laxPgPiqF8=FaI2p*lzo$@0mZc~f)(Rftye6h#_ecPQe{1DbDzT150kxK3) zPxfcV&;>#wPiX{qfm4dd@&1}6d)aJooGCc7>Opy=>v?2>fUp8-uE48{k&*+B3@}7v zjEDOs)`b5BJ98=jh}1xz55|j2WKM=$7{f2Mu3`~}OeLj%YlQ`jAgdK;c#OBbbyR2s z2DK?PEjJ6LIwW0**D7BCd22ZogMubzUHGoNaA(O%)vfuha5zycmS z7Ih;d#!G4(QJ2f*D%vMTgHH<}DD|>|BfMIL#ETRT&9{sBffbHi%!8#-c${4gPq&DJn(H{{#T20{%Rg@2>q(QuvL56Ima{gyF4-9uz3Nih6_<1b6XBg zY#^oJ#LFs`LS70@={V*!C~!s1Od?uk1-R-_7FM=rSQWOy?WupT<6WWipeh|xQY#Iv zo~NTk(bw&xSS&Vxvs3-v)x?NbPupjOzntdkrA$YbGSP|`y$BSLE_X51C`_x0h$E*W1 z;@=g>jaXnn>&`9kw~jF}sW(X*jU_1+hK_t=vze2WG}pfOIft=RJLwoZf+Tj38vp<< z0e?@3Rzs6`VFgPM!ZIg@HxDSAlHBioQI?z7mH3EvCW4!^4zxO>L%g^_*<5LuH#sb_ z$SmU~PkL3JRN0<4UZ(~lUucWoSg&-xaY130;-ZuU?=q%mp;4ES(F2BxYT&PyqYe#? zS^GO*q-WMKDwIEC+rfK{+-LOxF{vItOv+qVT`=+}^P!|PIFYUERf?C4*X(c5MrxrtQU+Rl4Y@(Hnh(>^o^2`BEy_ouE05|ncS z8d+6U;d`M!xv%kXS;%>k@%CgiR$FGQY)*ji_{9=QL9Q{?=*d;7AiAIYq<5-=15zyN zb{m*zdWWm=Ke*>oo7YrW&6LVWu1v^-ix|ZNJsHQGoQ&OM~H8k>FS08MO@%|QSxYhJgCT-d47R>7 zAC|8+zXJ#UyG~B54`W}Czt{q`Nk_NVIuT~7Op97CIhq#)x+7!^105@&s()e7LRH~y zg6IqQWE_dV3fm1YZ^99D-Mzl?MAl;SV0z;zSr&Iy-PzREmgXFHQ*yHr8k*Hti?$&33E1 zu{O8yqOKI6Ny#E8cii*EDgC_ui&OWv{l5?L-$ypicN8wZ*;@iA!wi=;UR>zIhI&Qg zKFZTi(Lel&95rY!u`jJMX=sm6kGvOjVCQND!no$QS=lx5SsAL6SMMKKm|29^!4kuO0@xi<$fqsDP?3&CuJZvW}jkuWKZv*o>Ymlg~eUC?q zA$q&|S)T}DudOC-cJkoLz2GV-szWy!XI4cU1X2aw)V_B)bP7Q7GCnZ`%1|%IE(&?6 z0kVoHikZ-=iuor6Y$d@p_gsCVg>~q{k|Z|PR4^&u5>9MW@dDiTkdzi+O)s%jf53ga zSn5!c!cv&Lk8OJFxKO#$(-T6IgDj1X4aYNGmqErz1z|`xPYJd0P;0qZDCWRAZNKi6 zM!-V^4YxFYWzak(*O(nNkbodh)QoFtsrW>Q%Q#H9rpUp-*IY1~r9Qv3T!$28r8rl( zlM8LDhAh;q@NxQ-xb2kzY=PVijVsrRwdykFSnse@W9tSOWMt-U!}|#|Ll#FdYv~Z> zK09u*!-V+r!?+aE-~*O{Y|$umg}fRPx%`&un{D#e%6!*OdAK{=5TPou!l4OpOg_6Z zhAjXJrHiwUn00oFo_{gi6UsR-SF)rE0@7y`zUmE<-&7hx7D_i;b)Q=a;_6s8f9Ips zfUo#w4B|Li=>l0?*W|>>F^y`v_m#+Si-S&%S^9s3sDwGYj$Hb2f}w`0{Y6?eDV>su zXrOBIiPMMW9Wh8B%9)VjYL}}Y&XQRXM64OI@d$}`Z13g`6n@y6-8er(WQVP^NV$oP zu$Qm=GMWf)u+PxjwN_ zc#ZeQ+N}Dv)28D0=k3{zHEcbm;u>_WJ|Rh!X?zA!M#wEllFRfzg|~*@)>Zd=glohz zBV<&Vauez`2ZQ>V9l}${)9(!$>eCKwsV7qjH2N;*_|d9JI^Hl9DVMNCEW#i_85K8D??p8PTKc1v=^?8b6$ zJRfpS%x8P|6-r#gnd(wrms8X)8>LnQ)j1(A3;rs93ncm2~jZw(HxqZV@d zcm-;!YFvi$Y%9+NcPKj&?wEIFnpcUZtz-?%aSG81%gREdVg&c^si!fmH^y1Cgy{aU zL3!xGt~0gvWx@mzyN&b1YQpz=ip`ma%u6)8YM}G;a)MBmE0l(0RjI5;sJDoYjZXpA z725~|k;b6{s)oaajnO$8vB0v7Xl)p6cL)_mI?hKoP5IidVkwz^ti>5^7DHOw_@Yt0 z{@egGR3B!9k{M7HLL8sUu$zDv(KQWWO=jxa4t}c#z2yze&IHXcE`b*sIwb`hndB9j zI6G1CDOYz~Vg`ItyqAWm$9c&%QGf`c8Y=cR?+a6#t@XW*>UXW!SDLR)IyX_WCiw=f zxs_s3d@3#jRJYvdqXZj-me(*>v+ADA6+^j+C&sn=*ahxpd;M(Sd&eREGi;0zx6na+ zYTWyge4Sldwifw!pwUvBE#LL&_FJZ7(e4Zrm+W zP%ESAa&>im?ba6``@;MP8Jj)os3>Vvl8mX#dIO=ZbdQc%&yJr`3gSod&cKGm zabASlK5NCth@s%8EWFa0;ErN^u`c}4n3ES!=F2u!>Z1eUQt-Hku61%$yY^QjSu zhG|ZUqKD!Z?(O!mj%C8_n)yPWll?m7Js@ehCjij;UV$xLofsVmF!JovP54HkI;7H( zs`dn{c9=}J5&2~Qo!HyH=C8cR;iOeMtv0~3+>SI=?#DgqGz^+{Fks{SvOIK%{pM^- zVw5NK%25EbvHeWnz^tN;eJGV4rIaPFY&)}r;och>`^_p<=%H4VuE0|eKB z0Afuh2#uyWh`vUTkQ#^?&0N30Y(}9FdoDmQg@&watU4|sAp4jOne8~FxESx*%Q*l7 zFq{LZ;A%g@9}RcjkPs^)rpUJ=XroWCYxZ=D$y=1|1LdaBoxH=6xv*Nr1)<0G1%JY8 zK^A9=6_+C`s;7}vg+=Jcft=hjC^yyOCiJU%T8D;H!2PLk4nZQ$1L;* z7TW|;C{77orV}CB*8tNzi-yVR7u(*epeNsZjhJgYu8~@n_>8HtZV$g$ruq~NBq9(R zO#CVty%+&gzoLSFSai^54}4>-Mqe@I2PN&WLwo}%{k#EN+jFhF;B5Es#g^?q@A+Aq z-^u8QB@^cnme}dL@_Y8AyLd2r+k*4;Vg%=2At6tw2IJz;Lf$cKeCey59$aGvq`|&jl&!PI6P=~TLS0U5w-6aeV$9Zt;YT?$EjK_vwniU zaoDm0Cp-qwkU?uegRT75Qgf4b62F|F%FyV(-k-G(jD6ZLG{V73N3F(V0CA9L|I!k- zfz170^QXn^LH%|K-Rc|ylX3h6cwxk5fy8VPwPr`-?l?Tspw4DGhS1zI*MbJvB)a*o zFeV+>qS^X4>J}4HG?~LR)L0DLJ|HPJ4u@-tB{Wd1u<`@r-Ylw{jEiQ~F_uUM^drgf z15Q*F=5QD*P>z=6g)8qj!huX&O|DLsQ#9(J!!EFa7Y4t>K4?kJOIa08N(axzjN`amSbkqI+?Q){V7$!ZSGX~}Zb1B|}NsVdw_ z>tx%JUm#3+Jim30m>JqlcJYC}fGG|Sm&&fo;Du{A1CHFYU`g22qMYpL9By8Hla5$$y*W!ZLMG-0 zn=u`fo0B#CAcsKU^VvSX#x#`)?-9shH{bFF7Rm;ZBHdoAInj4Q7Iqh9mn!0GNH*nwW}VOWCZS8Z*#ewgN0Y z0u&6l*eED7$zWh#7IZ%Dm^acI^!rNxD`XJ@hq&y&2p9-$CYuj_2H0BX8b%^qsi`6q zg#!JU($L#KpYyLzbHWzi`{%3>;ZvQt(IMCdn(^|#T2dXQU89#sB)L?(#k4oVa4|c= zC+d4}P|g%_32OOZ)7zx|5$n#sS(R>fRiEl|2hWY?3X}rVWT>tc17ny29GJ3YSpVD} zEs1^b>v$iWB(*gR)|m^RHV)Y@iV?Dr?>zX~I1-iSTj`~y=!;)idTpC&F9qsaSenp+ z=PEw~504@?fk?NMXY_y|nJ}uEIJ}!;Z-;kE#+{(U+4`u&INi-Wa zLJ&9&V2nrB-6oGkA9B7Y_=P8yaeqf<;4<_!^MHvPffl9&cPA%N?6|&P2hx%y)Uh*SiXjmN+21z&X8lQ>gKvkF zLvIo;I7d&}Rf<%2za*F%OXBs>2mj1J=VWWFg93N0@ZM=054si-98w)*6DU1gu7jZQEZU(Fip#z4UZ?xYla{fHr@Wm>0a> zMo%$=b-H6AT!CS@YwaZM)A@YaQj5Ou^BPgJx? zP^~p*Ipwift_wYpE0cVL=BQwIV|ezrDeboK^Ouf_wVH^x!SpIp0o5Ot+_&fxlKYib{0>r$NbFO`AXO0uo?fiZt4e;lW@|fDU(uahRB0D(v%vsYb9vh&E&d1UDG!u0(dL#>#Vrwg6lyX7UkV&<(R4(H{! z6|pDZ9`axR+scNBMi*{Cp+#e2Z}wNPk)#zQ6jf?(Dv@-(sig3ivFKYRn&pvGOiWmSsaP)tE~eDSRt69* zw0@P`UV$(4&jE!VOr zIGIvyr4`kqL|<*0ES51GWj=!$(IvaxI3=NWRHcd!_SQ{GWKN5aD1pt5Oe%NnaAj4l zxQ|W^paL0q@lqp62=3F&ifm+Q95~ef93NemR82JIOu~V|e9cjrMAqbSrAF0Kn<#@M zgir?*-DWf77X^XvK&32oEOS(v+7j)!gzXcS57TAjze-?I#!QikbYktiRc>WIS7Fho zI6ZA`74})Ufze7JI0_ws8MVbp1_oZL9}x!SqK|?#sQRifR{m&{jVbh>p*a_3ixZbk zIfzKC97-2<;a8O7Ppd1X{i9jtp<+^BR_pd!un_kl|P9d7$8Rtt1(yj)|tj_-Fh*y^* z_{&>HWaVCtRM*VT{?~qI31HSX>s#&lOc@%L(xccRGP+6i2_qj*seV+4QXGx9 z;VPea|3}J`h9|Q~GuaJ=z;|&|bbyYI7KgZ1K3dK=1ORVdzWmD(Bd4gE4fy5r7pA=2 zFySj|l>78dJTSX)7_UKRgfrjV8F5gGr*Vy*k`fKd>hrHes2-^VQT*O;dUOML87Mwy z!aYufRAUx_trAI)aREXf6C>=ZdM#IrXy#$(=M5VPWym-5vMj4|2v z1`&q1HQ8M%FjEyLHjRv?Cr6{v_VxV17a4(9k=TBtZNe#>@g(|YlsAarI@DO&9&a2i zCOjQ|X@rszlx7jvsVTCpXCPed6RG!zz_()@Dw~zm4)n7Jqi?!|zO`6j{o1s=&E}@q z8#1Q9qz4)EXvUuHvV|k*{%9mNAi|_6vx6Z{0#WY6AXd+J@NfrDId$B_I2&y2JvP=; zaN&_`O?oZsSUCN#XEYGc?2N}ZkB4J;1>>c4Sz^3VgwpyM-T~7CTGVy(aYJS{J3t{M zL-xRe6MFW~AlfN7r1|$x4{y;AphYO{W$%`XIFX&tZkqU*CH8y7FlEPw3`EnyMs#uVfoPa>1-Rry&vX3+X9if6(@eK6~nYZVd6yg zW%*nGL>$rs&A7wGj`%xN9o95|QyH{QjlOT3Eqi*KOiwXyN zD7c&gBH8Q?W}NIW^hsv4)gcIv%w@2^g;~7*o6>pWwyprbm$(of0O*@Cfi74o=gS{)I^?c zQ?pShEOdY;Uu-Iw*YoOmjbJ=InPKkJ@_i$S@>qmu2D3pMGn;QjC*)p_LeYFM_{InZ zV;gRAri`Dzj~g4gf>OeRXL-Ay@-rgND3qzM2DOUD2^FElJ4CuOc)3N_V&{0C!33QM z1vu(8%Vs}^4>lTJ+d+YbEaFJWF6%uQ1970r7CI`sHh;kdHZ7r1LlBC0YOD~AGVKEm z7zPDx|3o`FVAgUbF;R}xh7RESMHx`PHBe&Mm&Y9Zg9vxH< z$=jIr(6<$42U{^sfNsWe*iSyjryeawBi<0em|EVSFu#Zm?}^ivJ_;Hl;9xER=Qg`( z!w51w3~x>L!EAmoJHjG$LLFdj`FDwxvs%t948?id5=R6dHEH%!$=(i#JOXXtp0;(! zi9p!kFWJ$-0$eziF|RS)EKOTR}hg^ca>P4%$7=H z7WvxqJZ*i5sBf*=Ry5c1DMT~+3Ha}nA2R{~vylp|{kjs1s zi&5Y7eXTj=`{x2l35UY;?A%Z-{x3rAbm&Bhgj+gR^R|hC_^n?U_it*9=kdoC=yS7M z(|sD8kx57efZ2&~kU@9o!*Ql8^Abdi_;5dm^n+(p{6e)qOMq8BcNO8A_!(SU(4B64 zYxcn5o%I4RzF$zvo{J+kvQmlz?WK+oQ71$ZZ}8mzx)^i$i+se9UOi+go+M{*JmPq! z?I)DJypo^5bK)~pFel!c?C!OET@m4&qd*;Xe<4LKG7UkV(-6;{LIu48CA8Lp6$i~{ zpb3eY_c$0pKt8cEvIFp5ah1Q=9`B47kqZ&+?sF9oRpW+G`1fDhE0xyBbKuDMQnG+7 z4IN%Yq&UGe=Tj1qq#|I>Yq5vaT9S*TN2m8URajTXMZDA#dh@(}hyriM`XYZP39h?h zx}-t4SwHVZH`V6W_f2j%Z_=-JX2)KhCMuEThXIkB?9+HU9&PTCq!DpA3@V=UNhwG6 zoK3#0xB*~gH-UFAC_0$(qR5=ARf+uPS>nokFL^6dJzs0+$|HJo-xIMix~c@7vElh2 z@=kM3Qmf$HS*ha$M4BJqE)yhmbd%bRHu0cq_Vf|F0|!+!K%tRZJM{@g0$3EIpbzrJ z#q)1SgXH>KkkTImkiE^Rs}idFd%^%>U|EJluz>*LEQ(rAmbnwhq=;zE1{Xlsm>hNB zTdNfM7D**el%btW696h4dtTWS z-b_LS)z<6$aF&h>3}RQvCM%H23qq&thEb&S6>D^_HzHQzC)`5V(QR_fZA1HkeY^a6%R4k4_!^1njg`6wiz$J8^DMj!-Y{HmH6&FTdJ7)< zu}lEH>6AQF3%aD_q1>wGU5g&UQ}S6j!6shamn z`(bode%hubX-rdcRGwf#YAPFA$nkhFmvRoyN8VjU&pfUnQ**=9Q0B zkzp2Mqb-9s^2aXb92Y}G7VrmbFScE+;Xw}8Q|XvcKuWu~Mc+wX@-|&FitQUJ+7(cK zs>+;NAf42JksspZ1I^pm38g7+V{^bvy91PHr|kgO6K?RLt191wN~kyUI6sG((gkf3 zAT9>yOVq{_@dsxZ2tHjk+)^g$`lL}*nvkQ=?%ErglA_@Q6>PeS#*P>EB8U*loyd(I zNGfw>mOHj<1}PebU|b{X&X@5tnb}H}Pv@!dnu1r5pB*(%^%mq)JQlu*njQKgi@BBD$44|qC+|IXE+p|tn8e?z3*}vkh)5_r) z-z;uzH7#o~T9%tsOR({Wtvv&ODB1s^HVyEvgHYGB1dt2jShhk`cQ)1r1Fl6pS7CDI zbBaL3`~90Rm9su5JmF+z8-2LQ8mer_;TrN2Zng!uCZN_DfYziv@*To1qED8QL0rOn zMfn5t6ep4irp{$?*g2`=(H4O?!q2oX;Ck>h1EIKFe#BGNBg#7&^rmVTK!y}Qd@w&z z$P}7JT*}X&Lowq#Ge`UYinbv7&$LA|`Hf+J>*>bu&*;~wl$Uthx5N!Po8+3-;pgg% zGli{%ClM^?6oy+|xQ2DCqGO8e#51y}Fbc5+7-y$eoxIzYTb3s)mN>O`lA;DpO6DuV zpexBx&vk_rgi%0~%d#=RxrjD7HG+JyiJn|w%b9vC5Fo3@Ua2dw4(|aVnAdYnfP}p# zt|ElWQ$a)9wbS-~HA2x%OL6_V2IhaL6f_zytf~M2P=!x-mceU*Z;u z__uDNczHVAK6@)4;Lc=BnLk`?pVB@j;fHFR@Y(xEVBb;xwk@pusVW4V7@}XrA#8)M zOx>)V?^5>J8y#v0H`!mN40lX5lY=Hs+0n=eM~#gSzHqv|jVnO0b>;|$AhK3ItbXtn zv})s&L@;J`+UK(+zRrO|gVR?Z24 zhx)NgU|JvJ^Jq(2RI|KqhC*uCq0mn{GN#R$E$!ynTc|1l1CpcmR|ZeF@+eJ8uXEhQ z`NKpXE#Z;#PJ>s*TcVpYOoCv$|86yiz8f%!sOY?opaH+R&@K~~GZZ*aIYjFZ!KUZ@iEeFQ(`Voe6u#%B$BscTR>C4Vsfpe0#gBmFiEWlZ8u9Nj_(9 z9dVfv#F#OJ1>La;O^_AfR9IN+(XsZR+hk-IU|iU~AJl@nmr_?`7M7DSuvsw$3J2=$6>K(`d|vB%@bJ-=;Cre)_V)hy9t^&;OU-OJKYM?V#F|i(?8LyB;Ij@+lMaJYJafQJ z@!QE;qB=J<3^8l*xyPdo0wY^#%W_pHtD;;GNY7N_a;Pi%liRbJ|L$M^_;(-jsN(n( zALlqNAPf$1+vk{r;i4IS-9emcv<7>QJsPgARE@}Otem&mqP@-fBX;P_1clYois87= z9YJ~d%*<2QFUYAWt^;#Gy2KJ@Qt$h4@Tv;t`Ate+IAAxu{sl844l-P(Oaq_7UOG%IqHHXtg z?Q*4e;23;9K0zyzORXWHn*4fr)<^|Zvmq2w*@5O1u6Spc+h1kGiaT-h5|8{zYkgUR zm`hI~& z^XQpMk6O{^O@pIi7}_LyRh=*%AA zKH41UoCWrX);uE-ok}0Tl>DSPEwv!XOP@A6;4j_(Yt~qnlNSqvl{Gpkz>vtKJr3_s zey7SF^bIN#IbJ}0a*tIi0uPYtN;2}LVv}WZd6^MGYMYZj|EQ%QrF-0rk%D=SechI$ zqK{0k8Q}VCXxq-&`=^{5a2)Tv!=@XREYokb-bc<>w@(z{aj$L zV7QLG6$Uz_oRj&URU*msH{OluqlJLMjE}y_IMPk(a=Fd?j{8u z;)`(4IYH&fcB{+IX!yH-?e&+$2vU~fS#i+KeDJ5KW3ouUO0K{zH;ZNRmb1zQsxT?r zQcVWWAZd}6@zw;pHV7G_)>p)p!XKCGI95>NkRHPe@%}n6pgnImBRO&rlw5{HLXY5M2P&<2lJ0vx|m9@SCHwo@%<;eEdfl=8EQ z0is(0^_0Sn|H04nZpEHzGzeVpWY_NWSookA6+Wa{6+x6qRPmc=dqrh(?TQQBDB@{a z$2aOWa$(Y{FmS4AJm+B9zMBU%b7p&%j@w;kZsPZFhea1pf-6$S!VqVLs+D6p4(r1m z5Tx3JTysBp^Ylrau*yM*MF-I$nB;O1ZA+!qSbfeTKT?2zlo+#$2P1&^l!nIt;>+#! z07qfD-$cvMsxGnGGBq#cLe*d>LYEr1`pU%9tKkDy>Tu4Ur-#Aq(!fo^LN|*;2cALi ztDFM^V3W}{+qXd_x=A4%KDGN+M}n8IqG?Qr8?gUUL8;Ulj?0r-tX;J7Dq(JG(2Rgt zPdbr9BxCRneJ9M@Ve=Fjh3Z!#!Y`bHdg){KyTT9Pl?TG%W@*gaLZAahXDH zB*FG&ssenBdbhwL#qDh0Xx5uyQOYPk!LK^x$eb=A=b6FbzBKUK@?bJjEp_j~>!YoO znq|@Qy>-eLx>zZ7iS+4HY!?Izm-@`z+Lx!?VzN72K6w3fb7%PAqx;|CUYc*yWA(@E zV47`lpkb>^Hh2;5ud@pE#u=kOJ^03h*YAI4b6MeA`N(C>@qG9Gn>vzzZ+L5C!PbQl z4GZ6$b$ZC*V@P2y&uBUs4PGU0 zKF#0FHjYNiQ>yvXAoVYJZm|osr*SMt^Cq^A*VA8#35?{my^0r@&C@LErJ4F+8ux`g z&T0PfK3g0qf!rD{r=z{IcW({y$4Lb7^up4D@ih;~Fc%ewtdZRC+O1QNYG0O+_UOTnr<40{Zcau#$vV#7-9TD=b8GhC^#v{aTS*)6 zxl~>x>-%qZgw5&58>bwv0vqrDHTi<}WBYy9uWR9alsi`T+sl#EOV?*?Nsw}6S9wl> zNkd;AB$Ux><27?>IdX*!0VfmfDOp4S9Z;oQ~h7Erl4F_$*e3AjgNK!p7_c2dYRbh*QN;NM zA1yK5-D(_o*O??Kq-=q6uII~B80cIl%paHOfgM9Vr@P$4qgXxJ05X2?(J6?#Je)oF zF%D!pnGJ6RdTAi;TNkYc2zSxQ|2u3l*j#R4Y|3Hy5k#Nv^S?$M&KC*vJ)E%tPzqNz&D`R!`Mt$_ z$@``TO7u59yM;wV1qubxTsQ^5@eDyP2rEPyyo~Nj>43<@Q)%?Ao)s+<6ps+j)@YZz z@nq)}k9Bq7;6*URpuZg7n%;jC(P4qInRE#MCEr&#&U>e6m;h9+42_0i zQ|#=N5aMul3n#||8(zr9Tq2%;bl@=)aN)e()w%yBK^7tgbtTzwRv`(kC%iQHe>Lmk zxl`UA#Jl40q@i0#RnW_%DZr4hLilBkQnzwo727Yoc=Wlh zGJJ_yjlGJi_V)rf*Fp`@wl*Tjh(TPG(O8&%rEwKBKYZXvAGa~shmS70s|Y>2yIZI8 zvxrGk2p3BnBq2Gw_>u7!tkC+`&a+v^S<>l~8sNRy-xpEHRaD!4+2k`A~ z1dur-OKcX@){tJIH#oM%O96^yCIl(r>##lt$3l95C1P_&W4nZXOmWQOx48TocvW-yKfZt(Ja0h0l? z@33QYIXXP$INNVSR`GPj)okt{hQXhM=(sku^YEnmlUr0)79OL;x){+wl@Q^p=W&o=q`^GZSK;(Jd}77k>_C`a|It0cT%kGkCsMYPh1=t27N1R_Q@VqTdM=>|g;OF)`1rT34AP9*uh=#m}wkJBnu> zNNQJ+(9-`bo9buE8pU$uj;AGB$!X(kOJUL&?!ftkbqeGND+w)AZrRCB6>h@Ks6<34 zl0z6dD`|BC|JB$PJ^DsU8QJn3Ii{=)9HVBSpGgvtWsXahiBC&8vE#9pHA*oG{|xg^ zNQt9kbcLOR=X%tsI9x5aDprk-k4`rhQ~`+%Sc#2e@>yAq99#N?QNNZGzN9#syNqcd zAleqa#GpB7R3yYb7cSmBtW1K!JT$DSu`d;MR2w7G-CAM@^7_dgz~fQ{NQtt9b!)hb z3(Tf6=SQUykk^8pr$V0tK2*1x58pthVH(VG$nB7-BTRF|IoWyf z8E$xgyyRF@8EumW(@8{?CavmZL{^J1yag~hz5kt#;el(#^hSgXIW^2hPG?vYA&i}E z1M?~}l@b%sktnL@ZDFCT^kJEZ6pTY~;O&)j5m{qIJyIcD1j1}2FuhYSitmDhSS!s2sXO7pVBvM7eN3~3%Xn`%ry{a zMeFwmIZH!IJXOUhm!6W}rmFWv zFDHH}wR!9al2>PQ;R~T!NU(cpj6$5=){!K$@WtNNpsE_mN;p8{(V02)kf;^-Zl!F7 zaoH=`0pL*QeRN&Z=>2KHs+@CHn{l!wN^bC57AKI?w_;POPrHQa5_$HmYjvXXtI?5K zLe!o8%0}2Xo|UVQVD!X6;UDwdw%MIf^EkKgi{t$Ajn^g9(=^X|4UfV zWa9kMI6wWemU$jr`2vB>o}3&MY!$ymBV?FM?>an^7))by3LN;uN_AAgskDbvK5N9Q zX@g@AK2#Y{p660JZJ&`equnll!~Geg0#I~Q$P2J(xQ?l(5{IRobaKJ!AiL;Y#FsTl z%?_z!e84o2B0>J8Iv2oF6Js-7j({{)69dudY`Qzor``(;rT602!9yaVGzF7(=4`_8 zn!T2ODvCR0{d6Y(dMb9R8{(S2R8OZTkhXrV=@pl%iCwzfie*$ges8=}K7e#Oid3u_VBSlTpQfU&M0@iYi>dmQr1UuX{Q0mDI zUtB4AbNfgcEtJoYQ0$xz2DkjBD!p{jxjc8gQ7l#=F$^Sg-?+}hWeq-XEoKi?Qr1c> zy=zmst|rJ=)}Z&%YCiOCgpjB+rbAc;oH`Om(y^*i4k7BOObXUCX7*9qJ>KOW3ZuUntp9lKWJH;?@VPq0lEYw(T| zUtMxklF3Ly;#%_V78id?XgHg0&)AdgQwZnW8{jL(;!J`#>|j=XT2WWNe3siI^fK_- zZEcLwR@mmL!Lz!Q=csZi`4b&z%Q1qZvwu1J=NVf>c&VLxcAYaFjya){&UEu>Gaz?b zq%WVP?0CYVp8UuM3W?LaHpR=hTU=bpIy}5btp4(*mgdW5;DO&U<9bA1#~RQ7%VIL8 zd(J5U)#tRVbqh1en@%kyhabGa{TBX-Ze8P5lEDiLau1(7Jy2=Wn}De}pZ&Kf8$sM) z_Q&OV)>yv3;4YL6c0{I;*bB%UbIr9inp03#6(ui}=oY)()LX~1waVca@E7x$ZWWLM z#TAQY_izf&xz6=4ZWLgKc!tA|4%9P6Hf-Ed|9+DTcDR!1maZ~_yGkTN+f>YD_v?If z#49BlpR>soIH(_&-_PW`9`=lI@&%$`rrzPF9Ttg|jBxf#7b@dl%^kxG6j94)Sjv7tdIHQrw6Z@sg{g?A`- z!2_v}ev=2kHh)s%-<<8Eu>6C4Mf5g@je2r$%(a6jwUH1n!8;Z+{lfCrdN;;r|1#Q_ zBI^Ib46Mc(Ow(08GGH(nDo=!evQ_?{DnHFk)d;M2yt~*!1n_}(IK~H@o)@#UIDu>c zDP8v1AOcot<$Q_P_+f$PDJaLv@n3BPv`^65i)u}RFAsHU0aEf?v>lG}W|;8=t( zPYx7NgMt?z3b@IHAVNorbZ69@J|JH>2N3C17ZlCrYbi=NXScap4MXJD2whSc%idr= z1M?{REzaInMh4H)#)`NvCEnSGPjPO%NaGM9Db?9+ZrAnUv0tb(E<7Cqvvc+SM{uWc z1UeoWwc(_dZ=z%D^_J4~s@~=Zc-70)aam4xUIH$_qfvVhQm`m-Xh$(15nznYu+7&7 z#fvZOcHnp*(J-rtvSR8}y>e*y*6el)F~9Zy1-^P$DyxEzm|d6|Dt;CHZuEoSi`kqQ zU=pvUUW2dCIBFL&myLG(rBFRX2YiTknCRj)aIM>65?()+e&ZO=-sLrFxv(a@KV-_Fx zwF`;QY)Ve@4E@opyzNbNyE`Il!$kI0hk%-{02N;w()rQMB0CX9U+2lQTKW!l$5t{X zcG{_=;c&()k8+f}g||aJ78M+Fnx8@`q)&_q$I)&ZOOxMmo`X}bj+bNsx`%gbbX_w# zhiM%m-&#k}vVQ+FJU;txG9a#$Wx(Ot2YT%Uk~jgrGJ0(7nC%N$A;bdxq)xW@&7shV z5Er%Aw|G^RQL)OKG+&P>WQYN4Y@$W;=!nepgeQekIRn=_IcSBim_K`4CLLZ7HmB!n zDWzWp$R^%zGe0jM9$69ieFLu^t)6r~-eoTKWC-~5t!M{*Bd16g-Ft}uFENY=RTk0J z`9#JI=~j_MSy4hh-l~!ivI;Pnv;PstJeP_=r6Kr&K2Mud0!gnGWmoaY4elH%2Fr<2 zN*j#T*|GUxN0ZvnpNg|b;aQjy)S%YKv zKM<*kRhqoDhYsFhcZ{C7@D#r~fec0Ocps%N0z33vy3b99XCH8Ym+E%OTWOX|R^p)a zC1p6)jV5HsVl*2&QG7^cJO!~yOQe<|7P3mT5JRZ!g&bq1GEG*yWCJ1!c5w`)qSs;q zS-+_PoqzsU4^} z|0F8nr~oA|Dt&F9z01jLVX_&1nhyK$Pl@3C4k%A3*P07CdCy3ihkQAPMY@9SSHUN2 z=i9RCsKMpC=i`o(%V@M@OUQ{`Ax|+m&5XLqFeoQ%&TCD5D0iIx%;UH)gV2-7J@5M-@YEOGVSRKhNR`f!LQbgkx%>IEs~m>be@u zQtU*iH#L?$$GPc-dc0Z*{tF9*0ll%hwWT|V1+Gh~GtPB_f~t>z2Y$hgyi!b2(H(HC zPZszhC7GFcN~jC%s}i&yM~1EB6l|=YO;Pn^gQc^{k{+276bS3(kA+{9zkuIbsO`yl5Eo=6h!~@Th^rB)2~3qI5gB@NMt6Es0qiE{p34fe zp_e*>s=F+-l^KTwGAhtk7@-?#k-(`xJG(7rcOqSuC4NbX$$nskDl)6l29I1GZRBCO zXQwkym5;S-M(^~0^4XL#lEdWc*G=}Fu*eQq0%seyokHuBABd1=-H%aRoiI6EGO{So z0$Nr0j+Bok8x+k$Csrka4(LpQsFk)g^cmVtsJe_x`LTkvrthS(Ab@7~!z0boMo^;S zIe{I4%LqM?nz2=>*7j0Tmszt!n^FyzK9H*#@G=Raue~0jnbXP$mtFi169UWk|D!4q!qPJIGRI@35oT zDWj>>-DnmMYr zt9VG3WbXDhWUJ7)`dI-Wq~Nv2>7ee-rJQ3RFNa|`NF#Ze;Pum~_3=gg(Cyh5BN}bm zF=syqWT`HU1}{??n0TA}sOQ9W$%OhUiCVjPAN^VXG}Q~E(a(OSXjpyoaB`Gd1f6)M z+pp~?%u1hjwgJ>zC((N7QLh%OE*w&ULfQ~YgFoPz+@NXa9^uG!(!Q&W`oX3J9vaWM zRW##QN;HZ!g^bbt)HDO?R-+u02s|b{_jVSt^-Z@_Szy#q?3&ZwfX8gUrtK|@ zu$q;9E@?|kYC(v#E>p(JRB_~$M&dca8`!+MO+mea-tKJllX8ZCqXETSyg>0aDw}HE znnj0G2NI=<2Bw;87e0*oy=;R?(fg)M@7_6d@hu=)t{Xb z$+-|nUx6_KjjC9*^eG7V<$z0%F_|eif}dlfFKb5x{BmvYHfO#O>vwee4V1=?gRC7{mvsQnO8+;?+oW*HHv3eay+`Ob6}*1JQcbCmP*X~o zP3Z_ZHEYT^4{!V01KrM+HoG*^ijHaB~-@6e?L8Ccr1GA_1|S$75NpD_hpiNUNAj8|nWzW-Xv zJxU3#plAxE;kUb^Dt^0Ln>73(yf!7&PL;y~I%zB!3nrmLa1-v@{$Hrld^rg4 z_TOLo$3On}*M1@=rwG^B5rsTMgTj7d#1yHiP`#$ESgtm4jo7uH2#0x~MkkqGZzJ~+<}Aar@RawJ32;uJ&uTLleSw9w zS9|1MZiHX%ou@5=2a5@9@-^*TMJJEd!Hs!bj@QmqH_l}Ss?vKiUak8NcPu%m5!8Uq zslOXk%f6~UuiCmarn8RN=i*yeGc&0$h*kQ#w7^ERe29RmM(?G1&KkJgbZ0!#9tj1J zr3tE8=lVaB+ipDaEXDp=cu}OEhp3Z@zD_Tg#&C)lG&-Z?AI989iHw>yRmBE@sC2;G zVpdUC`Tpv!3+1`tJMSS!oetJq@V>F{^7B+EW*4y`wCGPxFr1|2oTTdi=8z7Wd%b7w zAV!o#r#83j5PptT95+0BSqJzsvEb0c>!%b&y89~>WTnUH40 zhgSXJ#+ZtSzgl}(>nz?rCD5ufsj4Ve-fTVPgt)Ig0G*fD|{I}B^E`hS8E63MF??jU*CsFg@BeD zd#xKKPWo2l(3n<)knt0#5rXg5w7Tu!_`V6G4G?u5Kb!02kPHtRG74o$zqvjL^4EoM zuC$k*2)q3=6-+iQob^9V#m-_tv?^okS8MTV4v&`YSYag&ZS{r~nq&0nq58x6E16bQ z(>tMP4%9X2DifaRVngbJ=U!{{hMU%~va6%BUxLcg=M3Fe28c){8^?!ro7l0qc!wR- zZN(bzS#u{ek7eZ|g31aiGB=g_H^A?Rm;JrnMuw_xum;(r%V2$t;~dLH zyuUIg9Sv4yWXzjMqvags<$`U&t8e@gn`|9L zt%{X_(D{`_l@X-|o%lUT@hW}eb}Oao9HSSJZ$+bUt(0>q4^~wjWN6Kp*+ZY@sl4o9 zI7OPBmT_GRY08(ZGL0yW1!;0UsMRd~qG@oMr5(qvQEZ>jzOqG)xey}36RB|T7PT_A z!D^NnX0u~Q=49D)lIz}aV6Y!(ivI1O25hez$Bi(A9;?mb zM&WUw(G5#Ub<`LrN=D;2vg=%4Trs8GF_vc$o~NLu(=5&1E~s*Rn|jB&C!inpPpfJ} zR-=@xYNluqr^KH@Q{)-D-&Ij5gt*>P)+bwBZPcpQR@E#@PGcozsw2+A(^jYv9Iso( z&3gnY&CpP7l9MujhY`iAC5rXl)+3MVk?!=3;7{0{$o|NQRY{Ir*P!QD7ytYD-Sdxz=kJuI-#!1B|9|iN-Sc}x)^qRt zJ$TVfEsp8k*`Wsbx0uY2eZ*h){L6Rv-w*P0JjTR54Cm(>{X=;1*9-&a&-vkyKfmRX zKD_uF=)T8?cNq2k^WQS!A2G9gbl3O@{=UHw8k#3ywibB)fkzN~HLQMl@q;02xO@KF zGzTBJ?+pLGb@9f%(imo9 zm|UsV#AK&qNp^x#qX9nj#Z}>iJ z>ww&}#qy4(f$+pvIPi`ZAU?1(76PB4=ld7mh1}Pm3vGeI-)e_7&MR`ZGihj)+BTJ*D zZNH9>SpWlB_4P2rqf{Rw-H(_iEJBiEVNec1@iFVu8W{rt6;b?+S@8PB-wYXB#^H$) zj-(ZHvVJUG*P1`>+HVXWcby+Y?5}^H>jM#EefbXcwKjx0ybmScfk^@dD7*OE(7|`D zM!%7gBVxrDUM})LX|R_&A*4_;nRfYs5!L2qM7a1X;McY);Q5d_8jVWRV?N9SDFHE{ z1voO~L#C3do&TmnHpUt|AGzb!|$O9j09w{BrI2Ya4&sVXE_bg8^0u`40@@x0<o-|b}#{wG+%$3j6ymmI?T{_q(-Pupsz!jD?Hax z#U`#04)p$BEXrgxu+Ey9^15Vg&4qnPfiZ4lWGUp5lQRc@1NKLx(TnFEpbg|LplglE zj4kuJ_)g2bBot4I1xS+b*%CDUM{&ZyRS1H`9<@YGRag;DmjDeyFeW=%g<|1xz45Cz zI^_|0It$(iEBwW;qefw^5tcd>OE_7}3J^niv}z7%=!y+g0qTA>rfUO;OB$$AHlj+ zSZOxJ>zN;>If#$KMg$%W&-o1Iym-@=M5#Y zyGp*M0?LdI1+-R1L-zzDp@|8AL44k?Q;3gn8-a=+II!PXGw(=;_3!f!H4T0o#>&-3R*^6%*<{k?j(Y}} z98a+lS(M#tk2@CR56-(d`YUGsO%kt%CtxG_iogo)AZdTg6rTueV{YYZ1Pj@YGS9oY zh60TtvAc68&->dR8FbQ@2>)XqOSG};Op8sKPl^a z$Bu2;3gBxE{aM>wo&zcojNa+%n33Dug^XKN_^Xl1g8ZEtkc8n33XE z%#s<6o*C3yC6Ktq1ROAuWjK_c*1u2I-!+!s+OB(k8$c(pc&!!I3M2fRpE}%BzOfRo z_C{y2txJBRIOH{wH75d{q;NHNkPWtD-p<%AJ7n{`G;z0s$$?&vLV9_b@hR3U)r@wK zb^dcuLlMCp5Bj0d!ugbA<96B#Qc7OGmJ!MkS$Ke(stwBJ0P_gu#kVy+L6fx;>hDSH z_*s6P5aUyIryzy5iwL2%$!y&V$JnB@VxcA6!c2tLM@1tTtST(uJx=6QHon% zliCOxB6u?LcE+`k6M9J^Jqtb$jDM6^zaz?=}!VZOpRZGVDp+qtY3LZlK3AF()XhLD;6ev1rTs+Odk;JuU=;S+4d~bc+VbH49 zCvy<=d&u9gFr@@3)5|&?i@+;f{8tG7+mhu$bn;k5*O~gAoCmeaJ@T0qh%?Pc*hkkB ziyC1k5FdO8w3$W8r4tnXRHLfXm4aD6)Q7l8wJFTQ?`j5NL!IE^%>*J?0y_9N`iXi@ z%|rd^IZNUh7}Pg+D$Yb`a#yR={E3ai^4pn$z!RHDN-{xlM9r1ygqb(L> z*1v97e^$y4F2ny_ED@FD_t`zAs0*$NP*m4p3gJW3GH^Gk&?T`}d_qF*_6a=R72`!! zL$!I^USzevlr)8{zgMqEvPTmWFCa&MHaW#wz3NQWc96A3waZHC#wE3v&f!Uf-7d9D z=@cGN*^qMaRH`j!N4dUaqL@_;3mmdIrkF#_PqluG6Ynh(W8sR>`0`$|YOA_u#E1A5}$ z|7Nsyth(N|wH6ymF4+R0#pg;tTRARj$hWXj@jrs%M-hZOI^fTgOxBR`QFKHy>=1mQ zmpBIx@vdkUOq8IT89qXP9v@g85(sf@q1cLC!pbt`@0zvAM*9)7kNChBg<66diQdYc zTbo7mnl-Uo0$=qL7OR{gPgbfUiH%a7J|~`^N2cvP4WRi$>x}U7c5;}dZW&6{-aQfJ z$BzDqM=TS7K}%5CmJ=iVN^A`$=e~FNe96H4zXwi~#5*`9*mneErWri%fLe)b1ZU2~ z;23nT#5fLDl=%tB#L6^ZVH@hxI9WpC9=ZDtx!p-Jx>Y|g!Z z)*lC(TLKN~3Eoz2!nI63Qfaq}Kkhkc_!Z24zuCneH5WaM{;D;?a&z?4Y#OptP1{FY zyl6`BtjDoux5$8Ga+O}T>{0ow+H+*@($}P4=PRWcX{mBToeE4iE2j8?JOfPdqw-lz z*6jd_#g^!MH zo8vJfvC>hMEbTi1McGSJnhP-fTXR@tcM%WIylYTn0D(EKW&jpV2})+AxfBFIr$W`( zFBc78xXO$zH>;5}wI^0}>my~;JfrHC|DCE^ZCm@+#rGY3_!lffUO~P;**|p9`D6Fg z!+c$vF|0M?xR%F%qGTz(v_*&q{6}H7y16=l&Zsp6K~l=ec0qv|y4zQ^TGgTT&nhxo zJ8hdCZ$MIH^xj(wGZ1BXOv^zU)2SbX3K0N#q48}*QmCRFIy@ERV|N#S6>-}S8M5BL z+jRH6;-=V#F*(>fca48L*p|$Etfw-JeWkHIm3YAHhWWF6M@$!_S z+idW_eK?{xtA$+IL-Mda6Fh2hNZ9=M@F@I`oX9%%7@s96#U8Dw05udW5Yfw4RS{fhcl*QEnUv5;Shjc(mn;)?6UZ=ROm*2lQvHMy3q$^zIZ;(DLK>U2HD~8{vGaf6 zQwgL_MM{Z5^HGn$yw~wP5KOt#=bqv{tp5uzvCtu0p^j#}N+JdCR`Q-4Zk2k0{9s?^ zRFi9+f9RT;qRIcymNqzlTUst%u24oHVB6h=t$?*cqNbdseTzAet`$qpk?>N3opK>7)p3w+*VAKc=nKY9#Q}izpY+y5DZ8~>@oVF-OGesQFB#O z2{|?5uYnNSgo;gPIbJQe1R*wKI2QQs{urWJ2t=}?wkrT1@ zClB6=%WEf#>IKVzzPo>qvC_5Olf~eb{n-P3axmI&5A83Y>0@8St}8DmhsO)=7SzRn zHz#`wQ8hOOCZ^|OzpB*pc>~;BX?XTa0ny;uEx0gp*Xm^W;GTHE4Q2l7<)i!GXD+Ua z- z$b@$fd2j9L?CrhLl6UCZyS|4fLrI;xK%sLwy8r#Nx8u@Njy>MzoTc5f4>omCE4Ko3 zy{?$_%-|Ky8(=C%+Vdf}{FVcBb$P<(&e`oPuCL!6El>9(8^^C-=jryt+*v%@(WS!W zLDf+nd~DvMLcW9e)FNT%1Dy{{zmb3H+FYciy9-WyH!F{QF&pk0jkkdyBi&8-;%vTmdMxVB-aZ)Wu?M$#^p{*MS4KWKd+))$F&td*9mifV ztL`Yw4|9PZ?<@ONoyVk$L+>7w3|x4djJUpV@LZC$x#COT&)%K-g56M=taEyC<`rZ# z8E=etbiKm;?{o4n{~au7G^{B2sZ>W-9iA?w5tZH{L2j(SH$Og^SqO`&Stax25azw% z=FX-#xrE&zWX>_bSgjn8fxrcF_wR*7vQ?dOZOv9fAkBUD@p7>;hm`j@y~tUq`NpXb zYr>7)2<=28NVpxUD@c=Ge*ub4hYxNapMAVPI~iU(Fd79baJOjEv6i z?2k?+_rK2=g%sP>^Bg<0cyNz%IYvT6>1lp>Bn)e0cpN-G<|=^sgu4gy*yhgZhDa_* z$M>yq5>zl*{Z1|G=sdTjOBpxD8fOzcHcp@N*x=8z^_RsJx&bYOGFnb`LgvXKdiTNDzHGZhVa?TeFUzJQuoXX|~$JG*z13|gZ*asx*o?>}3%=YPI zg;=u!*dFa~ep4x@K+!`mKKD-h2ug58mn<{t_HuHVb#kajktnOP6FF(1MzeQj{9K%o zyXs(v*CxOaw|E?Lgu&)shIw5uu#Y;1M)Iz5MjzY&TsS!U<&^Kn%j7VjHr@>89flWd z0Yaa(CNPLQ9qn-u-Ha2;tvpTaFd6l`@=7|P56uV2LI-2ZQ=Qb7)36kV8R^g720o^o z(6QVAQw1U)2QN$DQeyxrsJkm!51w+-(WA=p7l%iq6D*;k=y&jbu|{5J_g@$lQydIgV~Vz0B?9Oa!CT$|b%5m=9 z=PGSDd%HVU!?ebmfGawGv>JyiTrid5|M2|w6|)oUqCDFxt)$X`)}t=^#W*Q1uNm0l zCYdR^n6dgqUhBws0&Fi&m_rv;ViJlK(ix;?*l1qGJGNZ{#^-v?Ga>>IqQteb{TDX4 ze__d|`H(2Bbx|C!*jgtcff5S5$2eGi!y#93V>!>gS~&o;HhZAimTmLFcbVmA{NSz8 z5|_L+J5(e}_O&+|-M=SD5P`X6%L-S(yJlI!{Bi+!@VK-n(fgFG^$_{kyAjTnlfL}bNd zm3-*<2zp2_3i{pqrl6)fmZg@xn;^IhQIXTUi*Y?ol^QqxdN3wF<(QveP%-x*( z)6;{=(6J0@xmZ9thYnZfkf%f0nFUITUoyK6xx$A~^LP@jU1O84)I*Or1opvqfrG8_ zl(SbqesFJV%-`2$TjU~CAf6;?Y00frfTHMf>VO)3kcsA?z{iy@PBbQx89lfMZMk&x zu?{&?!HDuh!*Q&lSvd){ z{!q4w9uahjQ;|$o%d6^oy+35$SGw%T?ihAZ>G^oW3O>@cM%>A2b~EqU+efHvSQBa8 zgWG!xja8DKiUzSbk9ndpz?x!3#uN$PrjDdD?^5l$$@Bx)>0{(y zcx{yG@t2!B~JT!c<*z1a61mjbyb^%d&((gq`E70WBBKg8UhzL*N&Fskp>!D^;Q;Eh0EN{ zD6>+)t;MBMRdE+W0cEnyek6`QrY04Qtd(khm>SrqeEYOcx4VHxBc(DH3)lUq)Quz- zf*_AJLH#+-ba^?TwF#@`tbHb`koRYAcMG zHM7z+B#}_g)f7xSl|2QIWIdn<#wvX-z#q^^kfv=RGsRO^=NIlO?7uRc>`ZI_((TRTRzDP?SU* z!ph!rK`DwiScxl2*nK*nRUrg%Vvn$>lCiE94G3nrEDo)oDi_>Wjd%JaS=auAuJ*A~Kz>i~<%SnNlG+SE zJUIf3HjNPJNLgJgzH`Lo(opQSxy(S1lEMs6w&)>JBajD1d$^_rN(Nt9&bEQ(DWfXz z&&StQA5Xc7mS}MTXq%4F!QjOSiQ(*cFZNlya4_43$5bj2l&d83Jg#2-&9E*JOI~H6)zM5hn`Z>zJ_{PIS|_z zHdia|Q^Mgjb92F&)T0e1E9c?v?bEnc`L$({CrR<#`9URN5EU!q9&^(>V1=xMq_bHf zw9U4qVAjTmJY(BIo;BxLIl4@NZlZh=Gf7&dhp65h;P5A^QzVOl5FR@*{$1ZyL1UuX z^-o&KV;nUZKH8KG(Zm0du1)<?~itfPI=gMOofc>19{>< zUssMZql`!21K|+NGMgL2k4WDqB86`F6Q5sCiu9z>3sSZrwZr@0XFnNrI?!~9&5w@> zbYac@XqzR#I-PD#(3V=yEV%pz*D)NG4V*DfO>fEZCe^TE#< zV?v=jDr?r5MwLSH6L*%?#M?q)ef*N2P7$r zDO_MtvJP5U3{8*7-;c@J(BOEYW5bD)&VEWI#eEKjh|?|#HZF6GCA}=Y}z64BzRelHYYq00bz|> zY{61y%w&e54IyFzPUZ>?8Vm$4*hGq%(&mA{J+PJ{-UR=~^d-<$-bOw`Ls8K{im(6$ z!v2ZOh<$?~guaU{1kFQGX|**-#=1_lYe1ow!q(yMKK$d~{i_N;h(V94{nnr`~R zTeAYUW>QD_coTwBe6n04mmke&5gjWbG_NN&2GA{=i-ko%*^^6fN2hI45+KH>cz3cd z$3n#c<=Ws*)8|IVT*8#{c9xp88DAC&Kh{b|jGRw>dUxyDoPuiXJ~Q}wiR|DIslu2f zLvbZVl#L1UJK5XcT`2UCkaL)rADz@oK0!^|+*^*eXY3myOmYxT9NU@#0;rpeWu{9c zA;h5@??ANkB$18Wevl$=^3$zq?%9F;7W_G6rs zEIuXVs60>!ey)@=^zm_S9{@_N@>0wqd<_k(FBA_8mIHY}4uAG^$L~NE=O|0+&wbtit{J~YyZ&V?~jy;45$Ey`!Hp6W5Yqd=Kma$gBjdwB(ol6DyO$gZ3_FYp9r2T> z0s{yD(B|UqhOGc`O?jbBDG+%$MiE$-OQbnV&QYeVpT33w1l^f!P+n3bO@gK#f&o|p^S1^v-J+k{!{joYKy=m>&R9)Zq6}z zai+eps7!@GVG?P9+@ZKzd2f805>Wi`bWC6Gm~9kF7o-R$ffdbssu!o&Mu8KXz+T#8 z&xc)o25=2db6D^nV75Vfq`@sFiv1B`i@_~bGE(uA#pHVEjp6fA5M>!kxPib_DShNh zMPLPM%1|Lqs@#1O3fbG=7`~$AYsb^j0TtvaX7OID%YTYAn>rWnU@}F6bU*lPexesQ zjw!`N)FJ7Fy#EsKbN#EnI35d?e4=qnXx!E}QS1_fP~8Qzh*cny!L&Ry1U=+mIXNlobGg~qnIhxuOJZM4= zC3#<#7OFlgC*o2>VQ5|XMvo)7%xsk6m*0|FW1cEKDhEjns`xh_9Vq%z$N=NnxSl^$hN-gd-sMwjaSDRPSnA?Yr6HAWWI{+?j1j4<<|Ndl3<6S7WFJ)3y2rdo zP(-=cDLc{+h@RkYev~ivMuI6+0-k)Olx|elZPY^SO&&#FiOF)o z%$8fbru5j2)>vzXYQn@TjTkYyibIIw!EH3kv4i>48#6Gigm|$*ROzPk*0xN}fEl_FZmxkf8N2w+rnSr{Dib!O# zM&nSM7|dCwYSHZFn5D>#+A;cQVyZRE_o)5b>Qyjbur2G2+oltL90ii)ce@yuX;G|;JoQVzXD&WV<8v&?oUz2a`Mjaefg}EohkYozi^_b&I~l949z+&UR?-X?&F5cpfN4%gQp-$q+j0M#>hl^KX1JBX^ZnvoSmj_n=Jd)JO!xkzMHE zb^TRlLQFa*1CltwQ*5*}(J>m5{x_YuxYJMKf}>e=%2CGe^98hYN93ax6ZA}+D#Je{ zDxC|#JZOu!f&saY=VeMYr9eDsM#XF0oCUsSohy?w`kJNx2d;)jPw#5-eT#gl6KC_a zikxVs6F7t;7P0WjcH960#+?K!gZ?g0>xi|Gpne_)k@+&P)=)fxfH~#ECk}B!wm9ED z&E_tQ`6*J+iDBht!}ctV;YkC_f_=W}f z9~vO$wBgz4bU2*k!jU*(%A7I7&pH3+P0if{ADqd8t>~U5okkPB;ZG)9i+psfF~SVB z&YtHa9)7}+E+QE#lDHU+L)>gCm{srZ+D^DVb|X7oT%zO0%-uT|KQei~=%P8amRr)G zu*I0wMJC9Cxt!1mBXrb`&b@(j&b2b02P$Mq7vxYJYG?bAv_|-N@guEFkRT;}lcjza zO)*km`PoJ(`N`VxId%(W5b%T>kQ#|#&W#gW^Y1Ks$dPa2kTD_ZL(%I}dr#}_j@we> zl|$6RXf^T0k0Dr%UqgT*3Z3wUCiI{zni7l`uycZ0Ig_Zy-E5?xSz2E|Sn1XJzQ72N zZdZ2^l4B-eZXAMWW3^MWZrH#PX=nzP*fLTaPtb)@GK5aps_ZZ8j(;uvFc$dOH&1C3 z<0`W_qAZ7Qgg}o8W`lE`ni;5?z)IFAt<03koH=PNBq>Y@r4{Z}ft7V|HFh+iTuG=^ zhI(DRp*bDU3D|503C-$*<~?2)%cRDwSkNZa*zw)CFR-zUIIZeO5`pETQ@go*&nF3U z6rau}X7P@}E(mwKr%b2dM!ynt6Nkv=oA9N@rL2Skv3?%ma{f*N1q9@c0stD{fnKDG z0j1_*S=NS(B!T6c0A;WRKZQC$Sp>4d%xd+_aYqtJ3TIr+i-{2PA!5a$2qUjnLQ`$m|B;kcG7Nz6iK&6;aX#d`L=uJmgy`{o zj|tRzmY!`17-NtKOYC=t`CIq#A&?(s@J!K-#$5AEn3>KsH86#5Rxm7AjdB4tU>l;2 zYpLVD+}2p}WU`1n4w`|#Kzsdxar*bIwUUDaH-Id0AfdMs{|HW;_k?p{ea4t@4Y&X& zy*eeGWApGVVSwmOaLcbbFq+jc&hPmV5y*OIJ##QI!9 zvb>#eDEmFTc^|5H@goM1)TJVS#o%_v9ets+44ut22oZmAuag;~gSAzud0INF*at{V zRO%m$9D(M=8-zikURt6{;N`Nbs7}If+2QJVZEYDcmmD{QCqJ;xNF3)xh$q!bF$dEl zMuDHs+x)SzJ!-MtwVGD5CudKwSn>5IAgSU}>y3{0M3mBCF$N>#zY~7)RL7+`cBnu7 zk-S#Dev}GQ5r~J(m884na1WmE5c@s>QNIX=E#`;AQn0AdDvTf5#KE(Q92`#Yo6ZCY zO0>cz$b+{ns$pVP@2N@w4fb38&;s(_GL-nyS&q`F-m#o>iKUtGqFEj`h1M{B$)B}!KbvY#~{7f7mPNy zYtsGd<)x(SF1}hOtLh795r}*t&JEkC0uE^clY$QA+8^;Pm}>6&27Gdel@&c+zHro_i| z3*rcZBnVjsD;J$cXHh#0UcgI{ow&g*B|6f%ZO&o#JlO3)WNBX5ds1)|Fo0-c1&n8M z0K+oVzjXtPt}Xg;Gg@QYG1~_sLRB?CDni6W z9iCqgQOmSDl754W@6j(#i)Y-ZRSLq8JZ!gfUkRC#e-^+Yw>uYLwj-HfENcnE?{HXn zT=MWiO?_xoMRIgvB513ZveMB)tIliQ*`o&Ua;31VWI>=62TEC$YD+9s|FDiz0>yZA zO_Q$EOBI-lrh=nq7*2iDN0j*x-2S<|Kv~a^UDn0n$5EeMxg{UFO}=Imw>vH|l>E68yIw($uXJOVn%t_O5YuM>DY zyfkuI)wH9tvgU@Bnm+4-kj39d4OH9H4BLf$%F_>gWl6YDdQ-kKRUM*F27hd+gE3HTJ z4lWoV8Xc!C)LmZJZ%T+L32kg96%)f|C2GDR!!tVR2^i_ST}*JhY$j2pobWO~3vYia zc*wjAZZt(Flq|yJs=jI6Y=nW-bY~BA#iC0{gC6B99momtg&^9ylx6!ewt9n{+N;9ml6+uMwInqFBipAP}VrCyUjMyaxt9o+;U4AO62Lz zn!tiZN3EI9q>>1$o#>l&O+mmSNtPVV4?(^nULs+EPt9qUO1rY?tS5X^B-YZ$$ik|N zhtR;Eu}bm_g}LzCWLw8%rLB-utX3UGF*a+HPsdsFA4k~|-W>_hP$4trnf`dD(oDF5 zU#c;2MW6B->SB*Op1Eg_GAokE+MX9-&(f_DL0#8?N&pcC)CFW#Q9F%X3KFoijfr*q zJ?Ox~E4=B5Y{i#{l7v_w%+hX>W0v)EM4xNFVIYW+e^>;l3KFrHq-*PjNl#~UWW;Zy zkci8oOe_h3$?~PN*cOxj#N%I*|F`$wGN`m%TX0v{43!no1*>a{T|*Pr2P`D0y_A{J z6S`D)ph(eSz>BpxUuTE&m#8w5@C=SAFf=$(2|WXmTLN+izY+aO-=t=p0*rj-&#=`L zX!z&0D?x16icN*sb$Lx^g`td^cksv(*~LS+S)tjrs7%CemKEGLd!XJNsm zzG4hu7JHF3X$8UNI1Knd0t>3Kj4d$tkw-%^(w%nPU;JJ`RwXV`mcY1b175sA^aUT@ z5~C>~i(RNDp<+$GK<%wwxcL=GanlWL_ilR`t+y;J(U)U9ekH+ zO+qxusd5g``6J{K`(T6-6|@U3qSAF&r+*|?B`l+b(wY<){Yk?>N2upRS;&-D=;P?4^Bqwl316S6F1K+KTk~s_qq+5xOTN)xH@gNeH|*%8o5hC35dcLWBWK7O}iG$)5j{WQr6a zLW?!;WmY_e>N?C2uh--yNzSD@VEwY_5($V=ILnpAD@9YJ$_JE#u>k6U5^@*p z#2om-S72FDkpAeytTe_mR*E4m>>;ED=DR{7)Z-%JKtp%`Sj`C8OtLw3dSOZxB3^LL z&R;A}DihU?e#Ns^>Z|pgvO98u+9$+#%?9ARtH*1xf2r@eQFRyGrtX5fK2p@1SSSWq z92L*nQ4f3~NExMBrEp%t|gfYB9pdyTcU%Q_hl2&^8xw zdkRJyT>zS;D*{Txn@ov1W#dXiX*^j{v`meVAwP%eQFgRfkei_XE-$7_=D! z4={E6ocXzeWr%#FOXS9;COK%m3EjOn{0T&vJ|3uiqv<*xdY$F42vVy9U z8SWG&1hM@-VZ}@pGqz<8r&i+EM!4;rlOfsg-0-|EcEaJym(I%tCj(r%_UVuG^3=`Q zHZPnvXcs3zX`l65yyky%|LoVirpM(&1JooHF)|7URv4G!}%z({j*>2QboMA#c_uR$CIte_VJCu%TwOz^Yvo6;FmwT z$?Kte#}i)B%5y+b{<6)P^eOMCOtyHT$D}Q)JjWfs7fpa6(hI>A3 zm@#;kiFqY%RE0LpXX)%-UJ;pYbMu@yIn?{*+!o2Wtq-ap)8|1G@4Rm6YPrFe&VGHw zK_7Y%Oh2yv^eY(E-_=lG)oCT7E;FWKew>Bj?EJSc zsRMBLI2w-E<2jk@2+<5)+}9-JpbU&&VDiF z)l75!)_7yX$E@nsfTsuFD1Q!bve-hizkG$?ASRBKLR`G-E{dO>ZgVu?bZEHsVYg6q zG%lYXk2le>#o^(cgZy~|4k7p_`uSF)s(g3?RlEwd>;7cQyIUj3JwBf6AxvU4J(_VeMHjRV&)&)gVJ3`@kB2*Fzc@JN zCL;e%rlhc_Vf^@b&KrlAp{^A3IcX1h#_xGxi{c%3N{z3ZfgIKqqGE#C0jFn7wk6Wyw2>bDb8+ zOLJQ~XpIv)(vfJxKS1ra78u!V%0AvJ&(B$7SDM7I)0rg6r#_d=S7n`|%TT!hFc6z~ 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¥&BeY4h$N=+B}(0w*6O?mG%?bi6tKN0ai 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

H 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ⅈ076I&y9UC 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 literal 0 HcmV?d00001 diff --git a/ops/production.ini b/ops/production.ini new file mode 100755 index 0000000..cd387b2 --- /dev/null +++ b/ops/production.ini @@ -0,0 +1,57 @@ +# +# harstorage - Pylons configuration +# +# The %(here)s variable will be replaced with the parent directory of this file +# +[DEFAULT] +debug = false + +[server:main] +use = egg:Paste#http +host = 0.0.0.0 +port = 5000 + +[app:main] +use = egg:harstorage +full_stack = true +static_files = true +temp_store = %(here)s/data +bin_store = ~/opt/page-speed-library/src/xcodebuild/Release +ps_enabled = true +static_version = 1.0 + +mongo_host = localhost +mongo_port = 27017 +mongo_db = harstorage +mongo_auth = false +mongo_user = admin +mongo_pswd = admin + +cache_dir = %(here)s/data +beaker.session.key = harstorage +beaker.session.secret = TQ4MQ8vaNJTepD8H6iK6zFo7O + +app_instance_uuid = {d8a530ff-4021-4bd5-9af7-76f46dc6bce3} + +# Logging configuration +[loggers] +keys = root + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = INFO +handlers = console + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(asctime)s %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s diff --git a/ops/scripts/seedHars.sh b/ops/scripts/seedHars.sh new file mode 100755 index 0000000..a82aadf --- /dev/null +++ b/ops/scripts/seedHars.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +HAR_DIR=~/harstorage/harfiles +HS_URL="http://localhost:5000" + +for i in `ls $HAR_DIR/*.har` +do + echo "Uploading $i" + curl -s -X POST --form "file=@$i" --header "Automated: true" $HS_URL/results/upload +done + +# Example +#curl -X POST --form "file=@~/harstorage/harfiles/www.stubhub.com--origin-wro-2013-02-01-13-08-06.har" --header "Automated: true" $HS_URL/results/upload + + diff --git a/ops/scripts/startHarStorage.sh b/ops/scripts/startHarStorage.sh new file mode 100755 index 0000000..49dc685 --- /dev/null +++ b/ops/scripts/startHarStorage.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +mongod --dbpath ~/opt/mongodb/data & +paster serve production.ini & diff --git a/ops/scripts/stopHarStorage.sh b/ops/scripts/stopHarStorage.sh new file mode 100755 index 0000000..797099d --- /dev/null +++ b/ops/scripts/stopHarStorage.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +pkill Python; +pkill mongod; + From 3ea29052c071d85e499ddfb0f0184972a621ee62 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Thu, 4 Sep 2014 11:47:12 -0700 Subject: [PATCH 02/88] Removed directory as we'll maintain in tarball --- harstorage/__init__.py | 0 harstorage/config/__init__.py | 0 harstorage/config/deployment.ini_tmpl | 59 - harstorage/config/environment.py | 44 - harstorage/config/middleware.py | 49 - harstorage/config/routing.py | 21 - harstorage/controllers/__init__.py | 0 harstorage/controllers/chart.py | 90 - harstorage/controllers/combine.py | 60 - harstorage/controllers/error.py | 28 - harstorage/controllers/migration.py | 68 - harstorage/controllers/results.py | 475 ----- harstorage/controllers/superposed.py | 224 -- harstorage/lib/HAR.py | 487 ----- harstorage/lib/Math.py | 226 -- harstorage/lib/MongoHandler.py | 57 - harstorage/lib/__init__.py | 0 harstorage/lib/app_globals.py | 18 - harstorage/lib/base.py | 22 - harstorage/lib/helpers.py | 10 - harstorage/public/favicon.ico | Bin 1150 -> 0 bytes harstorage/public/images/add_button.png | Bin 1284 -> 0 bytes harstorage/public/images/help_button.png | Bin 1109 -> 0 bytes harstorage/public/images/pylons.png | Bin 1098 -> 0 bytes harstorage/public/images/remove_button.png | Bin 1073 -> 0 bytes harstorage/public/scripts/LAB.min.js | 5 - harstorage/public/scripts/chosen.jquery.js | 796 ------- .../scripts/datatables/ColReorder.min.js | 34 - .../scripts/datatables/TableTools.min.js | 78 - .../datatables/jquery.dataTables.min.js | 151 -- harstorage/public/scripts/harstorage.js | 1220 ----------- .../public/scripts/harviewer/core/trace.js | 26 - .../scripts/harviewer/domplate/domplate.js | 263 --- .../public/scripts/harviewer/harPreview.js | 1 - .../public/scripts/harviewer/require.js | 1 - .../public/scripts/highcharts/exporting.js | 22 - .../public/scripts/highcharts/highcharts.js | 199 -- .../public/scripts/highcharts/themes.js | 436 ---- harstorage/public/scripts/jquery-1.7.min.js | 4 - harstorage/public/scripts/preferences.js | 156 -- harstorage/public/scripts/spin.js | 325 --- harstorage/public/scripts/tabber.js | 476 ----- .../public/styles/chosen/chosen-sprite.png | Bin 742 -> 0 bytes harstorage/public/styles/chosen/chosen.css | 245 --- .../public/styles/datatables/ColReorder.css | 21 - .../styles/datatables/TableTools_JUI.css | 182 -- .../styles/datatables/images/insert.png | Bin 1885 -> 0 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 120 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 111 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 110 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 119 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 101 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 0 bytes .../datatables/jquery-ui-1.8.4.custom.css | 572 ----- .../public/styles/datatables/table_jui.css | 448 ---- .../public/styles/harviewer/harPreview.css | 1 - .../harviewer/images/contextMenuTarget.png | Bin 142 -> 0 bytes .../images/contextMenuTargetHover.png | Bin 148 -> 0 bytes .../images/menu/previewMenuHandle.png | Bin 219 -> 0 bytes .../harviewer/images/menu/shadowAlpha.png | Bin 3403 -> 0 bytes .../harviewer/images/menu/tabMenuCheckbox.png | Bin 220 -> 0 bytes .../styles/harviewer/images/tabEnabled.png | Bin 142 -> 0 bytes .../harviewer/images/timeline-sprites.png | Bin 559 -> 0 bytes .../harviewer/images/twisty-sprites.png | Bin 278 -> 0 bytes harstorage/public/styles/main-ie.css | 12 - harstorage/public/styles/main.css | 444 ---- harstorage/public/styles/tabber.css | 86 - harstorage/public/swf/copy_cvs_xls.swf | Bin 2131 -> 0 bytes harstorage/templates/common/dochead.html | 17 - harstorage/templates/common/footer.html | 10 - harstorage/templates/common/header.html | 28 - harstorage/templates/create/core.html | 59 - harstorage/templates/create/jsloader.html | 13 - harstorage/templates/details/core.html | 89 - harstorage/templates/details/dochead.html | 20 - harstorage/templates/details/jsloader.html | 26 - harstorage/templates/display/core.html | 33 - harstorage/templates/display/dochead.html | 20 - harstorage/templates/display/jsloader.html | 47 - harstorage/templates/display/modules.html | 28 - harstorage/templates/error.html | 10 - harstorage/templates/harviewer.html | 13 - harstorage/templates/histogram/core.html | 23 - harstorage/templates/histogram/dochead.html | 18 - harstorage/templates/histogram/jsloader.html | 18 - harstorage/templates/home/core.html | 51 - harstorage/templates/home/dochead.html | 18 - harstorage/templates/home/jsloader.html | 23 - harstorage/templates/migration.html | 14 - harstorage/templates/upload.html | 10 - harstorage/tests/__init__.py | 35 - harstorage/tests/functional/__init__.py | 0 harstorage/tests/functional/test_chart.py | 37 - harstorage/tests/functional/test_combine.py | 41 - harstorage/tests/functional/test_migration.py | 7 - harstorage/tests/functional/test_results.py | 279 --- .../tests/functional/test_superposed.py | 175 -- .../tests/functional/testdata/validfile.har | 1866 ----------------- .../tests/functional/testdata/validfile.svg | 1 - harstorage/tests/test_models.py | 0 harstorage/websetup.py | 15 - 108 files changed, 11186 deletions(-) delete mode 100644 harstorage/__init__.py delete mode 100644 harstorage/config/__init__.py delete mode 100644 harstorage/config/deployment.ini_tmpl delete mode 100644 harstorage/config/environment.py delete mode 100644 harstorage/config/middleware.py delete mode 100644 harstorage/config/routing.py delete mode 100644 harstorage/controllers/__init__.py delete mode 100644 harstorage/controllers/chart.py delete mode 100644 harstorage/controllers/combine.py delete mode 100644 harstorage/controllers/error.py delete mode 100644 harstorage/controllers/migration.py delete mode 100644 harstorage/controllers/results.py delete mode 100644 harstorage/controllers/superposed.py delete mode 100644 harstorage/lib/HAR.py delete mode 100644 harstorage/lib/Math.py delete mode 100644 harstorage/lib/MongoHandler.py delete mode 100644 harstorage/lib/__init__.py delete mode 100644 harstorage/lib/app_globals.py delete mode 100644 harstorage/lib/base.py delete mode 100644 harstorage/lib/helpers.py delete mode 100644 harstorage/public/favicon.ico delete mode 100644 harstorage/public/images/add_button.png delete mode 100644 harstorage/public/images/help_button.png delete mode 100644 harstorage/public/images/pylons.png delete mode 100644 harstorage/public/images/remove_button.png delete mode 100644 harstorage/public/scripts/LAB.min.js delete mode 100644 harstorage/public/scripts/chosen.jquery.js delete mode 100644 harstorage/public/scripts/datatables/ColReorder.min.js delete mode 100644 harstorage/public/scripts/datatables/TableTools.min.js delete mode 100644 harstorage/public/scripts/datatables/jquery.dataTables.min.js delete mode 100644 harstorage/public/scripts/harstorage.js delete mode 100644 harstorage/public/scripts/harviewer/core/trace.js delete mode 100644 harstorage/public/scripts/harviewer/domplate/domplate.js delete mode 100644 harstorage/public/scripts/harviewer/harPreview.js delete mode 100644 harstorage/public/scripts/harviewer/require.js delete mode 100644 harstorage/public/scripts/highcharts/exporting.js delete mode 100644 harstorage/public/scripts/highcharts/highcharts.js delete mode 100644 harstorage/public/scripts/highcharts/themes.js delete mode 100644 harstorage/public/scripts/jquery-1.7.min.js delete mode 100644 harstorage/public/scripts/preferences.js delete mode 100644 harstorage/public/scripts/spin.js delete mode 100644 harstorage/public/scripts/tabber.js delete mode 100644 harstorage/public/styles/chosen/chosen-sprite.png delete mode 100644 harstorage/public/styles/chosen/chosen.css delete mode 100644 harstorage/public/styles/datatables/ColReorder.css delete mode 100755 harstorage/public/styles/datatables/TableTools_JUI.css delete mode 100644 harstorage/public/styles/datatables/images/insert.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100755 harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100755 harstorage/public/styles/datatables/images/ui-icons_222222_256x240.png delete mode 100755 harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png delete mode 100755 harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png delete mode 100755 harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png delete mode 100755 harstorage/public/styles/datatables/images/ui-icons_cd0a0a_256x240.png delete mode 100755 harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css delete mode 100644 harstorage/public/styles/datatables/table_jui.css delete mode 100644 harstorage/public/styles/harviewer/harPreview.css delete mode 100644 harstorage/public/styles/harviewer/images/contextMenuTarget.png delete mode 100644 harstorage/public/styles/harviewer/images/contextMenuTargetHover.png delete mode 100644 harstorage/public/styles/harviewer/images/menu/previewMenuHandle.png delete mode 100644 harstorage/public/styles/harviewer/images/menu/shadowAlpha.png delete mode 100644 harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png delete mode 100644 harstorage/public/styles/harviewer/images/tabEnabled.png delete mode 100644 harstorage/public/styles/harviewer/images/timeline-sprites.png delete mode 100644 harstorage/public/styles/harviewer/images/twisty-sprites.png delete mode 100644 harstorage/public/styles/main-ie.css delete mode 100644 harstorage/public/styles/main.css delete mode 100644 harstorage/public/styles/tabber.css delete mode 100644 harstorage/public/swf/copy_cvs_xls.swf delete mode 100644 harstorage/templates/common/dochead.html delete mode 100644 harstorage/templates/common/footer.html delete mode 100644 harstorage/templates/common/header.html delete mode 100644 harstorage/templates/create/core.html delete mode 100644 harstorage/templates/create/jsloader.html delete mode 100644 harstorage/templates/details/core.html delete mode 100644 harstorage/templates/details/dochead.html delete mode 100644 harstorage/templates/details/jsloader.html delete mode 100644 harstorage/templates/display/core.html delete mode 100644 harstorage/templates/display/dochead.html delete mode 100644 harstorage/templates/display/jsloader.html delete mode 100644 harstorage/templates/display/modules.html delete mode 100644 harstorage/templates/error.html delete mode 100644 harstorage/templates/harviewer.html delete mode 100644 harstorage/templates/histogram/core.html delete mode 100644 harstorage/templates/histogram/dochead.html delete mode 100644 harstorage/templates/histogram/jsloader.html delete mode 100644 harstorage/templates/home/core.html delete mode 100644 harstorage/templates/home/dochead.html delete mode 100644 harstorage/templates/home/jsloader.html delete mode 100644 harstorage/templates/migration.html delete mode 100644 harstorage/templates/upload.html delete mode 100644 harstorage/tests/__init__.py delete mode 100644 harstorage/tests/functional/__init__.py delete mode 100644 harstorage/tests/functional/test_chart.py delete mode 100644 harstorage/tests/functional/test_combine.py delete mode 100644 harstorage/tests/functional/test_migration.py delete mode 100644 harstorage/tests/functional/test_results.py delete mode 100644 harstorage/tests/functional/test_superposed.py delete mode 100644 harstorage/tests/functional/testdata/validfile.har delete mode 100644 harstorage/tests/functional/testdata/validfile.svg delete mode 100644 harstorage/tests/test_models.py delete mode 100644 harstorage/websetup.py diff --git a/harstorage/__init__.py b/harstorage/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/config/__init__.py b/harstorage/config/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/config/deployment.ini_tmpl b/harstorage/config/deployment.ini_tmpl deleted file mode 100644 index 885002e..0000000 --- a/harstorage/config/deployment.ini_tmpl +++ /dev/null @@ -1,59 +0,0 @@ -# -# harstorage - Pylons configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = false - -[server:main] -use = egg:Paste#http -host = 0.0.0.0 -port = 5000 - -[app:main] -use = egg:harstorage -full_stack = true -static_files = true -temp_store = %(here)s/data -bin_store = %(here)s -ps_enabled = false -static_version = 1.0 - -mongo_replicate = false -mongo_replset = repl1 -mongo_host = localhost -mongo_port = 27017 -mongo_db = harstorage -mongo_auth = false -mongo_user = admin -mongo_pswd = admin - -cache_dir = %(here)s/data -beaker.session.key = harstorage -beaker.session.secret = ${app_instance_secret} - -app_instance_uuid = ${app_instance_uuid} - -# Logging configuration -[loggers] -keys = root - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = INFO -handlers = console - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(asctime)s %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s diff --git a/harstorage/config/environment.py b/harstorage/config/environment.py deleted file mode 100644 index f7146a3..0000000 --- a/harstorage/config/environment.py +++ /dev/null @@ -1,44 +0,0 @@ -import os - -from mako.lookup import TemplateLookup -from pylons.configuration import PylonsConfig -from pylons.error import handle_mako_error - -import harstorage.lib.app_globals as app_globals -import harstorage.lib.helpers -from harstorage.config.routing import make_map - - -def load_environment(global_conf, app_conf): - """Configure the Pylons environment via the ``pylons.config`` object""" - - config = PylonsConfig() - - # Pylons paths - root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - paths = dict(root=root, - controllers=os.path.join(root, "controllers"), - static_files=os.path.join(root, "public"), - templates=[os.path.join(root, "templates")]) - - # Initialize config with the basic options - config.init_app(global_conf, app_conf, package="harstorage", paths=paths) - - config["routes.map"] = make_map(config) - config["pylons.app_globals"] = app_globals.Globals(config) - config["pylons.h"] = harstorage.lib.helpers - - # Setup cache object as early as possible - import pylons - pylons.cache._push_object(config["pylons.app_globals"].cache) - - # Create the Mako TemplateLookup, with the default auto-escaping - config["pylons.app_globals"].mako_lookup = TemplateLookup( - directories=paths["templates"], - error_handler=handle_mako_error, - module_directory=os.path.join(app_conf["cache_dir"], "templates"), - input_encoding="utf-8", - default_filters=["escape"], - imports=["from webhelpers.html import escape"]) - - return config diff --git a/harstorage/config/middleware.py b/harstorage/config/middleware.py deleted file mode 100644 index b7b256a..0000000 --- a/harstorage/config/middleware.py +++ /dev/null @@ -1,49 +0,0 @@ -from beaker.middleware import SessionMiddleware -from paste.cascade import Cascade -from paste.registry import RegistryManager -from paste.urlparser import StaticURLParser -from paste.deploy.converters import asbool -from pylons.middleware import ErrorHandler, StatusCodeRedirect -from pylons.wsgiapp import PylonsApp -from routes.middleware import RoutesMiddleware - -from harstorage.config.environment import load_environment - - -def make_app(global_conf, full_stack=True, static_files=True, **app_conf): - """Create a Pylons WSGI application and return it""" - - # Configure the Pylons environment - config = load_environment(global_conf, app_conf) - - # The Pylons WSGI app - app = PylonsApp(config=config) - - # Routing/Session Middleware - app = RoutesMiddleware(app, config["routes.map"]) - app = SessionMiddleware(app, config) - - # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) - - if asbool(full_stack): - # Handle Python exceptions - app = ErrorHandler(app, global_conf, **config["pylons.errorware"]) - - # Display error documents for 400, 403, 404, 405 status codes (and - # 500, 503 when debug is disabled) - if asbool(config["debug"]): - app = StatusCodeRedirect(app) - else: - app = StatusCodeRedirect(app, [400, 403, 404, 405, 500, 503]) - - # Establish the Registry for this application - app = RegistryManager(app) - - if asbool(static_files): - # Serve static files - static_app = StaticURLParser(config["pylons.paths"]["static_files"]) - app = Cascade([static_app, app]) - - app.config = config - - return app diff --git a/harstorage/config/routing.py b/harstorage/config/routing.py deleted file mode 100644 index 0be3f1d..0000000 --- a/harstorage/config/routing.py +++ /dev/null @@ -1,21 +0,0 @@ -from routes import Mapper - - -def make_map(config): - """Create, configure and return the routes Mapper""" - - map = Mapper(directory=config["pylons.paths"]["controllers"], - always_scan=config["debug"]) - map.minimization = False - map.explicit = True - - # The ErrorController route (handles 4xx/5xx error pages) - map.connect("/error/{action}", controller="error") - - # Home page - map.connect("/", controller="results", action="index") - - # Common routing to controllers - map.connect("/{controller}/{action}") - - return map diff --git a/harstorage/controllers/__init__.py b/harstorage/controllers/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/controllers/chart.py b/harstorage/controllers/chart.py deleted file mode 100644 index b241f15..0000000 --- a/harstorage/controllers/chart.py +++ /dev/null @@ -1,90 +0,0 @@ -import os -import cairo -import rsvg -import hashlib - -from pylons import request, response -from pylons import config -from pylons.decorators.rest import restrict - -from harstorage.lib.base import BaseController - - -class ChartController(BaseController): - - """ - Export charts in SVG and PNG format - """ - - @restrict("POST") - def export(self): - """Main export controller""" - - # Parameters from POST request - type = request.POST["type"] - svg = request.POST["svg"] - filename = request.POST["filename"] - width = int(request.POST["width"]) - - # Image size - if filename == "timeline": - height = 450 - elif filename == "histogram" or filename == "superposed": - height = 400 - elif filename == "resources" or filename == "domains-by-size": - height = 300 - - # Converting - if type == "image/png": - # Image extension - ext = ".png" - - # Image name - image_name = os.path.join(config["app_conf"]["temp_store"], - hashlib.md5().hexdigest() + ext) - - # Create PNG file - self._render_png(svg, image_name, width, height) - elif type == "image/svg+xml": - # Image extension - ext = ".svg" - - # Image name - image_name = os.path.join(config["app_conf"]["temp_store"], - hashlib.md5().hexdigest() + ext) - - # Create SVG file - self._render_svg(svg, image_name) - - # Response headers - response.headers["Content-Disposition"] = \ - "attachment; filename=" + filename + ext - response.headers["Content-type"] = type - - # Return chuncked response - return self._stream_image(image_name) - - def _render_svg(self, svg, filename): - """Create SVG file""" - - with open(filename, "w") as svg_file: - svg_file.write(svg) - - def _render_png(self, svg, filename, width, height): - """Create PNG file""" - - image = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) - ctx = cairo.Context(image) - - rsvg.Handle(None, svg).render_cairo(ctx) - - image.write_to_png(filename) - - def _stream_image(self, image_name): - """Stream image by chunks""" - - with open(image_name, "rb") as image_file: - chunk = image_file.read(1024) - while chunk: - yield chunk - chunk = image_file.read(1024) diff --git a/harstorage/controllers/combine.py b/harstorage/controllers/combine.py deleted file mode 100644 index 3f90946..0000000 --- a/harstorage/controllers/combine.py +++ /dev/null @@ -1,60 +0,0 @@ -from pylons import request, response -from pylons import config -from pylons.decorators.rest import restrict - -from harstorage.lib.base import BaseController - - -class CombineController(BaseController): - - """ - Combine multiple static text resources (CSS, JavaScript) - into single file - - """ - - @restrict("GET") - def styles(self): - """Read list of stylesheets and combine them""" - - # Concatenation - for key in request.GET.keys(): - if key != "ver": - base = config["pylons.paths"]["static_files"] - try: - with open(base + "/styles/" + key) as file: - try: - combo += file.read() - except UnboundLocalError: - combo = file.read() - except IOError: - response.status_int = 404 - return None - - # Additional HTTP headers - response.headerlist = [("Content-type", "text/css")] - - return combo - - @restrict("GET") - def scripts(self): - """Read list of JavaScript files and combine them""" - - # Concatenation - for key in request.GET.keys(): - if key != "ver": - base = config["pylons.paths"]["static_files"] - try: - with open(base + "/scripts/" + key) as file: - try: - combo += file.read() - except UnboundLocalError: - combo = file.read() - except IOError: - response.status_int = 404 - return None - - # Additional HTTP headers - response.headerlist = [("Content-type", "application/javascript")] - - return combo diff --git a/harstorage/controllers/error.py b/harstorage/controllers/error.py deleted file mode 100644 index 13364fc..0000000 --- a/harstorage/controllers/error.py +++ /dev/null @@ -1,28 +0,0 @@ -from pylons import request, tmpl_context as c -from pylons import config -from webhelpers.html.builder import literal - -from harstorage.lib.base import BaseController, render - - -class ErrorController(BaseController): - - """Generates error documents as and when they are required. - - The ErrorDocuments middleware forwards to ErrorController when error - related status codes are returned from the application. - - """ - - def __before__(self): - """Define version of static content""" - - c.rev = config["app_conf"]["static_version"] - - def document(self): - """Render the error document""" - - resp = request.environ.get("pylons.original_response") - c.message = literal(resp.status) - - return render("/error.html") diff --git a/harstorage/controllers/migration.py b/harstorage/controllers/migration.py deleted file mode 100644 index 2959363..0000000 --- a/harstorage/controllers/migration.py +++ /dev/null @@ -1,68 +0,0 @@ -from pylons import tmpl_context as c -from pylons import config -from pylons.controllers.util import redirect - -from harstorage.lib.base import BaseController, render -from harstorage.lib.MongoHandler import MongoDB -from harstorage.lib.HAR import HAR -import harstorage.lib.helpers as h - - - -class MigrationController(BaseController): - - def __before__(self): - """Define version of static content""" - - c.rev = config["app_conf"]["static_version"] - - def status(self): - return render("/migration.html") - - def migration(self): - # MongoDB handler - mdb_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") - - for document in mdb_handler.collection.find(fields=["_id", "har"]): - id = document["_id"] - - har = HAR(document["har"], True) - - har.analyze() - - domains_req_ratio = dict() - domains_weight_ratio = dict() - - for key, value in har.domains.items(): - domains_req_ratio[key] = value[0] - domains_weight_ratio[key] = value[1] - - data = {"full_load_time": har.full_load_time, - "onload_event": har.onload_event, - "start_render_time": har.start_render_time, - "time_to_first_byte": har.time_to_first_byte, - "total_dns_time": har.total_dns_time, - "total_transfer_time": har.total_transfer_time, - "total_server_time": har.total_server_time, - "avg_connecting_time": har.avg_connecting_time, - "avg_blocking_time": har.avg_blocking_time, - "total_size": har.total_size, - "text_size": har.text_size, - "media_size": har.media_size, - "cache_size": har.cache_size, - "requests": har.requests, - "redirects": har.redirects, - "bad_requests": har.bad_requests, - "domains": len(har.domains), - "weights_ratio": har.weight_ratio(), - "requests_ratio": har.req_ratio(), - "domains_ratio": har.domains} - - mdb_handler.collection.update({"_id": id}, {"$set": data}) - - migration_handler = MongoDB(collection="migration") - migration_handler.collection.insert({"status": "ok"}) - - redirect(h.url_for('/')) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py deleted file mode 100644 index c6bb2d6..0000000 --- a/harstorage/controllers/results.py +++ /dev/null @@ -1,475 +0,0 @@ -import json -import os -import hashlib -import mimetypes -import time -import re -import functools -import platform - -from pylons import request, response, tmpl_context as c -from pylons import config -from pylons.controllers.util import redirect -from pylons.decorators.rest import restrict - -from harstorage.lib.base import BaseController, render -from harstorage.lib.HAR import HAR -from harstorage.lib.MongoHandler import MongoDB -import harstorage.lib.helpers as h - - -class ResultsController(BaseController): - - """ - Core controller of repository - """ - - def __before__(self): - """Define version of static content""" - - c.rev = config["app_conf"]["static_version"] - - @restrict("GET") - def index(self): - """Home page with the latest test results""" - - # Migration (harstorage v1.0) - migration_handler = MongoDB(collection="migration") - if hasattr(c, "message"): - return render("/error.html") - - status = migration_handler.collection.find_one({"status": "ok"}) - if status is None: - redirect(h.url_for('/migration/status')) - - # MongoDB handler - mdb_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") - - # Read aggregated data from database - # Aggregation is based on unique labels, urls and latest timestamps - - - ''' - Replaced the original grouping with an aggregate function. This function - actually returns all of the fields needed such that we also do not needed - to make any subsequent requests back to MongoDB to retrieve details on - the list - ''' - latest_results = mdb_handler.collection.aggregate( - [{"$group":{"_id": {"label":"$label", "url":"$url"}, - "timestamp":{"$last":"$timestamp"}, - "total_size":{"$last":"$total_size"}, - "requests":{"$last":"$requests"}, - "full_load_time": {"$last":"$full_load_time"}}}, - {"$sort":{"timestamp" : -1}}]) - - ''' - Get the number of records - - Since we changed the initial request, we need to deal with the json array - differently as well. - ''' - c.rowcount = len(latest_results["result"]) - - # Populate data table with the latest test results - c.metrics_table = [[], [], [], [], [], []] - - ''' - for group in latest_results["result"]: - condition = {"label": group["_id"]["label"], "timestamp": group["timestamp"]} - - result = mdb_handler.collection.find_one(condition, fields=fields) - - c.metrics_table[0].append(result["timestamp"]) - c.metrics_table[1].append(result["label"]) - c.metrics_table[2].append(result["url"]) - c.metrics_table[3].append(result["total_size"]) - c.metrics_table[4].append(result["requests"]) - c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) - ''' - - # loop through our results and return them - for result in latest_results["result"]: - c.metrics_table[0].append(result["timestamp"]) - c.metrics_table[1].append(result["_id"]["label"]) - c.metrics_table[2].append(result["_id"]["url"]) - c.metrics_table[3].append(result["total_size"]) - c.metrics_table[4].append(result["requests"]) - c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) - - - return render("/home/core.html") - - @restrict("GET") - def details(self): - """Page with test results""" - - # Try to fetch data for selecetor box - try: - c.label = request.GET["url"] - c.mode = "url" - # Use label parameter instead of URL parameter - except: - c.label = request.GET["label"] - c.mode = "label" - - # Generate context for selector - self._set_options_in_selector(c.mode, c.label) - - # Define url for data aggregation - if c.mode == "label": - c.query = "/superposed/display?" + \ - "step_1_label=" + c.label + \ - "&step_1_start_ts=" + min(c.timestamp) + \ - "&step_1_end_ts=" + max(c.timestamp) - c.histo = "true" - else: - c.histo = "false" - c.query = "None" - - return render("/details/core.html") - - def _set_options_in_selector(self, mode, label): - """ - Create context data - a list of timestamps. - - @parameter label - label of set with test results - """ - - # Read data for selector box from database - results = MongoDB().collection.find( - {mode: label}, - fields=["timestamp"], - sort=[("timestamp", -1)]) - - c.timestamp = list() - - for result in results: - c.timestamp.append(result["timestamp"]) - - @restrict("GET") - def timeline(self): - """Generate data for timeline chart""" - - # Parameters from GET request - label = h.decode_uri(request.GET["label"]) - mode = request.GET["mode"] - limit = int(config["app_conf"].get("limit", 0)) - - # Metrics - METRICS = ("timestamp", "full_load_time", "requests", "total_size", - "ps_scores", "onload_event", "start_render_time", - "time_to_first_byte", "total_dns_time", - "total_transfer_time", "total_server_time", - "avg_connecting_time", "avg_blocking_time", "text_size", - "media_size", "cache_size", "redirects", "bad_requests", - "domains") - - TITLES = ["Full Load Time", "Total Requests", - "Total Size", "Page Speed Score", "onLoad Event", - "Start Render Time", "Time to First Byte", - "Total DNS Time", "Total Transfer Time", "Total Server Time", - "Avg. Connecting Time", "Avg. Blocking Time", "Text Size", - "Media Size", "Cache Size", "Redirects", "Bad Rquests", - "Domains"] - - # Set of metrics to exclude (due to missing data) - exclude = set() - data = list() - for index in range(len(METRICS)): - data.append(str()) - - # Read data for timeline from database in custom format (hash separated) - results = MongoDB().collection.find( - {mode: label}, - fields=METRICS, - limit=limit, - sort=[("timestamp", 1)]) - - for result in results: - index = 0 - for metric in METRICS: - if metric != "ps_scores": - point = str(result[metric]) - else: - point = str(result[metric]["Total Score"]) - if point == "n/a": - exclude.add(metric) - data[index] += point + "#" - index += 1 - - # Update list of titles - if "onload_event" in exclude: - TITLES.pop(TITLES.index("onLoad Event")) - if "start_render_time" in exclude: - TITLES.pop(TITLES.index("Start Render Time")) - - header = str() - for title in TITLES: - header += title + "#" - - output = header[:-1] + ";" - - for dataset in data: - if not dataset.count("n/a"): - output += dataset[:-1] + ";" - - return output[:-1] - - @restrict("GET") - def runinfo(self): - """Generate detailed data for each test run""" - - # Parameters from GET request - timestamp = request.GET["timestamp"] - - # DB query - test_results = MongoDB().collection.find_one({"timestamp": timestamp}) - - # Domains breakdown - domains_req_ratio = dict() - domains_weight_ratio = dict() - - for hostname, value in test_results["domains_ratio"].items(): - hostname = re.sub("\|", ".", hostname) - domains_req_ratio[hostname] = value[0] - domains_weight_ratio[hostname] = value[1] - - # Summary stats - summary = {"full_load_time": test_results["full_load_time"], - "onload_event": test_results["onload_event"], - "start_render_time": test_results["start_render_time"], - "time_to_first_byte": test_results["time_to_first_byte"], - "total_dns_time": test_results["total_dns_time"], - "total_transfer_time": test_results["total_transfer_time"], - "total_server_time": test_results["total_server_time"], - "avg_connecting_time": test_results["avg_connecting_time"], - "avg_blocking_time": test_results["avg_blocking_time"], - "total_size": test_results["total_size"], - "text_size": test_results["text_size"], - "media_size": test_results["media_size"], - "cache_size": test_results["cache_size"], - "requests": test_results["requests"], - "redirects": test_results["redirects"], - "bad_requests": test_results["bad_requests"], - "domains": test_results["domains"]} - - # Page Speed Scores - scores = dict() - for rule, score in test_results["ps_scores"].items(): - scores[rule] = score - - # Data for HAR Viewer - har_id = str(test_results["_id"]) - - filename = os.path.join(config["app_conf"]["temp_store"], har_id) - with open(filename, "w") as fh: - fh.write(test_results["har"].encode("utf-8")) - - # Final JSON - return json.dumps({"summary": summary, - "pagespeed": scores, - "weights": test_results["weights_ratio"], - "requests": test_results["requests_ratio"], - "d_weights": domains_weight_ratio, - "d_requests": domains_req_ratio, - "har": har_id}) - - @restrict("GET") - def harviewer(self): - """HAR Viewer iframe""" - - # HAR Viewer customization via cookie - response.set_cookie("phaseInterval", "-1", max_age=365 * 24 * 3600) - - return render("/harviewer.html") - - @restrict("GET") - def deleterun(self): - """Controller for deletion of tests""" - - # MongoDB handler - mdb_handler = MongoDB() - - # Parameters from GET request - label = request.GET["label"] - timestamp = request.GET["timestamp"] - mode = request.GET["mode"] - - if request.GET["all"] == "true": - del_all = True - else: - del_all = False - - # Remove document from collection - if mode == "label": - if del_all: - mdb_handler.collection.remove({"label": label}) - else: - mdb_handler.collection.remove({"label": label, - "timestamp": timestamp}) - count = mdb_handler.collection.find({"label": label}).count() - else: - if del_all: - mdb_handler.collection.remove({"url": label}) - else: - mdb_handler.collection.remove({"url": label, - "timestamp": timestamp}) - count = mdb_handler.collection.find({"url": label}).count() - - if count: - return "details?" + mode + "=" + label - else: - return "/" - - def upload_rest(function): - @functools.wraps(function) - def wrapper(*args): - result, ext = function(*args) - - if result: - try: - if request.headers["automated"] == "true": - return "Successful" - except KeyError: - redirect(h.url_for('/results/details') + "?label=" + ext) - else: - try: - if request.headers["automated"] == "true": - return ext - except KeyError: - c.error = ext - return render("/upload.html") - - return wrapper - - @restrict("POST") - @upload_rest - def upload(self): - """Controller for uploads of new test results""" - - # HAR initialization - try: - har = HAR(request.POST["file"].value) - except: - har = HAR(request.POST["file"]) - - # Analysis of uploaded data - if har.parsing_status == "Successful": - # Parsing imported HAR file - try: - har.analyze() - except Exception as error: - return False, ": ".join([type(error).__name__, error.message]) - - # Evaluate Page Speed scores - if config["app_conf"]["ps_enabled"] == "true": - scores = self._get_pagespeed_scores(har.har) - else: - scores = dict([("Total Score", 100)]) - - # Add document to collection - timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) - - result = {"label": har.label, - "url": har.url, - "timestamp": timestamp, - "full_load_time": har.full_load_time, - "onload_event": har.onload_event, - "start_render_time": har.start_render_time, - "time_to_first_byte": har.time_to_first_byte, - "total_dns_time": har.total_dns_time, - "total_transfer_time": har.total_transfer_time, - "total_server_time": har.total_server_time, - "avg_connecting_time": har.avg_connecting_time, - "avg_blocking_time": har.avg_blocking_time, - "total_size": har.total_size, - "text_size": har.text_size, - "media_size": har.media_size, - "cache_size": har.cache_size, - "requests": har.requests, - "redirects": har.redirects, - "bad_requests": har.bad_requests, - "domains": len(har.domains), - "ps_scores": scores, - "har": har.origin, - "weights_ratio": har.weight_ratio(), - "requests_ratio": har.req_ratio(), - "domains_ratio": har.domains} - - # MongoDB handler - mdb_handler = MongoDB() - if hasattr(c, "message"): - return False, c.message - else: - mdb_handler.collection.insert(result) - - return True, har.label - else: - return False, har.parsing_status - - def _get_pagespeed_scores(self, har): - #Store HAR for Page Speed binary - hashname = hashlib.md5().hexdigest() - temp_store = config["app_conf"]["temp_store"] - filename = os.path.join(temp_store, hashname) - - with open(filename, "w") as fh: - fh.write(json.dumps(har)) - - # STDOUT,STDERR - os_type = platform.system() - - if os_type == "Linux": - std_out = " > /dev/null 2>&1" - elif os_type == "Windows": - std_out = " > NUL 2>&1" - else: - std_out = "" - - # Run pagespeed_bin - bin_store = config["app_conf"]["bin_store"] - pagespeed_bin = os.path.join(bin_store, "pagespeed_bin") - - outfile = filename + ".out" - - os.system(pagespeed_bin + - " -input_file " + filename + - " -output_format formatted_json" + - " -output_file " + outfile + - std_out) - - # Output report (JSON) - with open(outfile, "r") as fh: - output = json.loads(fh.read()) - - # Final scores - scores = dict() - scores["Total Score"] = int(output["score"]) - for rule in output["rule_results"]: - scores[rule["localized_rule_name"]] = int(rule["rule_score"]) - - return scores - - @restrict("GET") - def download(self): - """Return serialized HAR file""" - - # Parameters from GET request - har_id = request.GET["id"] - - # Read HAR file from disk - filename = os.path.join(config["app_conf"]["temp_store"], har_id) - with open(filename, "r") as fh: - data = fh.read() - - # JSON to JSON-P - data = "onInputData(" + data + ");" - - # Add content type header - response.content_type = mimetypes.guess_type(filename)[0] or \ - "text/plain" - - return data diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py deleted file mode 100644 index 95ecb89..0000000 --- a/harstorage/controllers/superposed.py +++ /dev/null @@ -1,224 +0,0 @@ -from pylons import request, tmpl_context as c -from pylons import config -from pylons.decorators.rest import restrict - -from harstorage.lib.base import BaseController, render -from harstorage.lib.MongoHandler import MongoDB -from harstorage.lib.Math import Histogram, Aggregator - - -class SuperposedController(BaseController): - - """ - Interface for aggregation and comparison of test results - - """ - - def __before__(self): - """Define version of static content""" - - c.rev = config["app_conf"]["static_version"] - - @restrict("GET") - def create(self): - """Render form with list of labels and timestamps""" - - # MongoDB handler - md_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") - - # List of labels - c.labels = list() - - for label in md_handler.collection.distinct("label"): - c.labels.append(label) - - return render("/create/core.html") - - @restrict("GET") - def dates(self): - """Return a list of timestamps for selected label""" - - # Read label from GET request - label = request.GET["label"] - - # Read data from database - documents = MongoDB().collection.find( - {"label": label}, - fields=["timestamp"], - sort=[("timestamp", 1)]) - - dates = str() - for document in documents: - dates += document["timestamp"] + ";" - - return dates[:-1] - - @restrict("GET") - def display(self): - """Render page with column chart and data table""" - - # MongoDB handler - md_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") - - # Checkbox options - c.chart_type = request.GET.get("chart", None) - c.table = request.GET.get("table", "false") - init = request.GET.get("metric", "true") - - c.chart = "true" if c.chart_type else "false" - - # Aggregation option - c.agg_type = request.GET.get("metric", "Average") - - # Number of records - if c.chart == "true" and c.table == "true" and init != "true": - c.rowcount = len(request.GET) / 3 - 1 - else: - c.rowcount = len(request.GET) / 3 - - # Data table - c.headers = ["Label", "Full Load Time (ms)", "Total Requests", - "Total Size (kB)", "Page Speed Score", - "onLoad Event (ms)", "Start Render Time (ms)", - "Time to First Byte (ms)", "Total DNS Time (ms)", - "Total Transfer Time (ms)", "Total Server Time (ms)", - "Avg. Connecting Time (ms)", "Avg. Blocking Time (ms)", - "Text Size (kB)", "Media Size (kB)", "Cache Size (kB)", - "Redirects", "Bad Rquests", "Domains"] - c.metrics_table = list() - c.metrics_table.append(list()) - - # Chart points - c.points = str() - - # Aggregator - aggregator = Aggregator() - - # Test results from database - for row_index in range(c.rowcount): - # Parameters from GET request - label = request.GET["step_" + str(row_index + 1) + "_label"] - start_ts = request.GET["step_" + str(row_index + 1) + "_start_ts"] - end_ts = request.GET["step_" + str(row_index + 1) + "_end_ts"] - - # Add label - c.metrics_table[0].append(label) - c.points += label + "#" - - # Fetch test results - condition = { - "label": label, - "timestamp": {"$gte": start_ts, "$lte": end_ts} - } - documents = md_handler.collection.find(condition, - fields=aggregator.METRICS) - - # Add data row to aggregator - aggregator.add_row(label, row_index, documents) - - # Aggregated data per column - column = 1 - for metric in aggregator.METRICS: - c.metrics_table.append(list()) - c.points = c.points[:-1] + ";" - - for row_index in range(c.rowcount): - data_list = aggregator.data[metric][row_index] - value = aggregator.get_aggregated_value(data_list, c.agg_type, - metric) - - c.points += str(value) + "#" - c.metrics_table[column].append(value) - - column += 1 - - # Names of series - titles = str() - for title in aggregator.TITLES: - titles += title + "#" - - # Final chart points - c.points = titles[:-1] + ";" + c.points[:-1] - c.points = aggregator.exclude_missing(c.points) - - return render("/display/core.html") - - def histogram(self): - """Render chart with histograms""" - - # MongoDB handler - md_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") - - # Options - c.label = request.GET["label"] - c.metric = request.GET["metric"] - - # Metrics - METRICS = [("full_load_time", "Full Load Time"), - ("onload_event", "onLoad Event"), - ("start_render_time", "Start Render Time"), - ("time_to_first_byte", "Time to First Byte"), - ("total_dns_time", "Total DNS Time"), - ("total_transfer_time", "Total Transfer Time"), - ("total_server_time", "Total Server Time"), - ("avg_connecting_time", "Avg. Connecting Time"), - ("avg_blocking_time", "Avg. Blocking Time")] - - time_metrics = ["full_load_time", "onload_event", "start_render_time", - "time_to_first_byte"] - - c.metrics = list() - - # Read data from database - condition = {"label": c.label} - fields = (metric for metric, title in METRICS) - documents = md_handler.collection.find(condition, fields=fields) - - full_data = list(document for document in documents) - - for metric, title in METRICS: - try: - data = (result[metric] for result in full_data) - histogram = Histogram(data) - - if metric in time_metrics: - ranges = histogram.ranges(True) - else: - ranges = histogram.ranges() - - frequencies = histogram.frequencies() - - if metric == c.metric: - c.data = "" - - for occ_range in ranges: - c.data += occ_range + "#" - - c.data = c.data[:-1] + ";" - - for frequency in frequencies: - c.data += str(frequency) + "#" - - c.data = c.data[:-1] + ";" - - c.title = title - - c.metrics.append((metric, title)) - except IndexError: - pass - except TypeError: - pass - except ValueError: - pass - - if len(c.metrics): - return render("/histogram/core.html") - else: - c.message = "Sorry! You haven't enough data." - return render("/error.html") diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py deleted file mode 100644 index 951532c..0000000 --- a/harstorage/lib/HAR.py +++ /dev/null @@ -1,487 +0,0 @@ -import json -import time -import re - -DATE_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" - - -class Bytes(float): - - """ - Extended integer - """ - - def __add__(self, other): - """ - @return - result of addition - """ - return Bytes(self.__float__() + other) - - def to_kilobytes(self): - """ - @return - value in kilobytes - """ - return int(round(self.__float__() / 1024.0)) - - -class Headers(): - - """ - Manipulation with HTTP headers - """ - - def __init__(self, headers): - """ - @parameter headers - list of headers - - @as_dictionary - dictionary of headers - """ - self.as_dict = dict() - for header in headers: - self.as_dict[header["name"]] = header["value"] - - -class Fixer(): - - """ - Fix issues with broken HAR format - """ - - @staticmethod - def apply_workaround_for_httpwatch(har): - """HttpWatch workaround""" - - return har.decode("latin-1").encode("utf-8") - - @staticmethod - def apply_workaround_for_fiddler(har): - """Fiddler workaround""" - - har = har.partition("{")[1] + har.partition("{")[-1] - - return re.sub('"pages":null', - '"pages":[{\ - "startedDateTime": "1970-01-01T00:00:00.000+00:00",\ - "id": "Undefined","title": "Undefined",\ - "pageTimings": {}}]', - har) - - @staticmethod - def apply_workaround_for_charles(har): - """Charles Proxy workaround""" - - return re.sub('"log":{', - '"log": {"pages": [{\ - "startedDateTime": "1970-01-01T00:00:00.000+00:00",\ - "id": "Undefined","title": "Undefined",\ - "pageTimings": {}}],', - har) - - @staticmethod - def fix_har(har): - """Choose workaround and apply it""" - - if har.rfind('"name" : "HttpWatch') > 0: - har = Fixer().apply_workaround_for_httpwatch(har) - elif har.rfind('"name":"Fiddler"') > 0: - har = Fixer().apply_workaround_for_fiddler(har) - elif har.rfind('"name":"Charles Proxy"') > 0: - har = Fixer().apply_workaround_for_charles(har) - - return har - - @staticmethod - def fix_pagespeed(har): - """ - Page Speed requires strict date format for every entry and every page. - Therefor original dates must be modified - """ - - # Entry level - for entry in har["log"]["entries"]: - if entry["startedDateTime"].rfind("+") != -1: - start_ts = entry["startedDateTime"].replace("+", "-") - entry["startedDateTime"] = start_ts - - long_time, dot, seconds = entry["startedDateTime"].partition(".") - milliseconds, dash, timezone = seconds.partition("-") - milliseconds = milliseconds.replace("Z", "") - - entry["startedDateTime"] = long_time + dot + milliseconds + "+00:00" - - # Page level - for page in har["log"]["pages"]: - if page["startedDateTime"].rfind("+") != -1: - start_ts = page["startedDateTime"].replace("+", "-") - page["startedDateTime"] = start_ts - - long_time, dot, seconds = page["startedDateTime"].partition(".") - milliseconds, dash, timezone = seconds.partition("-") - milliseconds = milliseconds.replace("Z", "") - - page["startedDateTime"] = long_time + dot + milliseconds + "+00:00" - - return har - - -class HAR(): - - """ - HAR Parser - """ - - def __init__(self, har, fixed=False): - """Deserialize HAR file and initialize variables""" - - # Check file size. If size is null it breaks parsing and return - # error status - if len(har) == 0: - self.parsing_status = "Empty file" - else: - try: - if not fixed: - # Unfortunately Fidler and Charles Proxy do not - # strictly follow HAR 1.2 specification. HttpWatch uses - # weird encoding. Trying to fix that when first time meet - # the file. - har = Fixer.fix_har(har) - - # Deserialize HAR file, fix issues related to Page Speed and - # store original file for HAR Viewer - self.har = json.loads(har) - self.har = Fixer.fix_pagespeed(self.har) - self.origin = har - - # Initial varaibles and counters - self.init_variables() - - self.parsing_status = "Successful" - - except Exception as error: - self.parsing_status = "{0}: {1}".format(type(error).__name__, - error.message) - - def init_variables(self): - self.full_load_time = 0 - - self.total_dns_time = 0.0 - self.total_transfer_time = 0.0 - self.total_server_time = 0.0 - self.avg_connecting_time = 0.0 - self.avg_blocking_time = 0.0 - - self.total_size = Bytes(0) - self.text_size = Bytes(0) - self.media_size = Bytes(0) - self.cache_size = Bytes(0) - - self.redirects = 0 - self.bad_requests = 0 - - self.domains = dict() - - def analyze(self): - """Extract data from HAR container""" - - # Temporary extremes - self.min_timestamp = 10 ** 14 - self.max_timestamp = 0 - - # Parse each entry of page - for self.entry in self.har["log"]["entries"]: - # Micro timgings - self.total_dns_time += self.get_dns_time() - self.total_transfer_time += self.get_transfer_time() - self.total_server_time += self.get_server_time() - self.avg_connecting_time += self.get_connecting_time() - self.avg_blocking_time += self.get_blocking_time() - - # Update Request/Page time frame - self.update_timeframe() - - # Time to first byte - self.time_to_first_byte = self.get_time_to_first_byte() - - # Size of response body - self.total_size += self.get_response_size() - - # Size of text (JavaScript, CSS, HTML, XML, JSON, plain text) - # and media (images, flash) files - if self.is_text(): - self.text_size += self.get_response_size() - elif self.is_media(): - self.media_size += self.get_response_size() - - # Cached size - if self.is_long_term_cache(): - self.cache_size += self.get_response_size() - - # Redirects (3xx) and bad requests (4xx, 5xx) - if self.is_redirect(): - self.redirects += 1 - elif self.is_bad_request(): - self.bad_requests += 1 - - # Update domain info - self.update_domain_info() - - # Label - self.label = self.get_label() - - # URL - self.url = self.get_url() - - # Requests - self.requests = self.get_number_of_requests() - - # Full load time - self.full_load_time = self.get_full_load_time() - - # onLoad envent time - self.onload_event = self.get_onload_event() - - # Render Start - self.start_render_time = self.get_start_render_time() - - # Average values - self.avg_connecting_time = self.get_avg_connecting_time() - self.avg_blocking_time = self.get_avg_blocking_time() - - # From bytes to kilobytes - self.total_size = self.total_size.to_kilobytes() - self.text_size = self.text_size.to_kilobytes() - self.media_size = self.media_size.to_kilobytes() - self.cache_size = self.cache_size.to_kilobytes() - - def weight_ratio(self): - """Breakdown by size of page objects""" - - resources = dict() - for entry in self.har["log"]["entries"]: - mime_type = \ - entry["response"]["content"]["mimeType"].partition(";")[0] - if cmp(mime_type, ""): - mime_type = self.get_normalized_value(mime_type) - size = Bytes(entry["response"]["content"]["size"]) - resources[mime_type] = resources.get(mime_type, 0) + \ - size.to_kilobytes() - return resources - - def req_ratio(self): - """Breakdown by number of page objects""" - - resources = dict() - for entry in self.har["log"]["entries"]: - mime_type = \ - entry["response"]["content"]["mimeType"].partition(";")[0] - if cmp(mime_type, ""): - mime_type = self.get_normalized_value(mime_type) - resources[mime_type] = resources.get(mime_type, 0) + 1 - return resources - - def get_normalized_value(self, string): - """ - @parameter string - MIME type - - @return - normilized MIME type - """ - - if string.count("javascript"): - return "javascript" - elif string.count("flash"): - return "flash" - elif string.count("text/plain") or string.count("html"): - return "text/html" - elif string.count("xml"): - return "text/xml" - elif string.count("css"): - return "text/css" - elif string.count("gif"): - return "image/gif" - elif string.count("png"): - return "image/png" - elif string.count("jpeg") or string.count("jpg"): - return "image/jpeg" - elif string.count("json"): - return "json" - else: - return "other" - - def get_dns_time(self): - dns_time = self.entry["timings"]["dns"] - return max(dns_time, 0) - - def get_transfer_time(self): - receive_time = max(self.entry["timings"]["receive"], 0) - send_time = max(self.entry["timings"]["send"], 0) - return receive_time + send_time - - def get_send_time(self): - send_time = self.entry["timings"]["send"] - return max(send_time, 0) - - def get_server_time(self): - server_time = self.entry["timings"]["wait"] - return max(server_time, 0) - - def get_connecting_time(self): - connecting_time = self.entry["timings"]["connect"] - return max(connecting_time, 0) - - def get_blocking_time(self): - blocking_time = self.entry["timings"]["blocked"] - return max(blocking_time, 0) - - def update_timeframe(self): - # Original time format: 2000-01-01T00:00:00.000+00:00 - seconds, dot, milliseconds = \ - self.entry["startedDateTime"].partition(".") - seconds = time.strptime(seconds, "%Y-%m-%dT%H:%M:%S") - seconds = time.mktime(seconds) - - # Exclude timezone - try: - milliseconds = milliseconds.partition("+")[0] - except: - milliseconds = milliseconds.partition("-")[0] - milliseconds = milliseconds.replace("Z", "") - - time_request_started = seconds + float("0." + milliseconds) - time_request_completed = time_request_started + \ - self.entry["time"] / 1000.0 - - if time_request_completed > self.max_timestamp: - self.max_timestamp = time_request_completed - - if time_request_started < self.min_timestamp: - self.min_timestamp = time_request_started - self.is_first = True - else: - self.is_first = False - - def get_time_to_first_byte(self): - if self.is_first: - return self.get_blocking_time() + \ - self.get_dns_time() + \ - self.get_connecting_time() + \ - self.get_send_time() + \ - self.get_server_time() - else: - return self.time_to_first_byte - - def get_response_size(self): - compressed_size = Bytes(max(self.entry["response"]["bodySize"], 0)) - if compressed_size == 0: - return Bytes(self.entry["response"]["content"]["size"]) - else: - return compressed_size - - def is_text(self): - mime_type = \ - self.entry["response"]["content"]["mimeType"].partition(";")[0] - if cmp(mime_type, ""): - mime_type = self.get_normalized_value(mime_type) - - if mime_type.count("javascript") \ - or mime_type.count("text") \ - or mime_type.count("html") \ - or mime_type.count("xml") \ - or mime_type.count("json"): - return True - return False - - def is_media(self): - mime_type = \ - self.entry["response"]["content"]["mimeType"].partition(";")[0] - - if cmp(mime_type, ""): - mime_type = self.get_normalized_value(mime_type) - if mime_type.count("flash") or mime_type.count("image"): - return True - return False - - def is_long_term_cache(self): - headers = Headers(self.entry["response"]["headers"]) - - try: - cache_control = headers.as_dict["Cache-Control"] - - if not cache_control.count("no-cache") \ - and not cache_control.count("max-age=0"): - # Extract DATE from HTTP header - date = headers.as_dict["Date"] - date = time.strptime(date, DATE_FORMAT) - date = time.mktime(date) - - # Extract EXPIRES from HTTP header - expires = headers.as_dict["Expires"] - expires = time.strptime(expires, DATE_FORMAT) - expires = time.mktime(expires) - - if expires > date: - return True - except: - pass - return False - - def is_redirect(self): - if 300 <= self.entry["response"]["status"] < 400: - return True - - def is_bad_request(self): - if self.entry["response"]["status"] >= 400: - return True - - def get_label(self): - return self.har["log"]["pages"][0]["id"] - - def get_url(self): - return self.har["log"]["entries"][0]["request"]["url"][:512] - - def get_number_of_requests(self): - return len(self.har["log"]["entries"]) - - def get_full_load_time(self): - try: - return self.har["log"]["pages"][0]["pageTimings"]["_myTime"] - except: - return int((self.max_timestamp - self.min_timestamp) * 1000) - - def get_onload_event(self): - try: - onload_event = self.har["log"]["pages"][0]["pageTimings"]["onLoad"] - if onload_event > 0: - return onload_event - except TypeError: # dynaTrace bug - return self.har["log"]["pages"][0]["pageTimings"][0]["onLoad"] - except KeyError: - pass - return "n/a" - - def get_start_render_time(self): - try: - return self.har["log"]["pages"][0]["pageTimings"]["_renderStart"] - except: - return "n/a" - - def get_avg_connecting_time(self): - return round(self.avg_connecting_time / self.requests, 0) - - def get_avg_blocking_time(self): - return round(self.avg_blocking_time / self.requests, 0) - - def update_domain_info(self): - domain = \ - self.entry["request"]["url"].partition("//")[-1].partition("/")[0] - - # WORKAROUND: Mongo prevents using dots in key names - mongo_domain = re.sub("\.", "|", domain) - - # {DOMAIN: [NUMBER OF REQUESTS, TOTAL DATA FROM HOST IN KB], ...} - domain_requests = self.domains.get(mongo_domain, [0, 0])[0] - domain_data_size = self.domains.get(mongo_domain, [0, 0])[1] - - domain_requests += 1 - domain_data_size += self.get_response_size().to_kilobytes() - - self.domains[mongo_domain] = [domain_requests, domain_data_size] diff --git a/harstorage/lib/Math.py b/harstorage/lib/Math.py deleted file mode 100644 index bbce245..0000000 --- a/harstorage/lib/Math.py +++ /dev/null @@ -1,226 +0,0 @@ -import math - - -class Aggregator(): - - """ - Test results aggregation - - """ - - def __init__(self): - - self.METRICS = ("full_load_time", "requests", "total_size", - "ps_scores", "onload_event", "start_render_time", - "time_to_first_byte", "total_dns_time", - "total_transfer_time", "total_server_time", - "avg_connecting_time", "avg_blocking_time", "text_size", - "media_size", "cache_size", "redirects", "bad_requests", - "domains") - - self.TITLES = ["Full Load Time", "Total Requests", "Total Size", - "Page Speed Score", "onLoad Event", "Start Render Time", - "Time to First Byte", "Total DNS Time", - "Total Transfer Time", "Total Server Time", - "Avg. Connecting Time", "Avg. Blocking Time", - "Text Size", "Media Size", "Cache Size", "Redirects", - "Bad Rquests", "Domains"] - - self.data = self.data_container() - - def data_container(self): - """Common data container""" - - data = dict() - for metric in self.METRICS: - data[metric] = list() - - data["label"] = list() - - return data - - def add_row(self, label, row_index, documents): - """Extract metrics from set of documents""" - - self.data["label"].append(row_index) - self.data["label"][row_index] = label - - for metric in self.METRICS: - self.data[metric].append(row_index) - self.data[metric][row_index] = list() - - for document in documents: - for metric in self.METRICS: - if metric != "ps_scores": - self.data[metric][row_index].append( - document[metric] - ) - else: - self.data[metric][row_index].append( - document[metric]["Total Score"] - ) - - def get_aggregated_value(self, list, agg_type, metric): - """Return aggregated value in accordance with context(metric)""" - - if agg_type == "Average": - return self.average(list) - elif agg_type == "Minimum": - return self.minimum(list) - elif agg_type == "Maximum": - return self.maximum(list) - elif agg_type == "90th Percentile": - return self.percentile(list, 0.9) - elif agg_type == "Median": - return self.percentile(list, 0.5) - - def exclude_missing(self, points): - """Remove points missing in all subsets""" - - index_oe = self.METRICS.index("onload_event") - index_srt = self.METRICS.index("start_render_time") - - onload_event = points.split(";")[index_oe + 2] - start_render_time = points.split(";")[index_srt + 2] - - number_of_values = onload_event.count("#") + 1 - broken_string = "#".join(["n/a"] * number_of_values) - - if onload_event == broken_string: - points = points.replace("onLoad Event#", "") - if start_render_time == broken_string: - points = points.replace("Start Render Time#", "") - - return points.replace(broken_string + ";", "") - - def average(self, results): - """ - @parameter results - a list of test results - - @return - the average value - """ - - try: - num = len(results) - total_sum = sum(results) - return int(round(total_sum / num, 0)) - except TypeError: - return "n/a" - - def minimum(self, results): - """ - @parameter results - a list of test results - - @return - the minimum value - """ - - return min(results) - - def maximum(self, results): - """ - @parameter results - a list of test results - - @return - the maximum value - """ - - return max(results) - - def percentile(self, results, percent, key=lambda x: x): - """ - @parameter results - a list of test results - @parameter percent - a float value from 0.0 to 1.0 - @parameter key - optional key function to compute value from each - element of N. - - @return - the percentile - """ - - data = sorted(results) - - k = (len(data) - 1) * percent - f = math.floor(k) - c = math.ceil(k) - - if f == c: - return key(data[int(k)]) - else: - try: - return key(data[int(f)]) * (c - k) + key(data[int(c)]) * (k - f) - except TypeError: - return "n/a" - - -class Histogram(): - - """ - Statistical histograms based on Sturges rule - - """ - - def __init__(self, data): - """ - Initialize histogram parameters - """ - - self.data = sorted(data) - self.size = len(self.data) - self.max_value = max(self.data) - self.min_value = min(self.data) - - if self.min_value != self.max_value: - self.classes = round(1.0 + 3.32 * math.log10(self.size)) - else: - self.classes = 1 - self.step = (self.max_value - self.min_value) / self.classes - - def ranges(self, reduced=False): - ranges = list() - - for klass in range(int(self.classes)): - range_l = int(self.min_value + self.step * klass) - range_r = int(self.min_value + self.step * (klass + 1)) - - if reduced: - try: - order = 1 + int(100 / self.step) - except: - order = 1 - - range_l = round(range_l / 1000.0, order) - range_r = round(range_r / 1000.0, order) - - ranges.append(str(range_l) + " - " + str(range_r)) - - return ranges - - def frequencies(self): - """ - Class (column) frequencies - """ - - frequencies = list() - - for index in range(int(self.classes)): - frequencies.append(0) - - step = self.min_value + self.step - - index = 0 - - for value in self.data: - if value <= step: - frequencies[index] += 1 - else: - while value > step + 1: - step += self.step - index += 1 - try: - frequencies[index + 1] += 1 - except: - frequencies[index] += 1 - - for index in range(int(self.classes)): - frequencies[index] = round(frequencies[index] * 100.0 / self.size, - 1) - - return frequencies diff --git a/harstorage/lib/MongoHandler.py b/harstorage/lib/MongoHandler.py deleted file mode 100644 index 97ce069..0000000 --- a/harstorage/lib/MongoHandler.py +++ /dev/null @@ -1,57 +0,0 @@ -import pymongo - -from pylons import config, tmpl_context as c - - -class MongoDB(): - - """ - Interface for MongoDB database - """ - - def __init__(self, collection="results"): - """Initilize connection and check indeces""" - - try: - # MongoDB URI - uri = self.make_uri() - - # Database - database = config["app_conf"]["mongo_db"] - - # Collection - # Updated the mongo client connection for the collection - # We could also use MongoReplicaSetClient for dealing with replica sets. - replicate = config["app_conf"]["mongo_replicate"] - - if replicate == "true": - self.collection = pymongo.MongoReplicaSetClient(host=uri,port=int(config["app_conf"]["mongo_port"]),replicaSet=(config["app_conf"]["mongo_replset"]))[database][collection] - else: - self.collection = pymongo.mongo_client.MongoClient(host=uri,port=int(config["app_conf"]["mongo_port"]))[database][collection] - - # Indecies - self.ensure_index() - except Exception as error: - # Exception type: Exception message - c.message = ": ".join([type(error).__name__, error.message]) - - def make_uri(self): - # Connection handler - host = config["app_conf"]["mongo_host"] - port = config["app_conf"]["mongo_port"] - auth = config["app_conf"]["mongo_auth"] - - uri = "mongodb://" - - if auth == "true": - user = config["app_conf"]["mongo_user"] - pswd = config["app_conf"]["mongo_pswd"] - uri += user + ":" + pswd + "@" - - return uri + host + ":" + port - - def ensure_index(self): - self.collection.ensure_index([("label", 1), ("timestamp", -1)]) - self.collection.ensure_index([("label", 1), ("timestamp", 1)]) - self.collection.ensure_index([("url", 1), ("timestamp", -1)]) - self.collection.ensure_index([("url", 1), ("timestamp", 1)]) diff --git a/harstorage/lib/__init__.py b/harstorage/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/lib/app_globals.py b/harstorage/lib/app_globals.py deleted file mode 100644 index d8f7860..0000000 --- a/harstorage/lib/app_globals.py +++ /dev/null @@ -1,18 +0,0 @@ -from beaker.cache import CacheManager -from beaker.util import parse_cache_config_options - - -class Globals(object): - - """Globals acts as a container for objects available throughout the - life of the application - - """ - - def __init__(self, config): - """One instance of Globals is created during application - initialization and is available during requests via the - 'app_globals' variable - - """ - self.cache = CacheManager(**parse_cache_config_options(config)) diff --git a/harstorage/lib/base.py b/harstorage/lib/base.py deleted file mode 100644 index 059159a..0000000 --- a/harstorage/lib/base.py +++ /dev/null @@ -1,22 +0,0 @@ -from pylons.controllers import WSGIController -from pylons.templating import render_mako as render - - -class BaseController(WSGIController): - - """ - The base Controller API - - Provides the BaseController class for subclassing. - """ - - def __call__(self, environ, start_response): - """Invoke the Controller""" - - # WSGIController.__call__ dispatches to the Controller method - # the request is routed to. This routing information is - # available in environ['pylons.routes_dict'] - try: - return WSGIController.__call__(self, environ, start_response) - finally: - None diff --git a/harstorage/lib/helpers.py b/harstorage/lib/helpers.py deleted file mode 100644 index 4b0dee3..0000000 --- a/harstorage/lib/helpers.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Helper functions""" - -from routes import url_for -from webhelpers.html.tags import * - - -def decode_uri(URI): - """Decode JavaScript encodeURIComponent""" - - return URI.replace("&", "&") diff --git a/harstorage/public/favicon.ico b/harstorage/public/favicon.ico deleted file mode 100644 index f57fd78e1e812e1643acd969b8f410d2765b03c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmbW0y-yQy7{`B=E5_Euv%C~*goY3SE2S@>4Yj0*+=+dmua<-k;^e9j9ooUg)v!t2 zATch6&5dA4G;zQ(IFOTtKR`QBV_OsR^?81^3C47&*L?1t`#zuV4Q)>d6Ma-w(Ag;- zC_?lKAw~#_C~4$$5rTF$YXf;tC%bABCX>lctkG?WI3&KbfOjQ!xnozmMW>}IWvA0@cAvFco?9(vV6|A%6+xWmC~j*wk}4ZB~em7AVqTmpjDXMMs}O zz;VHjtF9}E$70a6Im9FL$fX|c_ z<*&_HI_z?XyQ9NH#>nL%IQn`}EEc3!tCW%5_=ujZnuKT0_+W=!?r_&L<}${|T=cAd z6bp_1T~)&K6Ut!$~6gE$HD87U*|pc;@V+BWLQS7NTpZcoeC4k6bw4j<_%pQ^ZV)53ljQ{`u diff --git a/harstorage/public/images/add_button.png b/harstorage/public/images/add_button.png deleted file mode 100644 index a7d358082feefab5dd6204e92b0882762f655a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1284 zcmV+f1^fDmP)p#{_OhyjbV)MzRdiD-F9TkV^++kJF*yR$QMytCacTi8ZoV!X-C*?aG~=XdAa z|D0Kb|G44*4%pS2&T%|G$4Pn_iuz;W$&k=T3g4os^uwXDVf|kLcD1HTqM3WcKM~xg z56N>=LiuE&bYwINpcBT#JAj$v17>UDe#J+J4wsE6j|_OdB{hpn(CYoSYZtuzo?E^~cw^DK4PqqOCG8N@vUMyTM_1 zpf!Uhjswt0Ls^+m&)c^m%Mi78*FzxbPY`&40f~HL8ua$};^pDPWJwp+9b4r(9~bb- zH`a@(-o+IwmQ;eACQi@mx(YU>5K8P@!{e5&6W~j_4Lr|J`}oFHXuf(D#%(vhtzF|? z^$=iNlbo!E^m{AkZx?d&<{Fo1WIOz*nyz75=xHjkZwo&`OZN$I%fA563C8}g4})P( zPd_zx)v1ywX4by!a?Jo#e=V<&$ok!uk{XgE9>x_n=7}#5%Q=t+m}^}|4og88(C_{O zZjbzATsE>bx-rxOk1tI@c0j7Xatu^HP+nK%x;z80r9s~8NXl+_Y5D5#iA3FwtCHWR zDfM7DaMa#c)zrAQ<3q6I52Ju4y4Z06?s*2QYd1Pi%>Znwlh@6+&pT7GWMz0PX!Bro z$_MZ$?da9L5X!v*nZjad{k0AHh6mTzZg!rX0oZs5+`&b4)y|s_si^9RrF&Cl@d8;& zVhbX>J)KE32#P)l*^|4W)Ls+zyWI5^^e2D8E}5I&%kdn9R25F2@8~)G>O@XlnXdcH zvj3^&j=j$m7DU$~D$+4?Vkc8kO+-b4P_;T!jqYKz#$hdY=8AyAw$eJBnt!V4)PcJfMY2#;{QI<4VT(F)zCP% zrRi;Nb#0o0Xq^7VcItktZ9fy9_I( zp7u|a=6G@90Z=dlCZ-}LBx9mE1GgsUaGUK*g%XnulMIKThulLQ>i6z${giK%PAVP> z1jdLIUpQkF4`5U+X_hWVyJQ2av4?#ECYV)O53#PqSfdAHeybP*5@Lfzf=B0s$RVP_ uH%_TVAn`!adHqrTRp0{_Vj!_LZu=VqMK?Dw1{Ku+0000Px(4@pEpR5(v{Rah2DEX(5CdEQE5(1X-tA?T%E_@^5y))wTI_Uoa@rN2qT@!6-j}b zU1#@c{^``|ss3nxr~54;!M(h-yk1;C9Umctz+omsCly@az+Q+cin3y@WO_4W$H&@6 zaSJhUy;TNdOg zrLo=E=<(5j9)RXjy(HL?#F|qBaHFt(rtb_VvMQEM?Lw{4ZFIMZ1Re7jQj;Ccf(6_B z+k9>(rx?wkNXk3=oy}~(TSSNm@?BQTg-Su!bs1^rxo3>93;h=^e{xxb^GR;$`#*nR z0Va(0Jg>w`2nFESiU%qI<1_y?c^!A-vf6qtK^htx8WY~l{V_McHXjOvh(mZW6846@ z0ffJXX1X|$sfSgj`W|gajcsi^Ov0+Ha^r~-i*#cFosU)@If~@deSd_)(4YlfNEF(;KI00HNR;D+ZD!&%31DB#U0VN$6_ z>AC&&cXz(MGyBc#Xefh(@bf(xh`Fwt9nJy{5?;{Y`)YhT5lrw}B|KS}#3M;HIgmJs z+f+|#C^1A`+P>w<@%@C6m>!>oK=WBO2UgcUzh+3NPwqdjX(s2&xrOBgYu9@4`-7kV znHQZ?42VH^=8KtjC;6a_EdITC>z7;TiU_tKvl})_O4GDpFbHY^gW-l|T>bRw#g8wx z+sOV_yJ2nIn7grK@93(2ux$h85ie;buTNc1C)0bmY5KI6NWKyD_}=~XE*?(Rtva3~ z${04HN+L$&(npuBOk6qmgE+GJqb20FatKhZUW1R3U?kO@8aXi%G=iOmwAY6dwLL$G bIqK>?$JLpN0B@ym00000NkvXXu0mjfdO;K6 diff --git a/harstorage/public/images/pylons.png b/harstorage/public/images/pylons.png deleted file mode 100644 index 5463ef8cac9d26d23b849164a69b926618e00a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1098 zcmV-Q1hxB#P)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px(1W80eR7gv$R?TZ%RTTf-J9nm&EF$8BYNUylnlWk@76a*~)Ic$AY?PE}D~MKI zy0E%Y+JZti+WHTOXd}|PP(&28YDJK2{D2lLG$o}0%9`@bD6KAV{WewVBW)MY z9{>DU5S?h?ncdIlwGZzA`pq=uekwZulazu|n#$q5p!9(+j(u8Dqq}x%1ph8~-%7=} zg8Ybc@wApK>e1BXX(XiqF`;k>8NFZa938u#d((tRY~QNkmC~i7ROyTcEp9X}__3Hl z{JEvbSHm+R5m+43n6b_dOBrtFKtj;Efno@P$*OgWr<55s-iCZE_6jv{K1D8@!NbKK zZ0uW)_1$;i((E-%pTC5^re=^N9+}Lt-Xbz=g1iadrnDnCwMkkZaA#K@FF!Yg(UC2{ zx*U*L&?~T*;H&Tc#D||v;>uhFS>k^K#R6xPPmT3Xz*{zNX@=Kc+KL@R_aZ4>1WK)9 zPi^l(NB&V9IQ$C>+~y<-2SRMT3#@syD9uzM3_G^=V5pddy*?AsYz{@zwpQ`nVB3~% zoS6I<`CO*WjtUyad0T6&*7KBE^lwPfmAg!2Ld5b$JjH2OPE!u}{#OU7UmIquJPYp- zT5h-^&s=JP9WPvG!R zgD{I%p(row`#%oiRqi)WY|#__7JDM^0=sLegB2rj;8<%Exi&lY9Xg8BXD;B}ncuK! z;4!?htFJ24G+RW^O5tOS)j-+7FqSvCxpO4tQ>RYj$dM0FsZ?4z$`}JG6rCCj=vbh}Rm|V!ER5)7H z&n77^mQ{7`wA?kFF)fj<<;Am;gliP-@lr1sm)aA`>L+jW_oP}B&frvqAJn>BXD>g= z`~%QPaV=5bM5a3C2~O~;FT>6*vGsU=!Z2BpnPJNcnZ|42Ha#EwewQwOQx7P|%nruv zZXX|{aejc9l3_tP9JL+w+M);)AW%5b#alZUbdqM2~2N?8(TEeP? QfdBvi07*qoM6N<$f-%|n2$sVLmV|IeV1#@91}%xMG%A^37_7Z$q9XTVL*s!gnR{Sw2sBd zC}lc#T3cGe)YYr(DdK_ALgAau05hF~gC9hW9t9~B+BydvQY#c77mvf*-MinuT`W#K z2bd28!UCn4SB@PM{R0C4hJnn!P^{ZA*l3;WnRPdUfaRqn_Q%we&SbfLZ!VW_1}MsS zi=uqrd*TEmk_6ecHB`pN%&=GhE>?)J9x7;zn@(u6vmkYLBCXZfgDY2{TB*Fp0Y5YW zehLH*2Y2nd_VWJymWM^2^Bt#8*H2*X&ZW_ABvt*peBlCMI*s7-QCc2=FGO@Up#jXU}gq{-Me9BejZAx)WP9w_GS~{mte5J zMUobKMn@U)+)v3eDiag+aG1`UCvXW7;WOIwGN=z~P4^&vw5MF2-Ykq85T9?7NBtu2N>M?8RvuuFT`IsX zb>^+8{N9s>VSd*5{HdWz<%<{HQGeC5ewAnJX_6N` zmBVRs6#oVYb%$J4GL;)jU5I9SVT!R5-$ge=W2@%Sbw^)E2S{ve=AxqQ1hMT+FAb0){for(var a=0;a=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this); \ No newline at end of file diff --git a/harstorage/public/scripts/chosen.jquery.js b/harstorage/public/scripts/chosen.jquery.js deleted file mode 100644 index 956875c..0000000 --- a/harstorage/public/scripts/chosen.jquery.js +++ /dev/null @@ -1,796 +0,0 @@ -// Chosen, a Select Box Enhancer for jQuery and Protoype -// by Patrick Filler for Harvest, http://getharvest.com -// -// Version 0.9.1 -// Full source at https://github.com/harvesthq/chosen -// Copyright (c) 2011 Harvest http://getharvest.com - -// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -// This file is generated by `cake build`, do not edit it by hand. -(function() { - /* - Chosen source: generate output using 'cake build' - Copyright (c) 2011 by Harvest - */ var $, Chosen, get_side_border_padding, root; - var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; - root = this; - $ = jQuery; - $.fn.extend({ - chosen: function(data, options) { - if ($.browser === "msie" && ($.browser.version === "6.0" || $.browser.version === "7.0")) { - return this; - } - return $(this).each(function(input_field) { - if (!($(this)).hasClass("chzn-done")) { - return new Chosen(this, data, options); - } - }); - } - }); - Chosen = (function() { - function Chosen(elmn) { - this.set_default_values(); - this.form_field = elmn; - this.form_field_jq = $(this.form_field); - this.is_multiple = this.form_field.multiple; - this.is_rtl = this.form_field_jq.hasClass("chzn-rtl"); - this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option"; - this.set_up_html(); - this.register_observers(); - this.form_field_jq.addClass("chzn-done"); - } - Chosen.prototype.set_default_values = function() { - this.click_test_action = __bind(function(evt) { - return this.test_active_click(evt); - }, this); - this.active_field = false; - this.mouse_on_container = false; - this.results_showing = false; - this.result_highlighted = null; - this.result_single_selected = null; - return this.choices = 0; - }; - Chosen.prototype.set_up_html = function() { - var container_div, dd_top, dd_width, sf_width; - this.container_id = this.form_field.id.length ? this.form_field.id.replace(/(:|\.)/g, '_') : this.generate_field_id(); - this.container_id += "_chzn"; - this.f_width = this.form_field_jq.width(); - this.default_text = this.form_field_jq.data('placeholder') ? this.form_field_jq.data('placeholder') : this.default_text_default; - container_div = $("

", { - id: this.container_id, - "class": "chzn-container " + (this.is_rtl ? 'chzn-rtl' : ''), - style: 'width: ' + this.f_width + 'px;' - }); - if (this.is_multiple) { - container_div.html('
    '); - } else { - container_div.html('
    ' + this.default_text + '
      '); - } - this.form_field_jq.hide().after(container_div); - this.container = $('#' + this.container_id); - this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single")); - this.dropdown = this.container.find('div.chzn-drop').first(); - dd_top = this.container.height(); - dd_width = this.f_width - get_side_border_padding(this.dropdown); - this.dropdown.css({ - "width": dd_width + "px", - "top": dd_top + "px" - }); - this.search_field = this.container.find('input').first(); - this.search_results = this.container.find('ul.chzn-results').first(); - this.search_field_scale(); - this.search_no_results = this.container.find('li.no-results').first(); - if (this.is_multiple) { - this.search_choices = this.container.find('ul.chzn-choices').first(); - this.search_container = this.container.find('li.search-field').first(); - } else { - this.search_container = this.container.find('div.chzn-search').first(); - this.selected_item = this.container.find('.chzn-single').first(); - sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field); - this.search_field.css({ - "width": sf_width + "px" - }); - } - this.results_build(); - return this.set_tab_index(); - }; - Chosen.prototype.register_observers = function() { - this.container.mousedown(__bind(function(evt) { - return this.container_mousedown(evt); - }, this)); - this.container.mouseenter(__bind(function(evt) { - return this.mouse_enter(evt); - }, this)); - this.container.mouseleave(__bind(function(evt) { - return this.mouse_leave(evt); - }, this)); - this.search_results.mouseup(__bind(function(evt) { - return this.search_results_mouseup(evt); - }, this)); - this.search_results.mouseover(__bind(function(evt) { - return this.search_results_mouseover(evt); - }, this)); - this.search_results.mouseout(__bind(function(evt) { - return this.search_results_mouseout(evt); - }, this)); - this.form_field_jq.bind("liszt:updated", __bind(function(evt) { - return this.results_update_field(evt); - }, this)); - this.search_field.blur(__bind(function(evt) { - return this.input_blur(evt); - }, this)); - this.search_field.keyup(__bind(function(evt) { - return this.keyup_checker(evt); - }, this)); - this.search_field.keydown(__bind(function(evt) { - return this.keydown_checker(evt); - }, this)); - if (this.is_multiple) { - this.search_choices.click(__bind(function(evt) { - return this.choices_click(evt); - }, this)); - return this.search_field.focus(__bind(function(evt) { - return this.input_focus(evt); - }, this)); - } else { - return this.selected_item.focus(__bind(function(evt) { - return this.activate_field(evt); - }, this)); - } - }; - Chosen.prototype.container_mousedown = function(evt) { - if (evt && evt.type === "mousedown") { - evt.stopPropagation(); - } - if (!this.pending_destroy_click) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.val(""); - } - $(document).click(this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) { - evt.preventDefault(); - this.results_toggle(); - } - return this.activate_field(); - } else { - return this.pending_destroy_click = false; - } - }; - Chosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - Chosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - Chosen.prototype.input_focus = function(evt) { - if (!this.active_field) { - return setTimeout((__bind(function() { - return this.container_mousedown(); - }, this)), 50); - } - }; - Chosen.prototype.input_blur = function(evt) { - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout((__bind(function() { - return this.blur_test(); - }, this)), 100); - } - }; - Chosen.prototype.blur_test = function(evt) { - if (!this.active_field && this.container.hasClass("chzn-container-active")) { - return this.close_field(); - } - }; - Chosen.prototype.close_field = function() { - $(document).unbind("click", this.click_test_action); - if (!this.is_multiple) { - this.selected_item.attr("tabindex", this.search_field.attr("tabindex")); - this.search_field.attr("tabindex", -1); - } - this.active_field = false; - this.results_hide(); - this.container.removeClass("chzn-container-active"); - this.winnow_results_clear(); - this.clear_backstroke(); - this.show_search_field_default(); - return this.search_field_scale(); - }; - Chosen.prototype.activate_field = function() { - if (!this.is_multiple && !this.active_field) { - this.search_field.attr("tabindex", this.selected_item.attr("tabindex")); - this.selected_item.attr("tabindex", -1); - } - this.container.addClass("chzn-container-active"); - this.active_field = true; - this.search_field.val(this.search_field.val()); - return this.search_field.focus(); - }; - Chosen.prototype.test_active_click = function(evt) { - if ($(evt.target).parents('#' + this.container_id).length) { - return this.active_field = true; - } else { - return this.close_field(); - } - }; - Chosen.prototype.results_build = function() { - var content, data, startTime, _i, _len, _ref; - startTime = new Date(); - this.parsing = true; - this.results_data = root.SelectParser.select_to_array(this.form_field); - if (this.is_multiple && this.choices > 0) { - this.search_choices.find("li.search-choice").remove(); - this.choices = 0; - } else if (!this.is_multiple) { - this.selected_item.find("span").text(this.default_text); - } - content = ''; - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - data = _ref[_i]; - if (data.group) { - content += this.result_add_group(data); - } else if (!data.empty) { - content += this.result_add_option(data); - if (data.selected && this.is_multiple) { - this.choice_build(data); - } else if (data.selected && !this.is_multiple) { - this.selected_item.find("span").text(data.text); - } - } - } - this.show_search_field_default(); - this.search_field_scale(); - this.search_results.html(content); - return this.parsing = false; - }; - Chosen.prototype.result_add_group = function(group) { - if (!group.disabled) { - group.dom_id = this.container_id + "_g_" + group.array_index; - return '
    • ' + $("
      ").text(group.label).html() + '
    • '; - } else { - return ""; - } - }; - Chosen.prototype.result_add_option = function(option) { - var classes; - if (!option.disabled) { - option.dom_id = this.container_id + "_o_" + option.array_index; - classes = option.selected && this.is_multiple ? [] : ["active-result"]; - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - return '
    • ' + option.html + '
    • '; - } else { - return ""; - } - }; - Chosen.prototype.results_update_field = function() { - this.result_clear_highlight(); - this.result_single_selected = null; - return this.results_build(); - }; - Chosen.prototype.result_do_highlight = function(el) { - var high_bottom, high_top, maxHeight, visible_bottom, visible_top; - if (el.length) { - this.result_clear_highlight(); - this.result_highlight = el; - this.result_highlight.addClass("highlighted"); - maxHeight = parseInt(this.search_results.css("maxHeight"), 10); - visible_top = this.search_results.scrollTop(); - visible_bottom = maxHeight + visible_top; - high_top = this.result_highlight.position().top + this.search_results.scrollTop(); - high_bottom = high_top + this.result_highlight.outerHeight(); - if (high_bottom >= visible_bottom) { - return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); - } else if (high_top < visible_top) { - return this.search_results.scrollTop(high_top); - } - } - }; - Chosen.prototype.result_clear_highlight = function() { - if (this.result_highlight) { - this.result_highlight.removeClass("highlighted"); - } - return this.result_highlight = null; - }; - Chosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; - Chosen.prototype.results_show = function() { - var dd_top; - if (!this.is_multiple) { - this.selected_item.addClass("chzn-single-with-drop"); - if (this.result_single_selected) { - this.result_do_highlight(this.result_single_selected); - } - } - dd_top = this.is_multiple ? this.container.height() : this.container.height() - 1; - this.dropdown.css({ - "top": dd_top + "px", - "left": 0 - }); - this.results_showing = true; - this.search_field.focus(); - this.search_field.val(this.search_field.val()); - return this.winnow_results(); - }; - Chosen.prototype.results_hide = function() { - if (!this.is_multiple) { - this.selected_item.removeClass("chzn-single-with-drop"); - } - this.result_clear_highlight(); - this.dropdown.css({ - "left": "-9000px" - }); - return this.results_showing = false; - }; - Chosen.prototype.set_tab_index = function(el) { - var ti; - if (this.form_field_jq.attr("tabindex")) { - ti = this.form_field_jq.attr("tabindex"); - this.form_field_jq.attr("tabindex", -1); - if (this.is_multiple) { - return this.search_field.attr("tabindex", ti); - } else { - this.selected_item.attr("tabindex", ti); - return this.search_field.attr("tabindex", -1); - } - } - }; - Chosen.prototype.show_search_field_default = function() { - if (this.is_multiple && this.choices < 1 && !this.active_field) { - this.search_field.val(this.default_text); - return this.search_field.addClass("default"); - } else { - this.search_field.val(""); - return this.search_field.removeClass("default"); - } - }; - Chosen.prototype.search_results_mouseup = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target.length) { - this.result_highlight = target; - return this.result_select(evt); - } - }; - Chosen.prototype.search_results_mouseover = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target) { - return this.result_do_highlight(target); - } - }; - Chosen.prototype.search_results_mouseout = function(evt) { - if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { - return this.result_clear_highlight(); - } - }; - Chosen.prototype.choices_click = function(evt) { - evt.preventDefault(); - if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) { - return this.results_show(); - } - }; - Chosen.prototype.choice_build = function(item) { - var choice_id, link; - choice_id = this.container_id + "_c_" + item.array_index; - this.choices += 1; - this.search_container.before('
    • ' + item.html + '
    • '); - link = $('#' + choice_id).find("a").first(); - return link.click(__bind(function(evt) { - return this.choice_destroy_link_click(evt); - }, this)); - }; - Chosen.prototype.choice_destroy_link_click = function(evt) { - evt.preventDefault(); - this.pending_destroy_click = true; - return this.choice_destroy($(evt.target)); - }; - Chosen.prototype.choice_destroy = function(link) { - this.choices -= 1; - this.show_search_field_default(); - if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) { - this.results_hide(); - } - this.result_deselect(link.attr("rel")); - return link.parents('li').first().remove(); - }; - Chosen.prototype.result_select = function(evt) { - var high, high_id, item, position; - if (this.result_highlight) { - high = this.result_highlight; - high_id = high.attr("id"); - this.result_clear_highlight(); - high.addClass("result-selected"); - if (this.is_multiple) { - this.result_deactivate(high); - } else { - this.result_single_selected = high; - } - position = high_id.substr(high_id.lastIndexOf("_") + 1); - item = this.results_data[position]; - item.selected = true; - this.form_field.options[item.options_index].selected = true; - if (this.is_multiple) { - this.choice_build(item); - } else { - this.selected_item.find("span").first().text(item.text); - } - if (!(evt.metaKey && this.is_multiple)) { - this.results_hide(); - } - this.search_field.val(""); - this.form_field_jq.trigger("change"); - return this.search_field_scale(); - } - }; - Chosen.prototype.result_activate = function(el) { - return el.addClass("active-result").show(); - }; - Chosen.prototype.result_deactivate = function(el) { - return el.removeClass("active-result").hide(); - }; - Chosen.prototype.result_deselect = function(pos) { - var result, result_data; - result_data = this.results_data[pos]; - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - result = $("#" + this.container_id + "_o_" + pos); - result.removeClass("result-selected").addClass("active-result").show(); - this.result_clear_highlight(); - this.winnow_results(); - this.form_field_jq.trigger("change"); - return this.search_field_scale(); - }; - Chosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); - } - }; - Chosen.prototype.winnow_results = function() { - var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; - startTime = new Date(); - this.no_results_clear(); - results = 0; - searchText = this.search_field.val() === this.default_text ? "" : $('
      ').text($.trim(this.search_field.val())).html(); - regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); - zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - if (!option.disabled && !option.empty) { - if (option.group) { - $('#' + option.dom_id).hide(); - } else if (!(this.is_multiple && option.selected)) { - found = false; - result_id = option.dom_id; - if (regex.test(option.html)) { - found = true; - results += 1; - } else if (option.html.indexOf(" ") >= 0 || option.html.indexOf("[") === 0) { - parts = option.html.replace(/\[|\]/g, "").split(" "); - if (parts.length) { - for (_j = 0, _len2 = parts.length; _j < _len2; _j++) { - part = parts[_j]; - if (regex.test(part)) { - found = true; - results += 1; - } - } - } - } - if (found) { - if (searchText.length) { - startpos = option.html.search(zregex); - text = option.html.substr(0, startpos + searchText.length) + '' + option.html.substr(startpos + searchText.length); - text = text.substr(0, startpos) + '' + text.substr(startpos); - } else { - text = option.html; - } - if ($("#" + result_id).html !== text) { - $("#" + result_id).html(text); - } - this.result_activate($("#" + result_id)); - if (option.group_array_index != null) { - $("#" + this.results_data[option.group_array_index].dom_id).show(); - } - } else { - if (this.result_highlight && result_id === this.result_highlight.attr('id')) { - this.result_clear_highlight(); - } - this.result_deactivate($("#" + result_id)); - } - } - } - } - if (results < 1 && searchText.length) { - return this.no_results(searchText); - } else { - return this.winnow_results_set_highlight(); - } - }; - Chosen.prototype.winnow_results_clear = function() { - var li, lis, _i, _len, _results; - this.search_field.val(""); - lis = this.search_results.find("li"); - _results = []; - for (_i = 0, _len = lis.length; _i < _len; _i++) { - li = lis[_i]; - li = $(li); - _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0); - } - return _results; - }; - Chosen.prototype.winnow_results_set_highlight = function() { - var do_high, selected_results; - if (!this.result_highlight) { - selected_results = !this.is_multiple ? this.search_results.find(".result-selected") : []; - do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); - if (do_high != null) { - return this.result_do_highlight(do_high); - } - } - }; - Chosen.prototype.no_results = function(terms) { - var no_results_html; - no_results_html = $('
    • No results match ""
    • '); - no_results_html.find("span").first().html(terms); - return this.search_results.append(no_results_html); - }; - Chosen.prototype.no_results_clear = function() { - return this.search_results.find(".no-results").remove(); - }; - Chosen.prototype.keydown_arrow = function() { - var first_active, next_sib; - if (!this.result_highlight) { - first_active = this.search_results.find("li.active-result").first(); - if (first_active) { - this.result_do_highlight($(first_active)); - } - } else if (this.results_showing) { - next_sib = this.result_highlight.nextAll("li.active-result").first(); - if (next_sib) { - this.result_do_highlight(next_sib); - } - } - if (!this.results_showing) { - return this.results_show(); - } - }; - Chosen.prototype.keyup_arrow = function() { - var prev_sibs; - if (!this.results_showing && !this.is_multiple) { - return this.results_show(); - } else if (this.result_highlight) { - prev_sibs = this.result_highlight.prevAll("li.active-result"); - if (prev_sibs.length) { - return this.result_do_highlight(prev_sibs.first()); - } else { - if (this.choices > 0) { - this.results_hide(); - } - return this.result_clear_highlight(); - } - } - }; - Chosen.prototype.keydown_backstroke = function() { - if (this.pending_backstroke) { - this.choice_destroy(this.pending_backstroke.find("a").first()); - return this.clear_backstroke(); - } else { - this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); - return this.pending_backstroke.addClass("search-choice-focus"); - } - }; - Chosen.prototype.clear_backstroke = function() { - if (this.pending_backstroke) { - this.pending_backstroke.removeClass("search-choice-focus"); - } - return this.pending_backstroke = null; - }; - Chosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(evt); - } - break; - case 27: - if (this.results_showing) { - return this.results_hide(); - } - break; - case 9: - case 38: - case 40: - case 16: - case 91: - case 17: - break; - default: - return this.results_search(); - } - }; - Chosen.prototype.keydown_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - if (stroke !== 8 && this.pending_backstroke) { - this.clear_backstroke(); - } - switch (stroke) { - case 8: - this.backstroke_length = this.search_field.val().length; - break; - case 9: - this.mouse_on_container = false; - break; - case 13: - evt.preventDefault(); - break; - case 38: - evt.preventDefault(); - this.keyup_arrow(); - break; - case 40: - this.keydown_arrow(); - break; - } - }; - Chosen.prototype.search_field_scale = function() { - var dd_top, div, h, style, style_block, styles, w, _i, _len; - if (this.is_multiple) { - h = 0; - w = 0; - style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; - styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; - for (_i = 0, _len = styles.length; _i < _len; _i++) { - style = styles[_i]; - style_block += style + ":" + this.search_field.css(style) + ";"; - } - div = $('
      ', { - 'style': style_block - }); - div.text(this.search_field.val()); - $('body').append(div); - w = div.width() + 25; - div.remove(); - if (w > this.f_width - 10) { - w = this.f_width - 10; - } - this.search_field.css({ - 'width': w + 'px' - }); - dd_top = this.container.height(); - return this.dropdown.css({ - "top": dd_top + "px" - }); - } - }; - Chosen.prototype.generate_field_id = function() { - var new_id; - new_id = this.generate_random_id(); - this.form_field.id = new_id; - return new_id; - }; - Chosen.prototype.generate_random_id = function() { - var string; - string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char(); - while ($("#" + string).length > 0) { - string += this.generate_random_char(); - } - return string; - }; - Chosen.prototype.generate_random_char = function() { - var chars, newchar, rand; - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; - rand = Math.floor(Math.random() * chars.length); - return newchar = chars.substring(rand, rand + 1); - }; - return Chosen; - })(); - get_side_border_padding = function(elmt) { - var side_border_padding; - return side_border_padding = elmt.outerWidth() - elmt.width(); - }; - root.get_side_border_padding = get_side_border_padding; -}).call(this); -(function() { - var SelectParser; - SelectParser = (function() { - function SelectParser() { - this.options_index = 0; - this.parsed = []; - } - SelectParser.prototype.add_node = function(child) { - if (child.nodeName === "OPTGROUP") { - return this.add_group(child); - } else { - return this.add_option(child); - } - }; - SelectParser.prototype.add_group = function(group) { - var group_position, option, _i, _len, _ref, _results; - group_position = this.parsed.length; - this.parsed.push({ - array_index: group_position, - group: true, - label: group.label, - children: 0, - disabled: group.disabled - }); - _ref = group.childNodes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - _results.push(this.add_option(option, group_position, group.disabled)); - } - return _results; - }; - SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName === "OPTION") { - if (option.text !== "") { - if (group_position != null) { - this.parsed[group_position].children += 1; - } - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - value: option.value, - text: option.text, - html: option.innerHTML, - selected: option.selected, - disabled: group_disabled === true ? group_disabled : option.disabled, - group_array_index: group_position - }); - } else { - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - empty: true - }); - } - return this.options_index += 1; - } - }; - return SelectParser; - })(); - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - this.SelectParser = SelectParser; -}).call(this); - -$(".chosen-select").chosen(); diff --git a/harstorage/public/scripts/datatables/ColReorder.min.js b/harstorage/public/scripts/datatables/ColReorder.min.js deleted file mode 100644 index 8a1cf41..0000000 --- a/harstorage/public/scripts/datatables/ColReorder.min.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * File: ColReorder.min.js - * Version: 1.0.4 - * Author: Allan Jardine (www.sprymedia.co.uk) - * - * Copyright 2010-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD (3 point) style license, as supplied with this software. - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - */ -(function(f,o,i){function m(a){for(var c=[],d=0,b=a.length;d=h)this.oApi._fnLog(a,1,"ColReorder 'from' index is out of bounds: "+c);else if(d<0||d>= -h)this.oApi._fnLog(a,1,"ColReorder 'to' index is out of bounds: "+d);else{g=[];b=0;for(e=h;bthis.s.fixed-1&&this._fnMouseListener(c,this.s.dt.aoColumns[c].nTh);this.s.dt.aoColumns[c]._ColReorder_iOrigCol= -c}this.s.dt.aoStateSave.push({fn:function(h,g){return a._fnStateSave.call(a,g)},sName:"ColReorder_State"});var b=null;if(typeof this.s.init.aiOrder!="undefined")b=this.s.init.aiOrder.slice();if(this.s.dt.oLoadedState&&typeof this.s.dt.oLoadedState.ColReorder!="undefined"&&this.s.dt.oLoadedState.ColReorder.length==this.s.dt.aoColumns.length)b=this.s.dt.oLoadedState.ColReorder;if(b)if(a.s.dt._bInitComplete){c=m(b);a._fnOrderColumns.call(a,c)}else{var e=false;this.s.dt.aoDrawCallback.push({fn:function(){if(!a.s.dt._bInitComplete&& -!e){e=true;var h=m(b);a._fnOrderColumns.call(a,h)}},sName:"ColReorder_Pre"})}},_fnOrderColumns:function(a){if(a.length!=this.s.dt.aoColumns.length)this.s.dt.oInstance.oApi._fnLog(oDTSettings,1,"ColReorder - array reorder does not match known number of columns. Skipping.");else{for(var c=0,d=a.length;c0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("caption")[0]);for(;this.dom.drag.getElementsByTagName("tbody").length>0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("tbody")[0]);for(;this.dom.drag.getElementsByTagName("tfoot").length> -0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("tfoot")[0]);f("thead tr:eq(0)",this.dom.drag).each(function(){f("th:not(:eq("+a.s.mouse.targetIndex+"))",this).remove()});f("tr",this.dom.drag).height(f("tr:eq(0)",a.s.dt.nTHead).height());f("thead tr:gt(0)",this.dom.drag).remove();f("thead th:eq(0)",this.dom.drag).each(function(){this.style.width=f("th:eq("+a.s.mouse.targetIndex+")",a.s.dt.nTHead).width()+"px"});this.dom.drag.style.position="absolute";this.dom.drag.style.top="0px"; -this.dom.drag.style.left="0px";this.dom.drag.style.width=f("th:eq("+a.s.mouse.targetIndex+")",a.s.dt.nTHead).outerWidth()+"px";this.dom.pointer=i.createElement("div");this.dom.pointer.className="DTCR_pointer";this.dom.pointer.style.position="absolute";if(this.s.dt.oScroll.sX===""&&this.s.dt.oScroll.sY===""){this.dom.pointer.style.top=f(this.s.dt.nTable).offset().top+"px";this.dom.pointer.style.height=f(this.s.dt.nTable).height()+"px"}else{this.dom.pointer.style.top=f("div.dataTables_scroll",this.s.dt.nTableWrapper).offset().top+ -"px";this.dom.pointer.style.height=f("div.dataTables_scroll",this.s.dt.nTableWrapper).height()+"px"}i.body.appendChild(this.dom.pointer);i.body.appendChild(this.dom.drag)}};ColReorder.aoInstances=[];ColReorder.fnReset=function(a){for(var c=0,d=ColReorder.aoInstances.length;c'}else c+='';return c},hide:function(){if(this.div)this.div.style.left="-2000px"},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){if(a)(this.domElement=ZeroClipboard.$(a))||this.hide();if(this.domElement&&this.div){a=ZeroClipboard.getDOMObjectPosition(this.domElement);var b= -this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)}, -setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=document.getElementById(this.movieId); -if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=true;return}this.ready=true;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled); -break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":if(this.domElement&&this.cssEffects){this.recoverActive=false;if(this.domElement.hasClass("active")){this.domElement.removeClass("active");this.recoverActive=true}}break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":if(this.domElement&&this.cssEffects){this.domElement.removeClass("active");this.recoverActive= -false}break}if(this.handlers[a])for(var d=0,f=this.handlers[a].length;d0)b=a[0].innerHTML}return"\u00a1".toString().length<4?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns;a=this._fnColumnTargets(a.mColumns);var c=[],d=0,f=0,h,g;h=0;for(g=a.length;hg?h:g)+"px";l.style.width=(k>m?k:m)+"px";l.className="DTTT_collection_background";e(l).css("opacity",0);j.body.appendChild(l);j.body.appendChild(f);h=e(f).outerWidth();k=e(f).outerHeight();if(b+h>m)f.style.left=m-h+"px";if(d+k>g)f.style.top=d-k-e(a).outerHeight()+"px";this.dom.collection.collection=f;this.dom.collection.background=l;setTimeout(function(){e(f).animate({opacity:1},500);e(l).animate({opacity:0.25},500)},10);e(l).click(function(){c._fnCollectionHide.call(c, -null,null)})},_fnCollectionHide:function(a,b){if(!(b!==null&&b.sExtends=="collection"))if(this.dom.collection.collection!==null){e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display="none"});e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)});this.dom.collection.collection=null;this.dom.collection.background=null}},_fnRowSelectConfig:function(){if(this.s.master){var a=this,b,c,d=this.s.dt.aoOpenRows;e(a.s.dt.nTable).addClass("DTTT_selectable"); -e("tr",a.s.dt.nTBody).live("click",function(f){if(this.parentNode==a.s.dt.nTBody){b=0;for(c=d.length;b=0;a--)this._fnRowDeselect(a);this.s.select.all=false;TableTools._fnEventDispatch(this,"select",null)}},_fnRowDeselect:function(a){if(typeof a.nodeName!="undefined")a=e.inArray(a,this.s.select.selected);var b=this.s.select.selected[a];e(b).removeClass(this.s.select.selectedClass);this.s.select.selected.splice(a,1);this.s.select.postDeselected!==null&&this.s.select.postDeselected.call(this,b);this.s.select.all=false},_fnTextConfig:function(a,b){var c=this;b.fnInit!== -null&&b.fnInit.call(this,a,b);if(b.sToolTip!=="")a.title=b.sToolTip;e(a).hover(function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover);b.fnMouseover!==null&&b.fnMouseover.call(this,a,b,null)},function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass);b.fnMouseout!==null&&b.fnMouseout.call(this,a,b,null)});b.fnSelect!==null&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();b.fnClick!==null&&b.fnClick.call(c, -a,b,null);b.fnComplete!==null&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})},_fnFlashConfig:function(a,b){var c=this,d=new ZeroClipboard.Client;b.fnInit!==null&&b.fnInit.call(this,a,b);d.setHandCursor(true);if(b.sAction=="flash_save"){d.setAction("save");d.setCharSet(b.sCharSet=="utf16le"?"UTF16LE":"UTF8");d.setBomInc(b.bBomInc);d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))}else if(b.sAction=="flash_pdf"){d.setAction("pdf");d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))}else d.setAction("copy"); -d.addEventListener("mouseOver",function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover);b.fnMouseover!==null&&b.fnMouseover.call(c,a,b,d)});d.addEventListener("mouseOut",function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass);b.fnMouseout!==null&&b.fnMouseout.call(c,a,b,d)});d.addEventListener("mouseDown",function(){b.fnClick!==null&&b.fnClick.call(c,a,b,d)});d.addEventListener("complete",function(f,h){b.fnComplete!==null&&b.fnComplete.call(c,a,b,d,h);c._fnCollectionHide(a, -b)});this._fnFlashGlue(d,a,b.sToolTip)},_fnFlashGlue:function(a,b,c){var d=this,f=b.getAttribute("id");if(j.getElementById(f)){a.glue(b,c);if(a.domElement.parentNode!=a.div.parentNode&&typeof d.__bZCWarning=="undefined"){d.s.dt.oApi._fnLog(this.s.dt,0,"It looks like you are using the version of ZeroClipboard which came with TableTools 1. Please update to use the version that came with TableTools 2.");d.__bZCWarning=true}}else setTimeout(function(){d._fnFlashGlue(a,b,c)},100)},_fnFlashSetText:function(a, -b){b=this._fnChunkData(b,8192);a.clearText();for(var c=0,d=b.length;c/g,"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary, -m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1);h+=o}d=0;for(f=k.aiDisplay.length;d]+)).*?>/gi,"$1$2$3");g=g.replace(/<.*?>/g,"")}else g=g+"";g=g.replace(/^\s+/,"").replace(/\s+$/, -"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary,m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1);h+=o}h.slice(0,-1);if(a.bFooter){b=0;for(c=k.aoColumns.length;b/g,"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary,m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1)}return _sLastData=h},_fnBoundData:function(a,b,c){return b===""?a:b+ -a.replace(c,"\\"+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,f=0;f=8&&f>a[c].length-8){a[c].substr(f);a[c]=a[c].substr(0,f)}b.innerHTML=a[c];h+=b.childNodes[0].nodeValue}return h},_fnPrintConfig:function(a,b){var c= -this;b.fnInit!==null&&b.fnInit.call(this,a,b);e(a).hover(function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover)},function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass)});b.fnSelect!==null&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();c._fnPrintStart.call(c,d,b);b.fnClick!==null&&b.fnClick.call(c,a,b,null);b.fnComplete!==null&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})}, -_fnPrintStart:function(a,b){var c=this;a=this.s.dt;this._fnPrintHideNodes(a.nTable);this.s.print.saveStart=a._iDisplayStart;this.s.print.saveLength=a._iDisplayLength;if(b.bShowAll){a._iDisplayStart=0;a._iDisplayLength=-1;a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a)}if(a.oScroll.sX!==""||a.oScroll.sY!=="")this._fnPrintScrollStart(a);a=a.aanFeatures;for(var d in a)if(d!="i"&&d!="t"&&d.length==1)for(var f=0,h=a[d].length;f0&&a.nTable.removeChild(c[0]);if(a.nTFoot!==null){c=a.nTable.getElementsByTagName("tfoot");c.length>0&&a.nTable.removeChild(c[0])}c=a.nTHead.cloneNode(true);a.nTable.insertBefore(c,a.nTable.childNodes[0]); -if(a.nTFoot!==null){c=a.nTFoot.cloneNode(true);a.nTable.insertBefore(c,a.nTable.childNodes[1])}if(a.oScroll.sX!==""){a.nTable.style.width=e(a.nTable).outerWidth()+"px";b.style.width=e(a.nTable).outerWidth()+"px";b.style.overflow="visible"}if(a.oScroll.sY!==""){b.style.height=e(a.nTable).outerHeight()+"px";b.style.overflow="visible"}},_fnPrintScrollEnd:function(){var a=this.s.dt,b=a.nTable.parentNode;if(a.oScroll.sX!==""){b.style.width=a.oApi._fnStringToCss(a.oScroll.sX);b.style.overflow="auto"}if(a.oScroll.sY!== -""){b.style.height=a.oApi._fnStringToCss(a.oScroll.sY);b.style.overflow="auto"}},_fnPrintShowNodes:function(){for(var a=this.dom.print.hidden,b=0,c=a.length;bPrint view

      Please use your browser's print function to print this table. Press escape when finished.",sMessage:"",bShowAll:true,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonClassHover:"DTTT_button_print_hover", -sButtonText:"Print",fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null},text:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Text button",mColumns:"all",bHeader:true,bFooter:true,bSelectedOnly:false,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null},select:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover", -sButtonText:"Select button",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:function(a){this.fnGetSelected().length!==0?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")}},select_single:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select button",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null, -fnMouseout:null,fnClick:null,fnSelect:function(a){this.fnGetSelected().length==1?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")}},select_all:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select all",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length== -this.s.dt.fnRecordsDisplay()?e(a).addClass("DTTT_disabled"):e(a).removeClass("DTTT_disabled")},fnComplete:null,fnInit:null},select_none:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Deselect all",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectNone()},fnSelect:function(a){this.fnGetSelected().length!==0?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null, -fnInit:function(a){e(a).addClass("DTTT_disabled")}},ajax:{sAction:"text",sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"\n",sAjaxUrl:"/xhr.php",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Ajax button",mColumns:"all",bHeader:true,bFooter:true,bSelectedOnly:false,fnMouseover:null,fnMouseout:null,fnClick:function(a,b){a=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:a}],success:b.fnAjaxComplete,dataType:"json",type:"POST", -cache:false,error:function(){alert("Error detected when sending table data to server")}})},fnSelect:null,fnComplete:null,fnInit:null,fnAjaxComplete:function(){alert("Ajax complete")}},collection:{sAction:"collection",sToolTip:"",sButtonClass:"DTTT_button_collection",sButtonClassHover:"DTTT_button_collection_hover",sButtonText:"Collection",fnMouseover:null,fnMouseout:null,fnClick:function(a,b){this._fnCollectionShow(a,b)},fnSelect:null,fnComplete:null,fnInit:null}};TableTools.DEFAULTS={sSwfPath:"media/swf/copy_cvs_xls_pdf.swf", -sRowSelect:"none",sSelectedClass:"DTTT_selected",fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"]};TableTools.prototype.CLASS="TableTools";TableTools.VERSION="2.0.1";TableTools.prototype.VERSION=TableTools.VERSION;typeof e.fn.dataTable=="function"&&typeof e.fn.dataTableExt.fnVersionCheck=="function"&&e.fn.dataTableExt.fnVersionCheck("1.7.0")?e.fn.dataTableExt.aoFeatures.push({fnInit:function(a){a=new TableTools(a.oInstance,typeof a.oInit.oTableTools!= -"undefined"?a.oInit.oTableTools:{});TableTools._aInstances.push(a);return a.dom.container},cFeature:"T",sFeature:"TableTools"}):alert("Warning: TableTools 2 requires DataTables 1.7 or greater - www.datatables.net/download")})(jQuery,window,document); diff --git a/harstorage/public/scripts/datatables/jquery.dataTables.min.js b/harstorage/public/scripts/datatables/jquery.dataTables.min.js deleted file mode 100644 index 4280c6d..0000000 --- a/harstorage/public/scripts/datatables/jquery.dataTables.min.js +++ /dev/null @@ -1,151 +0,0 @@ -/* - * File: jquery.dataTables.min.js - * Version: 1.8.2 - * Author: Allan Jardine (www.sprymedia.co.uk) - * Info: www.datatables.net - * - * Copyright 2008-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, as supplied with this software. - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - */ -(function(i,za,p){i.fn.dataTableSettings=[];var D=i.fn.dataTableSettings;i.fn.dataTableExt={};var n=i.fn.dataTableExt;n.sVersion="1.8.2";n.sErrMode="alert";n.iApiIndex=0;n.oApi={};n.afnFiltering=[];n.aoFeatures=[];n.ofnSearch={};n.afnSortData=[];n.oStdClasses={sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active", -sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled", -sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:""};n.oJUIClasses={sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left", -sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled", -sPageFirst:"first ui-corner-tl ui-corner-bl",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last ui-corner-tr ui-corner-br",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default", -sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortColumn:"sorting_",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollWrapper:"dataTables_scroll", -sScrollHead:"dataTables_scrollHead ui-state-default",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot ui-state-default",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:"ui-state-default"};n.oPagination={two_button:{fnInit:function(g,l,s){var t,w,y;if(g.bJUI){t=p.createElement("a");w=p.createElement("a");y=p.createElement("span");y.className=g.oClasses.sPageJUINext;w.appendChild(y);y=p.createElement("span");y.className=g.oClasses.sPageJUIPrev; -t.appendChild(y)}else{t=p.createElement("div");w=p.createElement("div")}t.className=g.oClasses.sPagePrevDisabled;w.className=g.oClasses.sPageNextDisabled;t.title=g.oLanguage.oPaginate.sPrevious;w.title=g.oLanguage.oPaginate.sNext;l.appendChild(t);l.appendChild(w);i(t).bind("click.DT",function(){g.oApi._fnPageChange(g,"previous")&&s(g)});i(w).bind("click.DT",function(){g.oApi._fnPageChange(g,"next")&&s(g)});i(t).bind("selectstart.DT",function(){return false});i(w).bind("selectstart.DT",function(){return false}); -if(g.sTableId!==""&&typeof g.aanFeatures.p=="undefined"){l.setAttribute("id",g.sTableId+"_paginate");t.setAttribute("id",g.sTableId+"_previous");w.setAttribute("id",g.sTableId+"_next")}},fnUpdate:function(g){if(g.aanFeatures.p)for(var l=g.aanFeatures.p,s=0,t=l.length;s=w-t){t=w-s+1;x=w}else{t=y-Math.ceil(s/2)+1;x=t+s-1}for(s=t;s<=x;s++)F+=y!=s?''+s+"":''+s+"";x=g.aanFeatures.p;var z,$=function(M){g._iDisplayStart=(this.innerHTML*1-1)*g._iDisplayLength;l(g);M.preventDefault()},X=function(){return false};s=0;for(t=x.length;sl?1:0},"string-desc":function(g,l){if(typeof g!="string")g="";if(typeof l!="string")l="";g=g.toLowerCase();l=l.toLowerCase();return gl?-1:0},"html-asc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return g< -l?-1:g>l?1:0},"html-desc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return gl?-1:0},"date-asc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return g-l},"date-desc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return l- -g},"numeric-asc":function(g,l){return(g=="-"||g===""?0:g*1)-(l=="-"||l===""?0:l*1)},"numeric-desc":function(g,l){return(l=="-"||l===""?0:l*1)-(g=="-"||g===""?0:g*1)}};n.aTypes=[function(g){if(typeof g=="number")return"numeric";else if(typeof g!="string")return null;var l,s=false;l=g.charAt(0);if("0123456789-".indexOf(l)==-1)return null;for(var t=1;t")!=-1)return"html";return null}];n.fnVersionCheck=function(g){var l=function(x,v){for(;x.length=parseInt(w,10)};n._oExternConfig={iNextUnique:0};i.fn.dataTable=function(g){function l(){this.fnRecordsTotal= -function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length};this.fnRecordsDisplay=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length};this.fnDisplayEnd=function(){return this.oFeatures.bServerSide?this.oFeatures.bPaginate===false||this._iDisplayLength==-1?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd};this.sInstance= -this.oInstance=null;this.oFeatures={bPaginate:true,bLengthChange:true,bFilter:true,bSort:true,bInfo:true,bAutoWidth:true,bProcessing:false,bSortClasses:true,bStateSave:false,bServerSide:false,bDeferRender:false};this.oScroll={sX:"",sXInner:"",sY:"",bCollapse:false,bInfinite:false,iLoadGap:100,iBarWidth:0,bAutoCss:true};this.aanFeatures=[];this.oLanguage={sProcessing:"Processing...",sLengthMenu:"Show _MENU_ entries",sZeroRecords:"No matching records found",sEmptyTable:"No data available in table", -sLoadingRecords:"Loading...",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sSearch:"Search:",sUrl:"",oPaginate:{sFirst:"First",sPrevious:"Previous",sNext:"Next",sLast:"Last"},fnInfoCallback:null};this.aoData=[];this.aiDisplay=[];this.aiDisplayMaster=[];this.aoColumns=[];this.aoHeader=[];this.aoFooter=[];this.iNextId=0;this.asDataSearch=[];this.oPreviousSearch={sSearch:"", -bRegex:false,bSmart:true};this.aoPreSearchCols=[];this.aaSorting=[[0,"asc",0]];this.aaSortingFixed=null;this.asStripeClasses=[];this.asDestroyStripes=[];this.sDestroyWidth=0;this.fnFooterCallback=this.fnHeaderCallback=this.fnRowCallback=null;this.aoDrawCallback=[];this.fnInitComplete=this.fnPreDrawCallback=null;this.sTableId="";this.nTableWrapper=this.nTBody=this.nTFoot=this.nTHead=this.nTable=null;this.bInitialised=this.bDeferLoading=false;this.aoOpenRows=[];this.sDom="lfrtip";this.sPaginationType= -"two_button";this.iCookieDuration=7200;this.sCookiePrefix="SpryMedia_DataTables_";this.fnCookieCallback=null;this.aoStateSave=[];this.aoStateLoad=[];this.sAjaxSource=this.oLoadedState=null;this.sAjaxDataProp="aaData";this.bAjaxDataGet=true;this.jqXHR=null;this.fnServerData=function(a,b,c,d){d.jqXHR=i.ajax({url:a,data:b,success:function(f){i(d.oInstance).trigger("xhr",d);c(f)},dataType:"json",cache:false,error:function(f,e){e=="parsererror"&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})}; -this.aoServerParams=[];this.fnFormatNumber=function(a){if(a<1E3)return a;else{var b=a+"";a=b.split("");var c="";b=b.length;for(var d=0;d=0;e--)!a.aoColumns[e].bVisible&&!c&&h[d].splice(e,1);j.push([])}d=0;for(f=h.length;d=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;E(a)}if(a.bDeferLoading){a.bDeferLoading=false;a.iDraw++}else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!Ca(a))return}else a.iDraw++;if(a.aiDisplay.length!==0){var h=a._iDisplayStart,j=a._iDisplayEnd;if(a.oFeatures.bServerSide){h=0;j=a.aoData.length}for(h= -h;h=0;b--)c[b].parentNode.removeChild(c[b])}b=0;for(c=d.length;b=0;b--)a.aoDrawCallback[b].fn.call(a.oInstance,a);i(a.oInstance).trigger("draw",a);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){K(a,false);typeof a._bInitComplete=="undefined"&&w(a)}}}function da(a){if(a.oFeatures.bSort)R(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)N(a, -a.oPreviousSearch);else{E(a);C(a)}}function Ca(a){if(a.bAjaxDataGet){a.iDraw++;K(a,true);var b=Da(a);ha(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(c){Ea(a,c)},a);return false}else return true}function Da(a){var b=a.aoColumns.length,c=[],d,f;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:ka(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength: --1});for(f=0;f")c=c.parentNode;else if(h=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){f=Ga(a);e=1}else if(h=="f"&&a.oFeatures.bFilter){f=Ha(a);e=1}else if(h=="r"&&a.oFeatures.bProcessing){f=Ia(a);e=1}else if(h=="t"){f=Ja(a);e=1}else if(h=="i"&&a.oFeatures.bInfo){f=Ka(a);e=1}else if(h=="p"&&a.oFeatures.bPaginate){f=La(a);e=1}else if(n.aoFeatures.length!==0){j=n.aoFeatures;u=0;for(k=j.length;ui(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()0&&a.nTable.removeChild(h[0]);if(a.nTFoot!==null){k=a.nTable.getElementsByTagName("tfoot");k.length>0&&a.nTable.removeChild(k[0])}h=a.nTHead.cloneNode(true);a.nTable.insertBefore(h,a.nTable.childNodes[0]);if(a.nTFoot!==null){k=a.nTFoot.cloneNode(true); -a.nTable.insertBefore(k,a.nTable.childNodes[1])}if(a.oScroll.sX===""){d.style.width="100%";b.parentNode.style.width="100%"}var U=S(a,h);f=0;for(e=U.length;fd.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sXInner!== -"")a.nTable.style.width=q(a.oScroll.sXInner);else if(f==i(d).width()&&i(d).height()f-a.oScroll.iBarWidth)a.nTable.style.width=q(f)}else a.nTable.style.width=q(f);f=i(a.nTable).outerWidth();e=a.nTHead.getElementsByTagName("tr");h=h.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width= -q(r);H.push(r)},h,e);i(h).height(0);if(a.nTFoot!==null){j=k.getElementsByTagName("tr");k=a.nTFoot.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width=q(r);H.push(r)},j,k);i(j).height(0)}P(function(I){I.innerHTML="";I.style.width=q(H.shift())},h);a.nTFoot!==null&&P(function(I){I.innerHTML="";I.style.width=q(H.shift())},j);if(i(a.nTable).outerWidth()d.offsetHeight|| -i(d).css("overflow-y")=="scroll"?f+a.oScroll.iBarWidth:f;if(B&&(d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(j-a.oScroll.iBarWidth);d.style.width=q(j);b.parentNode.style.width=q(j);if(a.nTFoot!==null)L.parentNode.style.width=q(j);if(a.oScroll.sX==="")J(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width.");else a.oScroll.sXInner!==""&&J(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else{d.style.width= -q("100%");b.parentNode.style.width=q("100%");if(a.nTFoot!==null)L.parentNode.style.width=q("100%")}if(a.oScroll.sY==="")if(B)d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(a.oScroll.sY!==""&&a.oScroll.bCollapse){d.style.height=q(a.oScroll.sY);B=a.oScroll.sX!==""&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight'):b===""?'':b+' ';var c=p.createElement("div"); -c.className=a.oClasses.sFilter;c.innerHTML="";a.sTableId!==""&&typeof a.aanFeatures.f=="undefined"&&c.setAttribute("id",a.sTableId+"_filter");b=i("input",c);b.val(a.oPreviousSearch.sSearch.replace('"',"""));b.bind("keyup.DT",function(){for(var d=a.aanFeatures.f,f=0,e=d.length;f=0;d--){f=qa(G(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType);if(!b.test(f)){a.aiDisplay.splice(d,1);e++}}}}function Oa(a,b,c,d,f){var e=pa(b,d,f);if(typeof c=="undefined"||c===null)c=0;if(n.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length|| -a.oPreviousSearch.sSearch.length>b.length||c==1||b.indexOf(a.oPreviousSearch.sSearch)!==0){a.aiDisplay.splice(0,a.aiDisplay.length);oa(a,1);for(c=0;c/g,"");else if(typeof a=="string")return a.replace(/\n/g," ");else if(a===null)return"";return a}function R(a,b){var c,d,f,e,h=[],j=[],k=n.oSort;d=a.aoData;var m=a.aoColumns;if(!a.oFeatures.bServerSide&& -(a.aaSorting.length!==0||a.aaSortingFixed!==null)){h=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c=h)for(b=0;b=0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength=0){b=parseInt((a.fnRecordsDisplay()- -1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else J(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function Ka(a){var b=p.createElement("div");b.className=a.oClasses.sInfo;if(typeof a.aanFeatures.i=="undefined"){a.aoDrawCallback.push({fn:Ra,sName:"information"});a.sTableId!==""&&b.setAttribute("id",a.sTableId+"_info")}return b}function Ra(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a._iDisplayStart+ -1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),e=a.fnFormatNumber(b),h=a.fnFormatNumber(c),j=a.fnFormatNumber(d),k=a.fnFormatNumber(f);if(a.oScroll.bInfinite)e=a.fnFormatNumber(1);e=a.fnRecordsDisplay()===0&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()===0?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",j)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_", -e).replace("_END_",h).replace("_TOTAL_",k)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",e).replace("_END_",h).replace("_TOTAL_",k)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;if(a.oLanguage.fnInfoCallback!==null)e=a.oLanguage.fnInfoCallback(a,b,c,d,f,e);a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d;if(a.aLengthMenu.length==2&&typeof a.aLengthMenu[0]=="object"&&typeof a.aLengthMenu[1]=="object"){c=0;for(d=a.aLengthMenu[0].length;c'+a.aLengthMenu[1][c]+""}else{c=0;for(d=a.aLengthMenu.length;c'+a.aLengthMenu[c]+""}b+="";var f=p.createElement("div");a.sTableId!==""&&typeof a.aanFeatures.l=="undefined"&&f.setAttribute("id",a.sTableId+"_length"); -f.className=a.oClasses.sLength;f.innerHTML="";i('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",true);i("select",f).bind("change.DT",function(){var e=i(this).val(),h=a.aanFeatures.l;c=0;for(d=h.length;ca.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Sa(a,b){if(!a||a===null||a==="")return 0;if(typeof b=="undefined")b=p.getElementsByTagName("body")[0];var c=p.createElement("div");c.style.width=q(a);b.appendChild(c);a=c.offsetWidth;b.removeChild(c);return a}function ga(a){var b=0,c,d=0,f=a.aoColumns.length,e,h=i("th", -a.nTHead);for(e=0;etd",b);h=S(a,e);for(e=d=0;e0)a.aoColumns[e].sWidth=q(c);d++}a.nTable.style.width=q(i(b).outerWidth());b.parentNode.removeChild(b)}}function Ua(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){i(b).width();b.style.width=q(i(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!== -"")b.style.width=q(i(b).outerWidth())}function Ta(a,b){var c=Va(a,b);if(c<0)return null;if(a.aoData[c].nTr===null){var d=p.createElement("td");d.innerHTML=G(a,c,b,"");return d}return Q(a,c)[b]}function Va(a,b){for(var c=-1,d=-1,f=0;f/g,"");if(e.length>c){c=e.length;d=f}}return d}function q(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b=a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+ -"px"}function Za(a,b){if(a.length!=b.length)return 1;for(var c=0;cb&&a[d]--;c!=-1&&a.splice(c,1)}function Fa(a,b){b=b.split(",");for(var c=[],d=0,f=a.aoColumns.length;d4096){a=p.cookie.split(";");for(var j=0,k=a.length;j=d.aiDisplay.length){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(typeof c=="undefined"||c){E(d);C(d)}return f};this.fnClearTable=function(a){var b=A(this[n.iApiIndex]);la(b);if(typeof a=="undefined"||a)C(b)};this.fnOpen=function(a,b,c){var d=A(this[n.iApiIndex]);this.fnClose(a);var f=p.createElement("tr"),e=p.createElement("td");f.appendChild(e);e.className=c; -e.colSpan=Z(d);if(typeof b.jquery!="undefined"||typeof b=="object")e.appendChild(b);else e.innerHTML=b;b=i("tr",d.nTBody);i.inArray(a,b)!=-1&&i(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f};this.fnClose=function(a){for(var b=A(this[n.iApiIndex]),c=0;c=Z(d);if(!j)for(f=a;ftr>td."+a.oClasses.sRowEmpty,a.nTable).parent().remove(); -if(a.nTable!=a.nTHead.parentNode){i(a.nTable).children("thead").remove();a.nTable.appendChild(a.nTHead)}if(a.nTFoot&&a.nTable!=a.nTFoot.parentNode){i(a.nTable).children("tfoot").remove();a.nTable.appendChild(a.nTFoot)}a.nTable.parentNode.removeChild(a.nTable);i(a.nTableWrapper).remove();a.aaSorting=[];a.aaSortingFixed=[];V(a);i(ba(a)).removeClass(a.asStripeClasses.join(" "));if(a.bJUI){i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oJUIClasses.sSortableAsc,n.oJUIClasses.sSortableDesc,n.oJUIClasses.sSortableNone].join(" ")); -i("th span."+n.oJUIClasses.sSortIcon,a.nTHead).remove();i("th",a.nTHead).each(function(){var e=i("div."+n.oJUIClasses.sSortJUIWrapper,this),h=e.contents();i(this).append(h);e.remove()})}else i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oStdClasses.sSortableAsc,n.oStdClasses.sSortableDesc,n.oStdClasses.sSortableNone].join(" "));a.nTableReinsertBefore?b.insertBefore(a.nTable,a.nTableReinsertBefore):b.appendChild(a.nTable);d=0;for(f=a.aoData.length;dt<"F"ip>'}if(e.oScroll.sX!==""||e.oScroll.sY!== -"")e.oScroll.iBarWidth=Ya();if(typeof g.iDisplayStart!="undefined"&&typeof e.iInitDisplayStart=="undefined"){e.iInitDisplayStart=g.iDisplayStart;e._iDisplayStart=g.iDisplayStart}if(typeof g.bStateSave!="undefined"){e.oFeatures.bStateSave=g.bStateSave;Xa(e,g);e.aoDrawCallback.push({fn:va,sName:"state_save"})}if(typeof g.iDeferLoading!="undefined"){e.bDeferLoading=true;e._iRecordsTotal=g.iDeferLoading;e._iRecordsDisplay=g.iDeferLoading}if(typeof g.aaData!="undefined")j=true;if(typeof g!="undefined"&& -typeof g.aoData!="undefined")g.aoColumns=g.aoData;if(typeof g.oLanguage!="undefined")if(typeof g.oLanguage.sUrl!="undefined"&&g.oLanguage.sUrl!==""){e.oLanguage.sUrl=g.oLanguage.sUrl;i.getJSON(e.oLanguage.sUrl,null,function(u){y(e,u,true)});h=true}else y(e,g.oLanguage,false)}else g={};if(typeof g.asStripClasses=="undefined"&&typeof g.asStripeClasses=="undefined"){e.asStripeClasses.push(e.oClasses.sStripeOdd);e.asStripeClasses.push(e.oClasses.sStripeEven)}c=false;d=i(this).children("tbody").children("tr"); -a=0;for(b=e.asStripeClasses.length;a=0;a--){var m= -g.aoColumnDefs[a].aTargets;i.isArray(m)||J(e,1,"aTargets must be an array of targets, not a "+typeof m);c=0;for(d=m.length;c=0){for(;e.aoColumns.length<=m[c];)F(e);x(e,m[c],g.aoColumnDefs[a])}else if(typeof m[c]=="number"&&m[c]<0)x(e,e.aoColumns.length+m[c],g.aoColumnDefs[a]);else if(typeof m[c]=="string"){b=0;for(f=e.aoColumns.length;b=e.aoColumns.length)e.aaSorting[a][0]=0;k=e.aoColumns[e.aaSorting[a][0]];if(typeof e.aaSorting[a][2]=="undefined")e.aaSorting[a][2]=0;if(typeof g.aaSorting=="undefined"&&typeof e.saved_aaSorting=="undefined")e.aaSorting[a][1]=k.asSorting[0];c=0;for(d=k.asSorting.length;c0){e.nTFoot=a[0];Y(e.aoFooter,e.nTFoot)}if(j)for(a=0;a>> 0, - from = Number(arguments[1]) || 0; - - from = (from < 0) ? Math.ceil(from) : Math.floor(from); - - if (from < 0) { - from += len; - } - - for (; from < len; from++) { - if (from in this && this[from] === elt) { - return from; - } - } - - return -1; - }; -} - -/* - * Name space - */ -var HARSTORAGE = HARSTORAGE || {}; - - -/* - * Base url to be used when generating urls - */ -var base_url = $('#base-url').text(); -HARSTORAGE.base_url = base_url - - -/* - * Time metrics - */ -HARSTORAGE.times = [ - "Full Load Time", - "onLoad Event", - "Start Render Time", - "Time to First Byte" -]; - -/* - * Units - */ -HARSTORAGE.Units = { - "Full Load Time": "s", - "Total Requests": "", - "Total Size": "kB", - "Page Speed Score": "", - "onLoad Event": "s", - "Start Render Time": "s", - "Time to First Byte": "s", - "Total DNS Time": "ms", - "Total Transfer Time": "ms", - "Total Server Time": "ms", - "Avg. Connecting Time": "ms", - "Avg. Blocking Time": "ms", - "Text Size": "kB", - "Media Size": "kB", - "Cache Size": "kB", - "Redirects": "", - "Bad Rquests": "", - "Domains": "" -}; - -/* - * Data Converter - */ -HARSTORAGE.Converter = function(points) { - "use strict"; - - // Series data - var splitResults = points.split(";"), - numberOfSets = splitResults.length - 2, - dataArray = []; - - // Labels and Timestamps - var labels = splitResults[0].split("#"), - categories = splitResults[1].split("#"), - numberOfPoints = categories.length, - pointValue; - - for (var dataSetIndex = 0; dataSetIndex < numberOfSets; dataSetIndex += 1 ) { - dataArray.push(splitResults[dataSetIndex + 2].split("#")); - - // Convert string values to numbers - for (var pointIndex = 0; pointIndex < numberOfPoints; pointIndex += 1 ) { - // Original Value - pointValue = dataArray[dataSetIndex][pointIndex]; - - if (HARSTORAGE.times.indexOf(labels[dataSetIndex]) !== -1) { - // Parsed value - pointValue = parseFloat(pointValue / 1000, 10); - // Rounded value - if (pointValue > 1){ - pointValue = Math.round(pointValue * 10) / 10; - } - } else { - // Parsed value - pointValue = parseInt(pointValue, 10); - } - - dataArray[dataSetIndex][pointIndex] = pointValue; - } - } - - // Colors for Y Axis labels - var colors = HARSTORAGE.Colors(); - - // Y Axis and series - var yAxis = [], - series = []; - - for (dataSetIndex = 0; dataSetIndex < numberOfSets; dataSetIndex += 1) { - yAxis.push({ - title: { - text: labels[dataSetIndex], - style: { - color: colors[dataSetIndex] - } - }, - min: 0, - opposite: (dataSetIndex%2 === 0) ? false : true, - showEmpty: false - }); - - series.push({ - name: labels[dataSetIndex], - yAxis: dataSetIndex, - data: dataArray[dataSetIndex], - visible: (dataSetIndex < 3) ? true : false - }); - } - - return { - "categories": categories, - "yAxis": yAxis, - "series": series - }; -}; - -/* - * Timeline chart - */ -HARSTORAGE.Timeline = function(run_info) { - "use strict"; - - this.run_info = run_info; -}; - -// Get data for timeline -HARSTORAGE.Timeline.prototype.get = function(label, mode) { - "use strict"; - - // Pointer - var that = this; - - // Retrieve data for timeline via XHR call - var xhr = new XMLHttpRequest(); - - xhr.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - that.draw(this.responseText); - } - }; - - var URI = "timeline?label=" + encodeURIComponent(label) + "&mode=" + mode; - - xhr.open("GET", URI, true); - xhr.send(); -}; - -// Draw timeline -HARSTORAGE.Timeline.prototype.draw = function(points) { - "use strict"; - - // Pointer - var that = this; - - // Convert data from custom format to arrays for chart - var converter = HARSTORAGE.Converter(points); - - var categories = converter.categories, - yAxis = converter.yAxis, - series = converter.series; - - new Highcharts.Chart({ - chart: { - renderTo: "timeline", - zoomType: "x", - defaultSeriesType: "spline" - }, - credits: { - enabled: false - }, - exporting: { - buttons: { - printButton: { - enabled: false - }, - exportButton: { - menuItems: [ - {}, - null, - null, - {} - ] - } - }, - url: HARSTORAGE.base_url + "/chart/export", - filename: "timeline", - width: 960 - }, - title: { - text: "Performance Trends" - }, - xAxis: [{ - categories: categories, - tickInterval: Math.ceil(categories.length / 10), - tickmarkPlacement: "on" - }], - yAxis: yAxis, - tooltip: { - formatter: function() { - var unit = HARSTORAGE.Units[this.series.name]; - return "" + this.y + " " + unit + "" + " (" + this.x + ")"; - } - }, - plotOptions: { - series: { - cursor: "pointer", - events: { - hide: function() { - this.yAxis.axisTitle.hide(); - }, - show: function() { - this.yAxis.axisTitle.show(); - } - }, - point: { - events: { - click: function() { - that.run_info.get(this.category); - } - } - } - } - }, - series: series - }); -}; - -/* - * Histogram Chart - */ -HARSTORAGE.Histogram = function() { - "use strict"; -}; - -HARSTORAGE.Histogram.prototype.draw = function(points, title) { - "use strict"; - - // Series data - var splitResults = points.split(";"), - yAxis = [], - series = []; - - series = splitResults[0].split("#"); - - var temp_array = splitResults[1].split("#"); - - for (var i = 0, l = temp_array.length; i < l; i += 1 ) { - yAxis.push(parseFloat(temp_array[i], 10)); - } - - // Colors for Y Axis labels - var color = HARSTORAGE.Colors()[0]; - - // Chart Object - new Highcharts.Chart({ - chart: { - renderTo: "chart", - defaultSeriesType: "column" - }, - credits: { - enabled: false - }, - exporting: { - buttons: { - printButton: { - enabled: false - }, - exportButton: { - menuItems: [ - {}, - null, - null, - {} - ] - } - }, - url: HARSTORAGE.base_url + "/chart/export", - filename: "histogram", - width: 960 - }, - title: { - text: title + " (" + HARSTORAGE.Units[title] + ")" - }, - legend: { - enabled: false - }, - plotOptions: { - series: { - cursor: "pointer" - } - }, - xAxis: [{ - categories: series - }], - yAxis: [{ - title: { - text: "Percentage of Total", - style: { - color: color - } - }, - min: 0 - }], - tooltip: { - formatter: function() { - var unit = HARSTORAGE.Units[title]; - return "" + this.y + " %" + " (" + this.x + " " + unit + ")"; - } - }, - series: [{ - data: yAxis - }] - }); -}; - -/* - * Column Chart - */ -HARSTORAGE.Columns = function() { - "use strict"; -}; - -HARSTORAGE.Columns.prototype.draw = function(points, chart_type) { - "use strict"; - - // Chart type - chart_type = (typeof(chart_type) !== "undefined") ? chart_type : "column"; - - // Convert data from custom format to arrays for chart - var converter = HARSTORAGE.Converter(points); - - var categories = converter.categories, - yAxis = converter.yAxis, - series = converter.series; - - // Chart Object - new Highcharts.Chart({ - chart: { - renderTo: "chart", - defaultSeriesType: chart_type - }, - credits: { - enabled: false - }, - exporting: { - buttons: { - printButton: { - enabled: false - }, - exportButton: { - menuItems: [ - {}, - null, - null, - {} - ] - } - }, - url: HARSTORAGE.base_url + "/chart/export", - filename: "superposed", - width: 960 - }, - title: { - text: "Performance Trends" - }, - xAxis: [{ - categories: categories, - tickInterval: Math.ceil(categories.length / 10), - tickmarkPlacement: "on" - }], - yAxis: yAxis, - tooltip: { - formatter: function() { - var unit = HARSTORAGE.Units[this.series.name]; - return "" + this.y + " " + unit + "" + " (" + this.x + ")"; - } - }, - plotOptions: { - series: { - cursor: "pointer", - events: { - hide: function() { - this.yAxis.axisTitle.hide(); - }, - show: function() { - this.yAxis.axisTitle.show(); - } - } - } - }, - series: series - }); -}; - -/* - * Test results - */ -HARSTORAGE.RunInfo = function(mode, label, query, histo) { - "use strict"; - - // Pointer - var that = this; - - // Initialize cache - this.cache = {}; - - // Add event handler to selector box - var run_timestamp = document.getElementById("run_timestamp"); - - run_timestamp.onchange = function() { - that.get(); - }; - - // Add event handler to delete button - var del_btn = document.getElementById("del-btn"); - - del_btn.onclick = function() { - that.del(label, mode, false); - }; - - // Add event handler to delete all button - var del_all_btn = document.getElementById("del-all-btn"); - - del_all_btn.onclick = function() { - that.del(label, mode, true); - }; - - // Add event handler to aggregation button - var agg_btn = document.getElementById("agg-btn"); - - if (query !== "None") { - agg_btn.style.display = "inline"; - agg_btn.onclick = function() { - location.href = HARSTORAGE.base_url + query.replace(/amp;/g,"") + "&chart=column&table=true"; - }; - } - - // Add event handler to histogram button - var histo_btn = document.getElementById("histo"); - - if (histo === "true") { - histo_btn.style.display = "inline"; - histo_btn.onclick = function() { - location.href = HARSTORAGE.base_url + "/superposed/histogram?label=" + label + "&metric=full_load_time"; - }; - } -}; - -//Page Resources -HARSTORAGE.RunInfo.prototype.resources = function (div, title, hash, units, width) { - "use strict"; - - // Extract data - var data = []; - - for (var key in hash) { - if (hash.hasOwnProperty(key)) { - data.push( [key, hash[key] ]); - } - } - - // Chart object - new Highcharts.Chart({ - chart: { - renderTo: div, - defaultSeriesType: "pie", - plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false, - width: width, - height: 300 - }, - credits: { - enabled: false - }, - exporting: { - buttons: { - printButton: { - enabled: false - }, - exportButton: { - menuItems: [ - {}, - null, - null, - {} - ] - } - }, - url: HARSTORAGE.base_url + "/chart/export", - filename: "resources", - width: width - }, - title: { - text: title - }, - tooltip: { - formatter: function() { - return ""+ this.point.name +": "+ this.y + units; - } - }, - plotOptions: { - series: { - showInLegend: true - } - }, - series: [{ - data: data - }] - }); -}; - -//Page Speed details -HARSTORAGE.RunInfo.prototype.pagespeed = function (pagespeed) { - "use strict"; - - // Spliting data for chart - var rules = ["Total Score"], - scores = [pagespeed["Total Score"]]; - - for (var rule in pagespeed) { - if (pagespeed.hasOwnProperty(rule) && rule !== "Total Score") { - rules.push(rule); - scores.push(pagespeed[rule]); - } - } - - // Chart height - var height = Math.max(75 + 20 * rules.length, 100); - - // Chart object - new Highcharts.Chart({ - chart: { - renderTo: "pagespeed", - defaultSeriesType: "bar", - height: height, - width: 930 - }, - credits: { - enabled: false - }, - exporting: { - buttons: { - printButton: { - enabled: false - }, - exportButton: { - enabled: false - } - } - }, - title: { - text: "Page Speed Scores" - }, - xAxis: { - title: { - text: null - }, - categories: rules, - labels: { - formatter: function() { - if (this.value === "Total Score") { - return "@" + this.value + ""; - } else { - return this.value; - } - } - } - }, - yAxis: { - title: { - text: null - }, - min: 0, - max: 105, - endOnTick: false - }, - tooltip: { - formatter: function() { - return this.x +": "+ this.y; - } - }, - plotOptions: { - bar: { - dataLabels: { - enabled: true - } - }, - series: { - showInLegend: false, - animation: false - } - }, - series: [{ - data: scores - }] - }); -}; - -//Get data for Run Info -HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { - "use strict"; - - // Pointer - var that = this; - - // Dynamic data - this.json = []; - - // Show Ajax spinner - this.spinner.style.display = "block"; - - // Formatter - this.formatter = function(value, units) { - // Default units - if (typeof(units) === "undefined") { - units = ""; - } - - // Formatter - switch ( typeof(value) ) { - case "number": - if (value >= 1000) { - var seconds = Math.floor(value/1000); - var milliseconds = value - seconds*1000; - - if (milliseconds < 10) { - milliseconds = "00" + milliseconds; - } else if (milliseconds < 100) { - milliseconds = "0" + milliseconds; - } - - return seconds + " " + milliseconds + " " + units; - } else { - return value + " " + units; - } - break; - case "string": - return value; - default: - return "n/a"; - } - }; - - // Update test results - var set_data = function() { - // Update cache - if (typeof(that.cache[that.URI]) === "undefined") { - that.json = JSON.parse(that.xhr.responseText); - that.cache[that.URI] = that.json; - } - - // Summary - $("#full-load-time").html(that.formatter(that.json.summary.full_load_time, "ms")); - $("#onload-event").html(that.formatter(that.json.summary.onload_event, "ms")); - $("#start-render-time").html(that.formatter(that.json.summary.start_render_time, "ms")); - $("#time-to-first-byte").html(that.formatter(that.json.summary.time_to_first_byte, "ms")); - - $("#total-dns-time").html(that.formatter(that.json.summary.total_dns_time, "ms")); - $("#total-transfer-time").html(that.formatter(that.json.summary.total_transfer_time, "ms")); - $("#total-server-time").html(that.formatter(that.json.summary.total_server_time, "ms")); - $("#avg-connecting-time").html(that.formatter(that.json.summary.avg_connecting_time, "ms")); - $("#avg-blocking-time").html(that.formatter(that.json.summary.avg_blocking_time, "ms")); - - $("#total-size").html(that.formatter(that.json.summary.total_size, "kB")); - $("#text-size").html(that.formatter(that.json.summary.text_size, "kB")); - $("#media-size").html(that.formatter(that.json.summary.media_size, "kB")); - $("#cache-size").html(that.formatter(that.json.summary.cache_size, "kB")); - - $("#requests").html(that.formatter(that.json.summary.requests)); - $("#redirects").html(that.formatter(that.json.summary.redirects)); - $("#bad-requests").html(that.formatter(that.json.summary.bad_requests)); - $("#domains").html(that.formatter(that.json.summary.domains)); - - // HAR Viewer - var iframe = document.createElement("iframe"); - var url = HARSTORAGE.base_url + "/results/harviewer?inputUrl=" + HARSTORAGE.base_url + "/results/download%3Fid%3D"; - url += that.json.har; - url += "&expand=true"; - - iframe.setAttribute("src", url); - iframe.setAttribute("width", "940"); - iframe.setAttribute("id", "harviewer-iframe"); - iframe.setAttribute("frameBorder", "0"); - iframe.setAttribute("frameBorder", "0"); - iframe.setAttribute("scrolling", "no"); - - $("#harviewer").html(iframe); - - window.setInterval("HARSTORAGE.autoHeight()", 100); - - // New tab feature of HAR Viewer - var newtab = document.getElementById("newtab"); - - newtab.onclick = function () { - window.open(url); - }; - - // Resources by Size - setTimeout( - function() { - that.resources("by-size", "Resources by Size", that.json.weights, " kB", 450); - }, - 50 - ); - - // Resources by Requests - setTimeout( - function() { - that.resources("by-req", "Resources by Requests", that.json.requests, "", 450); - }, - 150 - ); - - // Domains by Size - setTimeout( - function() { - that.resources("domains-by-size", "Domains by Size", that.json.d_weights, " kB", 930); - }, - 250 - ); - - // Domains by Requests - setTimeout( - function() { - that.resources("domains-by-req", "Domains by Requests", that.json.d_requests, "", 930); - }, - 350 - ); - - // Page Speed Details - setTimeout( - function() { - that.pagespeed(that.json.pagespeed); - }, - 450 - ); - - // Hide Ajax spinner - that.spinner.style.display = "none"; - }; - - // Request data via XHR or read from cache - - // Get timestamp from argument of function or from select box - var selector = document.getElementById("run_timestamp"), - timestamp; - - if (typeof(opt_ts) !== "undefined") { - timestamp = opt_ts; - - // Update select box - for (var i = 0, len = selector.options.length; i < len; i += 1 ) { - if (selector.options[i].value === opt_ts) { - selector.selectedIndex = i; - $("#run_timestamp").trigger("liszt:updated"); - } - } - } else { - timestamp = selector.options[selector.selectedIndex].text; - } - - this.URI = "runinfo?timestamp=" + timestamp; - - this.xhr = new XMLHttpRequest(); - - this.xhr.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - set_data(); - } - }; - - if (typeof(this.cache[this.URI]) === "undefined") { - this.xhr.open("GET", this.URI, true); - this.xhr.send(); - } else { - this.json = this.cache[this.URI]; - set_data(); - } -}; - -//Delete current run from set of test results -HARSTORAGE.RunInfo.prototype.del = function(id, mode, all) { - "use strict"; - - // - var answer = window.confirm("Are you sure?"); - - if (answer === true) { - var xhr = new XMLHttpRequest(); - - xhr.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - window.location = this.responseText; - } - }; - - var ts_selector = document.getElementById("run_timestamp"); - var timestamp = ts_selector.options[ts_selector.selectedIndex].text; - var URI = "deleterun?timestamp=" + timestamp; - URI += "&label=" + id; - URI += "&mode=" + mode; - URI += "&all=" + all; - - xhr.open("GET", URI, true); - xhr.send(); - } -}; - -// Add delay for async rendering -HARSTORAGE.RunInfo.prototype.changeVisibility = function () { - "use strict"; - - var del_btn = document.getElementById("del-btn"), - del_all_btn = document.getElementById("del-all-btn"), - newtab_btn = document.getElementById("newtab"); - - del_btn.style.display = "inline"; - del_all_btn.style.display = "inline"; - newtab_btn.style.display = "inline"; -}; - -HARSTORAGE.RunInfo.prototype.timedStyleChange = function () { - "use strict"; - - setTimeout(this.changeVisibility, 1000); -}; - -HARSTORAGE.RunInfo.prototype.addSpinner = function() { - "use strict"; - - // Spinner object - this.spinner = document.getElementById("spinner"); - new Spinner(HARSTORAGE.SpinnerOpts).spin(this.spinner); -}; - -/* - * Auto Height module - */ -HARSTORAGE.autoHeight = function() { - "use strict"; - - var iframe = document.getElementById("harviewer-iframe"); - iframe.height = iframe.contentDocument.body.offsetHeight; -}; - -/* - * Aggregated Statistics - */ -HARSTORAGE.AggregatedStatistics = function(id) { - "use strict"; - - // Determine metric type from Query string - var metric, - href; - - if (location.href.indexOf("metric") === -1) { - href = location.href + "&metric="; - metric = "Average"; - } else { - href = location.href.split("metric")[0] + "metric="; - metric = location.href.split("metric")[1].split("=")[1]; - - if (metric === "90th%20Percentile") { - metric = "90th Percentile"; - } - } - - // Update selector box active option - var selector = document.getElementById(id); - - for (var i = 0, len = selector.options.length; i < len; i += 1 ) { - if (selector.options[i].value === metric) { - selector.selectedIndex = i; - $("#" + id).trigger("liszt:updated"); - break; - } - } - - // Add event handler to selector box - selector.onchange = function() { - location.href = href + this.value; - }; -}; - -/* - * Superpose Form - */ -HARSTORAGE.SuperposeForm = function() { - "use strict"; - - // Pointer - var that = this; - - // Initialize cache - this.cache = {}; - - // Select box event handler - var selector = document.getElementById("step_1_label"); - selector.onchange = function() { - that.setTimestamps(this.name); - }; - - // Submit button event handler - var submit = document.getElementById("submit"); - submit.onclick = function() { - return that.submit(); - }; - - // Add button event handler - var add = document.getElementById("step_1_add"); - add.onclick = function() { - that.add(this); - }; - - // Delete button event handler - var del = document.getElementById("step_1_del"); - del.onclick = function() { - that.del(this); - }; - del.style.display = "none"; - - // Chart options - var checkbox = document.getElementById("column"); - checkbox.onclick = function() { - that.checkbox(this); - }; - - checkbox = document.getElementById("spline"); - checkbox.onclick = function() { - that.checkbox(this); - }; -}; - -// Form validation -HARSTORAGE.SuperposeForm.prototype.submit = function() { - "use strict"; - - var selectors = document.getElementsByTagName("select"); - - for (var i = 0, len = selectors.length/3; i < len; i += 1) { - var id = 1 + i*3; - - var start_ts = selectors.item(id).options[ selectors.item(id).options.selectedIndex ].value; - var end_ts = selectors.item(id+1).options[ selectors.item(id+1).options.selectedIndex ].value; - - if (end_ts < start_ts) { - window.alert("Invalid timestamps!"); - return false; - } - } - - var form = document.getElementById("superpose-form"); - form.onsubmit = "return true;"; - - return true; -}; - -// Add new step -HARSTORAGE.SuperposeForm.prototype.add = function(button) { - "use strict"; - - var i, - len, - prev_button; - - var that = this; - - // Find previous and new id - var prev_id = button.id.split("_")[0] + "_" + button.id.split("_")[1], - new_id = prev_id.split("_")[0] + "_" + ( parseInt ( prev_id.split("_")[1], 10) +1 ); - - // Add new line to container - var prev_div = document.getElementById(prev_id), - new_div = prev_div.cloneNode(true); - - new_div.setAttribute("id", new_id); - - var container = document.getElementById("container"); - container.appendChild(new_div); - - // Update name and id of selectors - var selectors = new_div.getElementsByTagName("select"); - - for (i = selectors.length; i -- ; ) { - switch (selectors.item(i).name) { - case prev_id + "_label": - selectors.item(i).name = new_id + "_label"; - selectors.item(i).id = new_id + "_label"; - selectors.item(i).onchange = function() { - that.setTimestamps(this.name); - }; - break; - case prev_id + "_start_ts": - selectors.item(i).name = new_id + "_start_ts"; - selectors.item(i).id = new_id + "_start_ts"; - break; - case prev_id + "_end_ts": - selectors.item(i).name = new_id + "_end_ts"; - selectors.item(i).id = new_id + "_end_ts"; - break; - default: - break; - } - } - - // Update inputs - var inputs = new_div.getElementsByTagName("input"); - - for (i = 0, len = inputs.length; i < len; i += 1) { - switch (inputs.item(i).id) { - case prev_id + "_add": - // Set new id - inputs.item(i).id = new_id + "_add"; - - // Hide previous button - prev_button = document.getElementById(prev_id + "_add"); - prev_button.style.display = "none"; - - // Set event handler - inputs.item(i).onclick = function() { - that.add(this); - }; - break; - case prev_id + "_del": - // Set new id - inputs.item(i).id = new_id + "_del"; - - // Hide previous button - prev_button = document.getElementById(prev_id + "_del"); - prev_button.style.display = "none"; - - // Show current button - inputs.item(i).style.display = "inline"; - - // Set event handler - inputs.item(i).onclick = function() { - that.del(this); - }; - break; - default: - break; - } - } - // Update head - var divs = new_div.getElementsByTagName("div"); - - for (i = 0, len = divs.length; i < len; i += 1) { - if (divs.item(i).id === prev_id + "_head" ) { - // New id - divs.item(i).id = new_id + "_head"; - - // New label - divs.item(i).innerHTML = "Set " + new_id.split("_")[1] + " >"; - } - } - - // Update timestamp - this.setTimestamps(new_id + "_label"); -}; - -// Delete selected step -HARSTORAGE.SuperposeForm.prototype.del = function(button) { - "use strict"; - - var prev_button; - - // Calculate id - var id = button.id.split("_")[0] + "_" + button.id.split("_")[1], - prev_id = button.id.split("_")[0] + "_" + (parseInt( button.id.split("_")[1], 10) - 1); - - // Get DIVs - var div = document.getElementById(id), - container = document.getElementById("container"); - - // Delete current line - container.removeChild(div); - - // Show previous button - prev_button = document.getElementById(prev_id + "_add"); - prev_button.style.display = "inline"; - - if (prev_id !== "step_1") { - prev_button = document.getElementById(prev_id + "_del"); - prev_button.style.display = "inline"; - } -}; - -// Set timelines for selected label -HARSTORAGE.SuperposeForm.prototype.setTimestamps = function(id) { - "use strict"; - - // Poiner - var that = this; - - // Dynamic data - this.dates = []; - - // Show Ajax spinner - this.spinner.style.display = "block"; - - // Update timestamps - var set_data = function() { - var i, - len, - ts; - - // Calculate id - id = id.split("_")[0] + "_" + id.split("_")[1]; - - // Hide Ajax spinner - that.spinner.style.display = "none"; - - // Update cache - if (typeof(that.cache[that.URI]) === "undefined") { - that.dates = that.xhr.responseText.split(";"); - that.cache[that.URI] = that.dates; - } else { - that.dates.reverse(); - } - - // Start timestamps - var select = document.getElementById(id + "_start_ts"); - select.options.length = 0; - - for (i = 0, len = that.dates.length; i < len; i += 1) { - ts = that.dates[i]; - select.options[i] = new Option(ts, ts, false, false); - } - - // End timestamps - select = document.getElementById(id + "_end_ts"); - select.options.length = 0; - that.dates.reverse(); - - for (i = 0, len = that.dates.length; i < len; i += 1) { - ts = that.dates[i]; - select.options[i] = new Option(ts, ts, false, false); - } - }; - - // Request data via XHR or read from cache - var select = document.getElementById(id); - var label = select.options[select.selectedIndex].text; - this.URI = "dates?label=" + label; - - this.xhr = new XMLHttpRequest(); - - this.xhr.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - set_data(); - } - }; - - if (typeof(this.cache[this.URI]) === "undefined") { - this.xhr.open("GET", this.URI, true); - this.xhr.send(); - } else { - this.dates = this.cache[this.URI]; - set_data(); - } -}; -// Add Ajax spinner -HARSTORAGE.SuperposeForm.prototype.addSpinner = function() { - "use strict"; - - this.spinner = document.getElementById("spinner"); - new Spinner(HARSTORAGE.SpinnerOpts).spin(this.spinner); -}; - -// Checkbox group -HARSTORAGE.SuperposeForm.prototype.checkbox = function(input) { - "use strict"; - - var id1 = "spline", - id2 = "column", - id; - - if (input.checked) { - id = (input.id === id1) ? id2 : id1; - var checkbox = document.getElementById(id); - checkbox.checked = false; - } -}; diff --git a/harstorage/public/scripts/harviewer/core/trace.js b/harstorage/public/scripts/harviewer/core/trace.js deleted file mode 100644 index bb0b2c8..0000000 --- a/harstorage/public/scripts/harviewer/core/trace.js +++ /dev/null @@ -1,26 +0,0 @@ -/* See license.txt for terms of usage */ - -require.def("core/trace", [ -], - -function() { - -//************************************************************************************************* - -var Trace = { - log: function(){}, - error: function(){}, - exception: function(){}, - time: function(){}, - timeEnd: function(){} -}; - -if (typeof(console) == "undefined") - return Trace; - - -return Trace; - -//************************************************************************************************* -}); - diff --git a/harstorage/public/scripts/harviewer/domplate/domplate.js b/harstorage/public/scripts/harviewer/domplate/domplate.js deleted file mode 100644 index 01f11d7..0000000 --- a/harstorage/public/scripts/harviewer/domplate/domplate.js +++ /dev/null @@ -1,263 +0,0 @@ - -require.def("domplate/domplate",[],function(){Domplate={};(function(){function DomplateTag(tagName) -{this.tagName=tagName;} -this.DomplateTag=DomplateTag;function DomplateEmbed() -{} -function DomplateLoop() -{} -var womb=null;var domplate=function() -{var lastSubject;for(var i=0;i":return">";case"&":return"&";case"'":return"'";case'"':return""";} -return"?";};return String(value).replace(/[<>&"']/g,replaceChars);} -function __loop__(iter,outputs,fn) -{var iterOuts=[];outputs.push(iterOuts);if(iter instanceof Array) -iter=new ArrayIterator(iter);try -{while(1) -{var value=iter.next();var itemOuts=[0,0];iterOuts.push(itemOuts);fn.apply(this,[value,itemOuts]);}} -catch(exc) -{if(exc!=StopIteration) -throw exc;}} -var js=$.browser.msie?'var f = '+fnBlock.join("")+';f':fnBlock.join("");this.renderMarkup=eval(js);},getVarNames:function(args) -{if(this.vars) -args.push.apply(args,this.vars);for(var i=0;i"');this.generateChildMarkup(topBlock,topOuts,blocks,info);topBlock.push(',""');},generateChildMarkup:function(topBlock,topOuts,blocks,info) -{for(var i=0;i=array.length) -throw StopIteration;return array[index];};} -function StopIteration(){} -this.$break=function() -{throw StopIteration;};var Renderer={renderHTML:function(args,outputs,self) -{var code=[];var markupArgs=[code,this.tag.context,args,outputs];markupArgs.push.apply(markupArgs,this.tag.markupArgs);this.tag.renderMarkup.apply(self?self:this.tag.subject,markupArgs);return code.join("");},insertRows:function(args,before,self) -{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var doc=before.ownerDocument;var tableParent=doc.createElement("div");tableParent.innerHTML=""+html+"
      ";var tbody=tableParent.firstChild.firstChild;var parent=before.tagName.toLowerCase()=="tr"?before.parentNode:before;var after=before.tagName.toLowerCase()=="tr"?before.nextSibling:null;var firstRow=tbody.firstChild,lastRow;while(tbody.firstChild) -{lastRow=tbody.firstChild;if(after) -parent.insertBefore(lastRow,after);else -parent.appendChild(lastRow);} -var offset=0;if(this.tag.isLoop) -{var node=firstRow.parentNode.firstChild;for(;node&&node!=firstRow;node=node.nextSibling) -++offset;} -var domArgs=[firstRow,this.tag.context,offset];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return[firstRow,lastRow];},insertAfter:function(args,before,self) -{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var doc=before.ownerDocument;var range=doc.createRange();range.selectNode(doc.body);var frag=range.createContextualFragment(html);var root=frag.firstChild;if(before.nextSibling) -before.parentNode.insertBefore(frag,before.nextSibling);else -before.parentNode.appendChild(frag);var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:(this.tag.subject?this.tag.subject:null),domArgs);return root;},replace:function(args,parent,self) -{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var root;if(parent.nodeType==1) -{parent.innerHTML=html;root=parent.firstChild;} -else -{if(!parent||parent.nodeType!=9) -parent=document;if(!womb||womb.ownerDocument!=parent) -womb=parent.createElement("div");womb.innerHTML=html;root=womb.firstChild;} -var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return root;},append:function(args,parent,self) -{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);if(!womb||womb.ownerDocument!=parent.ownerDocument) -womb=parent.ownerDocument.createElement("div");womb.innerHTML=html;var root=womb.firstChild;while(womb.firstChild) -parent.appendChild(womb.firstChild);var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return root;},insertCols:function(args,parent,self) -{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var womb=parent.ownerDocument.createElement("div");womb.innerHTML=""+html+"
      ";womb=womb.firstChild.firstChild.firstChild;var firstCol=womb.firstChild;if(!firstCol) -return null;while(womb.firstChild) -parent.appendChild(womb.firstChild);var offset=0;if(this.tag.isLoop) -{var node=firstCol.parentNode.firstChild;for(;node&&node!=firstCol;node=node.nextSibling) -++offset;} -var domArgs=[firstCol,this.tag.context,offset];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return firstCol;}};function defineTags() -{for(var i=0;i=a.top&&c<=a.top+a.height&&b>=a.left&&b<=a.left+a.width},b.cloneArray=function(a,b){var c=[];if(b)for(var d=0;d2?2:b,b=b<-1?-1:b;if(b==-1)return a+" B";var c=Math.pow(10,b);return a==-1||a==undefined?"?":a==0?"0":a<1024?a+" B":a<1048576?Math.round(a/1024*c)/c+" KB":Math.round(a/1048576*c)/c+" MB"},b.formatTime=function(a){return a==-1?"-":a<1e3?a+"ms":a<6e4?Math.ceil(a/10)/100+"s":Math.ceil(a/6e4*100)/100+"m"},b.formatNumber=function(a){a+="";var b=a.split("."),c=b[0],d=b.length>1?"."+b[1]:"",e=/(\d+)(\d{3})/;while(e.test(c))c=c.replace(e,"$1 $2");return c+d},b.formatString=function(a){var c=b.cloneArray(arguments),a=c.shift();for(var d=0;d0?"-":"+")+b(Math.abs(e))+":"+b(Math.abs(f));return c+g},b.getFileName=function(c){try{var d=b.splitURLBase(c);return d.name}catch(e){a.log(unescape(c))}return c},b.getFileExtension=function(a){if(!a)return null;var b=a.indexOf("?");b!=-1&&(a=a.substr(0,b));var c=a.lastIndexOf(".");return a.substr(c+1)},b.splitURLBase=function(a){if(b.isDataURL(a))return b.splitDataURL(a);return b.splitURLTrue(a)},b.isDataURL=function(a){return a&&a.substr(0,5)=="data:"},b.splitDataURL=function(a){var c=a.indexOf(":",3);if(c!=4)return!1;var d=a.indexOf(",",c+1);if(d"+l}else e.name=k.name,e.path=k.path}else e.hasOwnProperty("path")||(e.path="data:"),e.hasOwnProperty("name")||(e.name=decodeURIComponent(e.encodedContent.substr(0,200)).replace(/\s*$/,""));return e},b.splitURLTrue=function(a){var b=/:\/{1,3}(.*?)\/([^\/]*?)\/?($|\?.*)/,c=b.exec(a);return c?c[2]?{path:c[1],name:c[2]+c[3]}:{path:c[1],name:c[1]}:{name:a,path:a}},b.getURLParameter=function(a){var b=window.location.search.substring(1),c=b.split("&");for(var d=0;dd&&!c&&(k=b.$STR("LargeData")),e.push({name:f(j),value:f(k)})}else{var j=g[h];e.push({name:f(j),value:""})}}catch(l){}e.sort(function(a,b){return a.name<=b.name?-1:1});return e},b.getBody=function(a){if(a.body)return a.body;var b=a.getElementsByTagName("body")[0];if(b)return b;return null},b.getHead=function(a){return a.getElementsByTagName("head")[0]},b.getAncestorByClass=function(a,c){for(var d=a;d;d=d.parentNode)if(b.hasClass(d,c))return d;return null},b.$=function(){return b.getElementByClass.apply(this,arguments)},b.getElementByClass=function(a,c){if(!a)return null;var d=b.cloneArray(arguments);d.splice(0,1);for(var e=a.firstChild;e;e=e.nextSibling){var f=b.cloneArray(d);f.unshift(e);if(b.hasClass.apply(this,f))return e;var g=b.getElementByClass.apply(this,f);if(g)return g}return null},b.getElementsByClass=function(a,c){function f(a,c,d){for(var e=a.firstChild;e;e=e.nextSibling){var g=b.cloneArray(c);g.unshift(e),b.hasClass.apply(null,g)&&d.push(e),f(e,c,d)}}if(a.querySelectorAll){var d=b.cloneArray(arguments);d.shift();var e="."+d.join(".");return a.querySelectorAll(e)}var g=[],d=b.cloneArray(arguments);d.shift(),f(a,d,g);return g},b.getChildByClass=function(a){for(var c=1;c=0){var d=b.length;a.className=a.className.substr(0,c-1)+a.className.substr(c+d)}}},b.toggleClass=function(a,c){if(b.hasClass(a,c)){b.removeClass(a,c);return!1}b.setClass(a,c);return!0},b.setClassTimed=function(a,c,d){d||(d=1300),a.__setClassTimeout?clearTimeout(a.__setClassTimeout):b.setClass(a,c),a.__setClassTimeout=setTimeout(function(){delete a.__setClassTimeout,b.removeClass(a,c)},d)},b.trim=function(a){return a.replace(/^\s*|\s*$/g,"")},b.wrapText=function(a,c){var d=/[^A-Za-z_$0-9'"-]/,e=[],f=100,g=b.splitLines(a);for(var h=0;hf){var j=d.exec(i.substr(f,100)),k=f+(j?j.index:0),l=i.substr(0,k);i=i.substr(k),c||e.push("

      "),e.push(c?l:b.escapeHTML(l)),c||e.push("
      ")}c||e.push("
      "),e.push(c?i:b.escapeHTML(i)),c||e.push("
      ")}return e.join(c?"\n":"")},b.insertWrappedText=function(a,c,d){c.innerHTML="
      "+b.wrapText(a,d)+"
      "},b.splitLines=function(a){var b=/\r\n|\r|\n/;if(!a)return[];if(a.split)return a.split(b);var c=a+"",d=c.split(b);return d},b.getPrettyDomain=function(a){var b=/[^:]+:\/{1,3}(www\.)?([^\/]+)/.exec(a);return b?b[2]:""},b.escapeHTML=function(a){function b(a){switch(a){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case'"':return"""}return"?"}return String(a).replace(/[<>&"']/g,b)},b.cropString=function(a,c){a=a+"";if(c)var d=c/2;else var d=50;return a.length>c?b.escapeNewLines(a.substr(0,d)+"..."+a.substr(a.length-d)):b.escapeNewLines(a)},b.escapeNewLines=function(a){return a.replace(/\r/g,"\\r").replace(/\n/g,"\\n")},b.cloneJSON=function(b){if(b==null||typeof b!="object")return b;try{var c=b.constructor();for(var d in b)c[d]=cloneJSON(b[d]);return c}catch(e){a.exception(b)}return null},b.getOverflowParent=function(a){for(var b=a.parentNode;b;b=b.offsetParent)if(b.scrollHeight>b.offsetHeight)return b},b.getElementBox=function(a){var c={};if(a.getBoundingClientRect){var d=a.getBoundingClientRect(),e=b.isIE?document.body.clientTop||document.documentElement.clientTop:0,f=b.getWindowScrollPosition();c.top=Math.round(d.top-e+f.top),c.left=Math.round(d.left-e+f.left),c.height=Math.round(d.bottom-d.top),c.width=Math.round(d.right-d.left)}else{var g=b.getElementPosition(a);c.top=g.top,c.left=g.left,c.height=a.offsetHeight,c.width=a.offsetWidth}return c},b.getElementPosition=function(a){var b=0,c=0;do b+=a.offsetLeft,c+=a.offsetTop;while(a=a.offsetParent);return{left:b,top:c}},b.getWindowSize=function(){var a=0,b=0,c;typeof window.innerWidth=="number"?(a=window.innerWidth,b=window.innerHeight):(c=document.documentElement)&&(c.clientHeight||c.clientWidth)?(a=c.clientWidth,b=c.clientHeight):(c=document.body)&&(c.clientHeight||c.clientWidth)&&(a=c.clientWidth,b=c.clientHeight);return{width:a,height:b}},b.getWindowScrollSize=function(){var a=0,c=0,d;!b.isIEQuiksMode&&(d=document.documentElement)&&(d.scrollHeight||d.scrollWidth)&&(a=d.scrollWidth,c=d.scrollHeight),(d=document.body)&&(d.scrollHeight||d.scrollWidth)&&(d.scrollWidth>a||d.scrollHeight>c)&&(a=d.scrollWidth,c=d.scrollHeight);return{width:a,height:c}},b.getWindowScrollPosition=function(){var a=0,b=0,c;typeof window.pageYOffset=="number"?(a=window.pageYOffset,b=window.pageXOffset):(c=document.body)&&(c.scrollTop||c.scrollLeft)?(a=c.scrollTop,b=c.scrollLeft):(c=document.documentElement)&&(c.scrollTop||c.scrollLeft)&&(a=c.scrollTop,b=c.scrollLeft);return{top:a,left:b}},b.scrollIntoCenterView=function(a,c,d,e){if(a){c||(c=b.getOverflowParent(a));if(!c)return;var f=b.getClientOffset(a);if(!e){var g=f.y-c.scrollTop,h=c.scrollTop+c.clientHeight-(f.y+a.offsetHeight);if(g<0||h<0){var i=f.y-c.clientHeight/2;c.scrollTop=i}}if(!d){var j=f.x-c.scrollLeft,k=c.scrollLeft+c.clientWidth-(f.x+a.clientWidth);if(j<0||k<0){var l=f.x-c.clientWidth/2;c.scrollLeft=l}}}},b.getClientOffset=function(a){function b(a,c,d){var e=a.offsetParent,f=d.getComputedStyle(a,"");a.offsetLeft&&(c.x+=a.offsetLeft+parseInt(f.borderLeftWidth)),a.offsetTop&&(c.y+=a.offsetTop+parseInt(f.borderTopWidth)),e?e.nodeType==1&&b(e,c,d):a.ownerDocument.defaultView.frameElement&&b(a.ownerDocument.defaultView.frameElement,c,a.ownerDocument.defaultView)}var c={x:0,y:0};if(a){var d=a.ownerDocument.defaultView;b(a,c,d)}return c},b.addStyleSheet=function(a,c){if(!a.getElementById(c)){var d=a.createElement("link");d.type="text/css",d.rel="stylesheet",d.href=c,d.setAttribute("id",c);var e=b.getHead(a);e.appendChild(d)}},b.selectElementText=function(a,b,c){var d=window,e=d.document;if(d.getSelection&&e.createRange){var f=d.getSelection(),g=e.createRange();g.setStart(a,b),g.setEnd(a,c),f.removeAllRanges(),f.addRange(g)}else e.body.createTextRange&&(g=e.body.createTextRange(),g.moveToElementText(a),g.select())};return b}),require.def("core/cookies",["core/lib"],function(a){var b={getCookie:function(b){var c=document.cookie.split(";");for(var d=0;d-1&&(q=c[b]);b--){d=a[q];if(d===!0||d===1)d=e(j+q+"/"+l);require.mixin(o,d)}f(o)})})}})}(),define("nls/requestList",{root:{fromCache:"From Cache",menuBreakLayout:"Break Timeline Layout",menuOpenRequestInWindow:"Open Request in New Window",menuOpenResponseInWindow:"Open Response in New Window",request:"Request",requests:"Requests",tooltipSize:"%S (%S bytes)",tooltipZippedSize:"%S (%S bytes) - compressed",tooltipUnzippedSize:"%S (%S bytes) - uncompressed",unknownSize:"Unknown size","request.Started":"Request start time since the beginning","request.phases.label":"Request phases start and elapsed time relative to the request start:","request.phase.Resolving":"DNS Lookup","request.phase.Connecting":"Connecting","request.phase.Blocking":"Blocking","request.phase.Sending":"Sending","request.phase.Waiting":"Waiting","request.phase.Receiving":"Receiving","request.timings.label":"Event timing relative to the request start:",ContentLoad:"DOM Loaded",WindowLoad:"Page Loaded","page.event.Load":"Page Loaded",menuBreakTimeline:"Break Timeline Layout",menuOpenRequest:"Open Request in New Window",menuOpenResponse:"Open Response in New Window"}}),require.def("preview/jsonSchema",[],function(){var a={validate:function(a,b){return this._validate(a,b,!1)},checkPropertyChange:function(a,b,c){return this._validate(a,b,c||"property")},_validate:function(a,b,c){function f(a,b,f,g){if(typeof b=="object"){(typeof a!="object"||a instanceof Array)&&d.push({property:f,message:"an object is required"});for(var h in b)if(b.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")){var i=a[h],j=b[h];e(i,j,f,h)}}for(h in a){a.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")&&b&&!b[h]&&g===!1&&d.push({property:f,message:typeof i+"The property "+h+" is not defined in the schema and the schema does not allow additional properties"});var k=b&&b[h]&&b[h].requires;k&&!(k in a)&&d.push({property:f,message:"the presence of the property "+h+" requires that "+k+" also be present"}),i=a[h],b&&typeof b=="object"&&!(h in b)&&e(i,g,f,h),!c&&i&&i.$schema&&(d=d.concat(e(i,i.$schema,f,h)))}return d}function e(a,b,g,h){function k(a,b){if(a){if(typeof a=="string"&&a!="any"&&(a=="null"?b!==null:typeof b!=a)&&!(b instanceof Array&&a=="array")&&(a!="integer"||b%1!==0))return[{property:g,message:typeof b+" value found, but a "+a+" is required"}];if(a instanceof Array){var c=[];for(var f=0;fb.maxItems&&j("There must be a maximum of "+b.maxItems+" in the array")}else b.properties&&d.concat(f(a,b.properties,g,b.additionalProperties));b.pattern&&typeof a=="string"&&!a.match(b.pattern)&&j("does not match the regex pattern "+b.pattern),b.maxLength&&typeof a=="string"&&a.length>b.maxLength&&j("may only be "+b.maxLength+" characters long"),b.minLength&&typeof a=="string"&&a.lengtha&&j("must have a minimum value of "+b.minimum),typeof b.maximum!==undefined&&typeof a==typeof b.maximum&&b.maximum=32&&b<127||b==10||b==13)return a.charAt(0);var c=b.toString(16).toUpperCase();while(c.length<4)c="0"+c;return"\\u"+c}).join("");return a}function g(){this.input=null}g.prototype={append:function(a){{if(a){if(this.input){if(!a.log.pages){f.error("Import of additional data without a page is not yet supported.");return null}for(var b=0;b0?a[0]:null},getPageEntries:function(a){return g.getPageEntries(this.input,a)},getAllEntries:function(a){return this.input?this.input.log.entries:[]},getParentPage:function(a){return g.getParentPage(this.input,a)},importPage:function(a,b){var c=this.getUniquePageID(a.id),d=a.id;a.id=c,this.input.log.pages.push(a);for(var e=0;e0)&&h.length>0)return this.loadRemoteArchive(h,f,b,c);var j=a.getURLParameter("path");if(j)return this.loadLocalArchive(j,b,c)},loadExample:function(a,b){var c=document.location.href,d=c.indexOf("?");document.location=c.substr(0,d)+"?path="+a,e.setCookie("timeline",!0),e.setCookie("stats",!0)},loadLocalArchive:function(a,b,c){$.ajax({url:a,context:this,success:function(a){b(a)},error:function(a,b){c(a,b)}});return!0},loadRemoteArchive:function(a,b,c,d){if(!a.length)return!1;var e=a.shift();b||(b="onInputData"),$.ajax({url:e,context:this,dataType:"jsonp",jsonp:"callback",jsonpCallback:b,success:function(e){c&&c(e);if(a.length){var f=this;setTimeout(function(){f.loadRemoteArchive(a,b,c,d)},300)}},error:function(a,b){d&&d(a,b)}});return!0},load:function(a,b,c,d,e,f){function h(b,c){a.onLoadError&&a.onLoadError(b,c),f&&f.call(a,b,c)}function g(b){a.appendPreview&&a.appendPreview(b),e&&e.call(a,b)}return c?this.loadRemoteArchive([b],d,g,h):this.loadLocalArchive(b,g,h)}};return g}),define("nls/requestBody",{root:{RequestHeaders:"Request Headers",ResponseHeaders:"Response Headers",RequestCookies:"Request Cookies",ResponseCookies:"Response Cookies",URLParameters:"Params",Headers:"Headers",Post:"Post",Put:"Put",Cookies:"Cookies",Response:"Response",Cache:"Cache",HTML:"HTML",DataURL:"Data URL"}}),require.def("domplate/tabView",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var TabViewTempl=domplate({tag:TABLE({"class":"tabView",cellpadding:0,cellspacing:0,_repObject:"$tabView"},TBODY(TR({"class":"tabViewRow"},TD({"class":"tabViewCol",valign:"top"},TAG("$tabList",{tabView:"$tabView"}))))),tabList:DIV({"class":"tabViewBody",onclick:"$onClickTab"},DIV({"class":"$tabView.id\\Bar tabBar"}),DIV({"class":"$tabView.id\\Bodies tabBodies"})),tabHeaderTag:A({"class":"$tab.id\\Tab tab",view:"$tab.id",_repObject:"$tab"},"$tab.label"),tabBodyTag:DIV({"class":"tab$tab.id\\Body tabBody",_repObject:"$tab"}),hideTab:function(a){return!1},onClickTab:function(a){var b=Lib.fixEvent(a),c=this.getTabView(b.target);c.onClickTab(b)},getTabView:function(a){var b=Lib.getAncestorByClass(a,"tabView");return b.repObject}});function TabView(a){this.id=a,this.tabs=[],this.listeners=[],this.tabBarVisibility=!0}TabView.prototype={appendTab:function(a){this.tabs.push(a),a.tabView=this;return a},removeTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a){this.tabs.splice(b,1);break}}},getTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a)return c}},selectTabByName:function(a){var b=Lib.getElementByClass(this.element,a+"Tab");b&&this.selectTab(b)},showTabBar:function(a){this.element?a?this.element.removeAttribute("hideTabBar"):this.element.setAttribute("hideTabBar","true"):this.tabBarVisibility=a},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)},onClickTab:function(a){var b=Lib.getAncestorByClass(a.target,"tab");b&&this.selectTab(b)},selectTab:function(a){if(Lib.hasClass(a,"tab")){if(Lib.hasClass(a,"selected"))return;var b=a.getAttribute("view");if(!b)return;var c=Lib.getAncestorByClass(a,"tabViewBody");c.selectedTab&&(c.selectedTab.removeAttribute("selected"),c.selectedBody.removeAttribute("selected"),Lib.removeClass(c.selectedTab,"selected"),Lib.removeClass(c.selectedBody,"selected"));var d=Lib.getElementByClass(c,"tab"+b+"Body");d||Trace.error("TabView.selectTab; Missing tab body",a),c.selectedTab=a,c.selectedBody=d,c.selectedTab.setAttribute("selected","true"),c.selectedBody.setAttribute("selected","true"),Lib.setClass(c.selectedBody,"selected"),Lib.setClass(c.selectedTab,"selected"),this.updateTabBody(c,b)}},updateTabBody:function(a,b){var c=a.selectedTab.repObject;if(!c._body._updated){c._body._updated=!0,c.bodyTag&&c.bodyTag.replace({tab:c},c._body),c&&c.onUpdateBody&&c.onUpdateBody(this,c._body);for(var d=0;dAbout...

      dp.SyntaxHighlighter

      Version: {V}

      http://www.dreamprojections.com/syntaxhighlighter

      ©2004-2007 Alex Gorbatchev.
      '},ClipboardSwf:null,Version:"1.5.1"}};a.SyntaxHighlighter=a.sh,a.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function(a){return a.collapse},func:function(a,b){a.parentNode.removeChild(a),b.div.className=b.div.className.replace("collapsed","")}},ViewSource:{label:"view plain",func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/'+d+""),e.document.close()}},CopyToClipboard:{label:"copy to clipboard",check:function(){return window.clipboardData!=null||a.sh.ClipboardSwf!=null},func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");if(window.clipboardData)window.clipboardData.setData("text",d);else if(a.sh.ClipboardSwf!=null){var e=c.flashCopier;e==null&&(e=document.createElement("div"),c.flashCopier=e,c.div.appendChild(e)),e.innerHTML=''}alert("The code is in your clipboard now")}},PrintSource:{label:"print",func:function(b,c){var d=document.createElement("IFRAME"),e=null;d.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;",document.body.appendChild(d),e=d.contentWindow.document,a.sh.Utils.CopyStyles(e,window.document),e.write('
      '+c.div.innerHTML+"
      "),e.close(),d.contentWindow.focus(),d.contentWindow.print(),alert("Printing..."),document.body.removeChild(d)}},About:{label:"?",func:function(b){var c=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"),d=c.document;a.sh.Utils.CopyStyles(d,window.document),d.write(a.sh.Strings.AboutDialog.replace("{V}",a.sh.Version)),d.close(),c.focus()}}},a.sh.Toolbar.Create=function(b){var c=document.createElement("DIV");c.className="tools";for(var d in a.sh.Toolbar.Commands){var e=a.sh.Toolbar.Commands[d];if(e.check!=null&&!e.check(b))continue;c.innerHTML+='"+e.label+""}return c},a.sh.Toolbar.Command=function(b,c){var d=c;while(d!=null&&d.className.indexOf("dp-highlighter")==-1)d=d.parentNode;d!=null&&a.sh.Toolbar.Commands[b].func(c,d.highlighter)},a.sh.Utils.CopyStyles=function(a,b){var c=b.getElementsByTagName("link");for(var d=0;d')},a.sh.Utils.FixForBlogger=function(b){return a.sh.isBloggerMode==!0?b.replace(/|<br\s*\/?>/gi,"\n"):b},a.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"',"g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'","g")},a.sh.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c},a.sh.Highlighter=function(){this.noGutter=!1,this.addControls=!0,this.collapse=!1,this.tabsToSpaces=!0,this.wrapColumn=80,this.showColumns=!0},a.sh.Highlighter.SortCallback=function(a,b){if(a.indexb.index)return 1;if(a.lengthb.length)return 1;return 0},a.sh.Highlighter.prototype.CreateElement=function(a){var b=document.createElement(a);b.highlighter=this;return b},a.sh.Highlighter.prototype.GetMatches=function(b,c){var d=0,e=null;while((e=b.exec(this.code))!=null)this.matches[this.matches.length]=new a.sh.Match(e[0],e.index,c)},a.sh.Highlighter.prototype.AddBit=function(a,b){if(a!=null&&a.length!=0){var c=this.CreateElement("SPAN");a=a.replace(/ /g," "),a=a.replace(/");if(b!=null)if(/br/gi.test(a)){var d=a.split(" 
      ");for(var e=0;ec.index&&a.index/gi,"\n"),c=b.split("\n");this.addControls==!0&&this.bar.appendChild(a.sh.Toolbar.Create(this));if(this.showColumns){var d=this.CreateElement("div"),e=this.CreateElement("div"),f=10,g=1;while(g<=150)g%f==0?(d.innerHTML+=g,g+=(g+"").length):(d.innerHTML+="·",g++);e.className="columns",e.appendChild(d),this.bar.appendChild(e)}for(var g=0,h=this.firstLine;g0;h++){if(c(d[h]).length==0)continue;var i=f.exec(d[h]);i!=null&&i.length>0&&(g=Math.min(i[0].length,g))}if(g>0)for(var h=0;h0&&c.appendTab(new HeadersTab(b)),b.request.queryString&&b.request.queryString.length&&c.appendTab(new ParamsTab(b)),b.request.postData&&c.appendTab(new SentDataTab(b,b.request.method)),b.response.content.text&&b.response.content.text.length>0&&c.appendTab(new ResponseTab(b)),this.showCache(b)&&c.appendTab(new CacheTab(b)),this.showHtml(b)&&c.appendTab(new HtmlTab(b)),this.showDataURL(b)&&c.appendTab(new DataURLTab(b));var d=c.render(a);c.tabs.length>0&&c.selectTabByName(c.tabs[0].id);return d},showCache:function(a){if(!a.cache)return!1;if(!a.cache.afterRequest)return!1;if(a.category=="image")return!1;return!0},showHtml:function(a){return a.response.content.mimeType=="text/html"||a.mimeType=="application/xhtml+xml"},showDataURL:function(a){return a.request.url.indexOf("data:")==0}});function HeadersTab(a){this.file=a}HeadersTab.prototype=domplate(TabView.Tab.prototype,{id:"Headers",label:Strings.Headers,bodyTag:TABLE({"class":"netInfoHeadersText netInfoText netInfoHeadersTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.ResponseHeaders))),TR({"class":"netInfoRequestHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.RequestHeaders))))),headerDataTag:FOR("param","$headers",TR(TD({"class":"netInfoParamName"},"$param.name"),TD({"class":"netInfoParamValue"},PRE("$param|getParamValue")))),getParamValue:function(a){return Lib.wrapText(a.value,!0)},onUpdateBody:function(a,b){this.file.response.headers&&this.insertHeaderRows(b,this.file.response.headers,"Headers","ResponseHeaders"),this.file.request.headers&&this.insertHeaderRows(b,this.file.request.headers,"Headers","RequestHeaders")},insertHeaderRows:function(a,b,c,d){var e=Lib.getElementByClass(a,"netInfo"+c+"Table"),f=Lib.getElementByClass(e,"netInfo"+d+"Title");b.length?(this.headerDataTag.insertRows({headers:b},f?f:a),Lib.removeClass(f,"collapsed")):Lib.setClass(f,"collapsed")}});function ResponseTab(a){this.file=a}ResponseTab.prototype=domplate(TabView.Tab.prototype,{id:"Response",label:Strings.Response,bodyTag:DIV({"class":"netInfoResponseText netInfoText"},PRE({"class":"javascript:nocontrols:nogutter:",name:"code"})),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoResponseText");if(this.file.category=="image"){Lib.clearNode(c);var d=b.ownerDocument.createElement("img");d.src=this.file.href,c.appendChild(d,c)}else{Lib.clearNode(c.firstChild);var e=this.file.response.content.text,f=this.file.response.content.mimeType;f=="application/javascript"||f=="text/javascript"||f=="application/x-javascript"||f=="text/ecmascript"||f=="application/ecmascript"?(c.firstChild.innerHTML=e,dp.SyntaxHighlighter.HighlightAll(c.firstChild)):Lib.insertWrappedText(e,c.firstChild)}}});function ParamsTab(a){this.file=a}ParamsTab.prototype=domplate(HeadersTab.prototype,{id:"Params",label:Strings.URLParameters,bodyTag:TABLE({"class":"netInfoParamsText netInfoText netInfoParamsTable",cellpadding:0,cellspacing:0},TBODY()),onUpdateBody:function(a,b){if(this.file.request.queryString){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,this.file.request.queryString,"Params")}}});function SentDataTab(a,b){b=b.charAt(0).toUpperCase()+b.slice(1).toLowerCase(),this.file=a,this.id=b,this.label=Strings[b]}SentDataTab.prototype=domplate(HeadersTab.prototype,{bodyTag:DIV({"class":"netInfo$tab.id\\Text netInfoText"},TABLE({"class":"netInfo$tab.id\\Table",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){var c=this.file.request.postData;if(c){var d=Lib.getElementByClass(b,"netInfo"+this.id+"Text");c.mimeType=="application/x-www-form-urlencoded"?this.insertHeaderRows(d,c.params,this.id):Lib.insertWrappedText(c.text,d)}}});function CookiesTab(a){this.file=a}CookiesTab.prototype=domplate(HeadersTab.prototype,{id:"Cookies",label:Strings.Cookies,bodyTag:DIV({"class":"netInfoCookiesText netInfoText"},TABLE({"class":"netInfoCookiesTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.ResponseCookies))),TR({"class":"netInfoRequestCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.RequestCookies)))))),onUpdateBody:function(a,b){if(file.response.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.response.cookies,"Cookies","ResponseCookies")}if(file.request.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.request.cookies,"Cookies","RequestCookies")}}});function CacheTab(a){this.file=a}CacheTab.prototype=domplate(HeadersTab.prototype,{id:"Cache",label:Strings.Cache,bodyTag:DIV({"class":"netInfoCacheText netInfoText"},TABLE({"class":"netInfoCacheTable",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){if(this.file.cache&&this.file.cache.afterRequest){var c=this.file.cache.afterRequest,d=[];for(var e in c)d.push({name:e,value:c[e]});this.insertHeaderRows(b,d,"Cache")}}});function HtmlTab(a){this.file=a}HtmlTab.prototype=domplate(HeadersTab.prototype,{id:"HTML",label:Strings.HTML,bodyTag:DIV({"class":"netInfoHtmlText netInfoText"},IFRAME({"class":"netInfoHtmlPreview",onload:"$onLoad"}),DIV({"class":"htmlPreviewResizer"})),onUpdateBody:function(a,b){this.preview=Lib.getElementByClass(b,"netInfoHtmlPreview");var c=parseInt(Cookies.getCookie("htmlPreviewHeight"));isNaN(c)||(this.preview.style.height=c+"px");var d=Lib.getElementByClass(b,"htmlPreviewResizer");this.resizer=new DragDrop.Tracker(d,{onDragStart:Lib.bind(this.onDragStart,this),onDragOver:Lib.bind(this.onDragOver,this),onDrop:Lib.bind(this.onDrop,this)})},onLoad:function(a){var b=Lib.fixEvent(a),c=Lib.getAncestorByClass(b.target,"tabHTMLBody").repObject;c.preview.contentWindow.document.body.innerHTML=c.file.response.content.text},onDragStart:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.setAttribute("resizingHtmlPreview","true"),this.startHeight=this.preview.clientHeight},onDragOver:function(a,b){var c=this.startHeight+a.y;this.preview.style.height=c+"px",Cookies.setCookie("htmlPreviewHeight",c)},onDrop:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.removeAttribute("resizingHtmlPreview")}});function DataURLTab(a){this.file=a}DataURLTab.prototype=domplate(HeadersTab.prototype,{id:"DataURL",label:Strings.DataURL,bodyTag:DIV({"class":"netInfoDataURLText netInfoText"}),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoDataURLText"),d=this.file.request.url;if(d.indexOf("data:image")==0){var e=b.ownerDocument.createElement("img");e.src=d,c.appendChild(e)}else Lib.insertWrappedText(unescape(d),c)}});return RequestBody}}),require.def("domplate/infoTip",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var InfoTip=Lib.extend({listeners:[],maxWidth:100,maxHeight:80,infoTipMargin:10,infoTipWindowPadding:25,tags:domplate({infoTipTag:DIV({"class":"infoTip"})}),initialize:function(){if(!$.browser.msie){var a=$("body");a.bind("mouseover",Lib.bind(this.onMouseMove,this)),a.bind("mouseout",Lib.bind(this.onMouseOut,this)),a.bind("mousemove",Lib.bind(this.onMouseMove,this));return this.infoTip=this.tags.infoTipTag.append({},Lib.getBody(document))}},showInfoTip:function(a,b,c,d,e,f){var g=Lib.getOverflowParent(b),h=c+(g?g.scrollLeft:0),i=Lib.dispatch2(this.listeners,"showInfoTip",[a,b,h,d,e,f]);if(i){var j=a.ownerDocument.documentElement,k=j.clientWidth,l=j.clientHeight;c+a.offsetWidth+this.infoTipMargin>k-this.infoTipWindowPadding?(a.style.left="auto",a.style.right=k-c+this.infoTipMargin+"px"):(a.style.left=c+this.infoTipMargin+"px",a.style.right="auto"),d+a.offsetHeight+this.infoTipMargin>l?(a.style.top=Math.max(0,l-(a.offsetHeight+this.infoTipMargin))+"px",a.style.bottom="auto"):(a.style.top=d+this.infoTipMargin+"px",a.style.bottom="auto"),a.setAttribute("active","true")}else this.hideInfoTip(a)},hideInfoTip:function(a){a&&a.removeAttribute("active")},onMouseOut:function(a){a.relatedTarget||this.hideInfoTip(this.infoTip)},onMouseMove:function(a){this.infoTip.setAttribute("multiline",!1);var b=a.clientX,c=a.clientY;this.showInfoTip(this.infoTip,a.target,b,c,a.rangeParent,a.rangeOffset)},populateTimingInfoTip:function(a,b){this.tags.colorTag.replace({rgbValue:b},a);return!0},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)}});InfoTip.initialize();return InfoTip}}),require.def("domplate/popupMenu",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var Controller={controllers:[],controllerContext:{label:"controller context"},initialize:function(a){this.controllers=[],this.controllerContext=a||this.controllerContext},shutdown:function(){this.removeControllers()},addController:function(){for(var a=0,b;b=arguments[a];a++){typeof b[0]=="string"&&(b[0]=$$(b[0],this.controllerContext));var c=b[2];b[2]=Lib.bind(c,this),b[3]=c,this.controllers.push(b),Lib.addEventListener.apply(this,b)}},removeController:function(){for(var a=0,b;b=arguments[a];a++)for(var c=0,d;d=this.controllers[c];c++)b[0]==d[0]&&b[1]==d[1]&&b[2]==d[3]&&Lib.removeEventListener.apply(this,d)},removeControllers:function(){for(var a=0,b;b=this.controllers[a];a++)Lib.removeEventListener.apply(this,b)}},menuItemProps={"class":"$item.className",type:"$item.type",value:"$item.value",_command:"$item.command"};Lib.isIE6&&(menuItemProps.href="javascript:void(0)");var MenuPlate=domplate({tag:DIV({"class":"popupMenu popupMenuShadow"},DIV({"class":"popupMenuContent popupMenuShadowContent"},FOR("item","$object.items|memberIterator",TAG("$item.tag",{item:"$item"})))),itemTag:A(menuItemProps,"$item.label"),checkBoxTag:A(Lib.extend(menuItemProps,{checked:"$item.checked"}),"$item.label"),radioButtonTag:A(Lib.extend(menuItemProps,{selected:"$item.selected"}),"$item.label"),groupTag:A(Lib.extend(menuItemProps,{child:"$item.child"}),"$item.label"),shortcutTag:A(menuItemProps,"$item.label",SPAN({"class":"popupMenuShortcutKey"},"$item.key")),separatorTag:SPAN({"class":"popupMenuSeparator"}),memberIterator:function(a){var b=[];for(var c=0,d=a.length;c0?a.response.status+" ":"";return b+a.response.statusText},getType:function(a){return a.response.content.mimeType},getDomain:function(a){return Lib.getPrettyDomain(a.request.url)},getSize:function(a){var b=a.response.bodySize,c=b&&b!=-1?b:a.response.content.size;return this.formatSize(c)},isExpandable:function(a){var b=a.response.headers.length>0,c=a.request.url.indexOf("data:")==0;return b||c},formatSize:function(a){return Lib.formatSize(a)},getElapsedTime:function(a){return Lib.formatTime(a.time)},onClick:function(a){var b=Lib.fixEvent(a);if(Lib.isLeftClick(a)){var c=Lib.getAncestorByClass(b.target,"netRow");c&&(this.toggleHeadersRow(c),Lib.cancelEvent(a))}else Lib.isControlClick(a)&&window.open(a.target.innerText||a.target.textContent)},toggleHeadersRow:function(a){if(Lib.hasClass(a,"isExpandable")){var b=a.repObject;Lib.toggleClass(a,"opened");if(Lib.hasClass(a,"opened")){var c=this.netInfoTag.insertRows({},a)[0];c.repObject=b;var d=new RequestBody;d.render(c.firstChild,b)}else{var c=a.nextSibling,e=Lib.getElementByClass(c,"netInfoBody");a.parentNode.removeChild(c)}}},onOpenOptions:function(a){var b=Lib.fixEvent(a);Lib.cancelEvent(a);if(Lib.isLeftClick(a)){var c=b.target,d=Lib.getAncestorByClass(c,"netRow"),e=this.getMenuItems(d),f=new Menu({id:"requestContextMenu",items:e});f.showPopup(c)}},getMenuItems:function(a){var b=a.repObject,c=a.phase,d=c.files[0]==b&&this.phases[0]==c,e=[{label:Strings.menuBreakTimeline,type:"checkbox",disabled:d,checked:c.files[0]==b&&!d,command:Lib.bind(this.breakLayout,this,a)},"-",{label:Strings.menuOpenRequest,command:Lib.bind(this.openRequest,this,b)},{label:Strings.menuOpenResponse,disabled:!b.response.content.text,command:Lib.bind(this.openResponse,this,b)}];Lib.dispatch(this.listeners,"getMenuItems",[this,e,c,b]);return e},openRequest:function(a,b){window.open(b.request.url)},openResponse:function(a,b){var c=b.response.content.text,d=b.response.content.mimeType,e=b.response.content.encoding,f="data:"+(d?d:"")+";"+(e?e:"")+","+c;window.open(f)},breakLayout:function(a,b){var c=b.repObject,d=b.phase,e=d.files[0]==c;b.breakLayout=!e,b.setAttribute("breakLayout",b.breakLayout?"true":"false");var f=Lib.getAncestorByClass(b,"netTable"),g=HarModel.getParentPage(this.input,c);this.updateLayout(f,g)},updateLayout:function(a,b){var c=HarModel.getPageEntries(this.input,b);this.table=a;var d=this.table.firstChild,e=this.firstRow=d.firstChild.nextSibling;this.phases=[];var f=Cookies.getCookie("phaseInterval");f||(f=4e3);var g=null,h=b?Lib.parseISO8601(b.startedDateTime):null,i=b&&b.pageTimings?b.pageTimings.onLoad:-1;i>0&&(i+=h);for(var j=0;j=0&&(o=l>i&&l-m>=f&&l+k.time>=n+f),typeof e.breakLayout=="boolean"?!g||e.breakLayout?g=this.startPhase(k):g.addFile(k):!g||o?g=this.startPhase(k):g.addFile(k),this.phases[0]!=g&&e.setAttribute("breakLayout",g.files[0]==k?"true":"false");if(g.startTime==undefined||g.startTime>l)g.startTime=l;if(g.endTime==undefined||g.endTime0){var g=d+f-c.startTime,h=(g/this.phaseElapsed*100).toFixed(3);c.pageTimings[e].offset=h}}}},updateTimeline:function(a){var b=this.table.firstChild,c;for(var d=this.firstRow;d;d=d.nextSibling){var e=d.repObject;if(!e)continue;if(Lib.hasClass(d,"netInfoRow"))continue;c=this.calculateFileTimes(a,e,c),d.phase=e.phase,delete e.phase;var f=Lib.getElementByClass(d,"netTimelineBar"),g=f.children[0],h=g.nextSibling,i=h.nextSibling,j=i.nextSibling,k=j.nextSibling,l=k.nextSibling;g.style.left=i.style.left=h.style.left=j.style.left=k.style.left=l.style.left=this.barOffset+"%",g.style.width=this.barBlockingWidth+"%",h.style.width=this.barResolvingWidth+"%",i.style.width=this.barConnectingWidth+"%",j.style.width=this.barSendingWidth+"%",k.style.width=this.barWaitingWidth+"%",l.style.width=this.barReceivingWidth+"%";var m=Lib.getElementsByClass(f,"netPageTimingBar");for(var n=0;n0&&b.push({label:d.name,time:e,classes:d.classes,comment:d.description})}var f=a.pageTimings?a.pageTimings._timeStamps:[];f&&b.push.apply(b,f);var g=this.phases;for(var c=0;c=h.startTime)h.startTime>l&&(h.startTime=l),h.endTime0&&(o+=" (onload: "+Lib.formatTime(a.pageTimings.onLoad)+")"),n.innerHTML=o}},formatRequestCount:function(a){return a+" "+(a==1?Strings.request:Strings.requests)},summarizePhase:function(a){var b=0,c=0,d="all";d=="all"&&(d=null);var e=0,f=0,g=0;for(var h=0;hg&&(g=m)}}var n=g-f;return{cachedSize:b,totalSize:c,totalTime:n,fileCount:e}},showInfoTip:function(a,b,c,d){var e=Lib.getAncestorByClass(b,"netTable");if(e&&e.repObject==this){var f=Lib.getAncestorByClass(b,"netRow");if(f){if(Lib.getAncestorByClass(b,"netBar")){a.setAttribute("multiline",!0);var g=f.repObject.startedDateTime+"-nettime";this.infoTipURL=g;return this.populateTimeInfoTip(a,f)}if(Lib.hasClass(b,"netSizeLabel")){var g=f.repObject.startedDateTime+"-netsize";this.infoTipURL=g;return this.populateSizeInfoTip(a,f)}}}},populateTimeInfoTip:function(a,b){EntryTimeInfoTip.render(this,b,a);return!0},populateSizeInfoTip:function(a,b){EntrySizeInfoTip.render(this,b,a);return!0},render:function(a,b){var c=HarModel.getPageEntries(this.input,b);if(!c.length)return null;return this.append(a,b,c)},append:function(a,b,c){this.table||(this.table=this.tableTag.replace({requestList:this},a,this)),this.summaryRow||(this.summaryRow=this.summaryTag.insertRows({},this.table.firstChild)[0]);var d=this.table.firstChild,e=d.lastChild.previousSibling,f=this.fileTag.insertRows({files:c},e,this);this.updateLayout(this.table,b);return f[0]},addPageTiming:function(a){this.pageTimings.push(a)}});function Phase(a){this.files=[],this.pageTimings=[],this.addFile(a)}Phase.prototype={addFile:function(a){this.files.push(a),a.phase=this},getLastStartTime:function(){return this.files[this.files.length-1].startedDateTime}};var EntryTimeInfoTip=domplate({tableTag:TABLE({"class":"timeInfoTip"},TBODY()),timingsTag:FOR("time","$timings",TR({"class":"timeInfoTipRow",$collapsed:"$time|hideBar"},TD({"class":"$time|getBarClass timeInfoTipBar",$loaded:"$time.loaded",$fromCache:"$time.fromCache"}),TD({"class":"timeInfoTipCell startTime"},"$time.start|formatStartTime"),TD({"class":"timeInfoTipCell elapsedTime"},"$time.elapsed|formatTime"),TD("$time|getLabel"))),startTimeTag:TR(TD(),TD("$startTime.time|formatStartTime"),TD({"class":"timeInfoTipStartLabel",colspan:2},"$startTime|getLabel")),separatorTag:TR({},TD({"class":"timeInfoTipSeparator",colspan:4,height:"10px"},SPAN("$label"))),eventsTag:FOR("event","$events",TR({"class":"timeInfoTipEventRow"},TD({"class":"timeInfoTipBar",align:"center"},DIV({"class":"$event|getPageTimingClass timeInfoTipEventBar"})),TD("$event.start|formatStartTime"),TD({colspan:2},"$event|getTimingLabel"))),hideBar:function(a){return!a.elapsed&&a.bar=="request.phase.Blocking"},getBarClass:function(a){var b=a.bar.substr(a.bar.lastIndexOf(".")+1);return"net"+b+"Bar"},getPageTimingClass:function(a){return a.classes?a.classes:""},formatTime:function(a){return Lib.formatTime(a)},formatStartTime:function(a){var b=a>0,c=Lib.formatTime(Math.abs(a));if(!a)return c;return(b>0?"+":"-")+c},getLabel:function(a){return Strings[a.bar]},getTimingLabel:function(a){return a.bar},render:function(a,b,c){var d=a.input,e=b.repObject,f=HarModel.getParentPage(d,e),g=f?Lib.parseISO8601(f.startedDateTime):null,h=Lib.parseISO8601(e.startedDateTime),i=EntryTimeInfoTip.tableTag.replace({},c),j={};g?j.time=h-g:j.time=h-b.phase.startTime,j.bar="request.Started",this.startTimeTag.insertRows({startTime:j},i.firstChild),this.separatorTag.insertRows({label:Strings["request.phases.label"]},i.firstChild);var k=0,l=[],m=e.timings.blocked,n=e.timings.dns,o=e.timings.ssl,p=e.timings.connect,q=e.timings.send,r=e.timings.wait,s=e.timings.receive;m>=0&&l.push({bar:"request.phase.Blocking",elapsed:m,start:k}),n>=0&&l.push({bar:"request.phase.Resolving",elapsed:n,start:k+=m<0?0:m}),p>=0&&l.push({bar:"request.phase.Connecting",elapsed:p,start:k+=n<0?0:n}),q>=0&&l.push({bar:"request.phase.Sending",elapsed:q,start:k+=p<0?0:p}),r>=0&&l.push({bar:"request.phase.Waiting",elapsed:r,start:k+=q<0?0:q}),s>=0&&l.push({bar:"request.phase.Receiving",elapsed:s,start:k+=r<0?0:r,loaded:e.loaded,fromCache:e.fromCache}),this.timingsTag.insertRows({timings:l},i.firstChild);if(!f)return!0;var t=[];for(var u=0;u0?Lib.setClass(a,"opened"):Lib.removeClass(a,"opened")})},render:function(a,b){return this.tag.append({object:b},a,this)}});return Menu}}),require.def("harPreview",["preview/pageList","preview/harModel","core/lib","core/trace","preview/menu"],function(a,b,c,d,e){function f(){this.id="harPreview",this.model=new b}f.prototype={initialize:function(a){this.topMenu=new e,this.topMenu.render(a);var d=c.bind(this.appendPreview,this);b.Loader.run(d)},appendPreview:function(e){try{var f=b.parse(e,!0);this.model.append(f);var h=new a(f);h.render(g),c.fireEvent(g,"onPreviewHARLoaded")}catch(i){d.exception("HarPreview.appendPreview; EXCEPTION ",i)}},loadHar:function(a,c){c=c||{};return b.Loader.load(this,a,c.jsonp,c.jsonpCallback,c.success,c.ajaxError)}};var g=document.getElementById("content"),h=g.repObject=new f;c.fireEvent(g,"onPreviewPreInit"),h.initialize(g),c.fireEvent(g,"onPreviewInit"),d.log("HarPreview; initialized OK")}) \ No newline at end of file diff --git a/harstorage/public/scripts/harviewer/require.js b/harstorage/public/scripts/harviewer/require.js deleted file mode 100644 index 8d7966d..0000000 --- a/harstorage/public/scripts/harviewer/require.js +++ /dev/null @@ -1 +0,0 @@ -var require,define;(function(){function getInteractiveScript(){var a,b,c;if(interactiveScript&&interactiveScript.readyState==="interactive")return interactiveScript;a=document.getElementsByTagName("script");for(b=a.length-1;b>-1&&(c=a[b]);b--)if(c.readyState==="interactive")return interactiveScript=c;return null}function newContext(contextName){function loadPaused(a){a.prefix&&a.name.indexOf("__$p")===0&&defined[a.prefix]&&(a=makeModuleMap(a.originalName,a.parentMap));var b=a.prefix,c=a.fullName;!specified[c]&&!loaded[c]&&(specified[c]=!0,b?defined[b]?callPlugin(b,a):(pluginsQueue[b]||(pluginsQueue[b]=[],(managerCallbacks[b]||(managerCallbacks[b]=[])).push({onDep:function(a,c){if(a===b){var d,e,f=pluginsQueue[b];for(d=0;d0)return undefined;if(config.priorityWait)if(isPriorityDone())resume();else return undefined;for(f in loaded)if(!(f in empty)){d=!0;if(!loaded[f])if(b)c+=f+" ";else{e=!0;break}}if(!d&&!context.waitCount)return undefined;if(b&&c){g=new Error("require.js load timeout for modules: "+c),g.requireType="timeout",g.requireModules=c;return req.onError(g)}if(e||context.scriptCount){(isBrowser||isWebWorker)&&setTimeout(checkLoaded,50);return undefined}if(context.waitCount){for(i=0;h=waitAry[i];i++)forceExec(h,{});checkLoaded();return undefined}req.checkReadyState();return undefined}function forceExec(a,b){if(a.isDone)return undefined;var c=a.fullName,d=a.depArray,e,f;if(c){if(b[c])return defined[c];b[c]=!0}for(f=0;f0&&(a.splice(b-1,2),b-=2);else break}var context,resume,config={waitSeconds:7,baseUrl:s.baseUrl||"./",paths:{},pkgs:{}},defQueue=[],specified={require:!0,exports:!0,module:!0},urlMap={},defined={},loaded={},waiting={},waitAry=[],waitIdCounter=0,managerCallbacks={},plugins={},pluginsQueue={},resumeDepth=0,normalizedWaiting={};resume=function(){var a,b,c;resumeDepth+=1,context.scriptCount<=0&&(context.scriptCount=0);while(defQueue.length){a=defQueue.shift();if(a[0]===null)return req.onError(new Error("Mismatched anonymous require.def modules"));callDefMain(a)}if(!config.priorityWait||isPriorityDone())while(context.paused.length){c=context.paused,context.pausedCount+=c.length,context.paused=[];for(b=0;a=c[b];b++)loadPaused(a);context.startTime=(new Date).getTime(),context.pausedCount-=c.length}resumeDepth===1&&checkLoaded(),resumeDepth-=1;return undefined},context={contextName:contextName,config:config,defQueue:defQueue,waiting:waiting,waitCount:0,specified:specified,loaded:loaded,urlMap:urlMap,scriptCount:0,urlFetched:{},defined:defined,paused:[],pausedCount:0,plugins:plugins,managerCallbacks:managerCallbacks,makeModuleMap:makeModuleMap,normalize:normalize,configure:function(a){var b,c,d,e,f,g;a.baseUrl&&(a.baseUrl.charAt(a.baseUrl.length-1)!=="/"&&(a.baseUrl+="/")),b=config.paths,d=config.packages,e=config.pkgs,mixin(config,a,!0);if(a.paths){for(c in a.paths)c in empty||(b[c]=a.paths[c]);config.paths=b}f=a.packagePaths;if(f||a.packages){if(f)for(c in f)c in empty||configurePackageDir(e,f[c],c);a.packages&&configurePackageDir(e,a.packages),config.pkgs=e}a.priority&&(g=context.requireWait,context.requireWait=!1,context.takeGlobalQueue(),resume(),context.require(a.priority),resume(),context.requireWait=g,config.priorityWait=a.priority),(a.deps||a.callback)&&context.require(a.deps||[],a.callback),a.ready&&req.ready(a.ready)},isDefined:function(a,b){return makeModuleMap(a,b).fullName in defined},require:function(a,b,c){var d,e,f;if(typeof a==="string"){if(req.get)return req.get(context,a,b);d=a,c=b,f=makeModuleMap(d,c),e=defined[f.fullName];if(e===undefined)return req.onError(new Error("require: module name '"+f.fullName+"' has not been loaded yet for context: "+contextName));return e}main(null,a,b,c);if(!context.requireWait)while(!context.scriptCount&&context.paused.length)resume();return undefined},takeGlobalQueue:function(){globalDefQueue.length&&(apsp.apply(context.defQueue,[context.defQueue.length-1,0].concat(globalDefQueue)),globalDefQueue=[])},completeLoad:function(a){var b;context.takeGlobalQueue();while(defQueue.length){b=defQueue.shift();if(b[0]===null){b[0]=a;break}if(b[0]===a)break;callDefMain(b),b=null}b?callDefMain(b):callDefMain([a,[],a==="jquery"&&typeof jQuery!=="undefined"?function(){return jQuery}:null]),loaded[a]=!0,jQueryCheck(),req.isAsync&&(context.scriptCount-=1),resume(),req.isAsync||(context.scriptCount-=1)},toUrl:function(a,b){var c=a.lastIndexOf("."),d=null;c!==-1&&(d=a.substring(c,a.length),a=a.substring(0,c));return context.nameToUrl(a,d,b)},nameToUrl:function(a,b,c){var d,e,f,g,h,i,j,k,l=context.config;if(a.indexOf("./")===0||a.indexOf("../")===0)h=c&&c.url?c.url.split("/"):[],h.length&&h.pop(),h=h.concat(a.split("/")),trimDots(h),k=h.join("/")+(b?b:req.jsExtRegExp.test(a)?"":".js");else{a=normalize(a,c);if(req.jsExtRegExp.test(a))k=a+(b?b:"");else{d=l.paths,e=l.pkgs,h=a.split("/");for(i=h.length;i>0;i--){j=h.slice(0,i).join("/");if(d[j]){h.splice(0,i,d[j]);break}if(f=e[j]){a===f.name?g=f.location+"/"+f.main:g=f.location+"/"+f.lib,h.splice(0,i,g);break}}k=h.join("/")+(b||".js"),k=(k.charAt(0)==="/"||k.match(/^\w+:/)?"":l.baseUrl)+k}}return l.urlArgs?k+((k.indexOf("?")===-1?"?":"&")+l.urlArgs):k}},context.jQueryCheck=jQueryCheck,context.resume=resume;return context}function configurePackageDir(a,b,c){var d,e,f;for(d=0;f=b[d];d++)f=typeof f==="string"?{name:f}:f,e=f.location,c&&(!e||e.indexOf("/")!==0&&e.indexOf(":")===-1)&&(e=c+"/"+(e||f.name)),a[f.name]={name:f.name,location:e||f.name,lib:f.lib||"lib",main:(f.main||"lib/main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}}function mixin(a,b,c){for(var d in b)!(d in empty)&&(!(d in a)||c)&&(a[d]=b[d]);return req}function isArray(a){return ostring.call(a)==="[object Array]"}function isFunction(a){return ostring.call(a)==="[object Function]"}var version="0.24.0",commentRegExp=/(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,cjsRequireRegExp=/require\(["']([^'"\s]+)["']\)/g,currDirRegExp=/^\.\//,jsSuffixRegExp=/\.js$/,ostring=Object.prototype.toString,ap=Array.prototype,aps=ap.slice,apsp=ap.splice,isBrowser=typeof window!=="undefined"&&navigator&&document,isWebWorker=!isBrowser&&typeof importScripts!=="undefined",readyRegExp=isBrowser&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",reqWaitIdPrefix="_r@@",empty={},contexts={},globalDefQueue=[],interactiveScript=null,isDone=!1,useInteractive=!1,req,cfg={},currentlyAddingScript,s,head,baseElement,scripts,script,src,subPath,mainScript,dataMain,i,scrollIntervalId,setReadyState,ctx;if(typeof require!=="undefined"){if(isFunction(require))return;cfg=require}req=require=function(a,b){var c=defContextName,d,e;!isArray(a)&&typeof a!=="string"&&(e=a,isArray(b)?(a=b,b=arguments[2]):a=[]),e&&e.context&&(c=e.context),d=contexts[c]||(contexts[c]=newContext(c)),e&&d.configure(e);return d.require(a,b)},req.version=version,req.isArray=isArray,req.isFunction=isFunction,req.mixin=mixin,req.jsExtRegExp=/^\/|:|\?|\.js$/,s=req.s={contexts:contexts,skipAsync:{},isPageLoaded:!isBrowser,readyCalls:[]},req.isAsync=req.isBrowser=isBrowser,isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=function(a){throw a},req.load=function(a,b,c){var d=a.contextName,e=a.urlFetched,f=a.loaded;isDone=!1,f[b]||(f[b]=!1),e[c]||(a.scriptCount+=1,req.attach(c,d,b),e[c]=!0,a.jQuery&&!a.jQueryIncremented&&(a.jQuery.readyWait+=1,a.jQueryIncremented=!0))},define=req.def=function(a,b,c){var d,e;typeof a!=="string"&&(c=b,b=a,a=null),req.isArray(b)||(c=b,b=[]),!a&&!b.length&&req.isFunction(c)&&(c.length&&(c.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(a,c){b.push(c)}),b=["require","exports","module"].concat(b)));if(useInteractive){d=currentlyAddingScript||getInteractiveScript();if(!d)return req.onError(new Error("ERROR: No matching script interactive for "+c));a||(a=d.getAttribute("data-requiremodule")),e=contexts[d.getAttribute("data-requirecontext")]}(e?e.defQueue:globalDefQueue).push([a,b,c]);return undefined},define.amd={multiversion:!0,plugins:!0},req.execCb=function(a,b,c){return b.apply(null,c)},req.onScriptLoad=function(a){var b=a.currentTarget||a.srcElement,c,d,e;if(a.type==="load"||readyRegExp.test(b.readyState))interactiveScript=null,c=b.getAttribute("data-requirecontext"),d=b.getAttribute("data-requiremodule"),e=contexts[c],contexts[c].completeLoad(d),b.detachEvent&&!isOpera?b.detachEvent("onreadystatechange",req.onScriptLoad):b.removeEventListener("load",req.onScriptLoad,!1)},req.attach=function(a,b,c,d,e){var f,g,h;if(isBrowser){d=d||req.onScriptLoad,f=document.createElement("script"),f.type=e||"text/javascript",f.charset="utf-8",f.async=!s.skipAsync[a],f.setAttribute("data-requirecontext",b),f.setAttribute("data-requiremodule",c),f.attachEvent&&!isOpera?(useInteractive=!0,f.attachEvent("onreadystatechange",d)):f.addEventListener("load",d,!1),f.src=a,currentlyAddingScript=f,baseElement?head.insertBefore(f,baseElement):head.appendChild(f),currentlyAddingScript=null;return f}isWebWorker&&(h=contexts[b],g=h.loaded,g[c]=!1,importScripts(a),h.completeLoad(c));return null};if(isBrowser){scripts=document.getElementsByTagName("script");for(i=scripts.length-1;i>-1&&(script=scripts[i]);i--){head||(head=script.parentNode);if(dataMain=script.getAttribute("data-main")){cfg.baseUrl||(src=dataMain.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath,dataMain=mainScript.replace(jsSuffixRegExp,"")),cfg.deps=cfg.deps?cfg.deps.concat(dataMain):[dataMain];break}}}s.baseUrl=cfg.baseUrl,req.pageLoaded=function(){s.isPageLoaded||(s.isPageLoaded=!0,scrollIntervalId&&clearInterval(scrollIntervalId),setReadyState&&(document.readyState="complete"),req.callReady())},req.checkReadyState=function(){var a=s.contexts,b;for(b in a)if(!(b in empty))if(a[b].waitCount)return;s.isDone=!0,req.callReady()},req.callReady=function(){var a=s.readyCalls,b,c,d,e,f;if(s.isPageLoaded&&s.isDone){if(a.length){s.readyCalls=[];for(b=0;c=a[b];b++)c()}d=s.contexts;for(f in d)f in empty||(e=d[f],e.jQueryIncremented&&(e.jQuery.ready(!0),e.jQueryIncremented=!1))}},req.ready=function(a){s.isPageLoaded&&s.isDone?a():s.readyCalls.push(a);return req},isBrowser&&(document.addEventListener?(document.addEventListener("DOMContentLoaded",req.pageLoaded,!1),window.addEventListener("load",req.pageLoaded,!1),document.readyState||(setReadyState=!0,document.readyState="loading")):window.attachEvent&&(window.attachEvent("onload",req.pageLoaded),self===self.top&&(scrollIntervalId=setInterval(function(){try{document.body&&(document.documentElement.doScroll("left"),req.pageLoaded())}catch(a){}},30))),document.readyState==="complete"&&req.pageLoaded()),req(cfg),req.isAsync&&typeof setTimeout!=="undefined"&&(ctx=s.contexts[cfg.context||defContextName],ctx.requireWait=!0,setTimeout(function(){ctx.requireWait=!1,ctx.takeGlobalQueue(),ctx.jQueryCheck(),ctx.scriptCount||ctx.resume(),req.checkReadyState()},0))})() \ No newline at end of file diff --git a/harstorage/public/scripts/highcharts/exporting.js b/harstorage/public/scripts/highcharts/exporting.js deleted file mode 100644 index 5820f5a..0000000 --- a/harstorage/public/scripts/highcharts/exporting.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - Highcharts JS v2.2.0 (2012-02-16) - Exporting module - - (c) 2010-2011 Torstein H?nsi - - License: www.highcharts.com/license -*/ -(function(){function x(a){for(var b=a.length;b--;)typeof a[b]==="number"&&(a[b]=Math.round(a[b])-0.5);return a}var f=Highcharts,y=f.Chart,z=f.addEvent,B=f.removeEvent,r=f.createElement,u=f.discardElement,t=f.css,s=f.merge,k=f.each,n=f.extend,C=Math.max,h=document,D=window,A=h.documentElement.ontouchstart!==void 0,v=f.getOptions();n(v.lang,{downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",exportButtonTitle:"Export to raster or vector image", -printButtonTitle:"Print the chart"});v.navigation={menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF"},menuItemStyle:{padding:"0 5px",background:"none",color:"#303030",fontSize:A?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{align:"right",backgroundColor:{linearGradient:[0,0,0,20],stops:[[0.4,"#F7F7F7"],[0.6,"#E3E3E3"]]},borderColor:"#B0B0B0",borderRadius:3,borderWidth:1,height:20,hoverBorderColor:"#909090",hoverSymbolFill:"#81A7CF",hoverSymbolStroke:"#4572A5", -symbolFill:"#E0E0E0",symbolStroke:"#A0A0A0",symbolX:11.5,symbolY:10.5,verticalAlign:"top",width:24,y:10}};v.exporting={type:"image/png",url:"http://export.highcharts.com/",width:800,buttons:{exportButton:{symbol:"exportIcon",x:-10,symbolFill:"#A8BF77",hoverSymbolFill:"#768F3E",_id:"exportButton",_titleKey:"exportButtonTitle",menuItems:[{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF", -onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]},printButton:{symbol:"printIcon",x:-36,symbolFill:"#B5C9DF",hoverSymbolFill:"#779ABF",_id:"printButton",_titleKey:"printButtonTitle",onclick:function(){this.print()}}}};n(y.prototype,{getSVG:function(a){var b=this,c,d,e,g=s(b.options,a);if(!h.createElementNS)h.createElementNS=function(a,b){var c=h.createElement(b);c.getBBox=function(){return f.Renderer.prototype.Element.prototype.getBBox.apply({element:c})}; -return c};a=r("div",null,{position:"absolute",top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},h.body);n(g.chart,{renderTo:a,forExport:!0});g.exporting.enabled=!1;g.chart.plotBackgroundImage=null;g.series=[];k(b.series,function(a){e=s(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});if(!e.isInternal){if(e&&e.marker&&/^url\(/.test(e.marker.symbol))e.marker.symbol="circle";g.series.push(e)}});c=new Highcharts.Chart(g);k(["xAxis","yAxis"],function(a){k(b[a],function(b,d){var e= -c[a][d],g=b.getExtremes(),f=g.userMin,g=g.userMax;(f!==void 0||g!==void 0)&&e.setExtremes(f,g,!0,!1)})});d=c.container.innerHTML;g=null;c.destroy();u(a);d=d.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/isTracker="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/ /g,"\u00a0").replace(/­/g,"\u00ad").replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" ]+)/g,'class="$1"').replace(/ transform /g, -" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});d=d.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'");d.match(/ xmlns="/g).length===2&&(d=d.replace(/xmlns="[^"]+"/,""));return d},exportChart:function(a,b){var c,d=this.getSVG(s(this.options.exporting.chartOptions,b)),a=s(this.options.exporting,a);c=r("form",{method:"post",action:a.url},{display:"none"},h.body);k(["filename","type","width","svg"],function(b){r("input",{type:"hidden", -name:b,value:{filename:a.filename||"chart",type:a.type,width:a.width,svg:d}[b]},null,c)});c.submit();u(c)},print:function(){var a=this,b=a.container,c=[],d=b.parentNode,e=h.body,g=e.childNodes;if(!a.isPrinting)a.isPrinting=!0,k(g,function(a,b){if(a.nodeType===1)c[b]=a.style.display,a.style.display="none"}),e.appendChild(b),D.print(),setTimeout(function(){d.appendChild(b);k(g,function(a,b){if(a.nodeType===1)a.style.display=c[b]});a.isPrinting=!1},1E3)},contextMenu:function(a,b,c,d,e,g){var i=this, -f=i.options.navigation,h=f.menuItemStyle,o=i.chartWidth,p=i.chartHeight,q="cache-"+a,j=i[q],l=C(e,g),m,w;if(!j)i[q]=j=r("div",{className:"highcharts-"+a},{position:"absolute",zIndex:1E3,padding:l+"px"},i.container),m=r("div",null,n({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},f.menuStyle),j),w=function(){t(j,{display:"none"})},z(j,"mouseleave",w),k(b,function(a){if(a){var b=r("div",{onmouseover:function(){t(this,f.menuItemHoverStyle)},onmouseout:function(){t(this, -h)},innerHTML:a.text||i.options.lang[a.textKey]},n({cursor:"pointer"},h),m);b[A?"ontouchstart":"onclick"]=function(){w();a.onclick.apply(i,arguments)};i.exportDivElements.push(b)}}),i.exportDivElements.push(m,j),i.exportMenuWidth=j.offsetWidth,i.exportMenuHeight=j.offsetHeight;a={display:"block"};c+i.exportMenuWidth>o?a.right=o-c-e-l+"px":a.left=c-l+"px";d+g+i.exportMenuHeight>p?a.bottom=p-d-l+"px":a.top=d+g-l+"px";t(j,a)},addButton:function(a){function b(){p.attr(l);o.attr(j)}var c=this,d=c.renderer, -e=s(c.options.navigation.buttonOptions,a),g=e.onclick,f=e.menuItems,h=e.width,k=e.height,o,p,q,a=e.borderWidth,j={stroke:e.borderColor},l={stroke:e.symbolStroke,fill:e.symbolFill},m=e.symbolSize||12;if(!c.exportDivElements)c.exportDivElements=[],c.exportSVGElements=[];e.enabled!==!1&&(o=d.rect(0,0,h,k,e.borderRadius,a).align(e,!0).attr(n({fill:e.backgroundColor,"stroke-width":a,zIndex:19},j)).add(),q=d.rect(0,0,h,k,0).align(e).attr({id:e._id,fill:"rgba(255, 255, 255, 0.001)",title:c.options.lang[e._titleKey], -zIndex:21}).css({cursor:"pointer"}).on("mouseover",function(){p.attr({stroke:e.hoverSymbolStroke,fill:e.hoverSymbolFill});o.attr({stroke:e.hoverBorderColor})}).on("mouseout",b).on("click",b).add(),f&&(g=function(){b();var a=q.getBBox();c.contextMenu("export-menu",f,a.x,a.y,h,k)}),q.on("click",function(){g.apply(c,arguments)}),p=d.symbol(e.symbol,e.symbolX-m/2,e.symbolY-m/2,m,m).align(e,!0).attr(n(l,{"stroke-width":e.symbolStrokeWidth||1,zIndex:20})).add(),c.exportSVGElements.push(o,q,p))},destroyExport:function(){var a, -b;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+ya(a-c).toFixed(f).slice(2):"")} -function gc(a,b,c,d){var e,c=p(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d=C[mb]&&i.setSeconds(b>=C[Bb]?0:k*Ta(i.getSeconds()/k));if(b>=C[Bb])i[oc](b>=C[Pa]?0:k*Ta(i[Ib]()/k));if(b>=C[Pa])i[pc](b>=C[na]?0:k*Ta(i[Tb]()/k));if(b>=C[na])i[hc](b>=C[Xa]?1:k*Ta(i[Ya]()/k));b>=C[Xa]&&(i[qc](b>=C[za]?0:k*Ta(i[Cb]()/k)),h=i[nb]()); -b>=C[za]&&(h-=h%k,i[rc](h));if(b===C[Ka])i[hc](i[Ya]()-i[ic]()+p(d,1));d=1;h=i[nb]();for(var j=i.getTime(),m=i[Cb](),i=i[Ya]();jc+e&&(i-= -i+a-(c+e),j=g-b+d-h,m=!0);j=j&&g<=j+b&&(j=g+d+h)):j+b>d+f&&(j=d+f-b-h);return{x:i,y:j}}function Kc(a,b){var c=a.length,d,e;for(e=0;ec&&(c=a[b]);return c}function Kb(a){for(var b in a)a[b]&&a[b].destroy&&a[b].destroy(),delete a[b]}function Vb(a){pb|| -(pb=xa(db));a&&pb.appendChild(a);pb.innerHTML=""}function jc(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else ea.console&&console.log(c)}function Db(a){return parseFloat(a.toPrecision(14))}function Lb(a,b){Wb=p(a,b.animation)}function uc(){var a=Ba.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";ob=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,p(c,1),p(g,0),p(h,0),p(i,0))).getTime()};Ib=b+"Minutes";Tb=b+"Hours";ic=b+"Day";Ya=b+"Date";Cb=b+"Month";nb= -b+"FullYear";oc=c+"Minutes";pc=c+"Hours";hc=c+"Date";qc=c+"Month";rc=c+"FullYear"}function pa(){}function vc(a,b){function c(a){function b(a,c){this.pos=a;this.type=c||"";this.isNew=!0;c||this.addLabel()}function c(a){if(a)this.options=a,this.id=a.id;return this}function d(a,b,c,e){this.isNegative=b;this.options=a;this.x=c;this.stack=e;this.alignOptions={align:a.align||(X?b?"left":"right":"center"),verticalAlign:a.verticalAlign||(X?"middle":b?"bottom":"top"),y:p(a.y,X?4:b?14:-6),x:p(a.x,X?b?-6:6: -0)};this.textAlign=a.textAlign||(X?b?"right":"left":"center")}function e(){var a=[],b=[],c;R=O=null;o(z.series,function(e){if(e.visible||!q.ignoreHiddenSeries){var f=e.options,g,h,i,j,k,l,m,H,n,La=f.threshold,z,o=[],v=0;if(D&&La<=0)La=f.threshold=null;if(u)f=e.xData,f.length&&(R=Za(p(R,f[0]),Ub(f)),O=$(p(O,f[0]),Jb(f)));else{var F,t,Mb,P=e.cropped,x=e.xAxis.getExtremes(),w=!!e.modifyValue;g=f.stacking;Ca=g==="percent";if(g)k=f.stack,j=e.type+p(k,""),l="-"+j,e.stackKey=j,h=a[j]||[],a[j]=h,i=b[l]|| -[],b[l]=i;Ca&&(R=0,O=99);f=e.processedXData;m=e.processedYData;z=m.length;for(c=0;c=x.min&&(f[c-1]||H)<=x.max))if(H=n.length)for(;H--;)n[H]!==null&&(o[v++]=n[H]);else o[v++]=n;!Ca&&o.length&&(R=Za(p(R,o[0]),Ub(o)),O=$(p(O,o[0]),Jb(o)));La!==null&&(R>=La?(R=La,Oa=!0):O=0.5)a=B(a),e=f(a,b,c);else if(a>=0.08){var h=Ta(b),i,j,k,l,m,H;for(i=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];hb&&e.push(m),m>c&&(H=!0),m=l}}else if(b=cb(b),c=cb(c),a=s[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null: -a,z._minorAutoInterval,(c-b)*(s.tickPixelInterval/(d?5:1))/((d?T/W.length:T)||1)),a=gc(a,null,oa.pow(10,Ta(oa.log(a)/oa.LN10))),e=Xb(f(a,b,c),lb),!d)z._minorAutoInterval=a/5;d||(Ma=a);return e}function h(){var a=[],b,c;if(D){c=W.length;for(b=1;b=fb,c,d,e,f,g,h;u&&fb===ba&&!D&&(y(s.min)||y(s.max)?fb=null:(o(z.series,function(a){f=a.xData;for(d=g=a.xIncrement?1:f.length-1;d>0;d--)if(e= -f[d]-f[d-1],c===ba||e0||!Pa))J+=b*Ga}Ma=I===J||I===void 0||J===void 0?1:ga&&!c&&d===pa.options.tickPixelInterval?pa.tickInterval:p(c,Ua?1:(J-I)*d/(T||1));u&&!a&&o(z.series,function(a){a.processData(I!==na||J!==za)});Y();z.beforeSetTickPositions&&z.beforeSetTickPositions();z.postProcessTickInterval&&(Ma=z.postProcessTickInterval(Ma));!w&&!D&&(Wa=oa.pow(10,Ta(oa.log(Ma)/oa.LN10)),y(s.tickInterval)|| -(Ma=gc(Ma,null,Wa,s)));z.tickInterval=Ma;Fa=s.minorTickInterval==="auto"&&Ma?Ma/5:s.minorTickInterval;(W=s.tickPositions||Xa&&Xa.apply(z,[I,J]))||(W=w?(z.getNonLinearTimeTicks||Jc)(Ic(Ma,s.units),I,J,s.startOfWeek,z.ordinalPositions,z.closestPointRange,!0):D?g(Ma,I,J):f(Ma,I,J));Z(z,"afterSetTickPositions",{tickPositions:W});if(!ga&&(a=W[0],c=W[W.length-1],s.startOnTick?I=a:I>a&&W.shift(),s.endOnTick?J=c:Jhb[Sa]&&s.alignTicks!==!1))hb[Sa]=W.length}function k(a){a= -(new c(a)).render();ra.push(a);return a}function m(){var a=s.title,d=s.stackLabels,e=s.alternateGridColor,f=s.lineWidth,g,i,j=l.hasRendered&&y(na)&&!isNaN(na),H=(g=z.series.length&&y(I)&&y(J))||p(s.showEmpty,!0),n,q;if(g||ga)if(Fa&&!Ua&&o(h(),function(a){wa[a]||(wa[a]=new b(a,"minor"));j&&wa[a].isNew&&wa[a].render(null,!0);wa[a].isActive=!0;wa[a].render()}),o(W,function(a,c){if(!ga||a>=I&&a<=J)Qa[a]||(Qa[a]=new b(a)),j&&Qa[a].isNew&&Qa[a].render(c,!0),Qa[a].isActive=!0,Qa[a].render(c)}),e&&o(W,function(a, -b){if(b%2===0&&a=1E3?fc(a,0):a},Va=P&&s.labels.staggerLines,Da=s.reversed,Ia=Ua&&s.tickmarkPlacement==="between"?0.5:0;b.prototype={addLabel:function(){var a=this.pos,b=s.labels,c=Ua&&P&&Ua.length&&!b.step&&!b.staggerLines&&!b.rotation&&la/Ua.length||!P&&la/2,d=a===W[0],e=a===W[W.length-1],f=Ua&&y(Ua[a])?Ua[a]:a,g=this.label,h=W.info,i;w&&h&&(i=s.dateTimeLabelFormats[h.higherRanks[a]|| -h.unitName]);this.isFirst=d;this.isLast=e;a=db.call({axis:z,chart:l,isFirst:d,isLast:e,dateTimeLabelFormat:i,value:D?Db(cb(f)):f});c=c&&{width:$(1,B(c-2*(b.padding||10)))+ia};c=N(c,b.style);y(g)?g&&g.attr({text:a}).css(c):this.label=y(a)&&b.enabled?K.text(a,0,0,b.useHTML).attr({align:b.align,rotation:b.rotation}).css(c).add(Rb):null},getLabelSize:function(){var a=this.label;return a?(this.labelBBox=a.getBBox())[P?"height":"width"]:0},render:function(a,b){var c=this.type,d=this.label,e=this.pos,f= -s.labels,g=this.gridLine,h=c?c+"Grid":"grid",i=c?c+"Tick":"tick",j=s[h+"LineWidth"],k=s[h+"LineColor"],l=s[h+"LineDashStyle"],H=s[i+"Length"],h=s[i+"Width"]||0,m=s[i+"Color"],n=s[i+"Position"],i=this.mark,La=f.step,ca=b&&ab||ta,q;q=P?U(e+Ia,null,null,b)+C:r+E+(F?(b&&bb||qa)-bc-r:0);ca=P?ca-Nb+E-(F?ib:0):ca-U(e+Ia,null,null,b)-C;if(j){e=gb(e+Ia,j,b);if(g===ba){g={stroke:k,"stroke-width":j};if(l)g.dashstyle=l;if(!c)g.zIndex=1;this.gridLine=g=j?K.path(e).attr(g).add(fa):null}!b&&g&&e&&g.animate({d:e})}if(h)n=== -"inside"&&(H=-H),F&&(H=-H),c=K.crispLine([ua,q,ca,ha,q+(P?0:-H),ca+(P?H:0)],h),i?i.animate({d:c}):this.mark=K.path(c).attr({stroke:m,"stroke-width":h}).add(Rb);d&&!isNaN(q)&&(q=q+f.x-(Ia&&P?Ia*G*(Da?-1:1):0),ca=ca+f.y-(Ia&&!P?Ia*G*(Da?1:-1):0),y(f.y)||(ca+=Q(d.styles.lineHeight)*0.9-d.getBBox().height/2),Va&&(ca+=a/(La||1)%Va*16),this.isFirst&&!p(s.showFirstLabel,1)||this.isLast&&!p(s.showLastLabel,1)?d.hide():d.show(),La&&a%La&&d.hide(),d[this.isNew?"attr":"animate"]({x:q,y:ca}));this.isNew=!1}, -destroy:function(){Kb(this)}};c.prototype={render:function(){var a=this,b=(z.pointRange||0)/2,c=a.options,d=c.label,e=a.label,f=c.width,g=c.to,h=c.from,i=c.value,j,k=c.dashStyle,H=a.svgElem,l=[],m,s,n=c.color;s=c.zIndex;var La=c.events;D&&(h=lb(h),g=lb(g),i=lb(i));if(f){if(l=gb(i,f),b={stroke:n,"stroke-width":f},k)b.dashstyle=k}else if(y(h)&&y(g))h=$(h,I-b),g=Za(g,J+b),j=gb(g),(l=gb(h))&&j?l.push(j[4],j[5],j[1],j[2]):l=null,b={fill:n};else return;if(y(s))b.zIndex=s;if(H)l?H.animate({d:l},null,H.onGetPath): -(H.hide(),H.onGetPath=function(){H.show()});else if(l&&l.length&&(a.svgElem=H=K.path(l).attr(b).add(),La))for(m in k=function(b){H.on(b,function(c){La[b].apply(a,[c])})},La)k(m);if(d&&y(d.text)&&l&&l.length&&qb>0&&ib>0){d=M({align:P&&j&&"center",x:P?!j&&4:10,verticalAlign:!P&&j&&"middle",y:P?j?16:10:j?6:-4,rotation:P&&!j&&90},d);if(!e)a.label=e=K.text(d.text,0,0).attr({align:d.textAlign||d.align,rotation:d.rotation,zIndex:s}).css(d.style).add();j=[l[1],l[4],p(l[6],l[1])];l=[l[2],l[5],p(l[7],l[2])]; -m=Ub(j);s=Ub(l);e.align(d,!1,{x:m,y:s,width:Jb(j)-m,height:Jb(l)-s});e.show()}else e&&e.hide();return a},destroy:function(){Kb(this);Gb(ra,this)}};d.prototype={destroy:function(){Kb(this)},setTotal:function(a){this.cum=this.total=a},render:function(a){var b=this.options.formatter.call(this);this.label?this.label.attr({text:b,visibility:$a}):this.label=l.renderer.text(b,0,0).css(this.options.style).attr({align:this.textAlign,rotation:this.options.rotation,visibility:$a}).add(a)},setOffset:function(a, -b){var c=this.isNegative,d=z.translate(this.total,0,0,0,1),e=z.translate(0),e=ya(d-e),f=l.xAxis[0].translate(this.x)+a,g=l.plotHeight,c={x:X?c?d:d-e:f,y:X?g-f-b:c?g-d-e:g-d,width:X?e:b,height:X?b:e};this.label&&this.label.align(this.alignOptions,null,c).attr({visibility:eb})}};U=function(a,b,c,d,e){var f=1,g=0,h=d?V:G,d=d?na:I,e=s.ordinal||D&&e;h||(h=G);c&&(f*=-1,g=T);Da&&(f*=-1,g-=f*T);b?(Da&&(a=T-a),a=a/h+d,e&&(a=z.lin2val(a))):(e&&(a=z.val2lin(a)),a=f*(a-d)*h+g+f*Ha);return a};gb=function(a,b, -c){var d,e,f,a=U(a,null,null,c),g=c&&ab||ta,h=c&&bb||qa,i,c=e=B(a+C);d=f=B(g-a-C);if(isNaN(a))i=!0;else if(P){if(d=jb,f=g-Nb,cr+qb)i=!0}else if(c=r,e=h-bc,djb+ib)i=!0;return i?null:K.crispLine([ua,c,d,ha,e,f],b||0)};Y=function(){var a=J-I,b=0,c,d;if(u)ga?b=pa.pointRange:o(z.series,function(a){b=$(b,a.pointRange);d=a.closestPointRange;!a.noSharedTooltip&&y(d)&&(c=y(c)?Za(c,d):d)}),z.pointRange=b,z.closestPointRange=c;V=G;z.translationSlope=G=T/(a+b||1);C=P?r:Nb;Ha=G*(b/2)};va.push(z); -l[u?"xAxis":"yAxis"].push(z);X&&u&&Da===ba&&(Da=!0);N(z,{addPlotBand:k,addPlotLine:k,adjustTickAmount:function(){if(hb&&hb[Sa]&&!w&&!Ua&&!ga&&s.alignTicks!==!1){var a=Ja,b=W.length;Ja=hb[Sa];if(ba||a===null?a=b:c1||ya(b-q)>1?function(){c(a,b)}:null}function d(){if(!m){var a=l.hoverPoints;u.hide();a&&o(a,function(a){a.setState()});l.hoverPoints=null;m=!0}}var e,f=a.borderWidth,g=a.crosshairs,h=[],i=a.style,j=a.shared,k=Q(i.padding),m=!0,n=0,q=0;i.padding=0;var u=K.label("",0,0,null,null,null,a.useHTML).attr({padding:k,fill:a.backgroundColor,"stroke-width":f,r:a.borderRadius,zIndex:8}).css(i).hide().add(); -wa||u.shadow(a.shadow);return{shared:j,refresh:function(f){var i,k,n,q,v={},t=[];n=f.tooltipPos;i=a.formatter||b;var v=l.hoverPoints,F;j&&(!f.series||!f.series.noSharedTooltip)?(q=0,v&&o(v,function(a){a.setState()}),l.hoverPoints=f,o(f,function(a){a.setState(Ra);q+=a.plotY;t.push(a.getLabelConfig())}),k=f[0].plotX,q=B(q)/f.length,v={x:f[0].category},v.points=t,f=f[0]):v=f.getLabelConfig();v=i.call(v);e=f.series;k=p(k,f.plotX);q=p(q,f.plotY);i=B(n?n[0]:X?la-q:k);k=B(n?n[1]:X?ma-k:q);n=j||!e.isCartesian|| -e.tooltipOutsidePlot||Eb(i,k);v===!1||!n?d():(m&&(u.show(),m=!1),u.attr({text:v}),F=a.borderColor||f.color||e.color||"#606060",u.attr({stroke:F}),n=tc(u.width,u.height,S,L,la,ma,{x:i,y:k},p(a.distance,12),X),c(B(n.x),B(n.y)));if(g){g=Hb(g);var x;n=g.length;for(var D;n--;)if(x=f.series[n?"yAxis":"xAxis"],g[n]&&x)if(x=x.getPlotLinePath(f[n?"y":"x"],1),h[n])h[n].attr({d:x,visibility:eb});else{D={"stroke-width":g[n].width||1,stroke:g[n].color||"#C0C0C0",zIndex:g[n].zIndex||2};if(g[n].dashStyle)D.dashstyle= -g[n].dashStyle;h[n]=K.path(x).attr(D).add()}}Z(l,"tooltipRefresh",{text:v,x:i+S,y:k+L,borderColor:F})},hide:d,hideCrosshairs:function(){o(h,function(a){a&&a.hide()})},destroy:function(){o(h,function(a){a&&a.destroy()});u&&(u=u.destroy())}}}function e(a){function b(a){var c,d,e,a=a||ea.event;if(!a.target)a.target=a.srcElement;if(a.originalEvent)a=a.originalEvent;if(a.event)a=a.event;c=a.touches?a.touches.item(0):a;Va=xc(G);d=Va.left;e=Va.top;Sb?(d=a.x,c=a.y):(d=c.pageX-d,c=c.pageY-e);return N(a,{chartX:B(d), -chartY:B(c)})}function c(a){var b={xAxis:[],yAxis:[]};o(va,function(c){var d=c.translate,e=c.isXAxis;b[e?"xAxis":"yAxis"].push({axis:c,value:d((X?!e:e)?a.chartX-S:ma-a.chartY+L,!0)})});return b}function e(){var a=l.hoverSeries,b=l.hoverPoint;if(b)b.onMouseOut();if(a)a.onMouseOut();sb&&(sb.hide(),sb.hideCrosshairs());nb=null}function f(){if(n){var a={xAxis:[],yAxis:[]},b=n.getBBox(),c=b.x-S,d=b.y-L;k&&(o(va,function(e){if(e.options.zoomEnabled!==!1){var f=e.translate,g=e.isXAxis,h=X?!g:g,i=f(h?c:ma- -d-b.height,!0,0,0,1),f=f(h?c+b.width:ma-d,!0,0,0,1);a[g?"xAxis":"yAxis"].push({axis:e,min:Za(i,f),max:$(i,f)})}}),Z(l,"selection",a,Ab));n=n.destroy()}U(G,{cursor:"auto"});l.mouseIsDown=Ya=k=!1;Na(V,ra?"touchend":"mouseup",f)}function g(a){var b=y(a.pageX)?a.pageX:a.page.x,a=y(a.pageX)?a.pageY:a.page.y;Va&&!Eb(b-Va.left-S,a-Va.top-L)&&e()}function h(){e();Va=null}var i,j,k,n,m=wa?"":q.zoomType,u=/x/.test(m),v=/y/.test(m),F=u&&!X||v&&X,t=v&&!X||u&&X;Aa=function(){Wa?(Wa.translate(S,L),X&&Wa.attr({width:l.plotWidth, -height:l.plotHeight}).invert()):l.trackerGroup=Wa=K.g("tracker").attr({zIndex:9}).add()};Aa();if(a.enabled)l.tooltip=sb=d(a),Cb=setInterval(function(){mb&&mb()},32);(function(){G.onmousedown=function(a){a=b(a);!ra&&a.preventDefault&&a.preventDefault();l.mouseIsDown=Ya=!0;l.mouseDownX=i=a.chartX;j=a.chartY;ja(V,ra?"touchend":"mouseup",f)};var d=function(c){if(!c||!(c.touches&&c.touches.length>1)){c=b(c);if(!ra)c.returnValue=!1;var d=c.chartX,e=c.chartY,f=!Eb(d-S,e-L);ra&&c.type==="touchstart"&&(r(c.target, -"isTracker")?l.runTrackerClick||c.preventDefault():!Bb&&!f&&c.preventDefault());f&&(dS+la&&(d=S+la),eL+ma&&(e=L+ma));if(Ya&&c.type!=="touchstart"){if(k=Math.sqrt(Math.pow(i-d,2)+Math.pow(j-e,2)),k>10){var g=Eb(i-S,j-L);if(Ob&&(u||v)&&g)n||(n=K.rect(S,L,F?1:la,t?1:ma,0).attr({fill:q.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add());n&&F&&(c=d-i,n.attr({width:ya(c),x:(c>0?0:c)+i}));n&&t&&(e-=j,n.attr({height:ya(e),y:(e>0?0:e)+j}));g&&!n&&q.panning&&l.pan(d)}}else if(!f){var h, -d=l.hoverPoint,e=l.hoverSeries,m,o,g=qa,x=X?c.chartY:c.chartX-S;if(sb&&a.shared&&(!e||!e.noSharedTooltip)){h=[];m=Y.length;for(o=0;og&&h.splice(m,1);if(h.length&&h[0].plotX!==nb)sb.refresh(h),nb=h[0].plotX}if(e&&e.tracker&&(c=e.tooltipPoints[x])&&c!==d)c.onMouseOver()}return f||!Ob}};G.onmousemove= -d;ja(G,"mouseleave",h);ja(V,"mousemove",g);G.ontouchstart=function(a){if(u||v)G.onmousedown(a);d(a)};G.ontouchmove=d;G.ontouchend=function(){k&&e()};G.onclick=function(a){var d=l.hoverPoint,a=b(a);a.cancelBubble=!0;if(!k)if(d&&r(a.target,"isTracker")){var e=d.plotX,f=d.plotY;N(d,{pageX:Va.left+S+(X?la-f:e),pageY:Va.top+L+(X?ma-e:f)});Z(d.series,"click",N(a,{point:d}));d.firePointEvent("click",a)}else N(a,c(a)),Eb(a.chartX-S,a.chartY-L)&&Z(l,"click",a);k=!1}})();N(this,{zoomX:u,zoomY:v,resetTracker:e, -normalizeMouseEvent:b,destroy:function(){if(l.trackerGroup)l.trackerGroup=Wa=l.trackerGroup.destroy();Na(G,"mouseleave",h);Na(V,"mousemove",g);G.onclick=G.onmousedown=G.onmousemove=G.ontouchstart=G.ontouchend=G.ontouchmove=null}})}function f(a){var b=a.type||q.type||q.defaultSeriesType,c=Ca[b],d=l.hasRendered;if(d)if(X&&b==="column")c=Ca.bar;else if(!X&&b==="bar")c=Ca.column;b=new c;b.init(l,a);!d&&b.inverted&&(X=!0);if(b.isCartesian)Ob=b.isCartesian;Y.push(b);return b}function g(){q.alignTicks!== -!1&&o(va,function(a){a.adjustTickAmount()});hb=null}function h(a){var b=l.isDirtyLegend,c,d=l.isDirtyBox,e=Y.length,f=e,h=l.clipRect;for(Lb(a,l);f--;)if(a=Y[f],a.isDirty&&a.options.stacking){c=!0;break}if(c)for(f=e;f--;)if(a=Y[f],a.options.stacking)a.isDirty=!0;o(Y,function(a){a.isDirty&&a.options.legendType==="point"&&(b=!0)});if(b&&Yb.renderLegend)Yb.renderLegend(),l.isDirtyLegend=!1;Ob&&(Ja||(hb=null,o(va,function(a){a.setScale()})),g(),Zb(),o(va,function(a){Z(a,"afterSetExtremes",a.getExtremes()); -a.isDirty&&a.redraw()}));d&&(ob(),Aa(),h&&(Pb(h),h.animate({width:l.plotSizeX,height:l.plotSizeY+1})));o(Y,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});rb&&rb.resetTracker&&rb.resetTracker();K.draw();Z(l,"redraw")}function i(){var b=a.xAxis||{},d=a.yAxis||{},b=Hb(b);o(b,function(a,b){a.index=b;a.isX=!0});d=Hb(d);o(d,function(a,b){a.index=b});b=b.concat(d);o(b,function(a){new c(a)});g()}function k(){var a=Ba.lang,b=q.resetZoomButton,c=b.theme,d=c.states,e=b.relativeTo=== -"chart"?null:{x:S,y:L,width:la,height:ma};l.resetZoomButton=K.button(a.resetZoom,null,null,Ib,c,d&&d.hover).attr({align:b.position.align,title:a.resetZoomTitle}).add().align(b.position,!1,e)}function j(b,c){fa=M(a.title,b);da=M(a.subtitle,c);o([["title",b,fa],["subtitle",c,da]],function(a){var b=a[0],c=l[b],d=a[1],a=a[2];c&&d&&(c=c.destroy());a&&a.text&&!c&&(l[b]=K.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":Da+b,zIndex:1}).css(a.style).add().align(a,!1,R))})}function m(){Ea=q.renderTo; -Oa=Da+lc++;yb(Ea)&&(Ea=V.getElementById(Ea));Ea||jc(13,!0);Ea.innerHTML="";Ea.offsetWidth||(aa=Ea.cloneNode(0),U(aa,{position:tb,top:"-9999px",display:""}),V.body.appendChild(aa));na=(aa||Ea).offsetWidth;za=(aa||Ea).offsetHeight;l.chartWidth=qa=q.width||na||600;l.chartHeight=ta=q.height||(za>19?za:400);l.container=G=xa(db,{className:Da+"container"+(q.className?" "+q.className:""),id:Oa},N({position:yc,overflow:$a,width:qa+ia,height:ta+ia,textAlign:"left",lineHeight:"normal"},q.style),aa||Ea);l.renderer= -K=q.forExport?new Fb(G,qa,ta,!0):new $b(G,qa,ta);wa&&K.create(l,G,qa,ta);var a,b;zc&&G.getBoundingClientRect&&(a=function(){U(G,{left:0,top:0});b=G.getBoundingClientRect();U(G,{left:-(b.left-Q(b.left))+ia,top:-(b.top-Q(b.top))+ia})},a(),ja(ea,"resize",a),ja(l,"destroy",function(){Na(ea,"resize",a)}))}function n(){function a(c){var d=q.width||Ea.offsetWidth,e=q.height||Ea.offsetHeight,c=c.target;if(d&&e&&(c===ea||c===V)){if(d!==na||e!==za)clearTimeout(b),b=setTimeout(function(){zb(d,e,!1)},100);na= -d;za=e}}var b;ja(ea,"resize",a);ja(l,"destroy",function(){Na(ea,"resize",a)})}function u(){l&&Z(l,"endResize",null,function(){Ja-=1})}function t(){for(var b=X||q.inverted||q.type==="bar"||q.defaultSeriesType==="bar",c=a.series,d=c&&c.length;!b&&d--;)c[d].type==="bar"&&(b=!0);l.inverted=X=b}function D(){var b=a.labels,c=a.credits,d;j();Yb=l.legend=new Tb;o(va,function(a){a.setScale()});Zb();o(va,function(a){a.setTickPositions(!0)});g();Zb();ob();Ob&&o(va,function(a){a.render()});if(!l.seriesGroup)l.seriesGroup= -K.g("series-group").attr({zIndex:3}).add();o(Y,function(a){a.translate();a.setTooltipPoints();a.render()});b.items&&o(b.items,function(){var a=N(b.style,this.style),c=Q(a.left)+S,d=Q(a.top)+L+12;delete a.left;delete a.top;K.text(this.html,c,d).attr({zIndex:2}).css(a).add()});if(c.enabled&&!l.credits)d=c.href,l.credits=K.text(c.text,0,0).on("click",function(){if(d)location.href=d}).attr({align:c.position.align,zIndex:8}).css(c.style).add().align(c.position);Aa();l.hasRendered=!0;aa&&(Ea.appendChild(G), -Vb(aa))}function x(){if(!Qb&&ea==ea.top&&V.readyState!=="complete"||wa&&!ea.canvg)wa?Ac.push(x,a.global.canvasToolsURL):V.attachEvent("onreadystatechange",function(){V.detachEvent("onreadystatechange",x);V.readyState==="complete"&&x()});else{m();Z(l,"init");if(Highcharts.RangeSelector&&a.rangeSelector.enabled)l.rangeSelector=new Highcharts.RangeSelector(l);pb();xb();t();i();o(a.series||[],function(a){f(a)});if(Highcharts.Scroller&&(a.navigator.enabled||a.scrollbar.enabled))l.scroller=new Highcharts.Scroller(l); -l.render=D;l.tracker=rb=new e(a.tooltip);D();K.draw();b&&b.apply(l,[l]);o(l.callbacks,function(a){a.apply(l,[l])});Z(l,"load")}}var E=a.series;a.series=null;a=M(Ba,a);a.series=E;var q=a.chart,E=q.margin,E=kb(E)?E:[E,E,E,E],w=p(q.marginTop,E[0]),v=p(q.marginRight,E[1]),Sa=p(q.marginBottom,E[2]),A=p(q.marginLeft,E[3]),C=q.spacingTop,F=q.spacingRight,T=q.spacingBottom,gb=q.spacingLeft,R,fa,da,L,ka,O,S,sa,Ea,aa,G,Oa,na,za,qa,ta,bb,ab,Ha,Pa,Xa,pa,l=this,Bb=(E=q.events)&&!!E.click,Ka,Eb,sb,Ya,ub,wb,Ia, -ma,la,rb,Wa,Aa,Yb,Fa,vb,Va,Ob=q.showAxes,Ja=0,va=[],hb,Y=[],X,K,mb,Cb,nb,ob,Zb,pb,xb,zb,Ab,Ib,Tb=function(){function a(b,c){var d=b.legendItem,e=b.legendLine,g=b.legendSymbol,h=q.color,i=c?f.itemStyle.color:h,h=c?b.color:h;d&&d.css({fill:i});e&&e.attr({stroke:h});g&&g.attr({stroke:h,fill:h})}function b(a){var c=a.legendItem,d=a.legendLine,e=a._legendItemPos,f=e[0],e=e[1],g=a.legendSymbol,a=a.checkbox;c&&c.attr({x:v?f:Fa-f,y:e});d&&d.translate(v?f:Fa-f,e-4);g&&(c=f+g.xOff,g.attr({x:v?c:Fa-c,y:e+g.yOff})); -if(a)a.x=f,a.y=e}function c(){o(j,function(a){var b=a.checkbox,c=r.alignAttr;b&&U(b,{left:c.translateX+a.legendItemWidth+b.x-40+ia,top:c.translateY+b.y-11+ia})})}function d(b){var c,e,j,k,l=b.legendItem;k=b.series||b;var o=k.options,F=o&&o.borderWidth||0;if(!l){k=/^(bar|pie|area|column)$/.test(k.type);b.legendItem=l=K.text(f.labelFormatter.call(b),0,0,f.useHTML).css(b.visible?n:q).on("mouseover",function(){b.setState(Ra);l.css(m)}).on("mouseout",function(){l.css(b.visible?n:q);b.setState()}).on("click", -function(){var a=function(){b.setVisible()};b.firePointEvent?b.firePointEvent("legendItemClick",null,a):Z(b,"legendItemClick",null,a)}).attr({align:v?"left":"right",zIndex:2}).add(r);if(!k&&o&&o.lineWidth){var T={"stroke-width":o.lineWidth,zIndex:2};if(o.dashStyle)T.dashstyle=o.dashStyle;b.legendLine=K.path([ua,(-h-i)*(v?1:-1),0,ha,-i*(v?1:-1),0]).attr(T).add(r)}if(k)j=K.rect(c=-h-i,e=-11,h,12,2).attr({zIndex:3}).add(r),v||(c+=h);else if(o&&o.marker&&o.marker.enabled)j=o.marker.radius,j=K.symbol(b.symbol, -c=-h/2-i-j,e=-4-j,2*j,2*j).attr(b.pointAttr[Ga]).attr({zIndex:3}).add(r),v||(c+=h/2);if(j)j.xOff=c+F%2/2,j.yOff=e+F%2/2;b.legendSymbol=j;a(b,b.visible);if(o&&o.showCheckbox)b.checkbox=xa("input",{type:"checkbox",checked:b.selected,defaultChecked:b.selected},f.itemCheckboxStyle,G),ja(b.checkbox,"click",function(a){Z(b,"checkboxClick",{checked:a.target.checked},function(){b.select()})})}c=l.getBBox();e=b.legendItemWidth=f.itemWidth||h+i+c.width+u;w=c.height;if(g&&x-t+e>(C||qa-2*u-t))x=t,p+=E+w+y;D= -p+y;b._legendItemPos=[x,p];g?x+=e:p+=E+w+y;A=C||$(g?x-t:e,A)}function e(){x=t;p=u+E+F-5;D=A=0;r||(r=K.g("legend").attr({zIndex:10}).add());j=[];o(L,function(a){var b=a.options;b.showInLegend&&(j=j.concat(a.legendItems||(b.legendType==="point"?a.data:a)))});Kc(j,function(a,b){return(a.options.legendIndex||0)-(b.options.legendIndex||0)});O&&j.reverse();o(j,d);Fa=C||A;vb=D-F+w;if(Sa||B){Fa+=2*u;vb+=2*u;if(T){if(Fa>0&&vb>0)T[T.isNew?"attr":"animate"](T.crisp(null,null,null,Fa,vb)),T.isNew=!1}else T=K.rect(0, -0,Fa,vb,f.borderRadius,Sa||0).attr({stroke:f.borderColor,"stroke-width":Sa||0,fill:B||ga}).add(r).shadow(f.shadow),T.isNew=!0;T[j.length?"show":"hide"]()}o(j,b);for(var a=["left","right","top","bottom"],g,h=4;h--;)g=a[h],k[g]&&k[g]!=="auto"&&(f[h<2?"align":"verticalAlign"]=g,f[h<2?"x":"y"]=Q(k[g])*(h%2?-1:1));j.length&&r.align(N(f,{width:Fa,height:vb}),!0,R);Ja||c()}var f=l.options.legend;if(f.enabled){var g=f.layout==="horizontal",h=f.symbolWidth,i=f.symbolPadding,j,k=f.style,n=f.itemStyle,m=f.itemHoverStyle, -q=M(n,f.itemHiddenStyle),u=f.padding||Q(k.padding),v=!f.rtl,F=18,t=4+u+h+i,x,p,D,w=0,E=f.itemMarginTop||0,y=f.itemMarginBottom||0,T,Sa=f.borderWidth,B=f.backgroundColor,r,A,C=f.width,L=l.series,O=f.reversed;e();ja(l,"endResize",c);return{colorizeItem:a,destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine","legendSymbol"],function(b){a[b]&&a[b].destroy()});b&&Vb(a.checkbox)},renderLegend:e,destroy:function(){T&&(T=T.destroy());r&&(r=r.destroy())}}}};Eb=function(a,b){return a>=0&&a<= -la&&b>=0&&b<=ma};Ib=function(){var a=l.resetZoomButton;Z(l,"selection",{resetSelection:!0},Ab);if(a)l.resetZoomButton=a.destroy()};Ab=function(a){var b=l.pointCount<100,c;l.resetZoomEnabled!==!1&&!l.resetZoomButton&&k();!a||a.resetSelection?o(va,function(a){a.options.zoomEnabled!==!1&&(a.setExtremes(null,null,!1),c=!0)}):o(a.xAxis.concat(a.yAxis),function(a){var b=a.axis;if(l.tracker[b.isXAxis?"zoomX":"zoomY"])b.setExtremes(a.min,a.max,!1),c=!0});c&&h(!0,b)};l.pan=function(a){var b=l.xAxis[0],c=l.mouseDownX, -d=b.pointRange/2,e=b.getExtremes(),f=b.translate(c-a,!0)+d,c=b.translate(c+la-a,!0)-d;(d=l.hoverPoints)&&o(d,function(a){a.setState()});f>Za(e.dataMin,e.min)&&c<$(e.dataMax,e.max)&&b.setExtremes(f,c,!0,!1);l.mouseDownX=a;U(G,{cursor:"move"})};Zb=function(){var b=a.legend,c=p(b.margin,10),d=b.x,e=b.y,f=b.align,g=b.verticalAlign,h;pb();if((l.title||l.subtitle)&&!y(w))(h=$(l.title&&!fa.floating&&!fa.verticalAlign&&fa.y||0,l.subtitle&&!da.floating&&!da.verticalAlign&&da.y||0))&&(L=$(L,h+p(fa.margin,15)+ -C));b.enabled&&!b.floating&&(f==="right"?y(v)||(ka=$(ka,Fa-d+c+F)):f==="left"?y(A)||(S=$(S,Fa+d+c+gb)):g==="top"?y(w)||(L=$(L,vb+e+c+C)):g==="bottom"&&(y(Sa)||(O=$(O,vb-e+c+T))));l.extraBottomMargin&&(O+=l.extraBottomMargin);l.extraTopMargin&&(L+=l.extraTopMargin);Ob&&o(va,function(a){a.getOffset()});y(A)||(S+=sa[3]);y(w)||(L+=sa[0]);y(Sa)||(O+=sa[2]);y(v)||(ka+=sa[1]);xb()};zb=function(a,b,c){var d=l.title,e=l.subtitle;Ja+=1;Lb(c,l);ab=ta;bb=qa;if(y(a))l.chartWidth=qa=B(a);if(y(b))l.chartHeight= -ta=B(b);U(G,{width:qa+ia,height:ta+ia});K.setSize(qa,ta,c);la=qa-S-ka;ma=ta-L-O;hb=null;o(va,function(a){a.isDirty=!0;a.setScale()});o(Y,function(a){a.isDirty=!0});l.isDirtyLegend=!0;l.isDirtyBox=!0;Zb();d&&d.align(null,null,R);e&&e.align(null,null,R);h(c);ab=null;Z(l,"resize");Wb===!1?u():setTimeout(u,Wb&&Wb.duration||500)};xb=function(){l.plotLeft=S=B(S);l.plotTop=L=B(L);l.plotWidth=la=B(qa-S-ka);l.plotHeight=ma=B(ta-L-O);l.plotSizeX=X?ma:la;l.plotSizeY=X?la:ma;R={x:gb,y:C,width:qa-gb-F,height:ta- -C-T};o(va,function(a){a.setAxisSize();a.setAxisTranslation()})};pb=function(){L=p(w,C);ka=p(v,F);O=p(Sa,T);S=p(A,gb);sa=[0,0,0,0]};ob=function(){var a=q.borderWidth||0,b=q.backgroundColor,c=q.plotBackgroundColor,d=q.plotBackgroundImage,e,f={x:S,y:L,width:la,height:ma};e=a+(q.shadow?8:0);if(a||b)Ha?Ha.animate(Ha.crisp(null,null,null,qa-e,ta-e)):Ha=K.rect(e/2,e/2,qa-e,ta-e,q.borderRadius,a).attr({stroke:q.borderColor,"stroke-width":a,fill:b||ga}).add().shadow(q.shadow);c&&(Pa?Pa.animate(f):Pa=K.rect(S, -L,la,ma,0).attr({fill:c}).add().shadow(q.plotShadow));d&&(Xa?Xa.animate(f):Xa=K.image(d,S,L,la,ma).add());q.plotBorderWidth&&(pa?pa.animate(pa.crisp(null,S,L,la,ma)):pa=K.rect(S,L,la,ma,0,q.plotBorderWidth).attr({stroke:q.plotBorderColor,"stroke-width":q.plotBorderWidth,zIndex:4}).add());l.isDirtyBox=!1};q.reflow!==!1&&ja(l,"load",n);if(E)for(Ka in E)ja(l,Ka,E[Ka]);l.options=a;l.series=Y;l.xAxis=[];l.yAxis=[];l.addSeries=function(a,b,c){var d;a&&(Lb(c,l),b=p(b,!0),Z(l,"addSeries",{options:a},function(){d= -f(a);d.isDirty=!0;l.isDirtyLegend=!0;b&&l.redraw()}));return d};l.animation=wa?!1:p(q.animation,!0);l.Axis=c;l.destroy=function(){var b,c=G&&G.parentNode;if(l!==null){Z(l,"destroy");Na(l);for(b=va.length;b--;)va[b]=va[b].destroy();for(b=Y.length;b--;)Y[b]=Y[b].destroy();o("title,subtitle,seriesGroup,clipRect,credits,tracker,scroller,rangeSelector".split(","),function(a){var b=l[a];b&&(l[a]=b.destroy())});o([Ha,pa,Pa,Yb,sb,K,rb],function(a){a&&a.destroy&&a.destroy()});Ha=pa=Pa=Yb=sb=K=rb=null;if(G)G.innerHTML= -"",Na(G),c&&Vb(G),G=null;clearInterval(Cb);for(b in l)delete l[b];a=l=null}};l.get=function(a){var b,c,d;for(b=0;b=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};C=Oa(Ab,1,mb,1E3,Bb,6E4,Pa,36E5,na,864E5,Ka,6048E5,Xa,2592E6,za,31556952E3);Ia={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,k=function(a){for(g= -a.length;g--;)a[g]===ua&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));d===1&&(c=[].concat(c).splice(0,f).concat(c));a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
      ',pointFormat:'{series.name}: {point.y}
      ',shadow:!0,shared:wa,snap:ra?25:10,style:{color:"#333333", -fontSize:"12px",padding:"5px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var cc={dateTimeLabelFormats:Oa(Ab,"%H:%M:%S.%L",mb,"%H:%M:%S",Bb,"%H:%M",Pa,"%H:%M",na,"%e. %b",Ka,"%e. %b",Xa,"%b '%y",za,"%Y"),endOnTick:!1,gridLineColor:"#C0C0C0",labels:A,lineColor:"#C0D0E0",lineWidth:1,max:null,min:null,minPadding:0.01,maxPadding:0.01, -minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#6D869F",fontWeight:"bold"}},type:"linear"},kc=M(cc,{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{align:"right",x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0, -tickWidth:0,title:{rotation:270,text:"Y-values"},stackLabels:{enabled:!1,formatter:function(){return this.total},style:A.style}}),Nc={labels:{align:"right",x:-8,y:null},title:{rotation:270}},Mc={labels:{align:"left",x:8,y:null},title:{rotation:90}},wc={labels:{align:"center",x:0,y:14},title:{rotation:0}},Lc=M(wc,{labels:{y:-5}}),ka=Ba.plotOptions,A=ka.line;ka.spline=M(A);ka.scatter=M(A,{lineWidth:0,states:{hover:{lineWidth:0}},tooltip:{headerFormat:'{series.name}
      ', -pointFormat:"x: {point.x}
      y: {point.y}
      "}});ka.area=M(A,{threshold:0});ka.areaspline=M(ka.area);ka.column=M(A,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{y:null,verticalAlign:null},threshold:0});ka.bar=M(ka.column,{dataLabels:{align:"left",x:5,y:0}});ka.pie=M(A,{borderColor:"#FFFFFF", -borderWidth:1,center:["50%","50%"],colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},y:5},legendType:"point",marker:null,size:"75%",showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}}});uc();var bb=function(a){var b=[],c;(function(a){(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[Q(c[1]),Q(c[2]),Q(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))&& -(b=[Q(c[1],16),Q(c[2],16),Q(c[3],16),1])})(a);return{get:function(c){return b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a},brighten:function(a){if(Ja(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=Q(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},setOpacity:function(a){b[3]=a;return this}}};pa.prototype={init:function(a,b){this.element=b==="span"?xa(b):V.createElementNS("http://www.w3.org/2000/svg",b);this.renderer=a;this.attrSetters={}},animate:function(a, -b,c){b=p(b,Wb,!0);Pb(this);if(b){b=M(b);if(c)b.complete=c;ec(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName,i=this.renderer,k,j=this.attrSetters,m=this.shadows,n,o=this;yb(a)&&y(b)&&(c=a,a={},a[c]=b);if(yb(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),o=r(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&(o=parseFloat(o));else for(c in a)if(k=!1,d=a[c],e=j[c]&&j[c](d,c),e!==!1){e!==ba&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")), -/(NaN| {2}|^$)/.test(d)&&(d="M 0 0"),this.d=d;else if(c==="x"&&h==="text"){for(e=0;en&&(U(b,{width:n+ia,display:"block",whiteSpace:"normal"}),j=n),n=B((Q(b.style.fontSize)||12)*1.2),x=u<0&&-j,E=t<0&&-m,D=u*t<0,x+=t*n*(D?1-h:h),E-=u*n*(k?D?h:1-h:1),i&&(x-=j*h*(u<0?-1:1),k&&(E-=m*h*(t<0?-1:1)),U(b,{textAlign:g})),a.xCorr=x,a.yCorr=E;U(b,{left:e+x+ia,top:f+E+ia});a.cTT=q}}else this.alignOnAdd=!0},updateTransform:function(){var a=this.translateX|| -0,b=this.translateY||0,c=this.inverted,d=this.rotation,e=[];c&&(a+=this.attr("width"),b+=this.attr("height"));(a||b)&&e.push("translate("+a+","+b+")");c?e.push("rotate(90) scale(-1,1)"):d&&e.push("rotate("+d+" "+this.x+" "+this.y+")");e.length&&r(this.element,"transform",e.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){a?(this.alignOptions=a,this.alignByTranslate=b,c||this.renderer.alignedObjects.push(this)):(a=this.alignOptions,b= -this.alignByTranslate);var c=p(c,this.renderer),d=a.align,e=a.verticalAlign,f=(c.x||0)+(a.x||0),g=(c.y||0)+(a.y||0),h={};/^(right|center)$/.test(d)&&(f+=(c.width-(a.width||0))/{right:1,center:2}[d]);h[b?"translateX":"x"]=B(f);/^(bottom|middle)$/.test(e)&&(g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1));h[b?"translateY":"y"]=B(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a){var b,c,d=this.rotation;c=this.element;var e=d*Bc;if(c.namespaceURI=== -"http://www.w3.org/2000/svg"){try{b=c.getBBox?N({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(f){}if(!b||b.width<0)b={width:0,height:0};a=b.width;c=b.height;if(d)b.width=ya(c*sa(e))+ya(a*fa(e)),b.height=ya(c*fa(e))+ya(a*sa(e))}else b=this.htmlGetBBox(a);return b},show:function(){return this.attr({visibility:eb})},hide:function(){return this.attr({visibility:$a})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=r(f,"zIndex"),h;this.parentInverted= -a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=Q(g);if(c.handleZ)for(c=0;cg||!y(g)&&y(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;Z(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.box,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=null;Pb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy(); -if(a.stops){for(f=0;f/g, -'').replace(/<(i|em)>/g,'').replace(//g,"").split(//g),d=b.childNodes,e=/style="([^"]+)"/,f=/href="([^"]+)"/,g=r(b,"x"),h=a.styles,i=h&&Q(h.width),k=h&&h.lineHeight,j,h=d.length;h--;)b.removeChild(d[h]);i&&!a.added&&this.box.appendChild(b);c[c.length-1]===""&&c.pop();o(c,function(c,d){var h,t=0,p,c=c.replace(//g,"|||");h=c.split("|||"); -o(h,function(c){if(c!==""||h.length===1){var m={},o=V.createElementNS("http://www.w3.org/2000/svg","tspan");e.test(c)&&r(o,"style",c.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"));f.test(c)&&(r(o,"onclick",'location.href="'+c.match(f)[1]+'"'),U(o,{cursor:"pointer"}));c=(c.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");o.appendChild(V.createTextNode(c));t?m.dx=3:m.x=g;if(!t){if(d){!Qb&&a.renderer.forExport&&U(o,{display:"block"});p=ea.getComputedStyle&&Q(ea.getComputedStyle(j, -null).getPropertyValue("line-height"));if(!p||isNaN(p))p=k||j.offsetHeight||18;r(o,"dy",p)}j=o}r(o,m);b.appendChild(o);t++;if(i)for(var c=c.replace(/-/g,"- ").split(" "),w,v=[];c.length||v.length;)w=a.getBBox().width,m=w>i,!m||c.length===1?(c=v,v=[],c.length&&(o=V.createElementNS("http://www.w3.org/2000/svg","tspan"),r(o,{dy:k||16,x:g}),b.appendChild(o),w>i&&(i=w))):(o.removeChild(o.firstChild),v.unshift(c.pop())),c.length&&o.appendChild(V.createTextNode(c.join(" ").replace(/- /g,"-")))}})})},button:function(a, -b,c,d,e,f,g){var h=this.label(a,b,c),i=0,k,j,m,n,o,a={x1:0,y1:0,x2:0,y2:1},e=M(Oa("stroke-width",1,"stroke","#999","fill",Oa("linearGradient",a,"stops",[[0,"#FFF"],[1,"#DDD"]]),"r",3,"padding",3,"style",Oa("color","black")),e);m=e.style;delete e.style;f=M(e,Oa("stroke","#68A","fill",Oa("linearGradient",a,"stops",[[0,"#FFF"],[1,"#ACF"]])),f);n=f.style;delete f.style;g=M(e,Oa("stroke","#68A","fill",Oa("linearGradient",a,"stops",[[0,"#9BD"],[1,"#CDF"]])),g);o=g.style;delete g.style;ja(h.element,"mouseenter", -function(){h.attr(f).css(n)});ja(h.element,"mouseleave",function(){k=[e,f,g][i];j=[m,n,o][i];h.attr(k).css(j)});h.setState=function(a){(i=a)?a===2&&h.attr(g).css(o):h.attr(e).css(m)};return h.on("click",function(){d.call(h)}).attr(e).css(N({cursor:"default"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=B(a[1])+b%2/2);a[2]===a[5]&&(a[2]=a[5]=B(a[2])+b%2/2);return a},path:function(a){return this.createElement("path").attr({d:a,fill:ga})},circle:function(a,b,c){a=kb(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)}, -arc:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;return this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0})},rect:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.width,d=a.height,e=a.r,f=a.strokeWidth,a=a.x;e=this.createElement("rect").attr({rx:e,ry:e,fill:ga});return e.attr(e.crisp(f,a,b,$(c,0),$(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()}, -g:function(a){var b=this.createElement("g");return y(a)?b.attr({"class":Da+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:ga};arguments.length>1&&N(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(B(b),B(c),d,e,f),i=/^url\((.*?)\)$/,k;if(h)g=this.path(h),N(g,{symbolName:a, -x:b,y:c,width:d,height:e}),f&&N(g,f);else if(i.test(a)){var j=function(a,b){a.attr({width:b[0],height:b[1]}).translate(-B(b[0]/2),-B(b[1]/2))};k=a.match(i)[1];a=Dc[k];g=this.image(k).attr({x:b,y:c});a?j(g,a):(g.attr({width:0,height:0}),xa("img",{onload:function(){j(g,Dc[k]=[this.width,this.height])},src:k}))}return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[ua,a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return[ua,a,b,ha,a+c,b,a+c, -b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return[ua,a+c/2,b,ha,a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return[ua,a,b,ha,a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return[ua,a+c/2,b,ha,a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-1.0E-6,d=e.innerR,h=fa(f),i=sa(f),k=fa(g),g=sa(g),e=e.end-f');if(b)c=b===db||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=xa(c);this.renderer=a;this.attrSetters={}},add:function(a){var b= -this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);wb&&d.gVis===$a&&U(c,{visibility:$a});d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.htmlUpdateTransform();Z(this,"add");return this},toggleChildren:function(a,b){for(var c=a.childNodes,d=c.length;d--;)U(c[d],{visibility:b}),c[d].nodeName==="DIV"&&this.toggleChildren(c[d],b)},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,k=this.symbolName, -j,m=this.shadows,n,o=this.attrSetters,p=this;yb(a)&&y(b)&&(c=a,a={},a[c]=b);if(yb(a))c=a,p=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],n=!1,e=o[c]&&o[c](d,c),e!==!1&&d!==null){e!==ba&&(d=e);if(k&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))j||(this.symbolAttr(a),j=!0),n=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");e=d.length;for(n=[];e--;)n[e]=Ja(d[e])?B(d[e]*10)-5:d[e]==="Z"?"x":d[e];d=n.join(" ")||"x";f.path=d;if(m)for(e=m.length;e--;)m[e].path= -d;n=!0}else if(c==="zIndex"||c==="visibility"){if(wb&&c==="visibility"&&h==="DIV")f.gVis=d,this.toggleChildren(f,d),d===eb&&(d=null);d&&(g[c]=d);n=!0}else if(c==="width"||c==="height")d=$(0,d),this[c]=d,this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,n=!0;else if(c==="x"||c==="y")this[c]=d,g[{x:"left",y:"top"}[c]]=d;else if(c==="class")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]= -d,Ja(d)&&(d+=ia);else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||xa(i.prepVML([""]),null,null,f))[c]=d||"solid",this.dashstyle=d,n=!0;else if(c==="fill")h==="SPAN"?g.color=d:(f.filled=d!==ga?!0:!1,d=i.color(d,f,c),c="fillcolor");else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.htmlUpdateTransform(),n=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,n=!0;if(m&&c==="visibility")for(e=m.length;e--;)m[e].style[c]=d;n||(wb?f[c]=d:r(f,c,d))}return p},clip:function(a){var b= -this,c=a.members;c.push(b);b.destroyClip=function(){Gb(c,b)};return b.css(a.getCSS(b.inverted))},css:pa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Vb(a)},destroy:function(){this.destroyClip&&this.destroyClip();return pa.prototype.destroy.apply(this)},empty:function(){for(var a=this.element.childNodes,b=a.length,c;b--;)c=a[b],c.parentNode.removeChild(c)},on:function(a,b){this.element["on"+a]=function(){var a=ea.event;a.target=a.srcElement;b(a)};return this},shadow:function(a,b){var c= -[],d,e=this.element,f=this.renderer,g,h=e.style,i,k=e.path;k&&typeof k.value!=="string"&&(k="x");if(a){for(d=1;d<=3;d++)i=[''],g=xa(f.prepVML(i),null,{left:Q(h.left)+1,top:Q(h.top)+1}),i=[''],xa(f.prepVML(i),null,null,g),b?b.element.appendChild(g):e.parentNode.insertBefore(g,e),c.push(g);this.shadows=c}return this}}),isIE8:Ha.indexOf("MSIE 8.0")> --1,init:function(a,b,c){var d;this.alignedObjects=[];d=this.createElement(db);a.appendChild(d.element);this.box=d.element;this.boxWrapper=d;this.setSize(b,c,!1);if(!V.namespaces.hcv)V.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),V.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "},clipRect:function(a,b,c,d){var e=this.createElement();return N(e,{members:[],left:a,top:b,width:c,height:d,getCSS:function(a){var b= -this.top,c=this.left,d=c+this.width,e=b+this.height,b={clip:"rect("+B(a?c:b)+"px,"+B(a?e:d)+"px,"+B(a?d:e)+"px,"+B(a?b:c)+"px)"};!a&&wb&&N(b,{width:d+ia,height:e+ia});return b},updateClipping:function(){o(e.members,function(a){a.css(e.getCSS(a.inverted))})}})},color:function(a,b,c){var d,e=/^rgba/;if(a&&a.linearGradient){var f,g,h=a.linearGradient,i=h.x1||h[0]||0,k=h.y1||h[1]||0,j=h.x2||h[2]||0,h=h.y2||h[3]||0,m,n,p,t;o(a.stops,function(a,b){e.test(a[1])?(d=bb(a[1]),f=d.get("rgb"),g=d.get("a")):(f= -a[1],g=1);b?(p=f,t=g):(m=f,n=g)});if(c==="fill")a=90-oa.atan((h-k)/(j-i))*180/ab,a=[''],xa(this.prepVML(a),null,null,b);else return f}else if(e.test(a)&&b.tagName!=="IMG")return d=bb(a),a=["<",c,' opacity="',d.get("a"),'"/>'],xa(this.prepVML(a),null,null,b),d.get("rgb");else{b=b.getElementsByTagName(c);if(b.length)b[0].opacity=1;return a}},prepVML:function(a){var b=this.isIE8, -a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.css({left:b,top:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.width,d=a.height,f=a.strokeWidth,a=a.x;var g=this.symbol("rect");g.r=e;return g.attr(g.crisp(f,a,b,$(c,0),$(d,0)))},invertChild:function(a,b){var c=b.style;U(a,{flip:"x",left:Q(c.width)-10,top:Q(c.height)-10,rotation:-90})}, -symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,c=e.r||c||d,d=fa(f),h=sa(f),i=fa(g),k=sa(g),e=e.innerR,j=0.07/c,m=e&&0.1/e||0;if(g-f===0)return["x"];else 2*ab-g+fa+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=a.data;a.data=null;c=M(c[this.type],c.series,a);c.data=a.data=d;this.tooltipOptions=M(b.tooltip,c.tooltip);return c},getColor:function(){var a= -this.chart.options.colors,b=this.chart.counters;this.color=this.options.color||a[b.color++]||"#0000ff";b.wrapColor(a.length)},getSymbol:function(){var a=this.options.marker,b=this.chart,c=b.options.symbols,b=b.counters;this.symbol=a.symbol||c[b.symbol++];if(/^url/.test(this.symbol))a.radius=0;b.wrapSymbol(c.length)},addPoint:function(a,b,c,d){var e=this.data,f=this.graph,g=this.area,h=this.chart,i=this.xData,k=this.yData,j=f&&f.shift||0,m=this.options.data;Lb(d,h);if(f&&c)f.shift=j+1;if(g)g.shift= -j+1,g.isArea=!0;b=p(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);i.push(d.x);k.push(this.valueCount===4?[d.open,d.high,d.low,d.close]:d.y);m.push(a);c&&(e[0]?e[0].remove(!1):(e.shift(),i.shift(),k.shift(),m.shift()));this.getAttribs();this.isDirtyData=this.isDirty=!0;b&&h.redraw()},setData:function(a,b){var c=this.points,d=this.options,e=this.initialColor,f=this.chart,g=null;this.xIncrement=null;this.pointRange=this.xAxis&&this.xAxis.categories&&1||d.pointRange;if(y(e))f.counters.color= -e;var h=[],i=[],k=a?a.length:[],j=this.valueCount===4;if(k>(d.turboThreshold||1E3)){for(e=0;g===null&&ej||this.forceCrop)if(a=i.getExtremes(),i=a.min,j=a.max,b[d-1]j)b=[],c=[];else if(b[0]j){for(a=0;a=i){e=$(0,a-1);break}for(;aj){f=a+1;break}b=b.slice(e,f);c=c.slice(e,f);g=!0}for(a=b.length-1;a>0;a--)if(d=b[a]-b[a-1],h===ba||d0||k)g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(this.group)}, -convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=ka[a.type].marker?a.options.marker:a.options,c=b.states,d=c[Ra],e,f=a.color,g={stroke:f,fill:f},h=a.points,i=[],k,j=a.pointAttrToOptions,m;a.options.marker?(d.radius=d.radius||b.radius+2,d.lineWidth=d.lineWidth||b.lineWidth+1):d.color=d.color||bb(d.color||f).brighten(d.brightness).get();i[Ga]=a.convertAttribs(b, -g);o([Ra,"select"],function(b){i[b]=a.convertAttribs(c[b],i[Ga])});a.pointAttr=i;for(f=h.length;f--;){g=h[f];if((b=g.options&&g.options.marker||g.options)&&b.enabled===!1)b.radius=0;e=!1;if(g.options)for(m in j)y(b[j[m]])&&(e=!0);if(e){k=[];c=b.states||{};e=c[Ra]=c[Ra]||{};if(!a.options.marker)e.color=bb(e.color||g.options.color).brighten(e.brightness||d.brightness).get();k[Ga]=a.convertAttribs(b,i[Ga]);k[Ra]=a.convertAttribs(c[Ra],i[Ra],k[Ga]);k.select=a.convertAttribs(c.select,i.select,k[Ga])}else k= -i;g.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=a.clipRect,d=/AppleWebKit\/533/.test(Ha),e,f,g=a.data||[],h,i,k;Z(a,"destroy");Na(a);o(["xAxis","yAxis"],function(b){if(k=a[b])Gb(k.series,a),k.isDirty=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(f=g.length;f--;)(h=g[f])&&h.destroy&&h.destroy();a.points=null;if(c&&c!==b.clipRect)a.clipRect=c.destroy();o(["area","graph","dataLabelsGroup","group","tracker"],function(b){a[b]&&(e=d&&b==="group"?"hide":"destroy",a[b][e]())});if(b.hoverSeries=== -a)b.hoverSeries=null;Gb(b.series,a);for(i in a)delete a[i]},drawDataLabels:function(){var a=this,b=a.options,c=b.dataLabels;if(c.enabled||a._hasPointLabels){var d,e,f=a.points,g,h,i,k=a.dataLabelsGroup,j=a.chart,m=a.xAxis,m=m?m.left:j.plotLeft,n=a.yAxis,n=n?n.top:j.plotTop,u=j.renderer,t=j.inverted,D=a.type,x=b.stacking,E=D==="column"||D==="bar",q=c.verticalAlign===null,w=c.y===null,v;E&&(x?(q&&(c=M(c,{verticalAlign:"middle"})),w&&(c=M(c,{y:{top:14,middle:4,bottom:-6}[c.verticalAlign]}))):q&&(c=M(c, -{verticalAlign:"top"})));k?k.translate(m,n):k=a.dataLabelsGroup=u.g("data-labels").attr({visibility:a.visible?eb:$a,zIndex:6}).translate(m,n).add();h=c;o(f,function(f){v=f.dataLabel;c=h;(g=f.options)&&g.dataLabels&&(c=M(c,g.dataLabels));if(v&&a.isCartesian&&!j.isInsidePlot(f.plotX,f.plotY))f.dataLabel=v.destroy();else if(c.enabled){i=c.formatter.call(f.getLabelConfig(),c);var n=f.barX,m=n&&n+f.barW/2||f.plotX||-999,o=p(f.plotY,-999),q=c.align,r=w?f.y>=0?-6:12:c.y;d=(t?j.plotWidth-o:m)+c.x;e=(t?j.plotHeight- -m:o)+r;D==="column"&&(d+={left:-1,right:1}[q]*f.barW/2||0);!x&&t&&f.y<0&&(q="right",d-=10);c.style.color=p(c.color,c.style.color,a.color,"black");if(v)t&&!c.y&&(e=e+Q(v.styles.lineHeight)*0.9-v.getBBox().height/2),v.attr({text:i}).animate({x:d,y:e});else if(y(i))v=f.dataLabel=u.text(i,d,e,c.useHTML).attr({align:q,rotation:c.rotation,zIndex:1}).css(c.style).add(k),t&&!c.y&&v.attr({y:e+Q(v.styles.lineHeight)*0.9-v.getBBox().height/2});if(E&&b.stacking&&v)m=f.barY,o=f.barW,f=f.barH,v.align(c,null,{x:t? -j.plotWidth-m-f:n,y:t?j.plotHeight-n-o:m,width:t?f:o,height:t?o:f})}})}},drawGraph:function(){var a=this,b=a.options,c=a.graph,d=[],e,f=a.area,g=a.group,h=b.lineColor||a.color,i=b.lineWidth,k=b.dashStyle,j,m=a.chart.renderer,n=a.yAxis.getThreshold(b.threshold),u=/^area/.test(a.type),t=[],D=[];o(a.segments,function(c){j=[];o(c,function(d,e){a.getPointSpline?j.push.apply(j,a.getPointSpline(c,d,e)):(j.push(e?ha:ua),e&&b.step&&j.push(d.plotX,c[e-1].plotY),j.push(d.plotX,d.plotY))});c.length>1?d=d.concat(j): -t.push(c[0]);if(u){var e=[],f,g=j.length;for(f=0;f=0;f--)fa&&i>e?(i=$(a,e),j=2*e-i):ig&&j>e?(j=$(g,e),i=2*e-j):jw?h-w:q-(g<=q?w:0));N(f,{barX:i,barY:j,barW:x,barH:k});f.shapeType="rect";g=N(b.renderer.Element.prototype.crisp.apply({},[e,i,j,x,k]),{r:c.borderRadius});e%2&&(g.y-=1,g.height+=1);f.shapeArgs=g;f.trackerArgs=ya(k)<3&&M(f.shapeArgs,{height:6,y:j-3})})},getSymbol:function(){}, -drawGraph:function(){},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d,e;o(a.points,function(f){var g=f.plotY;if(g!==ba&&!isNaN(g)&&f.y!==null)d=f.graphic,e=f.shapeArgs,d?(Pb(d),d.animate(e)):f.graphic=d=c[f.shapeType](e).attr(f.pointAttr[f.selected?"select":Ga]).add(a.group).shadow(b.shadow)})},drawTracker:function(){var a=this,b=a.chart,c=b.renderer,d,e,f=+new Date,g=a.options,h=g.cursor,i=h&&{cursor:h},k,j;a.isCartesian&&(k=c.g().clip(b.clipRect).add(b.trackerGroup));o(a.points, -function(h){e=h.tracker;d=h.trackerArgs||h.shapeArgs;delete d.strokeWidth;if(h.y!==null)e?e.attr(d):h.tracker=c[h.shapeType](d).attr({isTracker:f,fill:Ec,visibility:a.visible?eb:$a,zIndex:g.zIndex||1}).on(ra?"touchstart":"mouseover",function(c){j=c.relatedTarget||c.fromElement;if(b.hoverSeries!==a&&r(j,"isTracker")!==f)a.onMouseOver();h.onMouseOver()}).on("mouseout",function(b){if(!g.stickyTracking&&(j=b.relatedTarget||b.toElement,r(j,"isTracker")!==f))a.onMouseOut()}).css(i).add(h.group||k)})},animate:function(a){var b= -this,c=b.points,d=b.options;if(!a)o(c,function(a){var c=a.graphic,a=a.shapeArgs,g=b.yAxis,h=d.threshold;c&&(c.attr({height:0,y:y(h)?g.getThreshold(h):g.translate(g.getExtremes().min,0,1,0,1)}),c.animate({height:a.height,y:a.y},d.animation))}),b.animate=null},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0});R.prototype.remove.apply(a,arguments)}});Ca.column=xb;A=O(xb,{type:"bar",init:function(){this.inverted=!0;xb.prototype.init.apply(this, -arguments)}});Ca.bar=A;A=O(R,{type:"scatter",translate:function(){var a=this;R.prototype.translate.apply(a);o(a.points,function(b){b.shapeType="circle";b.shapeArgs={x:b.plotX,y:b.plotY,r:a.chart.options.tooltip.snap}})},drawTracker:function(){for(var a=this,b=a.options.cursor,b=b&&{cursor:b},c=a.points,d=c.length,e;d--;)if(e=c[d].graphic)e.element._index=d;a._hasTracking?a._hasTracking=!0:a.group.on(ra?"touchstart":"mouseover",function(b){a.onMouseOver();c[b.target._index].onMouseOver()}).on("mouseout", -function(){if(!a.options.stickyTracking)a.onMouseOut()}).css(b)}});Ca.scatter=A;A=O(Aa,{init:function(){Aa.prototype.init.apply(this,arguments);var a=this,b;N(a,{visible:a.visible!==!1,name:p(a.name,"Slice")});b=function(){a.slice()};ja(a,"select",b);ja(a,"unselect",b);return a},setVisible:function(a){var b=this.series.chart,c=this.tracker,d=this.dataLabel,e=this.connector,f=this.shadowGroup,g;g=(this.visible=a=a===ba?!this.visible:a)?"show":"hide";this.group[g]();if(c)c[g]();if(d)d[g]();if(e)e[g](); -if(f)f[g]();this.legendItem&&b.legend.colorizeItem(this,a)},slice:function(a,b,c){var d=this.series.chart,e=this.slicedTranslation;Lb(c,d);p(b,!0);a=this.sliced=y(a)?a:!this.sliced;a={translateX:a?e[0]:d.plotLeft,translateY:a?e[1]:d.plotTop};this.group.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}});A=O(R,{type:"pie",isCartesian:!1,pointClass:A,pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:function(){this.initialColor=this.chart.counters.color}, -animate:function(){var a=this;o(a.points,function(b){var c=b.graphic,b=b.shapeArgs,d=-ab/2;c&&(c.attr({r:0,start:d,end:d}),c.animate({r:b.r,start:b.start,end:b.end},a.options.animation))});a.animate=null},setData:function(){R.prototype.setData.apply(this,arguments);this.processData();this.generatePoints()},translate:function(){this.generatePoints();var a=0,b=-0.25,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f=c.center.concat([c.size,c.innerSize||0]),g=this.chart,h=g.plotWidth,i=g.plotHeight, -k,j,m,n=this.points,p=2*ab,t,D=Za(h,i),x,r,q,w=c.dataLabels.distance,f=Xb(f,function(a,b){return(x=/%$/.test(a))?[h,i,D,D][b]*Q(a)/100:a});this.getX=function(a,b){m=oa.asin((a-f[1])/(f[2]/2+w));return f[0]+(b?-1:1)*fa(m)*(f[2]/2+w)};this.center=f;o(n,function(b){a+=b.y});o(n,function(c){t=a?c.y/a:0;k=B(b*p*1E3)/1E3;b+=t;j=B(b*p*1E3)/1E3;c.shapeType="arc";c.shapeArgs={x:f[0],y:f[1],r:f[2]/2,innerR:f[3]/2,start:k,end:j};m=(j+k)/2;c.slicedTranslation=Xb([fa(m)*d+g.plotLeft,sa(m)*d+g.plotTop],B);r=fa(m)* -f[2]/2;q=sa(m)*f[2]/2;c.tooltipPos=[f[0]+r*0.7,f[1]+q*0.7];c.labelPos=[f[0]+r+fa(m)*w,f[1]+q+sa(m)*w,f[0]+r+fa(m)*e,f[1]+q+sa(m)*e,f[0]+r,f[1]+q,w<0?"center":m

      0,u=[[],[]],t,r,x,y,q=2,w;if(d.enabled){R.prototype.drawDataLabels.apply(this);o(a,function(a){a.dataLabel&&u[a.labelPos[7]x){h=[].concat(A);h.sort(y);for(w=C;w--;)h[w].rank=w;for(w=C;w--;)A[w].rank>=x&&A.splice(w,1);C=A.length}for(w=0;wr&&v[F+1]!==null||t").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"":"")+""),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a

      ",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
      ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
      t
      ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="
      "+""+"
      ";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&& -(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after" -,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/harstorage/public/scripts/preferences.js b/harstorage/public/scripts/preferences.js deleted file mode 100644 index c1204f9..0000000 --- a/harstorage/public/scripts/preferences.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Name space - */ -var HARSTORAGE = HARSTORAGE || {}; - -/* - * Cookies - */ -HARSTORAGE.create_cookie = function(name, value) { - "use strict"; - - document.cookie = name + "=" + value + ";" + - "expires=Wed, 1 Jan 2014 00:00:00 UTC;" + - "path=/"; -}; - -HARSTORAGE.read_cookie = function(name) { - "use strict"; - - var nameEQ = name + "="; - var cookies = document.cookie.split(";"); - - for (var i=0; i < cookies.length; i++) { - var cookie = cookies[i]; - while (cookie.charAt(0) === " ") { - cookie = cookie.substring(1, cookie.length); - } - if (cookie.indexOf(nameEQ) === 0) { - return cookie.substring(nameEQ.length, cookie.length); - } - } - - return null; -}; - -/* - * View Preferences Menu - */ -HARSTORAGE.view_preferences = function() { - "use strict"; - - // Read preference from Cookie - var theme = HARSTORAGE.read_cookie("chartTheme"); - - // If preference is found - update form - if (theme) { - var theme_list = document.getElementById("theme-list"); - - var len = theme_list.length; - - for (var i=0; i < len; i++ ) { - if (theme_list[i].value === theme) { - theme_list[i].checked = true; - break; - } - } - } - - // Display preference menu - var menu = document.getElementById("preferences"); - - if (menu.style.display === "none" || menu.style.display === "") { - menu.style.display = "block"; - } else { - menu.style.display = "none"; - } -}; - -/* - * Update Preferences - */ -HARSTORAGE.update_preferences = function() { - "use strict"; - - // Look up for selected theme - var theme_list = document.getElementById("theme-list"); - - var len = theme_list.length; - - for (var i=0; i < len; i++ ) { - if (theme_list[i].checked === true) { - HARSTORAGE.create_cookie("chartTheme", theme_list[i].value); - break; - } - } - - // Refresh current window - window.location.reload(); -}; - -/* - * Chart colors from theme - */ -HARSTORAGE.Colors = function() { - "use strict"; - - // Colors for Y Axis labels - var theme = HARSTORAGE.read_cookie("chartTheme"); - - if (theme === "dark-green" || !theme) { - return [ - "#DDDF0D", - "#55BF3B", - "#DF5353", - "#7798BF", - "#6AF9C4", - "#DB843D", - "#EEAAEE", - "#669933", - "#CC3333", - "#FF9944", - "#996633", - "#4572A7", - "#80699B", - "#92A8CD", - "#A47D7C", - "#9A48C9", - "#C99A48", - "#879D79" - ]; - } else { - return [ - "#669933", - "#CC3333", - "#FF9944", - "#996633", - "#4572A7", - "#80699B", - "#92A8CD", - "#EEAAEE", - "#A47D7C", - "#DDDF0D", - "#55BF3B", - "#DF5353", - "#7798BF", - "#6AF9C4", - "#DB843D", - "#9A48C9", - "#C99A48", - "#879D79" - ]; - } -}; - -/* - * Spinner options - */ -HARSTORAGE.SpinnerOpts = { - lines: 10, - length: 6, - width: 3, - radius: 6, - color: "#498a2d", - speed: 0.8, - trail: 80 -}; \ No newline at end of file diff --git a/harstorage/public/scripts/spin.js b/harstorage/public/scripts/spin.js deleted file mode 100644 index 1100a0c..0000000 --- a/harstorage/public/scripts/spin.js +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Copyright (c) 2011 Felix Gnass [fgnass at neteye dot de] - * Licensed under the MIT license - */ - -(function(window, document, undefined) { - "use strict"; - - var prefixes = ['webkit', 'Moz', 'ms', 'O'], /* Vendor prefixes */ - animations = {}, /* Animation rules keyed by their name */ - useCssAnimations; - - /** - * Utility function to create elements. If no tag name is given, - * a DIV is created. Optionally properties can be passed. - */ - function createEl(tag, prop) { - var el = document.createElement(tag || 'div'), - n; - - for (n in prop) { - if (prop.hasOwnProperty(n)) { - el[n] = prop[n]; - } - } - return el; - } - - /** - * Inserts child1 before child2. If child2 is not specified, - * child1 is appended. If child2 has no parentNode, child2 is - * appended first. - */ - function ins(parent, child1, child2) { - if (child2 && !child2.parentNode) { - ins(parent, child2); - } - parent.insertBefore(child1, child2||null); - return parent; - } - - /** - * Insert a new stylesheet to hold the @keyframe or VML rules. - */ - var sheet = (function() { - var el = createEl('style'); - ins(document.getElementsByTagName('head')[0], el); - return el.sheet || el.styleSheet; - })(); - - /** - * Creates an opacity keyframe animation rule and returns its name. - * Since most mobile Webkits have timing issues with animation-delay, - * we create separate rules for each line/segment. - */ - function addAnimation(alpha, trail, i, lines) { - var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-'), - start = 0.01 + i/lines*100, - z = Math.max(1-(1-alpha)/trail*(100-start) , alpha), - prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase(), - pre = prefix && '-'+prefix+'-' || ''; - - if (!animations[name]) { - sheet.insertRule( - '@' + pre + 'keyframes ' + name + '{' + - '0%{opacity:'+z+'}' + - start + '%{opacity:'+ alpha + '}' + - (start+0.01) + '%{opacity:1}' + - (start+trail)%100 + '%{opacity:'+ alpha + '}' + - '100%{opacity:'+ z + '}' + - '}', 0 - ); - animations[name] = 1; - } - return name; - } - - /** - * Tries various vendor prefixes and returns the first supported property. - **/ - function vendor(el, prop) { - var s = el.style, - pp, - i; - - if (s[prop] !== undefined) { - return prop; - } - prop = prop.charAt(0).toUpperCase() + prop.slice(1); - for (i=0; i> 1) - ep.x+tp.x + 'px', - top: (target.offsetHeight >> 1) - ep.y+tp.y + 'px' - }); - } - el.setAttribute('aria-role', 'progressbar'); - self.lines(el, self.opts); - if (!useCssAnimations) { - // No CSS animation support, use setTimeout() instead - var o = self.opts, - i = 0, - fps = o.fps, - f = fps/o.speed, - ostep = (1-o.opacity)/(f*o.trail / 100), - astep = f/o.lines; - - (function anim() { - i++; - for (var s=o.lines; s; s--) { - var alpha = Math.max(1-(i+s*astep)%f * ostep, o.opacity); - self.opacity(el, o.lines-s, alpha, o); - } - self.timeout = self.el && setTimeout(anim, ~~(1000/fps)); - })(); - } - return self; - }, - stop: function() { - var el = this.el; - if (el) { - clearTimeout(this.timeout); - if (el.parentNode) { - el.parentNode.removeChild(el); - } - this.el = undefined; - } - return this; - } - }; - - proto.lines = function(el, o) { - var i = 0, - seg; - - function fill(color, shadow) { - return css(createEl(), { - position: 'absolute', - width: (o.length+o.width) + 'px', - height: o.width + 'px', - background: color, - boxShadow: shadow, - transformOrigin: 'left', - transform: 'rotate(' + ~~(360/o.lines*i) + 'deg) translate(' + o.radius+'px' +',0)', - borderRadius: (o.width>>1) + 'px' - }); - } - - for (; i < o.lines; i++) { - seg = css(createEl(), { - position: 'absolute', - top: 1+~(o.width/2) + 'px', - transform: 'translate3d(0,0,0)', - opacity: o.opacity, - animation: useCssAnimations && addAnimation(o.opacity, o.trail, i, o.lines) + ' ' + 1/o.speed + 's linear infinite' - }); - if (o.shadow) { - ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'})); - } - ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)'))); - } - return el; - }; - - proto.opacity = function(el, i, val) { - if (i < el.childNodes.length) { - el.childNodes[i].style.opacity = val; - } - }; - - ///////////////////////////////////////////////////////////////////////// - // VML rendering for IE - ///////////////////////////////////////////////////////////////////////// - - /** - * Check and init VML support - */ - (function() { - var s = css(createEl('group'), {behavior: 'url(#default#VML)'}), - i; - - if (!vendor(s, 'transform') && s.adj) { - - // VML support detected. Insert CSS rules ... - for (i=4; i--;) { - sheet.addRule(['group', 'roundrect', 'fill', 'stroke'][i], 'behavior:url(#default#VML)'); - } - - proto.lines = function(el, o) { - var r = o.length+o.width, - s = 2*r; - - function grp() { - return css(createEl('group', {coordsize: s +' '+s, coordorigin: -r +' '+-r}), {width: s, height: s}); - } - - var g = grp(), - margin = ~(o.length+o.radius+o.width)+'px', - i; - - function seg(i, dx, filter) { - ins(g, - ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}), - ins(css(createEl('roundrect', - {arcsize: 1}), { - width: r, - height: o.width, - left: o.radius, - top: -o.width>>1, - filter: filter}), - createEl('fill', {color: o.color, opacity: o.opacity}), - createEl('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change - ) - ) - ); - } - - if (o.shadow) { - for (i = 1; i <= o.lines; i++) { - seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)'); - } - } - for (i = 1; i <= o.lines; i++) { - seg(i); - } - return ins(css(el, { - margin: margin + ' 0 0 ' + margin, - zoom: 1 - }), g); - }; - - proto.opacity = function(el, i, val, o) { - var c = el.firstChild; - o = o.shadow && o.lines || 0; - if (c && i+o < c.childNodes.length) { - c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild; - if (c) { - c.opacity = val; - } - } - }; - } - else { - useCssAnimations = vendor(s, 'animation'); - } - })(); - - window.Spinner = Spinner; - -})(window, document); \ No newline at end of file diff --git a/harstorage/public/scripts/tabber.js b/harstorage/public/scripts/tabber.js deleted file mode 100644 index 828c8aa..0000000 --- a/harstorage/public/scripts/tabber.js +++ /dev/null @@ -1,476 +0,0 @@ -/*================================================== - License (http://www.opensource.org/licenses/mit-license.php) - - Copyright (c) 2006 Patrick Fitzgerald - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - ==================================================*/ - -function TabberObj(argsObj) { - "use strict"; - - var arg; /* name of an argument to override */ - - /* Element for the main tabber div. If you supply this in argsObj, - then the init() method will be called. - */ - this.div = null; - - /* Class of the main tabber div */ - this.classMain = "tabber"; - - /* Rename classMain to classMainLive after tabifying - (so a different style can be applied) - */ - this.classMainLive = "tabberlive"; - - /* Class of each DIV that contains a tab */ - this.classTab = "tabbertab"; - - /* Class to indicate which tab should be active on startup */ - this.classTabDefault = "tabbertabdefault"; - - /* Class for the navigation UL */ - this.classNav = "tabbernav"; - - /* When a tab is to be hidden, instead of setting display='none', we - set the class of the div to classTabHide. In your screen - stylesheet you should set classTabHide to display:none. In your - print stylesheet you should set display:block to ensure that all - the information is printed. - */ - this.classTabHide = "tabbertabhide"; - - /* Class to set the navigation LI when the tab is active, so you can - use a different style on the active tab. - */ - this.classNavActive = "tabberactive"; - - /* Elements that might contain the title for the tab, only used if a - title is not specified in the TITLE attribute of DIV classTab. - */ - this.titleElements = ['h2','h3','h4','h5','h6']; - - /* Should we strip out the HTML from the innerHTML of the title elements? - This should usually be true. - */ - this.titleElementsStripHTML = true; - - /* If the user specified the tab names using a TITLE attribute on - the DIV, then the browser will display a tooltip whenever the - mouse is over the DIV. To prevent this tooltip, we can remove the - TITLE attribute after getting the tab name. - */ - this.removeTitle = true; - - /* If you want to add an id to each link set this to true */ - this.addLinkId = false; - - /* If addIds==true, then you can set a format for the ids. - will be replaced with the id of the main tabber div. - will be replaced with the tab number - (tab numbers starting at zero) - will be replaced with the tab number - (tab numbers starting at one) - will be replaced by the tab title - (with all non-alphanumeric characters removed) - */ - this.linkIdFormat = 'nav'; - - /* You can override the defaults listed above by passing in an object: - var mytab = new tabber({property:value,property:value}); - */ - for (arg in argsObj) { - if (argsObj.hasOwnProperty(arg)) { - this[arg] = argsObj[arg]; - } - } - - /* Create regular expressions for the class names; Note: if you - change the class names after a new object is created you must - also change these regular expressions. - */ - this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi'); - this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi'); - this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi'); - this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi'); - this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi'); - - /* Array of objects holding info about each tab */ - this.tabs = []; - - /* If the main tabber div was specified, call init() now */ - if (this.div) { - this.init(this.div); - - /* We don't need the main div anymore, and to prevent a memory leak - in IE, we must remove the circular reference between the div - and the tabber object. */ - this.div = null; - } -} - -/*-------------------------------------------------- - Methods for TabberObj - --------------------------------------------------*/ - -TabberObj.prototype.init = function(e) { - "use strict"; - - /* Set up the tabber interface. - - e = element (the main containing div) - - Example: - init(document.getElementById('mytabberdiv')) - */ - - var childNodes, /* child nodes of the tabber div */ - i, i2, /* loop indices */ - t, /* object to store info about a single tab */ - defaultTab=0, /* which tab to select by default */ - DOM_ul, /* tabbernav list */ - DOM_li, /* tabbernav list item */ - DOM_a, /* tabbernav link */ - aId, /* A unique id for DOM_a */ - headingElement; /* searching for text to use in the tab */ - - /* Verify that the browser supports DOM scripting */ - if (!document.getElementsByTagName) { - return false; - } - - /* If the main DIV has an ID then save it. */ - if (e.id) { - this.id = e.id; - } - - /* Clear the tabs array (but it should normally be empty) */ - this.tabs.length = 0; - - /* Loop through an array of all the child nodes within our tabber element. */ - childNodes = e.childNodes; - for (i=0; i < childNodes.length; i++) { - - /* Find the nodes where class="tabbertab" */ - if(childNodes[i].className && - childNodes[i].className.match(this.REclassTab)) { - - /* Create a new object to save info about this tab */ - t = {}; - - /* Save a pointer to the div for this tab */ - t.div = childNodes[i]; - - /* Add the new object to the array of tabs */ - this.tabs[this.tabs.length] = t; - - /* If the class name contains classTabDefault, - then select this tab by default. - */ - if (childNodes[i].className.match(this.REclassTabDefault)) { - defaultTab = this.tabs.length-1; - } - } - } - - /* Create a new UL list to hold the tab headings */ - DOM_ul = document.createElement("ul"); - DOM_ul.className = this.classNav; - - /* Loop through each tab we found */ - for (i=0; i < this.tabs.length; i++) { - - t = this.tabs[i]; - - /* Get the label to use for this tab: - From the title attribute on the DIV, - Or from one of the this.titleElements[] elements, - Or use an automatically generated number. - */ - t.headingText = t.div.title; - - /* Remove the title attribute to prevent a tooltip from appearing */ - if (this.removeTitle) { t.div.title = ''; } - - if (!t.headingText) { - - /* Title was not defined in the title of the DIV, - So try to get the title from an element within the DIV. - Go through the list of elements in this.titleElements - (typically heading elements ['h2','h3','h4']) - */ - for (i2=0; i2/gi," "); - t.headingText = t.headingText.replace(/<[^>]+>/g,""); - } - break; - } - } - } - - if (!t.headingText) { - /* Title was not found (or is blank) so automatically generate a - number for the tab. - */ - t.headingText = i + 1; - } - - /* Create a list element for the tab */ - DOM_li = document.createElement("li"); - - /* Save a reference to this list item so we can later change it to - the "active" class */ - t.li = DOM_li; - - /* Create a link to activate the tab */ - DOM_a = document.createElement("a"); - DOM_a.appendChild(document.createTextNode(t.headingText)); - DOM_a.href = "javascript:void(null);"; - DOM_a.title = t.headingText; - DOM_a.onclick = this.navClick; - - /* Add some properties to the link so we can identify which tab - was clicked. Later the navClick method will need this. - */ - DOM_a.tabber = this; - DOM_a.tabberIndex = i; - - /* Do we need to add an id to DOM_a? */ - if (this.addLinkId && this.linkIdFormat) { - - /* Determine the id name */ - aId = this.linkIdFormat; - aId = aId.replace(//gi, this.id); - aId = aId.replace(//gi, i); - aId = aId.replace(//gi, i+1); - aId = aId.replace(//gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, '')); - - DOM_a.id = aId; - } - - /* Add the link to the list element */ - DOM_li.appendChild(DOM_a); - - /* Add the list element to the list */ - DOM_ul.appendChild(DOM_li); - } - - /* Add the UL list to the beginning of the tabber div */ - e.insertBefore(DOM_ul, e.firstChild); - - /* Make the tabber div "live" so different CSS can be applied */ - e.className = e.className.replace(this.REclassMain, this.classMainLive); - - /* Activate the default tab, and do not call the onclick handler */ - this.tabShow(defaultTab); - - return this; -}; - - -TabberObj.prototype.navClick = function(event) { - "use strict"; - - /* This method should only be called by the onClick event of an - element, in which case we will determine which tab was clicked by - examining a property that we previously attached to the - element. - - Since this was triggered from an onClick event, the variable - "this" refers to the element that triggered the onClick - event (and not to the TabberObj). - - When TabberObj was initialized, we added some extra properties - to the element, for the purpose of retrieving them now. Get - the TabberObj object, plus the tab number that was clicked. - */ - - var rVal, /* Return value from the user onclick function */ - a, /* element that triggered the onclick event */ - self, /* the tabber object */ - tabberIndex, /* index of the tab that triggered the event */ - onClickArgs; /* args to send the onclick function */ - - a = this; - - if (!a.tabber) { - return false; - } - - self = a.tabber; - tabberIndex = a.tabberIndex; - - /* Remove focus from the link because it looks ugly. - I don't know if this is a good idea... - */ - a.blur(); - - /* If the user specified an onClick function, call it now. - If the function returns false then do not continue. - */ - if (typeof self.onClick === 'function') { - onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event}; - - /* IE uses a different way to access the event object */ - if (!event) { - onClickArgs.event = window.event; - } - - rVal = self.onClick(onClickArgs); - if (rVal === false) { return false; } - } - - self.tabShow(tabberIndex); - - return false; -}; - - -TabberObj.prototype.tabHideAll = function() { - "use strict"; - - var i; /* counter */ - - /* Hide all tabs and make all navigation links inactive */ - for (i = 0; i < this.tabs.length; i++) { - this.tabHide(i); - } -}; - - -TabberObj.prototype.tabHide = function(tabberIndex) { - "use strict"; - - var div; - - if (!this.tabs[tabberIndex]) { - return false; - } - - /* Hide a single tab and make its navigation link inactive */ - div = this.tabs[tabberIndex].div; - - /* Hide the tab contents by adding classTabHide to the div */ - if (!div.className.match(this.REclassTabHide)) { - div.className += ' ' + this.classTabHide; - } - this.navClearActive(tabberIndex); - - return this; -}; - - -TabberObj.prototype.tabShow = function(tabberIndex) { - "use strict"; - - /* Show the tabberIndex tab and hide all the other tabs */ - - var div; - - if (!this.tabs[tabberIndex]) { - return false; - } - - /* Hide all the tabs first */ - this.tabHideAll(); - - /* Get the div that holds this tab */ - div = this.tabs[tabberIndex].div; - - /* Remove classTabHide from the div */ - div.className = div.className.replace(this.REclassTabHide, ''); - - /* Mark this tab navigation link as "active" */ - this.navSetActive(tabberIndex); - - /* If the user specified an onTabDisplay function, call it now. */ - if (typeof this.onTabDisplay === 'function') { - this.onTabDisplay({'tabber':this, 'index':tabberIndex}); - } - - return this; -}; - -TabberObj.prototype.navSetActive = function(tabberIndex) { - "use strict"; - - /* Note: this method does *not* enforce the rule - that only one nav item can be active at a time. - */ - - /* Set classNavActive for the navigation list item */ - this.tabs[tabberIndex].li.className = this.classNavActive; - - return this; -}; - - -TabberObj.prototype.navClearActive = function(tabberIndex) { - "use strict"; - - /* Note: this method does *not* enforce the rule - that one nav should always be active. - */ - - /* Remove classNavActive from the navigation list item */ - this.tabs[tabberIndex].li.className = ''; - - return this; -}; - -(function tabberAutomatic() { - "use strict"; - - /* This function finds all DIV elements in the document where - class=tabber.classMain, then converts them to use the tabber - interface. - - tabberArgs = an object to send to "new tabber()" - */ - var tempObj, /* Temporary tabber object */ - divs, /* Array of all divs on the page */ - i, /* Loop index */ - tabberArgs = {}; - - /* Create a tabber object so we can get the value of classMain */ - tempObj = new TabberObj(tabberArgs); - - /* Find all DIV elements in the document that have class=tabber */ - - /* First get an array of all DIV elements and loop through them */ - divs = document.getElementsByTagName("div"); - for (i=0; i < divs.length; i++) { - - /* Is this DIV the correct class? */ - if (divs[i].className && - divs[i].className.match(tempObj.REclassMain)) { - - /* Now tabify the DIV */ - tabberArgs.div = divs[i]; - divs[i].tabber = new TabberObj(tabberArgs); - } - } -})(); \ No newline at end of file diff --git a/harstorage/public/styles/chosen/chosen-sprite.png b/harstorage/public/styles/chosen/chosen-sprite.png deleted file mode 100644 index f20db4439ea5c1038126bf326c8fd048b03a8226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742 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 diff --git a/harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png b/harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100755 index 5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 diff --git a/harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png b/harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100755 index ac8b229af950c29356abf64a6c4aa894575445f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100755 index ad3d6346e00f246102f72f2e026ed0491988b394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100755 index 42ccba269b6e91bef12ad0fa18be651b5ef0ee68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100755 index 5a46b47cb16631068aee9e0bd61269fc4e95e5cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse diff --git a/harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100755 index 7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 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 diff --git a/harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png deleted file mode 100755 index 45e8928e5284adacea3f9ec07b9b50667d2ac65f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png deleted file mode 100755 index 7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq diff --git a/harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png deleted file mode 100755 index 5ba708c39172a69e069136bd1309c4322c61f571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css b/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css deleted file mode 100755 index 0cb22be..0000000 --- a/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css +++ /dev/null @@ -1,572 +0,0 @@ -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #222222; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } -.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* - * jQuery UI Resizable @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* - * jQuery UI Selectable @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; }/* - * jQuery UI Autocomplete @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* - * jQuery UI Slider @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/harstorage/public/styles/datatables/table_jui.css b/harstorage/public/styles/datatables/table_jui.css deleted file mode 100644 index 5ee14f6..0000000 --- a/harstorage/public/styles/datatables/table_jui.css +++ /dev/null @@ -1,448 +0,0 @@ -/* - * jQuery UI specific styling - */ - -.paging_two_button .ui-button { - float: left; - cursor: pointer; - * cursor: hand; -} - -.paging_full_numbers .ui-button { - padding: 2px 6px; - margin: 0; - cursor: pointer; - * cursor: hand; -} - -.dataTables_paginate .ui-button { - margin-right: -0.1em !important; -} - -.paging_full_numbers { - width: 350px !important; -} - -.dataTables_wrapper .ui-toolbar { - padding: 5px; - font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; -} - -.dataTables_paginate { - width: auto; -} - -.dataTables_info { - padding-top: 3px; -} - -table.display thead th { - padding: 3px 0px 3px 10px; - cursor: pointer; - * cursor: hand; -} - -table.display thead th.left { - text-align:left; -} - -table.display thead th.center { - text-align:center; -} - -div.dataTables_wrapper .ui-widget-header { - font-weight: normal; - font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; -} - - -/* - * Sort arrow icon positioning - */ -table.display thead th div.DataTables_sort_wrapper { - position: relative; - padding-right: 20px; - padding-right: 20px; -} - -table.display thead th div.DataTables_sort_wrapper span { - position: absolute; - top: 50%; - margin-top: -8px; - right: 0; -} - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * DataTables features - */ - -.dataTables_wrapper { - position: relative; - /*min-height: 302px;*/ - _height: 302px; - clear: both; -} - -.dataTables_processing { - position: absolute; - top: 0px; - left: 50%; - width: 250px; - margin-left: -125px; - border: 1px solid #ddd; - text-align: center; - color: #999; - font-size: 11px; - padding: 2px 0; -} - -.dataTables_length { - width: 40%; - float: left; -} - -.dataTables_filter { - width: 50%; - float: right; - text-align: right; -} - -.dataTables_info { - width: 50%; - float: left; -} - -.dataTables_paginate { - float: right; - text-align: right; -} - -/* Pagination nested */ -.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { - height: 19px; - width: 19px; - margin-left: 3px; - float: left; -} - -.paginate_disabled_previous { - background-image: url('../images/back_disabled.jpg'); -} - -.paginate_enabled_previous { - background-image: url('../images/back_enabled.jpg'); -} - -.paginate_disabled_next { - background-image: url('../images/forward_disabled.jpg'); -} - -.paginate_enabled_next { - background-image: url('../images/forward_enabled.jpg'); -} - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * DataTables display - */ -table.display { - margin: 0 auto; - width: 100%; - clear: both; - border-collapse: collapse; - font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; -} - -table.display tfoot th { - padding: 3px 0px 3px 10px; - font-weight: bold; - font-weight: normal; -} - -table.display tr.heading2 td { - border-bottom: 1px solid #aaa; -} - -table.display td { - padding: 3px 10px; - color: #498a2d; -} - -table.display td.center { - text-align: center; - color: #498a2d; -} -table.display td.left { - text-align: left; - color: #498a2d; - overflow:hidden; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * DataTables sorting - */ - -.sorting_asc { - background: url('../images/sort_asc.png') no-repeat center right; -} - -.sorting_desc { - background: url('../images/sort_desc.png') no-repeat center right; -} - -.sorting { - background: url('../images/sort_both.png') no-repeat center right; -} - -.sorting_asc_disabled { - background: url('../images/sort_asc_disabled.png') no-repeat center right; -} - -.sorting_desc_disabled { - background: url('../images/sort_desc_disabled.png') no-repeat center right; -} - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * DataTables row classes - */ -tr.odd { - background-color: #F2FBED; -} - -tr.even { - background-color: white; -} - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Misc - */ -.dataTables_scroll { - clear: both; -} - -.top, .bottom { - padding: 15px; - background-color: #F5F5F5; - border: 1px solid #CCCCCC; -} - -.top .dataTables_info { - float: none; -} - -.clear { - clear: both; -} - -.dataTables_empty { - text-align: center; -} - -tfoot input { - margin: 0.5em 0; - width: 100%; - color: #444; -} - -tfoot input.search_init { - color: #999; -} - -td.group { - background-color: #d1cfd0; - border-bottom: 2px solid #A19B9E; - border-top: 2px solid #A19B9E; -} - -td.details { - background-color: #d1cfd0; - border: 2px solid #A19B9E; -} - - -.example_alt_pagination div.dataTables_info { - width: 40%; -} - -.paging_full_numbers span.paginate_button, - .paging_full_numbers span.paginate_active { - border: 1px solid #aaa; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - padding: 2px 5px; - margin: 0 3px; - cursor: pointer; - *cursor: hand; -} - -.paging_full_numbers span.paginate_button { - background-color: #ddd; -} - -.paging_full_numbers span.paginate_button:hover { - background-color: #ccc; -} - -.paging_full_numbers span.paginate_active { - background-color: #99B3FF; -} - -table.display tr.even.row_selected td { - background-color: #B0BED9; -} - -table.display tr.odd.row_selected td { - background-color: #9FAFD1; -} - - -/* - * Sorting classes for columns - */ -/* For the standard odd/even */ -tr.odd td.sorting_1 { - background-color: #C0D0B8; -} - -tr.odd td.sorting_2 { - background-color: #DADCFF; -} - -tr.odd td.sorting_3 { - background-color: #E0E2FF; -} - -tr.even td.sorting_1 { - background-color: #F4F9F1; -} - -tr.even td.sorting_2 { - background-color: #F2F3FF; -} - -tr.even td.sorting_3 { - background-color: #F9F9FF; -} - - -/* For the Conditional-CSS grading rows */ -/* - Colour calculations (based off the main row colours) - Level 1: - dd > c4 - ee > d5 - Level 2: - dd > d1 - ee > e2 - */ -tr.odd.gradeA td.sorting_1 { - background-color: #c4ffc4; -} - -tr.odd.gradeA td.sorting_2 { - background-color: #d1ffd1; -} - -tr.odd.gradeA td.sorting_3 { - background-color: #d1ffd1; -} - -tr.even.gradeA td.sorting_1 { - background-color: #d5ffd5; -} - -tr.even.gradeA td.sorting_2 { - background-color: #e2ffe2; -} - -tr.even.gradeA td.sorting_3 { - background-color: #e2ffe2; -} - -tr.odd.gradeC td.sorting_1 { - background-color: #c4c4ff; -} - -tr.odd.gradeC td.sorting_2 { - background-color: #d1d1ff; -} - -tr.odd.gradeC td.sorting_3 { - background-color: #d1d1ff; -} - -tr.even.gradeC td.sorting_1 { - background-color: #d5d5ff; -} - -tr.even.gradeC td.sorting_2 { - background-color: #e2e2ff; -} - -tr.even.gradeC td.sorting_3 { - background-color: #e2e2ff; -} - -tr.odd.gradeX td.sorting_1 { - background-color: #ffc4c4; -} - -tr.odd.gradeX td.sorting_2 { - background-color: #ffd1d1; -} - -tr.odd.gradeX td.sorting_3 { - background-color: #ffd1d1; -} - -tr.even.gradeX td.sorting_1 { - background-color: #ffd5d5; -} - -tr.even.gradeX td.sorting_2 { - background-color: #ffe2e2; -} - -tr.even.gradeX td.sorting_3 { - background-color: #ffe2e2; -} - -tr.odd.gradeU td.sorting_1 { - background-color: #c4c4c4; -} - -tr.odd.gradeU td.sorting_2 { - background-color: #d1d1d1; -} - -tr.odd.gradeU td.sorting_3 { - background-color: #d1d1d1; -} - -tr.even.gradeU td.sorting_1 { - background-color: #d5d5d5; -} - -tr.even.gradeU td.sorting_2 { - background-color: #e2e2e2; -} - -tr.even.gradeU td.sorting_3 { - background-color: #e2e2e2; -} - - -/* - * Row highlighting example - */ -.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { - background-color: #ECFFB3; -} - -.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { - background-color: #E6FF99; -} diff --git a/harstorage/public/styles/harviewer/harPreview.css b/harstorage/public/styles/harviewer/harPreview.css deleted file mode 100644 index 089516c..0000000 --- a/harstorage/public/styles/harviewer/harPreview.css +++ /dev/null @@ -1 +0,0 @@ -.tabView {width: 100%; background-color: #FFFFFF; color: #000000;}.tabViewCol {background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; vertical-align:top;}.tabViewBody {margin: 2px 0px 0px 0px;}.tabBar {padding-left: 14px; border-bottom: 1px solid #D7D7D7; white-space: nowrap;}.tab {position: relative; top: 1px; padding: 4px 8px; border: 1px solid transparent; border-bottom: none; color: #565656; font-weight: bold; white-space: nowrap; -moz-user-select: none; display:inline-block;}.tab:hover {cursor: pointer; border-color: #D7D7D7; -moz-border-radius: 4px 4px 0 0; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-radius: 4px 4px 0 0;}.tab[selected="true"],.tab .selected {cursor: default !important; border-color: #D7D7D7; background-color: #FFFFFF; -moz-border-radius: 4px 4px 0 0; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-radius: 4px 4px 0 0;}.tabBodies {width: 100%; overflow: auto;}.tabBody {display: none; margin: 0;}.tabBody[selected="true"],.tabBody.selected {display: block;}@media print {.tabBodies {overflow:visible;}.tabViewCol {background: none;}}.infoTip {z-index: 2147483647; position: fixed; padding: 2px 4px 3px 4px; background: LightYellow; font-family: Lucida Grande, Tahoma, sans-serif; color: #000000; display: none; white-space: nowrap; font-size: 11px; border: 1px solid rgb(126, 171, 205); background: url(images/tabEnabled.png) repeat-x scroll 0px 0px rgb(249, 249, 249); background-position-x: 0; background-position-y: 100%; background-repeat: repeat-x; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: gray 2px 2px 3px; -webkit-box-shadow: gray 2px 2px 3px; box-shadow: gray 2px 2px 3px; filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray'); -ms-filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray')";}.infoTip[active="true"] {display: block;}.infoTip[multiline="true"] {background-image: none;}.popupMenu {display: none; position: absolute; font-size: 11px; z-index: 2147483647; font-family: Lucida Grande, Tahoma, sans-serif;}.popupMenuContent {padding: 2px;}.popupMenuSeparator {display: block; position: relative; padding: 1px 18px 0; text-decoration: none; color: #000; cursor: default; background: #ACA899; margin: 2px 0;}.popupMenuOption{display: block; position: relative; padding: 2px 18px; text-decoration: none; color: #000; cursor: default;}.popupMenuOption:hover{color: #fff; background: #316AC5;}.popupMenuGroup {background: transparent url(images/menu/tabMenuPin.png) no-repeat right 0;}.popupMenuGroup:hover {background: #316AC5 url(images/menu/tabMenuPin.png) no-repeat right -17px;}.popupMenuGroupSelected {color: #fff; background: #316AC5 url(images/menu/tabMenuPin.png) no-repeat right -17px;}.popupMenuChecked {background: transparent url(images/menu/tabMenuCheckbox.png) no-repeat 4px 0;}.popupMenuChecked:hover {background: #316AC5 url(images/menu/tabMenuCheckbox.png) no-repeat 4px -17px;}.popupMenuRadioSelected {background: transparent url(images/menu/tabMenuRadio.png) no-repeat 4px 0;}.popupMenuRadioSelected:hover {background: #316AC5 url(images/menu/tabMenuRadio.png) no-repeat 4px -17px;}.popupMenuShortcut {padding-right: 85px;}.popupMenuShortcutKey {position: absolute; right: 0; top: 2px; width: 77px;}.popupMenuDisabled {color: #ACA899 !important;}.popupMenuShadow {float: left; background: url(images/menu/shadowAlpha.png) no-repeat bottom right !important; margin: 10px 0 0 10px !important; margin: 10px 0 0 5px;}.popupMenuShadowContent {display: block; position: relative; background-color: #fff; border: 1px solid #a9a9a9; top: -6px; left: -6px;}#optionsMenu {top: 22px; left: 0;}.toolbar {font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; font-size: 11px; font-weight: 400; font-style: normal; border-bottom: 1px solid #EEEEEE; padding: 0 3px 0 3px;}.toolbarButton,.toolbarSeparator {display: inline-block; vertical-align: middle; cursor: pointer; color: #000000; -moz-user-select: none; -moz-box-sizing: padding-box;}.toolbarButton.dropDown .arrow {width: 11px; height: 10px; background: url(images/contextMenuTarget.png) no-repeat; display: inline-block; margin-left: 3px; position: relative; right: 0; top: 1px;}.toolbarButton.image {padding: 0; height: 16px; width: 16px;}.toolbarButton.text,.toolbarSeparator {margin: 3px 0 3px 0; padding: 3px; border: 1px solid transparent;}.toolbarButton.text:hover {background: url(images/bg-button.gif) repeat-x scroll 0 0 #FFFFFF; border-top:1px solid #bbb; border-bottom:1px solid #aaa; border-left:1px solid #bbb; border-right:1px solid #aaa; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px;}.toolbarButton.text:active {background-position: 0 -400px;}.pageList {width: 100%;}.pageTable {width: 100%; font-family: Lucida Grande, Tahoma, sans-serif; font-size: 11px;}.pageCol {white-space: nowrap; border-bottom: 1px solid #EEEEEE;}.pageRow {font-weight: bold; height: 17px; background-color: white;}.pageRow:hover {background: #EFEFEF;}.opened > .pageCol > .pageName {background-image: url(images/twisty-sprites.png); background-position: 3px -17px;}.pageName {background-image: url(images/twisty-sprites.png); background-repeat: no-repeat; background-position: 3px 2px; padding-left: 18px; font-weight: bold; cursor:pointer;}.pageID {color: gray;}.pageInfoCol {background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; padding: 0px 0px 4px 17px;}.pageRow:hover > .netOptionsCol > .netOptionsLabel {display: block;}.pageRow > .netOptionsCol {padding-right: 2px;}@media print {.pageInfoCol {background: none;}}.netTable {width: 100%; border-left: 1px solid #EFEFEF; font-family: Lucida Grande, Tahoma, sans-serif; font-size: 11px; table-layout: fixed;}.netRow {background: white;}.netRow.loaded {background: #FFFFFF;}.netHrefCol:hover {}.netRow.loaded:hover {background: #EFEFEF;}.netCol {padding: 0; vertical-align: top; border-bottom: 1px solid #EFEFEF; white-space: nowrap; text-overflow: clip; overflow: hidden;}.netRow[breakLayout="true"] .netCol {border-top: 1px solid rgb(207,207,207);}.netTypeCol,.netStatusCol {color: rgb(128, 128, 128);}.responseError > .netStatusCol {color: red;}.responseRedirect > td {color: #f93;}.netStatusCol,.netTypeCol,.netDomainCol,.netSizeCol,.netTimeCol {padding-left: 8px;}.netTimeCol {overflow: visible;}.netSizeCol {text-align: right;}.netHrefLabel {-moz-box-sizing: padding-box; overflow: hidden; z-index: 100; position: relative; padding-left: 18px; padding-top: 1px; font-weight: bold;}.netFullHrefLabel {position: absolute; display: none; -moz-user-select: none; padding-right: 10px; padding-bottom: 3px; background: #FFFFFF;}.netHrefCol:hover > .netStatusLabel,.netHrefCol:hover > .netDomainLabel,.netHrefCol:hover > .netHrefLabel {display: none;}.netHrefCol:hover > .netFullHrefLabel {display: block;}.netRow.loaded:hover > .netCol > .netFullHrefLabel {background-color: #EFEFEF;}.netStatusLabel,.netTypeLabel,.netDomainLabel,.netSizeLabel,.netTimelineBar {padding: 1px 0 2px 0 !important;}.responseError {color: red;}.netOptionsCol {width: 11px; padding-left: 2px; padding-top: 3px;}.netOptionsLabel {width: 11px; height: 10px; background: url(images/contextMenuTarget.png) no-repeat; display: none;}.netRow:hover > .netOptionsCol > .netOptionsLabel {display: block;}.netOptionsLabel:hover {background-image: url(images/contextMenuTargetHover.png);}.netHrefLabel:hover {cursor: pointer;}.isExpandable .netHrefLabel:hover {cursor: pointer; color: blue; text-decoration: underline;}.netTimelineBar {position: relative; border-right: 50px solid transparent;}.netBlockingBar {position: absolute; left: 0; top: 0; bottom: 0; background: #FFFFFF url(images/timeline-sprites.png) repeat-x; min-width: 0px; z-index: 70; height: 16px;}.netResolvingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -16px #FFFFFF; min-width: 0px; z-index: 60; height: 16px;}.netConnectingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -32px #FFFFFF; min-width: 0px; z-index: 50; height: 16px;}.netSendingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -48px #FFFFFF; min-width: 0px; z-index: 40; height: 16px;}.netWaitingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -64px #FFFFFF; min-width: 1px; z-index: 30; height: 16px;}.netReceivingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -80px #B6B6B6; min-width: 0px; z-index: 20; height: 16px;}.fromCache .netReceivingBar,.fromCache.netReceivingBar {background: url(images/timeline-sprites.png) repeat-x scroll 0 -96px #D6D6D6; border-color: #D6D6D6; height: 16px;}.netPageTimingBar {position: absolute; left: 0; top: 0; bottom: 0; width: 1px; z-index:90; opacity: 0.5; display: none; background-color: green; margin-bottom: -1px; border-left: 1px solid white; border-right: 1px solid white;}.netWindowLoadBar {background-color: red;}.netContentLoadBar {background-color: blue;}.netTimeStampBar {background-color: olive;}.netTimeLabel {-moz-box-sizing: padding-box; position: absolute; top: 1px; left: 100%; padding-left: 6px; color: #444444; min-width: 16px;}.sizeInfoTip {font-size: 11px;}.timeInfoTip {width: 150px; height: 40px; font-size: 11px;}.timeInfoTipBar,.timeInfoTipEventBar {position: relative; display: block; margin: 0; opacity: 1; height: 15px; width: 4px;}.timeInfoTipStartLabel {color: gray;}.timeInfoTipSeparator {padding-top: 10px; color: gray;}.timeInfoTipSeparator SPAN {white-space:pre-wrap;}.timeInfoTipEventBar {width: 1px !important;}.netWindowLoadBar.timeInfoTipBar,.netContentLoadBar.timeInfoTipBar {width: 1px;}.netSummaryRow .netTimeLabel,.loaded .netTimeLabel {background: transparent;}.loaded .netTimeBar {background: #B6B6B6 url(images/netBarLoaded.gif) repeat-x; border-color: #B6B6B6;}.fromCache .netTimeBar {background: #D6D6D6 url(images/netBarCached.gif) repeat-x; border-color: #D6D6D6;}.netSummaryRow .netTimeBar {background: #BBBBBB; border: none; display: inline-block;}.timeInfoTipCell.startTime {padding-right: 25px;}.timeInfoTipCell.elapsedTime {text-align: right; padding-right: 8px;}.netSummaryLabel {color: #222222;}.netSummaryRow {background: #BBBBBB !important; font-weight: bold;}.netSummaryRow TD {padding: 1px 0 2px 0 !important;}.netSummaryRow > .netCol {border-top: 1px solid #999999; border-bottom: 1px solid; border-bottom-color: #999999; padding-top: 1px;}.netSummaryRow > .netCol:first-child {border-left: 1px solid #999999;}.netSummaryRow > .netCol:last-child {border-right: 1px solid #999999;}.netCountLabel {padding-left: 18px;}.netTotalSizeCol {text-align: right;}.netTotalTimeCol {text-align: right;}.netCacheSizeLabel {display: inline-block; float:left; padding-left: 6px;}.netTotalTimeLabel {padding-right: 6px;}.netInfoCol {border-top: 1px solid #EEEEEE; background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; padding-left: 10px; padding-bottom: 4px;}.isExpandable .netHrefLabel {background-image: url(images/twisty-sprites.png); background-repeat: no-repeat; background-position: 3px 3px;}.netRow.opened > .netCol > .netHrefLabel {background-image: url(images/twisty-sprites.png); background-position: 3px -16px;}#content[hiddenCols~=url] TD.netHrefCol,#content[hiddenCols~=status] TD.netStatusCol,#content[hiddenCols~=domain] TD.netDomainCol,#content[hiddenCols~=size] TD.netSizeCol,#content[hiddenCols~=timeline] TD.netTimeCol,#content[hiddenCols~=type] TD.netTypeCol {display: none;}.requestBodyBodies {border-left: 1px solid #D7D7D7; border-right: 1px solid #D7D7D7; border-bottom: 1px solid #D7D7D7;}.netInfoRow .tabView {width: 99%;}.netInfoText {padding: 8px; background-color: #FFFFFF; font-family: Monaco, monospace;}.netInfoText[selected="true"] {display: block;}.netInfoParamName {padding: 0 10px 0 0; font-family: Lucida Grande, Tahoma, sans-serif; font-weight: bold; vertical-align: top; text-align: right; white-space: nowrap;}.netInfoParamValue > PRE {margin: 0}.netInfoHeadersText,.netInfoCookiesText {padding-top: 0; width: 100%;}.netInfoParamValue {width: 100%;}.netInfoHeadersGroup,.netInfoCookiesGroup {margin-bottom: 4px; border-bottom: 1px solid #D7D7D7; padding-top: 8px; padding-bottom: 2px; font-family: Lucida Grande, Tahoma, sans-serif; font-weight: bold; color: #565656;}.netInfoHtmlPreview {border: 0; width: 100%; height: 100px;}.netInfoHtmlText {padding: 0;}.htmlPreviewResizer {width: 100%; height: 5px; background-color: lightgrey; cursor: s-resize;}body[resizingHtmlPreview="true"] * {cursor: s-resize !important;}body[resizingHtmlPreview="true"] .netInfoHtmlPreview {pointer-events: none !important;}.menu {position: absolute; right: 2px; font-size: 10px; font-family: Lucida Grande,Tahoma,sans-serif; text-decoration: none; outline: none; white-space: nowrap;}.menu .menuContent {display: inline-block; overflow: hidden; vertical-align: top; line-height: 13px;}.menu .menuHandle {display: inline-block; width: 9px; height: 16px; background-image: url(images/menu/previewMenuHandle.png);}.menu .menuHandle.opened {background-image: url(images/menu/previewMenuHandle.png); background-position: 9px 0;}.menu .toolbar {border: 0; vertical-align: top; display: inline; padding-left: 0;}.menu .toolbarSeparator {}.menu .toolbarSeparator,.menu .toolbarButton {padding: 0; margin: 0 3px 1px 3px; border: none; color: gray;}.toolbarButton.text:hover {border: none; background: none; color: blue;}.dp-highlighter{font-family: "Consolas", "Courier New", Courier, mono, serif; font-size: 12px; width: 100%; overflow: auto;}.dp-highlighter ol,.dp-highlighter ol li,.dp-highlighter ol li span {margin: 0; padding: 0; border: none;}.dp-highlighter a,.dp-highlighter a:hover{background: none; border: none; padding: 0; margin: 0;}.dp-highlighter .bar{padding-left: 45px;}.dp-highlighter.collapsed .bar,.dp-highlighter.nogutter .bar{padding-left: 0px;}.dp-highlighter ol{list-style: decimal; background-color: #fff; margin: 0px 0px 1px 45px !important; padding: 0px; color: #5C5C5C;}.dp-highlighter.nogutter ol,.dp-highlighter.nogutter ol li{list-style: none !important; margin-left: 0px !important;}.dp-highlighter ol li,.dp-highlighter .columns div{list-style: decimal-leading-zero; list-style-position: outside !important; border-left: 1px solid rgb(204,204,204); background-color: #F8F8F8; color: #5C5C5C; padding: 0 3px 0 10px !important; margin: 0 !important; line-height: 14px;}.dp-highlighter.nogutter ol li,.dp-highlighter.nogutter .columns div{border: 0;}.dp-highlighter .columns{background-color: #F8F8F8; color: gray; overflow: hidden; width: 100%;}.dp-highlighter .columns div{padding-bottom: 5px;}.dp-highlighter ol li.alt{background-color: #FFF; color: inherit;}.dp-highlighter ol li span{color: black; background-color: inherit;}.dp-highlighter.collapsed ol{margin: 0px;}.dp-highlighter.collapsed ol li{display: none;}.dp-highlighter.printing{border: none;}.dp-highlighter.printing .tools{display: none !important;}.dp-highlighter.printing li{display: list-item !important;}.dp-highlighter .tools{padding: 3px 8px 3px 10px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; padding-bottom: 10px; border-left: 3px solid #6CE26C;}.dp-highlighter.nogutter .tools{border-left: 0;}.dp-highlighter.collapsed .tools{border-bottom: 0;}.dp-highlighter .tools a{font-size: 9px; color: #a0a0a0; background-color: inherit; text-decoration: none; margin-right: 10px;}.dp-highlighter .tools a:hover{color: red; background-color: inherit; text-decoration: underline;}.dp-about {background-color: #fff; color: #333; margin: 0px; padding: 0px;}.dp-about table {width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important;}.dp-about td {padding: 10px; vertical-align: top;}.dp-about .copy {border-bottom: 1px solid #ACA899; height: 95%;}.dp-about .title {color: red; background-color: inherit; font-weight: bold;}.dp-about .para {margin: 0 0 4px 0;}.dp-about .footer {background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right;}.dp-about .close {font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px;}.dp-highlighter .comment, .dp-highlighter .comments {color: #008200; background-color: inherit;}.dp-highlighter .string {color: blue; background-color: inherit;}.dp-highlighter .keyword {color: #069; font-weight: bold; background-color: inherit;}.dp-highlighter .preprocessor {color: gray; background-color: inherit;} \ No newline at end of file diff --git a/harstorage/public/styles/harviewer/images/contextMenuTarget.png b/harstorage/public/styles/harviewer/images/contextMenuTarget.png deleted file mode 100644 index 957bd9f2adabb791aee25df923efebc85e86c0da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!2~4VPBOj%q*&4&eI0=`L$_*zFOXs@3GxeO z_zz_L?>wMC0Z1Erx;TbNOiliC{=FVdQ&MBb@07%~_*#H0l diff --git a/harstorage/public/styles/harviewer/images/contextMenuTargetHover.png b/harstorage/public/styles/harviewer/images/contextMenuTargetHover.png deleted file mode 100644 index 200a37083d6d9f325c493ffe490dde115521f2bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!2~4VPBOj%q*&4&eI0=`L$_*zFOXs@3GxeO z_zz_L?>wMC0Z3bVx;TbNOij+o$VfQAJ>!G7@X{t$r>obmC!aDkGgCU#P++h$Fvl^h q<&0Y)y9?7AWd_t#WIN4R$IgJ!7nL1dUm3)~Pmht#83(M}62D#GH L)z4*}Q$iB}mI6(; diff --git a/harstorage/public/styles/harviewer/images/menu/shadowAlpha.png b/harstorage/public/styles/harviewer/images/menu/shadowAlpha.png deleted file mode 100644 index a2561df971728d988424100c74c817916eca1979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3403 zcmeAS@N?(olHy`uVBq!ia0y~yV738bR}L1Sh{z?w93Z7#;u=xnT$Gwvl9`{U5R#dj z$`F!Ks$i<%mYSqsWME*TU}$J%1Vly(x&~$j21QvmX+Ul4C7!;n>{pmr1x4l8+mz-4 zg*Xd5B8wRqxP?HN@zUM8KR`j2bVpxD28NCO+HqZdXMAQjaPeGm)a##I4DP>8^|Q}*osX?x zu(w4E^8SQ>2<4nWJ;;$Ch1?$dLgm)?6;Yr9_CdHMW*W(@x+ip*R06EH_T4pml(Y0_%+Z_b^VZki z+Ig-L)GH{z-FHJSJv;l^O{dMW8|Geryoiy(edpWebG3Q>oX-o7q}^hCpz*y@X6IS? ZpGWQ1{0Pup3+%oyc)I$ztaD0e0swh%>OlYi diff --git a/harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png b/harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png deleted file mode 100644 index 4726e62208e024a017a7c5325e160e202976d7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^oItF^!3HFIe|>%mq!^2X+?^QKos)S9l5Y=V1NPK>@SUgxxb#j0)Hj=K%#H@hrp<0(ziY;Cn$qB$lOko9uweeR$HkHl1f*xW@hE+`)>M8>*Knp@$Fl1{s~J39 L{an^LB{Ts5ttLz; diff --git a/harstorage/public/styles/harviewer/images/tabEnabled.png b/harstorage/public/styles/harviewer/images/tabEnabled.png deleted file mode 100644 index d40cf4525b3df2afa80c92a7c9519be7972805f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQqm978H@CH?yU-(Hx<*ucO*@${!j#rgR;jYfl7twyC%pS^6u>G=GW54 zrh3&+00001bW%=J06^y0W&i*HSV=@dRCr#!jyDc~Fc83UmrCuum;e8fLy;l|vf{~; zWyZn683Yz!Aca7gg=9(@jH8t-!H1OW$O|m1nyhI%?1zzTnis9N9bUa3@ZJk|Z$9o% ccYpcrZ_yhCtjO0aX#fBK07*qoM6N<$f`+e{NdN!< diff --git a/harstorage/public/styles/main-ie.css b/harstorage/public/styles/main-ie.css deleted file mode 100644 index 9e5984e..0000000 --- a/harstorage/public/styles/main-ie.css +++ /dev/null @@ -1,12 +0,0 @@ -.header #preferences { - height: 178px; -} -.sp-create .howto { - width: 960px; -} -.sp-create .spinner { - left: 470px; -} -.results .spinner { - margin: 12px 0 -12px 0; -} \ No newline at end of file diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css deleted file mode 100644 index 6e02144..0000000 --- a/harstorage/public/styles/main.css +++ /dev/null @@ -1,444 +0,0 @@ -/* Document Body */ -body { - color: #498a2d; -} -body a { - color: #498a2d; - text-decoration: none; -} -body a:hover { - text-decoration: underline; -} -/* Document Header and Footer*/ -.header .left a:hover { - text-decoration: none; -} -.header .right { - text-align: right; - font-family: "Gill Sans", Verdana; - font-size: 77%; - margin: 6px 0 0 0; -} -.header .left { - float: left; - text-align: left; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-weight: bold; - font-size: 174%; -} -.header .hr,.footer .hr { - height: 1px; - width: 100%; - background-color: #498a2d; - margin: 10px 0 10px 0; -} -/* Preferences menu */ -.header #preferences { - position: absolute; - width: 250px; - height: 168px; - top: 60px; - right: 7px; - padding: 8px; - background: #FFFFFF; - opacity: 0.85; - border: 1px solid #498a2d; - -moz-border-radius: 0px 0px 10px 10px; - -webkit-border-radius: 0px 0px 10px 10px; - border-radius: 0px 0px 10px 10px; - z-index: 100; - display: none; -} -.header #close { - position: absolute; - top: 7px; - right: 8px; - z-index: 110; - font-family: "Gill Sans", Verdana; - font-weight: bold; - font-size: 85%; - text-decoration: none; -} -.header #close a { - text-decoration: none; - font-family: "Gill Sans", Verdana; - font-size: 85%; -} -.header .radio { - vertical-align: -3px; - margin: 0 0 10px 0; -} -.header #preferences strong { - font-family: "Gill Sans", Verdana; - font-weight: bold; - font-size: 77%; -} -.header #preferences .theme-name { - font-family: "Gill Sans", Verdana; - font-size: 77%; -} -.header #preferences button { - width: 100px; - padding: 4px 0; - margin: 0px 75px 0px 75px; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -/* Manual uploader */ -.uploader fieldset { - margin: 20px 0 20px 0; - border: 1px solid #498a2d; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - width: 480px; -} -.uploader legend { - color: #fff; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 93%; - background: #498a2d; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - padding: 2px 20px; -} -.uploader .file { - width: 300px; - height: 24px; - color: #000; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.uploader .button { - width: 100px; - padding: 4px 0; - margin: 20px 0 20px 20px; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -/* Summary Table on Home Page */ -.summary { - width: 960px; - visibility: hidden; -} -.summary .title { - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-weight: bold; - font-size: 108%; - margin: 0 0 12px 0; - text-align: left; -} -.summary table { - table-layout: fixed; -} -.summary button { - width: 220px; - padding: 4px 0; - margin: 20px 0; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -/* Superposed Test */ -.sp-display { - width: 960px; -} -.sp-display #chart{ - width: 960px; - height: 400px; -} -.sp-display #summary-table { - visibility: hidden; -} -.sp-display .title { - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-weight: bold; - font-size: 108%; - margin: 12px 0 18px 0; - float: left; - text-align: left; -} -.sp-display #metrics, .sp-display #timings { - visibility: hidden; -} -.sp-display #metrics { - width: 155px; -} -.sp-display #timings { - width: 200px; -} -.sp-display .selector { - text-align: right; - margin: 12px 0 18px 0; -} -.sp-create fieldset { - width: 960px; - border: 1px solid #498a2d; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; -} -.sp-create legend { - color: #fff; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 93%; - background: #498a2d; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - padding: 2px 20px; -} -.sp-create { - position: relative; -} -.sp-create .form { - position: relative; - z-index: 1; -} -.sp-create .spinner { - position: relative; - z-index: 2; - width: 24px; - top: 32px; - left: 480px; - display: none; -} -.sp-create .howto { - width: 980px; - margin: 20px 0 10px 0; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 100%; - text-align: right; -} -.sp-create .howto a { - text-decoration: none; -} -.sp-create .howto a:hover { - text-decoration: underline; -} -.sp-create .slct-label { - float: left; - width: 200px; -} -.sp-create .slct-start { - float: left; - width: 160px; -} -.sp-create .slct-end { - width: 160px; -} -.sp-create .container { - text-align: left; - margin: 20px 0 0 0; -} -.sp-create .title,.sp-create .text { - float: left; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 93%; -} -.sp-create .text { - margin: 4px 10px 0 20px; -} -.sp-create .title { - width: 60px; - font-weight: bold; - margin: 4px 0 0 10px; -} -.sp-create .image { - vertical-align: top; - margin: 0 0 0 20px; -} -.sp-create .submit { - width: 220px; - padding: 4px 0; - margin: 20px 0 20px 0; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.sp-create .checkbox { - margin: 25px 5px 0 20px; - vertical-align: -2px; -} -.sp-create .checkbox-text { - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 93%; -} -/* Results */ -.results { - width: 960px; -} -.results #timeline{ - width: 960px; - height: 450px; -} -.results .title { - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-weight: bold; - font-size: 108%; - margin: 12px 0 0 0; - float: left; - text-align: left; -} -.results select { - width: 200px; - display: none; -} -.results .selector { - text-align: right; - margin: 12px 0 0 0; -} -.results #gauge { - margin: 10px 0 0 0; - float: left; - text-align: left; - width: 200px; - height: 200px; -} -.results .container-max,.results .container-min,.results .container-umin { - height: 210px; - float: left; - margin: 10px 0 0 0; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-size: 93%; -} -.results .container-max { - width: 260px; -} -.results .container-min { - width: 220px; -} -.results .container-umin { - width: 200px; -} -.results .title-max, .results .title-min, .results .title-umax { - text-align: right; - font-family: times, "Times New Roman", times-roman, georgia, serif; - font-weight: bold; - margin: 8px 0 8px 0; - float: left; -} -.results .title-max { - width: 180px; -} -.results .title-umax { - width: 160px; -} -.results .title-min { - width: 140px; -} -.results .value { - text-align: left; - margin: 8px 0 8px 10px; - width: 70px; - float: left; -} -.results .value-min { - text-align: left; - margin: 8px 0 8px 10px; - width: 50px; - float: left; -} -.results .image { - margin: 35px 0 0 170px; -} -.results #by-size, .results #by-req { - width:450px; - height:300px; - float:left; -} -.results #by-size { - margin: 10px 0 10px 10px; -} -.results #by-req { - margin: 10px 0 10px 30px; -} -.results #domains-by-size, .results #domains-by-req { - width:930px; - height:300px; - margin: 10px 0; -} -.results #pagespeed { - margin: 10px 0; -} -.results #harviewer { - margin: 10px 0; -} -.results #manager { - text-align: left; - padding: 20px 0 20px 10px; -} -.results button { - width: 200px; - padding: 4px 0; - margin: 0 10px; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; - display: none; -} -.results .newtab { - text-align: center; -} -.results .newtab button { - width: 200px; - padding: 4px 0; - margin: 5px 0px 10px 0px; - color: #000; - font-family: arial; - font-size: 77%; - background: #d7e7cf; - border: 1px solid #498a2d; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.results .spinner { - position: relative; - width: 26px; - left: 515px; - top: -27px; - margin: 12px 0 0 0; - display: none; -} \ No newline at end of file diff --git a/harstorage/public/styles/tabber.css b/harstorage/public/styles/tabber.css deleted file mode 100644 index f2e57b2..0000000 --- a/harstorage/public/styles/tabber.css +++ /dev/null @@ -1,86 +0,0 @@ -/*-------------------------------------------------- - REQUIRED to hide the non-active tab content. - But do not hide them in the print stylesheet! - --------------------------------------------------*/ -.tabberlive .tabbertabhide { - display:none; -} - -/*-------------------------------------------------- - .tabber = before the tabber interface is set up - .tabberlive = after the tabber interface is set up - --------------------------------------------------*/ -.tabber { -} -.tabberlive { - margin-top:1em; - width:960px; - border:10px; -} - -/*-------------------------------------------------- - ul.tabbernav = the tab navigation list - li.tabberactive = the active tab - --------------------------------------------------*/ -ul.tabbernav -{ - margin:0; - padding: 3px 0; - border-bottom: 1px solid #498a2d; - font: bold 12px Verdana, sans-serif; - text-align:left; -} - -ul.tabbernav li -{ - list-style: none; - margin: 0; - display: inline; -} - -ul.tabbernav li a -{ - padding: 3px 0.5em; - margin-left: 3px; - border: 1px solid #498a2d; - border-bottom: none; - background: #D7E7CF; - text-decoration: none; -} - -ul.tabbernav li a:link { color: #498a2d; } -ul.tabbernav li a:visited { color: #498a2d; } - -ul.tabbernav li a:hover -{ - color: #498a2d; - background: #F2FBED; - border-color: #498a2d; -} - -ul.tabbernav li.tabberactive a -{ - background-color: #fff; - border-bottom: 1px solid #fff; -} - -ul.tabbernav li.tabberactive a:hover -{ - color: #000; - background: white; - border-bottom: 1px solid white; -} - -/*-------------------------------------------------- - .tabbertab = the tab content - Add style only after the tabber interface is set up (.tabberlive) - --------------------------------------------------*/ -.tabberlive .tabbertab { - padding:5px; - border:1px solid #498a2d; - border-bottom-left-radius:10px; - border-bottom-right-radius:10px; - border-top:none; - width:930; - overflow:auto; -} diff --git a/harstorage/public/swf/copy_cvs_xls.swf b/harstorage/public/swf/copy_cvs_xls.swf deleted file mode 100644 index 709ef812d521c0460c98f246a7318d11597309ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2131 zcmV-Z2(0%*S5pcu4FCXm+I?2ra@)ueod!V+0Fn}Qw`F@x+mf}bB}Gd1`l6L(Nt9&C zmP|#Lwc|uFL0}+a1p+Jp)a7aY3;6>-ZRH=fQd`Mms*-}_%KAM|`;`2_Dm?&o^QMB5 zW=@~(>FMe20eC>fe-YC0Jt0?s%y(TSgnZZYHy~unGt9~L`NiBp!*={hl%9;#gP=KC zEbi~`kL}+ZbG@D7_~XZqi=~O;#6$rt3jU!JXa@zyzcVr&Ihbd@?pe*ia-AHPwVK-s zo{WsNy&C$N(`L)FBbSC=WHxIsC-95oW8>(^&?imTYiPl=)@<6Au5ow8gMwdo_1%4K zj}=T?^XpT^b3?u+umYP+&l+xxi6R@G{b! z$x)12z^2Dbg$>p$Oq9mQ<0v>eRs1B`Z3gQ%P3E&dC#FbQI5|0aqb9Jx68?*%@{mN2 z{_xN16Ik$nsBf6(mTjw9b2ZN(Klc7xB?J}3^t1*WCs{H^gm=Frh(Ov;gNS>sWu&9@ zkFh;ov*ZGwq>aF{oEm+gLWFS}O=#N7m7HlN|)f8fIr#HZ7aI!~i8t=O-6+w|OX8jy~r$s9x8+4Hk&4 zzyeeBG#+i2P>V04ECYo6Ow{J`6Ew>B3arBBiLgO!Djb_Ndu z<~f?(wa^C34$h{gv;Ip-iqfM6dR=L_EuU5Pm?!FZG&vSqLCnu%htUXaHIsgTZPc;B z#|^Y)tFFP6h1av?&9{ron~HzRwTtN=`T=Xm8%%Fu1rA{}h5p_BdAFfij=JJ%2J@C3 z(-l3}4OII~R+}2{77W{$Dz$H!9tf6kt9_%+Z`16?z2Zcv^q^R4S$1GKy_d>98JB(N zGC3d5vDdPTZyL*C-p$KKQO0;D?6KJJ+W&EK{bJ)zMvXh)&MfoPxZQY8GMK{iD$6^b z)~s8)uhiI%MAcvv|qBk zvRrk+)uKGUl)#!#jGNnapF3&g61sb!}x~b3x>-n`j#5>}K8abC!c=LVeCP zbC>!shf2o{a=Po7)=tY~Mh@Sr{jXJ@{3=_ z%FPCypOiIosRO!x)i3@3yUlw0p+C_t_ouF?Nzy;uKb|B5Ab&lm4o(d|8Jr$`Iyf`< zxc`;VDS@DFCUMbyp||R1hg7DM%D3O(+ypDyFHFp;8BxI;qq}rEV(qQmK!^ z0EH_Qu2LAJaE-!s3O6WxM&Txva#XrSrQ1}xL!}`~?^5`JLV=276p9o|RGy%4pNd~m zctGJHg+~+~E0aKBmckr`GKF~x3ltV9JfpBgVVMfgDZHStLSdD{O9~k68cqC$sv8tG zY0qm4zoqbo%5N!DDb%ikVt~TXrAc9jrs`C%sQ4`vcd2Oi@h<{^@T&nIfqzE;5_}K| zxgdQqh!+ zLWG9MXfTqWYEjAT+O59tyGWXa>&k;~C)$PtGLH@YgdU z$CWJEo(j$E@Xxd|CGbOqrjlQePX$j1j1nmUinwtomuRbF#k=x6V)J?YvPq1qJ4*N`nyy4rQRl+a z5cxPnbP=axbKcj*>}|}>@dtC^D6hX?T!f*M9v)Ad$iw0@Vd<}l4>hsxA5Rw|*2N=p zKG2ig2j6!1BwqXrpR)K1RXM7Oi_anW_yJYvP97OI7$RKX#YN=*#HkNM^7lB`#6P0f znpjKr{pI9@Z`~{4{k;>G7^#kysxL~_l~Q%JRDD^h%J}!1+=!k!#Uyq2@ZY - - - - - ${title} - - - - - - - - diff --git a/harstorage/templates/common/footer.html b/harstorage/templates/common/footer.html deleted file mode 100644 index a3fd47b..0000000 --- a/harstorage/templates/common/footer.html +++ /dev/null @@ -1,10 +0,0 @@ -<%def name="html()"> - - - - diff --git a/harstorage/templates/common/header.html b/harstorage/templates/common/header.html deleted file mode 100644 index 6a6eefa..0000000 --- a/harstorage/templates/common/header.html +++ /dev/null @@ -1,28 +0,0 @@ -<%def name="html()"> -
      - - - -
      - -
      - Chart Theme - -
      - -
      - Light
      - Light Green
      - Dark Green - - -
      - - - -
      - X -
      -
      -
      - diff --git a/harstorage/templates/create/core.html b/harstorage/templates/create/core.html deleted file mode 100644 index 1394a51..0000000 --- a/harstorage/templates/create/core.html +++ /dev/null @@ -1,59 +0,0 @@ -<%namespace name="jsloader" file="/create/jsloader.html"/> -<%namespace name="dochead" file="/common/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("Superposed Tests")} -${header.html()} -
      -
      - - -
      - -
      -
      -
      - Aggregate and Compare - -
      -
      -
      Set 1 >
      -
      Label:
      - - - -
      Start Time:
      - - - -
      End Time:
      - - - - - -
      -
      - -
      - Column Chart - Spline Chart - Data Table
      - -
      -
      - -
      -
      -
      -${jsloader.html()} -${footer.html()} diff --git a/harstorage/templates/create/jsloader.html b/harstorage/templates/create/jsloader.html deleted file mode 100644 index 1fbf9e0..0000000 --- a/harstorage/templates/create/jsloader.html +++ /dev/null @@ -1,13 +0,0 @@ -<%def name="html()"> - - diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html deleted file mode 100644 index a22d766..0000000 --- a/harstorage/templates/details/core.html +++ /dev/null @@ -1,89 +0,0 @@ -<%namespace name="jsloader" file="/details/jsloader.html"/> -<%namespace name="dochead" file="/details/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("Details | " + c.label)} -${header.html()} -
      -
      -
      - -

      Run Info

      - -
      - -
      - -
      - -
      -
      -
      -
      Full Load Time:
      n/a
      -
      onLoad Event:
      n/a
      -
      Start Render Time:
      n/a
      -
      Time to First Byte:
      n/a
      -
      - -
      -
      Total DNS Time:
      n/a
      -
      Total Transfer Time:
      n/a
      -
      Total Server Time:
      n/a
      -
      Avg. Connecting Time:
      n/a
      -
      Avg. Blocking Time:
      n/a
      -
      -
      -
      Total Size:
      n/a
      -
      Text Files:
      n/a
      -
      Media Files:
      n/a
      -
      Cache Size:
      -
      -
      -
      Requests:
      n/a
      -
      Redirects:
      n/a
      -
      Bad Requests:
      n/a
      -
      Domains:
      n/a
      - -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      - -
      -
      -
      - -
      -
      - -
      -
      - - - - -
      -
      -
      -
      -
      -${jsloader.html()} -${footer.html()} diff --git a/harstorage/templates/details/dochead.html b/harstorage/templates/details/dochead.html deleted file mode 100644 index 2539fca..0000000 --- a/harstorage/templates/details/dochead.html +++ /dev/null @@ -1,20 +0,0 @@ -<%def name="html(title)"> - - - - - ${title} - - - - - - - - - - - diff --git a/harstorage/templates/details/jsloader.html b/harstorage/templates/details/jsloader.html deleted file mode 100644 index 0129d2a..0000000 --- a/harstorage/templates/details/jsloader.html +++ /dev/null @@ -1,26 +0,0 @@ -<%def name="html()"> - - diff --git a/harstorage/templates/display/core.html b/harstorage/templates/display/core.html deleted file mode 100644 index 67cbf9d..0000000 --- a/harstorage/templates/display/core.html +++ /dev/null @@ -1,33 +0,0 @@ -<%namespace name="jsloader" file="/display/jsloader.html"/> -<%namespace name="dochead" file="/display/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> -<%namespace name="modules" file="/display/modules.html"/> - -${dochead.html("Superposed Tests | " + c.agg_type)} -${header.html()} -
      -
      - % if c.chart == "true": - ${modules.chart()} - % endif - -

      Aggregated Statistics

      - -
      - -
      - - % if c.table == "true": - ${modules.table()} - % endif -
      -
      -${jsloader.html()} -${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/display/dochead.html b/harstorage/templates/display/dochead.html deleted file mode 100644 index c7314f4..0000000 --- a/harstorage/templates/display/dochead.html +++ /dev/null @@ -1,20 +0,0 @@ -<%def name="html(title)"> - - - - - ${title} - - - - - - - - - - - diff --git a/harstorage/templates/display/jsloader.html b/harstorage/templates/display/jsloader.html deleted file mode 100644 index 055f8ea..0000000 --- a/harstorage/templates/display/jsloader.html +++ /dev/null @@ -1,47 +0,0 @@ -<%def name="html()"> - - diff --git a/harstorage/templates/display/modules.html b/harstorage/templates/display/modules.html deleted file mode 100644 index a895ce1..0000000 --- a/harstorage/templates/display/modules.html +++ /dev/null @@ -1,28 +0,0 @@ -<%def name="chart()"> -
      - - -<%def name="table()"> -
      -
      - - - - % for column in range(len(c.headers)-1): - - % endfor - - - - % for row in range(c.rowcount): - - - % for column in range(len(c.headers)-1): - - % endfor - - % endfor - -
      ${c.headers[0]}${c.headers[column+1]}
      ${c.metrics_table[0][row]}${c.metrics_table[column+1][row]}
      -
      - \ No newline at end of file diff --git a/harstorage/templates/error.html b/harstorage/templates/error.html deleted file mode 100644 index 5bafbd1..0000000 --- a/harstorage/templates/error.html +++ /dev/null @@ -1,10 +0,0 @@ -<%namespace name="dochead" file="/common/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html(c.message)} -${header.html()} -

      - ${c.message} -

      -${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/harviewer.html b/harstorage/templates/harviewer.html deleted file mode 100644 index 542e2ff..0000000 --- a/harstorage/templates/harviewer.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - HAR Viewer - - - -
      - - - - diff --git a/harstorage/templates/histogram/core.html b/harstorage/templates/histogram/core.html deleted file mode 100644 index 26d639d..0000000 --- a/harstorage/templates/histogram/core.html +++ /dev/null @@ -1,23 +0,0 @@ -<%namespace name="jsloader" file="/histogram/jsloader.html"/> -<%namespace name="dochead" file="/histogram/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("Histogram | " + c.label)} -${header.html()} -
      -
      -
      -

      Histogram

      - -
      - -
      -
      -
      -${jsloader.html()} -${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/histogram/dochead.html b/harstorage/templates/histogram/dochead.html deleted file mode 100644 index 9249ae4..0000000 --- a/harstorage/templates/histogram/dochead.html +++ /dev/null @@ -1,18 +0,0 @@ -<%def name="html(title)"> - - - - - ${title} - - - - - - - - - diff --git a/harstorage/templates/histogram/jsloader.html b/harstorage/templates/histogram/jsloader.html deleted file mode 100644 index 7054aab..0000000 --- a/harstorage/templates/histogram/jsloader.html +++ /dev/null @@ -1,18 +0,0 @@ -<%def name="html()"> - - diff --git a/harstorage/templates/home/core.html b/harstorage/templates/home/core.html deleted file mode 100644 index bb4a25e..0000000 --- a/harstorage/templates/home/core.html +++ /dev/null @@ -1,51 +0,0 @@ -<%namespace name="jsloader" file="/home/jsloader.html"/> -<%namespace name="dochead" file="/home/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("HAR Storage")} -${header.html()} -
      -
      -
      -
      - New File - - -
      -
      -
      - -
      -

      Latest Results

      - - - - - - - - - - - - - - % for index in range(c.rowcount): - - - - - - - - - % endfor - -
      TimestampLabelURLTotal Size (kB)Total RequestsFull Load Time (s)
      ${c.metrics_table[0][index]}${c.metrics_table[1][index]}${c.metrics_table[2][index]}${c.metrics_table[3][index]}${c.metrics_table[4][index]}${c.metrics_table[5][index]}
      - - -
      -
      -${jsloader.html()} -${footer.html()} diff --git a/harstorage/templates/home/dochead.html b/harstorage/templates/home/dochead.html deleted file mode 100644 index 5cb547e..0000000 --- a/harstorage/templates/home/dochead.html +++ /dev/null @@ -1,18 +0,0 @@ -<%def name="html(title)"> - - - - - ${title} - - - - - - - - - diff --git a/harstorage/templates/home/jsloader.html b/harstorage/templates/home/jsloader.html deleted file mode 100644 index 48cae2b..0000000 --- a/harstorage/templates/home/jsloader.html +++ /dev/null @@ -1,23 +0,0 @@ -<%def name="html()"> - - diff --git a/harstorage/templates/migration.html b/harstorage/templates/migration.html deleted file mode 100644 index 6534bd1..0000000 --- a/harstorage/templates/migration.html +++ /dev/null @@ -1,14 +0,0 @@ -<%namespace name="dochead" file="/common/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("Data Migration")} -${header.html()} -

      - Data migration started.
      Please do not close browser window! -

      - - -${footer.html()} diff --git a/harstorage/templates/upload.html b/harstorage/templates/upload.html deleted file mode 100644 index 87dd76a..0000000 --- a/harstorage/templates/upload.html +++ /dev/null @@ -1,10 +0,0 @@ -<%namespace name="dochead" file="/common/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> -<%namespace name="footer" file="/common/footer.html"/> - -${dochead.html("Upload Error")} -${header.html()} -

      - ${c.error} -

      -${footer.html()} \ No newline at end of file diff --git a/harstorage/tests/__init__.py b/harstorage/tests/__init__.py deleted file mode 100644 index 0470886..0000000 --- a/harstorage/tests/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -"""Pylons application test package - -This package assumes the Pylons environment is already loaded, such as -when this script is imported from the `nosetests --with-pylons=test.ini` -command. - -This module initializes the application via ``websetup`` (`paster -setup-app`) and provides the base testing objects. -""" -from unittest import TestCase - -from paste.deploy import loadapp -from paste.script.appinstall import SetupCommand -from pylons import url -from routes.util import URLGenerator -from webtest import TestApp - -import pylons.test - -__all__ = ["environ", "url", "TestController"] - -# Invoke websetup with the current config file -SetupCommand("setup-app").run([pylons.test.pylonsapp.config["__file__"]]) - -environ = {} - - -class TestController(TestCase): - - def __init__(self, *args, **kwargs): - wsgiapp = pylons.test.pylonsapp - config = wsgiapp.config - self.app = TestApp(wsgiapp) - url._push_object(URLGenerator(config["routes.map"], environ)) - TestCase.__init__(self, *args, **kwargs) diff --git a/harstorage/tests/functional/__init__.py b/harstorage/tests/functional/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/tests/functional/test_chart.py b/harstorage/tests/functional/test_chart.py deleted file mode 100644 index 031d8b6..0000000 --- a/harstorage/tests/functional/test_chart.py +++ /dev/null @@ -1,37 +0,0 @@ -from harstorage.tests import * - - -class TestChartController(TestController): - - """ - Test suite for chart export - - """ - - def test_01_export_svg(self): - """Export SVG""" - - # Expected valid image - with open("harstorage/tests/functional/testdata/validfile.svg") as file: - response = self.app.post( - url(controller="chart", action="export"), - params={"svg": file.read(), "type": "image/svg+xml", - "filename": "timeline", "width": 960}, - status=200) - - # Response header - assert response.content_type == "image/svg+xml" - - def test_02_export_png(self): - """Export PNG""" - - # Expected valid image - with open("harstorage/tests/functional/testdata/validfile.svg") as file: - response = self.app.post( - url(controller="chart", action="export"), - params={"svg": file.read(), "type": "image/png", - "filename": "timeline", "width": 960}, - status=200) - - # Response header - assert response.content_type == "image/png" diff --git a/harstorage/tests/functional/test_combine.py b/harstorage/tests/functional/test_combine.py deleted file mode 100644 index 53aae45..0000000 --- a/harstorage/tests/functional/test_combine.py +++ /dev/null @@ -1,41 +0,0 @@ -from harstorage.tests import * - - -class TestCombineController(TestController): - - """ - Test suite for consolidation of static resources - - """ - - def test_01_combine_styles(self): - """Combine common styles""" - - # Expected valid response - response = self.app.get( - url(controller="combine", action="styles"), - params={"ver": "1.0", "main.css": "", "tabber.css": "", - "datatables/table_jui.css": "", - "datatables/ColReorder.css": "", - "datatables/TableTools_JUI.css": ""}, - status=200) - - # Response body - assert response.content_type == "text/css" - - def test_02_combine_missing_styles(self): - """Combine missing styles""" - - # Expected 404 status code - response = self.app.get( - url(controller="combine", action="styles"), - params={"ver": "1.0", "imnotexistingfile.css": ""}, - status=404) - - # Response body - assert "404 Not Found" in response.body - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert response.tmpl_context.message == "404 Not Found" diff --git a/harstorage/tests/functional/test_migration.py b/harstorage/tests/functional/test_migration.py deleted file mode 100644 index cf4305b..0000000 --- a/harstorage/tests/functional/test_migration.py +++ /dev/null @@ -1,7 +0,0 @@ -from harstorage.tests import * - - -class TestMigrationController(TestController): - - def test_index(self): - pass diff --git a/harstorage/tests/functional/test_results.py b/harstorage/tests/functional/test_results.py deleted file mode 100644 index 3878d4d..0000000 --- a/harstorage/tests/functional/test_results.py +++ /dev/null @@ -1,279 +0,0 @@ -import pymongo -import json -import time - -from harstorage.tests import * - - -class TestResultsController(TestController): - - """ - Test suite for test results - - """ - - def test_01_upload_empty(self): - """Upload empty file""" - - # Expected valid response - response = self.app.post( - url(controller="results", action="upload"), - params={"file": ""}, - status=200) - - # Response body - assert "Empty file" in response.body - - # Template context - assert response.tmpl_context.error == "Empty file" - - def test_02_upload_empty_auto(self): - """Upload empty file in automated mode""" - - # Expected valid response - response = self.app.post( - url(controller="results", action="upload"), - params={"file": ""}, - headers={"Automated": "true"}, - status=200) - - # Response body - assert response.body == "Empty file" - - def test_03_upload_valid_file(self): - """Upload valid file""" - - # Database collection - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - # Check data in database before - before = collection.find({"label": "validfile"}).count() - - # Expected redirect - with open("harstorage/tests/functional/testdata/validfile.har") as file: - response = self.app.post( - url(controller="results", action="upload"), - params={"file": file.read()}, - status=302) - - # Response header - assert "results/details?label=validfile" in response.location - - time.sleep(1) - - # Check data in database before - after = collection.find({"label": "validfile"}).count() - - assert after - before == 1 - - def test_04_upload_valid_file_auto(self): - """Upload valid file in automated mode""" - - # Database collection - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - # Check data in database before - before = collection.find({"label": "validfile"}).count() - - # Expected redirect - with open("harstorage/tests/functional/testdata/validfile.har") as file: - response = self.app.post( - url(controller="results", action="upload"), - params={"file": file.read()}, - headers={"Automated": "true"}, - status=200) - - # Response header - assert response.body == "Successful" - - time.sleep(1) - - # Check data in database before - after = collection.find({"label": "validfile"}).count() - - assert after - before == 1 - - def test_05_index_get(self): - """Valid GET request""" - - # Successful response - response = self.app.get( - url(controller="results", action="index"), - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert response.tmpl_context.rowcount > 0 - - def test_06_index_post(self): - """Prohibited POST request""" - - # Expected 405 status code - response = self.app.post( - url(controller="results", action="index"), - status=405) - - # Response body - assert "405 Method Not Allowed" in response.body - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert response.tmpl_context.message == "405 Method Not Allowed" - - def test_07_index_404(self): - """Error document""" - - # Expected 404 status code - response = self.app.get( - url("/404"), - status=404) - - # Response body - assert "404 Not Found" in response.body - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert response.tmpl_context.message == "404 Not Found" - - def test_08_details_label(self): - """Test results - label""" - - # Successful response - response = self.app.get( - url(controller="results", action="details"), - params={"label": "validfile"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - assert response.tmpl_context.label == "validfile" - - def test_09_details_url(self): - """Test results - url""" - - # Successful response - response = self.app.get( - url(controller="results", action="details"), - params={"url": "http://valid.host/"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - assert response.tmpl_context.label == "http://valid.host/" - - def test_10_timeline_label(self): - """Timeline data - label""" - - # Successful response - response = self.app.get( - url(controller="results", action="timeline"), - params={"label": "validfile", "mode": "label"}, - status=200) - - # Data validation - assert len(response.body.split("#")) == 35 - assert len(response.body.split(";")) == 19 - - def test_11_timeline_url(self): - """Timeline data - url""" - - # Successful response - response = self.app.get( - url(controller="results", action="timeline"), - params={"label": "http://valid.host/", - "mode": "url"}, - status=200) - - # Data validation - assert len(response.body.split("#")) == 35 - assert len(response.body.split(";")) == 19 - - def test_12_runinfo(self): - """Runinfo""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="results", action="runinfo"), - params={"timestamp": timestamp}, - status=200) - - # Data validation - assert json.loads(response.body) - - def test_13_donwload(self): - """Download HAR""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - id = collection.find_one({"label": "validfile"})["_id"] - - # Successful response - response = self.app.get( - url(controller="results", action="download"), - params={"id": id}, - status=200) - - # Data validation - har = response.body.replace("onInputData(", "")[:-2] - - assert json.loads(har) - - def test_14_harviewer(self): - """HAR Viewer iframe""" - - # Successful response - response = self.app.get( - url(controller="results", action="harviewer"), - status=200) - - # Cookie - cookie = response.response.headers.get("Set-Cookie") - - assert "phaseInterval=-1;" in cookie - assert "Max-Age=31536000;" in cookie - assert "Path=/" in cookie - - def test_15_delete_label(self): - """Delete - label""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="results", action="deleterun"), - params={"label": "validfile", "timestamp": timestamp, - "mode": "label", "all": "false"}, - status=200) - - # Response validation - assert response.body == "details?label=validfile" - - def test_16_delete_url(self): - """Delete - url""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"url": "http://valid.host/"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="results", action="deleterun"), - params={"label": "http://valid.host/", "timestamp": timestamp, - "mode": "url", "all": "false"}, - status=200) - - # Response validation - assert response.body == "/" diff --git a/harstorage/tests/functional/test_superposed.py b/harstorage/tests/functional/test_superposed.py deleted file mode 100644 index 7e0f827..0000000 --- a/harstorage/tests/functional/test_superposed.py +++ /dev/null @@ -1,175 +0,0 @@ -import pymongo -import time - -from harstorage.tests import * - - -class TestTestflowController(TestController): - - """ - Test suite for aggregation of test results - - """ - - def test_01_init(self): - """Init data for Superposed""" - - # Add valid file - with open("harstorage/tests/functional/testdata/validfile.har") as file: - self.app.post( - url(controller="results", action="upload"), - params={"file": file.read()}, - status=302) - - time.sleep(1) - - def test_02_create(self): - """Valid GET request for create form""" - - # Successful response - response = self.app.get( - url(controller="superposed", action="create"), - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert isinstance(response.tmpl_context.labels, list) - - def test_03_dates(self): - """Dates for label""" - - # Successful response - response = self.app.get( - url(controller="superposed", action="dates"), - params={"label": "validfile"}, - status=200) - - # Template context - assert response.body.find(";") == -1 - - def test_04_display_average(self): - """Display superposed - Average""" - - # Fetch data from database - collection = \ - pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="superposed", action="display"), - params={"step_1_label": "validfile", - "step_1_start_ts": timestamp, - "step_1_end_ts": timestamp, - "metric": "Average"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert len(response.tmpl_context.metrics_table) == 19 - - def test_05_display_median(self): - """Display superposed - Median""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="superposed", action="display"), - params={"step_1_label": "validfile", - "step_1_start_ts": timestamp, - "step_1_end_ts": timestamp, - "metric": "Median"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert len(response.tmpl_context.metrics_table) == 19 - - def test_06_display_minimum(self): - """Display superposed - Minimum""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="superposed", action="display"), - params={"step_1_label": "validfile", - "step_1_start_ts": timestamp, - "step_1_end_ts": timestamp, - "metric": "Minimum"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert len(response.tmpl_context.metrics_table) == 19 - - def test_07_display_maximum(self): - """Display superposed - Maximum""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="superposed", action="display"), - params={"step_1_label": "validfile", - "step_1_start_ts": timestamp, - "step_1_end_ts": timestamp, - "metric": "Maximum"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert len(response.tmpl_context.metrics_table) == 19 - - def test_08_display_percentile(self): - """Display superposed - 90th Percentile""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - response = self.app.get( - url(controller="superposed", action="display"), - params={"step_1_label": "validfile", - "step_1_start_ts": timestamp, - "step_1_end_ts": timestamp, - "metric": "90th Percentile"}, - status=200) - - # Template context - assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] - - assert len(response.tmpl_context.metrics_table) == 19 - - def test_09_close(self): - """Clear test data from Superposed""" - - # Fetch data from database - collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] - - timestamp = collection.find_one({"label": "validfile"})["timestamp"] - - # Successful response - self.app.get( - url(controller="results", action="deleterun"), - params={"label": "validfile", "timestamp": timestamp, - "mode": "label", "all": "true"}, - status=200) diff --git a/harstorage/tests/functional/testdata/validfile.har b/harstorage/tests/functional/testdata/validfile.har deleted file mode 100644 index cec0b96..0000000 --- a/harstorage/tests/functional/testdata/validfile.har +++ /dev/null @@ -1,1866 +0,0 @@ -{ - "log": { - "version": "1.1", - "creator": { - "name": "Firebug", - "version": "1.8" - }, - "browser": { - "name": "Firefox", - "version": "6.0.2" - }, - "pages": [ - { - "startedDateTime": "2011-09-21T10:57:59.243+03:00", - "id": "validfile", - "title": "Оптимизация производительности и времени загрузки сайтов | Web Performance", - "pageTimings": { - "onContentLoad": 915, - "onLoad": 1636 - } - } - ], - "entries": [ - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:57:59.243+03:00", - "time": 516, - "request": { - "method": "GET", - "url": "http://valid.host/", - "httpVersion": "HTTP/1.1", - "cookies": [ - { - "name": "__cfduid", - "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" - }, - { - "name": "__utma", - "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" - }, - { - "name": "__utmz", - "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" - }, - { - "name": "__utmv", - "value": "81600529.blog_team" - }, - { - "name": "wp-settings-1", - "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" - }, - { - "name": "wp-settings-time-1", - "value": "1312181035" - } - ], - "headers": [ - { - "name": "Host", - "value": "webperformance.ru" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Cookie", - "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" - } - ], - "queryString": [], - "headersSize": 690, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Server", - "value": "cloudflare-nginx" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 07:57:58 GMT" - }, - { - "name": "Content-Type", - "value": "text/html; charset=UTF-8" - }, - { - "name": "Transfer-Encoding", - "value": "chunked" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Vary", - "value": "Accept-Encoding,Cookie" - }, - { - "name": "Cache-Control", - "value": "max-age=0, no-cache, no-store" - }, - { - "name": "Content-Encoding", - "value": "gzip" - } - ], - "content": { - "mimeType": "text/html", - "size": 34586, - "text": "\n\n\n\nОптимизация производительности и времени загрузки сайтов | Web Performance\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\"Web\n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Уменьшение размера текстовых файлов (HTML, JavaScript и CSS) не является сложной задачей. Минимизация и обфускация кода, сжатие передаваемых файлов на уровне веб-сервера — все это уже давно известные подходы к оптимизации скорости загрузки сайтов. Однако при этом довольно часто игнорируется тот факт, что основной размер страницы вероятнее всего приходится на файлы изображений.

      \n
      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Адаптивный дизайн является одним из ключевых решений для оптимизации мобильных сайтов. Известным подходом является использование медиа-запросов CSS3, о чем мы подробно рассказывали ранее. Альтернативной и иногда даже более простой является реализация с использованием HTTP куки.

      \n
      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Интерфейс Navigation Timing является универсальным решением для измерения времени загрузки страниц. При этом охватывается полный цикл взаимодействия с сайтом – от момента самого первого запроса пользователя до полной загрузки.

      \n

      Особый интерес данный стандарт представляет для мобильных сайтов и приложений, для которых процесс измерения показателей производительности является сложно реализуемым. Navigation Timing API полноценно поддерживается WebKit и потому со временем может быть реализован для большинства мобильных платформ – iOS и Android.

      \n

      Кроме того, в отличие от популярных методов измерения, связанных с использованием JavaScript, ´Ð¾ÑÑ‚упными будут и низкоуровневые метрики – время обращения к DNS серверам или потраченное на переадресацию время.

      \n

      К сожалению, пока данный интерфейс доступен только для последних версий браузеров Internet Explorer и Chrome.

      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Широкое применение конвейерной обработки HTTP запросов (HTTP pipelining) долговое время сдерживалось из-за слабой поддержки даже в современных бразерах. Однако в сегменте мобильных устройств положение меняется коренным образом. Самые популярные браузеры Opera и Android (порядка 40% от всего сегмента) полноценно поддерживают данный стандарт.

      \n
      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n

      Популярный аддон и букмарклет YSlow теперь доступен и для Opera. Скачать новую версию можно на официальной странице расширений браузера.

      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Как правило, полноценное взаимодействие с сайтом или веб-приложением без наличия интернет (или интранет) соединения невозможно. Данное ограничение является одним из ключевых недостатков онлайн приложений по сравнению с традиционными «настольными» программами.

      \n

      В этой статье мы расскажем о том, как просто и надежно создаются оффлайн версии веб-приложений. Но что еще важнее, в данной статье представлен новый инструмент для решения подобных задач – ManifestR.

      \n

      И даже если вы в основном занимаетесь созданием сайтов, а не веб-приложений, то представленные здесь техники и подходы смогут помочь вам улучшить кэширование динамических и статических данных для ваших проектов.

      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Вместе с ростом мобильного интернета растёт и необходимость оптимизации скорости работы мобильных сайтов. Даже самые современные смартфоны на Android, iOS, WebOS, BlackBerry OS и др. обладают процессорами с частотой не более 1Ghz, а скорости 3G можно считать достаточно медленными (скорость загрузки в 3 раза меньше DSL).

      \n

      Мобильные устройства унаследовали проблемы “больших” машин: от количества http-запросов до эффективности работы JavaScript.

      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Проблемы с загрузкой файлов JavaScript широко известны. К ним относятся нежелательные блокировки в старых версиях браузеров, сложность управления процессом выполнения кода, необходимость отслеживать зависимости между файлами.

      \n

      Решать подобные трудности помогают многочисленные загрузчики JavaScript, которые делают получение скриптов параллельным, асинхронным и, самое главное, управляемым. Одним из наиболее популярных и высокопроизводительных решений является модуль LabJS, последний релиз которого стал еще более простым для применения.

      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      Существует огромное количество программного обеспечения и online сервисов для тестирования и анализа клиентской производительности сайтов. Page Speed, YSlow, Firebug, WebPagetest.org, HttpWatch, dynaTrace, Web Inspector – далеко не полный список. Однако чаще всего данные решения связаны с настольными веб-браузерами. В случае диагностики сайтов для мобильный устройств придется обратиться к дополнительному набору инструментов.

      \n
      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n

      После очередного превью платформы Internet Expolorer 10 стало очевидным, что Microsoft продолжает работу по оптимизации своего браузера. Как и ранее в центре внимания оказались HTML5 технологии, а также поддержка новых спецификаций и API рабочих групп W3C.

      \n
      \n
      \nЧитать далее \t
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n\n
      \t
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n

      Последние записи

      \n\n
      \n
      \n
      \n
      \n

      Еще

      \n
      \n\"Follow\n\"View\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n\n" - }, - "redirectURL": "", - "headersSize": 274, - "bodySize": 9318 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 79, - "send": 0, - "wait": 296, - "receive": 141 - }, - "serverIPAddress": "173.245.61.106", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:57:59.665+03:00", - "time": 297, - "request": { - "method": "GET", - "url": "http://valid.host/wp-content/themes/platform/style.css", - "httpVersion": "HTTP/1.1", - "cookies": [ - { - "name": "__cfduid", - "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" - }, - { - "name": "__utma", - "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" - }, - { - "name": "__utmz", - "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" - }, - { - "name": "__utmv", - "value": "81600529.blog_team" - }, - { - "name": "wp-settings-1", - "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" - }, - { - "name": "wp-settings-time-1", - "value": "1312181035" - } - ], - "headers": [ - { - "name": "Host", - "value": "webperformance.ru" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/" - }, - { - "name": "Cookie", - "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" - } - ], - "queryString": [], - "headersSize": 717, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Server", - "value": "cloudflare-nginx" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 07:57:59 GMT" - }, - { - "name": "Content-Type", - "value": "text/css" - }, - { - "name": "Transfer-Encoding", - "value": "chunked" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Last-Modified", - "value": "Thu, 26 May 2011 16:04:10 GMT" - }, - { - "name": "Vary", - "value": "Accept-Encoding" - }, - { - "name": "Cache-Control", - "value": "public, max-age=31536000" - }, - { - "name": "CF-Cache-Status", - "value": "HIT" - }, - { - "name": "Expires", - "value": "Thu, 20 Sep 2012 07:57:59 GMT" - }, - { - "name": "Content-Encoding", - "value": "gzip" - } - ], - "content": { - "mimeType": "text/css", - "size": 30644, - "text": "html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}\np,.p{margin-bottom:1em;}\na:focus{outline:1px dotted invert;}\ninput::-moz-focus-inner{border:0;}\nhr{border:0 transparent solid;border-bottom-width:1px;clear:both;height:0}\nol{list-style:decimal}\nol ol{list-style:lower-roman}\nol ol ol{list-style:lower-alpha}\nul{list-style:disc;}\ndt{font-weight:bold;}\ndd{font-style:italic;}\nsup{font-size:.7em;vertical-align:top;vertical-align:super;}\nsub{font-size:.7em;vertical-align:bottom;}\nbig{font-size:1.3em;}\nabbr, acronym{border-bottom:.1em dotted;cursor:help;}\nq:before, q:after{content:\"'\";}\ninput{font-size:110%;font-size-adjust:none;font-stretch:normal;font-style:normal;font-variant:normal;font-weight:normal;line-height:normal;padding:5px 3px 3px 5px;}\ninput[type=\"submit\"], .submit, input[type=\"button\"], .button, input[type=\"reset\"], .reset{padding:3px 6px;}\ntextarea{font-size:110%;border-color:transparent;border-style:solid;border-width:1px;padding:5px 3px 3px 7px;}\n#calendar_wrap{text-align:center;padding:8px 15px;margin:0;}\n#wp-calendar{text-align:center;margin-top:5px;width:100%;}\n#wp-calendar caption{font-weight:bold;font-size:1.2em;}\n#wp-calendar td{padding:4px 8px;}\n#wp-calendar #today{font-weight:bold;}\n.widget_tag_cloud .winner div{padding:15px;}\n.widget_archive .winner select{margin:10px;}\n.screen-reader-text{display:none;}\n#wpstats{width:0px;height:0px;overflow:hidden;}\n#commentform{margin-top:10px;}\n#commentform small{font-size:90%;}\n#commentform input{padding:5px;display:block;}\n#commentform textarea{width:95%;height:140px;}\n#respond{margin:20px 0;}\nol ul #commentform textarea{width:90%;}\n#commentform .form-submit{margin-bottom:2em;}\n#commentform #submit{display:inline;}\n.form-allowed-tags{font-size:.85em;}\n.form-allowed-tags code{display:block;font-size:10px;}\n.nocommentform{display:none}\n.commentlist{list-style-type:none;margin:10px 0px 10px 18px;line-height:130%;padding-left:55px;}\n.commentlist li{padding:10px;}\n.commentlist ul.children{list-style-type:none;margin:1em 0;}\n.commentlist cite{font-weight:bold;font-style:normal;}\n.commentlist img.avatar{float:left;margin:0 5px 5px -65px;position:relative;}\n.commentlist .children img.avatar{float:left;margin:0 10px 5px 0;position:relative;}\n.commentlist .comment-meta{margin-bottom:5px;display:block;font-size:87%;}\n.nocomments{display:none;}\n.hidden{display:none;visibility:hidden;}\n.aligncenter,.alignnone{display:block;margin-left:auto;margin-right:auto;}\n.center, .textcenter{text-align:center;}\n.alignleft{float:left;margin:0 1.4em .4em 0;}\n.left{float:left;}\n.textleft{text-align:left;}\n.alignright{float:right;margin:0 0 .4em 1.4em;}\n.right{float:right;}\n.textright{text-align:right;}\n.clear{clear:both;}\n.block{display:block;}\nimg.center, img[align=\"center\"]{display:block;margin-left:auto;margin-right:auto;}\nimg.left, img[align=\"left\"]{float:left;margin:2px 10px 5px 0px;}\nimg.right, img[align=\"right\"]{float:right;margin:2px 0px 5px 10px;}\n.fix:after{content:\".\";display:block;height:0;clear:both;visibility:hidden;}\n.fix{display:inline-block;}\n* html .fix{height:1%;}\n.fix{display:block;}\nbody{font-size:87.5%;line-height:1.6em;height:100%;padding-top:5px;}\n#page, #dynamic-content{min-height:500px;zoom:1;}\n#page-canvas{margin:0 auto;}\nbody, .font1, .font-primary, .commentlist, input{font-family:Georgia, 'Times New Roman', Times, serif;}\nh1, h2, h3, h4, h5, h6, .site-title{font-family:Georgia, 'Times New Roman', Times, serif;}\n.font2, .font-sub, ul.main-nav li a, #secondnav li a, .metabar, .subtext, .subhead, .widget-title, .post-comments, .reply a, .editpage, #pagination .wp-pagenavi, .post-edit-link, #wp-calendar caption, #wp-calendar thead th, .soapbox-links a, .fancybox, .standard-form .admin-links, #featurenav a, .pagelines-blink, .ftitle small, .button, input[type=\"submit\"], input[type=\"button\"], input[type=\"reset\"], .submit{font-family:\"Lucida Grande\", \"Lucida Sans\", \"Lucida Sans Unicode\", sans-serif;text-transform:uppercase;letter-spacing:.1em;}\ninput[type=\"text\"], input[type=\"password\"], textarea, #dsq-content textarea{font-family:\"Courier New\", Courier, Verdana, sans-serif;}\nbody{color:#fff;}\n#footer, #footer li.link-list a, #footer .latest_posts li .list-excerpt{color:#999;}\n#footer a, #footer .widget-title, #footer li h5 a{color:#fff;}\n#page, .tcolor1, #subnav ul li a:active, .commentlist cite a, #breadcrumb a, .metabar a:hover, .post-nav a:hover, .post-footer a, #buddypress-page #object-nav ul li a, #buddypress-page table.forum .td-title a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #twitterbar a, #carousel .carousel_text, #site #dsq-content .dsq-request-user-info td a, #pagination .wp-pagenavi a:hover, #pagination .wp-pagenavi .current, #primary-nav .main-nav li a:hover, #featurenav a.activeSlide, .content-pagination a:hover .cp-num{color:#000;}\na, .lcolor1 a, #subnav_row li.current_page_item a, #subnav_row li a:hover, #grandchildnav .current_page_item > a, .branding h1 a:hover, .bbcrumb a:hover, #feature_slider .fcontent.fstyle-lightbg a, #feature_slider .fcontent.fstyle-nobg a, #respond h3 small a{color:#225E9B;}\n.hcolor, h1, h2, h3, h4, h5, h6, h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, #branding h1 a, a.site-title, .entry-title a, .entry-title a:hover, .widget-title a:hover, h3.widget-title a:hover, .content-pagination .cp-num{color:#000;}\n.tcolor2, .lcolor2 a, .subhead, .widget-title, .post-edit-link, .metabar .sword, #branding .site-description, #callout, #commentform .required, #postauthor .subtext, #buddypress-page .standard-form .admin-links, #wp-calendar caption, #carousel .thecarousel, #pagination .wp-pagenavi span.pages, .commentlist .comment-meta a, #highlight .highlight-subhead, .content-pagination span, .content-pagination a .cp-num, .searchform .searchfield{color:#AFAFAF;}\n.tcolor3, .lcolor3 a, .main_nav li a, .widget-title a, h3.widget-title a, #subnav_row li a, .metabar em, .metabar a, .tags, #commentform label, .form-allowed-tags code, .rss-date, #breadcrumb, .reply a, .post-nav a, .post-nav a:visited, .post-footer, .auxilary a, #buddypress-page .standard-form .admin-links a, #twitterbar .content .tbubble, .widget ul.twitter .twitter-item, .cform .emailreqtxt,.cform .reqtxt, #pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .main_nav ul.sf-menu a, .sf-menu a:visited, #featurenav a, #feature-footer span.playpause{color:#777;}\nbody{background-color:#000;}\nbody.fixed_width{background-color:#444;}\n#page, .canvas #page-canvas, .sf-menu li, .main_nav ul.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active, .commentlist ul.children .even, .alt #commentform textarea{background:#FFF;}\n#feature-footer, .main-nav li.current-page-ancestor a, .main-nav li.current_page_item a, .main-nav li.current-page-ancestor ul a, .main-nav li.current_page_item ul a, #wp-calendar caption, #buddypress-page #subnav, #buddypress-page .activity .activity-inner, #buddypress-page table.forum th, #grandchildnav.widget, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, .commentlist .alt, #wp-calendar #today, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, .post-nav, .current_posts_info, .post-footer, #twitterbar, #carousel .content-pad, .success, .sf-menu li li, .sf-menu li li, .sf-menu li li li, .content-pagination a .cp-num, .hentry table .alternate td{background-color:#F7F7F7;}\n.main_nav .main-nav li a:hover, #wp-calendar thead th, #buddypress-page #object-nav, .item-avatar a, .comment blockquote, #grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover, #carousel .carousel_text, pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .sf-menu li:hover, .sf-menu li.sfHover, #featurenav a, #feature-footer span.playpause, .content-pagination .cp-num, .content-pagination a:hover .cp-num, ins{background-color:#F1F1F1;}\n#buddypress-page #object-nav ul li a:hover,#buddypress-page #object-nav ul li.selected a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #featurenav a.activeSlide{background-color:#e1e1e1;}\nhr, .fpost, .clip_box, .widget-title, #buddypress-page .item-list li, .metabar a, #morefoot .widget-title, #site #dsq-content h3{border-bottom:1px solid #E9E9E9;}\n#nav_row.main_nav, ul.sf-menu ul li{border-bottom:1px solid #E9E9E9;}\n.post.fpost .entry, #soapbox .fboxinfo, #feature-footer.nonav{border-top:1px solid #E9E9E9;}\n#feature-footer{border:1px solid #E9E9E9;}\n.fpost.sticky{border-top:3px solid #E9E9E9;border-bottom:3px solid #E9E9E9;}\n.post-nav, .current_posts_info, .post-footer{border-right:3px solid #E9E9E9;border-left:3px solid #E9E9E9;}\n#grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover{border-left:3px solid #E9E9E9;}\n#feature-footer .feature-footer-pad{border-top:1px solid #fff;border-left:1px solid #fff;}\n#featurenav a, #feature-footer span.playpause{border:1px solid #ddd;border-left:1px solid #ccc;border-top:1px solid #ccc;}\n#featurenav a.activeSlide{border:1px solid #CCC;border-left:1px solid #999;border-top:1px solid #999;}\ntextarea:focus, #commentform textarea:focus, #commentform input[type=\"text\"]:focus{border:solid 1px #bbb;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget{border:1px solid #E9E9E9;border-left:1px solid #DDDDDD;border-top:1px solid #DDDDDD;}\n.fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border:1px solid #E9E9E9;border-left:1px solid #DDDDDD;border-top:1px solid #DDDDDD;}\n#carousel .content ul li a img{background:#fff;border:1px solid #ccc;border-right:1px solid #ddd;border-bottom:1px solid #ddd;}\n#carousel .content ul li a:hover img{background:#ddd;border:1px solid #bbb;border-right:1px solid #ccc;border-bottom:1px solid #ccc;}\n.widget_flickrRSS a img, .wp125_write_ads_widget.widget #wp125adwrap_2c .wp125ad a{border:1px solid #eee;border-bottom:2px solid #ddd;background:#fff;}\n#feature-footer, #grandchildnav li a, #grandchildnav .current_page_item ul li a, #buddypress-page #object-nav ul li a{text-shadow:#fff 0 1px 0;}\n.fixed_width #footer{text-shadow:#000 0 -1px 0;}\na.pagelines-blink, a.soapbox_link, #feature_slider .fcontent a.post-edit-link, .button, input[type=\"submit\"], input[type=\"button\"],input[type=\"reset\"], .submit{text-decoration:none;font-size:12px;line-height:12px;display:block;float:left;background:#eee;border:1px solid #d1d1d1;border-top:1px solid #e1e1e1;border-left:1px solid #e1e1e1;color:#333;text-shadow:#fff 0 1px 0;margin-right:.8em;}\na.pagelines-blink:hover, a.soapbox_link:hover, .button:hover, input[type=\"submit\"]:hover, .submit:hover{color:#777;}\na.pagelines-blink .pagelines-blink-pad, a.soapbox_link .soapbox_link-pad, #feature_slider .fcontent a.post-edit-link{display:block;padding:5px 7px;border:1px solid transparent;border-top:1px solid #fff;border-left:1px solid #fff;}\na.pagelines-blink .pagelines-blink-pad .blink-arrow, a.soapbox_link .soapbox_arrow{padding-right:9px;background:url(./images/more-black.png) no-repeat right center;}\ninput[type=\"submit\"], .submit, input[type=\"button\"], .button, input[type=\"reset\"], .reset{cursor:pointer;background:url(./images/button-grey-up.png) repeat-x left bottom;}\n.button:active, input[type=\"submit\"]:active, .submit:active{color:#000;border:1px solid #ddd;border-top:1px solid #bbb;border-left:1px solid #bbb;background:url(./images/button-grey-down.png) repeat-x left bottom;}\na.pagelines-blink.blue-blink, a.soapbox_link.soapbox_callout{background:#225E9B;border:1px solid #000;border-top:1px solid #2D7ED1;border-left:1px solid #2D7ED1;text-shadow:#000 0 -1px 0;color:#fff;}\na.pagelines-blink.blue-blink:hover, a.soapbox_link.soapbox_callout:hover{color:#eee;}\na.pagelines-blink.blue-blink .pagelines-blink-pad, a.soapbox_link.soapbox_callout .soapbox_link-pad{border-top:1px solid #2C7AC9;border-left:1px solid #2C7AC9;}\na.pagelines-blink.blue-blink .pagelines-blink-pad .blink-arrow, a.soapbox_link.soapbox_callout .soapbox_arrow{background:url(./images/more.png) no-repeat right center;}\na.pagelines-blink.black-blink, #feature_slider .fcontent a, #feature_slider .fcontent a.post-edit-link{background:#111;border:1px solid #000;border-top:1px solid #111;border-left:1px solid #111;color:#fff;text-shadow:none;}\na.pagelines-blink.black-blink:hover, #feature_slider .fcontent a:hover, #feature_slider .fcontent a.post-edit-link:hover{background:#333;border-bottom:1px solid #000;}\na.pagelines-blink.black-blink .pagelines-blink-pad, #feature_slider .fcontent a.post-edit-link{border-top:1px solid #444;border-left:1px solid #444;}\na.pagelines-blink.black-blink .pagelines-blink-pad .blink-arrow{background:url(./images/more.png) no-repeat right center;}\na.pagelines-blink.black-blink:active .pagelines-blink-pad , #feature_slider .fcontent a.post-edit-link:active{background:#000;border:1px solid #000;border-right:1px solid #444;border-bottom:1px solid #444;}\nh1, h2, h3, h4, h5, h6{font-weight:normal;margin:0;padding:0;line-height:1.2em;margin-bottom:.1em;}\nh1 em, h2 em, h3 em, h4 em, h5 em, h6 em, #nav em{text-transform:lowercase;font-style:italic;}\nh1, h1.pagetitle{font-size:2.5em;}\nh2{font-size:2.0em;}\nh3{font-size:1.5em;}\nh4{font-size:1.3em;}\nh5{font-size:1.1em;}\nh6{font-size:1em;}\n.subhead{margin-bottom:1.6em;font-size:.8em;}\nblockquote{margin:0 0 1em 1em;padding:1em 1em .5em;font-style:italic;}\n.comment blockquote{border:none;padding-right:10px;}\n.comment blockquote blockquote{margin-bottom:0;}\na{text-decoration:none;}\n.hentry a:hover{text-decoration:underline;}\n#subnav ul li a:active{text-decoration:none;}\n.post-edit-link{font-size:9px;}\n#site{position:relative;}\n#wrapper{padding-bottom:50px;}\n.content{width:960px;margin:0px auto 0;}\n#column-wrap, #container{float:left;}\n#sidebar-wrap{float:right;}\n.two-sidebar-left #column-wrap, .one-sidebar-left #column-wrap, .two-sidebar-left #buddypress-page #container, .one-sidebar-left #buddypress-page #container{float:right;}\n.two-sidebar-left #sidebar-wrap, .one-sidebar-left #sidebar-wrap{float:left;}\n.two-sidebar-left #column-main, .one-sidebar-left #column-main, .two-sidebar-left #buddypress-page #container, .one-sidebar-left #buddypress-page #container{float:right;}\n.two-sidebar-center #column-main{float:right;}\n.mcolumn-pad{padding-top:2em;}\n.two-sidebar-center #column-main .mcolumn-pad{padding-right:20px;padding-left:20px;}\n.fullwidth #column-main .mcolumn-pad{padding-right:15px;padding-left:15px;}\n.one-sidebar-right #column-main .mcolumn-pad, .one-sidebar-right #container #content, .two-sidebar-right #column-main .mcolumn-pad, .two-sidebar-right #container #content{padding:2em 30px 0 15px;}\n.one-sidebar-left #column-main .mcolumn-pad , .one-sidebar-left #container #content, .two-sidebar-left #column-main .mcolumn-pad , .two-sidebar-left #container #content{padding:2em 15px 0 30px;}\n#page-main .content{border-right:1px solid transparent;border-left:1px solid transparent;}\n#column-main{float:left;width:630px;display:inline;}\n#sidebar1, #sidebar2{float:left;overflow:hidden;}\n#header .outline{position:relative;zoom:1;z-index:15;}\n#branding .content{z-index:10;}\n#branding .content-pad{padding:25px 0px 25px 15px;}\n#branding .branding_wrap{position:relative;zoom:1;}\nh1 a{font-size:44px;line-height:.9;}\n.site-description{font-size:.85em;margin-left:.2em;}\na.site-title{display:block;margin:.3em 0 .15em;font-size:2.6em;line-height:1em;}\n.icons{text-align:right;position:absolute;bottom:15px;right:0px;line-height:20px;height:24px;}\n.icons a{display:block;width:22px;height:22px;margin-left:7px;float:right;text-align:right;}\n.icons .twitterlink{background:url(./images/sprite-socialicons.png) no-repeat -22px 0;}\n.icons .youtubelink{background:url(./images/sprite-socialicons.png) no-repeat -44px 0;}\n.icons .linkedinlink{background:url(./images/sprite-socialicons.png) no-repeat -66px 0;}\n.icons .facebooklink{background:url(./images/sprite-socialicons.png) no-repeat -88px 0;}\n.icons .rsslink{background:url(./images/sprite-socialicons.png) no-repeat 0 0;}\n.icons .twitterlink:hover{background-position:-22px -22px;}\n.icons .youtubelink:hover{background-position:-44px -22px;}\n.icons .linkedinlink:hover{background-position:-66px -22px;}\n.icons .facebooklink:hover{background-position:-88px -22px;}\n.icons .rsslink:hover{background-position:0px -22px;}\n.main_nav{line-height:1.1em;text-align:left;margin-top:0px;z-index:28;position:relative;}\n.main_nav .content-pad{padding-top:6px;}\n.main_nav ul{list-style:none;display:block;margin:0px 0px 0px 0px;padding:0px;float:left;}\n.main_nav li{position:relative;}\n.main_nav ul li{margin:0px 0px 0px 0px;padding:0px;float:left;text-align:right;}\n.main_nav li a{padding:10px 15px 10px;text-decoration:none;display:block;border:1px solid transparent;border-bottom:none;}\n.main-nav li a{font-size:.85em;}\n*html .main_nav li a{border-color:white;}\n.main_nav ul ul{display:none;}\n.main_nav ul ul li{text-align:left;}\n#secondnav{line-height:1.1;font-size:.7em;}\n#secondnav ul{line-height:.95em;list-style:none;margin:0;}\n#secondnav .secondnav_menu{margin:0 0 0 0px;}\n#secondnav ul li{float:left;}\n#secondnav li a{display:block;padding:10px 10px;border:none;}\nbody #wp-admin-bar #admin-bar-logo{line-height:1.4em;}\nbody.buddypress{border-top:none;padding-top:none;}\n#buddypress-page #container{margin:20px auto;float:left;}\n#buddypress-page #content{padding-right:30px;}\n#buddypress-page #object-nav{margin:0;margin-top:1em;padding:0;}\n#buddypress-page #item-nav{margin-bottom:1.5em;}\n#buddypress-page #object-nav ul li a{padding:3px 12px;display:block;}\n#buddypress-page #subnav{margin:0;margin-bottom:2.5em;padding:10px;}\n#buddypress-page #subnav a{font-size:12px;line-height:1.2em;padding:7px;display:block;}\n#buddypress-page #settings-form input{margin-bottom:1.3em;}\n#buddypress-page div.activity-comments form textarea, #buddypress-page form#whats-new-form #whats-new-textarea textarea{background:none;}\n#buddypress-page #container .submit{border:none;background:none;padding:7px 0px;margin:0px;}\n#buddypress-page #container .submit .auto{padding:5px;}\n#buddypress-page ul.button-nav{list-style-type:none;}\n#buddypress-page form.dir-form div.dir-search{width:47%;}\n#buddypress-page form.dir-form div.dir-search input[type=\"submit\"]{float:right;clear:right;padding:4px 4px;margin-right:5px;}\n#buddypress-page .profile-fields td{padding:5px;}\n#buddypress-page .radio ul{margin:5px 0 1em 50px;}\n#buddypress-page div.item-list-tabs ul li{margin:0 5px;}\n#buddypress-page table.forum{width:100%;margin:1.4em 0;text-align:center;}\n#buddypress-page table.forum th{padding:5px;font-weight:normal;}\n#buddypress-page table.forum td{padding:.5em;}\n#buddypress-page table.forum .td-poster .poster-name{display:inline;}\n#buddypress-page table.forum .td-poster img{vertical-align:middle;margin-right:5px;}\n#buddypress-page table.forum .td-title{font-size:1.3em;text-align:left;}\n#buddypress-page table.forum .td-title a:hover{text-decoration:underline;}\n#buddypress-page .standard-form #topic-meta h3{margin:1em 0;font-size:1.9em;}\n#buddypress-page .standard-form .admin-links{font-size:.8em;padding:4px 0;}\n#buddypress-page .item-list li{margin-bottom:1.5em;padding:.3em 0;}\n#buddypress-page .item-list .item-title{font-size:1.3em;}\n#buddypress-page .item-list .poster-meta{font-size:1.3em;font-style:italic;}\n#buddypress-page .item-list .poster-meta img{vertical-align:middle;margin-right:10px;}\n#buddypress-page .item-list .post-content{padding:20px 20px 10px;}\n#buddypress-page #item-actions{margin-bottom:1em;}\n#buddypress-page .activity{font-style:italic;font-size:.9em;}\n#buddypress-page .activity .activity-inner{font-style:normal;padding:10px 10px 2px;margin-bottom:1em;}\n.item-avatar{float:left;margin-right:10px;}\n.item-avatar a{padding:3px;display:block;}\n.item-avatar a img{display:block;}\n.searchform{position:relative;width:210px;margin:0 auto;margin-top:3px;}\n#header .searchform{float:right;}\n.searchform input{background:transparent;border:none;}\n.searchform .searchfield, #forumsidebar input.forumsearchfield{font-family:arial, \"Helvetica Neue\", Helvetica, sans-serif;font-size:13px;}\n.searchform .searchfield{height:13px;padding:7px 30px 5px 7px;width:170px;}\n.searchform input.submit{margin:0;padding:0;position:absolute;right:8px;top:4px;height:17px;width:17px;}\n.hentry{clear:both;}\n.hentry ul, .hentry ol, .comment-body ul, .comment-body ol{margin-left:25px;margin-bottom:1em;}\n.billboard{padding:60px 15px;margin:0 0 2.5em 0;}\n.fpost{margin-bottom:1.6em;}\n.fpost.sticky{padding:20px 0px 5px;}\n.fpost .post-excerpt, .fpost .entry_content{font-size:1.1em;line-height:1.6em;}\n.fpost .textcontent{margin:20px 10px 0 0;}\n.post.fpost .entry{margin-bottom:1em;padding:1em 0;}\n.post-meta{margin-bottom:1.5em;}\n.fpost .post-header{padding-top:3px;float:left;display:inline;}\n.fpost .post-header.post-nothumb{width:100%;}\n.fpost .post-title-section{position:relative;}\n.fpost .post-title h2{padding-bottom:0;font-size:2em;line-height:1em;margin:0;text-transform:none;}\n.fpost .post-title h2 a:hover{text-decoration:underline;}\n.post-comments a:hover{text-decoration:none;}\n.fpost .metabar{margin:0 0 .2em 0;}\n.metabar em{font-size:11px;font-style:normal;line-height:1.75em;}\n.metabar a:hover{text-decoration:none;}\n.metabar .sword{text-transform:lowercase;letter-spacing:0px;}\n.fpost .post-excerpt{margin:1em 0;}\n.post-thumb, .fpost .post-thumb a{float:left;}\n.fpost .post-thumb img{padding:4px;display:block;}\n#pagelines_content .clip, #buddypress-page .clip{width:47%;}\n#site.fullwidth #pagelines_content .clip, #site.fullwidth #buddypress-page .clip{width:48%;}\n.clip_box{margin-bottom:.5em;padding:1em 0;}\n.clip_box .hentry{padding:0;}\n.clip{width:100px;float:left;clear:none;}\n.clip-right{width:100px;float:right;}\n.clip .clip-header{padding:4px 0 4px 0;display:table-cell;width:10000px;}\n.clip .clip-thumb a{float:left;margin-right:10px;}\n.clip .clip-thumb img{padding:2px;display:block;margin:0 0 0.4em;}\n.clip .entry-title{line-height:1.2em;padding:0;font-size:1.4em;}\n.clip .metabar{line-height:1em;padding:0;}\n.clip .metabar em{font-size:11px;}\n.clip .post-excerpt{font-size:1em;line-height:1.5em;margin-bottom:1.5em;margin-top:.5em;}\n.post-nav, .current_posts_info{clear:both;padding:5px 10px;margin:0em 0 1.8em;font-size:12px;position:relative;}\n.post-nav a, .post-nav a:visited{text-decoration:none;}\n.post-nav a:hover{text-decoration:none;}\n.post-nav .previous a{float:left;display:block;padding-left:24px;background-image:url(./images/sprite-post-2.png);background-repeat:no-repeat;background-position:left -74px;}\n.post-nav .next a{float:right;display:block;padding-right:24px;text-align:right;background-image:url(./images/sprite-post-2.png);background-repeat:no-repeat;background-position:right -49px;}\n#postauthor{margin-bottom:2em;}\n#postauthor .copy-pad{padding:10px 15px;}\n#postauthor .subtext{font-size:.85em;}\n#postauthor .author-info{margin-left:120px;}\n.author-thumb{text-align:left;margin-left:-120px;}\n.author-thumb img{float:left;margin-right:25px;padding:5px;}\n.author-details{font-size:.9em;}\n.post-footer{line-height:25px;padding:8px 18px 8px;overflow:hidden;margin-bottom:30px;font-size:1em;}\n.post-footer a{font-weight:bold;}\n.post-footer .right img{vertical-align:top;}\n.post-footer .left span{font-weight:bold;font-size:14px;text-align:center;padding:4px 0 8px 0;width:33px;margin-right:6px;display:inline-block;line-height:21px;}\n.post-footer .right{padding:0px 0 0;}\n.post-footer .right span{line-height:21px;}\n.post-footer img{margin:0 0 0 2px;}\n.tags{font-style:italic;font-size:10px;}\n.scolumn-pad{padding:2em .7em;}\n#sidebar-wrap #sidebar_universal{padding:2em 1em 0 1em;}\nul.sidebar_widgets{list-style-type:none;}\n.widget{margin-bottom:1em;overflow:hidden;}\n.widget-title{text-align:left;padding:6px 8px 3px 0px;margin-bottom:.6em;font-size:.9em;}\n.widget-title a, h3.widget-title a{background:url(./images/morearrow.png) no-repeat 100% 50%;padding-right:10px;}\n.widget ul{margin:0 0 10px .4em;}\n.widget ul.sub-menu{margin:0px;}\n.widget ul li{list-style:none;display:block;padding:.3em 2px;}\n.widget ul li a:hover{text-decoration:underline;}\n.widget ul li ul li{margin-left:.3em;}\n.widget-default{padding:10px;margin-bottom:.7em;margin-top:.3em;}\n#grandchildnav.widget{padding:10px;margin-bottom:25px;}\n#grandchildnav li{padding:0;margin:0;line-height:1em;border-top:none;}\n#grandchildnav li a, #grandchildnav .current_page_item ul li a{display:block;padding:7px 5px;border:1px solid transparent;border-left:3px solid transparent;background:transparent;}\n#grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover{text-decoration:none;}\n#grandchildnav li ul{margin:0 0 0 25px;}\n.widget_search .widget-title{margin-bottom:10px;}\n.widget_categories .postform{margin:10px 10px;}\n.rss-date{display:block;font-size:.9em;line-height:1.2em;}\na.rsswidget img{position:relative;top:1px;}\n#sidebar #widgets{margin-bottom:1em;}\n.socialicons .widget-title, .widgetcform .widget-title{margin-bottom:8px;}\n.socialicons{margin-bottom:30px;}\n.textwidget{padding:5px 2px;}\n#footer .widget_twitter .twitter-item{padding-bottom:10px;}\n.twitter-item:nth-child(2n){font-weight:bolder;}\n.dcol{float:left;display:inline;}\n.dcol.lastcol .dcol-pad{padding-right:0;}\n.page-nav-default{padding:15px 0;}\n.page-nav-default .previous-entries{float:left;}\n.page-nav-default .next-entries{float:right;}\n#footer{clear:both;font-size:1em;overflow:hidden;text-align:left;position:relative;}\n#footer ul{padding:0 5px;}\n#footer li{list-style-type:none;}\n#footer li a:hover{text-decoration:underline;}\n#footer li h5 a{font-size:1em;}\n#footer .content-pad{padding:20px 0 1em;}\n#footer .widget-title{padding-left:0;border:0;margin-bottom:.6em;font-size:.85em;}\n#footer .findent{padding:0 5px 0 0;}\n#footer .latest_posts{padding:0;}\n#footer .latest_posts li{margin-bottom:.5em;}\n#footer .latest_posts li .list-excerpt{font-size:.9em;line-height:1.5em;}\n#fcolumns_container .socialicons{float:left;background:none;width:20%;border:none;}\n#fcolumns_container .socialicons .socialeffect{border:none;padding:1px 20px;}\n#fcolumns_container .socialicons span{font-size:17px;display:block;padding-bottom:26px;}\n.fcol{width:152px;float:left;display:inline;padding:0 20px;}\n.fcol ul ul{padding-left:10px;font-size:.9em;}\n#breadcrumbs{padding:10px 5px;}\n#breadcrumb .content-pad{padding:0 12px;}\n#breadcrumb .content{padding:5px 0px;font-size:.8em;}\n.breadcrumb a:hover{text-decoration:underline;}\n#simple_footer_nav #logo{float:left;padding-right:20px;}\n#simple_footer_nav #logo h1{font-size:2em;}\n#simple_footer_nav ul{float:left;margin:10px 10px 0 10px;}\n#simple_footer_nav ul li{float:left;}\n#footer #simple_footer_nav ul li a{padding:0 10px;}\n#simple_footer_nav .terms{float:right;margin-top:10px;}\n#respond{padding:20px 0px;}\n#respond form{margin-left:25px;}\nh3#comments-title{padding-left:22px;background:url(\"./images/sprite-post-2.png\") no-repeat 0 3px scroll transparent;}\n#respond h3{padding-left:25px;background:url(\"./images/sprite-post-2.png\") no-repeat 0px -22px scroll transparent;}\n#respond h3 small{font-size:12px;font-style:italic;}\n.commentlist .comment-meta{margin-bottom:16px;}\n.commentlist p{margin:0px 0 1em 5px;}\n.reply a{font-size:.8em;}\n#notfound, #previewing-posttypes{padding:100px;min-height:350px;}\nh2.notfound-splash{font-size:8em;}\nh2.notavail{margin-bottom:1.5em;}\n#cred{text-align:center;padding:15px;}\na.plimage{font-size:8px;text-align:center;}\n.pad_small{padding:8px;}\n.pad_big{padding:15px 20px;}\n.aligncenter{display:block;margin-left:auto;margin-right:auto;}\n.alignleft{float:left;}\n.alignright{float:right;}\n#calendar_wrap{overflow:hidden;padding:0;}\n#wp-calendar caption{padding:2px;font-size:12px;font-weight:normal;}\n#wp-calendar thead th{padding:2px;font-size:12px;}\n#callout{overflow:hidden;}\n#callout .content-pad{padding:30px 17px 30px;}\n#callout .callout_text{width:70%;float:left;}\n#callout .callout_text-pad{padding:0 10px;}\n#callout .callout_text.noimage{width:100%;}\n#callout .callout_head{font-size:2em;}\n#callout .callout_copy{font-size:.9em;}\n#callout .callout_image a{display:block;line-height:1em;}\n#callout .callout_image{float:right;width:30%;text-align:center;vertical-align:center;}\n.typekit-badge{display:none !important;}\n.ithumb, .iframe{padding:5px;}\n.fancybox span{font-size:.9em;display:block;}\n.content-pagination .cp-desc{font-style:italic;}\n.content-pagination a:hover{text-decoration:none;}\n.content-pagination .cp-num, .content-pagination a:hover .cp-num{margin:0 2px;text-decoration:none;display:inline-block;line-height:0.9em;padding:3px 7px 6px;}\ntable{width:100%;}\n.hentry table, #comments table{margin-bottom:1em;}\n.hentry table th, #comments table th{font-weight:normal;text-align:center;padding:.3em;font-size:1.1em;}\n.hentry table td, #comments table td{padding:.35em .6em;text-align:center;}\n.hentry table .label, #comments table .label{text-align:left;}\n.mediablock{overflow:hidden;overflow:visible;zoom:1;}\n.mediablock-image{float:left;margin-right:10px;}\n.iconlist .mediablock-image{padding-top:.4em;}\n.mediablock-content{display:table-cell;vertical-align:top;width:10000px;}\n.iconlist li{margin-bottom:.5em;}\n.ui-img-big{margin-right:15px;}\n.styled-list{list-style-type:none;}\n.wp-caption{text-align:center;padding:5px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;max-width:98%;margin-bottom:1em;}\n.wp-caption-text{font-size:11px;text-align:center;margin:0;padding:6px 3px 2px;line-height:16px;}\n.wp-caption-dd{font-size:11px;line-height:17px;padding:0 4px 5px;margin:0;}\n.wp-caption img{margin:0;padding:0;border:0 none;}\n.wp-caption-dd{font-size:11px;line-height:17px;padding:0 4px 5px;margin:0;}\n.alignright{}\n.alignleft{}\n.alignnone{}\n.aligncenter{}\n.avatar{}\n.wp-caption{}\n.wp-caption-text{}\n.gallery{}\n.gallery-caption{}\n.sticky{}\n.bypostauthor{}\n.wp-smiley{}\n" - }, - "redirectURL": "", - "headersSize": 354, - "bodySize": 7362 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 78, - "send": 0, - "wait": 79, - "receive": 140 - }, - "serverIPAddress": "173.245.61.106", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:57:59.665+03:00", - "time": 235, - "request": { - "method": "GET", - "url": "http://valid.host/wp-content/themes/platform/css/dynamic.css?ver=-050711220836", - "httpVersion": "HTTP/1.1", - "cookies": [ - { - "name": "__cfduid", - "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" - }, - { - "name": "__utma", - "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" - }, - { - "name": "__utmz", - "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" - }, - { - "name": "__utmv", - "value": "81600529.blog_team" - }, - { - "name": "wp-settings-1", - "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" - }, - { - "name": "wp-settings-time-1", - "value": "1312181035" - } - ], - "headers": [ - { - "name": "Host", - "value": "webperformance.ru" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/" - }, - { - "name": "Cookie", - "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" - } - ], - "queryString": [ - { - "name": "ver", - "value": "-050711220836" - } - ], - "headersSize": 741, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Server", - "value": "cloudflare-nginx" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 07:57:59 GMT" - }, - { - "name": "Content-Type", - "value": "text/css" - }, - { - "name": "Transfer-Encoding", - "value": "chunked" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Last-Modified", - "value": "Sat, 07 May 2011 22:08:36 GMT" - }, - { - "name": "Vary", - "value": "Accept-Encoding" - }, - { - "name": "Cache-Control", - "value": "public, max-age=31536000" - }, - { - "name": "CF-Cache-Status", - "value": "HIT" - }, - { - "name": "Expires", - "value": "Thu, 20 Sep 2012 07:57:59 GMT" - }, - { - "name": "Content-Encoding", - "value": "gzip" - } - ], - "content": { - "mimeType": "text/css", - "size": 11298, - "text": "/* PageLines Dynamic CSS - Copyright 2008 - 2011 */\n\n/* NOTE: Loaded inline because the 'inline dynamic css' option is activated. */\n\n/* Typography --------------- */\n\n/* Set Type */\nh1, h2, h3, h4, h5, h6, .site-title{font-family:Georgia, \"Times New Roman\", Times, serif;}\n\nbody, .font1, .font-primary, .commentlist{font-family:Georgia, \"Times New Roman\", Times, serif;}\n\n.font2, .font-sub, ul.main-nav li a, #secondnav li a, .metabar, .subtext, .subhead, .widget-title, .post-comments, .reply a, .editpage, #pagination .wp-pagenavi, .post-edit-link, #wp-calendar caption, #wp-calendar thead th, .soapbox-links a, .fancybox, .standard-form .admin-links, #featurenav a, .pagelines-blink, .ftitle small{font-family:\"Lucida Grande\", \"Lucida Sans\", \"Lucida Sans Unicode\", sans-serif;letter-spacing:0.10em;text-transform:uppercase;}\n\ninput[type=\"text\"], input[type=\"password\"], textarea, #dsq-content textarea{font-family:Courier, Verdana, sans-serif;}\n\n\n/* Dynamic Layout --------------- */\n\n.fixed_width #page, .fixed_width #footer, .canvas #page-canvas{width:980px}\n#page-main .content{width:962px}\n#site{min-width:962px}\n#site .content, .wcontent, #primary-nav ul.main-nav.nosearch{width:960px}\n#primary-nav ul.main-nav{width:740px}\n\n.fullwidth #pagelines_content #column-main, .fullwidth .wmain, .fullwidth #buddypress-page #container{width:960px}\n.fullwidth #pagelines_content #sidebar1, .fullwidth #buddypress-page #sidebar1{width:0px}\n.fullwidth #pagelines_content #sidebar2, .fullwidth #buddypress-page #sidebar2{width:0px}\n.fullwidth #pagelines_content #column-wrap, .fullwidth #buddypress-page #container{width:960px}\n.fullwidth #pagelines_content #sidebar-wrap, .fullwidth #buddypress-page #sidebar-wrap{width:0px}\n\n.one-sidebar-right #pagelines_content #column-main, .one-sidebar-right .wmain, .one-sidebar-right #buddypress-page #container{width:690px}\n.one-sidebar-right #pagelines_content #sidebar1, .one-sidebar-right #buddypress-page #sidebar1{width:250px}\n.one-sidebar-right #pagelines_content #sidebar2, .one-sidebar-right #buddypress-page #sidebar2{width:0px}\n.one-sidebar-right #pagelines_content #column-wrap, .one-sidebar-right #buddypress-page #container{width:690px}\n.one-sidebar-right #pagelines_content #sidebar-wrap, .one-sidebar-right #buddypress-page #sidebar-wrap{width:250px}\n\n.one-sidebar-left #pagelines_content #column-main, .one-sidebar-left .wmain, .one-sidebar-left #buddypress-page #container{width:700px}\n.one-sidebar-left #pagelines_content #sidebar1, .one-sidebar-left #buddypress-page #sidebar1{width:240px}\n.one-sidebar-left #pagelines_content #sidebar2, .one-sidebar-left #buddypress-page #sidebar2{width:0px}\n.one-sidebar-left #pagelines_content #column-wrap, .one-sidebar-left #buddypress-page #container{width:700px}\n.one-sidebar-left #pagelines_content #sidebar-wrap, .one-sidebar-left #buddypress-page #sidebar-wrap{width:240px}\n\n.two-sidebar-right #pagelines_content #column-main, .two-sidebar-right .wmain, .two-sidebar-right #buddypress-page #container{width:480px}\n.two-sidebar-right #pagelines_content #sidebar1, .two-sidebar-right #buddypress-page #sidebar1{width:240px}\n.two-sidebar-right #pagelines_content #sidebar2, .two-sidebar-right #buddypress-page #sidebar2{width:240px}\n.two-sidebar-right #pagelines_content #column-wrap, .two-sidebar-right #buddypress-page #container{width:480px}\n.two-sidebar-right #pagelines_content #sidebar-wrap, .two-sidebar-right #buddypress-page #sidebar-wrap{width:480px}\n\n.two-sidebar-left #pagelines_content #column-main, .two-sidebar-left .wmain, .two-sidebar-left #buddypress-page #container{width:480px}\n.two-sidebar-left #pagelines_content #sidebar1, .two-sidebar-left #buddypress-page #sidebar1{width:240px}\n.two-sidebar-left #pagelines_content #sidebar2, .two-sidebar-left #buddypress-page #sidebar2{width:240px}\n.two-sidebar-left #pagelines_content #column-wrap, .two-sidebar-left #buddypress-page #container{width:480px}\n.two-sidebar-left #pagelines_content #sidebar-wrap, .two-sidebar-left #buddypress-page #sidebar-wrap{width:480px}\n\n.two-sidebar-center #pagelines_content #column-main, .two-sidebar-center .wmain, .two-sidebar-center #buddypress-page #container{width:480px}\n.two-sidebar-center #pagelines_content #sidebar1, .two-sidebar-center #buddypress-page #sidebar1{width:240px}\n.two-sidebar-center #pagelines_content #sidebar2, .two-sidebar-center #buddypress-page #sidebar2{width:240px}\n.two-sidebar-center #pagelines_content #column-wrap, .two-sidebar-center #buddypress-page #container{width:720px}\n.two-sidebar-center #pagelines_content #sidebar-wrap, .two-sidebar-center #buddypress-page #sidebar-wrap{width:240px}\n\n/* Dynamic Grid --------------- */\n\n.dcol_container_2{width: 980px; float: right;}\n.dcol_2{width: 470px; margin-left: 20px;}\n\n.dcol_container_3{width: 980px; float: right;}\n.dcol_3{width: 306px; margin-left: 20px;}\n\n.dcol_container_4{width: 980px; float: right;}\n.dcol_4{width: 225px; margin-left: 20px;}\n\n.dcol_container_5{width: 980px; float: right;}\n.dcol_5{width: 176px; margin-left: 20px;}\n\n/* Options --------------- */\n\nbody, body.fixed_width{background-color:#000000;}\nbody #page, .sf-menu li, #primary-nav ul.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active, .commentlist ul.children .even, .alt #commentform textarea{background-color:#FFFFFF;}\n.canvas #page-canvas{background-color:#FFFFFF;}\nhr, .fpost, .clip_box, .widget-title, #buddypress-page .item-list li, .metabar a, #morefoot .widget-title, #site #dsq-content h3, .post.fpost .entry, #soapbox .fboxinfo, #primary-nav #nav_row, .fpost.sticky{border-color:#E9E9E9;}\nh1, h2, h3, h4, h5, h6, h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, a.site-title, .entry-title a, .entry-title a:hover, .widget-title a:hover, h3.widget-title a:hover{color:#000000;}\n#page, .tcolor1, #subnav ul li a:active, .commentlist cite a, #breadcrumb a, .metabar a:hover, .post-nav a:hover, .post-footer a, #buddypress-page #object-nav ul li a, #buddypress-page table.forum .td-title a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #twitterbar a, #carousel .carousel_text, #site #dsq-content .dsq-request-user-info td a, #pagination .wp-pagenavi a:hover, #pagination .wp-pagenavi .current, #primary-nav .main-nav li a:hover, #featurenav a.activeSlide, .content-pagination a:hover .cp-num{color:#000000;}\n.tcolor2, .lcolor2 a, .subhead, .widget-title, .post-edit-link, .metabar .sword, #branding .site-description, #callout, #commentform .required, #postauthor .subtext, #buddypress-page .standard-form .admin-links, #wp-calendar caption, #carousel .thecarousel, #pagination .wp-pagenavi span.pages, .commentlist .comment-meta a, #highlight .highlight-subhead, .content-pagination span, .content-pagination a .cp-num, .searchform .searchfield{color:#AFAFAF;}\n.tcolor3, .lcolor3 a, .main_nav li a, .widget-title a, h3.widget-title a, #subnav_row li a, .metabar em, .metabar a, .tags, #commentform label, .form-allowed-tags code, .rss-date, #breadcrumb, .reply a, .post-nav a, .post-nav a:visited, .post-footer, .auxilary a, #buddypress-page .standard-form .admin-links a, #twitterbar .content .tbubble, .widget ul.twitter .twitter-item, .cform .emailreqtxt,.cform .reqtxt, #pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .main_nav ul.sf-menu a, .sf-menu a:visited, #featurenav a, #feature-footer span.playpause{color:#777777;}\na, #subnav_row li.current_page_item a, #subnav_row li a:hover, #grandchildnav .current_page_item > a, .branding h1 a:hover, .post-comments a:hover, .bbcrumb a:hover, \t#feature_slider .fcontent.fstyle-lightbg a, #feature_slider .fcontent.fstyle-nobg a{color:#225E9B;}\na:hover,.commentlist cite a:hover, #grandchildnav .current_page_item a:hover, .headline h1 a:hover{color:#0F457C;}\n#feature-footer, .main-nav li.current-page-ancestor a, .main-nav li.current_page_item a, .main-nav li.current-page-ancestor ul a, .main-nav li.current_page_item ul a, #wp-calendar caption, #buddypress-page #subnav, #buddypress-page .activity .activity-inner, #buddypress-page table.forum th, #grandchildnav.widget, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, .commentlist .alt, #wp-calendar #today, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, .post-nav, .current_posts_info, .post-footer, #twitterbar, #carousel .content-pad, .success, .sf-menu li li, .sf-menu li li, .sf-menu li li li, .content-pagination a .cp-num, .hentry table .alternate td{background:#F7F7F7;}\nul.sf-menu ul li, .post-nav, .current_posts_info, .post-footer, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, .fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img, #carousel .content ul li a img, #carousel .content ul li a:hover img, #feature-footer{border-color:#E9E9E9;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border-left-color:#DDDDDD;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border-top-color:#DDDDDD;}\n#feature-footer .feature-footer-pad{border-left-color:#FFFFFF;}\n#feature-footer .feature-footer-pad{border-top-color:#FFFFFF;}\n#feature-footer, #grandchildnav li a, #grandchildnav .current_page_item ul li a, #buddypress-page #object-nav ul li a{ text-shadow:#FFFFFF 0 1px 0;}\n.main_nav .main-nav li a:hover, #wp-calendar thead th, #buddypress-page #object-nav, .item-avatar a, .comment blockquote, #grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover, #carousel .carousel_text, pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .sf-menu li:hover, .sf-menu li.sfHover, #featurenav a, #feature-footer span.playpause, .content-pagination .cp-num, .content-pagination a:hover .cp-num, ins{background:#F1F1F1;}\n#featurenav a, #feature-footer span.playpause{border-color:#DDDDDD;}\n#featurenav a, #feature-footer span.playpause{border-left-color:#CCCCCC;}\n#featurenav a, #feature-footer span.playpause{border-top-color:#CCCCCC;}\n#buddypress-page #object-nav ul li a:hover,#buddypress-page #object-nav ul li.selected a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #featurenav a.activeSlide{background:#E1E1E1;}\n#featurenav a.activeSlide{border-color:#CCCCCC;}\n#featurenav a.activeSlide{border-left-color:#999999;}\n#featurenav a.activeSlide{border-top-color:#999999;}\n#footer, #footer li.link-list a, #footer .latest_posts li .list-excerpt{color:#999999;}\n#footer a, #footer .widget-title, #footer li h5 a{color:#FFFFFF;}\n#footer, .fixed_width #footer{ text-shadow:#000000 0 -1px 0;}\n\n\n/* Custom CSS */\n\nbody{}\n\n\n\n/* Triggered By Page Load*/\n" - }, - "redirectURL": "", - "headersSize": 354, - "bodySize": 2531 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 78, - "send": 0, - "wait": 79, - "receive": 78 - }, - "serverIPAddress": "173.245.61.106", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:57:59.665+03:00", - "time": 235, - "request": { - "method": "GET", - "url": "http://valid.host/wp-content/plugins/headjs-loader/head.min.js", - "httpVersion": "HTTP/1.1", - "cookies": [ - { - "name": "__cfduid", - "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" - }, - { - "name": "__utma", - "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" - }, - { - "name": "__utmz", - "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" - }, - { - "name": "__utmv", - "value": "81600529.blog_team" - }, - { - "name": "wp-settings-1", - "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" - }, - { - "name": "wp-settings-time-1", - "value": "1312181035" - } - ], - "headers": [ - { - "name": "Host", - "value": "webperformance.ru" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "*/*" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/" - }, - { - "name": "Cookie", - "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" - } - ], - "queryString": [], - "headersSize": 710, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Server", - "value": "cloudflare-nginx" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 07:57:59 GMT" - }, - { - "name": "Content-Type", - "value": "application/javascript" - }, - { - "name": "Transfer-Encoding", - "value": "chunked" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Last-Modified", - "value": "Mon, 16 May 2011 07:55:37 GMT" - }, - { - "name": "Vary", - "value": "Accept-Encoding" - }, - { - "name": "Cache-Control", - "value": "public, max-age=31536000" - }, - { - "name": "CF-Cache-Status", - "value": "HIT" - }, - { - "name": "Expires", - "value": "Thu, 20 Sep 2012 07:57:59 GMT" - }, - { - "name": "Content-Encoding", - "value": "gzip" - } - ], - "content": { - "mimeType": "application/javascript", - "size": 5537, - "text": "/**\n\tHead JS\t\tThe only script in your \n\tCopyright\tTero Piirainen (tipiirai)\n\tLicense\t\tMIT / http://bit.ly/mit-license\n\tVersion\t\t0.8\n\t\n\thttp://headjs.com\n*/(function(a){var b=a.documentElement,c={screens:[320,480,640,768,1024,1280,1440,1680,1920],section:\"-section\",page:\"-page\",head:\"head\"},d=[];if(window.head_conf)for(var e in head_conf)head_conf[e]&&(c[e]=head_conf[e]);function f(a){d.push(a)}function g(a){var c=new RegExp(\"\\\\b\"+a+\"\\\\b\");b.className=b.className.replace(c,\"\")}function h(a,b){for(var c=0;c2&&this[d+1]!==undefined)d&&f(this.slice(1,d+1).join(\"-\")+c.section);else{var e=a||\"index\",g=e.indexOf(\".\");g>0&&(e=e.substring(0,g)),b.id=e+c.page,d||f(\"root\"+c.section)}});function l(){var a=window.outerWidth||b.clientWidth;b.className=b.className.replace(/ (w|lt)-\\d+/g,\"\"),f(\"w-\"+Math.round(a/100)*100),h(c.screens,function(b){a<=b&&f(\"lt-\"+b)}),i.feature()}l(),window.onresize=l,i.feature(\"js\",true).feature()})(document),function(){var a=document.createElement(\"i\"),b=a.style,c=\" -o- -moz- -ms- -webkit- -khtml- \".split(\" \"),d=\"Webkit Moz O ms Khtml\".split(\" \"),e=window.head_conf&&head_conf.head||\"head\",f=window[e];function g(a){for(var c in a)if(b[a[c]]!==undefined)return true}function h(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+\" \"+d.join(b+\" \")+b).split(\" \");return!!g(c)}var i={gradient:function(){var a=\"background-image:\",d=\"gradient(linear,left top,right bottom,from(#9f9),to(#fff));\",e=\"linear-gradient(left top,#eee,#fff);\";b.cssText=(a+c.join(d+a)+c.join(e+a)).slice(0,-a.length);return!!b.backgroundImage},rgba:function(){b.cssText=\"background-color:rgba(0,0,0,0.5)\";return!!b.backgroundColor},opacity:function(){return a.style.opacity===\"\"},textshadow:function(){return b.textShadow===\"\"},multiplebgs:function(){b.cssText=\"background:url(//:),url(//:),red url(//:)\";return(new RegExp(\"(url\\\\s*\\\\(.*?){3}\")).test(b.background)},boxshadow:function(){return h(\"boxShadow\")},borderimage:function(){return h(\"borderImage\")},borderradius:function(){return h(\"borderRadius\")},reflections:function(){return h(\"boxReflect\")},transforms:function(){return h(\"transform\")},transitions:function(){return h(\"transition\")}};for(var j in i)i[j]&&f.feature(j,i[j].call(),true);f.feature()}(),function(a){var b=a.documentElement,c=navigator.userAgent.toLowerCase().indexOf(\"msie\")!=-1,d=false,e=[],f={},g={},h=a.createElement(\"script\").async===true||\"MozAppearance\"in a.documentElement.style||window.opera;var i=window.head_conf&&head_conf.head||\"head\",j=window[i]=window[i]||function(){j.ready.apply(null,arguments)};var k=0,l=1,m=2,n=3;h?j.js=function(){var a=arguments,b=a[a.length-1],c=[];r(b)||(b=null),q(a,function(d,e){d!=b&&(d=p(d),c.push(d),v(d,b&&e==a.length-2?function(){s(c)&&b()}:null))});return j}:j.js=function(){var a=arguments,b=[].slice.call(a,1),c=b[0];if(!d){e.push(function(){j.js.apply(null,a)});return j}c?(q(b,function(a){r(a)||u(p(a))}),v(p(a[0]),r(c)?c:function(){j.js.apply(null,b)})):v(p(a[0]));return j},j.ready=function(a,b){r(a)&&(b=a,a=\"ALL\");var c=g[a];if(c&&c.state==n||a==\"ALL\"&&s()){b();return j}var d=f[a];d?d.push(b):d=f[a]=[b];return j};function o(a){var b=a.split(\"/\"),c=b[b.length-1],d=c.indexOf(\"?\");return d!=-1?c.substring(0,d):c}function p(a){var b;if(typeof a==\"object\")for(var c in a)a[c]&&(b={name:c,url:a[c]});else b={name:o(a),url:a};var d=g[b.name];if(d)return d;for(var e in g)if(g[e].url==b.url)return g[e];g[b.name]=b;return b}function q(a,b){if(a){typeof a==\"object\"&&(a=[].slice.call(a));for(var c=0;c\").appendTo(\"body\"),d=b.css(\"display\");b.remove();if(d===\"none\"||d===\"\"){ck||(ck=c.createElement(\"iframe\"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write(\"\");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,\"display\"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!==\"*\"?a+\".\":\"\")+b.replace(A,\"`\").replace(B,\"&\")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,\"events\");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type===\"click\")){a.namespace&&(n=new RegExp(\"(^|\\\\.)\"+a.namespace.split(\".\").join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+\"defer\",g=c+\"queue\",h=c+\"mark\",i=f.data(a,e,b,!0);i&&(d===\"queue\"||!f.data(a,g,b,!0))&&(d===\"mark\"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!==\"toJSON\")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(j,\"$1-$2\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/\\d/,n=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,o=/^[\\],:{}\\s]*$/,p=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,r=/(?:^|:|,)(?:\\s*\\[)+/g,s=/(webkit)[ \\/]([\\w.]+)/,t=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,u=/(msie) ([\\w.]+)/,v=/(mozilla)(?:.*? rv:([\\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.6.1\",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),\"slice\",D.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").unbind(\"ready\")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",z,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",z),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a&&typeof a==\"object\"&&\"setInterval\"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,\"constructor\")&&!B.call(a.constructor.prototype,\"isPrototypeOf\"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,\"@\").replace(q,\"]\").replace(r,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,\"text/xml\")):(c=new ActiveXObject(\"Microsoft.XMLDOM\"),c.async=\"false\",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName===\"parsererror\")&&e.error(\"Invalid XML: \"+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
      a\",d=a.getElementsByTagName(\"*\"),e=a.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};f=c.createElement(\"select\"),g=f.appendChild(c.createElement(\"option\")),h=a.getElementsByTagName(\"input\")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName(\"tbody\").length,htmlSerialize:!!a.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value===\"on\",optSelected:g.selected,getSetAttribute:a.className!==\"t\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent(\"onclick\",function b(){j.noCloneEvent=!1,a.detachEvent(\"onclick\",b)}),a.cloneNode(!0).fireEvent(\"onclick\")),h=c.createElement(\"input\"),h.value=\"t\",h.setAttribute(\"type\",\"radio\"),j.radioValue=h.value===\"t\",h.setAttribute(\"checked\",\"checked\"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML=\"\",a.style.width=a.style.paddingLeft=\"1px\",l=c.createElement(\"body\"),m={visibility:\"hidden\",width:0,height:0,border:0,margin:0,background:\"none\"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,\"zoom\"in a.style&&(a.style.display=\"inline\",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display=\"\",a.innerHTML=\"
      \",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML=\"
      t
      \",n=a.getElementsByTagName(\"td\"),r=n[0].offsetHeight===0,n[0].style.display=\"\",n[1].style.display=\"none\",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML=\"\",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement(\"div\"),i.style.width=\"0\",i.style.marginRight=\"0\",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML=\"\",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p=\"on\"+q,r=p in a,r||(a.setAttribute(p,\"return;\"),r=typeof a[p]==\"function\"),j[q+\"Bubbles\"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\\{.*\\}|\\[.*\\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c==\"string\",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c===\"events\"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a==\"undefined\"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&\"get\"in c&&(d=c.get(e,\"value\"))!==b)return d;return(e.value||\"\").replace(p,\"\")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type===\"select-one\";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:\"tabIndex\"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!(\"getAttribute\"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!=\"boolean\"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,\"form\")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&\"set\"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,\"\"+d);return d}if(i&&\"get\"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,\"\"),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabIndex\");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&\"set\"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&\"get\"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,\"button\"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,\"button\"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==\"\"?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})})),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\\./g,B=/ /g,C=/[^\\w\\s.|`]/g,D=function(a){return a.replace(C,\"\\\\$&\")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(\" \");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(\".\")>-1?(n=l.split(\".\"),l=n.shift(),h.namespace=n.slice(0).sort().join(\".\")):(n=[],h.namespace=\"\"),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent(\"on\"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c==\"string\"&&c.charAt(0)===\".\"){c=c||\"\";for(h in t)f.event.remove(a,h+c);return}c=c.split(\" \");while(h=c[k++]){r=h,q=null,l=h.indexOf(\".\")<0,m=[],l||(m=h.split(\".\"),h=m.shift(),n=new RegExp(\"(^|\\\\.)\"+f.map(m.slice(0).sort(),D).join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join(\".\"),c.namespace_re=new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem\n)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(\":\")<0?\"on\"+h:\"\";do{var m=f._data(k,\"handle\");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,\"events\")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join(\"-\"):\"\":f.nodeName(a,\"select\")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,\"_change_data\"),g=J(d),(c.type!==\"focusout\"||d.type!==\"radio\")&&f._data(d,\"_change_data\",g);if(e===b||g===e)return;if(e!=null||g)c.type=\"change\",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,\"input\")?b.type:\"\";(c===\"radio\"||c===\"checkbox\"||f.nodeName(b,\"select\"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,\"input\")?b.type:\"\";(a.keyCode===13&&!f.nodeName(b,\"textarea\")||a.keyCode===32&&(c===\"checkbox\"||c===\"radio\")||c===\"select-multiple\")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,\"_change_data\",J(b))}},setup:function(a,b){if(this.type===\"file\")return!1;for(var c in I)f.event.add(this,c+\".specialChange\",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,\".specialChange\");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each([\"bind\",\"one\"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a==\"object\"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c===\"one\"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a===\"unload\"&&c!==\"one\")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\\\/g,j=/\\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(\"\"),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]===\"~\"||x[0]===\"+\")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r=\"\",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)===\"[object Array]\")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,\"\")},TAG:function(a,b){return a[1].replace(i,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,\"\");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(i,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||k.getText([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return\"\\\\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+l.match[o].source.replace(/\\\\(\\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var f=a.length;c\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(l.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"

      \";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var m=e,n=e.getAttribute(\"id\"),o=n||d,q=e.parentNode,r=/^\\s*[+~]/.test(b);n?o=o.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll(\"[id='\"+o+\"'] \"+b),f)}catch(s){}finally{n||m.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"
      \";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;l.order.splice(1,0,\"CLASS\"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var v=function(a,b){var c,d=[],e=\"\",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,\"\");a=l.relative[a]?a+\"*\":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a||typeof a==\"string\")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\\d+=\"(?:\\d+|null)\"/g,Z=/^\\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,_=/<([\\w:]+)/,ba=/\",\"\"],legend:[1,\"
      \",\"
      \"],thead:[1,\"\",\"
      \"],tr:[2,\"\",\"
      \"],td:[3,\"\",\"
      \"],col:[2,\"\",\"
      \"],area:[1,\"\",\"\"],_default:[0,\"\",\"\"]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div
      \",\"
      \"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!=\"object\"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,\"\"):null;if(typeof a==\"string\"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace($,\"<$1>\");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||\nb[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k==\"number\"&&(k+=\"\");if(!k)continue;if(typeof k==\"string\")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,\"<$1>\");var l=(_.exec(k)||[\"\",\"\"])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement(\"div\");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l===\"table\"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===\"\"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],\"tbody\")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)==\"number\")for(i=0;i=0)return b+\"px\"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?\"\":\"alpha(opacity=\"+b*100+\")\",g=d&&d.filter||c.filter||\"\";c.filter=bo.test(g)?g.replace(bo,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:\"inline-block\"},function(){b?c=bz(a,\"margin-right\",\"marginRight\"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,\"-$1\").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b===\"fontSize\"?\"1em\":d||0,d=f.pixelLeft+\"px\",f.left=c,e&&(a.runtimeStyle.left=e));return d===\"\"?\"auto\":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\\[\\]$/,bG=/\\r?\\n/g,bH=/#.*$/,bI=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\\-storage|.+\\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\\/\\//,bN=/\\?/,bO=/)<[^<]*)*<\\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\\s+/,bR=/([?&])_=[^&]*/,bS=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement(\"a\"),bW.href=\"\",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"
      \").append(c.replace(bO,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,\"\\r\\n\")}}):{name:b.name,value:c.replace(bG,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":\"*/*\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=x;if(y=v.getResponseHeader(\"Etag\"))f.etag[k]=y}if(a===304)c=\"notmodified\",o=!0;else try{r=cb(d,w),c=\"success\",o=!0}catch(z){c=\"parsererror\",u=z}}else{u=c;if(!c||a)c=\"error\",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bH,\"\").replace(bM,bX[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bX[3]||(bX[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?\"&\":\"?\")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,\"$1_=\"+x);d.url=y+(y===d.url?(bN.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", */*; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join(\"&\").replace(bE,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cc++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=b.contentType===\"application/x-www-form-urlencoded\"&&typeof b.data==\"string\";if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,co,cp=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu(\"show\",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){d.style[\"overflow\"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
      \";f.extend(b.style,{position:\"absolute\",top:0,left:0,margin:0,border:0,width:\"1px\",height:\"1px\",visibility:\"hidden\"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position=\"fixed\",e.style.top=\"20px\",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top=\"\",d.style.overflow=\"hidden\",d.style.position=\"relative\",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each([\"Left\",\"Top\"],function(a,c){var d=\"scroll\"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?\"pageXOffset\"in g?g[a?\"pageYOffset\":\"pageXOffset\"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each([\"Height\",\"Width\"],function(a,c){var d=c.toLowerCase();f.fn[\"inner\"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,\"padding\")):null},f.fn[\"outer\"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?\"margin\":\"border\")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement[\"client\"+c];return e.document.compatMode===\"CSS1Compat\"&&g||e.document.body[\"client\"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement[\"client\"+c],e.body[\"scroll\"+c],e.documentElement[\"scroll\"+c],e.body[\"offset\"+c],e.documentElement[\"offset\"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a==\"string\"?a:a+\"px\")}}),a.jQuery=a.$=f})(window);" - }, - "redirectURL": "", - "headersSize": 394, - "bodySize": 31988 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 63, - "send": 0, - "wait": 47, - "receive": 62 - }, - "serverIPAddress": "74.125.39.95", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:58:00.150+03:00", - "time": 125, - "request": { - "method": "GET", - "url": "http://www.google-analytics.com/ga.js", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Host", - "value": "www.google-analytics.com" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "*/*" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/" - } - ], - "queryString": [], - "headersSize": 322, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Content-Length", - "value": "12570" - }, - { - "name": "Content-Encoding", - "value": "gzip" - }, - { - "name": "Last-Modified", - "value": "Tue, 20 Sep 2011 20:00:43 GMT" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 06:57:21 GMT" - }, - { - "name": "Expires", - "value": "Wed, 21 Sep 2011 08:57:21 GMT" - }, - { - "name": "Content-Type", - "value": "text/javascript" - }, - { - "name": "Vary", - "value": "Accept-Encoding" - }, - { - "name": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "name": "Cache-Control", - "value": "max-age=7200, public" - }, - { - "name": "Age", - "value": "3638" - }, - { - "name": "Server", - "value": "GFE/2.0" - } - ], - "content": { - "mimeType": "text/javascript", - "size": 31737, - "text": "(function(){var g=void 0,h=null,aa=encodeURIComponent,ba=decodeURIComponent,j=Math;function ca(a,b){return a.name=b}var k=\"push\",da=\"slice\",ea=\"replace\",fa=\"load\",l=\"charAt\",ga=\"value\",n=\"indexOf\",ha=\"match\",o=\"name\",ia=\"host\",r=\"toString\",s=\"length\",t=\"prototype\",u=\"split\",v=\"stopPropagation\",ja=\"scope\",w=\"location\",x=\"getString\",y=\"substring\",la=\"navigator\",A=\"join\",B=\"toLowerCase\",C;function ma(a,b){switch(b){case 0:return\"\"+a;case 1:return a*1;case 2:return!!a;case 3:return a*1E3}return a}function D(a){return g==a||\"-\"==a||\"\"==a}function na(a){if(!a||\"\"==a)return\"\";for(;a&&\" \\n\\r\\t\"[n](a[l](0))>-1;)a=a[y](1);for(;a&&\" \\n\\r\\t\"[n](a[l](a[s]-1))>-1;)a=a[y](0,a[s]-1);return a}function oa(a){var b=1,c=0,d;if(!D(a)){b=0;for(d=a[s]-1;d>=0;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=c!=0?b^c>>21:b}return b}function pa(){return j.round(j.random()*2147483647)}\nfunction qa(){}function E(a,b){return aa instanceof Function?b?encodeURI(a):aa(a):(F(68),escape(a))}function G(a){a=a[u](\"+\")[A](\" \");if(ba instanceof Function)try{return ba(a)}catch(b){F(17)}else F(68);return unescape(a)}var ra=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent(\"on\"+b,c)},sa=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,!!d):a.detachEvent&&a.detachEvent(\"on\"+b,c)};function H(a){return a&&a[s]>0?a[0]:\"\"}\nfunction ta(a){var b=a?a[s]:0;return b>0?a[b-1]:\"\"}var ua=function(){this.prefix=\"ga.\";this.F={}};ua[t].set=function(a,b){this.F[this.prefix+a]=b};ua[t].get=function(a){return this.F[this.prefix+a]};ua[t].contains=function(a){return this.get(a)!==g};function va(a){a[n](\"www.\")==0&&(a=a[y](4));return a[B]()}function wa(a,b){var c,d={url:a,protocol:\"http\",host:\"\",path:\"\",c:new ua,anchor:\"\"};if(!a)return d;c=a[n](\"://\");if(c>=0)d.protocol=a[y](0,c),a=a[y](c+3);c=a.search(\"/|\\\\?|#\");if(c>=0)d.host=a[y](0,c)[B](),a=a[y](c);else return d.host=a[B](),d;c=a[n](\"#\");if(c>=0)d.anchor=a[y](c+1),a=a[y](0,c);c=a[n](\"?\");c>=0&&(xa(d.c,a[y](c+1)),a=a[y](0,c));d.anchor&&b&&xa(d.c,d.anchor);a&&a[l](0)==\"/\"&&(a=a[y](1));d.path=a;return d}\nfunction xa(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b)[k](c)}for(var d=na(b)[u](\"&\"),e=0;e=1||(a=[\"utmt=error\",\"type=\"+a,\"utmwv=5.1.7\",\"utmn=\"+pa(),\"utmsp=1\"],b&&a[k](\"api=\"+b),c&&a[k](\"msg=\"+E(c[y](0,100))),J.p&&a[k](\"aip=1\"),Aa(a[A](\"&\")))};var Ba=0;function K(a){return(a?\"_\":\"\")+Ba++}\nvar Ca=K(),Da=K(),Ea=K(),Fa=K(),Ga=K(),L=K(),M=K(),Ha=K(),Ia=K(),Ja=K(),Ka=K(),La=K(),Ma=K(),Na=K(),Oa=K(),Pa=K(),Qa=K(),Ra=K(),Sa=K(),Ta=K(),Ua=K(),Va=K(),Wa=K(),Xa=K(),Ya=K(),Za=K(),$a=K(),ab=K(),bb=K(),cb=K(),db=K(),eb=K(),fb=K(),gb=K(),hb=K(),N=K(!0),ib=K(),jb=K(),kb=K(),lb=K(),mb=K(),nb=K(),ob=K(),pb=K(),qb=K(),rb=K(),O=K(!0),sb=K(!0),tb=K(!0),ub=K(!0),wb=K(!0),xb=K(!0),yb=K(!0),zb=K(!0),Ab=K(!0),Bb=K(!0),Cb=K(!0),P=K(!0),Db=K(!0),Eb=K(!0),Fb=K(!0),Gb=K(!0),Hb=K(!0),Ib=K(!0),Jb=K(!0),Kb=K(!0),\nLb=K(!0),Mb=K(!0),Nb=K(!0),Ob=K(!0),Pb=K(!0),Qb=K(),Rb=K();K();var Sb=K(),Tb=K(),Ub=K(),Vb=K(),Wb=K(),Xb=K(),$b=K(),ac=K(),bc=K();K();var cc=K(),dc=K();var ec=function(){function a(a,c,d){Q(R[t],a,c,d)}S(\"_getName\",Ea,58);S(\"_getAccount\",Ca,64);S(\"_visitCode\",O,54);S(\"_getClientInfo\",Na,53,1);S(\"_getDetectTitle\",Qa,56,1);S(\"_getDetectFlash\",Oa,65,1);S(\"_getLocalGifPath\",$a,57);S(\"_getServiceMode\",ab,59);T(\"_setClientInfo\",Na,66,2);T(\"_setAccount\",Ca,3);T(\"_setNamespace\",Da,48);T(\"_setAllowLinker\",Ka,11,2);T(\"_setDetectFlash\",Oa,61,2);T(\"_setDetectTitle\",Qa,62,2);T(\"_setLocalGifPath\",$a,46,0);T(\"_setLocalServerMode\",ab,92,g,0);T(\"_setRemoteServerMode\",\nab,63,g,1);T(\"_setLocalRemoteServerMode\",ab,47,g,2);T(\"_setSampleRate\",Za,45,1);T(\"_setCampaignTrack\",Pa,36,2);T(\"_setAllowAnchor\",La,7,2);T(\"_setCampNameKey\",Sa,41);T(\"_setCampContentKey\",Xa,38);T(\"_setCampIdKey\",Ra,39);T(\"_setCampMediumKey\",Va,40);T(\"_setCampNOKey\",Ya,42);T(\"_setCampSourceKey\",Ua,43);T(\"_setCampTermKey\",Wa,44);T(\"_setCampCIdKey\",Ta,37);T(\"_setCookiePath\",M,9,0);T(\"_setMaxCustomVariables\",bb,0,1);T(\"_setVisitorCookieTimeout\",Ha,28,1);T(\"_setSessionCookieTimeout\",Ia,26,1);T(\"_setCampaignCookieTimeout\",\nJa,29,1);T(\"_setReferrerOverride\",kb,49);a(\"_trackPageview\",R[t].ka,1);a(\"_trackEvent\",R[t].u,4);a(\"_trackSocial\",R[t].la,104);a(\"_trackPageLoadTime\",R[t].ja,100);a(\"_trackTrans\",R[t].ma,18);a(\"_sendXEvent\",R[t].t,78);a(\"_createEventTracker\",R[t].S,74);a(\"_getVersion\",R[t].X,60);a(\"_setDomainName\",R[t].s,6);a(\"_setAllowHash\",R[t].ba,8);a(\"_getLinkerUrl\",R[t].W,52);a(\"_link\",R[t].link,101);a(\"_linkByPost\",R[t].aa,102);a(\"_setTrans\",R[t].ea,20);a(\"_addTrans\",R[t].L,21);a(\"_addItem\",R[t].J,19);a(\"_setTransactionDelim\",\nR[t].fa,82);a(\"_setCustomVar\",R[t].ca,10);a(\"_deleteCustomVar\",R[t].U,35);a(\"_getVisitorCustomVar\",R[t].Y,50);a(\"_setXKey\",R[t].ha,83);a(\"_setXValue\",R[t].ia,84);a(\"_getXKey\",R[t].Z,76);a(\"_getXValue\",R[t].$,77);a(\"_clearXKey\",R[t].P,72);a(\"_clearXValue\",R[t].Q,73);a(\"_createXObj\",R[t].T,75);a(\"_addIgnoredOrganic\",R[t].H,15);a(\"_clearIgnoredOrganic\",R[t].M,97);a(\"_addIgnoredRef\",R[t].I,31);a(\"_clearIgnoredRef\",R[t].N,32);a(\"_addOrganic\",R[t].K,14);a(\"_clearOrganic\",R[t].O,70);a(\"_cookiePathCopy\",\nR[t].R,30);a(\"_get\",R[t].V,106);a(\"_set\",R[t].da,107);a(\"_addEventListener\",R[t].addEventListener,108);a(\"_removeEventListener\",R[t].removeEventListener,109);a(\"_initData\",R[t].l,2);a(\"_setVar\",R[t].ga,22);T(\"_setSessionTimeout\",Ia,27,3);T(\"_setCookieTimeout\",Ja,25,3);T(\"_setCookiePersistence\",Ha,24,1);a(\"_setAutoTrackOutbound\",qa,79);a(\"_setTrackOutboundSubdomains\",qa,81);a(\"_setHrefExamineLimit\",qa,80)},Q=function(a,b,c,d){a[b]=function(){try{return F(d),c.apply(this,arguments)}catch(a){throw za(\"exc\",\nb,a&&a[o]),a;}}},S=function(a,b,c,d){R[t][a]=function(){try{return F(c),ma(this.a.get(b),d)}catch(e){throw za(\"exc\",a,e&&e[o]),e;}}},T=function(a,b,c,d,e){R[t][a]=function(f){try{F(c),e==g?this.a.set(b,ma(f,d)):this.a.set(b,e)}catch(i){throw za(\"exc\",a,i&&i[o]),i;}}},fc=function(a,b){return{type:b,target:a,stopPropagation:function(){throw\"aborted\";}}};var gc=function(a,b){return b!==\"/\"?!1:(a[n](\"www.google.\")==0||a[n](\".google.\")==0||a[n](\"google.\")==0)&&!(a[n](\"google.org\")>-1)?!0:!1},hc=function(a){var b=a.get(Ga),c=a[x](M,\"/\");gc(b,c)&&a[v]()};var lc=function(){var a={},b={},c=new ic;this.g=function(a,b){c.add(a,b)};var d=new ic;this.d=function(a,b){d.add(a,b)};var e=!1,f=!1,i=!0;this.G=function(){e=!0};this.f=function(a){this[fa]();this.set(Qb,a,!0);e=!1;d.execute(this);e=!0;b={};this.i()};this.load=function(){e&&(e=!1,this.na(),jc(this),f||(f=!0,c.execute(this),kc(this),jc(this)),e=!0)};this.i=function(){if(e)if(f)e=!1,kc(this),e=!0;else this[fa]()};this.get=function(c){c&&c[l](0)==\"_\"&&this[fa]();return b[c]!==g?b[c]:a[c]};this.set=\nfunction(c,d,e){c&&c[l](0)==\"_\"&&this[fa]();e?b[c]=d:a[c]=d;c&&c[l](0)==\"_\"&&this.i()};this.m=function(b){a[b]=this.b(b,0)+1};this.b=function(a,b){var c=this.get(a);return c==g||c===\"\"?b:c*1};this.getString=function(a,b){var c=this.get(a);return c==g?b:c+\"\"};this.na=function(){if(i){var b=this[x](Ga,\"\"),c=this[x](M,\"/\");gc(b,c)||(a[L]=a[Ma]&&b!=\"\"?oa(b):1,i=!1)}}};lc[t].stopPropagation=function(){throw\"aborted\";};function mc(a,b){for(var b=b||[],c=0;c=0&&d>0&&e>0&&f>0&&b>=0))return F(110),!1;a.set(O,c);a.set(wb,d);a.set(xb,e);a.set(yb,f);a.set(zb,b);return!0},pc=function(a){var b=a.get(O),c=a.get(wb),d=a.get(xb),e=a.get(yb),f=a.b(zb,1);b==g?F(113):b==NaN&&F(114);b>=0&&c>0&&d>0&&e>0&&f>=0||F(115);return[a.b(L,1),b!=g?b:\"-\",c||\"-\",d||\"-\",e||\"-\",f][A](\".\")},qc=function(a){return[a.b(L,1),a.b(Cb,0),a.b(P,1),\na.b(Db,0)][A](\".\")},rc=function(a,b,c){var c=c?\"\":a[x](L,\"1\"),d=b[u](\".\");if(d[s]!==4||nc(d[0],c))d=h;a.set(Cb,d?d[1]*1:0);a.set(P,d?d[2]*1:10);a.set(Db,d?d[3]*1:a.get(Fa));return d!=h||!nc(b,c)},sc=function(a,b){var c=E(a[x](tb,\"\")),d=[],e=a.get(N);if(!b&&e){for(var f=0;f0&&(c+=\"|\"+d[A](\",\"))}return c?a.b(L,1)+\".\"+c:h},tc=function(a,b,c){c=c?\"\":a[x](L,\"1\");b=b[u](\".\");if(b[s]<2||nc(b[0],c))return!1;b=b[da](1)[A](\".\")[u](\"|\");\nb[s]>0&&a.set(tb,G(b[0]));if(b[s]<=1)return!0;for(var c=b[1][u](b[1][n](\",\")==-1?\"^\":\",\"),d=0;d=0&&F(125);return!0},vc=function(a,b){var c=uc(a,b);return c?[a.b(L,1),a.b(Eb,0),a.b(Fb,1),a.b(Gb,1),c][A](\".\"):\"\"},uc=function(a){function b(b,e){if(!D(a.get(b))){var f=a[x](b,\"\"),f=f[u](\" \")[A](\"%20\"),f=f[u](\"+\")[A](\"%20\");c[k](e+\"=\"+f)}}var c=[];b(Ib,\"utmcid\");b(Mb,\"utmcsr\");b(Kb,\n\"utmgclid\");b(Lb,\"utmdclid\");b(Jb,\"utmccn\");b(Nb,\"utmcmd\");b(Ob,\"utmctr\");b(Pb,\"utmcct\");return c[A](\"|\")},xc=function(a,b,c){c=c?\"\":a[x](L,\"1\");b=b[u](\".\");if(b[s]<5||nc(b[0],c))return a.set(Eb,g),a.set(Fb,g),a.set(Gb,g),a.set(Ib,g),a.set(Jb,g),a.set(Mb,g),a.set(Nb,g),a.set(Ob,g),a.set(Pb,g),a.set(Kb,g),a.set(Lb,g),!1;a.set(Eb,b[1]*1);a.set(Fb,b[2]*1);a.set(Gb,b[3]*1);wc(a,b[da](4)[A](\".\"));return!0},wc=function(a,b){function c(a){return(a=b[ha](a+\"=(.*?)(?:\\\\|utm|$)\"))&&a[s]==2?a[1]:g}function d(b,\nc){c&&(c=e?G(c):c[u](\"%20\")[A](\" \"),a.set(b,c))}b[n](\"=\")==-1&&(b=G(b));var e=c(\"utmcvr\")==\"2\";d(Ib,c(\"utmcid\"));d(Jb,c(\"utmccn\"));d(Mb,c(\"utmcsr\"));d(Nb,c(\"utmcmd\"));d(Ob,c(\"utmctr\"));d(Pb,c(\"utmcct\"));d(Kb,c(\"utmgclid\"));d(Lb,c(\"utmdclid\"))},nc=function(a,b){return b?a!=b:!/^\\d+$/.test(a)};var ic=function(){this.r=[]};ic[t].add=function(a,b){this.r[k]({name:a,xa:b})};ic[t].execute=function(a){try{for(var b=0;b=a.get(Za)*100&&a[v]()}function zc(a){Ac()&&a[v]()}function Bc(a){I[w].protocol==\"file:\"&&a[v]()}function Cc(a){a.get(jb)||a.set(jb,I.title,!0);a.get(ib)||a.set(ib,I[w].pathname+I[w].search,!0)};var Dc=new function(){var a=[];this.set=function(b){a[b]=!0};this.ya=function(){for(var b=[],c=0;c=0){b=b[ea](/\\n|\\r/g,\" \");f=0;for(var i=b[s];f2E3&&(b=b[y](0,\n2E3),F(69));a=a+\"=\"+b+\"; path=\"+c+\"; \";e&&(a+=\"expires=\"+(new Date((new Date).getTime()+e)).toGMTString()+\"; \");d&&(a+=\"domain=\"+d+\";\");I.cookie=a}};var Fc,Gc,Hc=function(){if(!Fc){var a={},b=U[la],c=U.screen;a.D=c?c.width+\"x\"+c.height:\"-\";a.C=c?c.colorDepth+\"-bit\":\"-\";a.language=(b&&(b.language||b.browserLanguage)||\"-\")[B]();a.javaEnabled=b&&b.javaEnabled()?1:0;a.characterSet=I.characterSet||I.charset||\"-\";Fc=a}},Ic=function(){Hc();for(var a=Fc,b=U[la],a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.D+a.C+(I.cookie?I.cookie:\"\")+(I.referrer?I.referrer:\"\"),b=a[s],c=U.history[s];c>0;)a+=c--^b++;return oa(a)},Jc=function(a){Hc();\nvar b=Fc;a.set(mb,b.D);a.set(nb,b.C);a.set(qb,b.language);a.set(rb,b.characterSet);a.set(ob,b.javaEnabled);if(a.get(Na)&&a.get(Oa)){if(!(b=Gc)){var c,d,e;d=\"ShockwaveFlash\";if((b=(b=U[la])?b.plugins:g)&&b[s]>0)for(c=0;c-1&&(e=d.description[u](\"Shockwave Flash \")[1]);else{d=d+\".\"+d;try{c=new ActiveXObject(d+\".7\"),e=c.GetVariable(\"$version\")}catch(f){}if(!e)try{c=new ActiveXObject(d+\".6\"),e=\"WIN 6,0,21,0\",c.AllowScriptAccess=\"always\",e=c.GetVariable(\"$version\")}catch(i){}if(!e)try{c=\nnew ActiveXObject(d),e=c.GetVariable(\"$version\")}catch(m){}e&&(e=e[u](\" \")[1][u](\",\"),e=e[0]+\".\"+e[1]+\" r\"+e[2])}b=e?e:\"-\"}Gc=b;a.set(pb,Gc)}else a.set(pb,\"-\")};var X=function(){Q(X[t],\"push\",X[t][k],5);Q(X[t],\"_createAsyncTracker\",X[t].va,33);Q(X[t],\"_getAsyncTracker\",X[t].wa,34);this.q=0};X[t].va=function(a,b){return J.k(a,b||\"\")};X[t].wa=function(a){return J.o(a)};X[t].push=function(a){this.q>0&&F(105);this.q++;for(var b=arguments,c=0,d=0;d0&&(e=f[y](0,i),f=f[y](i+1));var m=e==\"_gat\"?J:e==\"_gaq\"?Kc:J.o(e);m[f].apply(m,b[d][da](1))}}catch(p){c++}this.q--;return c};var Nc=function(){function a(a,b,c,d){g==f[a]&&(f[a]={});g==f[a][b]&&(f[a][b]=[]);f[a][b][c]=d}function b(a,b,c){if(g!=f[a]&&g!=f[a][b])return f[a][b][c]}function c(a,b){if(g!=f[a]&&g!=f[a][b]){f[a][b]=g;var c=!0,d;for(d=0;d0)&&(W(\"__utmd\",\"1\",a[x](M,\"/\"),a[x](Ga,\"\"),1E4),V(\"__utmd\")[s]==0&&a[v]())};var Yc=function(a){a.get(O)==g?Wc(a):a.get(ub)&&!a.get(cc)?Wc(a):a.get(Bb)&&Xc(a)},Zc=function(a){a.get(Hb)&&!a.get(Ab)&&(Xc(a),a.set(Fb,a.get(zb)))},Wc=function(a){var b=a.get(Fa);a.set(sb,!0);a.set(O,pa()^Ic(a)&2147483647);a.set(tb,\"\");a.set(wb,b);a.set(xb,b);a.set(yb,b);a.set(zb,1);a.set(Ab,!0);a.set(Cb,0);a.set(P,10);a.set(Db,b);a.set(N,[]);a.set(ub,!1);a.set(Bb,!1)},Xc=function(a){a.set(xb,a.get(yb));a.set(yb,a.get(Fa));a.m(zb);a.set(Ab,!0);a.set(Cb,0);a.set(P,10);a.set(Db,a.get(Fa));a.set(Bb,\n!1)};var $c=\"daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:q,lycos:query,ask:q,netscape:query,cnn:query,about:terms,mamma:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,ozu:q,terra:query,rambler:query\".split(\",\"),fd=function(a){if(a.get(Pa)&&!a.get(cc)){for(var b=!D(a.get(Ib))||!D(a.get(Mb))||!D(a.get(Kb))||!D(a.get(Lb)),c={},d=0;d=0)||c&&c[ia][n](\"google\")>-1&&c.c.contains(\"q\")&&c.path==\"cse\")return!1;if((b=gd(a,c))&&!b[2])return dd(a,g,b[0],g,g,\"(organic)\",\"organic\",b[1],g),!0;\nelse if(b)return!1;if(a.get(Ab))a:{for(var b=a.get(eb),d=va(c[ia]),e=0;e-1){a=!1;break a}dd(a,g,d,g,g,\"(referral)\",\"referral\",g,\"/\"+c.path);a=!0}else a=!1;return a},gd=function(a,b){for(var c=a.get(cb),d=0;d-1){var f=H(b.c.get(e[1]));if(f&&(!e[3]||b.url[n](e[3])>-1)){a:{for(var c=f,d=a.get(db),c=G(c)[B](),i=0;i0&&d==c}var e=!1;if(d(Kb)||d(Lb))e=!0;for(var f=0;f0&&(c=b[y](e),b=b[y](0,e)),f<0?b+\"?\"+d+c:b+\"&\"+d+c)};var md=\"|\",od=function(a,b,c,d,e,f,i,m,p){var q=nd(a,b);q||(q={},a.get(fb)[k](q));q.id_=b;q.affiliation_=c;q.total_=d;q.tax_=e;q.shipping_=f;q.city_=i;q.state_=m;q.country_=p;q.items_=q.items_||[];return q},pd=function(a,b,c,d,e,f,i){var a=nd(a,b)||od(a,b,\"\",0,0,0,\"\",\"\",\"\"),m;a:{if(a&&a.items_){m=a.items_;for(var p=0;p=a.b(bc,0))return!1;var c=sd();c==g&&(c=td());if(c==g||c==Infinity||isNaN(c))return!1;c>0?b(ud(c)):ra(U,\"load\",function(){vd(a,b)},!1);return!0},ud=function(a){var b=new Nc,c=j.min(j.floor(a/100),5E3);b.e(14,1,c>0?c+\"00\":\"0\");b.j(14,1,a);return b},sd=function(){var a=U.performance||U.webkitPerformance;return(a=a&&a.timing)&&a.loadEventStart-a.fetchStart},td=function(){if(U.top==U){var a=U.external,b=a&&a.onloadT;a&&!a.isValidLoadTime&&(b=g);b>2147483648&&(b=g);\nb>0&&a.setPageReadyTime();return b}};var R=function(a,b,c){function d(a){return function(b){if((b=b.get(dc)[a])&&b[s])for(var c=fc(e,a),d=0;d-1?(F(13),this.set(ib,a,!0)):typeof a===\"object\"&&a!==h&&this.oa(a);this.a.f(\"page\")};C.u=function(a,b,c,d,e){if(a==\"\"||!Lc(a)||b==\"\"||!Lc(b))return!1;if(c!=g&&!Lc(c))return!1;if(d!=g&&!Mc(d))return!1;this.set(Tb,a,!0);this.set(Ub,b,!0);this.set(Vb,c,!0);this.set(Wb,d,!0);this.set(Sb,!!e,!0);this.a.f(\"event\");return!0};\nC.la=function(a,b,c,d){if(!a||!b)return!1;this.set(Xb,a,!0);this.set($b,b,!0);this.set(ac,c||I[w].href,!0);d&&this.set(ib,d,!0);this.a.f(\"social\");return!0};C.ja=function(){var a=this;return vd(this.a,function(b){a.t(b)})};C.ma=function(){this.a.f(\"trans\")};C.t=function(a){this.set(hb,a,!0);this.a.f(\"event\")};C.S=function(a){this.l();var b=this;return{_trackEvent:function(c,d,e){F(91);b.u(a,c,d,e)}}};C.V=function(a){return this.get(a)};\nC.da=function(a,b){if(a)if(a!=g&&(a.constructor+\"\")[n](\"String\")>-1)this.set(a,b);else if(typeof a==\"object\")for(var c in a)a.hasOwnProperty(c)&&this.set(c,a[c])};C.addEventListener=function(a,b){var c=this.get(dc)[a];c&&c[k](b)};C.removeEventListener=function(a,b){for(var c=this.get(dc)[a],d=0;c&&de.get(bb))a=!1;else if(!b||!c||E(b)[s]+E(c)[s]>64)a=!1;else{d!=1&&d!=2&&(d=3);var f={};ca(f,b);f.value=c;f.scope=d;e.get(N)[a]=f;a=!0}a&&this.a.i();return a};C.U=function(a){this.a.get(N)[a]=g;this.a.i()};C.Y=function(a){return(a=this.a.get(N)[a])&&a[ja]==1?a[ga]:g};C.ha=function(a,b,c){this.h().e(a,b,c)};C.ia=function(a,b,c){this.h().j(a,b,c)};C.Z=function(a,b){return this.h().getKey(a,b)};\nC.$=function(a,b){return this.h().z(a,b)};C.P=function(a){this.h().v(a)};C.Q=function(a){this.h().w(a)};C.T=function(){return new Nc};C.H=function(a){a&&this.get(db)[k](a[B]())};C.M=function(){this.set(db,[])};C.I=function(a){a&&this.get(eb)[k](a[B]())};C.N=function(){this.set(eb,[])};C.K=function(a,b,c,d,e){if(a&&b){a=[a,b[B]()][A](\":\");if(d||e)a=[a,d,e][A](\":\");d=this.get(cb);d.splice(c?0:d[s],0,a)}};C.O=function(){this.set(cb,[])};\nC.R=function(a){this.a[fa]();var b=this.get(M),c=kd(this.a);this.set(M,a);this.a.i();jd(this.a,c);this.set(M,b)};C.l=function(){this.a[fa]()};C.ga=function(a){a&&a!=\"\"&&(this.set(tb,a),this.a.f(\"var\"))};var wd=function(a){a.get(Qb)!==\"trans\"&&a.b(Cb,0)>=500&&a[v]();if(a.get(Qb)===\"event\"){var b=(new Date).getTime(),c=a.b(Db,0),d=a.b(yb,0),c=j.floor(0.2*((b-(c!=d?c:c*1E3))/1E3));c>0&&(a.set(Db,b),a.set(P,j.min(10,a.b(P,0)+c)));a.b(P,0)<=0&&a[v]()}},yd=function(a){a.get(Qb)===\"event\"&&a.set(P,j.max(0,a.b(P,10)-1))};var zd=function(){var a=[];this.add=function(b,c,d){d&&(c=E(\"\"+c));a[k](b+\"=\"+c)};this.toString=function(){return a[A](\"&\")}},Ad=function(a,b){(b||a.get(ab)!=2)&&a.m(Cb)},Bd=function(a,b){b.add(\"utmwv\",\"5.1.7\");b.add(\"utms\",a.get(Cb));b.add(\"utmn\",pa());var c=I[w].hostname;D(c)||b.add(\"utmhn\",c,!0);c=a.get(Za);c!=100&&b.add(\"utmsp\",c,!0)},Dd=function(a,b){b.add(\"utmac\",a.get(Ca));a.get(Sb)&&b.add(\"utmni\",1);Cd(a,b);J.p&&b.add(\"aip\",1);b.add(\"utmu\",Dc.ya())},Cd=function(a,b){function c(a,b){b&&d[k](a+\n\"=\"+b+\";\")}var d=[];c(\"__utma\",pc(a));c(\"__utmz\",vc(a,!1));c(\"__utmv\",sc(a,!0));c(\"__utmx\",kd(a));b.add(\"utmcc\",d[A](\"+\"),!0)},Ed=function(a,b){a.get(Na)&&(b.add(\"utmcs\",a.get(rb),!0),b.add(\"utmsr\",a.get(mb)),b.add(\"utmsc\",a.get(nb)),b.add(\"utmul\",a.get(qb)),b.add(\"utmje\",a.get(ob)),b.add(\"utmfl\",a.get(pb),!0))},Fd=function(a,b){a.get(Qa)&&a.get(jb)&&b.add(\"utmdt\",a.get(jb),!0);b.add(\"utmhid\",a.get(lb));b.add(\"utmr\",ya(a.get(kb),a.get(M)),!0);b.add(\"utmp\",E(a.get(ib),!0),!0)},Gd=function(a,b){for(var c=\na.get(gb),d=a.get(hb),e=a.get(N)||[],f=0;f=0&&![].reduce)throw new Md(a[s]);Od(a,b)||Pd(a,b)}else throw new Ld(a[s]);},Nd=function(a,b,c){var c=c||Kd+\"/__utm.gif?\",d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=h;\nb()}},Od=function(a,b){var c,d=Kd+\"/p/__utm.gif\",e=U.XDomainRequest;if(e)c=new e,c.open(\"POST\",d);else if(e=U.XMLHttpRequest)e=new e,\"withCredentials\"in e&&(c=e,c.open(\"POST\",d,!0),c.setRequestHeader(\"Content-Type\",\"text/plain\"));if(c)return c.onreadystatechange=function(){c.readyState==4&&(b(),c=h)},c.send(a),!0},Pd=function(a,b){if(I.body){a=aa(a);try{var c=I.createElement('')}catch(d){c=I.createElement(\"iframe\"),ca(c,a)}c.height=\"0\";c.width=\"0\";c.style.display=\"none\";\nc.style.visibility=\"hidden\";var e=I[w],e=Kd+\"/u/post_iframe.html#\"+aa(e.protocol+\"//\"+e[ia]+\"/favicon.ico\"),f=function(){c.src=\"\";c.parentNode&&c.parentNode.removeChild(c)};ra(U,\"beforeunload\",f);var i=!1,m=0,p=function(){if(!i){try{if(m>9||c.contentWindow[w][ia]==I[w][ia]){i=!0;f();sa(U,\"beforeunload\",f);b();return}}catch(a){}m++;setTimeout(p,200)}};ra(c,\"load\",p);I.body.appendChild(c);c.src=e}else Ec(function(){Pd(a,b)},100)};var $=function(){this.p=!1;this.A={};this.B=[];this.ra=0;this._gasoCPath=this._gasoDomain=g;Q($[t],\"_createTracker\",$[t].k,55);Q($[t],\"_getTracker\",$[t].ta,0);Q($[t],\"_getTrackerByName\",$[t].o,51);Q($[t],\"_getTrackers\",$[t].ua,130);Q($[t],\"_anonymizeIp\",$[t].sa,16);ec()};C=$[t];C.ta=function(a,b){return this.k(a,g,b)};C.k=function(a,b,c){b&&F(23);c&&F(67);b==g&&(b=\"~\"+J.ra++);a=new R(b,a,c);J.A[b]=a;J.B[k](a);return a};C.o=function(a){a=a||\"\";return J.A[a]||J.k(g,a)};C.ua=function(){return J.B[da](0)};\nC.sa=function(){this.p=!0};var Qd=function(a){if(I.webkitVisibilityState==\"prerender\")return!1;a();return!0};var J=new $;var Rd=U._gat;Rd&&typeof Rd._getTracker==\"function\"?J=Rd:U._gat=J;var Kc=new X;(function(a){if(!Qd(a)){F(123);var b=!1,c=function(){!b&&Qd(a)&&(F(124),b=!0,sa(I,\"webkitvisibilitychange\",c))};ra(I,\"webkitvisibilitychange\",c)}})(function(){var a=U._gaq,b=!1;if(a&&typeof a[k]==\"function\"&&(b=Object[t][r].call(Object(a))==\"[object Array]\",!b)){Kc=a;return}U._gaq=Kc;b&&Kc[k].apply(Kc,a)});})();\n" - }, - "redirectURL": "", - "headersSize": 341, - "bodySize": 12570 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 62, - "send": 0, - "wait": 63, - "receive": 0 - }, - "serverIPAddress": "209.85.148.101", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:58:00.259+03:00", - "time": 235, - "request": { - "method": "GET", - "url": "http://valid.host/wp-content/themes/platform/images/sprite-socialicons.png", - "httpVersion": "HTTP/1.1", - "cookies": [ - { - "name": "__cfduid", - "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" - }, - { - "name": "__utma", - "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" - }, - { - "name": "__utmz", - "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" - }, - { - "name": "__utmv", - "value": "81600529.blog_team" - }, - { - "name": "wp-settings-1", - "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" - }, - { - "name": "wp-settings-time-1", - "value": "1312181035" - } - ], - "headers": [ - { - "name": "Host", - "value": "webperformance.ru" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "image/png,image/*;q=0.8,*/*;q=0.5" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/wp-content/themes/platform/style.css" - }, - { - "name": "Cookie", - "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" - } - ], - "queryString": [], - "headersSize": 788, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Server", - "value": "cloudflare-nginx" - }, - { - "name": "Date", - "value": "Wed, 21 Sep 2011 07:57:59 GMT" - }, - { - "name": "Content-Type", - "value": "image/png" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Last-Modified", - "value": "Thu, 14 Apr 2011 19:46:19 GMT" - }, - { - "name": "Cache-Control", - "value": "public, max-age=31536000" - }, - { - "name": "Content-Length", - "value": "14980" - }, - { - "name": "CF-Cache-Status", - "value": "HIT" - }, - { - "name": "Vary", - "value": "Accept-Encoding" - }, - { - "name": "Expires", - "value": "Thu, 20 Sep 2012 07:57:59 GMT" - } - ], - "content": { - "mimeType": "image/png", - "size": 14980 - }, - "redirectURL": "", - "headersSize": 326, - "bodySize": 14980 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 0, - "send": 0, - "wait": 78, - "receive": 157 - }, - "serverIPAddress": "173.245.61.106", - "connection": "80" - }, - { - "pageref": "validfile", - "startedDateTime": "2011-09-21T10:58:00.806+03:00", - "time": 63, - "request": { - "method": "GET", - "url": "http://www.google-analytics.com/__utm.gif?utmwv=5.1.7&utms=1&utmn=1042196436&utmhn=webperformance.ru&utmcs=UTF-8&utmsr=1280x1024&utmsc=24-bit&utmul=en-us&utmje=1&utmfl=10.3%20r183&utmdt=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%B8%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%20%7C%20Web%20Performance&utmhid=1465352691&utmr=-&utmp=%2F&utmac=UA-23339380-1&utmcc=__utma%3D81600529.1101727785.1311945788.1316176689.1316591880.5%3B%2B__utmz%3D81600529.1311945788.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B%2B__utmv%3D81600529.blog_team%3B&utmu=q~", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Host", - "value": "www.google-analytics.com" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" - }, - { - "name": "Accept", - "value": "image/png,image/*;q=0.8,*/*;q=0.5" - }, - { - "name": "Accept-Language", - "value": "en-us,en;q=0.5" - }, - { - "name": "Accept-Encoding", - "value": "gzip, deflate" - }, - { - "name": "Accept-Charset", - "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" - }, - { - "name": "Connection", - "value": "keep-alive" - }, - { - "name": "Referer", - "value": "http://valid.host/" - } - ], - "queryString": [ - { - "name": "utmac", - "value": "UA-23339380-1" - }, - { - "name": "utmcc", - "value": "__utma=81600529.1101727785.1311945788.1316176689.1316591880.5;+__utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);+__utmv=81600529.blog_team;" - }, - { - "name": "utmcs", - "value": "UTF-8" - }, - { - "name": "utmdt", - "value": "Оптимизация производительности и времени загрузки сайтов | Web Performance" - }, - { - "name": "utmfl", - "value": "10.3 r183" - }, - { - "name": "utmhid", - "value": "1465352691" - }, - { - "name": "utmhn", - "value": "webperformance.ru" - }, - { - "name": "utmje", - "value": "1" - }, - { - "name": "utmn", - "value": "1042196436" - }, - { - "name": "utmp", - "value": "/" - }, - { - "name": "utmr", - "value": "-" - }, - { - "name": "utms", - "value": "1" - }, - { - "name": "utmsc", - "value": "24-bit" - }, - { - "name": "utmsr", - "value": "1280x1024" - }, - { - "name": "utmu", - "value": "q~" - }, - { - "name": "utmul", - "value": "en-us" - }, - { - "name": "utmwv", - "value": "5.1.7" - } - ], - "headersSize": 1110, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { - "name": "Date", - "value": "Wed, 14 Sep 2011 09:27:28 GMT" - }, - { - "name": "Content-Length", - "value": "35" - }, - { - "name": "Pragma", - "value": "no-cache" - }, - { - "name": "Expires", - "value": "Wed, 19 Apr 2000 11:43:00 GMT" - }, - { - "name": "Last-Modified", - "value": "Wed, 21 Jan 2004 19:51:30 GMT" - }, - { - "name": "Content-Type", - "value": "image/gif" - }, - { - "name": "Cache-Control", - "value": "private, no-cache, no-cache=Set-Cookie, proxy-revalidate" - }, - { - "name": "Server", - "value": "GFE/2.0" - } - ], - "content": { - "mimeType": "image/gif", - "size": 35 - }, - "redirectURL": "", - "headersSize": 295, - "bodySize": 35 - }, - "cache": {}, - "timings": { - "blocked": 0, - "dns": 0, - "connect": 0, - "send": 0, - "wait": 63, - "receive": 0 - }, - "serverIPAddress": "209.85.148.101", - "connection": "80" - } - ] - } -} \ No newline at end of file diff --git a/harstorage/tests/functional/testdata/validfile.svg b/harstorage/tests/functional/testdata/validfile.svg deleted file mode 100644 index 1d60635..0000000 --- a/harstorage/tests/functional/testdata/validfile.svg +++ /dev/null @@ -1 +0,0 @@ -Performance TrendsFull Load TimeTotal RequestsTotal SizePage Speed Score2011-12-0814:35:402011-12-0817:36:372011-12-0817:36:462011-12-0818:07:112011-12-0818:07:512011-12-0911:20:222011-12-0912:42:182011-12-1214:42:59051015202530Full Load Time02.557.51012.515Total Requests0100200300400500600Total Size (kB)0100255075125150Page Speed Score \ No newline at end of file diff --git a/harstorage/tests/test_models.py b/harstorage/tests/test_models.py deleted file mode 100644 index e69de29..0000000 diff --git a/harstorage/websetup.py b/harstorage/websetup.py deleted file mode 100644 index cd7caf9..0000000 --- a/harstorage/websetup.py +++ /dev/null @@ -1,15 +0,0 @@ -import logging - -import pylons.test - -from harstorage.config.environment import load_environment - -log = logging.getLogger(__name__) - - -def setup_app(command, conf, vars): - """harstorage setup""" - - # Don't reload the app if it was loaded under the testing environment - if not pylons.test.pylonsapp: - load_environment(conf.global_conf, conf.local_conf) From 567cdc27c715fd13ad472a25433e91979b455ea8 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:30:03 -0700 Subject: [PATCH 03/88] Updated with commands for a local start of harstorage with a production.ini config --- ops/scripts/startHarStorage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ops/scripts/startHarStorage.sh b/ops/scripts/startHarStorage.sh index 49dc685..a12e2e8 100755 --- a/ops/scripts/startHarStorage.sh +++ b/ops/scripts/startHarStorage.sh @@ -1,4 +1,4 @@ #!/bin/sh mongod --dbpath ~/opt/mongodb/data & -paster serve production.ini & +paster serve ../production.ini & From 10673edc3714da1b9b1c35d4936408bbfcfea721 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:33:36 -0700 Subject: [PATCH 04/88] Reverted 3ea29052c071d85e499ddfb0f0184972a621ee62 --- harstorage/__init__.py | 0 harstorage/config/__init__.py | 0 harstorage/config/deployment.ini_tmpl | 59 + harstorage/config/environment.py | 44 + harstorage/config/middleware.py | 49 + harstorage/config/routing.py | 21 + harstorage/controllers/__init__.py | 0 harstorage/controllers/chart.py | 90 + harstorage/controllers/combine.py | 60 + harstorage/controllers/error.py | 28 + harstorage/controllers/migration.py | 68 + harstorage/controllers/results.py | 475 +++++ harstorage/controllers/superposed.py | 224 ++ harstorage/lib/HAR.py | 487 +++++ harstorage/lib/Math.py | 226 ++ harstorage/lib/MongoHandler.py | 57 + harstorage/lib/__init__.py | 0 harstorage/lib/app_globals.py | 18 + harstorage/lib/base.py | 22 + harstorage/lib/helpers.py | 10 + harstorage/public/favicon.ico | Bin 0 -> 1150 bytes harstorage/public/images/add_button.png | Bin 0 -> 1284 bytes harstorage/public/images/help_button.png | Bin 0 -> 1109 bytes harstorage/public/images/pylons.png | Bin 0 -> 1098 bytes harstorage/public/images/remove_button.png | Bin 0 -> 1073 bytes harstorage/public/scripts/LAB.min.js | 5 + harstorage/public/scripts/chosen.jquery.js | 796 +++++++ .../scripts/datatables/ColReorder.min.js | 34 + .../scripts/datatables/TableTools.min.js | 78 + .../datatables/jquery.dataTables.min.js | 151 ++ harstorage/public/scripts/harstorage.js | 1220 +++++++++++ .../public/scripts/harviewer/core/trace.js | 26 + .../scripts/harviewer/domplate/domplate.js | 263 +++ .../public/scripts/harviewer/harPreview.js | 1 + .../public/scripts/harviewer/require.js | 1 + .../public/scripts/highcharts/exporting.js | 22 + .../public/scripts/highcharts/highcharts.js | 199 ++ .../public/scripts/highcharts/themes.js | 436 ++++ harstorage/public/scripts/jquery-1.7.min.js | 4 + harstorage/public/scripts/preferences.js | 156 ++ harstorage/public/scripts/spin.js | 325 +++ harstorage/public/scripts/tabber.js | 476 +++++ .../public/styles/chosen/chosen-sprite.png | Bin 0 -> 742 bytes harstorage/public/styles/chosen/chosen.css | 245 +++ .../public/styles/datatables/ColReorder.css | 21 + .../styles/datatables/TableTools_JUI.css | 182 ++ .../styles/datatables/images/insert.png | Bin 0 -> 1885 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../datatables/jquery-ui-1.8.4.custom.css | 572 +++++ .../public/styles/datatables/table_jui.css | 448 ++++ .../public/styles/harviewer/harPreview.css | 1 + .../harviewer/images/contextMenuTarget.png | Bin 0 -> 142 bytes .../images/contextMenuTargetHover.png | Bin 0 -> 148 bytes .../images/menu/previewMenuHandle.png | Bin 0 -> 219 bytes .../harviewer/images/menu/shadowAlpha.png | Bin 0 -> 3403 bytes .../harviewer/images/menu/tabMenuCheckbox.png | Bin 0 -> 220 bytes .../styles/harviewer/images/tabEnabled.png | Bin 0 -> 142 bytes .../harviewer/images/timeline-sprites.png | Bin 0 -> 559 bytes .../harviewer/images/twisty-sprites.png | Bin 0 -> 278 bytes harstorage/public/styles/main-ie.css | 12 + harstorage/public/styles/main.css | 444 ++++ harstorage/public/styles/tabber.css | 86 + harstorage/public/swf/copy_cvs_xls.swf | Bin 0 -> 2131 bytes harstorage/templates/common/dochead.html | 17 + harstorage/templates/common/footer.html | 10 + harstorage/templates/common/header.html | 28 + harstorage/templates/create/core.html | 59 + harstorage/templates/create/jsloader.html | 13 + harstorage/templates/details/core.html | 89 + harstorage/templates/details/dochead.html | 20 + harstorage/templates/details/jsloader.html | 26 + harstorage/templates/display/core.html | 33 + harstorage/templates/display/dochead.html | 20 + harstorage/templates/display/jsloader.html | 47 + harstorage/templates/display/modules.html | 28 + harstorage/templates/error.html | 10 + harstorage/templates/harviewer.html | 13 + harstorage/templates/histogram/core.html | 23 + harstorage/templates/histogram/dochead.html | 18 + harstorage/templates/histogram/jsloader.html | 18 + harstorage/templates/home/core.html | 51 + harstorage/templates/home/dochead.html | 18 + harstorage/templates/home/jsloader.html | 23 + harstorage/templates/migration.html | 14 + harstorage/templates/upload.html | 10 + harstorage/tests/__init__.py | 35 + harstorage/tests/functional/__init__.py | 0 harstorage/tests/functional/test_chart.py | 37 + harstorage/tests/functional/test_combine.py | 41 + harstorage/tests/functional/test_migration.py | 7 + harstorage/tests/functional/test_results.py | 279 +++ .../tests/functional/test_superposed.py | 175 ++ .../tests/functional/testdata/validfile.har | 1866 +++++++++++++++++ .../tests/functional/testdata/validfile.svg | 1 + harstorage/tests/test_models.py | 0 harstorage/websetup.py | 15 + 108 files changed, 11186 insertions(+) create mode 100644 harstorage/__init__.py create mode 100644 harstorage/config/__init__.py create mode 100644 harstorage/config/deployment.ini_tmpl create mode 100644 harstorage/config/environment.py create mode 100644 harstorage/config/middleware.py create mode 100644 harstorage/config/routing.py create mode 100644 harstorage/controllers/__init__.py create mode 100644 harstorage/controllers/chart.py create mode 100644 harstorage/controllers/combine.py create mode 100644 harstorage/controllers/error.py create mode 100644 harstorage/controllers/migration.py create mode 100644 harstorage/controllers/results.py create mode 100644 harstorage/controllers/superposed.py create mode 100644 harstorage/lib/HAR.py create mode 100644 harstorage/lib/Math.py create mode 100644 harstorage/lib/MongoHandler.py create mode 100644 harstorage/lib/__init__.py create mode 100644 harstorage/lib/app_globals.py create mode 100644 harstorage/lib/base.py create mode 100644 harstorage/lib/helpers.py create mode 100644 harstorage/public/favicon.ico create mode 100644 harstorage/public/images/add_button.png create mode 100644 harstorage/public/images/help_button.png create mode 100644 harstorage/public/images/pylons.png create mode 100644 harstorage/public/images/remove_button.png create mode 100644 harstorage/public/scripts/LAB.min.js create mode 100644 harstorage/public/scripts/chosen.jquery.js create mode 100644 harstorage/public/scripts/datatables/ColReorder.min.js create mode 100644 harstorage/public/scripts/datatables/TableTools.min.js create mode 100644 harstorage/public/scripts/datatables/jquery.dataTables.min.js create mode 100644 harstorage/public/scripts/harstorage.js create mode 100644 harstorage/public/scripts/harviewer/core/trace.js create mode 100644 harstorage/public/scripts/harviewer/domplate/domplate.js create mode 100644 harstorage/public/scripts/harviewer/harPreview.js create mode 100644 harstorage/public/scripts/harviewer/require.js create mode 100644 harstorage/public/scripts/highcharts/exporting.js create mode 100644 harstorage/public/scripts/highcharts/highcharts.js create mode 100644 harstorage/public/scripts/highcharts/themes.js create mode 100644 harstorage/public/scripts/jquery-1.7.min.js create mode 100644 harstorage/public/scripts/preferences.js create mode 100644 harstorage/public/scripts/spin.js create mode 100644 harstorage/public/scripts/tabber.js create mode 100644 harstorage/public/styles/chosen/chosen-sprite.png create mode 100644 harstorage/public/styles/chosen/chosen.css create mode 100644 harstorage/public/styles/datatables/ColReorder.css create mode 100755 harstorage/public/styles/datatables/TableTools_JUI.css create mode 100644 harstorage/public/styles/datatables/images/insert.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 harstorage/public/styles/datatables/images/ui-icons_222222_256x240.png create mode 100755 harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png create mode 100755 harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png create mode 100755 harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png create mode 100755 harstorage/public/styles/datatables/images/ui-icons_cd0a0a_256x240.png create mode 100755 harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css create mode 100644 harstorage/public/styles/datatables/table_jui.css create mode 100644 harstorage/public/styles/harviewer/harPreview.css create mode 100644 harstorage/public/styles/harviewer/images/contextMenuTarget.png create mode 100644 harstorage/public/styles/harviewer/images/contextMenuTargetHover.png create mode 100644 harstorage/public/styles/harviewer/images/menu/previewMenuHandle.png create mode 100644 harstorage/public/styles/harviewer/images/menu/shadowAlpha.png create mode 100644 harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png create mode 100644 harstorage/public/styles/harviewer/images/tabEnabled.png create mode 100644 harstorage/public/styles/harviewer/images/timeline-sprites.png create mode 100644 harstorage/public/styles/harviewer/images/twisty-sprites.png create mode 100644 harstorage/public/styles/main-ie.css create mode 100644 harstorage/public/styles/main.css create mode 100644 harstorage/public/styles/tabber.css create mode 100644 harstorage/public/swf/copy_cvs_xls.swf create mode 100644 harstorage/templates/common/dochead.html create mode 100644 harstorage/templates/common/footer.html create mode 100644 harstorage/templates/common/header.html create mode 100644 harstorage/templates/create/core.html create mode 100644 harstorage/templates/create/jsloader.html create mode 100644 harstorage/templates/details/core.html create mode 100644 harstorage/templates/details/dochead.html create mode 100644 harstorage/templates/details/jsloader.html create mode 100644 harstorage/templates/display/core.html create mode 100644 harstorage/templates/display/dochead.html create mode 100644 harstorage/templates/display/jsloader.html create mode 100644 harstorage/templates/display/modules.html create mode 100644 harstorage/templates/error.html create mode 100644 harstorage/templates/harviewer.html create mode 100644 harstorage/templates/histogram/core.html create mode 100644 harstorage/templates/histogram/dochead.html create mode 100644 harstorage/templates/histogram/jsloader.html create mode 100644 harstorage/templates/home/core.html create mode 100644 harstorage/templates/home/dochead.html create mode 100644 harstorage/templates/home/jsloader.html create mode 100644 harstorage/templates/migration.html create mode 100644 harstorage/templates/upload.html create mode 100644 harstorage/tests/__init__.py create mode 100644 harstorage/tests/functional/__init__.py create mode 100644 harstorage/tests/functional/test_chart.py create mode 100644 harstorage/tests/functional/test_combine.py create mode 100644 harstorage/tests/functional/test_migration.py create mode 100644 harstorage/tests/functional/test_results.py create mode 100644 harstorage/tests/functional/test_superposed.py create mode 100644 harstorage/tests/functional/testdata/validfile.har create mode 100644 harstorage/tests/functional/testdata/validfile.svg create mode 100644 harstorage/tests/test_models.py create mode 100644 harstorage/websetup.py diff --git a/harstorage/__init__.py b/harstorage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/config/__init__.py b/harstorage/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/config/deployment.ini_tmpl b/harstorage/config/deployment.ini_tmpl new file mode 100644 index 0000000..885002e --- /dev/null +++ b/harstorage/config/deployment.ini_tmpl @@ -0,0 +1,59 @@ +# +# harstorage - Pylons configuration +# +# The %(here)s variable will be replaced with the parent directory of this file +# +[DEFAULT] +debug = false + +[server:main] +use = egg:Paste#http +host = 0.0.0.0 +port = 5000 + +[app:main] +use = egg:harstorage +full_stack = true +static_files = true +temp_store = %(here)s/data +bin_store = %(here)s +ps_enabled = false +static_version = 1.0 + +mongo_replicate = false +mongo_replset = repl1 +mongo_host = localhost +mongo_port = 27017 +mongo_db = harstorage +mongo_auth = false +mongo_user = admin +mongo_pswd = admin + +cache_dir = %(here)s/data +beaker.session.key = harstorage +beaker.session.secret = ${app_instance_secret} + +app_instance_uuid = ${app_instance_uuid} + +# Logging configuration +[loggers] +keys = root + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = INFO +handlers = console + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(asctime)s %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s diff --git a/harstorage/config/environment.py b/harstorage/config/environment.py new file mode 100644 index 0000000..f7146a3 --- /dev/null +++ b/harstorage/config/environment.py @@ -0,0 +1,44 @@ +import os + +from mako.lookup import TemplateLookup +from pylons.configuration import PylonsConfig +from pylons.error import handle_mako_error + +import harstorage.lib.app_globals as app_globals +import harstorage.lib.helpers +from harstorage.config.routing import make_map + + +def load_environment(global_conf, app_conf): + """Configure the Pylons environment via the ``pylons.config`` object""" + + config = PylonsConfig() + + # Pylons paths + root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + paths = dict(root=root, + controllers=os.path.join(root, "controllers"), + static_files=os.path.join(root, "public"), + templates=[os.path.join(root, "templates")]) + + # Initialize config with the basic options + config.init_app(global_conf, app_conf, package="harstorage", paths=paths) + + config["routes.map"] = make_map(config) + config["pylons.app_globals"] = app_globals.Globals(config) + config["pylons.h"] = harstorage.lib.helpers + + # Setup cache object as early as possible + import pylons + pylons.cache._push_object(config["pylons.app_globals"].cache) + + # Create the Mako TemplateLookup, with the default auto-escaping + config["pylons.app_globals"].mako_lookup = TemplateLookup( + directories=paths["templates"], + error_handler=handle_mako_error, + module_directory=os.path.join(app_conf["cache_dir"], "templates"), + input_encoding="utf-8", + default_filters=["escape"], + imports=["from webhelpers.html import escape"]) + + return config diff --git a/harstorage/config/middleware.py b/harstorage/config/middleware.py new file mode 100644 index 0000000..b7b256a --- /dev/null +++ b/harstorage/config/middleware.py @@ -0,0 +1,49 @@ +from beaker.middleware import SessionMiddleware +from paste.cascade import Cascade +from paste.registry import RegistryManager +from paste.urlparser import StaticURLParser +from paste.deploy.converters import asbool +from pylons.middleware import ErrorHandler, StatusCodeRedirect +from pylons.wsgiapp import PylonsApp +from routes.middleware import RoutesMiddleware + +from harstorage.config.environment import load_environment + + +def make_app(global_conf, full_stack=True, static_files=True, **app_conf): + """Create a Pylons WSGI application and return it""" + + # Configure the Pylons environment + config = load_environment(global_conf, app_conf) + + # The Pylons WSGI app + app = PylonsApp(config=config) + + # Routing/Session Middleware + app = RoutesMiddleware(app, config["routes.map"]) + app = SessionMiddleware(app, config) + + # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) + + if asbool(full_stack): + # Handle Python exceptions + app = ErrorHandler(app, global_conf, **config["pylons.errorware"]) + + # Display error documents for 400, 403, 404, 405 status codes (and + # 500, 503 when debug is disabled) + if asbool(config["debug"]): + app = StatusCodeRedirect(app) + else: + app = StatusCodeRedirect(app, [400, 403, 404, 405, 500, 503]) + + # Establish the Registry for this application + app = RegistryManager(app) + + if asbool(static_files): + # Serve static files + static_app = StaticURLParser(config["pylons.paths"]["static_files"]) + app = Cascade([static_app, app]) + + app.config = config + + return app diff --git a/harstorage/config/routing.py b/harstorage/config/routing.py new file mode 100644 index 0000000..0be3f1d --- /dev/null +++ b/harstorage/config/routing.py @@ -0,0 +1,21 @@ +from routes import Mapper + + +def make_map(config): + """Create, configure and return the routes Mapper""" + + map = Mapper(directory=config["pylons.paths"]["controllers"], + always_scan=config["debug"]) + map.minimization = False + map.explicit = True + + # The ErrorController route (handles 4xx/5xx error pages) + map.connect("/error/{action}", controller="error") + + # Home page + map.connect("/", controller="results", action="index") + + # Common routing to controllers + map.connect("/{controller}/{action}") + + return map diff --git a/harstorage/controllers/__init__.py b/harstorage/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/controllers/chart.py b/harstorage/controllers/chart.py new file mode 100644 index 0000000..b241f15 --- /dev/null +++ b/harstorage/controllers/chart.py @@ -0,0 +1,90 @@ +import os +import cairo +import rsvg +import hashlib + +from pylons import request, response +from pylons import config +from pylons.decorators.rest import restrict + +from harstorage.lib.base import BaseController + + +class ChartController(BaseController): + + """ + Export charts in SVG and PNG format + """ + + @restrict("POST") + def export(self): + """Main export controller""" + + # Parameters from POST request + type = request.POST["type"] + svg = request.POST["svg"] + filename = request.POST["filename"] + width = int(request.POST["width"]) + + # Image size + if filename == "timeline": + height = 450 + elif filename == "histogram" or filename == "superposed": + height = 400 + elif filename == "resources" or filename == "domains-by-size": + height = 300 + + # Converting + if type == "image/png": + # Image extension + ext = ".png" + + # Image name + image_name = os.path.join(config["app_conf"]["temp_store"], + hashlib.md5().hexdigest() + ext) + + # Create PNG file + self._render_png(svg, image_name, width, height) + elif type == "image/svg+xml": + # Image extension + ext = ".svg" + + # Image name + image_name = os.path.join(config["app_conf"]["temp_store"], + hashlib.md5().hexdigest() + ext) + + # Create SVG file + self._render_svg(svg, image_name) + + # Response headers + response.headers["Content-Disposition"] = \ + "attachment; filename=" + filename + ext + response.headers["Content-type"] = type + + # Return chuncked response + return self._stream_image(image_name) + + def _render_svg(self, svg, filename): + """Create SVG file""" + + with open(filename, "w") as svg_file: + svg_file.write(svg) + + def _render_png(self, svg, filename, width, height): + """Create PNG file""" + + image = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) + ctx = cairo.Context(image) + + rsvg.Handle(None, svg).render_cairo(ctx) + + image.write_to_png(filename) + + def _stream_image(self, image_name): + """Stream image by chunks""" + + with open(image_name, "rb") as image_file: + chunk = image_file.read(1024) + while chunk: + yield chunk + chunk = image_file.read(1024) diff --git a/harstorage/controllers/combine.py b/harstorage/controllers/combine.py new file mode 100644 index 0000000..3f90946 --- /dev/null +++ b/harstorage/controllers/combine.py @@ -0,0 +1,60 @@ +from pylons import request, response +from pylons import config +from pylons.decorators.rest import restrict + +from harstorage.lib.base import BaseController + + +class CombineController(BaseController): + + """ + Combine multiple static text resources (CSS, JavaScript) + into single file + + """ + + @restrict("GET") + def styles(self): + """Read list of stylesheets and combine them""" + + # Concatenation + for key in request.GET.keys(): + if key != "ver": + base = config["pylons.paths"]["static_files"] + try: + with open(base + "/styles/" + key) as file: + try: + combo += file.read() + except UnboundLocalError: + combo = file.read() + except IOError: + response.status_int = 404 + return None + + # Additional HTTP headers + response.headerlist = [("Content-type", "text/css")] + + return combo + + @restrict("GET") + def scripts(self): + """Read list of JavaScript files and combine them""" + + # Concatenation + for key in request.GET.keys(): + if key != "ver": + base = config["pylons.paths"]["static_files"] + try: + with open(base + "/scripts/" + key) as file: + try: + combo += file.read() + except UnboundLocalError: + combo = file.read() + except IOError: + response.status_int = 404 + return None + + # Additional HTTP headers + response.headerlist = [("Content-type", "application/javascript")] + + return combo diff --git a/harstorage/controllers/error.py b/harstorage/controllers/error.py new file mode 100644 index 0000000..13364fc --- /dev/null +++ b/harstorage/controllers/error.py @@ -0,0 +1,28 @@ +from pylons import request, tmpl_context as c +from pylons import config +from webhelpers.html.builder import literal + +from harstorage.lib.base import BaseController, render + + +class ErrorController(BaseController): + + """Generates error documents as and when they are required. + + The ErrorDocuments middleware forwards to ErrorController when error + related status codes are returned from the application. + + """ + + def __before__(self): + """Define version of static content""" + + c.rev = config["app_conf"]["static_version"] + + def document(self): + """Render the error document""" + + resp = request.environ.get("pylons.original_response") + c.message = literal(resp.status) + + return render("/error.html") diff --git a/harstorage/controllers/migration.py b/harstorage/controllers/migration.py new file mode 100644 index 0000000..2959363 --- /dev/null +++ b/harstorage/controllers/migration.py @@ -0,0 +1,68 @@ +from pylons import tmpl_context as c +from pylons import config +from pylons.controllers.util import redirect + +from harstorage.lib.base import BaseController, render +from harstorage.lib.MongoHandler import MongoDB +from harstorage.lib.HAR import HAR +import harstorage.lib.helpers as h + + + +class MigrationController(BaseController): + + def __before__(self): + """Define version of static content""" + + c.rev = config["app_conf"]["static_version"] + + def status(self): + return render("/migration.html") + + def migration(self): + # MongoDB handler + mdb_handler = MongoDB() + if hasattr(c, "message"): + return render("/error.html") + + for document in mdb_handler.collection.find(fields=["_id", "har"]): + id = document["_id"] + + har = HAR(document["har"], True) + + har.analyze() + + domains_req_ratio = dict() + domains_weight_ratio = dict() + + for key, value in har.domains.items(): + domains_req_ratio[key] = value[0] + domains_weight_ratio[key] = value[1] + + data = {"full_load_time": har.full_load_time, + "onload_event": har.onload_event, + "start_render_time": har.start_render_time, + "time_to_first_byte": har.time_to_first_byte, + "total_dns_time": har.total_dns_time, + "total_transfer_time": har.total_transfer_time, + "total_server_time": har.total_server_time, + "avg_connecting_time": har.avg_connecting_time, + "avg_blocking_time": har.avg_blocking_time, + "total_size": har.total_size, + "text_size": har.text_size, + "media_size": har.media_size, + "cache_size": har.cache_size, + "requests": har.requests, + "redirects": har.redirects, + "bad_requests": har.bad_requests, + "domains": len(har.domains), + "weights_ratio": har.weight_ratio(), + "requests_ratio": har.req_ratio(), + "domains_ratio": har.domains} + + mdb_handler.collection.update({"_id": id}, {"$set": data}) + + migration_handler = MongoDB(collection="migration") + migration_handler.collection.insert({"status": "ok"}) + + redirect(h.url_for('/')) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py new file mode 100644 index 0000000..c6bb2d6 --- /dev/null +++ b/harstorage/controllers/results.py @@ -0,0 +1,475 @@ +import json +import os +import hashlib +import mimetypes +import time +import re +import functools +import platform + +from pylons import request, response, tmpl_context as c +from pylons import config +from pylons.controllers.util import redirect +from pylons.decorators.rest import restrict + +from harstorage.lib.base import BaseController, render +from harstorage.lib.HAR import HAR +from harstorage.lib.MongoHandler import MongoDB +import harstorage.lib.helpers as h + + +class ResultsController(BaseController): + + """ + Core controller of repository + """ + + def __before__(self): + """Define version of static content""" + + c.rev = config["app_conf"]["static_version"] + + @restrict("GET") + def index(self): + """Home page with the latest test results""" + + # Migration (harstorage v1.0) + migration_handler = MongoDB(collection="migration") + if hasattr(c, "message"): + return render("/error.html") + + status = migration_handler.collection.find_one({"status": "ok"}) + if status is None: + redirect(h.url_for('/migration/status')) + + # MongoDB handler + mdb_handler = MongoDB() + if hasattr(c, "message"): + return render("/error.html") + + # Read aggregated data from database + # Aggregation is based on unique labels, urls and latest timestamps + + + ''' + Replaced the original grouping with an aggregate function. This function + actually returns all of the fields needed such that we also do not needed + to make any subsequent requests back to MongoDB to retrieve details on + the list + ''' + latest_results = mdb_handler.collection.aggregate( + [{"$group":{"_id": {"label":"$label", "url":"$url"}, + "timestamp":{"$last":"$timestamp"}, + "total_size":{"$last":"$total_size"}, + "requests":{"$last":"$requests"}, + "full_load_time": {"$last":"$full_load_time"}}}, + {"$sort":{"timestamp" : -1}}]) + + ''' + Get the number of records + + Since we changed the initial request, we need to deal with the json array + differently as well. + ''' + c.rowcount = len(latest_results["result"]) + + # Populate data table with the latest test results + c.metrics_table = [[], [], [], [], [], []] + + ''' + for group in latest_results["result"]: + condition = {"label": group["_id"]["label"], "timestamp": group["timestamp"]} + + result = mdb_handler.collection.find_one(condition, fields=fields) + + c.metrics_table[0].append(result["timestamp"]) + c.metrics_table[1].append(result["label"]) + c.metrics_table[2].append(result["url"]) + c.metrics_table[3].append(result["total_size"]) + c.metrics_table[4].append(result["requests"]) + c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) + ''' + + # loop through our results and return them + for result in latest_results["result"]: + c.metrics_table[0].append(result["timestamp"]) + c.metrics_table[1].append(result["_id"]["label"]) + c.metrics_table[2].append(result["_id"]["url"]) + c.metrics_table[3].append(result["total_size"]) + c.metrics_table[4].append(result["requests"]) + c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) + + + return render("/home/core.html") + + @restrict("GET") + def details(self): + """Page with test results""" + + # Try to fetch data for selecetor box + try: + c.label = request.GET["url"] + c.mode = "url" + # Use label parameter instead of URL parameter + except: + c.label = request.GET["label"] + c.mode = "label" + + # Generate context for selector + self._set_options_in_selector(c.mode, c.label) + + # Define url for data aggregation + if c.mode == "label": + c.query = "/superposed/display?" + \ + "step_1_label=" + c.label + \ + "&step_1_start_ts=" + min(c.timestamp) + \ + "&step_1_end_ts=" + max(c.timestamp) + c.histo = "true" + else: + c.histo = "false" + c.query = "None" + + return render("/details/core.html") + + def _set_options_in_selector(self, mode, label): + """ + Create context data - a list of timestamps. + + @parameter label - label of set with test results + """ + + # Read data for selector box from database + results = MongoDB().collection.find( + {mode: label}, + fields=["timestamp"], + sort=[("timestamp", -1)]) + + c.timestamp = list() + + for result in results: + c.timestamp.append(result["timestamp"]) + + @restrict("GET") + def timeline(self): + """Generate data for timeline chart""" + + # Parameters from GET request + label = h.decode_uri(request.GET["label"]) + mode = request.GET["mode"] + limit = int(config["app_conf"].get("limit", 0)) + + # Metrics + METRICS = ("timestamp", "full_load_time", "requests", "total_size", + "ps_scores", "onload_event", "start_render_time", + "time_to_first_byte", "total_dns_time", + "total_transfer_time", "total_server_time", + "avg_connecting_time", "avg_blocking_time", "text_size", + "media_size", "cache_size", "redirects", "bad_requests", + "domains") + + TITLES = ["Full Load Time", "Total Requests", + "Total Size", "Page Speed Score", "onLoad Event", + "Start Render Time", "Time to First Byte", + "Total DNS Time", "Total Transfer Time", "Total Server Time", + "Avg. Connecting Time", "Avg. Blocking Time", "Text Size", + "Media Size", "Cache Size", "Redirects", "Bad Rquests", + "Domains"] + + # Set of metrics to exclude (due to missing data) + exclude = set() + data = list() + for index in range(len(METRICS)): + data.append(str()) + + # Read data for timeline from database in custom format (hash separated) + results = MongoDB().collection.find( + {mode: label}, + fields=METRICS, + limit=limit, + sort=[("timestamp", 1)]) + + for result in results: + index = 0 + for metric in METRICS: + if metric != "ps_scores": + point = str(result[metric]) + else: + point = str(result[metric]["Total Score"]) + if point == "n/a": + exclude.add(metric) + data[index] += point + "#" + index += 1 + + # Update list of titles + if "onload_event" in exclude: + TITLES.pop(TITLES.index("onLoad Event")) + if "start_render_time" in exclude: + TITLES.pop(TITLES.index("Start Render Time")) + + header = str() + for title in TITLES: + header += title + "#" + + output = header[:-1] + ";" + + for dataset in data: + if not dataset.count("n/a"): + output += dataset[:-1] + ";" + + return output[:-1] + + @restrict("GET") + def runinfo(self): + """Generate detailed data for each test run""" + + # Parameters from GET request + timestamp = request.GET["timestamp"] + + # DB query + test_results = MongoDB().collection.find_one({"timestamp": timestamp}) + + # Domains breakdown + domains_req_ratio = dict() + domains_weight_ratio = dict() + + for hostname, value in test_results["domains_ratio"].items(): + hostname = re.sub("\|", ".", hostname) + domains_req_ratio[hostname] = value[0] + domains_weight_ratio[hostname] = value[1] + + # Summary stats + summary = {"full_load_time": test_results["full_load_time"], + "onload_event": test_results["onload_event"], + "start_render_time": test_results["start_render_time"], + "time_to_first_byte": test_results["time_to_first_byte"], + "total_dns_time": test_results["total_dns_time"], + "total_transfer_time": test_results["total_transfer_time"], + "total_server_time": test_results["total_server_time"], + "avg_connecting_time": test_results["avg_connecting_time"], + "avg_blocking_time": test_results["avg_blocking_time"], + "total_size": test_results["total_size"], + "text_size": test_results["text_size"], + "media_size": test_results["media_size"], + "cache_size": test_results["cache_size"], + "requests": test_results["requests"], + "redirects": test_results["redirects"], + "bad_requests": test_results["bad_requests"], + "domains": test_results["domains"]} + + # Page Speed Scores + scores = dict() + for rule, score in test_results["ps_scores"].items(): + scores[rule] = score + + # Data for HAR Viewer + har_id = str(test_results["_id"]) + + filename = os.path.join(config["app_conf"]["temp_store"], har_id) + with open(filename, "w") as fh: + fh.write(test_results["har"].encode("utf-8")) + + # Final JSON + return json.dumps({"summary": summary, + "pagespeed": scores, + "weights": test_results["weights_ratio"], + "requests": test_results["requests_ratio"], + "d_weights": domains_weight_ratio, + "d_requests": domains_req_ratio, + "har": har_id}) + + @restrict("GET") + def harviewer(self): + """HAR Viewer iframe""" + + # HAR Viewer customization via cookie + response.set_cookie("phaseInterval", "-1", max_age=365 * 24 * 3600) + + return render("/harviewer.html") + + @restrict("GET") + def deleterun(self): + """Controller for deletion of tests""" + + # MongoDB handler + mdb_handler = MongoDB() + + # Parameters from GET request + label = request.GET["label"] + timestamp = request.GET["timestamp"] + mode = request.GET["mode"] + + if request.GET["all"] == "true": + del_all = True + else: + del_all = False + + # Remove document from collection + if mode == "label": + if del_all: + mdb_handler.collection.remove({"label": label}) + else: + mdb_handler.collection.remove({"label": label, + "timestamp": timestamp}) + count = mdb_handler.collection.find({"label": label}).count() + else: + if del_all: + mdb_handler.collection.remove({"url": label}) + else: + mdb_handler.collection.remove({"url": label, + "timestamp": timestamp}) + count = mdb_handler.collection.find({"url": label}).count() + + if count: + return "details?" + mode + "=" + label + else: + return "/" + + def upload_rest(function): + @functools.wraps(function) + def wrapper(*args): + result, ext = function(*args) + + if result: + try: + if request.headers["automated"] == "true": + return "Successful" + except KeyError: + redirect(h.url_for('/results/details') + "?label=" + ext) + else: + try: + if request.headers["automated"] == "true": + return ext + except KeyError: + c.error = ext + return render("/upload.html") + + return wrapper + + @restrict("POST") + @upload_rest + def upload(self): + """Controller for uploads of new test results""" + + # HAR initialization + try: + har = HAR(request.POST["file"].value) + except: + har = HAR(request.POST["file"]) + + # Analysis of uploaded data + if har.parsing_status == "Successful": + # Parsing imported HAR file + try: + har.analyze() + except Exception as error: + return False, ": ".join([type(error).__name__, error.message]) + + # Evaluate Page Speed scores + if config["app_conf"]["ps_enabled"] == "true": + scores = self._get_pagespeed_scores(har.har) + else: + scores = dict([("Total Score", 100)]) + + # Add document to collection + timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + + result = {"label": har.label, + "url": har.url, + "timestamp": timestamp, + "full_load_time": har.full_load_time, + "onload_event": har.onload_event, + "start_render_time": har.start_render_time, + "time_to_first_byte": har.time_to_first_byte, + "total_dns_time": har.total_dns_time, + "total_transfer_time": har.total_transfer_time, + "total_server_time": har.total_server_time, + "avg_connecting_time": har.avg_connecting_time, + "avg_blocking_time": har.avg_blocking_time, + "total_size": har.total_size, + "text_size": har.text_size, + "media_size": har.media_size, + "cache_size": har.cache_size, + "requests": har.requests, + "redirects": har.redirects, + "bad_requests": har.bad_requests, + "domains": len(har.domains), + "ps_scores": scores, + "har": har.origin, + "weights_ratio": har.weight_ratio(), + "requests_ratio": har.req_ratio(), + "domains_ratio": har.domains} + + # MongoDB handler + mdb_handler = MongoDB() + if hasattr(c, "message"): + return False, c.message + else: + mdb_handler.collection.insert(result) + + return True, har.label + else: + return False, har.parsing_status + + def _get_pagespeed_scores(self, har): + #Store HAR for Page Speed binary + hashname = hashlib.md5().hexdigest() + temp_store = config["app_conf"]["temp_store"] + filename = os.path.join(temp_store, hashname) + + with open(filename, "w") as fh: + fh.write(json.dumps(har)) + + # STDOUT,STDERR + os_type = platform.system() + + if os_type == "Linux": + std_out = " > /dev/null 2>&1" + elif os_type == "Windows": + std_out = " > NUL 2>&1" + else: + std_out = "" + + # Run pagespeed_bin + bin_store = config["app_conf"]["bin_store"] + pagespeed_bin = os.path.join(bin_store, "pagespeed_bin") + + outfile = filename + ".out" + + os.system(pagespeed_bin + + " -input_file " + filename + + " -output_format formatted_json" + + " -output_file " + outfile + + std_out) + + # Output report (JSON) + with open(outfile, "r") as fh: + output = json.loads(fh.read()) + + # Final scores + scores = dict() + scores["Total Score"] = int(output["score"]) + for rule in output["rule_results"]: + scores[rule["localized_rule_name"]] = int(rule["rule_score"]) + + return scores + + @restrict("GET") + def download(self): + """Return serialized HAR file""" + + # Parameters from GET request + har_id = request.GET["id"] + + # Read HAR file from disk + filename = os.path.join(config["app_conf"]["temp_store"], har_id) + with open(filename, "r") as fh: + data = fh.read() + + # JSON to JSON-P + data = "onInputData(" + data + ");" + + # Add content type header + response.content_type = mimetypes.guess_type(filename)[0] or \ + "text/plain" + + return data diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py new file mode 100644 index 0000000..95ecb89 --- /dev/null +++ b/harstorage/controllers/superposed.py @@ -0,0 +1,224 @@ +from pylons import request, tmpl_context as c +from pylons import config +from pylons.decorators.rest import restrict + +from harstorage.lib.base import BaseController, render +from harstorage.lib.MongoHandler import MongoDB +from harstorage.lib.Math import Histogram, Aggregator + + +class SuperposedController(BaseController): + + """ + Interface for aggregation and comparison of test results + + """ + + def __before__(self): + """Define version of static content""" + + c.rev = config["app_conf"]["static_version"] + + @restrict("GET") + def create(self): + """Render form with list of labels and timestamps""" + + # MongoDB handler + md_handler = MongoDB() + if hasattr(c, "message"): + return render("/error.html") + + # List of labels + c.labels = list() + + for label in md_handler.collection.distinct("label"): + c.labels.append(label) + + return render("/create/core.html") + + @restrict("GET") + def dates(self): + """Return a list of timestamps for selected label""" + + # Read label from GET request + label = request.GET["label"] + + # Read data from database + documents = MongoDB().collection.find( + {"label": label}, + fields=["timestamp"], + sort=[("timestamp", 1)]) + + dates = str() + for document in documents: + dates += document["timestamp"] + ";" + + return dates[:-1] + + @restrict("GET") + def display(self): + """Render page with column chart and data table""" + + # MongoDB handler + md_handler = MongoDB() + if hasattr(c, "message"): + return render("/error.html") + + # Checkbox options + c.chart_type = request.GET.get("chart", None) + c.table = request.GET.get("table", "false") + init = request.GET.get("metric", "true") + + c.chart = "true" if c.chart_type else "false" + + # Aggregation option + c.agg_type = request.GET.get("metric", "Average") + + # Number of records + if c.chart == "true" and c.table == "true" and init != "true": + c.rowcount = len(request.GET) / 3 - 1 + else: + c.rowcount = len(request.GET) / 3 + + # Data table + c.headers = ["Label", "Full Load Time (ms)", "Total Requests", + "Total Size (kB)", "Page Speed Score", + "onLoad Event (ms)", "Start Render Time (ms)", + "Time to First Byte (ms)", "Total DNS Time (ms)", + "Total Transfer Time (ms)", "Total Server Time (ms)", + "Avg. Connecting Time (ms)", "Avg. Blocking Time (ms)", + "Text Size (kB)", "Media Size (kB)", "Cache Size (kB)", + "Redirects", "Bad Rquests", "Domains"] + c.metrics_table = list() + c.metrics_table.append(list()) + + # Chart points + c.points = str() + + # Aggregator + aggregator = Aggregator() + + # Test results from database + for row_index in range(c.rowcount): + # Parameters from GET request + label = request.GET["step_" + str(row_index + 1) + "_label"] + start_ts = request.GET["step_" + str(row_index + 1) + "_start_ts"] + end_ts = request.GET["step_" + str(row_index + 1) + "_end_ts"] + + # Add label + c.metrics_table[0].append(label) + c.points += label + "#" + + # Fetch test results + condition = { + "label": label, + "timestamp": {"$gte": start_ts, "$lte": end_ts} + } + documents = md_handler.collection.find(condition, + fields=aggregator.METRICS) + + # Add data row to aggregator + aggregator.add_row(label, row_index, documents) + + # Aggregated data per column + column = 1 + for metric in aggregator.METRICS: + c.metrics_table.append(list()) + c.points = c.points[:-1] + ";" + + for row_index in range(c.rowcount): + data_list = aggregator.data[metric][row_index] + value = aggregator.get_aggregated_value(data_list, c.agg_type, + metric) + + c.points += str(value) + "#" + c.metrics_table[column].append(value) + + column += 1 + + # Names of series + titles = str() + for title in aggregator.TITLES: + titles += title + "#" + + # Final chart points + c.points = titles[:-1] + ";" + c.points[:-1] + c.points = aggregator.exclude_missing(c.points) + + return render("/display/core.html") + + def histogram(self): + """Render chart with histograms""" + + # MongoDB handler + md_handler = MongoDB() + if hasattr(c, "message"): + return render("/error.html") + + # Options + c.label = request.GET["label"] + c.metric = request.GET["metric"] + + # Metrics + METRICS = [("full_load_time", "Full Load Time"), + ("onload_event", "onLoad Event"), + ("start_render_time", "Start Render Time"), + ("time_to_first_byte", "Time to First Byte"), + ("total_dns_time", "Total DNS Time"), + ("total_transfer_time", "Total Transfer Time"), + ("total_server_time", "Total Server Time"), + ("avg_connecting_time", "Avg. Connecting Time"), + ("avg_blocking_time", "Avg. Blocking Time")] + + time_metrics = ["full_load_time", "onload_event", "start_render_time", + "time_to_first_byte"] + + c.metrics = list() + + # Read data from database + condition = {"label": c.label} + fields = (metric for metric, title in METRICS) + documents = md_handler.collection.find(condition, fields=fields) + + full_data = list(document for document in documents) + + for metric, title in METRICS: + try: + data = (result[metric] for result in full_data) + histogram = Histogram(data) + + if metric in time_metrics: + ranges = histogram.ranges(True) + else: + ranges = histogram.ranges() + + frequencies = histogram.frequencies() + + if metric == c.metric: + c.data = "" + + for occ_range in ranges: + c.data += occ_range + "#" + + c.data = c.data[:-1] + ";" + + for frequency in frequencies: + c.data += str(frequency) + "#" + + c.data = c.data[:-1] + ";" + + c.title = title + + c.metrics.append((metric, title)) + except IndexError: + pass + except TypeError: + pass + except ValueError: + pass + + if len(c.metrics): + return render("/histogram/core.html") + else: + c.message = "Sorry! You haven't enough data." + return render("/error.html") diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py new file mode 100644 index 0000000..951532c --- /dev/null +++ b/harstorage/lib/HAR.py @@ -0,0 +1,487 @@ +import json +import time +import re + +DATE_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" + + +class Bytes(float): + + """ + Extended integer + """ + + def __add__(self, other): + """ + @return - result of addition + """ + return Bytes(self.__float__() + other) + + def to_kilobytes(self): + """ + @return - value in kilobytes + """ + return int(round(self.__float__() / 1024.0)) + + +class Headers(): + + """ + Manipulation with HTTP headers + """ + + def __init__(self, headers): + """ + @parameter headers - list of headers + + @as_dictionary - dictionary of headers + """ + self.as_dict = dict() + for header in headers: + self.as_dict[header["name"]] = header["value"] + + +class Fixer(): + + """ + Fix issues with broken HAR format + """ + + @staticmethod + def apply_workaround_for_httpwatch(har): + """HttpWatch workaround""" + + return har.decode("latin-1").encode("utf-8") + + @staticmethod + def apply_workaround_for_fiddler(har): + """Fiddler workaround""" + + har = har.partition("{")[1] + har.partition("{")[-1] + + return re.sub('"pages":null', + '"pages":[{\ + "startedDateTime": "1970-01-01T00:00:00.000+00:00",\ + "id": "Undefined","title": "Undefined",\ + "pageTimings": {}}]', + har) + + @staticmethod + def apply_workaround_for_charles(har): + """Charles Proxy workaround""" + + return re.sub('"log":{', + '"log": {"pages": [{\ + "startedDateTime": "1970-01-01T00:00:00.000+00:00",\ + "id": "Undefined","title": "Undefined",\ + "pageTimings": {}}],', + har) + + @staticmethod + def fix_har(har): + """Choose workaround and apply it""" + + if har.rfind('"name" : "HttpWatch') > 0: + har = Fixer().apply_workaround_for_httpwatch(har) + elif har.rfind('"name":"Fiddler"') > 0: + har = Fixer().apply_workaround_for_fiddler(har) + elif har.rfind('"name":"Charles Proxy"') > 0: + har = Fixer().apply_workaround_for_charles(har) + + return har + + @staticmethod + def fix_pagespeed(har): + """ + Page Speed requires strict date format for every entry and every page. + Therefor original dates must be modified + """ + + # Entry level + for entry in har["log"]["entries"]: + if entry["startedDateTime"].rfind("+") != -1: + start_ts = entry["startedDateTime"].replace("+", "-") + entry["startedDateTime"] = start_ts + + long_time, dot, seconds = entry["startedDateTime"].partition(".") + milliseconds, dash, timezone = seconds.partition("-") + milliseconds = milliseconds.replace("Z", "") + + entry["startedDateTime"] = long_time + dot + milliseconds + "+00:00" + + # Page level + for page in har["log"]["pages"]: + if page["startedDateTime"].rfind("+") != -1: + start_ts = page["startedDateTime"].replace("+", "-") + page["startedDateTime"] = start_ts + + long_time, dot, seconds = page["startedDateTime"].partition(".") + milliseconds, dash, timezone = seconds.partition("-") + milliseconds = milliseconds.replace("Z", "") + + page["startedDateTime"] = long_time + dot + milliseconds + "+00:00" + + return har + + +class HAR(): + + """ + HAR Parser + """ + + def __init__(self, har, fixed=False): + """Deserialize HAR file and initialize variables""" + + # Check file size. If size is null it breaks parsing and return + # error status + if len(har) == 0: + self.parsing_status = "Empty file" + else: + try: + if not fixed: + # Unfortunately Fidler and Charles Proxy do not + # strictly follow HAR 1.2 specification. HttpWatch uses + # weird encoding. Trying to fix that when first time meet + # the file. + har = Fixer.fix_har(har) + + # Deserialize HAR file, fix issues related to Page Speed and + # store original file for HAR Viewer + self.har = json.loads(har) + self.har = Fixer.fix_pagespeed(self.har) + self.origin = har + + # Initial varaibles and counters + self.init_variables() + + self.parsing_status = "Successful" + + except Exception as error: + self.parsing_status = "{0}: {1}".format(type(error).__name__, + error.message) + + def init_variables(self): + self.full_load_time = 0 + + self.total_dns_time = 0.0 + self.total_transfer_time = 0.0 + self.total_server_time = 0.0 + self.avg_connecting_time = 0.0 + self.avg_blocking_time = 0.0 + + self.total_size = Bytes(0) + self.text_size = Bytes(0) + self.media_size = Bytes(0) + self.cache_size = Bytes(0) + + self.redirects = 0 + self.bad_requests = 0 + + self.domains = dict() + + def analyze(self): + """Extract data from HAR container""" + + # Temporary extremes + self.min_timestamp = 10 ** 14 + self.max_timestamp = 0 + + # Parse each entry of page + for self.entry in self.har["log"]["entries"]: + # Micro timgings + self.total_dns_time += self.get_dns_time() + self.total_transfer_time += self.get_transfer_time() + self.total_server_time += self.get_server_time() + self.avg_connecting_time += self.get_connecting_time() + self.avg_blocking_time += self.get_blocking_time() + + # Update Request/Page time frame + self.update_timeframe() + + # Time to first byte + self.time_to_first_byte = self.get_time_to_first_byte() + + # Size of response body + self.total_size += self.get_response_size() + + # Size of text (JavaScript, CSS, HTML, XML, JSON, plain text) + # and media (images, flash) files + if self.is_text(): + self.text_size += self.get_response_size() + elif self.is_media(): + self.media_size += self.get_response_size() + + # Cached size + if self.is_long_term_cache(): + self.cache_size += self.get_response_size() + + # Redirects (3xx) and bad requests (4xx, 5xx) + if self.is_redirect(): + self.redirects += 1 + elif self.is_bad_request(): + self.bad_requests += 1 + + # Update domain info + self.update_domain_info() + + # Label + self.label = self.get_label() + + # URL + self.url = self.get_url() + + # Requests + self.requests = self.get_number_of_requests() + + # Full load time + self.full_load_time = self.get_full_load_time() + + # onLoad envent time + self.onload_event = self.get_onload_event() + + # Render Start + self.start_render_time = self.get_start_render_time() + + # Average values + self.avg_connecting_time = self.get_avg_connecting_time() + self.avg_blocking_time = self.get_avg_blocking_time() + + # From bytes to kilobytes + self.total_size = self.total_size.to_kilobytes() + self.text_size = self.text_size.to_kilobytes() + self.media_size = self.media_size.to_kilobytes() + self.cache_size = self.cache_size.to_kilobytes() + + def weight_ratio(self): + """Breakdown by size of page objects""" + + resources = dict() + for entry in self.har["log"]["entries"]: + mime_type = \ + entry["response"]["content"]["mimeType"].partition(";")[0] + if cmp(mime_type, ""): + mime_type = self.get_normalized_value(mime_type) + size = Bytes(entry["response"]["content"]["size"]) + resources[mime_type] = resources.get(mime_type, 0) + \ + size.to_kilobytes() + return resources + + def req_ratio(self): + """Breakdown by number of page objects""" + + resources = dict() + for entry in self.har["log"]["entries"]: + mime_type = \ + entry["response"]["content"]["mimeType"].partition(";")[0] + if cmp(mime_type, ""): + mime_type = self.get_normalized_value(mime_type) + resources[mime_type] = resources.get(mime_type, 0) + 1 + return resources + + def get_normalized_value(self, string): + """ + @parameter string - MIME type + + @return - normilized MIME type + """ + + if string.count("javascript"): + return "javascript" + elif string.count("flash"): + return "flash" + elif string.count("text/plain") or string.count("html"): + return "text/html" + elif string.count("xml"): + return "text/xml" + elif string.count("css"): + return "text/css" + elif string.count("gif"): + return "image/gif" + elif string.count("png"): + return "image/png" + elif string.count("jpeg") or string.count("jpg"): + return "image/jpeg" + elif string.count("json"): + return "json" + else: + return "other" + + def get_dns_time(self): + dns_time = self.entry["timings"]["dns"] + return max(dns_time, 0) + + def get_transfer_time(self): + receive_time = max(self.entry["timings"]["receive"], 0) + send_time = max(self.entry["timings"]["send"], 0) + return receive_time + send_time + + def get_send_time(self): + send_time = self.entry["timings"]["send"] + return max(send_time, 0) + + def get_server_time(self): + server_time = self.entry["timings"]["wait"] + return max(server_time, 0) + + def get_connecting_time(self): + connecting_time = self.entry["timings"]["connect"] + return max(connecting_time, 0) + + def get_blocking_time(self): + blocking_time = self.entry["timings"]["blocked"] + return max(blocking_time, 0) + + def update_timeframe(self): + # Original time format: 2000-01-01T00:00:00.000+00:00 + seconds, dot, milliseconds = \ + self.entry["startedDateTime"].partition(".") + seconds = time.strptime(seconds, "%Y-%m-%dT%H:%M:%S") + seconds = time.mktime(seconds) + + # Exclude timezone + try: + milliseconds = milliseconds.partition("+")[0] + except: + milliseconds = milliseconds.partition("-")[0] + milliseconds = milliseconds.replace("Z", "") + + time_request_started = seconds + float("0." + milliseconds) + time_request_completed = time_request_started + \ + self.entry["time"] / 1000.0 + + if time_request_completed > self.max_timestamp: + self.max_timestamp = time_request_completed + + if time_request_started < self.min_timestamp: + self.min_timestamp = time_request_started + self.is_first = True + else: + self.is_first = False + + def get_time_to_first_byte(self): + if self.is_first: + return self.get_blocking_time() + \ + self.get_dns_time() + \ + self.get_connecting_time() + \ + self.get_send_time() + \ + self.get_server_time() + else: + return self.time_to_first_byte + + def get_response_size(self): + compressed_size = Bytes(max(self.entry["response"]["bodySize"], 0)) + if compressed_size == 0: + return Bytes(self.entry["response"]["content"]["size"]) + else: + return compressed_size + + def is_text(self): + mime_type = \ + self.entry["response"]["content"]["mimeType"].partition(";")[0] + if cmp(mime_type, ""): + mime_type = self.get_normalized_value(mime_type) + + if mime_type.count("javascript") \ + or mime_type.count("text") \ + or mime_type.count("html") \ + or mime_type.count("xml") \ + or mime_type.count("json"): + return True + return False + + def is_media(self): + mime_type = \ + self.entry["response"]["content"]["mimeType"].partition(";")[0] + + if cmp(mime_type, ""): + mime_type = self.get_normalized_value(mime_type) + if mime_type.count("flash") or mime_type.count("image"): + return True + return False + + def is_long_term_cache(self): + headers = Headers(self.entry["response"]["headers"]) + + try: + cache_control = headers.as_dict["Cache-Control"] + + if not cache_control.count("no-cache") \ + and not cache_control.count("max-age=0"): + # Extract DATE from HTTP header + date = headers.as_dict["Date"] + date = time.strptime(date, DATE_FORMAT) + date = time.mktime(date) + + # Extract EXPIRES from HTTP header + expires = headers.as_dict["Expires"] + expires = time.strptime(expires, DATE_FORMAT) + expires = time.mktime(expires) + + if expires > date: + return True + except: + pass + return False + + def is_redirect(self): + if 300 <= self.entry["response"]["status"] < 400: + return True + + def is_bad_request(self): + if self.entry["response"]["status"] >= 400: + return True + + def get_label(self): + return self.har["log"]["pages"][0]["id"] + + def get_url(self): + return self.har["log"]["entries"][0]["request"]["url"][:512] + + def get_number_of_requests(self): + return len(self.har["log"]["entries"]) + + def get_full_load_time(self): + try: + return self.har["log"]["pages"][0]["pageTimings"]["_myTime"] + except: + return int((self.max_timestamp - self.min_timestamp) * 1000) + + def get_onload_event(self): + try: + onload_event = self.har["log"]["pages"][0]["pageTimings"]["onLoad"] + if onload_event > 0: + return onload_event + except TypeError: # dynaTrace bug + return self.har["log"]["pages"][0]["pageTimings"][0]["onLoad"] + except KeyError: + pass + return "n/a" + + def get_start_render_time(self): + try: + return self.har["log"]["pages"][0]["pageTimings"]["_renderStart"] + except: + return "n/a" + + def get_avg_connecting_time(self): + return round(self.avg_connecting_time / self.requests, 0) + + def get_avg_blocking_time(self): + return round(self.avg_blocking_time / self.requests, 0) + + def update_domain_info(self): + domain = \ + self.entry["request"]["url"].partition("//")[-1].partition("/")[0] + + # WORKAROUND: Mongo prevents using dots in key names + mongo_domain = re.sub("\.", "|", domain) + + # {DOMAIN: [NUMBER OF REQUESTS, TOTAL DATA FROM HOST IN KB], ...} + domain_requests = self.domains.get(mongo_domain, [0, 0])[0] + domain_data_size = self.domains.get(mongo_domain, [0, 0])[1] + + domain_requests += 1 + domain_data_size += self.get_response_size().to_kilobytes() + + self.domains[mongo_domain] = [domain_requests, domain_data_size] diff --git a/harstorage/lib/Math.py b/harstorage/lib/Math.py new file mode 100644 index 0000000..bbce245 --- /dev/null +++ b/harstorage/lib/Math.py @@ -0,0 +1,226 @@ +import math + + +class Aggregator(): + + """ + Test results aggregation + + """ + + def __init__(self): + + self.METRICS = ("full_load_time", "requests", "total_size", + "ps_scores", "onload_event", "start_render_time", + "time_to_first_byte", "total_dns_time", + "total_transfer_time", "total_server_time", + "avg_connecting_time", "avg_blocking_time", "text_size", + "media_size", "cache_size", "redirects", "bad_requests", + "domains") + + self.TITLES = ["Full Load Time", "Total Requests", "Total Size", + "Page Speed Score", "onLoad Event", "Start Render Time", + "Time to First Byte", "Total DNS Time", + "Total Transfer Time", "Total Server Time", + "Avg. Connecting Time", "Avg. Blocking Time", + "Text Size", "Media Size", "Cache Size", "Redirects", + "Bad Rquests", "Domains"] + + self.data = self.data_container() + + def data_container(self): + """Common data container""" + + data = dict() + for metric in self.METRICS: + data[metric] = list() + + data["label"] = list() + + return data + + def add_row(self, label, row_index, documents): + """Extract metrics from set of documents""" + + self.data["label"].append(row_index) + self.data["label"][row_index] = label + + for metric in self.METRICS: + self.data[metric].append(row_index) + self.data[metric][row_index] = list() + + for document in documents: + for metric in self.METRICS: + if metric != "ps_scores": + self.data[metric][row_index].append( + document[metric] + ) + else: + self.data[metric][row_index].append( + document[metric]["Total Score"] + ) + + def get_aggregated_value(self, list, agg_type, metric): + """Return aggregated value in accordance with context(metric)""" + + if agg_type == "Average": + return self.average(list) + elif agg_type == "Minimum": + return self.minimum(list) + elif agg_type == "Maximum": + return self.maximum(list) + elif agg_type == "90th Percentile": + return self.percentile(list, 0.9) + elif agg_type == "Median": + return self.percentile(list, 0.5) + + def exclude_missing(self, points): + """Remove points missing in all subsets""" + + index_oe = self.METRICS.index("onload_event") + index_srt = self.METRICS.index("start_render_time") + + onload_event = points.split(";")[index_oe + 2] + start_render_time = points.split(";")[index_srt + 2] + + number_of_values = onload_event.count("#") + 1 + broken_string = "#".join(["n/a"] * number_of_values) + + if onload_event == broken_string: + points = points.replace("onLoad Event#", "") + if start_render_time == broken_string: + points = points.replace("Start Render Time#", "") + + return points.replace(broken_string + ";", "") + + def average(self, results): + """ + @parameter results - a list of test results + + @return - the average value + """ + + try: + num = len(results) + total_sum = sum(results) + return int(round(total_sum / num, 0)) + except TypeError: + return "n/a" + + def minimum(self, results): + """ + @parameter results - a list of test results + + @return - the minimum value + """ + + return min(results) + + def maximum(self, results): + """ + @parameter results - a list of test results + + @return - the maximum value + """ + + return max(results) + + def percentile(self, results, percent, key=lambda x: x): + """ + @parameter results - a list of test results + @parameter percent - a float value from 0.0 to 1.0 + @parameter key - optional key function to compute value from each + element of N. + + @return - the percentile + """ + + data = sorted(results) + + k = (len(data) - 1) * percent + f = math.floor(k) + c = math.ceil(k) + + if f == c: + return key(data[int(k)]) + else: + try: + return key(data[int(f)]) * (c - k) + key(data[int(c)]) * (k - f) + except TypeError: + return "n/a" + + +class Histogram(): + + """ + Statistical histograms based on Sturges rule + + """ + + def __init__(self, data): + """ + Initialize histogram parameters + """ + + self.data = sorted(data) + self.size = len(self.data) + self.max_value = max(self.data) + self.min_value = min(self.data) + + if self.min_value != self.max_value: + self.classes = round(1.0 + 3.32 * math.log10(self.size)) + else: + self.classes = 1 + self.step = (self.max_value - self.min_value) / self.classes + + def ranges(self, reduced=False): + ranges = list() + + for klass in range(int(self.classes)): + range_l = int(self.min_value + self.step * klass) + range_r = int(self.min_value + self.step * (klass + 1)) + + if reduced: + try: + order = 1 + int(100 / self.step) + except: + order = 1 + + range_l = round(range_l / 1000.0, order) + range_r = round(range_r / 1000.0, order) + + ranges.append(str(range_l) + " - " + str(range_r)) + + return ranges + + def frequencies(self): + """ + Class (column) frequencies + """ + + frequencies = list() + + for index in range(int(self.classes)): + frequencies.append(0) + + step = self.min_value + self.step + + index = 0 + + for value in self.data: + if value <= step: + frequencies[index] += 1 + else: + while value > step + 1: + step += self.step + index += 1 + try: + frequencies[index + 1] += 1 + except: + frequencies[index] += 1 + + for index in range(int(self.classes)): + frequencies[index] = round(frequencies[index] * 100.0 / self.size, + 1) + + return frequencies diff --git a/harstorage/lib/MongoHandler.py b/harstorage/lib/MongoHandler.py new file mode 100644 index 0000000..97ce069 --- /dev/null +++ b/harstorage/lib/MongoHandler.py @@ -0,0 +1,57 @@ +import pymongo + +from pylons import config, tmpl_context as c + + +class MongoDB(): + + """ + Interface for MongoDB database + """ + + def __init__(self, collection="results"): + """Initilize connection and check indeces""" + + try: + # MongoDB URI + uri = self.make_uri() + + # Database + database = config["app_conf"]["mongo_db"] + + # Collection + # Updated the mongo client connection for the collection + # We could also use MongoReplicaSetClient for dealing with replica sets. + replicate = config["app_conf"]["mongo_replicate"] + + if replicate == "true": + self.collection = pymongo.MongoReplicaSetClient(host=uri,port=int(config["app_conf"]["mongo_port"]),replicaSet=(config["app_conf"]["mongo_replset"]))[database][collection] + else: + self.collection = pymongo.mongo_client.MongoClient(host=uri,port=int(config["app_conf"]["mongo_port"]))[database][collection] + + # Indecies + self.ensure_index() + except Exception as error: + # Exception type: Exception message + c.message = ": ".join([type(error).__name__, error.message]) + + def make_uri(self): + # Connection handler + host = config["app_conf"]["mongo_host"] + port = config["app_conf"]["mongo_port"] + auth = config["app_conf"]["mongo_auth"] + + uri = "mongodb://" + + if auth == "true": + user = config["app_conf"]["mongo_user"] + pswd = config["app_conf"]["mongo_pswd"] + uri += user + ":" + pswd + "@" + + return uri + host + ":" + port + + def ensure_index(self): + self.collection.ensure_index([("label", 1), ("timestamp", -1)]) + self.collection.ensure_index([("label", 1), ("timestamp", 1)]) + self.collection.ensure_index([("url", 1), ("timestamp", -1)]) + self.collection.ensure_index([("url", 1), ("timestamp", 1)]) diff --git a/harstorage/lib/__init__.py b/harstorage/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/lib/app_globals.py b/harstorage/lib/app_globals.py new file mode 100644 index 0000000..d8f7860 --- /dev/null +++ b/harstorage/lib/app_globals.py @@ -0,0 +1,18 @@ +from beaker.cache import CacheManager +from beaker.util import parse_cache_config_options + + +class Globals(object): + + """Globals acts as a container for objects available throughout the + life of the application + + """ + + def __init__(self, config): + """One instance of Globals is created during application + initialization and is available during requests via the + 'app_globals' variable + + """ + self.cache = CacheManager(**parse_cache_config_options(config)) diff --git a/harstorage/lib/base.py b/harstorage/lib/base.py new file mode 100644 index 0000000..059159a --- /dev/null +++ b/harstorage/lib/base.py @@ -0,0 +1,22 @@ +from pylons.controllers import WSGIController +from pylons.templating import render_mako as render + + +class BaseController(WSGIController): + + """ + The base Controller API + + Provides the BaseController class for subclassing. + """ + + def __call__(self, environ, start_response): + """Invoke the Controller""" + + # WSGIController.__call__ dispatches to the Controller method + # the request is routed to. This routing information is + # available in environ['pylons.routes_dict'] + try: + return WSGIController.__call__(self, environ, start_response) + finally: + None diff --git a/harstorage/lib/helpers.py b/harstorage/lib/helpers.py new file mode 100644 index 0000000..4b0dee3 --- /dev/null +++ b/harstorage/lib/helpers.py @@ -0,0 +1,10 @@ +"""Helper functions""" + +from routes import url_for +from webhelpers.html.tags import * + + +def decode_uri(URI): + """Decode JavaScript encodeURIComponent""" + + return URI.replace("&", "&") diff --git a/harstorage/public/favicon.ico b/harstorage/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f57fd78e1e812e1643acd969b8f410d2765b03c6 GIT binary patch literal 1150 zcmbW0y-yQy7{`B=E5_Euv%C~*goY3SE2S@>4Yj0*+=+dmua<-k;^e9j9ooUg)v!t2 zATch6&5dA4G;zQ(IFOTtKR`QBV_OsR^?81^3C47&*L?1t`#zuV4Q)>d6Ma-w(Ag;- zC_?lKAw~#_C~4$$5rTF$YXf;tC%bABCX>lctkG?WI3&KbfOjQ!xnozmMW>}IWvA0@cAvFco?9(vV6|A%6+xWmC~j*wk}4ZB~em7AVqTmpjDXMMs}O zz;VHjtF9}E$70a6Im9FL$fX|c_ z<*&_HI_z?XyQ9NH#>nL%IQn`}EEc3!tCW%5_=ujZnuKT0_+W=!?r_&L<}${|T=cAd z6bp_1T~)&K6Ut!$~6gE$HD87U*|pc;@V+BWLQS7NTpZcoeC4k6bw4j<_%pQ^ZV)53ljQ{`u literal 0 HcmV?d00001 diff --git a/harstorage/public/images/add_button.png b/harstorage/public/images/add_button.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d358082feefab5dd6204e92b0882762f655a14 GIT binary patch literal 1284 zcmV+f1^fDmP)p#{_OhyjbV)MzRdiD-F9TkV^++kJF*yR$QMytCacTi8ZoV!X-C*?aG~=XdAa z|D0Kb|G44*4%pS2&T%|G$4Pn_iuz;W$&k=T3g4os^uwXDVf|kLcD1HTqM3WcKM~xg z56N>=LiuE&bYwINpcBT#JAj$v17>UDe#J+J4wsE6j|_OdB{hpn(CYoSYZtuzo?E^~cw^DK4PqqOCG8N@vUMyTM_1 zpf!Uhjswt0Ls^+m&)c^m%Mi78*FzxbPY`&40f~HL8ua$};^pDPWJwp+9b4r(9~bb- zH`a@(-o+IwmQ;eACQi@mx(YU>5K8P@!{e5&6W~j_4Lr|J`}oFHXuf(D#%(vhtzF|? z^$=iNlbo!E^m{AkZx?d&<{Fo1WIOz*nyz75=xHjkZwo&`OZN$I%fA563C8}g4})P( zPd_zx)v1ywX4by!a?Jo#e=V<&$ok!uk{XgE9>x_n=7}#5%Q=t+m}^}|4og88(C_{O zZjbzATsE>bx-rxOk1tI@c0j7Xatu^HP+nK%x;z80r9s~8NXl+_Y5D5#iA3FwtCHWR zDfM7DaMa#c)zrAQ<3q6I52Ju4y4Z06?s*2QYd1Pi%>Znwlh@6+&pT7GWMz0PX!Bro z$_MZ$?da9L5X!v*nZjad{k0AHh6mTzZg!rX0oZs5+`&b4)y|s_si^9RrF&Cl@d8;& zVhbX>J)KE32#P)l*^|4W)Ls+zyWI5^^e2D8E}5I&%kdn9R25F2@8~)G>O@XlnXdcH zvj3^&j=j$m7DU$~D$+4?Vkc8kO+-b4P_;T!jqYKz#$hdY=8AyAw$eJBnt!V4)PcJfMY2#;{QI<4VT(F)zCP% zrRi;Nb#0o0Xq^7VcItktZ9fy9_I( zp7u|a=6G@90Z=dlCZ-}LBx9mE1GgsUaGUK*g%XnulMIKThulLQ>i6z${giK%PAVP> z1jdLIUpQkF4`5U+X_hWVyJQ2av4?#ECYV)O53#PqSfdAHeybP*5@Lfzf=B0s$RVP_ uH%_TVAn`!adHqrTRp0{_Vj!_LZu=VqMK?Dw1{Ku+0000Px(4@pEpR5(v{Rah2DEX(5CdEQE5(1X-tA?T%E_@^5y))wTI_Uoa@rN2qT@!6-j}b zU1#@c{^``|ss3nxr~54;!M(h-yk1;C9Umctz+omsCly@az+Q+cin3y@WO_4W$H&@6 zaSJhUy;TNdOg zrLo=E=<(5j9)RXjy(HL?#F|qBaHFt(rtb_VvMQEM?Lw{4ZFIMZ1Re7jQj;Ccf(6_B z+k9>(rx?wkNXk3=oy}~(TSSNm@?BQTg-Su!bs1^rxo3>93;h=^e{xxb^GR;$`#*nR z0Va(0Jg>w`2nFESiU%qI<1_y?c^!A-vf6qtK^htx8WY~l{V_McHXjOvh(mZW6846@ z0ffJXX1X|$sfSgj`W|gajcsi^Ov0+Ha^r~-i*#cFosU)@If~@deSd_)(4YlfNEF(;KI00HNR;D+ZD!&%31DB#U0VN$6_ z>AC&&cXz(MGyBc#Xefh(@bf(xh`Fwt9nJy{5?;{Y`)YhT5lrw}B|KS}#3M;HIgmJs z+f+|#C^1A`+P>w<@%@C6m>!>oK=WBO2UgcUzh+3NPwqdjX(s2&xrOBgYu9@4`-7kV znHQZ?42VH^=8KtjC;6a_EdITC>z7;TiU_tKvl})_O4GDpFbHY^gW-l|T>bRw#g8wx z+sOV_yJ2nIn7grK@93(2ux$h85ie;buTNc1C)0bmY5KI6NWKyD_}=~XE*?(Rtva3~ z${04HN+L$&(npuBOk6qmgE+GJqb20FatKhZUW1R3U?kO@8aXi%G=iOmwAY6dwLL$G bIqK>?$JLpN0B@ym00000NkvXXu0mjfdO;K6 literal 0 HcmV?d00001 diff --git a/harstorage/public/images/pylons.png b/harstorage/public/images/pylons.png new file mode 100644 index 0000000000000000000000000000000000000000..5463ef8cac9d26d23b849164a69b926618e00a82 GIT binary patch literal 1098 zcmV-Q1hxB#P)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px(1W80eR7gv$R?TZ%RTTf-J9nm&EF$8BYNUylnlWk@76a*~)Ic$AY?PE}D~MKI zy0E%Y+JZti+WHTOXd}|PP(&28YDJK2{D2lLG$o}0%9`@bD6KAV{WewVBW)MY z9{>DU5S?h?ncdIlwGZzA`pq=uekwZulazu|n#$q5p!9(+j(u8Dqq}x%1ph8~-%7=} zg8Ybc@wApK>e1BXX(XiqF`;k>8NFZa938u#d((tRY~QNkmC~i7ROyTcEp9X}__3Hl z{JEvbSHm+R5m+43n6b_dOBrtFKtj;Efno@P$*OgWr<55s-iCZE_6jv{K1D8@!NbKK zZ0uW)_1$;i((E-%pTC5^re=^N9+}Lt-Xbz=g1iadrnDnCwMkkZaA#K@FF!Yg(UC2{ zx*U*L&?~T*;H&Tc#D||v;>uhFS>k^K#R6xPPmT3Xz*{zNX@=Kc+KL@R_aZ4>1WK)9 zPi^l(NB&V9IQ$C>+~y<-2SRMT3#@syD9uzM3_G^=V5pddy*?AsYz{@zwpQ`nVB3~% zoS6I<`CO*WjtUyad0T6&*7KBE^lwPfmAg!2Ld5b$JjH2OPE!u}{#OU7UmIquJPYp- zT5h-^&s=JP9WPvG!R zgD{I%p(row`#%oiRqi)WY|#__7JDM^0=sLegB2rj;8<%Exi&lY9Xg8BXD;B}ncuK! z;4!?htFJ24G+RW^O5tOS)j-+7FqSvCxpO4tQ>RYj$dM0FsZ?4z$`}JG6rCCj=vbh}Rm|V!ER5)7H z&n77^mQ{7`wA?kFF)fj<<;Am;gliP-@lr1sm)aA`>L+jW_oP}B&frvqAJn>BXD>g= z`~%QPaV=5bM5a3C2~O~;FT>6*vGsU=!Z2BpnPJNcnZ|42Ha#EwewQwOQx7P|%nruv zZXX|{aejc9l3_tP9JL+w+M);)AW%5b#alZUbdqM2~2N?8(TEeP? QfdBvi07*qoM6N<$f-%|n2$sVLmV|IeV1#@91}%xMG%A^37_7Z$q9XTVL*s!gnR{Sw2sBd zC}lc#T3cGe)YYr(DdK_ALgAau05hF~gC9hW9t9~B+BydvQY#c77mvf*-MinuT`W#K z2bd28!UCn4SB@PM{R0C4hJnn!P^{ZA*l3;WnRPdUfaRqn_Q%we&SbfLZ!VW_1}MsS zi=uqrd*TEmk_6ecHB`pN%&=GhE>?)J9x7;zn@(u6vmkYLBCXZfgDY2{TB*Fp0Y5YW zehLH*2Y2nd_VWJymWM^2^Bt#8*H2*X&ZW_ABvt*peBlCMI*s7-QCc2=FGO@Up#jXU}gq{-Me9BejZAx)WP9w_GS~{mte5J zMUobKMn@U)+)v3eDiag+aG1`UCvXW7;WOIwGN=z~P4^&vw5MF2-Ykq85T9?7NBtu2N>M?8RvuuFT`IsX zb>^+8{N9s>VSd*5{HdWz<%<{HQGeC5ewAnJX_6N` zmBVRs6#oVYb%$J4GL;)jU5I9SVT!R5-$ge=W2@%Sbw^)E2S{ve=AxqQ1hMT+FAb0){for(var a=0;a=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this); \ No newline at end of file diff --git a/harstorage/public/scripts/chosen.jquery.js b/harstorage/public/scripts/chosen.jquery.js new file mode 100644 index 0000000..956875c --- /dev/null +++ b/harstorage/public/scripts/chosen.jquery.js @@ -0,0 +1,796 @@ +// Chosen, a Select Box Enhancer for jQuery and Protoype +// by Patrick Filler for Harvest, http://getharvest.com +// +// Version 0.9.1 +// Full source at https://github.com/harvesthq/chosen +// Copyright (c) 2011 Harvest http://getharvest.com + +// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +// This file is generated by `cake build`, do not edit it by hand. +(function() { + /* + Chosen source: generate output using 'cake build' + Copyright (c) 2011 by Harvest + */ var $, Chosen, get_side_border_padding, root; + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + root = this; + $ = jQuery; + $.fn.extend({ + chosen: function(data, options) { + if ($.browser === "msie" && ($.browser.version === "6.0" || $.browser.version === "7.0")) { + return this; + } + return $(this).each(function(input_field) { + if (!($(this)).hasClass("chzn-done")) { + return new Chosen(this, data, options); + } + }); + } + }); + Chosen = (function() { + function Chosen(elmn) { + this.set_default_values(); + this.form_field = elmn; + this.form_field_jq = $(this.form_field); + this.is_multiple = this.form_field.multiple; + this.is_rtl = this.form_field_jq.hasClass("chzn-rtl"); + this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option"; + this.set_up_html(); + this.register_observers(); + this.form_field_jq.addClass("chzn-done"); + } + Chosen.prototype.set_default_values = function() { + this.click_test_action = __bind(function(evt) { + return this.test_active_click(evt); + }, this); + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.result_single_selected = null; + return this.choices = 0; + }; + Chosen.prototype.set_up_html = function() { + var container_div, dd_top, dd_width, sf_width; + this.container_id = this.form_field.id.length ? this.form_field.id.replace(/(:|\.)/g, '_') : this.generate_field_id(); + this.container_id += "_chzn"; + this.f_width = this.form_field_jq.width(); + this.default_text = this.form_field_jq.data('placeholder') ? this.form_field_jq.data('placeholder') : this.default_text_default; + container_div = $("
      ", { + id: this.container_id, + "class": "chzn-container " + (this.is_rtl ? 'chzn-rtl' : ''), + style: 'width: ' + this.f_width + 'px;' + }); + if (this.is_multiple) { + container_div.html('
        '); + } else { + container_div.html('' + this.default_text + '
          '); + } + this.form_field_jq.hide().after(container_div); + this.container = $('#' + this.container_id); + this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single")); + this.dropdown = this.container.find('div.chzn-drop').first(); + dd_top = this.container.height(); + dd_width = this.f_width - get_side_border_padding(this.dropdown); + this.dropdown.css({ + "width": dd_width + "px", + "top": dd_top + "px" + }); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chzn-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chzn-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chzn-search').first(); + this.selected_item = this.container.find('.chzn-single').first(); + sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field); + this.search_field.css({ + "width": sf_width + "px" + }); + } + this.results_build(); + return this.set_tab_index(); + }; + Chosen.prototype.register_observers = function() { + this.container.mousedown(__bind(function(evt) { + return this.container_mousedown(evt); + }, this)); + this.container.mouseenter(__bind(function(evt) { + return this.mouse_enter(evt); + }, this)); + this.container.mouseleave(__bind(function(evt) { + return this.mouse_leave(evt); + }, this)); + this.search_results.mouseup(__bind(function(evt) { + return this.search_results_mouseup(evt); + }, this)); + this.search_results.mouseover(__bind(function(evt) { + return this.search_results_mouseover(evt); + }, this)); + this.search_results.mouseout(__bind(function(evt) { + return this.search_results_mouseout(evt); + }, this)); + this.form_field_jq.bind("liszt:updated", __bind(function(evt) { + return this.results_update_field(evt); + }, this)); + this.search_field.blur(__bind(function(evt) { + return this.input_blur(evt); + }, this)); + this.search_field.keyup(__bind(function(evt) { + return this.keyup_checker(evt); + }, this)); + this.search_field.keydown(__bind(function(evt) { + return this.keydown_checker(evt); + }, this)); + if (this.is_multiple) { + this.search_choices.click(__bind(function(evt) { + return this.choices_click(evt); + }, this)); + return this.search_field.focus(__bind(function(evt) { + return this.input_focus(evt); + }, this)); + } else { + return this.selected_item.focus(__bind(function(evt) { + return this.activate_field(evt); + }, this)); + } + }; + Chosen.prototype.container_mousedown = function(evt) { + if (evt && evt.type === "mousedown") { + evt.stopPropagation(); + } + if (!this.pending_destroy_click) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(document).click(this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } else { + return this.pending_destroy_click = false; + } + }; + Chosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + Chosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + Chosen.prototype.input_focus = function(evt) { + if (!this.active_field) { + return setTimeout((__bind(function() { + return this.container_mousedown(); + }, this)), 50); + } + }; + Chosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((__bind(function() { + return this.blur_test(); + }, this)), 100); + } + }; + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chzn-container-active")) { + return this.close_field(); + } + }; + Chosen.prototype.close_field = function() { + $(document).unbind("click", this.click_test_action); + if (!this.is_multiple) { + this.selected_item.attr("tabindex", this.search_field.attr("tabindex")); + this.search_field.attr("tabindex", -1); + } + this.active_field = false; + this.results_hide(); + this.container.removeClass("chzn-container-active"); + this.winnow_results_clear(); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + Chosen.prototype.activate_field = function() { + if (!this.is_multiple && !this.active_field) { + this.search_field.attr("tabindex", this.selected_item.attr("tabindex")); + this.selected_item.attr("tabindex", -1); + } + this.container.addClass("chzn-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + Chosen.prototype.test_active_click = function(evt) { + if ($(evt.target).parents('#' + this.container_id).length) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + Chosen.prototype.results_build = function() { + var content, data, startTime, _i, _len, _ref; + startTime = new Date(); + this.parsing = true; + this.results_data = root.SelectParser.select_to_array(this.form_field); + if (this.is_multiple && this.choices > 0) { + this.search_choices.find("li.search-choice").remove(); + this.choices = 0; + } else if (!this.is_multiple) { + this.selected_item.find("span").text(this.default_text); + } + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else if (!data.empty) { + content += this.result_add_option(data); + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.selected_item.find("span").text(data.text); + } + } + } + this.show_search_field_default(); + this.search_field_scale(); + this.search_results.html(content); + return this.parsing = false; + }; + Chosen.prototype.result_add_group = function(group) { + if (!group.disabled) { + group.dom_id = this.container_id + "_g_" + group.array_index; + return '
        • ' + $("
          ").text(group.label).html() + '
        • '; + } else { + return ""; + } + }; + Chosen.prototype.result_add_option = function(option) { + var classes; + if (!option.disabled) { + option.dom_id = this.container_id + "_o_" + option.array_index; + classes = option.selected && this.is_multiple ? [] : ["active-result"]; + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + return '
        • ' + option.html + '
        • '; + } else { + return ""; + } + }; + Chosen.prototype.results_update_field = function() { + this.result_clear_highlight(); + this.result_single_selected = null; + return this.results_build(); + }; + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + Chosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.results_show = function() { + var dd_top; + if (!this.is_multiple) { + this.selected_item.addClass("chzn-single-with-drop"); + if (this.result_single_selected) { + this.result_do_highlight(this.result_single_selected); + } + } + dd_top = this.is_multiple ? this.container.height() : this.container.height() - 1; + this.dropdown.css({ + "top": dd_top + "px", + "left": 0 + }); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.search_field.val()); + return this.winnow_results(); + }; + Chosen.prototype.results_hide = function() { + if (!this.is_multiple) { + this.selected_item.removeClass("chzn-single-with-drop"); + } + this.result_clear_highlight(); + this.dropdown.css({ + "left": "-9000px" + }); + return this.results_showing = false; + }; + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field_jq.attr("tabindex")) { + ti = this.form_field_jq.attr("tabindex"); + this.form_field_jq.attr("tabindex", -1); + if (this.is_multiple) { + return this.search_field.attr("tabindex", ti); + } else { + this.selected_item.attr("tabindex", ti); + return this.search_field.attr("tabindex", -1); + } + } + }; + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices < 1 && !this.active_field) { + this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + return this.result_select(evt); + } + }; + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { + return this.result_clear_highlight(); + } + }; + Chosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) { + return this.results_show(); + } + }; + Chosen.prototype.choice_build = function(item) { + var choice_id, link; + choice_id = this.container_id + "_c_" + item.array_index; + this.choices += 1; + this.search_container.before('
        • ' + item.html + '
        • '); + link = $('#' + choice_id).find("a").first(); + return link.click(__bind(function(evt) { + return this.choice_destroy_link_click(evt); + }, this)); + }; + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + this.pending_destroy_click = true; + return this.choice_destroy($(evt.target)); + }; + Chosen.prototype.choice_destroy = function(link) { + this.choices -= 1; + this.show_search_field_default(); + if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + this.result_deselect(link.attr("rel")); + return link.parents('li').first().remove(); + }; + Chosen.prototype.result_select = function(evt) { + var high, high_id, item, position; + if (this.result_highlight) { + high = this.result_highlight; + high_id = high.attr("id"); + this.result_clear_highlight(); + high.addClass("result-selected"); + if (this.is_multiple) { + this.result_deactivate(high); + } else { + this.result_single_selected = high; + } + position = high_id.substr(high_id.lastIndexOf("_") + 1); + item = this.results_data[position]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.selected_item.find("span").first().text(item.text); + } + if (!(evt.metaKey && this.is_multiple)) { + this.results_hide(); + } + this.search_field.val(""); + this.form_field_jq.trigger("change"); + return this.search_field_scale(); + } + }; + Chosen.prototype.result_activate = function(el) { + return el.addClass("active-result").show(); + }; + Chosen.prototype.result_deactivate = function(el) { + return el.removeClass("active-result").hide(); + }; + Chosen.prototype.result_deselect = function(pos) { + var result, result_data; + result_data = this.results_data[pos]; + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + result = $("#" + this.container_id + "_o_" + pos); + result.removeClass("result-selected").addClass("active-result").show(); + this.result_clear_highlight(); + this.winnow_results(); + this.form_field_jq.trigger("change"); + return this.search_field_scale(); + }; + Chosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.winnow_results = function() { + var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; + startTime = new Date(); + this.no_results_clear(); + results = 0; + searchText = this.search_field.val() === this.default_text ? "" : $('
          ').text($.trim(this.search_field.val())).html(); + regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (!option.disabled && !option.empty) { + if (option.group) { + $('#' + option.dom_id).hide(); + } else if (!(this.is_multiple && option.selected)) { + found = false; + result_id = option.dom_id; + if (regex.test(option.html)) { + found = true; + results += 1; + } else if (option.html.indexOf(" ") >= 0 || option.html.indexOf("[") === 0) { + parts = option.html.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_j = 0, _len2 = parts.length; _j < _len2; _j++) { + part = parts[_j]; + if (regex.test(part)) { + found = true; + results += 1; + } + } + } + } + if (found) { + if (searchText.length) { + startpos = option.html.search(zregex); + text = option.html.substr(0, startpos + searchText.length) + '' + option.html.substr(startpos + searchText.length); + text = text.substr(0, startpos) + '' + text.substr(startpos); + } else { + text = option.html; + } + if ($("#" + result_id).html !== text) { + $("#" + result_id).html(text); + } + this.result_activate($("#" + result_id)); + if (option.group_array_index != null) { + $("#" + this.results_data[option.group_array_index].dom_id).show(); + } + } else { + if (this.result_highlight && result_id === this.result_highlight.attr('id')) { + this.result_clear_highlight(); + } + this.result_deactivate($("#" + result_id)); + } + } + } + } + if (results < 1 && searchText.length) { + return this.no_results(searchText); + } else { + return this.winnow_results_set_highlight(); + } + }; + Chosen.prototype.winnow_results_clear = function() { + var li, lis, _i, _len, _results; + this.search_field.val(""); + lis = this.search_results.find("li"); + _results = []; + for (_i = 0, _len = lis.length; _i < _len; _i++) { + li = lis[_i]; + li = $(li); + _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0); + } + return _results; + }; + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high, selected_results; + if (!this.result_highlight) { + selected_results = !this.is_multiple ? this.search_results.find(".result-selected") : []; + do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); + if (do_high != null) { + return this.result_do_highlight(do_high); + } + } + }; + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = $('
        • No results match ""
        • '); + no_results_html.find("span").first().html(terms); + return this.search_results.append(no_results_html); + }; + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + Chosen.prototype.keydown_arrow = function() { + var first_active, next_sib; + if (!this.result_highlight) { + first_active = this.search_results.find("li.active-result").first(); + if (first_active) { + this.result_do_highlight($(first_active)); + } + } else if (this.results_showing) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + this.result_do_highlight(next_sib); + } + } + if (!this.results_showing) { + return this.results_show(); + } + }; + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + Chosen.prototype.keydown_backstroke = function() { + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); + return this.pending_backstroke.addClass("search-choice-focus"); + } + }; + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + Chosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + return this.results_hide(); + } + break; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.val().length; + break; + case 9: + this.mouse_on_container = false; + break; + case 13: + evt.preventDefault(); + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + this.keydown_arrow(); + break; + } + }; + Chosen.prototype.search_field_scale = function() { + var dd_top, div, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.css(style) + ";"; + } + div = $('
          ', { + 'style': style_block + }); + div.text(this.search_field.val()); + $('body').append(div); + w = div.width() + 25; + div.remove(); + if (w > this.f_width - 10) { + w = this.f_width - 10; + } + this.search_field.css({ + 'width': w + 'px' + }); + dd_top = this.container.height(); + return this.dropdown.css({ + "top": dd_top + "px" + }); + } + }; + Chosen.prototype.generate_field_id = function() { + var new_id; + new_id = this.generate_random_id(); + this.form_field.id = new_id; + return new_id; + }; + Chosen.prototype.generate_random_id = function() { + var string; + string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char(); + while ($("#" + string).length > 0) { + string += this.generate_random_char(); + } + return string; + }; + Chosen.prototype.generate_random_char = function() { + var chars, newchar, rand; + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; + rand = Math.floor(Math.random() * chars.length); + return newchar = chars.substring(rand, rand + 1); + }; + return Chosen; + })(); + get_side_border_padding = function(elmt) { + var side_border_padding; + return side_border_padding = elmt.outerWidth() - elmt.width(); + }; + root.get_side_border_padding = get_side_border_padding; +}).call(this); +(function() { + var SelectParser; + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + SelectParser.prototype.add_node = function(child) { + if (child.nodeName === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + children: 0, + disabled: group.disabled + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + return SelectParser; + })(); + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + this.SelectParser = SelectParser; +}).call(this); + +$(".chosen-select").chosen(); diff --git a/harstorage/public/scripts/datatables/ColReorder.min.js b/harstorage/public/scripts/datatables/ColReorder.min.js new file mode 100644 index 0000000..8a1cf41 --- /dev/null +++ b/harstorage/public/scripts/datatables/ColReorder.min.js @@ -0,0 +1,34 @@ +/* + * File: ColReorder.min.js + * Version: 1.0.4 + * Author: Allan Jardine (www.sprymedia.co.uk) + * + * Copyright 2010-2011 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD (3 point) style license, as supplied with this software. + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + */ +(function(f,o,i){function m(a){for(var c=[],d=0,b=a.length;d=h)this.oApi._fnLog(a,1,"ColReorder 'from' index is out of bounds: "+c);else if(d<0||d>= +h)this.oApi._fnLog(a,1,"ColReorder 'to' index is out of bounds: "+d);else{g=[];b=0;for(e=h;bthis.s.fixed-1&&this._fnMouseListener(c,this.s.dt.aoColumns[c].nTh);this.s.dt.aoColumns[c]._ColReorder_iOrigCol= +c}this.s.dt.aoStateSave.push({fn:function(h,g){return a._fnStateSave.call(a,g)},sName:"ColReorder_State"});var b=null;if(typeof this.s.init.aiOrder!="undefined")b=this.s.init.aiOrder.slice();if(this.s.dt.oLoadedState&&typeof this.s.dt.oLoadedState.ColReorder!="undefined"&&this.s.dt.oLoadedState.ColReorder.length==this.s.dt.aoColumns.length)b=this.s.dt.oLoadedState.ColReorder;if(b)if(a.s.dt._bInitComplete){c=m(b);a._fnOrderColumns.call(a,c)}else{var e=false;this.s.dt.aoDrawCallback.push({fn:function(){if(!a.s.dt._bInitComplete&& +!e){e=true;var h=m(b);a._fnOrderColumns.call(a,h)}},sName:"ColReorder_Pre"})}},_fnOrderColumns:function(a){if(a.length!=this.s.dt.aoColumns.length)this.s.dt.oInstance.oApi._fnLog(oDTSettings,1,"ColReorder - array reorder does not match known number of columns. Skipping.");else{for(var c=0,d=a.length;c0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("caption")[0]);for(;this.dom.drag.getElementsByTagName("tbody").length>0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("tbody")[0]);for(;this.dom.drag.getElementsByTagName("tfoot").length> +0;)this.dom.drag.removeChild(this.dom.drag.getElementsByTagName("tfoot")[0]);f("thead tr:eq(0)",this.dom.drag).each(function(){f("th:not(:eq("+a.s.mouse.targetIndex+"))",this).remove()});f("tr",this.dom.drag).height(f("tr:eq(0)",a.s.dt.nTHead).height());f("thead tr:gt(0)",this.dom.drag).remove();f("thead th:eq(0)",this.dom.drag).each(function(){this.style.width=f("th:eq("+a.s.mouse.targetIndex+")",a.s.dt.nTHead).width()+"px"});this.dom.drag.style.position="absolute";this.dom.drag.style.top="0px"; +this.dom.drag.style.left="0px";this.dom.drag.style.width=f("th:eq("+a.s.mouse.targetIndex+")",a.s.dt.nTHead).outerWidth()+"px";this.dom.pointer=i.createElement("div");this.dom.pointer.className="DTCR_pointer";this.dom.pointer.style.position="absolute";if(this.s.dt.oScroll.sX===""&&this.s.dt.oScroll.sY===""){this.dom.pointer.style.top=f(this.s.dt.nTable).offset().top+"px";this.dom.pointer.style.height=f(this.s.dt.nTable).height()+"px"}else{this.dom.pointer.style.top=f("div.dataTables_scroll",this.s.dt.nTableWrapper).offset().top+ +"px";this.dom.pointer.style.height=f("div.dataTables_scroll",this.s.dt.nTableWrapper).height()+"px"}i.body.appendChild(this.dom.pointer);i.body.appendChild(this.dom.drag)}};ColReorder.aoInstances=[];ColReorder.fnReset=function(a){for(var c=0,d=ColReorder.aoInstances.length;c'}else c+='';return c},hide:function(){if(this.div)this.div.style.left="-2000px"},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){if(a)(this.domElement=ZeroClipboard.$(a))||this.hide();if(this.domElement&&this.div){a=ZeroClipboard.getDOMObjectPosition(this.domElement);var b= +this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)}, +setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=document.getElementById(this.movieId); +if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=true;return}this.ready=true;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled); +break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":if(this.domElement&&this.cssEffects){this.recoverActive=false;if(this.domElement.hasClass("active")){this.domElement.removeClass("active");this.recoverActive=true}}break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":if(this.domElement&&this.cssEffects){this.domElement.removeClass("active");this.recoverActive= +false}break}if(this.handlers[a])for(var d=0,f=this.handlers[a].length;d0)b=a[0].innerHTML}return"\u00a1".toString().length<4?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns;a=this._fnColumnTargets(a.mColumns);var c=[],d=0,f=0,h,g;h=0;for(g=a.length;hg?h:g)+"px";l.style.width=(k>m?k:m)+"px";l.className="DTTT_collection_background";e(l).css("opacity",0);j.body.appendChild(l);j.body.appendChild(f);h=e(f).outerWidth();k=e(f).outerHeight();if(b+h>m)f.style.left=m-h+"px";if(d+k>g)f.style.top=d-k-e(a).outerHeight()+"px";this.dom.collection.collection=f;this.dom.collection.background=l;setTimeout(function(){e(f).animate({opacity:1},500);e(l).animate({opacity:0.25},500)},10);e(l).click(function(){c._fnCollectionHide.call(c, +null,null)})},_fnCollectionHide:function(a,b){if(!(b!==null&&b.sExtends=="collection"))if(this.dom.collection.collection!==null){e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display="none"});e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)});this.dom.collection.collection=null;this.dom.collection.background=null}},_fnRowSelectConfig:function(){if(this.s.master){var a=this,b,c,d=this.s.dt.aoOpenRows;e(a.s.dt.nTable).addClass("DTTT_selectable"); +e("tr",a.s.dt.nTBody).live("click",function(f){if(this.parentNode==a.s.dt.nTBody){b=0;for(c=d.length;b=0;a--)this._fnRowDeselect(a);this.s.select.all=false;TableTools._fnEventDispatch(this,"select",null)}},_fnRowDeselect:function(a){if(typeof a.nodeName!="undefined")a=e.inArray(a,this.s.select.selected);var b=this.s.select.selected[a];e(b).removeClass(this.s.select.selectedClass);this.s.select.selected.splice(a,1);this.s.select.postDeselected!==null&&this.s.select.postDeselected.call(this,b);this.s.select.all=false},_fnTextConfig:function(a,b){var c=this;b.fnInit!== +null&&b.fnInit.call(this,a,b);if(b.sToolTip!=="")a.title=b.sToolTip;e(a).hover(function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover);b.fnMouseover!==null&&b.fnMouseover.call(this,a,b,null)},function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass);b.fnMouseout!==null&&b.fnMouseout.call(this,a,b,null)});b.fnSelect!==null&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();b.fnClick!==null&&b.fnClick.call(c, +a,b,null);b.fnComplete!==null&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})},_fnFlashConfig:function(a,b){var c=this,d=new ZeroClipboard.Client;b.fnInit!==null&&b.fnInit.call(this,a,b);d.setHandCursor(true);if(b.sAction=="flash_save"){d.setAction("save");d.setCharSet(b.sCharSet=="utf16le"?"UTF16LE":"UTF8");d.setBomInc(b.bBomInc);d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))}else if(b.sAction=="flash_pdf"){d.setAction("pdf");d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))}else d.setAction("copy"); +d.addEventListener("mouseOver",function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover);b.fnMouseover!==null&&b.fnMouseover.call(c,a,b,d)});d.addEventListener("mouseOut",function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass);b.fnMouseout!==null&&b.fnMouseout.call(c,a,b,d)});d.addEventListener("mouseDown",function(){b.fnClick!==null&&b.fnClick.call(c,a,b,d)});d.addEventListener("complete",function(f,h){b.fnComplete!==null&&b.fnComplete.call(c,a,b,d,h);c._fnCollectionHide(a, +b)});this._fnFlashGlue(d,a,b.sToolTip)},_fnFlashGlue:function(a,b,c){var d=this,f=b.getAttribute("id");if(j.getElementById(f)){a.glue(b,c);if(a.domElement.parentNode!=a.div.parentNode&&typeof d.__bZCWarning=="undefined"){d.s.dt.oApi._fnLog(this.s.dt,0,"It looks like you are using the version of ZeroClipboard which came with TableTools 1. Please update to use the version that came with TableTools 2.");d.__bZCWarning=true}}else setTimeout(function(){d._fnFlashGlue(a,b,c)},100)},_fnFlashSetText:function(a, +b){b=this._fnChunkData(b,8192);a.clearText();for(var c=0,d=b.length;c/g,"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary, +m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1);h+=o}d=0;for(f=k.aiDisplay.length;d]+)).*?>/gi,"$1$2$3");g=g.replace(/<.*?>/g,"")}else g=g+"";g=g.replace(/^\s+/,"").replace(/\s+$/, +"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary,m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1);h+=o}h.slice(0,-1);if(a.bFooter){b=0;for(c=k.aoColumns.length;b/g,"");g=this._fnHtmlDecode(g);h+=this._fnBoundData(g,a.sFieldBoundary,m)+a.sFieldSeperator}h=h.slice(0,a.sFieldSeperator.length*-1)}return _sLastData=h},_fnBoundData:function(a,b,c){return b===""?a:b+ +a.replace(c,"\\"+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,f=0;f=8&&f>a[c].length-8){a[c].substr(f);a[c]=a[c].substr(0,f)}b.innerHTML=a[c];h+=b.childNodes[0].nodeValue}return h},_fnPrintConfig:function(a,b){var c= +this;b.fnInit!==null&&b.fnInit.call(this,a,b);e(a).hover(function(){e(a).removeClass(b.sButtonClass).addClass(b.sButtonClassHover)},function(){e(a).removeClass(b.sButtonClassHover).addClass(b.sButtonClass)});b.fnSelect!==null&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();c._fnPrintStart.call(c,d,b);b.fnClick!==null&&b.fnClick.call(c,a,b,null);b.fnComplete!==null&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})}, +_fnPrintStart:function(a,b){var c=this;a=this.s.dt;this._fnPrintHideNodes(a.nTable);this.s.print.saveStart=a._iDisplayStart;this.s.print.saveLength=a._iDisplayLength;if(b.bShowAll){a._iDisplayStart=0;a._iDisplayLength=-1;a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a)}if(a.oScroll.sX!==""||a.oScroll.sY!=="")this._fnPrintScrollStart(a);a=a.aanFeatures;for(var d in a)if(d!="i"&&d!="t"&&d.length==1)for(var f=0,h=a[d].length;f0&&a.nTable.removeChild(c[0]);if(a.nTFoot!==null){c=a.nTable.getElementsByTagName("tfoot");c.length>0&&a.nTable.removeChild(c[0])}c=a.nTHead.cloneNode(true);a.nTable.insertBefore(c,a.nTable.childNodes[0]); +if(a.nTFoot!==null){c=a.nTFoot.cloneNode(true);a.nTable.insertBefore(c,a.nTable.childNodes[1])}if(a.oScroll.sX!==""){a.nTable.style.width=e(a.nTable).outerWidth()+"px";b.style.width=e(a.nTable).outerWidth()+"px";b.style.overflow="visible"}if(a.oScroll.sY!==""){b.style.height=e(a.nTable).outerHeight()+"px";b.style.overflow="visible"}},_fnPrintScrollEnd:function(){var a=this.s.dt,b=a.nTable.parentNode;if(a.oScroll.sX!==""){b.style.width=a.oApi._fnStringToCss(a.oScroll.sX);b.style.overflow="auto"}if(a.oScroll.sY!== +""){b.style.height=a.oApi._fnStringToCss(a.oScroll.sY);b.style.overflow="auto"}},_fnPrintShowNodes:function(){for(var a=this.dom.print.hidden,b=0,c=a.length;bPrint view

          Please use your browser's print function to print this table. Press escape when finished.",sMessage:"",bShowAll:true,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonClassHover:"DTTT_button_print_hover", +sButtonText:"Print",fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null},text:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Text button",mColumns:"all",bHeader:true,bFooter:true,bSelectedOnly:false,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null},select:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover", +sButtonText:"Select button",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:function(a){this.fnGetSelected().length!==0?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")}},select_single:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select button",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null, +fnMouseout:null,fnClick:null,fnSelect:function(a){this.fnGetSelected().length==1?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")}},select_all:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select all",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length== +this.s.dt.fnRecordsDisplay()?e(a).addClass("DTTT_disabled"):e(a).removeClass("DTTT_disabled")},fnComplete:null,fnInit:null},select_none:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Deselect all",mColumns:"all",bHeader:true,bFooter:true,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectNone()},fnSelect:function(a){this.fnGetSelected().length!==0?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null, +fnInit:function(a){e(a).addClass("DTTT_disabled")}},ajax:{sAction:"text",sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"\n",sAjaxUrl:"/xhr.php",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Ajax button",mColumns:"all",bHeader:true,bFooter:true,bSelectedOnly:false,fnMouseover:null,fnMouseout:null,fnClick:function(a,b){a=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:a}],success:b.fnAjaxComplete,dataType:"json",type:"POST", +cache:false,error:function(){alert("Error detected when sending table data to server")}})},fnSelect:null,fnComplete:null,fnInit:null,fnAjaxComplete:function(){alert("Ajax complete")}},collection:{sAction:"collection",sToolTip:"",sButtonClass:"DTTT_button_collection",sButtonClassHover:"DTTT_button_collection_hover",sButtonText:"Collection",fnMouseover:null,fnMouseout:null,fnClick:function(a,b){this._fnCollectionShow(a,b)},fnSelect:null,fnComplete:null,fnInit:null}};TableTools.DEFAULTS={sSwfPath:"media/swf/copy_cvs_xls_pdf.swf", +sRowSelect:"none",sSelectedClass:"DTTT_selected",fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"]};TableTools.prototype.CLASS="TableTools";TableTools.VERSION="2.0.1";TableTools.prototype.VERSION=TableTools.VERSION;typeof e.fn.dataTable=="function"&&typeof e.fn.dataTableExt.fnVersionCheck=="function"&&e.fn.dataTableExt.fnVersionCheck("1.7.0")?e.fn.dataTableExt.aoFeatures.push({fnInit:function(a){a=new TableTools(a.oInstance,typeof a.oInit.oTableTools!= +"undefined"?a.oInit.oTableTools:{});TableTools._aInstances.push(a);return a.dom.container},cFeature:"T",sFeature:"TableTools"}):alert("Warning: TableTools 2 requires DataTables 1.7 or greater - www.datatables.net/download")})(jQuery,window,document); diff --git a/harstorage/public/scripts/datatables/jquery.dataTables.min.js b/harstorage/public/scripts/datatables/jquery.dataTables.min.js new file mode 100644 index 0000000..4280c6d --- /dev/null +++ b/harstorage/public/scripts/datatables/jquery.dataTables.min.js @@ -0,0 +1,151 @@ +/* + * File: jquery.dataTables.min.js + * Version: 1.8.2 + * Author: Allan Jardine (www.sprymedia.co.uk) + * Info: www.datatables.net + * + * Copyright 2008-2011 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, as supplied with this software. + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + */ +(function(i,za,p){i.fn.dataTableSettings=[];var D=i.fn.dataTableSettings;i.fn.dataTableExt={};var n=i.fn.dataTableExt;n.sVersion="1.8.2";n.sErrMode="alert";n.iApiIndex=0;n.oApi={};n.afnFiltering=[];n.aoFeatures=[];n.ofnSearch={};n.afnSortData=[];n.oStdClasses={sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active", +sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled", +sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:""};n.oJUIClasses={sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left", +sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled", +sPageFirst:"first ui-corner-tl ui-corner-bl",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last ui-corner-tr ui-corner-br",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default", +sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortColumn:"sorting_",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollWrapper:"dataTables_scroll", +sScrollHead:"dataTables_scrollHead ui-state-default",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot ui-state-default",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:"ui-state-default"};n.oPagination={two_button:{fnInit:function(g,l,s){var t,w,y;if(g.bJUI){t=p.createElement("a");w=p.createElement("a");y=p.createElement("span");y.className=g.oClasses.sPageJUINext;w.appendChild(y);y=p.createElement("span");y.className=g.oClasses.sPageJUIPrev; +t.appendChild(y)}else{t=p.createElement("div");w=p.createElement("div")}t.className=g.oClasses.sPagePrevDisabled;w.className=g.oClasses.sPageNextDisabled;t.title=g.oLanguage.oPaginate.sPrevious;w.title=g.oLanguage.oPaginate.sNext;l.appendChild(t);l.appendChild(w);i(t).bind("click.DT",function(){g.oApi._fnPageChange(g,"previous")&&s(g)});i(w).bind("click.DT",function(){g.oApi._fnPageChange(g,"next")&&s(g)});i(t).bind("selectstart.DT",function(){return false});i(w).bind("selectstart.DT",function(){return false}); +if(g.sTableId!==""&&typeof g.aanFeatures.p=="undefined"){l.setAttribute("id",g.sTableId+"_paginate");t.setAttribute("id",g.sTableId+"_previous");w.setAttribute("id",g.sTableId+"_next")}},fnUpdate:function(g){if(g.aanFeatures.p)for(var l=g.aanFeatures.p,s=0,t=l.length;s=w-t){t=w-s+1;x=w}else{t=y-Math.ceil(s/2)+1;x=t+s-1}for(s=t;s<=x;s++)F+=y!=s?''+s+"":''+s+"";x=g.aanFeatures.p;var z,$=function(M){g._iDisplayStart=(this.innerHTML*1-1)*g._iDisplayLength;l(g);M.preventDefault()},X=function(){return false};s=0;for(t=x.length;sl?1:0},"string-desc":function(g,l){if(typeof g!="string")g="";if(typeof l!="string")l="";g=g.toLowerCase();l=l.toLowerCase();return gl?-1:0},"html-asc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return g< +l?-1:g>l?1:0},"html-desc":function(g,l){g=g.replace(/<.*?>/g,"").toLowerCase();l=l.replace(/<.*?>/g,"").toLowerCase();return gl?-1:0},"date-asc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return g-l},"date-desc":function(g,l){g=Date.parse(g);l=Date.parse(l);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(l)||l==="")l=Date.parse("01/01/1970 00:00:00");return l- +g},"numeric-asc":function(g,l){return(g=="-"||g===""?0:g*1)-(l=="-"||l===""?0:l*1)},"numeric-desc":function(g,l){return(l=="-"||l===""?0:l*1)-(g=="-"||g===""?0:g*1)}};n.aTypes=[function(g){if(typeof g=="number")return"numeric";else if(typeof g!="string")return null;var l,s=false;l=g.charAt(0);if("0123456789-".indexOf(l)==-1)return null;for(var t=1;t")!=-1)return"html";return null}];n.fnVersionCheck=function(g){var l=function(x,v){for(;x.length=parseInt(w,10)};n._oExternConfig={iNextUnique:0};i.fn.dataTable=function(g){function l(){this.fnRecordsTotal= +function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length};this.fnRecordsDisplay=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length};this.fnDisplayEnd=function(){return this.oFeatures.bServerSide?this.oFeatures.bPaginate===false||this._iDisplayLength==-1?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd};this.sInstance= +this.oInstance=null;this.oFeatures={bPaginate:true,bLengthChange:true,bFilter:true,bSort:true,bInfo:true,bAutoWidth:true,bProcessing:false,bSortClasses:true,bStateSave:false,bServerSide:false,bDeferRender:false};this.oScroll={sX:"",sXInner:"",sY:"",bCollapse:false,bInfinite:false,iLoadGap:100,iBarWidth:0,bAutoCss:true};this.aanFeatures=[];this.oLanguage={sProcessing:"Processing...",sLengthMenu:"Show _MENU_ entries",sZeroRecords:"No matching records found",sEmptyTable:"No data available in table", +sLoadingRecords:"Loading...",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sSearch:"Search:",sUrl:"",oPaginate:{sFirst:"First",sPrevious:"Previous",sNext:"Next",sLast:"Last"},fnInfoCallback:null};this.aoData=[];this.aiDisplay=[];this.aiDisplayMaster=[];this.aoColumns=[];this.aoHeader=[];this.aoFooter=[];this.iNextId=0;this.asDataSearch=[];this.oPreviousSearch={sSearch:"", +bRegex:false,bSmart:true};this.aoPreSearchCols=[];this.aaSorting=[[0,"asc",0]];this.aaSortingFixed=null;this.asStripeClasses=[];this.asDestroyStripes=[];this.sDestroyWidth=0;this.fnFooterCallback=this.fnHeaderCallback=this.fnRowCallback=null;this.aoDrawCallback=[];this.fnInitComplete=this.fnPreDrawCallback=null;this.sTableId="";this.nTableWrapper=this.nTBody=this.nTFoot=this.nTHead=this.nTable=null;this.bInitialised=this.bDeferLoading=false;this.aoOpenRows=[];this.sDom="lfrtip";this.sPaginationType= +"two_button";this.iCookieDuration=7200;this.sCookiePrefix="SpryMedia_DataTables_";this.fnCookieCallback=null;this.aoStateSave=[];this.aoStateLoad=[];this.sAjaxSource=this.oLoadedState=null;this.sAjaxDataProp="aaData";this.bAjaxDataGet=true;this.jqXHR=null;this.fnServerData=function(a,b,c,d){d.jqXHR=i.ajax({url:a,data:b,success:function(f){i(d.oInstance).trigger("xhr",d);c(f)},dataType:"json",cache:false,error:function(f,e){e=="parsererror"&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})}; +this.aoServerParams=[];this.fnFormatNumber=function(a){if(a<1E3)return a;else{var b=a+"";a=b.split("");var c="";b=b.length;for(var d=0;d=0;e--)!a.aoColumns[e].bVisible&&!c&&h[d].splice(e,1);j.push([])}d=0;for(f=h.length;d=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;E(a)}if(a.bDeferLoading){a.bDeferLoading=false;a.iDraw++}else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!Ca(a))return}else a.iDraw++;if(a.aiDisplay.length!==0){var h=a._iDisplayStart,j=a._iDisplayEnd;if(a.oFeatures.bServerSide){h=0;j=a.aoData.length}for(h= +h;h=0;b--)c[b].parentNode.removeChild(c[b])}b=0;for(c=d.length;b=0;b--)a.aoDrawCallback[b].fn.call(a.oInstance,a);i(a.oInstance).trigger("draw",a);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){K(a,false);typeof a._bInitComplete=="undefined"&&w(a)}}}function da(a){if(a.oFeatures.bSort)R(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)N(a, +a.oPreviousSearch);else{E(a);C(a)}}function Ca(a){if(a.bAjaxDataGet){a.iDraw++;K(a,true);var b=Da(a);ha(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(c){Ea(a,c)},a);return false}else return true}function Da(a){var b=a.aoColumns.length,c=[],d,f;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:ka(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength: +-1});for(f=0;f")c=c.parentNode;else if(h=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){f=Ga(a);e=1}else if(h=="f"&&a.oFeatures.bFilter){f=Ha(a);e=1}else if(h=="r"&&a.oFeatures.bProcessing){f=Ia(a);e=1}else if(h=="t"){f=Ja(a);e=1}else if(h=="i"&&a.oFeatures.bInfo){f=Ka(a);e=1}else if(h=="p"&&a.oFeatures.bPaginate){f=La(a);e=1}else if(n.aoFeatures.length!==0){j=n.aoFeatures;u=0;for(k=j.length;ui(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()0&&a.nTable.removeChild(h[0]);if(a.nTFoot!==null){k=a.nTable.getElementsByTagName("tfoot");k.length>0&&a.nTable.removeChild(k[0])}h=a.nTHead.cloneNode(true);a.nTable.insertBefore(h,a.nTable.childNodes[0]);if(a.nTFoot!==null){k=a.nTFoot.cloneNode(true); +a.nTable.insertBefore(k,a.nTable.childNodes[1])}if(a.oScroll.sX===""){d.style.width="100%";b.parentNode.style.width="100%"}var U=S(a,h);f=0;for(e=U.length;fd.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sXInner!== +"")a.nTable.style.width=q(a.oScroll.sXInner);else if(f==i(d).width()&&i(d).height()f-a.oScroll.iBarWidth)a.nTable.style.width=q(f)}else a.nTable.style.width=q(f);f=i(a.nTable).outerWidth();e=a.nTHead.getElementsByTagName("tr");h=h.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width= +q(r);H.push(r)},h,e);i(h).height(0);if(a.nTFoot!==null){j=k.getElementsByTagName("tr");k=a.nTFoot.getElementsByTagName("tr");P(function(I,na){m=I.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;r=i(I).width();na.style.width=q(r);H.push(r)},j,k);i(j).height(0)}P(function(I){I.innerHTML="";I.style.width=q(H.shift())},h);a.nTFoot!==null&&P(function(I){I.innerHTML="";I.style.width=q(H.shift())},j);if(i(a.nTable).outerWidth()d.offsetHeight|| +i(d).css("overflow-y")=="scroll"?f+a.oScroll.iBarWidth:f;if(B&&(d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=q(j-a.oScroll.iBarWidth);d.style.width=q(j);b.parentNode.style.width=q(j);if(a.nTFoot!==null)L.parentNode.style.width=q(j);if(a.oScroll.sX==="")J(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width.");else a.oScroll.sXInner!==""&&J(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else{d.style.width= +q("100%");b.parentNode.style.width=q("100%");if(a.nTFoot!==null)L.parentNode.style.width=q("100%")}if(a.oScroll.sY==="")if(B)d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(a.oScroll.sY!==""&&a.oScroll.bCollapse){d.style.height=q(a.oScroll.sY);B=a.oScroll.sX!==""&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight'):b===""?'':b+' ';var c=p.createElement("div"); +c.className=a.oClasses.sFilter;c.innerHTML="";a.sTableId!==""&&typeof a.aanFeatures.f=="undefined"&&c.setAttribute("id",a.sTableId+"_filter");b=i("input",c);b.val(a.oPreviousSearch.sSearch.replace('"',"""));b.bind("keyup.DT",function(){for(var d=a.aanFeatures.f,f=0,e=d.length;f=0;d--){f=qa(G(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType);if(!b.test(f)){a.aiDisplay.splice(d,1);e++}}}}function Oa(a,b,c,d,f){var e=pa(b,d,f);if(typeof c=="undefined"||c===null)c=0;if(n.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length|| +a.oPreviousSearch.sSearch.length>b.length||c==1||b.indexOf(a.oPreviousSearch.sSearch)!==0){a.aiDisplay.splice(0,a.aiDisplay.length);oa(a,1);for(c=0;c/g,"");else if(typeof a=="string")return a.replace(/\n/g," ");else if(a===null)return"";return a}function R(a,b){var c,d,f,e,h=[],j=[],k=n.oSort;d=a.aoData;var m=a.aoColumns;if(!a.oFeatures.bServerSide&& +(a.aaSorting.length!==0||a.aaSortingFixed!==null)){h=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c=h)for(b=0;b=0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength=0){b=parseInt((a.fnRecordsDisplay()- +1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else J(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function Ka(a){var b=p.createElement("div");b.className=a.oClasses.sInfo;if(typeof a.aanFeatures.i=="undefined"){a.aoDrawCallback.push({fn:Ra,sName:"information"});a.sTableId!==""&&b.setAttribute("id",a.sTableId+"_info")}return b}function Ra(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a._iDisplayStart+ +1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),e=a.fnFormatNumber(b),h=a.fnFormatNumber(c),j=a.fnFormatNumber(d),k=a.fnFormatNumber(f);if(a.oScroll.bInfinite)e=a.fnFormatNumber(1);e=a.fnRecordsDisplay()===0&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()===0?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",j)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_", +e).replace("_END_",h).replace("_TOTAL_",k)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",e).replace("_END_",h).replace("_TOTAL_",k)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;if(a.oLanguage.fnInfoCallback!==null)e=a.oLanguage.fnInfoCallback(a,b,c,d,f,e);a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d;if(a.aLengthMenu.length==2&&typeof a.aLengthMenu[0]=="object"&&typeof a.aLengthMenu[1]=="object"){c=0;for(d=a.aLengthMenu[0].length;c'+a.aLengthMenu[1][c]+""}else{c=0;for(d=a.aLengthMenu.length;c'+a.aLengthMenu[c]+""}b+="";var f=p.createElement("div");a.sTableId!==""&&typeof a.aanFeatures.l=="undefined"&&f.setAttribute("id",a.sTableId+"_length"); +f.className=a.oClasses.sLength;f.innerHTML="";i('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",true);i("select",f).bind("change.DT",function(){var e=i(this).val(),h=a.aanFeatures.l;c=0;for(d=h.length;ca.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Sa(a,b){if(!a||a===null||a==="")return 0;if(typeof b=="undefined")b=p.getElementsByTagName("body")[0];var c=p.createElement("div");c.style.width=q(a);b.appendChild(c);a=c.offsetWidth;b.removeChild(c);return a}function ga(a){var b=0,c,d=0,f=a.aoColumns.length,e,h=i("th", +a.nTHead);for(e=0;etd",b);h=S(a,e);for(e=d=0;e0)a.aoColumns[e].sWidth=q(c);d++}a.nTable.style.width=q(i(b).outerWidth());b.parentNode.removeChild(b)}}function Ua(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){i(b).width();b.style.width=q(i(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!== +"")b.style.width=q(i(b).outerWidth())}function Ta(a,b){var c=Va(a,b);if(c<0)return null;if(a.aoData[c].nTr===null){var d=p.createElement("td");d.innerHTML=G(a,c,b,"");return d}return Q(a,c)[b]}function Va(a,b){for(var c=-1,d=-1,f=0;f/g,"");if(e.length>c){c=e.length;d=f}}return d}function q(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b=a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+ +"px"}function Za(a,b){if(a.length!=b.length)return 1;for(var c=0;cb&&a[d]--;c!=-1&&a.splice(c,1)}function Fa(a,b){b=b.split(",");for(var c=[],d=0,f=a.aoColumns.length;d4096){a=p.cookie.split(";");for(var j=0,k=a.length;j=d.aiDisplay.length){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(typeof c=="undefined"||c){E(d);C(d)}return f};this.fnClearTable=function(a){var b=A(this[n.iApiIndex]);la(b);if(typeof a=="undefined"||a)C(b)};this.fnOpen=function(a,b,c){var d=A(this[n.iApiIndex]);this.fnClose(a);var f=p.createElement("tr"),e=p.createElement("td");f.appendChild(e);e.className=c; +e.colSpan=Z(d);if(typeof b.jquery!="undefined"||typeof b=="object")e.appendChild(b);else e.innerHTML=b;b=i("tr",d.nTBody);i.inArray(a,b)!=-1&&i(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f};this.fnClose=function(a){for(var b=A(this[n.iApiIndex]),c=0;c=Z(d);if(!j)for(f=a;ftr>td."+a.oClasses.sRowEmpty,a.nTable).parent().remove(); +if(a.nTable!=a.nTHead.parentNode){i(a.nTable).children("thead").remove();a.nTable.appendChild(a.nTHead)}if(a.nTFoot&&a.nTable!=a.nTFoot.parentNode){i(a.nTable).children("tfoot").remove();a.nTable.appendChild(a.nTFoot)}a.nTable.parentNode.removeChild(a.nTable);i(a.nTableWrapper).remove();a.aaSorting=[];a.aaSortingFixed=[];V(a);i(ba(a)).removeClass(a.asStripeClasses.join(" "));if(a.bJUI){i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oJUIClasses.sSortableAsc,n.oJUIClasses.sSortableDesc,n.oJUIClasses.sSortableNone].join(" ")); +i("th span."+n.oJUIClasses.sSortIcon,a.nTHead).remove();i("th",a.nTHead).each(function(){var e=i("div."+n.oJUIClasses.sSortJUIWrapper,this),h=e.contents();i(this).append(h);e.remove()})}else i("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oStdClasses.sSortableAsc,n.oStdClasses.sSortableDesc,n.oStdClasses.sSortableNone].join(" "));a.nTableReinsertBefore?b.insertBefore(a.nTable,a.nTableReinsertBefore):b.appendChild(a.nTable);d=0;for(f=a.aoData.length;dt<"F"ip>'}if(e.oScroll.sX!==""||e.oScroll.sY!== +"")e.oScroll.iBarWidth=Ya();if(typeof g.iDisplayStart!="undefined"&&typeof e.iInitDisplayStart=="undefined"){e.iInitDisplayStart=g.iDisplayStart;e._iDisplayStart=g.iDisplayStart}if(typeof g.bStateSave!="undefined"){e.oFeatures.bStateSave=g.bStateSave;Xa(e,g);e.aoDrawCallback.push({fn:va,sName:"state_save"})}if(typeof g.iDeferLoading!="undefined"){e.bDeferLoading=true;e._iRecordsTotal=g.iDeferLoading;e._iRecordsDisplay=g.iDeferLoading}if(typeof g.aaData!="undefined")j=true;if(typeof g!="undefined"&& +typeof g.aoData!="undefined")g.aoColumns=g.aoData;if(typeof g.oLanguage!="undefined")if(typeof g.oLanguage.sUrl!="undefined"&&g.oLanguage.sUrl!==""){e.oLanguage.sUrl=g.oLanguage.sUrl;i.getJSON(e.oLanguage.sUrl,null,function(u){y(e,u,true)});h=true}else y(e,g.oLanguage,false)}else g={};if(typeof g.asStripClasses=="undefined"&&typeof g.asStripeClasses=="undefined"){e.asStripeClasses.push(e.oClasses.sStripeOdd);e.asStripeClasses.push(e.oClasses.sStripeEven)}c=false;d=i(this).children("tbody").children("tr"); +a=0;for(b=e.asStripeClasses.length;a=0;a--){var m= +g.aoColumnDefs[a].aTargets;i.isArray(m)||J(e,1,"aTargets must be an array of targets, not a "+typeof m);c=0;for(d=m.length;c=0){for(;e.aoColumns.length<=m[c];)F(e);x(e,m[c],g.aoColumnDefs[a])}else if(typeof m[c]=="number"&&m[c]<0)x(e,e.aoColumns.length+m[c],g.aoColumnDefs[a]);else if(typeof m[c]=="string"){b=0;for(f=e.aoColumns.length;b=e.aoColumns.length)e.aaSorting[a][0]=0;k=e.aoColumns[e.aaSorting[a][0]];if(typeof e.aaSorting[a][2]=="undefined")e.aaSorting[a][2]=0;if(typeof g.aaSorting=="undefined"&&typeof e.saved_aaSorting=="undefined")e.aaSorting[a][1]=k.asSorting[0];c=0;for(d=k.asSorting.length;c0){e.nTFoot=a[0];Y(e.aoFooter,e.nTFoot)}if(j)for(a=0;a>> 0, + from = Number(arguments[1]) || 0; + + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + + if (from < 0) { + from += len; + } + + for (; from < len; from++) { + if (from in this && this[from] === elt) { + return from; + } + } + + return -1; + }; +} + +/* + * Name space + */ +var HARSTORAGE = HARSTORAGE || {}; + + +/* + * Base url to be used when generating urls + */ +var base_url = $('#base-url').text(); +HARSTORAGE.base_url = base_url + + +/* + * Time metrics + */ +HARSTORAGE.times = [ + "Full Load Time", + "onLoad Event", + "Start Render Time", + "Time to First Byte" +]; + +/* + * Units + */ +HARSTORAGE.Units = { + "Full Load Time": "s", + "Total Requests": "", + "Total Size": "kB", + "Page Speed Score": "", + "onLoad Event": "s", + "Start Render Time": "s", + "Time to First Byte": "s", + "Total DNS Time": "ms", + "Total Transfer Time": "ms", + "Total Server Time": "ms", + "Avg. Connecting Time": "ms", + "Avg. Blocking Time": "ms", + "Text Size": "kB", + "Media Size": "kB", + "Cache Size": "kB", + "Redirects": "", + "Bad Rquests": "", + "Domains": "" +}; + +/* + * Data Converter + */ +HARSTORAGE.Converter = function(points) { + "use strict"; + + // Series data + var splitResults = points.split(";"), + numberOfSets = splitResults.length - 2, + dataArray = []; + + // Labels and Timestamps + var labels = splitResults[0].split("#"), + categories = splitResults[1].split("#"), + numberOfPoints = categories.length, + pointValue; + + for (var dataSetIndex = 0; dataSetIndex < numberOfSets; dataSetIndex += 1 ) { + dataArray.push(splitResults[dataSetIndex + 2].split("#")); + + // Convert string values to numbers + for (var pointIndex = 0; pointIndex < numberOfPoints; pointIndex += 1 ) { + // Original Value + pointValue = dataArray[dataSetIndex][pointIndex]; + + if (HARSTORAGE.times.indexOf(labels[dataSetIndex]) !== -1) { + // Parsed value + pointValue = parseFloat(pointValue / 1000, 10); + // Rounded value + if (pointValue > 1){ + pointValue = Math.round(pointValue * 10) / 10; + } + } else { + // Parsed value + pointValue = parseInt(pointValue, 10); + } + + dataArray[dataSetIndex][pointIndex] = pointValue; + } + } + + // Colors for Y Axis labels + var colors = HARSTORAGE.Colors(); + + // Y Axis and series + var yAxis = [], + series = []; + + for (dataSetIndex = 0; dataSetIndex < numberOfSets; dataSetIndex += 1) { + yAxis.push({ + title: { + text: labels[dataSetIndex], + style: { + color: colors[dataSetIndex] + } + }, + min: 0, + opposite: (dataSetIndex%2 === 0) ? false : true, + showEmpty: false + }); + + series.push({ + name: labels[dataSetIndex], + yAxis: dataSetIndex, + data: dataArray[dataSetIndex], + visible: (dataSetIndex < 3) ? true : false + }); + } + + return { + "categories": categories, + "yAxis": yAxis, + "series": series + }; +}; + +/* + * Timeline chart + */ +HARSTORAGE.Timeline = function(run_info) { + "use strict"; + + this.run_info = run_info; +}; + +// Get data for timeline +HARSTORAGE.Timeline.prototype.get = function(label, mode) { + "use strict"; + + // Pointer + var that = this; + + // Retrieve data for timeline via XHR call + var xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + that.draw(this.responseText); + } + }; + + var URI = "timeline?label=" + encodeURIComponent(label) + "&mode=" + mode; + + xhr.open("GET", URI, true); + xhr.send(); +}; + +// Draw timeline +HARSTORAGE.Timeline.prototype.draw = function(points) { + "use strict"; + + // Pointer + var that = this; + + // Convert data from custom format to arrays for chart + var converter = HARSTORAGE.Converter(points); + + var categories = converter.categories, + yAxis = converter.yAxis, + series = converter.series; + + new Highcharts.Chart({ + chart: { + renderTo: "timeline", + zoomType: "x", + defaultSeriesType: "spline" + }, + credits: { + enabled: false + }, + exporting: { + buttons: { + printButton: { + enabled: false + }, + exportButton: { + menuItems: [ + {}, + null, + null, + {} + ] + } + }, + url: HARSTORAGE.base_url + "/chart/export", + filename: "timeline", + width: 960 + }, + title: { + text: "Performance Trends" + }, + xAxis: [{ + categories: categories, + tickInterval: Math.ceil(categories.length / 10), + tickmarkPlacement: "on" + }], + yAxis: yAxis, + tooltip: { + formatter: function() { + var unit = HARSTORAGE.Units[this.series.name]; + return "" + this.y + " " + unit + "" + " (" + this.x + ")"; + } + }, + plotOptions: { + series: { + cursor: "pointer", + events: { + hide: function() { + this.yAxis.axisTitle.hide(); + }, + show: function() { + this.yAxis.axisTitle.show(); + } + }, + point: { + events: { + click: function() { + that.run_info.get(this.category); + } + } + } + } + }, + series: series + }); +}; + +/* + * Histogram Chart + */ +HARSTORAGE.Histogram = function() { + "use strict"; +}; + +HARSTORAGE.Histogram.prototype.draw = function(points, title) { + "use strict"; + + // Series data + var splitResults = points.split(";"), + yAxis = [], + series = []; + + series = splitResults[0].split("#"); + + var temp_array = splitResults[1].split("#"); + + for (var i = 0, l = temp_array.length; i < l; i += 1 ) { + yAxis.push(parseFloat(temp_array[i], 10)); + } + + // Colors for Y Axis labels + var color = HARSTORAGE.Colors()[0]; + + // Chart Object + new Highcharts.Chart({ + chart: { + renderTo: "chart", + defaultSeriesType: "column" + }, + credits: { + enabled: false + }, + exporting: { + buttons: { + printButton: { + enabled: false + }, + exportButton: { + menuItems: [ + {}, + null, + null, + {} + ] + } + }, + url: HARSTORAGE.base_url + "/chart/export", + filename: "histogram", + width: 960 + }, + title: { + text: title + " (" + HARSTORAGE.Units[title] + ")" + }, + legend: { + enabled: false + }, + plotOptions: { + series: { + cursor: "pointer" + } + }, + xAxis: [{ + categories: series + }], + yAxis: [{ + title: { + text: "Percentage of Total", + style: { + color: color + } + }, + min: 0 + }], + tooltip: { + formatter: function() { + var unit = HARSTORAGE.Units[title]; + return "" + this.y + " %" + " (" + this.x + " " + unit + ")"; + } + }, + series: [{ + data: yAxis + }] + }); +}; + +/* + * Column Chart + */ +HARSTORAGE.Columns = function() { + "use strict"; +}; + +HARSTORAGE.Columns.prototype.draw = function(points, chart_type) { + "use strict"; + + // Chart type + chart_type = (typeof(chart_type) !== "undefined") ? chart_type : "column"; + + // Convert data from custom format to arrays for chart + var converter = HARSTORAGE.Converter(points); + + var categories = converter.categories, + yAxis = converter.yAxis, + series = converter.series; + + // Chart Object + new Highcharts.Chart({ + chart: { + renderTo: "chart", + defaultSeriesType: chart_type + }, + credits: { + enabled: false + }, + exporting: { + buttons: { + printButton: { + enabled: false + }, + exportButton: { + menuItems: [ + {}, + null, + null, + {} + ] + } + }, + url: HARSTORAGE.base_url + "/chart/export", + filename: "superposed", + width: 960 + }, + title: { + text: "Performance Trends" + }, + xAxis: [{ + categories: categories, + tickInterval: Math.ceil(categories.length / 10), + tickmarkPlacement: "on" + }], + yAxis: yAxis, + tooltip: { + formatter: function() { + var unit = HARSTORAGE.Units[this.series.name]; + return "" + this.y + " " + unit + "" + " (" + this.x + ")"; + } + }, + plotOptions: { + series: { + cursor: "pointer", + events: { + hide: function() { + this.yAxis.axisTitle.hide(); + }, + show: function() { + this.yAxis.axisTitle.show(); + } + } + } + }, + series: series + }); +}; + +/* + * Test results + */ +HARSTORAGE.RunInfo = function(mode, label, query, histo) { + "use strict"; + + // Pointer + var that = this; + + // Initialize cache + this.cache = {}; + + // Add event handler to selector box + var run_timestamp = document.getElementById("run_timestamp"); + + run_timestamp.onchange = function() { + that.get(); + }; + + // Add event handler to delete button + var del_btn = document.getElementById("del-btn"); + + del_btn.onclick = function() { + that.del(label, mode, false); + }; + + // Add event handler to delete all button + var del_all_btn = document.getElementById("del-all-btn"); + + del_all_btn.onclick = function() { + that.del(label, mode, true); + }; + + // Add event handler to aggregation button + var agg_btn = document.getElementById("agg-btn"); + + if (query !== "None") { + agg_btn.style.display = "inline"; + agg_btn.onclick = function() { + location.href = HARSTORAGE.base_url + query.replace(/amp;/g,"") + "&chart=column&table=true"; + }; + } + + // Add event handler to histogram button + var histo_btn = document.getElementById("histo"); + + if (histo === "true") { + histo_btn.style.display = "inline"; + histo_btn.onclick = function() { + location.href = HARSTORAGE.base_url + "/superposed/histogram?label=" + label + "&metric=full_load_time"; + }; + } +}; + +//Page Resources +HARSTORAGE.RunInfo.prototype.resources = function (div, title, hash, units, width) { + "use strict"; + + // Extract data + var data = []; + + for (var key in hash) { + if (hash.hasOwnProperty(key)) { + data.push( [key, hash[key] ]); + } + } + + // Chart object + new Highcharts.Chart({ + chart: { + renderTo: div, + defaultSeriesType: "pie", + plotBackgroundColor: null, + plotBorderWidth: null, + plotShadow: false, + width: width, + height: 300 + }, + credits: { + enabled: false + }, + exporting: { + buttons: { + printButton: { + enabled: false + }, + exportButton: { + menuItems: [ + {}, + null, + null, + {} + ] + } + }, + url: HARSTORAGE.base_url + "/chart/export", + filename: "resources", + width: width + }, + title: { + text: title + }, + tooltip: { + formatter: function() { + return ""+ this.point.name +": "+ this.y + units; + } + }, + plotOptions: { + series: { + showInLegend: true + } + }, + series: [{ + data: data + }] + }); +}; + +//Page Speed details +HARSTORAGE.RunInfo.prototype.pagespeed = function (pagespeed) { + "use strict"; + + // Spliting data for chart + var rules = ["Total Score"], + scores = [pagespeed["Total Score"]]; + + for (var rule in pagespeed) { + if (pagespeed.hasOwnProperty(rule) && rule !== "Total Score") { + rules.push(rule); + scores.push(pagespeed[rule]); + } + } + + // Chart height + var height = Math.max(75 + 20 * rules.length, 100); + + // Chart object + new Highcharts.Chart({ + chart: { + renderTo: "pagespeed", + defaultSeriesType: "bar", + height: height, + width: 930 + }, + credits: { + enabled: false + }, + exporting: { + buttons: { + printButton: { + enabled: false + }, + exportButton: { + enabled: false + } + } + }, + title: { + text: "Page Speed Scores" + }, + xAxis: { + title: { + text: null + }, + categories: rules, + labels: { + formatter: function() { + if (this.value === "Total Score") { + return "@" + this.value + ""; + } else { + return this.value; + } + } + } + }, + yAxis: { + title: { + text: null + }, + min: 0, + max: 105, + endOnTick: false + }, + tooltip: { + formatter: function() { + return this.x +": "+ this.y; + } + }, + plotOptions: { + bar: { + dataLabels: { + enabled: true + } + }, + series: { + showInLegend: false, + animation: false + } + }, + series: [{ + data: scores + }] + }); +}; + +//Get data for Run Info +HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { + "use strict"; + + // Pointer + var that = this; + + // Dynamic data + this.json = []; + + // Show Ajax spinner + this.spinner.style.display = "block"; + + // Formatter + this.formatter = function(value, units) { + // Default units + if (typeof(units) === "undefined") { + units = ""; + } + + // Formatter + switch ( typeof(value) ) { + case "number": + if (value >= 1000) { + var seconds = Math.floor(value/1000); + var milliseconds = value - seconds*1000; + + if (milliseconds < 10) { + milliseconds = "00" + milliseconds; + } else if (milliseconds < 100) { + milliseconds = "0" + milliseconds; + } + + return seconds + " " + milliseconds + " " + units; + } else { + return value + " " + units; + } + break; + case "string": + return value; + default: + return "n/a"; + } + }; + + // Update test results + var set_data = function() { + // Update cache + if (typeof(that.cache[that.URI]) === "undefined") { + that.json = JSON.parse(that.xhr.responseText); + that.cache[that.URI] = that.json; + } + + // Summary + $("#full-load-time").html(that.formatter(that.json.summary.full_load_time, "ms")); + $("#onload-event").html(that.formatter(that.json.summary.onload_event, "ms")); + $("#start-render-time").html(that.formatter(that.json.summary.start_render_time, "ms")); + $("#time-to-first-byte").html(that.formatter(that.json.summary.time_to_first_byte, "ms")); + + $("#total-dns-time").html(that.formatter(that.json.summary.total_dns_time, "ms")); + $("#total-transfer-time").html(that.formatter(that.json.summary.total_transfer_time, "ms")); + $("#total-server-time").html(that.formatter(that.json.summary.total_server_time, "ms")); + $("#avg-connecting-time").html(that.formatter(that.json.summary.avg_connecting_time, "ms")); + $("#avg-blocking-time").html(that.formatter(that.json.summary.avg_blocking_time, "ms")); + + $("#total-size").html(that.formatter(that.json.summary.total_size, "kB")); + $("#text-size").html(that.formatter(that.json.summary.text_size, "kB")); + $("#media-size").html(that.formatter(that.json.summary.media_size, "kB")); + $("#cache-size").html(that.formatter(that.json.summary.cache_size, "kB")); + + $("#requests").html(that.formatter(that.json.summary.requests)); + $("#redirects").html(that.formatter(that.json.summary.redirects)); + $("#bad-requests").html(that.formatter(that.json.summary.bad_requests)); + $("#domains").html(that.formatter(that.json.summary.domains)); + + // HAR Viewer + var iframe = document.createElement("iframe"); + var url = HARSTORAGE.base_url + "/results/harviewer?inputUrl=" + HARSTORAGE.base_url + "/results/download%3Fid%3D"; + url += that.json.har; + url += "&expand=true"; + + iframe.setAttribute("src", url); + iframe.setAttribute("width", "940"); + iframe.setAttribute("id", "harviewer-iframe"); + iframe.setAttribute("frameBorder", "0"); + iframe.setAttribute("frameBorder", "0"); + iframe.setAttribute("scrolling", "no"); + + $("#harviewer").html(iframe); + + window.setInterval("HARSTORAGE.autoHeight()", 100); + + // New tab feature of HAR Viewer + var newtab = document.getElementById("newtab"); + + newtab.onclick = function () { + window.open(url); + }; + + // Resources by Size + setTimeout( + function() { + that.resources("by-size", "Resources by Size", that.json.weights, " kB", 450); + }, + 50 + ); + + // Resources by Requests + setTimeout( + function() { + that.resources("by-req", "Resources by Requests", that.json.requests, "", 450); + }, + 150 + ); + + // Domains by Size + setTimeout( + function() { + that.resources("domains-by-size", "Domains by Size", that.json.d_weights, " kB", 930); + }, + 250 + ); + + // Domains by Requests + setTimeout( + function() { + that.resources("domains-by-req", "Domains by Requests", that.json.d_requests, "", 930); + }, + 350 + ); + + // Page Speed Details + setTimeout( + function() { + that.pagespeed(that.json.pagespeed); + }, + 450 + ); + + // Hide Ajax spinner + that.spinner.style.display = "none"; + }; + + // Request data via XHR or read from cache + + // Get timestamp from argument of function or from select box + var selector = document.getElementById("run_timestamp"), + timestamp; + + if (typeof(opt_ts) !== "undefined") { + timestamp = opt_ts; + + // Update select box + for (var i = 0, len = selector.options.length; i < len; i += 1 ) { + if (selector.options[i].value === opt_ts) { + selector.selectedIndex = i; + $("#run_timestamp").trigger("liszt:updated"); + } + } + } else { + timestamp = selector.options[selector.selectedIndex].text; + } + + this.URI = "runinfo?timestamp=" + timestamp; + + this.xhr = new XMLHttpRequest(); + + this.xhr.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + set_data(); + } + }; + + if (typeof(this.cache[this.URI]) === "undefined") { + this.xhr.open("GET", this.URI, true); + this.xhr.send(); + } else { + this.json = this.cache[this.URI]; + set_data(); + } +}; + +//Delete current run from set of test results +HARSTORAGE.RunInfo.prototype.del = function(id, mode, all) { + "use strict"; + + // + var answer = window.confirm("Are you sure?"); + + if (answer === true) { + var xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + window.location = this.responseText; + } + }; + + var ts_selector = document.getElementById("run_timestamp"); + var timestamp = ts_selector.options[ts_selector.selectedIndex].text; + var URI = "deleterun?timestamp=" + timestamp; + URI += "&label=" + id; + URI += "&mode=" + mode; + URI += "&all=" + all; + + xhr.open("GET", URI, true); + xhr.send(); + } +}; + +// Add delay for async rendering +HARSTORAGE.RunInfo.prototype.changeVisibility = function () { + "use strict"; + + var del_btn = document.getElementById("del-btn"), + del_all_btn = document.getElementById("del-all-btn"), + newtab_btn = document.getElementById("newtab"); + + del_btn.style.display = "inline"; + del_all_btn.style.display = "inline"; + newtab_btn.style.display = "inline"; +}; + +HARSTORAGE.RunInfo.prototype.timedStyleChange = function () { + "use strict"; + + setTimeout(this.changeVisibility, 1000); +}; + +HARSTORAGE.RunInfo.prototype.addSpinner = function() { + "use strict"; + + // Spinner object + this.spinner = document.getElementById("spinner"); + new Spinner(HARSTORAGE.SpinnerOpts).spin(this.spinner); +}; + +/* + * Auto Height module + */ +HARSTORAGE.autoHeight = function() { + "use strict"; + + var iframe = document.getElementById("harviewer-iframe"); + iframe.height = iframe.contentDocument.body.offsetHeight; +}; + +/* + * Aggregated Statistics + */ +HARSTORAGE.AggregatedStatistics = function(id) { + "use strict"; + + // Determine metric type from Query string + var metric, + href; + + if (location.href.indexOf("metric") === -1) { + href = location.href + "&metric="; + metric = "Average"; + } else { + href = location.href.split("metric")[0] + "metric="; + metric = location.href.split("metric")[1].split("=")[1]; + + if (metric === "90th%20Percentile") { + metric = "90th Percentile"; + } + } + + // Update selector box active option + var selector = document.getElementById(id); + + for (var i = 0, len = selector.options.length; i < len; i += 1 ) { + if (selector.options[i].value === metric) { + selector.selectedIndex = i; + $("#" + id).trigger("liszt:updated"); + break; + } + } + + // Add event handler to selector box + selector.onchange = function() { + location.href = href + this.value; + }; +}; + +/* + * Superpose Form + */ +HARSTORAGE.SuperposeForm = function() { + "use strict"; + + // Pointer + var that = this; + + // Initialize cache + this.cache = {}; + + // Select box event handler + var selector = document.getElementById("step_1_label"); + selector.onchange = function() { + that.setTimestamps(this.name); + }; + + // Submit button event handler + var submit = document.getElementById("submit"); + submit.onclick = function() { + return that.submit(); + }; + + // Add button event handler + var add = document.getElementById("step_1_add"); + add.onclick = function() { + that.add(this); + }; + + // Delete button event handler + var del = document.getElementById("step_1_del"); + del.onclick = function() { + that.del(this); + }; + del.style.display = "none"; + + // Chart options + var checkbox = document.getElementById("column"); + checkbox.onclick = function() { + that.checkbox(this); + }; + + checkbox = document.getElementById("spline"); + checkbox.onclick = function() { + that.checkbox(this); + }; +}; + +// Form validation +HARSTORAGE.SuperposeForm.prototype.submit = function() { + "use strict"; + + var selectors = document.getElementsByTagName("select"); + + for (var i = 0, len = selectors.length/3; i < len; i += 1) { + var id = 1 + i*3; + + var start_ts = selectors.item(id).options[ selectors.item(id).options.selectedIndex ].value; + var end_ts = selectors.item(id+1).options[ selectors.item(id+1).options.selectedIndex ].value; + + if (end_ts < start_ts) { + window.alert("Invalid timestamps!"); + return false; + } + } + + var form = document.getElementById("superpose-form"); + form.onsubmit = "return true;"; + + return true; +}; + +// Add new step +HARSTORAGE.SuperposeForm.prototype.add = function(button) { + "use strict"; + + var i, + len, + prev_button; + + var that = this; + + // Find previous and new id + var prev_id = button.id.split("_")[0] + "_" + button.id.split("_")[1], + new_id = prev_id.split("_")[0] + "_" + ( parseInt ( prev_id.split("_")[1], 10) +1 ); + + // Add new line to container + var prev_div = document.getElementById(prev_id), + new_div = prev_div.cloneNode(true); + + new_div.setAttribute("id", new_id); + + var container = document.getElementById("container"); + container.appendChild(new_div); + + // Update name and id of selectors + var selectors = new_div.getElementsByTagName("select"); + + for (i = selectors.length; i -- ; ) { + switch (selectors.item(i).name) { + case prev_id + "_label": + selectors.item(i).name = new_id + "_label"; + selectors.item(i).id = new_id + "_label"; + selectors.item(i).onchange = function() { + that.setTimestamps(this.name); + }; + break; + case prev_id + "_start_ts": + selectors.item(i).name = new_id + "_start_ts"; + selectors.item(i).id = new_id + "_start_ts"; + break; + case prev_id + "_end_ts": + selectors.item(i).name = new_id + "_end_ts"; + selectors.item(i).id = new_id + "_end_ts"; + break; + default: + break; + } + } + + // Update inputs + var inputs = new_div.getElementsByTagName("input"); + + for (i = 0, len = inputs.length; i < len; i += 1) { + switch (inputs.item(i).id) { + case prev_id + "_add": + // Set new id + inputs.item(i).id = new_id + "_add"; + + // Hide previous button + prev_button = document.getElementById(prev_id + "_add"); + prev_button.style.display = "none"; + + // Set event handler + inputs.item(i).onclick = function() { + that.add(this); + }; + break; + case prev_id + "_del": + // Set new id + inputs.item(i).id = new_id + "_del"; + + // Hide previous button + prev_button = document.getElementById(prev_id + "_del"); + prev_button.style.display = "none"; + + // Show current button + inputs.item(i).style.display = "inline"; + + // Set event handler + inputs.item(i).onclick = function() { + that.del(this); + }; + break; + default: + break; + } + } + // Update head + var divs = new_div.getElementsByTagName("div"); + + for (i = 0, len = divs.length; i < len; i += 1) { + if (divs.item(i).id === prev_id + "_head" ) { + // New id + divs.item(i).id = new_id + "_head"; + + // New label + divs.item(i).innerHTML = "Set " + new_id.split("_")[1] + " >"; + } + } + + // Update timestamp + this.setTimestamps(new_id + "_label"); +}; + +// Delete selected step +HARSTORAGE.SuperposeForm.prototype.del = function(button) { + "use strict"; + + var prev_button; + + // Calculate id + var id = button.id.split("_")[0] + "_" + button.id.split("_")[1], + prev_id = button.id.split("_")[0] + "_" + (parseInt( button.id.split("_")[1], 10) - 1); + + // Get DIVs + var div = document.getElementById(id), + container = document.getElementById("container"); + + // Delete current line + container.removeChild(div); + + // Show previous button + prev_button = document.getElementById(prev_id + "_add"); + prev_button.style.display = "inline"; + + if (prev_id !== "step_1") { + prev_button = document.getElementById(prev_id + "_del"); + prev_button.style.display = "inline"; + } +}; + +// Set timelines for selected label +HARSTORAGE.SuperposeForm.prototype.setTimestamps = function(id) { + "use strict"; + + // Poiner + var that = this; + + // Dynamic data + this.dates = []; + + // Show Ajax spinner + this.spinner.style.display = "block"; + + // Update timestamps + var set_data = function() { + var i, + len, + ts; + + // Calculate id + id = id.split("_")[0] + "_" + id.split("_")[1]; + + // Hide Ajax spinner + that.spinner.style.display = "none"; + + // Update cache + if (typeof(that.cache[that.URI]) === "undefined") { + that.dates = that.xhr.responseText.split(";"); + that.cache[that.URI] = that.dates; + } else { + that.dates.reverse(); + } + + // Start timestamps + var select = document.getElementById(id + "_start_ts"); + select.options.length = 0; + + for (i = 0, len = that.dates.length; i < len; i += 1) { + ts = that.dates[i]; + select.options[i] = new Option(ts, ts, false, false); + } + + // End timestamps + select = document.getElementById(id + "_end_ts"); + select.options.length = 0; + that.dates.reverse(); + + for (i = 0, len = that.dates.length; i < len; i += 1) { + ts = that.dates[i]; + select.options[i] = new Option(ts, ts, false, false); + } + }; + + // Request data via XHR or read from cache + var select = document.getElementById(id); + var label = select.options[select.selectedIndex].text; + this.URI = "dates?label=" + label; + + this.xhr = new XMLHttpRequest(); + + this.xhr.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + set_data(); + } + }; + + if (typeof(this.cache[this.URI]) === "undefined") { + this.xhr.open("GET", this.URI, true); + this.xhr.send(); + } else { + this.dates = this.cache[this.URI]; + set_data(); + } +}; +// Add Ajax spinner +HARSTORAGE.SuperposeForm.prototype.addSpinner = function() { + "use strict"; + + this.spinner = document.getElementById("spinner"); + new Spinner(HARSTORAGE.SpinnerOpts).spin(this.spinner); +}; + +// Checkbox group +HARSTORAGE.SuperposeForm.prototype.checkbox = function(input) { + "use strict"; + + var id1 = "spline", + id2 = "column", + id; + + if (input.checked) { + id = (input.id === id1) ? id2 : id1; + var checkbox = document.getElementById(id); + checkbox.checked = false; + } +}; diff --git a/harstorage/public/scripts/harviewer/core/trace.js b/harstorage/public/scripts/harviewer/core/trace.js new file mode 100644 index 0000000..bb0b2c8 --- /dev/null +++ b/harstorage/public/scripts/harviewer/core/trace.js @@ -0,0 +1,26 @@ +/* See license.txt for terms of usage */ + +require.def("core/trace", [ +], + +function() { + +//************************************************************************************************* + +var Trace = { + log: function(){}, + error: function(){}, + exception: function(){}, + time: function(){}, + timeEnd: function(){} +}; + +if (typeof(console) == "undefined") + return Trace; + + +return Trace; + +//************************************************************************************************* +}); + diff --git a/harstorage/public/scripts/harviewer/domplate/domplate.js b/harstorage/public/scripts/harviewer/domplate/domplate.js new file mode 100644 index 0000000..01f11d7 --- /dev/null +++ b/harstorage/public/scripts/harviewer/domplate/domplate.js @@ -0,0 +1,263 @@ + +require.def("domplate/domplate",[],function(){Domplate={};(function(){function DomplateTag(tagName) +{this.tagName=tagName;} +this.DomplateTag=DomplateTag;function DomplateEmbed() +{} +function DomplateLoop() +{} +var womb=null;var domplate=function() +{var lastSubject;for(var i=0;i":return">";case"&":return"&";case"'":return"'";case'"':return""";} +return"?";};return String(value).replace(/[<>&"']/g,replaceChars);} +function __loop__(iter,outputs,fn) +{var iterOuts=[];outputs.push(iterOuts);if(iter instanceof Array) +iter=new ArrayIterator(iter);try +{while(1) +{var value=iter.next();var itemOuts=[0,0];iterOuts.push(itemOuts);fn.apply(this,[value,itemOuts]);}} +catch(exc) +{if(exc!=StopIteration) +throw exc;}} +var js=$.browser.msie?'var f = '+fnBlock.join("")+';f':fnBlock.join("");this.renderMarkup=eval(js);},getVarNames:function(args) +{if(this.vars) +args.push.apply(args,this.vars);for(var i=0;i"');this.generateChildMarkup(topBlock,topOuts,blocks,info);topBlock.push(',""');},generateChildMarkup:function(topBlock,topOuts,blocks,info) +{for(var i=0;i=array.length) +throw StopIteration;return array[index];};} +function StopIteration(){} +this.$break=function() +{throw StopIteration;};var Renderer={renderHTML:function(args,outputs,self) +{var code=[];var markupArgs=[code,this.tag.context,args,outputs];markupArgs.push.apply(markupArgs,this.tag.markupArgs);this.tag.renderMarkup.apply(self?self:this.tag.subject,markupArgs);return code.join("");},insertRows:function(args,before,self) +{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var doc=before.ownerDocument;var tableParent=doc.createElement("div");tableParent.innerHTML=""+html+"
          ";var tbody=tableParent.firstChild.firstChild;var parent=before.tagName.toLowerCase()=="tr"?before.parentNode:before;var after=before.tagName.toLowerCase()=="tr"?before.nextSibling:null;var firstRow=tbody.firstChild,lastRow;while(tbody.firstChild) +{lastRow=tbody.firstChild;if(after) +parent.insertBefore(lastRow,after);else +parent.appendChild(lastRow);} +var offset=0;if(this.tag.isLoop) +{var node=firstRow.parentNode.firstChild;for(;node&&node!=firstRow;node=node.nextSibling) +++offset;} +var domArgs=[firstRow,this.tag.context,offset];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return[firstRow,lastRow];},insertAfter:function(args,before,self) +{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var doc=before.ownerDocument;var range=doc.createRange();range.selectNode(doc.body);var frag=range.createContextualFragment(html);var root=frag.firstChild;if(before.nextSibling) +before.parentNode.insertBefore(frag,before.nextSibling);else +before.parentNode.appendChild(frag);var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:(this.tag.subject?this.tag.subject:null),domArgs);return root;},replace:function(args,parent,self) +{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var root;if(parent.nodeType==1) +{parent.innerHTML=html;root=parent.firstChild;} +else +{if(!parent||parent.nodeType!=9) +parent=document;if(!womb||womb.ownerDocument!=parent) +womb=parent.createElement("div");womb.innerHTML=html;root=womb.firstChild;} +var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return root;},append:function(args,parent,self) +{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);if(!womb||womb.ownerDocument!=parent.ownerDocument) +womb=parent.ownerDocument.createElement("div");womb.innerHTML=html;var root=womb.firstChild;while(womb.firstChild) +parent.appendChild(womb.firstChild);var domArgs=[root,this.tag.context,0];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return root;},insertCols:function(args,parent,self) +{this.tag.compile();var outputs=[];var html=this.renderHTML(args,outputs,self);var womb=parent.ownerDocument.createElement("div");womb.innerHTML=""+html+"
          ";womb=womb.firstChild.firstChild.firstChild;var firstCol=womb.firstChild;if(!firstCol) +return null;while(womb.firstChild) +parent.appendChild(womb.firstChild);var offset=0;if(this.tag.isLoop) +{var node=firstCol.parentNode.firstChild;for(;node&&node!=firstCol;node=node.nextSibling) +++offset;} +var domArgs=[firstCol,this.tag.context,offset];domArgs.push.apply(domArgs,this.tag.domArgs);domArgs.push.apply(domArgs,outputs);this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs);return firstCol;}};function defineTags() +{for(var i=0;i=a.top&&c<=a.top+a.height&&b>=a.left&&b<=a.left+a.width},b.cloneArray=function(a,b){var c=[];if(b)for(var d=0;d2?2:b,b=b<-1?-1:b;if(b==-1)return a+" B";var c=Math.pow(10,b);return a==-1||a==undefined?"?":a==0?"0":a<1024?a+" B":a<1048576?Math.round(a/1024*c)/c+" KB":Math.round(a/1048576*c)/c+" MB"},b.formatTime=function(a){return a==-1?"-":a<1e3?a+"ms":a<6e4?Math.ceil(a/10)/100+"s":Math.ceil(a/6e4*100)/100+"m"},b.formatNumber=function(a){a+="";var b=a.split("."),c=b[0],d=b.length>1?"."+b[1]:"",e=/(\d+)(\d{3})/;while(e.test(c))c=c.replace(e,"$1 $2");return c+d},b.formatString=function(a){var c=b.cloneArray(arguments),a=c.shift();for(var d=0;d0?"-":"+")+b(Math.abs(e))+":"+b(Math.abs(f));return c+g},b.getFileName=function(c){try{var d=b.splitURLBase(c);return d.name}catch(e){a.log(unescape(c))}return c},b.getFileExtension=function(a){if(!a)return null;var b=a.indexOf("?");b!=-1&&(a=a.substr(0,b));var c=a.lastIndexOf(".");return a.substr(c+1)},b.splitURLBase=function(a){if(b.isDataURL(a))return b.splitDataURL(a);return b.splitURLTrue(a)},b.isDataURL=function(a){return a&&a.substr(0,5)=="data:"},b.splitDataURL=function(a){var c=a.indexOf(":",3);if(c!=4)return!1;var d=a.indexOf(",",c+1);if(d"+l}else e.name=k.name,e.path=k.path}else e.hasOwnProperty("path")||(e.path="data:"),e.hasOwnProperty("name")||(e.name=decodeURIComponent(e.encodedContent.substr(0,200)).replace(/\s*$/,""));return e},b.splitURLTrue=function(a){var b=/:\/{1,3}(.*?)\/([^\/]*?)\/?($|\?.*)/,c=b.exec(a);return c?c[2]?{path:c[1],name:c[2]+c[3]}:{path:c[1],name:c[1]}:{name:a,path:a}},b.getURLParameter=function(a){var b=window.location.search.substring(1),c=b.split("&");for(var d=0;dd&&!c&&(k=b.$STR("LargeData")),e.push({name:f(j),value:f(k)})}else{var j=g[h];e.push({name:f(j),value:""})}}catch(l){}e.sort(function(a,b){return a.name<=b.name?-1:1});return e},b.getBody=function(a){if(a.body)return a.body;var b=a.getElementsByTagName("body")[0];if(b)return b;return null},b.getHead=function(a){return a.getElementsByTagName("head")[0]},b.getAncestorByClass=function(a,c){for(var d=a;d;d=d.parentNode)if(b.hasClass(d,c))return d;return null},b.$=function(){return b.getElementByClass.apply(this,arguments)},b.getElementByClass=function(a,c){if(!a)return null;var d=b.cloneArray(arguments);d.splice(0,1);for(var e=a.firstChild;e;e=e.nextSibling){var f=b.cloneArray(d);f.unshift(e);if(b.hasClass.apply(this,f))return e;var g=b.getElementByClass.apply(this,f);if(g)return g}return null},b.getElementsByClass=function(a,c){function f(a,c,d){for(var e=a.firstChild;e;e=e.nextSibling){var g=b.cloneArray(c);g.unshift(e),b.hasClass.apply(null,g)&&d.push(e),f(e,c,d)}}if(a.querySelectorAll){var d=b.cloneArray(arguments);d.shift();var e="."+d.join(".");return a.querySelectorAll(e)}var g=[],d=b.cloneArray(arguments);d.shift(),f(a,d,g);return g},b.getChildByClass=function(a){for(var c=1;c=0){var d=b.length;a.className=a.className.substr(0,c-1)+a.className.substr(c+d)}}},b.toggleClass=function(a,c){if(b.hasClass(a,c)){b.removeClass(a,c);return!1}b.setClass(a,c);return!0},b.setClassTimed=function(a,c,d){d||(d=1300),a.__setClassTimeout?clearTimeout(a.__setClassTimeout):b.setClass(a,c),a.__setClassTimeout=setTimeout(function(){delete a.__setClassTimeout,b.removeClass(a,c)},d)},b.trim=function(a){return a.replace(/^\s*|\s*$/g,"")},b.wrapText=function(a,c){var d=/[^A-Za-z_$0-9'"-]/,e=[],f=100,g=b.splitLines(a);for(var h=0;hf){var j=d.exec(i.substr(f,100)),k=f+(j?j.index:0),l=i.substr(0,k);i=i.substr(k),c||e.push("

          "),e.push(c?l:b.escapeHTML(l)),c||e.push("
          ")}c||e.push("
          "),e.push(c?i:b.escapeHTML(i)),c||e.push("
          ")}return e.join(c?"\n":"")},b.insertWrappedText=function(a,c,d){c.innerHTML="
          "+b.wrapText(a,d)+"
          "},b.splitLines=function(a){var b=/\r\n|\r|\n/;if(!a)return[];if(a.split)return a.split(b);var c=a+"",d=c.split(b);return d},b.getPrettyDomain=function(a){var b=/[^:]+:\/{1,3}(www\.)?([^\/]+)/.exec(a);return b?b[2]:""},b.escapeHTML=function(a){function b(a){switch(a){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case'"':return"""}return"?"}return String(a).replace(/[<>&"']/g,b)},b.cropString=function(a,c){a=a+"";if(c)var d=c/2;else var d=50;return a.length>c?b.escapeNewLines(a.substr(0,d)+"..."+a.substr(a.length-d)):b.escapeNewLines(a)},b.escapeNewLines=function(a){return a.replace(/\r/g,"\\r").replace(/\n/g,"\\n")},b.cloneJSON=function(b){if(b==null||typeof b!="object")return b;try{var c=b.constructor();for(var d in b)c[d]=cloneJSON(b[d]);return c}catch(e){a.exception(b)}return null},b.getOverflowParent=function(a){for(var b=a.parentNode;b;b=b.offsetParent)if(b.scrollHeight>b.offsetHeight)return b},b.getElementBox=function(a){var c={};if(a.getBoundingClientRect){var d=a.getBoundingClientRect(),e=b.isIE?document.body.clientTop||document.documentElement.clientTop:0,f=b.getWindowScrollPosition();c.top=Math.round(d.top-e+f.top),c.left=Math.round(d.left-e+f.left),c.height=Math.round(d.bottom-d.top),c.width=Math.round(d.right-d.left)}else{var g=b.getElementPosition(a);c.top=g.top,c.left=g.left,c.height=a.offsetHeight,c.width=a.offsetWidth}return c},b.getElementPosition=function(a){var b=0,c=0;do b+=a.offsetLeft,c+=a.offsetTop;while(a=a.offsetParent);return{left:b,top:c}},b.getWindowSize=function(){var a=0,b=0,c;typeof window.innerWidth=="number"?(a=window.innerWidth,b=window.innerHeight):(c=document.documentElement)&&(c.clientHeight||c.clientWidth)?(a=c.clientWidth,b=c.clientHeight):(c=document.body)&&(c.clientHeight||c.clientWidth)&&(a=c.clientWidth,b=c.clientHeight);return{width:a,height:b}},b.getWindowScrollSize=function(){var a=0,c=0,d;!b.isIEQuiksMode&&(d=document.documentElement)&&(d.scrollHeight||d.scrollWidth)&&(a=d.scrollWidth,c=d.scrollHeight),(d=document.body)&&(d.scrollHeight||d.scrollWidth)&&(d.scrollWidth>a||d.scrollHeight>c)&&(a=d.scrollWidth,c=d.scrollHeight);return{width:a,height:c}},b.getWindowScrollPosition=function(){var a=0,b=0,c;typeof window.pageYOffset=="number"?(a=window.pageYOffset,b=window.pageXOffset):(c=document.body)&&(c.scrollTop||c.scrollLeft)?(a=c.scrollTop,b=c.scrollLeft):(c=document.documentElement)&&(c.scrollTop||c.scrollLeft)&&(a=c.scrollTop,b=c.scrollLeft);return{top:a,left:b}},b.scrollIntoCenterView=function(a,c,d,e){if(a){c||(c=b.getOverflowParent(a));if(!c)return;var f=b.getClientOffset(a);if(!e){var g=f.y-c.scrollTop,h=c.scrollTop+c.clientHeight-(f.y+a.offsetHeight);if(g<0||h<0){var i=f.y-c.clientHeight/2;c.scrollTop=i}}if(!d){var j=f.x-c.scrollLeft,k=c.scrollLeft+c.clientWidth-(f.x+a.clientWidth);if(j<0||k<0){var l=f.x-c.clientWidth/2;c.scrollLeft=l}}}},b.getClientOffset=function(a){function b(a,c,d){var e=a.offsetParent,f=d.getComputedStyle(a,"");a.offsetLeft&&(c.x+=a.offsetLeft+parseInt(f.borderLeftWidth)),a.offsetTop&&(c.y+=a.offsetTop+parseInt(f.borderTopWidth)),e?e.nodeType==1&&b(e,c,d):a.ownerDocument.defaultView.frameElement&&b(a.ownerDocument.defaultView.frameElement,c,a.ownerDocument.defaultView)}var c={x:0,y:0};if(a){var d=a.ownerDocument.defaultView;b(a,c,d)}return c},b.addStyleSheet=function(a,c){if(!a.getElementById(c)){var d=a.createElement("link");d.type="text/css",d.rel="stylesheet",d.href=c,d.setAttribute("id",c);var e=b.getHead(a);e.appendChild(d)}},b.selectElementText=function(a,b,c){var d=window,e=d.document;if(d.getSelection&&e.createRange){var f=d.getSelection(),g=e.createRange();g.setStart(a,b),g.setEnd(a,c),f.removeAllRanges(),f.addRange(g)}else e.body.createTextRange&&(g=e.body.createTextRange(),g.moveToElementText(a),g.select())};return b}),require.def("core/cookies",["core/lib"],function(a){var b={getCookie:function(b){var c=document.cookie.split(";");for(var d=0;d-1&&(q=c[b]);b--){d=a[q];if(d===!0||d===1)d=e(j+q+"/"+l);require.mixin(o,d)}f(o)})})}})}(),define("nls/requestList",{root:{fromCache:"From Cache",menuBreakLayout:"Break Timeline Layout",menuOpenRequestInWindow:"Open Request in New Window",menuOpenResponseInWindow:"Open Response in New Window",request:"Request",requests:"Requests",tooltipSize:"%S (%S bytes)",tooltipZippedSize:"%S (%S bytes) - compressed",tooltipUnzippedSize:"%S (%S bytes) - uncompressed",unknownSize:"Unknown size","request.Started":"Request start time since the beginning","request.phases.label":"Request phases start and elapsed time relative to the request start:","request.phase.Resolving":"DNS Lookup","request.phase.Connecting":"Connecting","request.phase.Blocking":"Blocking","request.phase.Sending":"Sending","request.phase.Waiting":"Waiting","request.phase.Receiving":"Receiving","request.timings.label":"Event timing relative to the request start:",ContentLoad:"DOM Loaded",WindowLoad:"Page Loaded","page.event.Load":"Page Loaded",menuBreakTimeline:"Break Timeline Layout",menuOpenRequest:"Open Request in New Window",menuOpenResponse:"Open Response in New Window"}}),require.def("preview/jsonSchema",[],function(){var a={validate:function(a,b){return this._validate(a,b,!1)},checkPropertyChange:function(a,b,c){return this._validate(a,b,c||"property")},_validate:function(a,b,c){function f(a,b,f,g){if(typeof b=="object"){(typeof a!="object"||a instanceof Array)&&d.push({property:f,message:"an object is required"});for(var h in b)if(b.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")){var i=a[h],j=b[h];e(i,j,f,h)}}for(h in a){a.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")&&b&&!b[h]&&g===!1&&d.push({property:f,message:typeof i+"The property "+h+" is not defined in the schema and the schema does not allow additional properties"});var k=b&&b[h]&&b[h].requires;k&&!(k in a)&&d.push({property:f,message:"the presence of the property "+h+" requires that "+k+" also be present"}),i=a[h],b&&typeof b=="object"&&!(h in b)&&e(i,g,f,h),!c&&i&&i.$schema&&(d=d.concat(e(i,i.$schema,f,h)))}return d}function e(a,b,g,h){function k(a,b){if(a){if(typeof a=="string"&&a!="any"&&(a=="null"?b!==null:typeof b!=a)&&!(b instanceof Array&&a=="array")&&(a!="integer"||b%1!==0))return[{property:g,message:typeof b+" value found, but a "+a+" is required"}];if(a instanceof Array){var c=[];for(var f=0;fb.maxItems&&j("There must be a maximum of "+b.maxItems+" in the array")}else b.properties&&d.concat(f(a,b.properties,g,b.additionalProperties));b.pattern&&typeof a=="string"&&!a.match(b.pattern)&&j("does not match the regex pattern "+b.pattern),b.maxLength&&typeof a=="string"&&a.length>b.maxLength&&j("may only be "+b.maxLength+" characters long"),b.minLength&&typeof a=="string"&&a.lengtha&&j("must have a minimum value of "+b.minimum),typeof b.maximum!==undefined&&typeof a==typeof b.maximum&&b.maximum=32&&b<127||b==10||b==13)return a.charAt(0);var c=b.toString(16).toUpperCase();while(c.length<4)c="0"+c;return"\\u"+c}).join("");return a}function g(){this.input=null}g.prototype={append:function(a){{if(a){if(this.input){if(!a.log.pages){f.error("Import of additional data without a page is not yet supported.");return null}for(var b=0;b0?a[0]:null},getPageEntries:function(a){return g.getPageEntries(this.input,a)},getAllEntries:function(a){return this.input?this.input.log.entries:[]},getParentPage:function(a){return g.getParentPage(this.input,a)},importPage:function(a,b){var c=this.getUniquePageID(a.id),d=a.id;a.id=c,this.input.log.pages.push(a);for(var e=0;e0)&&h.length>0)return this.loadRemoteArchive(h,f,b,c);var j=a.getURLParameter("path");if(j)return this.loadLocalArchive(j,b,c)},loadExample:function(a,b){var c=document.location.href,d=c.indexOf("?");document.location=c.substr(0,d)+"?path="+a,e.setCookie("timeline",!0),e.setCookie("stats",!0)},loadLocalArchive:function(a,b,c){$.ajax({url:a,context:this,success:function(a){b(a)},error:function(a,b){c(a,b)}});return!0},loadRemoteArchive:function(a,b,c,d){if(!a.length)return!1;var e=a.shift();b||(b="onInputData"),$.ajax({url:e,context:this,dataType:"jsonp",jsonp:"callback",jsonpCallback:b,success:function(e){c&&c(e);if(a.length){var f=this;setTimeout(function(){f.loadRemoteArchive(a,b,c,d)},300)}},error:function(a,b){d&&d(a,b)}});return!0},load:function(a,b,c,d,e,f){function h(b,c){a.onLoadError&&a.onLoadError(b,c),f&&f.call(a,b,c)}function g(b){a.appendPreview&&a.appendPreview(b),e&&e.call(a,b)}return c?this.loadRemoteArchive([b],d,g,h):this.loadLocalArchive(b,g,h)}};return g}),define("nls/requestBody",{root:{RequestHeaders:"Request Headers",ResponseHeaders:"Response Headers",RequestCookies:"Request Cookies",ResponseCookies:"Response Cookies",URLParameters:"Params",Headers:"Headers",Post:"Post",Put:"Put",Cookies:"Cookies",Response:"Response",Cache:"Cache",HTML:"HTML",DataURL:"Data URL"}}),require.def("domplate/tabView",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var TabViewTempl=domplate({tag:TABLE({"class":"tabView",cellpadding:0,cellspacing:0,_repObject:"$tabView"},TBODY(TR({"class":"tabViewRow"},TD({"class":"tabViewCol",valign:"top"},TAG("$tabList",{tabView:"$tabView"}))))),tabList:DIV({"class":"tabViewBody",onclick:"$onClickTab"},DIV({"class":"$tabView.id\\Bar tabBar"}),DIV({"class":"$tabView.id\\Bodies tabBodies"})),tabHeaderTag:A({"class":"$tab.id\\Tab tab",view:"$tab.id",_repObject:"$tab"},"$tab.label"),tabBodyTag:DIV({"class":"tab$tab.id\\Body tabBody",_repObject:"$tab"}),hideTab:function(a){return!1},onClickTab:function(a){var b=Lib.fixEvent(a),c=this.getTabView(b.target);c.onClickTab(b)},getTabView:function(a){var b=Lib.getAncestorByClass(a,"tabView");return b.repObject}});function TabView(a){this.id=a,this.tabs=[],this.listeners=[],this.tabBarVisibility=!0}TabView.prototype={appendTab:function(a){this.tabs.push(a),a.tabView=this;return a},removeTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a){this.tabs.splice(b,1);break}}},getTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a)return c}},selectTabByName:function(a){var b=Lib.getElementByClass(this.element,a+"Tab");b&&this.selectTab(b)},showTabBar:function(a){this.element?a?this.element.removeAttribute("hideTabBar"):this.element.setAttribute("hideTabBar","true"):this.tabBarVisibility=a},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)},onClickTab:function(a){var b=Lib.getAncestorByClass(a.target,"tab");b&&this.selectTab(b)},selectTab:function(a){if(Lib.hasClass(a,"tab")){if(Lib.hasClass(a,"selected"))return;var b=a.getAttribute("view");if(!b)return;var c=Lib.getAncestorByClass(a,"tabViewBody");c.selectedTab&&(c.selectedTab.removeAttribute("selected"),c.selectedBody.removeAttribute("selected"),Lib.removeClass(c.selectedTab,"selected"),Lib.removeClass(c.selectedBody,"selected"));var d=Lib.getElementByClass(c,"tab"+b+"Body");d||Trace.error("TabView.selectTab; Missing tab body",a),c.selectedTab=a,c.selectedBody=d,c.selectedTab.setAttribute("selected","true"),c.selectedBody.setAttribute("selected","true"),Lib.setClass(c.selectedBody,"selected"),Lib.setClass(c.selectedTab,"selected"),this.updateTabBody(c,b)}},updateTabBody:function(a,b){var c=a.selectedTab.repObject;if(!c._body._updated){c._body._updated=!0,c.bodyTag&&c.bodyTag.replace({tab:c},c._body),c&&c.onUpdateBody&&c.onUpdateBody(this,c._body);for(var d=0;dAbout...

          dp.SyntaxHighlighter

          Version: {V}

          http://www.dreamprojections.com/syntaxhighlighter

          ©2004-2007 Alex Gorbatchev.
          '},ClipboardSwf:null,Version:"1.5.1"}};a.SyntaxHighlighter=a.sh,a.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function(a){return a.collapse},func:function(a,b){a.parentNode.removeChild(a),b.div.className=b.div.className.replace("collapsed","")}},ViewSource:{label:"view plain",func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/'+d+""),e.document.close()}},CopyToClipboard:{label:"copy to clipboard",check:function(){return window.clipboardData!=null||a.sh.ClipboardSwf!=null},func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");if(window.clipboardData)window.clipboardData.setData("text",d);else if(a.sh.ClipboardSwf!=null){var e=c.flashCopier;e==null&&(e=document.createElement("div"),c.flashCopier=e,c.div.appendChild(e)),e.innerHTML=''}alert("The code is in your clipboard now")}},PrintSource:{label:"print",func:function(b,c){var d=document.createElement("IFRAME"),e=null;d.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;",document.body.appendChild(d),e=d.contentWindow.document,a.sh.Utils.CopyStyles(e,window.document),e.write('
          '+c.div.innerHTML+"
          "),e.close(),d.contentWindow.focus(),d.contentWindow.print(),alert("Printing..."),document.body.removeChild(d)}},About:{label:"?",func:function(b){var c=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"),d=c.document;a.sh.Utils.CopyStyles(d,window.document),d.write(a.sh.Strings.AboutDialog.replace("{V}",a.sh.Version)),d.close(),c.focus()}}},a.sh.Toolbar.Create=function(b){var c=document.createElement("DIV");c.className="tools";for(var d in a.sh.Toolbar.Commands){var e=a.sh.Toolbar.Commands[d];if(e.check!=null&&!e.check(b))continue;c.innerHTML+='"+e.label+""}return c},a.sh.Toolbar.Command=function(b,c){var d=c;while(d!=null&&d.className.indexOf("dp-highlighter")==-1)d=d.parentNode;d!=null&&a.sh.Toolbar.Commands[b].func(c,d.highlighter)},a.sh.Utils.CopyStyles=function(a,b){var c=b.getElementsByTagName("link");for(var d=0;d')},a.sh.Utils.FixForBlogger=function(b){return a.sh.isBloggerMode==!0?b.replace(/|<br\s*\/?>/gi,"\n"):b},a.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"',"g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'","g")},a.sh.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c},a.sh.Highlighter=function(){this.noGutter=!1,this.addControls=!0,this.collapse=!1,this.tabsToSpaces=!0,this.wrapColumn=80,this.showColumns=!0},a.sh.Highlighter.SortCallback=function(a,b){if(a.indexb.index)return 1;if(a.lengthb.length)return 1;return 0},a.sh.Highlighter.prototype.CreateElement=function(a){var b=document.createElement(a);b.highlighter=this;return b},a.sh.Highlighter.prototype.GetMatches=function(b,c){var d=0,e=null;while((e=b.exec(this.code))!=null)this.matches[this.matches.length]=new a.sh.Match(e[0],e.index,c)},a.sh.Highlighter.prototype.AddBit=function(a,b){if(a!=null&&a.length!=0){var c=this.CreateElement("SPAN");a=a.replace(/ /g," "),a=a.replace(/");if(b!=null)if(/br/gi.test(a)){var d=a.split(" 
          ");for(var e=0;ec.index&&a.index/gi,"\n"),c=b.split("\n");this.addControls==!0&&this.bar.appendChild(a.sh.Toolbar.Create(this));if(this.showColumns){var d=this.CreateElement("div"),e=this.CreateElement("div"),f=10,g=1;while(g<=150)g%f==0?(d.innerHTML+=g,g+=(g+"").length):(d.innerHTML+="·",g++);e.className="columns",e.appendChild(d),this.bar.appendChild(e)}for(var g=0,h=this.firstLine;g0;h++){if(c(d[h]).length==0)continue;var i=f.exec(d[h]);i!=null&&i.length>0&&(g=Math.min(i[0].length,g))}if(g>0)for(var h=0;h0&&c.appendTab(new HeadersTab(b)),b.request.queryString&&b.request.queryString.length&&c.appendTab(new ParamsTab(b)),b.request.postData&&c.appendTab(new SentDataTab(b,b.request.method)),b.response.content.text&&b.response.content.text.length>0&&c.appendTab(new ResponseTab(b)),this.showCache(b)&&c.appendTab(new CacheTab(b)),this.showHtml(b)&&c.appendTab(new HtmlTab(b)),this.showDataURL(b)&&c.appendTab(new DataURLTab(b));var d=c.render(a);c.tabs.length>0&&c.selectTabByName(c.tabs[0].id);return d},showCache:function(a){if(!a.cache)return!1;if(!a.cache.afterRequest)return!1;if(a.category=="image")return!1;return!0},showHtml:function(a){return a.response.content.mimeType=="text/html"||a.mimeType=="application/xhtml+xml"},showDataURL:function(a){return a.request.url.indexOf("data:")==0}});function HeadersTab(a){this.file=a}HeadersTab.prototype=domplate(TabView.Tab.prototype,{id:"Headers",label:Strings.Headers,bodyTag:TABLE({"class":"netInfoHeadersText netInfoText netInfoHeadersTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.ResponseHeaders))),TR({"class":"netInfoRequestHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.RequestHeaders))))),headerDataTag:FOR("param","$headers",TR(TD({"class":"netInfoParamName"},"$param.name"),TD({"class":"netInfoParamValue"},PRE("$param|getParamValue")))),getParamValue:function(a){return Lib.wrapText(a.value,!0)},onUpdateBody:function(a,b){this.file.response.headers&&this.insertHeaderRows(b,this.file.response.headers,"Headers","ResponseHeaders"),this.file.request.headers&&this.insertHeaderRows(b,this.file.request.headers,"Headers","RequestHeaders")},insertHeaderRows:function(a,b,c,d){var e=Lib.getElementByClass(a,"netInfo"+c+"Table"),f=Lib.getElementByClass(e,"netInfo"+d+"Title");b.length?(this.headerDataTag.insertRows({headers:b},f?f:a),Lib.removeClass(f,"collapsed")):Lib.setClass(f,"collapsed")}});function ResponseTab(a){this.file=a}ResponseTab.prototype=domplate(TabView.Tab.prototype,{id:"Response",label:Strings.Response,bodyTag:DIV({"class":"netInfoResponseText netInfoText"},PRE({"class":"javascript:nocontrols:nogutter:",name:"code"})),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoResponseText");if(this.file.category=="image"){Lib.clearNode(c);var d=b.ownerDocument.createElement("img");d.src=this.file.href,c.appendChild(d,c)}else{Lib.clearNode(c.firstChild);var e=this.file.response.content.text,f=this.file.response.content.mimeType;f=="application/javascript"||f=="text/javascript"||f=="application/x-javascript"||f=="text/ecmascript"||f=="application/ecmascript"?(c.firstChild.innerHTML=e,dp.SyntaxHighlighter.HighlightAll(c.firstChild)):Lib.insertWrappedText(e,c.firstChild)}}});function ParamsTab(a){this.file=a}ParamsTab.prototype=domplate(HeadersTab.prototype,{id:"Params",label:Strings.URLParameters,bodyTag:TABLE({"class":"netInfoParamsText netInfoText netInfoParamsTable",cellpadding:0,cellspacing:0},TBODY()),onUpdateBody:function(a,b){if(this.file.request.queryString){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,this.file.request.queryString,"Params")}}});function SentDataTab(a,b){b=b.charAt(0).toUpperCase()+b.slice(1).toLowerCase(),this.file=a,this.id=b,this.label=Strings[b]}SentDataTab.prototype=domplate(HeadersTab.prototype,{bodyTag:DIV({"class":"netInfo$tab.id\\Text netInfoText"},TABLE({"class":"netInfo$tab.id\\Table",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){var c=this.file.request.postData;if(c){var d=Lib.getElementByClass(b,"netInfo"+this.id+"Text");c.mimeType=="application/x-www-form-urlencoded"?this.insertHeaderRows(d,c.params,this.id):Lib.insertWrappedText(c.text,d)}}});function CookiesTab(a){this.file=a}CookiesTab.prototype=domplate(HeadersTab.prototype,{id:"Cookies",label:Strings.Cookies,bodyTag:DIV({"class":"netInfoCookiesText netInfoText"},TABLE({"class":"netInfoCookiesTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.ResponseCookies))),TR({"class":"netInfoRequestCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.RequestCookies)))))),onUpdateBody:function(a,b){if(file.response.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.response.cookies,"Cookies","ResponseCookies")}if(file.request.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.request.cookies,"Cookies","RequestCookies")}}});function CacheTab(a){this.file=a}CacheTab.prototype=domplate(HeadersTab.prototype,{id:"Cache",label:Strings.Cache,bodyTag:DIV({"class":"netInfoCacheText netInfoText"},TABLE({"class":"netInfoCacheTable",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){if(this.file.cache&&this.file.cache.afterRequest){var c=this.file.cache.afterRequest,d=[];for(var e in c)d.push({name:e,value:c[e]});this.insertHeaderRows(b,d,"Cache")}}});function HtmlTab(a){this.file=a}HtmlTab.prototype=domplate(HeadersTab.prototype,{id:"HTML",label:Strings.HTML,bodyTag:DIV({"class":"netInfoHtmlText netInfoText"},IFRAME({"class":"netInfoHtmlPreview",onload:"$onLoad"}),DIV({"class":"htmlPreviewResizer"})),onUpdateBody:function(a,b){this.preview=Lib.getElementByClass(b,"netInfoHtmlPreview");var c=parseInt(Cookies.getCookie("htmlPreviewHeight"));isNaN(c)||(this.preview.style.height=c+"px");var d=Lib.getElementByClass(b,"htmlPreviewResizer");this.resizer=new DragDrop.Tracker(d,{onDragStart:Lib.bind(this.onDragStart,this),onDragOver:Lib.bind(this.onDragOver,this),onDrop:Lib.bind(this.onDrop,this)})},onLoad:function(a){var b=Lib.fixEvent(a),c=Lib.getAncestorByClass(b.target,"tabHTMLBody").repObject;c.preview.contentWindow.document.body.innerHTML=c.file.response.content.text},onDragStart:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.setAttribute("resizingHtmlPreview","true"),this.startHeight=this.preview.clientHeight},onDragOver:function(a,b){var c=this.startHeight+a.y;this.preview.style.height=c+"px",Cookies.setCookie("htmlPreviewHeight",c)},onDrop:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.removeAttribute("resizingHtmlPreview")}});function DataURLTab(a){this.file=a}DataURLTab.prototype=domplate(HeadersTab.prototype,{id:"DataURL",label:Strings.DataURL,bodyTag:DIV({"class":"netInfoDataURLText netInfoText"}),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoDataURLText"),d=this.file.request.url;if(d.indexOf("data:image")==0){var e=b.ownerDocument.createElement("img");e.src=d,c.appendChild(e)}else Lib.insertWrappedText(unescape(d),c)}});return RequestBody}}),require.def("domplate/infoTip",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var InfoTip=Lib.extend({listeners:[],maxWidth:100,maxHeight:80,infoTipMargin:10,infoTipWindowPadding:25,tags:domplate({infoTipTag:DIV({"class":"infoTip"})}),initialize:function(){if(!$.browser.msie){var a=$("body");a.bind("mouseover",Lib.bind(this.onMouseMove,this)),a.bind("mouseout",Lib.bind(this.onMouseOut,this)),a.bind("mousemove",Lib.bind(this.onMouseMove,this));return this.infoTip=this.tags.infoTipTag.append({},Lib.getBody(document))}},showInfoTip:function(a,b,c,d,e,f){var g=Lib.getOverflowParent(b),h=c+(g?g.scrollLeft:0),i=Lib.dispatch2(this.listeners,"showInfoTip",[a,b,h,d,e,f]);if(i){var j=a.ownerDocument.documentElement,k=j.clientWidth,l=j.clientHeight;c+a.offsetWidth+this.infoTipMargin>k-this.infoTipWindowPadding?(a.style.left="auto",a.style.right=k-c+this.infoTipMargin+"px"):(a.style.left=c+this.infoTipMargin+"px",a.style.right="auto"),d+a.offsetHeight+this.infoTipMargin>l?(a.style.top=Math.max(0,l-(a.offsetHeight+this.infoTipMargin))+"px",a.style.bottom="auto"):(a.style.top=d+this.infoTipMargin+"px",a.style.bottom="auto"),a.setAttribute("active","true")}else this.hideInfoTip(a)},hideInfoTip:function(a){a&&a.removeAttribute("active")},onMouseOut:function(a){a.relatedTarget||this.hideInfoTip(this.infoTip)},onMouseMove:function(a){this.infoTip.setAttribute("multiline",!1);var b=a.clientX,c=a.clientY;this.showInfoTip(this.infoTip,a.target,b,c,a.rangeParent,a.rangeOffset)},populateTimingInfoTip:function(a,b){this.tags.colorTag.replace({rgbValue:b},a);return!0},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)}});InfoTip.initialize();return InfoTip}}),require.def("domplate/popupMenu",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var Controller={controllers:[],controllerContext:{label:"controller context"},initialize:function(a){this.controllers=[],this.controllerContext=a||this.controllerContext},shutdown:function(){this.removeControllers()},addController:function(){for(var a=0,b;b=arguments[a];a++){typeof b[0]=="string"&&(b[0]=$$(b[0],this.controllerContext));var c=b[2];b[2]=Lib.bind(c,this),b[3]=c,this.controllers.push(b),Lib.addEventListener.apply(this,b)}},removeController:function(){for(var a=0,b;b=arguments[a];a++)for(var c=0,d;d=this.controllers[c];c++)b[0]==d[0]&&b[1]==d[1]&&b[2]==d[3]&&Lib.removeEventListener.apply(this,d)},removeControllers:function(){for(var a=0,b;b=this.controllers[a];a++)Lib.removeEventListener.apply(this,b)}},menuItemProps={"class":"$item.className",type:"$item.type",value:"$item.value",_command:"$item.command"};Lib.isIE6&&(menuItemProps.href="javascript:void(0)");var MenuPlate=domplate({tag:DIV({"class":"popupMenu popupMenuShadow"},DIV({"class":"popupMenuContent popupMenuShadowContent"},FOR("item","$object.items|memberIterator",TAG("$item.tag",{item:"$item"})))),itemTag:A(menuItemProps,"$item.label"),checkBoxTag:A(Lib.extend(menuItemProps,{checked:"$item.checked"}),"$item.label"),radioButtonTag:A(Lib.extend(menuItemProps,{selected:"$item.selected"}),"$item.label"),groupTag:A(Lib.extend(menuItemProps,{child:"$item.child"}),"$item.label"),shortcutTag:A(menuItemProps,"$item.label",SPAN({"class":"popupMenuShortcutKey"},"$item.key")),separatorTag:SPAN({"class":"popupMenuSeparator"}),memberIterator:function(a){var b=[];for(var c=0,d=a.length;c0?a.response.status+" ":"";return b+a.response.statusText},getType:function(a){return a.response.content.mimeType},getDomain:function(a){return Lib.getPrettyDomain(a.request.url)},getSize:function(a){var b=a.response.bodySize,c=b&&b!=-1?b:a.response.content.size;return this.formatSize(c)},isExpandable:function(a){var b=a.response.headers.length>0,c=a.request.url.indexOf("data:")==0;return b||c},formatSize:function(a){return Lib.formatSize(a)},getElapsedTime:function(a){return Lib.formatTime(a.time)},onClick:function(a){var b=Lib.fixEvent(a);if(Lib.isLeftClick(a)){var c=Lib.getAncestorByClass(b.target,"netRow");c&&(this.toggleHeadersRow(c),Lib.cancelEvent(a))}else Lib.isControlClick(a)&&window.open(a.target.innerText||a.target.textContent)},toggleHeadersRow:function(a){if(Lib.hasClass(a,"isExpandable")){var b=a.repObject;Lib.toggleClass(a,"opened");if(Lib.hasClass(a,"opened")){var c=this.netInfoTag.insertRows({},a)[0];c.repObject=b;var d=new RequestBody;d.render(c.firstChild,b)}else{var c=a.nextSibling,e=Lib.getElementByClass(c,"netInfoBody");a.parentNode.removeChild(c)}}},onOpenOptions:function(a){var b=Lib.fixEvent(a);Lib.cancelEvent(a);if(Lib.isLeftClick(a)){var c=b.target,d=Lib.getAncestorByClass(c,"netRow"),e=this.getMenuItems(d),f=new Menu({id:"requestContextMenu",items:e});f.showPopup(c)}},getMenuItems:function(a){var b=a.repObject,c=a.phase,d=c.files[0]==b&&this.phases[0]==c,e=[{label:Strings.menuBreakTimeline,type:"checkbox",disabled:d,checked:c.files[0]==b&&!d,command:Lib.bind(this.breakLayout,this,a)},"-",{label:Strings.menuOpenRequest,command:Lib.bind(this.openRequest,this,b)},{label:Strings.menuOpenResponse,disabled:!b.response.content.text,command:Lib.bind(this.openResponse,this,b)}];Lib.dispatch(this.listeners,"getMenuItems",[this,e,c,b]);return e},openRequest:function(a,b){window.open(b.request.url)},openResponse:function(a,b){var c=b.response.content.text,d=b.response.content.mimeType,e=b.response.content.encoding,f="data:"+(d?d:"")+";"+(e?e:"")+","+c;window.open(f)},breakLayout:function(a,b){var c=b.repObject,d=b.phase,e=d.files[0]==c;b.breakLayout=!e,b.setAttribute("breakLayout",b.breakLayout?"true":"false");var f=Lib.getAncestorByClass(b,"netTable"),g=HarModel.getParentPage(this.input,c);this.updateLayout(f,g)},updateLayout:function(a,b){var c=HarModel.getPageEntries(this.input,b);this.table=a;var d=this.table.firstChild,e=this.firstRow=d.firstChild.nextSibling;this.phases=[];var f=Cookies.getCookie("phaseInterval");f||(f=4e3);var g=null,h=b?Lib.parseISO8601(b.startedDateTime):null,i=b&&b.pageTimings?b.pageTimings.onLoad:-1;i>0&&(i+=h);for(var j=0;j=0&&(o=l>i&&l-m>=f&&l+k.time>=n+f),typeof e.breakLayout=="boolean"?!g||e.breakLayout?g=this.startPhase(k):g.addFile(k):!g||o?g=this.startPhase(k):g.addFile(k),this.phases[0]!=g&&e.setAttribute("breakLayout",g.files[0]==k?"true":"false");if(g.startTime==undefined||g.startTime>l)g.startTime=l;if(g.endTime==undefined||g.endTime0){var g=d+f-c.startTime,h=(g/this.phaseElapsed*100).toFixed(3);c.pageTimings[e].offset=h}}}},updateTimeline:function(a){var b=this.table.firstChild,c;for(var d=this.firstRow;d;d=d.nextSibling){var e=d.repObject;if(!e)continue;if(Lib.hasClass(d,"netInfoRow"))continue;c=this.calculateFileTimes(a,e,c),d.phase=e.phase,delete e.phase;var f=Lib.getElementByClass(d,"netTimelineBar"),g=f.children[0],h=g.nextSibling,i=h.nextSibling,j=i.nextSibling,k=j.nextSibling,l=k.nextSibling;g.style.left=i.style.left=h.style.left=j.style.left=k.style.left=l.style.left=this.barOffset+"%",g.style.width=this.barBlockingWidth+"%",h.style.width=this.barResolvingWidth+"%",i.style.width=this.barConnectingWidth+"%",j.style.width=this.barSendingWidth+"%",k.style.width=this.barWaitingWidth+"%",l.style.width=this.barReceivingWidth+"%";var m=Lib.getElementsByClass(f,"netPageTimingBar");for(var n=0;n0&&b.push({label:d.name,time:e,classes:d.classes,comment:d.description})}var f=a.pageTimings?a.pageTimings._timeStamps:[];f&&b.push.apply(b,f);var g=this.phases;for(var c=0;c=h.startTime)h.startTime>l&&(h.startTime=l),h.endTime0&&(o+=" (onload: "+Lib.formatTime(a.pageTimings.onLoad)+")"),n.innerHTML=o}},formatRequestCount:function(a){return a+" "+(a==1?Strings.request:Strings.requests)},summarizePhase:function(a){var b=0,c=0,d="all";d=="all"&&(d=null);var e=0,f=0,g=0;for(var h=0;hg&&(g=m)}}var n=g-f;return{cachedSize:b,totalSize:c,totalTime:n,fileCount:e}},showInfoTip:function(a,b,c,d){var e=Lib.getAncestorByClass(b,"netTable");if(e&&e.repObject==this){var f=Lib.getAncestorByClass(b,"netRow");if(f){if(Lib.getAncestorByClass(b,"netBar")){a.setAttribute("multiline",!0);var g=f.repObject.startedDateTime+"-nettime";this.infoTipURL=g;return this.populateTimeInfoTip(a,f)}if(Lib.hasClass(b,"netSizeLabel")){var g=f.repObject.startedDateTime+"-netsize";this.infoTipURL=g;return this.populateSizeInfoTip(a,f)}}}},populateTimeInfoTip:function(a,b){EntryTimeInfoTip.render(this,b,a);return!0},populateSizeInfoTip:function(a,b){EntrySizeInfoTip.render(this,b,a);return!0},render:function(a,b){var c=HarModel.getPageEntries(this.input,b);if(!c.length)return null;return this.append(a,b,c)},append:function(a,b,c){this.table||(this.table=this.tableTag.replace({requestList:this},a,this)),this.summaryRow||(this.summaryRow=this.summaryTag.insertRows({},this.table.firstChild)[0]);var d=this.table.firstChild,e=d.lastChild.previousSibling,f=this.fileTag.insertRows({files:c},e,this);this.updateLayout(this.table,b);return f[0]},addPageTiming:function(a){this.pageTimings.push(a)}});function Phase(a){this.files=[],this.pageTimings=[],this.addFile(a)}Phase.prototype={addFile:function(a){this.files.push(a),a.phase=this},getLastStartTime:function(){return this.files[this.files.length-1].startedDateTime}};var EntryTimeInfoTip=domplate({tableTag:TABLE({"class":"timeInfoTip"},TBODY()),timingsTag:FOR("time","$timings",TR({"class":"timeInfoTipRow",$collapsed:"$time|hideBar"},TD({"class":"$time|getBarClass timeInfoTipBar",$loaded:"$time.loaded",$fromCache:"$time.fromCache"}),TD({"class":"timeInfoTipCell startTime"},"$time.start|formatStartTime"),TD({"class":"timeInfoTipCell elapsedTime"},"$time.elapsed|formatTime"),TD("$time|getLabel"))),startTimeTag:TR(TD(),TD("$startTime.time|formatStartTime"),TD({"class":"timeInfoTipStartLabel",colspan:2},"$startTime|getLabel")),separatorTag:TR({},TD({"class":"timeInfoTipSeparator",colspan:4,height:"10px"},SPAN("$label"))),eventsTag:FOR("event","$events",TR({"class":"timeInfoTipEventRow"},TD({"class":"timeInfoTipBar",align:"center"},DIV({"class":"$event|getPageTimingClass timeInfoTipEventBar"})),TD("$event.start|formatStartTime"),TD({colspan:2},"$event|getTimingLabel"))),hideBar:function(a){return!a.elapsed&&a.bar=="request.phase.Blocking"},getBarClass:function(a){var b=a.bar.substr(a.bar.lastIndexOf(".")+1);return"net"+b+"Bar"},getPageTimingClass:function(a){return a.classes?a.classes:""},formatTime:function(a){return Lib.formatTime(a)},formatStartTime:function(a){var b=a>0,c=Lib.formatTime(Math.abs(a));if(!a)return c;return(b>0?"+":"-")+c},getLabel:function(a){return Strings[a.bar]},getTimingLabel:function(a){return a.bar},render:function(a,b,c){var d=a.input,e=b.repObject,f=HarModel.getParentPage(d,e),g=f?Lib.parseISO8601(f.startedDateTime):null,h=Lib.parseISO8601(e.startedDateTime),i=EntryTimeInfoTip.tableTag.replace({},c),j={};g?j.time=h-g:j.time=h-b.phase.startTime,j.bar="request.Started",this.startTimeTag.insertRows({startTime:j},i.firstChild),this.separatorTag.insertRows({label:Strings["request.phases.label"]},i.firstChild);var k=0,l=[],m=e.timings.blocked,n=e.timings.dns,o=e.timings.ssl,p=e.timings.connect,q=e.timings.send,r=e.timings.wait,s=e.timings.receive;m>=0&&l.push({bar:"request.phase.Blocking",elapsed:m,start:k}),n>=0&&l.push({bar:"request.phase.Resolving",elapsed:n,start:k+=m<0?0:m}),p>=0&&l.push({bar:"request.phase.Connecting",elapsed:p,start:k+=n<0?0:n}),q>=0&&l.push({bar:"request.phase.Sending",elapsed:q,start:k+=p<0?0:p}),r>=0&&l.push({bar:"request.phase.Waiting",elapsed:r,start:k+=q<0?0:q}),s>=0&&l.push({bar:"request.phase.Receiving",elapsed:s,start:k+=r<0?0:r,loaded:e.loaded,fromCache:e.fromCache}),this.timingsTag.insertRows({timings:l},i.firstChild);if(!f)return!0;var t=[];for(var u=0;u0?Lib.setClass(a,"opened"):Lib.removeClass(a,"opened")})},render:function(a,b){return this.tag.append({object:b},a,this)}});return Menu}}),require.def("harPreview",["preview/pageList","preview/harModel","core/lib","core/trace","preview/menu"],function(a,b,c,d,e){function f(){this.id="harPreview",this.model=new b}f.prototype={initialize:function(a){this.topMenu=new e,this.topMenu.render(a);var d=c.bind(this.appendPreview,this);b.Loader.run(d)},appendPreview:function(e){try{var f=b.parse(e,!0);this.model.append(f);var h=new a(f);h.render(g),c.fireEvent(g,"onPreviewHARLoaded")}catch(i){d.exception("HarPreview.appendPreview; EXCEPTION ",i)}},loadHar:function(a,c){c=c||{};return b.Loader.load(this,a,c.jsonp,c.jsonpCallback,c.success,c.ajaxError)}};var g=document.getElementById("content"),h=g.repObject=new f;c.fireEvent(g,"onPreviewPreInit"),h.initialize(g),c.fireEvent(g,"onPreviewInit"),d.log("HarPreview; initialized OK")}) \ No newline at end of file diff --git a/harstorage/public/scripts/harviewer/require.js b/harstorage/public/scripts/harviewer/require.js new file mode 100644 index 0000000..8d7966d --- /dev/null +++ b/harstorage/public/scripts/harviewer/require.js @@ -0,0 +1 @@ +var require,define;(function(){function getInteractiveScript(){var a,b,c;if(interactiveScript&&interactiveScript.readyState==="interactive")return interactiveScript;a=document.getElementsByTagName("script");for(b=a.length-1;b>-1&&(c=a[b]);b--)if(c.readyState==="interactive")return interactiveScript=c;return null}function newContext(contextName){function loadPaused(a){a.prefix&&a.name.indexOf("__$p")===0&&defined[a.prefix]&&(a=makeModuleMap(a.originalName,a.parentMap));var b=a.prefix,c=a.fullName;!specified[c]&&!loaded[c]&&(specified[c]=!0,b?defined[b]?callPlugin(b,a):(pluginsQueue[b]||(pluginsQueue[b]=[],(managerCallbacks[b]||(managerCallbacks[b]=[])).push({onDep:function(a,c){if(a===b){var d,e,f=pluginsQueue[b];for(d=0;d0)return undefined;if(config.priorityWait)if(isPriorityDone())resume();else return undefined;for(f in loaded)if(!(f in empty)){d=!0;if(!loaded[f])if(b)c+=f+" ";else{e=!0;break}}if(!d&&!context.waitCount)return undefined;if(b&&c){g=new Error("require.js load timeout for modules: "+c),g.requireType="timeout",g.requireModules=c;return req.onError(g)}if(e||context.scriptCount){(isBrowser||isWebWorker)&&setTimeout(checkLoaded,50);return undefined}if(context.waitCount){for(i=0;h=waitAry[i];i++)forceExec(h,{});checkLoaded();return undefined}req.checkReadyState();return undefined}function forceExec(a,b){if(a.isDone)return undefined;var c=a.fullName,d=a.depArray,e,f;if(c){if(b[c])return defined[c];b[c]=!0}for(f=0;f0&&(a.splice(b-1,2),b-=2);else break}var context,resume,config={waitSeconds:7,baseUrl:s.baseUrl||"./",paths:{},pkgs:{}},defQueue=[],specified={require:!0,exports:!0,module:!0},urlMap={},defined={},loaded={},waiting={},waitAry=[],waitIdCounter=0,managerCallbacks={},plugins={},pluginsQueue={},resumeDepth=0,normalizedWaiting={};resume=function(){var a,b,c;resumeDepth+=1,context.scriptCount<=0&&(context.scriptCount=0);while(defQueue.length){a=defQueue.shift();if(a[0]===null)return req.onError(new Error("Mismatched anonymous require.def modules"));callDefMain(a)}if(!config.priorityWait||isPriorityDone())while(context.paused.length){c=context.paused,context.pausedCount+=c.length,context.paused=[];for(b=0;a=c[b];b++)loadPaused(a);context.startTime=(new Date).getTime(),context.pausedCount-=c.length}resumeDepth===1&&checkLoaded(),resumeDepth-=1;return undefined},context={contextName:contextName,config:config,defQueue:defQueue,waiting:waiting,waitCount:0,specified:specified,loaded:loaded,urlMap:urlMap,scriptCount:0,urlFetched:{},defined:defined,paused:[],pausedCount:0,plugins:plugins,managerCallbacks:managerCallbacks,makeModuleMap:makeModuleMap,normalize:normalize,configure:function(a){var b,c,d,e,f,g;a.baseUrl&&(a.baseUrl.charAt(a.baseUrl.length-1)!=="/"&&(a.baseUrl+="/")),b=config.paths,d=config.packages,e=config.pkgs,mixin(config,a,!0);if(a.paths){for(c in a.paths)c in empty||(b[c]=a.paths[c]);config.paths=b}f=a.packagePaths;if(f||a.packages){if(f)for(c in f)c in empty||configurePackageDir(e,f[c],c);a.packages&&configurePackageDir(e,a.packages),config.pkgs=e}a.priority&&(g=context.requireWait,context.requireWait=!1,context.takeGlobalQueue(),resume(),context.require(a.priority),resume(),context.requireWait=g,config.priorityWait=a.priority),(a.deps||a.callback)&&context.require(a.deps||[],a.callback),a.ready&&req.ready(a.ready)},isDefined:function(a,b){return makeModuleMap(a,b).fullName in defined},require:function(a,b,c){var d,e,f;if(typeof a==="string"){if(req.get)return req.get(context,a,b);d=a,c=b,f=makeModuleMap(d,c),e=defined[f.fullName];if(e===undefined)return req.onError(new Error("require: module name '"+f.fullName+"' has not been loaded yet for context: "+contextName));return e}main(null,a,b,c);if(!context.requireWait)while(!context.scriptCount&&context.paused.length)resume();return undefined},takeGlobalQueue:function(){globalDefQueue.length&&(apsp.apply(context.defQueue,[context.defQueue.length-1,0].concat(globalDefQueue)),globalDefQueue=[])},completeLoad:function(a){var b;context.takeGlobalQueue();while(defQueue.length){b=defQueue.shift();if(b[0]===null){b[0]=a;break}if(b[0]===a)break;callDefMain(b),b=null}b?callDefMain(b):callDefMain([a,[],a==="jquery"&&typeof jQuery!=="undefined"?function(){return jQuery}:null]),loaded[a]=!0,jQueryCheck(),req.isAsync&&(context.scriptCount-=1),resume(),req.isAsync||(context.scriptCount-=1)},toUrl:function(a,b){var c=a.lastIndexOf("."),d=null;c!==-1&&(d=a.substring(c,a.length),a=a.substring(0,c));return context.nameToUrl(a,d,b)},nameToUrl:function(a,b,c){var d,e,f,g,h,i,j,k,l=context.config;if(a.indexOf("./")===0||a.indexOf("../")===0)h=c&&c.url?c.url.split("/"):[],h.length&&h.pop(),h=h.concat(a.split("/")),trimDots(h),k=h.join("/")+(b?b:req.jsExtRegExp.test(a)?"":".js");else{a=normalize(a,c);if(req.jsExtRegExp.test(a))k=a+(b?b:"");else{d=l.paths,e=l.pkgs,h=a.split("/");for(i=h.length;i>0;i--){j=h.slice(0,i).join("/");if(d[j]){h.splice(0,i,d[j]);break}if(f=e[j]){a===f.name?g=f.location+"/"+f.main:g=f.location+"/"+f.lib,h.splice(0,i,g);break}}k=h.join("/")+(b||".js"),k=(k.charAt(0)==="/"||k.match(/^\w+:/)?"":l.baseUrl)+k}}return l.urlArgs?k+((k.indexOf("?")===-1?"?":"&")+l.urlArgs):k}},context.jQueryCheck=jQueryCheck,context.resume=resume;return context}function configurePackageDir(a,b,c){var d,e,f;for(d=0;f=b[d];d++)f=typeof f==="string"?{name:f}:f,e=f.location,c&&(!e||e.indexOf("/")!==0&&e.indexOf(":")===-1)&&(e=c+"/"+(e||f.name)),a[f.name]={name:f.name,location:e||f.name,lib:f.lib||"lib",main:(f.main||"lib/main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}}function mixin(a,b,c){for(var d in b)!(d in empty)&&(!(d in a)||c)&&(a[d]=b[d]);return req}function isArray(a){return ostring.call(a)==="[object Array]"}function isFunction(a){return ostring.call(a)==="[object Function]"}var version="0.24.0",commentRegExp=/(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,cjsRequireRegExp=/require\(["']([^'"\s]+)["']\)/g,currDirRegExp=/^\.\//,jsSuffixRegExp=/\.js$/,ostring=Object.prototype.toString,ap=Array.prototype,aps=ap.slice,apsp=ap.splice,isBrowser=typeof window!=="undefined"&&navigator&&document,isWebWorker=!isBrowser&&typeof importScripts!=="undefined",readyRegExp=isBrowser&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",reqWaitIdPrefix="_r@@",empty={},contexts={},globalDefQueue=[],interactiveScript=null,isDone=!1,useInteractive=!1,req,cfg={},currentlyAddingScript,s,head,baseElement,scripts,script,src,subPath,mainScript,dataMain,i,scrollIntervalId,setReadyState,ctx;if(typeof require!=="undefined"){if(isFunction(require))return;cfg=require}req=require=function(a,b){var c=defContextName,d,e;!isArray(a)&&typeof a!=="string"&&(e=a,isArray(b)?(a=b,b=arguments[2]):a=[]),e&&e.context&&(c=e.context),d=contexts[c]||(contexts[c]=newContext(c)),e&&d.configure(e);return d.require(a,b)},req.version=version,req.isArray=isArray,req.isFunction=isFunction,req.mixin=mixin,req.jsExtRegExp=/^\/|:|\?|\.js$/,s=req.s={contexts:contexts,skipAsync:{},isPageLoaded:!isBrowser,readyCalls:[]},req.isAsync=req.isBrowser=isBrowser,isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=function(a){throw a},req.load=function(a,b,c){var d=a.contextName,e=a.urlFetched,f=a.loaded;isDone=!1,f[b]||(f[b]=!1),e[c]||(a.scriptCount+=1,req.attach(c,d,b),e[c]=!0,a.jQuery&&!a.jQueryIncremented&&(a.jQuery.readyWait+=1,a.jQueryIncremented=!0))},define=req.def=function(a,b,c){var d,e;typeof a!=="string"&&(c=b,b=a,a=null),req.isArray(b)||(c=b,b=[]),!a&&!b.length&&req.isFunction(c)&&(c.length&&(c.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(a,c){b.push(c)}),b=["require","exports","module"].concat(b)));if(useInteractive){d=currentlyAddingScript||getInteractiveScript();if(!d)return req.onError(new Error("ERROR: No matching script interactive for "+c));a||(a=d.getAttribute("data-requiremodule")),e=contexts[d.getAttribute("data-requirecontext")]}(e?e.defQueue:globalDefQueue).push([a,b,c]);return undefined},define.amd={multiversion:!0,plugins:!0},req.execCb=function(a,b,c){return b.apply(null,c)},req.onScriptLoad=function(a){var b=a.currentTarget||a.srcElement,c,d,e;if(a.type==="load"||readyRegExp.test(b.readyState))interactiveScript=null,c=b.getAttribute("data-requirecontext"),d=b.getAttribute("data-requiremodule"),e=contexts[c],contexts[c].completeLoad(d),b.detachEvent&&!isOpera?b.detachEvent("onreadystatechange",req.onScriptLoad):b.removeEventListener("load",req.onScriptLoad,!1)},req.attach=function(a,b,c,d,e){var f,g,h;if(isBrowser){d=d||req.onScriptLoad,f=document.createElement("script"),f.type=e||"text/javascript",f.charset="utf-8",f.async=!s.skipAsync[a],f.setAttribute("data-requirecontext",b),f.setAttribute("data-requiremodule",c),f.attachEvent&&!isOpera?(useInteractive=!0,f.attachEvent("onreadystatechange",d)):f.addEventListener("load",d,!1),f.src=a,currentlyAddingScript=f,baseElement?head.insertBefore(f,baseElement):head.appendChild(f),currentlyAddingScript=null;return f}isWebWorker&&(h=contexts[b],g=h.loaded,g[c]=!1,importScripts(a),h.completeLoad(c));return null};if(isBrowser){scripts=document.getElementsByTagName("script");for(i=scripts.length-1;i>-1&&(script=scripts[i]);i--){head||(head=script.parentNode);if(dataMain=script.getAttribute("data-main")){cfg.baseUrl||(src=dataMain.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath,dataMain=mainScript.replace(jsSuffixRegExp,"")),cfg.deps=cfg.deps?cfg.deps.concat(dataMain):[dataMain];break}}}s.baseUrl=cfg.baseUrl,req.pageLoaded=function(){s.isPageLoaded||(s.isPageLoaded=!0,scrollIntervalId&&clearInterval(scrollIntervalId),setReadyState&&(document.readyState="complete"),req.callReady())},req.checkReadyState=function(){var a=s.contexts,b;for(b in a)if(!(b in empty))if(a[b].waitCount)return;s.isDone=!0,req.callReady()},req.callReady=function(){var a=s.readyCalls,b,c,d,e,f;if(s.isPageLoaded&&s.isDone){if(a.length){s.readyCalls=[];for(b=0;c=a[b];b++)c()}d=s.contexts;for(f in d)f in empty||(e=d[f],e.jQueryIncremented&&(e.jQuery.ready(!0),e.jQueryIncremented=!1))}},req.ready=function(a){s.isPageLoaded&&s.isDone?a():s.readyCalls.push(a);return req},isBrowser&&(document.addEventListener?(document.addEventListener("DOMContentLoaded",req.pageLoaded,!1),window.addEventListener("load",req.pageLoaded,!1),document.readyState||(setReadyState=!0,document.readyState="loading")):window.attachEvent&&(window.attachEvent("onload",req.pageLoaded),self===self.top&&(scrollIntervalId=setInterval(function(){try{document.body&&(document.documentElement.doScroll("left"),req.pageLoaded())}catch(a){}},30))),document.readyState==="complete"&&req.pageLoaded()),req(cfg),req.isAsync&&typeof setTimeout!=="undefined"&&(ctx=s.contexts[cfg.context||defContextName],ctx.requireWait=!0,setTimeout(function(){ctx.requireWait=!1,ctx.takeGlobalQueue(),ctx.jQueryCheck(),ctx.scriptCount||ctx.resume(),req.checkReadyState()},0))})() \ No newline at end of file diff --git a/harstorage/public/scripts/highcharts/exporting.js b/harstorage/public/scripts/highcharts/exporting.js new file mode 100644 index 0000000..5820f5a --- /dev/null +++ b/harstorage/public/scripts/highcharts/exporting.js @@ -0,0 +1,22 @@ +/* + Highcharts JS v2.2.0 (2012-02-16) + Exporting module + + (c) 2010-2011 Torstein H?nsi + + License: www.highcharts.com/license +*/ +(function(){function x(a){for(var b=a.length;b--;)typeof a[b]==="number"&&(a[b]=Math.round(a[b])-0.5);return a}var f=Highcharts,y=f.Chart,z=f.addEvent,B=f.removeEvent,r=f.createElement,u=f.discardElement,t=f.css,s=f.merge,k=f.each,n=f.extend,C=Math.max,h=document,D=window,A=h.documentElement.ontouchstart!==void 0,v=f.getOptions();n(v.lang,{downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",exportButtonTitle:"Export to raster or vector image", +printButtonTitle:"Print the chart"});v.navigation={menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF"},menuItemStyle:{padding:"0 5px",background:"none",color:"#303030",fontSize:A?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{align:"right",backgroundColor:{linearGradient:[0,0,0,20],stops:[[0.4,"#F7F7F7"],[0.6,"#E3E3E3"]]},borderColor:"#B0B0B0",borderRadius:3,borderWidth:1,height:20,hoverBorderColor:"#909090",hoverSymbolFill:"#81A7CF",hoverSymbolStroke:"#4572A5", +symbolFill:"#E0E0E0",symbolStroke:"#A0A0A0",symbolX:11.5,symbolY:10.5,verticalAlign:"top",width:24,y:10}};v.exporting={type:"image/png",url:"http://export.highcharts.com/",width:800,buttons:{exportButton:{symbol:"exportIcon",x:-10,symbolFill:"#A8BF77",hoverSymbolFill:"#768F3E",_id:"exportButton",_titleKey:"exportButtonTitle",menuItems:[{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF", +onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]},printButton:{symbol:"printIcon",x:-36,symbolFill:"#B5C9DF",hoverSymbolFill:"#779ABF",_id:"printButton",_titleKey:"printButtonTitle",onclick:function(){this.print()}}}};n(y.prototype,{getSVG:function(a){var b=this,c,d,e,g=s(b.options,a);if(!h.createElementNS)h.createElementNS=function(a,b){var c=h.createElement(b);c.getBBox=function(){return f.Renderer.prototype.Element.prototype.getBBox.apply({element:c})}; +return c};a=r("div",null,{position:"absolute",top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},h.body);n(g.chart,{renderTo:a,forExport:!0});g.exporting.enabled=!1;g.chart.plotBackgroundImage=null;g.series=[];k(b.series,function(a){e=s(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});if(!e.isInternal){if(e&&e.marker&&/^url\(/.test(e.marker.symbol))e.marker.symbol="circle";g.series.push(e)}});c=new Highcharts.Chart(g);k(["xAxis","yAxis"],function(a){k(b[a],function(b,d){var e= +c[a][d],g=b.getExtremes(),f=g.userMin,g=g.userMax;(f!==void 0||g!==void 0)&&e.setExtremes(f,g,!0,!1)})});d=c.container.innerHTML;g=null;c.destroy();u(a);d=d.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/isTracker="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/ /g,"\u00a0").replace(/­/g,"\u00ad").replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" ]+)/g,'class="$1"').replace(/ transform /g, +" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});d=d.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'");d.match(/ xmlns="/g).length===2&&(d=d.replace(/xmlns="[^"]+"/,""));return d},exportChart:function(a,b){var c,d=this.getSVG(s(this.options.exporting.chartOptions,b)),a=s(this.options.exporting,a);c=r("form",{method:"post",action:a.url},{display:"none"},h.body);k(["filename","type","width","svg"],function(b){r("input",{type:"hidden", +name:b,value:{filename:a.filename||"chart",type:a.type,width:a.width,svg:d}[b]},null,c)});c.submit();u(c)},print:function(){var a=this,b=a.container,c=[],d=b.parentNode,e=h.body,g=e.childNodes;if(!a.isPrinting)a.isPrinting=!0,k(g,function(a,b){if(a.nodeType===1)c[b]=a.style.display,a.style.display="none"}),e.appendChild(b),D.print(),setTimeout(function(){d.appendChild(b);k(g,function(a,b){if(a.nodeType===1)a.style.display=c[b]});a.isPrinting=!1},1E3)},contextMenu:function(a,b,c,d,e,g){var i=this, +f=i.options.navigation,h=f.menuItemStyle,o=i.chartWidth,p=i.chartHeight,q="cache-"+a,j=i[q],l=C(e,g),m,w;if(!j)i[q]=j=r("div",{className:"highcharts-"+a},{position:"absolute",zIndex:1E3,padding:l+"px"},i.container),m=r("div",null,n({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},f.menuStyle),j),w=function(){t(j,{display:"none"})},z(j,"mouseleave",w),k(b,function(a){if(a){var b=r("div",{onmouseover:function(){t(this,f.menuItemHoverStyle)},onmouseout:function(){t(this, +h)},innerHTML:a.text||i.options.lang[a.textKey]},n({cursor:"pointer"},h),m);b[A?"ontouchstart":"onclick"]=function(){w();a.onclick.apply(i,arguments)};i.exportDivElements.push(b)}}),i.exportDivElements.push(m,j),i.exportMenuWidth=j.offsetWidth,i.exportMenuHeight=j.offsetHeight;a={display:"block"};c+i.exportMenuWidth>o?a.right=o-c-e-l+"px":a.left=c-l+"px";d+g+i.exportMenuHeight>p?a.bottom=p-d-l+"px":a.top=d+g-l+"px";t(j,a)},addButton:function(a){function b(){p.attr(l);o.attr(j)}var c=this,d=c.renderer, +e=s(c.options.navigation.buttonOptions,a),g=e.onclick,f=e.menuItems,h=e.width,k=e.height,o,p,q,a=e.borderWidth,j={stroke:e.borderColor},l={stroke:e.symbolStroke,fill:e.symbolFill},m=e.symbolSize||12;if(!c.exportDivElements)c.exportDivElements=[],c.exportSVGElements=[];e.enabled!==!1&&(o=d.rect(0,0,h,k,e.borderRadius,a).align(e,!0).attr(n({fill:e.backgroundColor,"stroke-width":a,zIndex:19},j)).add(),q=d.rect(0,0,h,k,0).align(e).attr({id:e._id,fill:"rgba(255, 255, 255, 0.001)",title:c.options.lang[e._titleKey], +zIndex:21}).css({cursor:"pointer"}).on("mouseover",function(){p.attr({stroke:e.hoverSymbolStroke,fill:e.hoverSymbolFill});o.attr({stroke:e.hoverBorderColor})}).on("mouseout",b).on("click",b).add(),f&&(g=function(){b();var a=q.getBBox();c.contextMenu("export-menu",f,a.x,a.y,h,k)}),q.on("click",function(){g.apply(c,arguments)}),p=d.symbol(e.symbol,e.symbolX-m/2,e.symbolY-m/2,m,m).align(e,!0).attr(n(l,{"stroke-width":e.symbolStrokeWidth||1,zIndex:20})).add(),c.exportSVGElements.push(o,q,p))},destroyExport:function(){var a, +b;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+ya(a-c).toFixed(f).slice(2):"")} +function gc(a,b,c,d){var e,c=p(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d=C[mb]&&i.setSeconds(b>=C[Bb]?0:k*Ta(i.getSeconds()/k));if(b>=C[Bb])i[oc](b>=C[Pa]?0:k*Ta(i[Ib]()/k));if(b>=C[Pa])i[pc](b>=C[na]?0:k*Ta(i[Tb]()/k));if(b>=C[na])i[hc](b>=C[Xa]?1:k*Ta(i[Ya]()/k));b>=C[Xa]&&(i[qc](b>=C[za]?0:k*Ta(i[Cb]()/k)),h=i[nb]()); +b>=C[za]&&(h-=h%k,i[rc](h));if(b===C[Ka])i[hc](i[Ya]()-i[ic]()+p(d,1));d=1;h=i[nb]();for(var j=i.getTime(),m=i[Cb](),i=i[Ya]();jc+e&&(i-= +i+a-(c+e),j=g-b+d-h,m=!0);j=j&&g<=j+b&&(j=g+d+h)):j+b>d+f&&(j=d+f-b-h);return{x:i,y:j}}function Kc(a,b){var c=a.length,d,e;for(e=0;ec&&(c=a[b]);return c}function Kb(a){for(var b in a)a[b]&&a[b].destroy&&a[b].destroy(),delete a[b]}function Vb(a){pb|| +(pb=xa(db));a&&pb.appendChild(a);pb.innerHTML=""}function jc(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else ea.console&&console.log(c)}function Db(a){return parseFloat(a.toPrecision(14))}function Lb(a,b){Wb=p(a,b.animation)}function uc(){var a=Ba.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";ob=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,p(c,1),p(g,0),p(h,0),p(i,0))).getTime()};Ib=b+"Minutes";Tb=b+"Hours";ic=b+"Day";Ya=b+"Date";Cb=b+"Month";nb= +b+"FullYear";oc=c+"Minutes";pc=c+"Hours";hc=c+"Date";qc=c+"Month";rc=c+"FullYear"}function pa(){}function vc(a,b){function c(a){function b(a,c){this.pos=a;this.type=c||"";this.isNew=!0;c||this.addLabel()}function c(a){if(a)this.options=a,this.id=a.id;return this}function d(a,b,c,e){this.isNegative=b;this.options=a;this.x=c;this.stack=e;this.alignOptions={align:a.align||(X?b?"left":"right":"center"),verticalAlign:a.verticalAlign||(X?"middle":b?"bottom":"top"),y:p(a.y,X?4:b?14:-6),x:p(a.x,X?b?-6:6: +0)};this.textAlign=a.textAlign||(X?b?"right":"left":"center")}function e(){var a=[],b=[],c;R=O=null;o(z.series,function(e){if(e.visible||!q.ignoreHiddenSeries){var f=e.options,g,h,i,j,k,l,m,H,n,La=f.threshold,z,o=[],v=0;if(D&&La<=0)La=f.threshold=null;if(u)f=e.xData,f.length&&(R=Za(p(R,f[0]),Ub(f)),O=$(p(O,f[0]),Jb(f)));else{var F,t,Mb,P=e.cropped,x=e.xAxis.getExtremes(),w=!!e.modifyValue;g=f.stacking;Ca=g==="percent";if(g)k=f.stack,j=e.type+p(k,""),l="-"+j,e.stackKey=j,h=a[j]||[],a[j]=h,i=b[l]|| +[],b[l]=i;Ca&&(R=0,O=99);f=e.processedXData;m=e.processedYData;z=m.length;for(c=0;c=x.min&&(f[c-1]||H)<=x.max))if(H=n.length)for(;H--;)n[H]!==null&&(o[v++]=n[H]);else o[v++]=n;!Ca&&o.length&&(R=Za(p(R,o[0]),Ub(o)),O=$(p(O,o[0]),Jb(o)));La!==null&&(R>=La?(R=La,Oa=!0):O=0.5)a=B(a),e=f(a,b,c);else if(a>=0.08){var h=Ta(b),i,j,k,l,m,H;for(i=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];hb&&e.push(m),m>c&&(H=!0),m=l}}else if(b=cb(b),c=cb(c),a=s[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null: +a,z._minorAutoInterval,(c-b)*(s.tickPixelInterval/(d?5:1))/((d?T/W.length:T)||1)),a=gc(a,null,oa.pow(10,Ta(oa.log(a)/oa.LN10))),e=Xb(f(a,b,c),lb),!d)z._minorAutoInterval=a/5;d||(Ma=a);return e}function h(){var a=[],b,c;if(D){c=W.length;for(b=1;b=fb,c,d,e,f,g,h;u&&fb===ba&&!D&&(y(s.min)||y(s.max)?fb=null:(o(z.series,function(a){f=a.xData;for(d=g=a.xIncrement?1:f.length-1;d>0;d--)if(e= +f[d]-f[d-1],c===ba||e0||!Pa))J+=b*Ga}Ma=I===J||I===void 0||J===void 0?1:ga&&!c&&d===pa.options.tickPixelInterval?pa.tickInterval:p(c,Ua?1:(J-I)*d/(T||1));u&&!a&&o(z.series,function(a){a.processData(I!==na||J!==za)});Y();z.beforeSetTickPositions&&z.beforeSetTickPositions();z.postProcessTickInterval&&(Ma=z.postProcessTickInterval(Ma));!w&&!D&&(Wa=oa.pow(10,Ta(oa.log(Ma)/oa.LN10)),y(s.tickInterval)|| +(Ma=gc(Ma,null,Wa,s)));z.tickInterval=Ma;Fa=s.minorTickInterval==="auto"&&Ma?Ma/5:s.minorTickInterval;(W=s.tickPositions||Xa&&Xa.apply(z,[I,J]))||(W=w?(z.getNonLinearTimeTicks||Jc)(Ic(Ma,s.units),I,J,s.startOfWeek,z.ordinalPositions,z.closestPointRange,!0):D?g(Ma,I,J):f(Ma,I,J));Z(z,"afterSetTickPositions",{tickPositions:W});if(!ga&&(a=W[0],c=W[W.length-1],s.startOnTick?I=a:I>a&&W.shift(),s.endOnTick?J=c:Jhb[Sa]&&s.alignTicks!==!1))hb[Sa]=W.length}function k(a){a= +(new c(a)).render();ra.push(a);return a}function m(){var a=s.title,d=s.stackLabels,e=s.alternateGridColor,f=s.lineWidth,g,i,j=l.hasRendered&&y(na)&&!isNaN(na),H=(g=z.series.length&&y(I)&&y(J))||p(s.showEmpty,!0),n,q;if(g||ga)if(Fa&&!Ua&&o(h(),function(a){wa[a]||(wa[a]=new b(a,"minor"));j&&wa[a].isNew&&wa[a].render(null,!0);wa[a].isActive=!0;wa[a].render()}),o(W,function(a,c){if(!ga||a>=I&&a<=J)Qa[a]||(Qa[a]=new b(a)),j&&Qa[a].isNew&&Qa[a].render(c,!0),Qa[a].isActive=!0,Qa[a].render(c)}),e&&o(W,function(a, +b){if(b%2===0&&a=1E3?fc(a,0):a},Va=P&&s.labels.staggerLines,Da=s.reversed,Ia=Ua&&s.tickmarkPlacement==="between"?0.5:0;b.prototype={addLabel:function(){var a=this.pos,b=s.labels,c=Ua&&P&&Ua.length&&!b.step&&!b.staggerLines&&!b.rotation&&la/Ua.length||!P&&la/2,d=a===W[0],e=a===W[W.length-1],f=Ua&&y(Ua[a])?Ua[a]:a,g=this.label,h=W.info,i;w&&h&&(i=s.dateTimeLabelFormats[h.higherRanks[a]|| +h.unitName]);this.isFirst=d;this.isLast=e;a=db.call({axis:z,chart:l,isFirst:d,isLast:e,dateTimeLabelFormat:i,value:D?Db(cb(f)):f});c=c&&{width:$(1,B(c-2*(b.padding||10)))+ia};c=N(c,b.style);y(g)?g&&g.attr({text:a}).css(c):this.label=y(a)&&b.enabled?K.text(a,0,0,b.useHTML).attr({align:b.align,rotation:b.rotation}).css(c).add(Rb):null},getLabelSize:function(){var a=this.label;return a?(this.labelBBox=a.getBBox())[P?"height":"width"]:0},render:function(a,b){var c=this.type,d=this.label,e=this.pos,f= +s.labels,g=this.gridLine,h=c?c+"Grid":"grid",i=c?c+"Tick":"tick",j=s[h+"LineWidth"],k=s[h+"LineColor"],l=s[h+"LineDashStyle"],H=s[i+"Length"],h=s[i+"Width"]||0,m=s[i+"Color"],n=s[i+"Position"],i=this.mark,La=f.step,ca=b&&ab||ta,q;q=P?U(e+Ia,null,null,b)+C:r+E+(F?(b&&bb||qa)-bc-r:0);ca=P?ca-Nb+E-(F?ib:0):ca-U(e+Ia,null,null,b)-C;if(j){e=gb(e+Ia,j,b);if(g===ba){g={stroke:k,"stroke-width":j};if(l)g.dashstyle=l;if(!c)g.zIndex=1;this.gridLine=g=j?K.path(e).attr(g).add(fa):null}!b&&g&&e&&g.animate({d:e})}if(h)n=== +"inside"&&(H=-H),F&&(H=-H),c=K.crispLine([ua,q,ca,ha,q+(P?0:-H),ca+(P?H:0)],h),i?i.animate({d:c}):this.mark=K.path(c).attr({stroke:m,"stroke-width":h}).add(Rb);d&&!isNaN(q)&&(q=q+f.x-(Ia&&P?Ia*G*(Da?-1:1):0),ca=ca+f.y-(Ia&&!P?Ia*G*(Da?1:-1):0),y(f.y)||(ca+=Q(d.styles.lineHeight)*0.9-d.getBBox().height/2),Va&&(ca+=a/(La||1)%Va*16),this.isFirst&&!p(s.showFirstLabel,1)||this.isLast&&!p(s.showLastLabel,1)?d.hide():d.show(),La&&a%La&&d.hide(),d[this.isNew?"attr":"animate"]({x:q,y:ca}));this.isNew=!1}, +destroy:function(){Kb(this)}};c.prototype={render:function(){var a=this,b=(z.pointRange||0)/2,c=a.options,d=c.label,e=a.label,f=c.width,g=c.to,h=c.from,i=c.value,j,k=c.dashStyle,H=a.svgElem,l=[],m,s,n=c.color;s=c.zIndex;var La=c.events;D&&(h=lb(h),g=lb(g),i=lb(i));if(f){if(l=gb(i,f),b={stroke:n,"stroke-width":f},k)b.dashstyle=k}else if(y(h)&&y(g))h=$(h,I-b),g=Za(g,J+b),j=gb(g),(l=gb(h))&&j?l.push(j[4],j[5],j[1],j[2]):l=null,b={fill:n};else return;if(y(s))b.zIndex=s;if(H)l?H.animate({d:l},null,H.onGetPath): +(H.hide(),H.onGetPath=function(){H.show()});else if(l&&l.length&&(a.svgElem=H=K.path(l).attr(b).add(),La))for(m in k=function(b){H.on(b,function(c){La[b].apply(a,[c])})},La)k(m);if(d&&y(d.text)&&l&&l.length&&qb>0&&ib>0){d=M({align:P&&j&&"center",x:P?!j&&4:10,verticalAlign:!P&&j&&"middle",y:P?j?16:10:j?6:-4,rotation:P&&!j&&90},d);if(!e)a.label=e=K.text(d.text,0,0).attr({align:d.textAlign||d.align,rotation:d.rotation,zIndex:s}).css(d.style).add();j=[l[1],l[4],p(l[6],l[1])];l=[l[2],l[5],p(l[7],l[2])]; +m=Ub(j);s=Ub(l);e.align(d,!1,{x:m,y:s,width:Jb(j)-m,height:Jb(l)-s});e.show()}else e&&e.hide();return a},destroy:function(){Kb(this);Gb(ra,this)}};d.prototype={destroy:function(){Kb(this)},setTotal:function(a){this.cum=this.total=a},render:function(a){var b=this.options.formatter.call(this);this.label?this.label.attr({text:b,visibility:$a}):this.label=l.renderer.text(b,0,0).css(this.options.style).attr({align:this.textAlign,rotation:this.options.rotation,visibility:$a}).add(a)},setOffset:function(a, +b){var c=this.isNegative,d=z.translate(this.total,0,0,0,1),e=z.translate(0),e=ya(d-e),f=l.xAxis[0].translate(this.x)+a,g=l.plotHeight,c={x:X?c?d:d-e:f,y:X?g-f-b:c?g-d-e:g-d,width:X?e:b,height:X?b:e};this.label&&this.label.align(this.alignOptions,null,c).attr({visibility:eb})}};U=function(a,b,c,d,e){var f=1,g=0,h=d?V:G,d=d?na:I,e=s.ordinal||D&&e;h||(h=G);c&&(f*=-1,g=T);Da&&(f*=-1,g-=f*T);b?(Da&&(a=T-a),a=a/h+d,e&&(a=z.lin2val(a))):(e&&(a=z.val2lin(a)),a=f*(a-d)*h+g+f*Ha);return a};gb=function(a,b, +c){var d,e,f,a=U(a,null,null,c),g=c&&ab||ta,h=c&&bb||qa,i,c=e=B(a+C);d=f=B(g-a-C);if(isNaN(a))i=!0;else if(P){if(d=jb,f=g-Nb,cr+qb)i=!0}else if(c=r,e=h-bc,djb+ib)i=!0;return i?null:K.crispLine([ua,c,d,ha,e,f],b||0)};Y=function(){var a=J-I,b=0,c,d;if(u)ga?b=pa.pointRange:o(z.series,function(a){b=$(b,a.pointRange);d=a.closestPointRange;!a.noSharedTooltip&&y(d)&&(c=y(c)?Za(c,d):d)}),z.pointRange=b,z.closestPointRange=c;V=G;z.translationSlope=G=T/(a+b||1);C=P?r:Nb;Ha=G*(b/2)};va.push(z); +l[u?"xAxis":"yAxis"].push(z);X&&u&&Da===ba&&(Da=!0);N(z,{addPlotBand:k,addPlotLine:k,adjustTickAmount:function(){if(hb&&hb[Sa]&&!w&&!Ua&&!ga&&s.alignTicks!==!1){var a=Ja,b=W.length;Ja=hb[Sa];if(ba||a===null?a=b:c1||ya(b-q)>1?function(){c(a,b)}:null}function d(){if(!m){var a=l.hoverPoints;u.hide();a&&o(a,function(a){a.setState()});l.hoverPoints=null;m=!0}}var e,f=a.borderWidth,g=a.crosshairs,h=[],i=a.style,j=a.shared,k=Q(i.padding),m=!0,n=0,q=0;i.padding=0;var u=K.label("",0,0,null,null,null,a.useHTML).attr({padding:k,fill:a.backgroundColor,"stroke-width":f,r:a.borderRadius,zIndex:8}).css(i).hide().add(); +wa||u.shadow(a.shadow);return{shared:j,refresh:function(f){var i,k,n,q,v={},t=[];n=f.tooltipPos;i=a.formatter||b;var v=l.hoverPoints,F;j&&(!f.series||!f.series.noSharedTooltip)?(q=0,v&&o(v,function(a){a.setState()}),l.hoverPoints=f,o(f,function(a){a.setState(Ra);q+=a.plotY;t.push(a.getLabelConfig())}),k=f[0].plotX,q=B(q)/f.length,v={x:f[0].category},v.points=t,f=f[0]):v=f.getLabelConfig();v=i.call(v);e=f.series;k=p(k,f.plotX);q=p(q,f.plotY);i=B(n?n[0]:X?la-q:k);k=B(n?n[1]:X?ma-k:q);n=j||!e.isCartesian|| +e.tooltipOutsidePlot||Eb(i,k);v===!1||!n?d():(m&&(u.show(),m=!1),u.attr({text:v}),F=a.borderColor||f.color||e.color||"#606060",u.attr({stroke:F}),n=tc(u.width,u.height,S,L,la,ma,{x:i,y:k},p(a.distance,12),X),c(B(n.x),B(n.y)));if(g){g=Hb(g);var x;n=g.length;for(var D;n--;)if(x=f.series[n?"yAxis":"xAxis"],g[n]&&x)if(x=x.getPlotLinePath(f[n?"y":"x"],1),h[n])h[n].attr({d:x,visibility:eb});else{D={"stroke-width":g[n].width||1,stroke:g[n].color||"#C0C0C0",zIndex:g[n].zIndex||2};if(g[n].dashStyle)D.dashstyle= +g[n].dashStyle;h[n]=K.path(x).attr(D).add()}}Z(l,"tooltipRefresh",{text:v,x:i+S,y:k+L,borderColor:F})},hide:d,hideCrosshairs:function(){o(h,function(a){a&&a.hide()})},destroy:function(){o(h,function(a){a&&a.destroy()});u&&(u=u.destroy())}}}function e(a){function b(a){var c,d,e,a=a||ea.event;if(!a.target)a.target=a.srcElement;if(a.originalEvent)a=a.originalEvent;if(a.event)a=a.event;c=a.touches?a.touches.item(0):a;Va=xc(G);d=Va.left;e=Va.top;Sb?(d=a.x,c=a.y):(d=c.pageX-d,c=c.pageY-e);return N(a,{chartX:B(d), +chartY:B(c)})}function c(a){var b={xAxis:[],yAxis:[]};o(va,function(c){var d=c.translate,e=c.isXAxis;b[e?"xAxis":"yAxis"].push({axis:c,value:d((X?!e:e)?a.chartX-S:ma-a.chartY+L,!0)})});return b}function e(){var a=l.hoverSeries,b=l.hoverPoint;if(b)b.onMouseOut();if(a)a.onMouseOut();sb&&(sb.hide(),sb.hideCrosshairs());nb=null}function f(){if(n){var a={xAxis:[],yAxis:[]},b=n.getBBox(),c=b.x-S,d=b.y-L;k&&(o(va,function(e){if(e.options.zoomEnabled!==!1){var f=e.translate,g=e.isXAxis,h=X?!g:g,i=f(h?c:ma- +d-b.height,!0,0,0,1),f=f(h?c+b.width:ma-d,!0,0,0,1);a[g?"xAxis":"yAxis"].push({axis:e,min:Za(i,f),max:$(i,f)})}}),Z(l,"selection",a,Ab));n=n.destroy()}U(G,{cursor:"auto"});l.mouseIsDown=Ya=k=!1;Na(V,ra?"touchend":"mouseup",f)}function g(a){var b=y(a.pageX)?a.pageX:a.page.x,a=y(a.pageX)?a.pageY:a.page.y;Va&&!Eb(b-Va.left-S,a-Va.top-L)&&e()}function h(){e();Va=null}var i,j,k,n,m=wa?"":q.zoomType,u=/x/.test(m),v=/y/.test(m),F=u&&!X||v&&X,t=v&&!X||u&&X;Aa=function(){Wa?(Wa.translate(S,L),X&&Wa.attr({width:l.plotWidth, +height:l.plotHeight}).invert()):l.trackerGroup=Wa=K.g("tracker").attr({zIndex:9}).add()};Aa();if(a.enabled)l.tooltip=sb=d(a),Cb=setInterval(function(){mb&&mb()},32);(function(){G.onmousedown=function(a){a=b(a);!ra&&a.preventDefault&&a.preventDefault();l.mouseIsDown=Ya=!0;l.mouseDownX=i=a.chartX;j=a.chartY;ja(V,ra?"touchend":"mouseup",f)};var d=function(c){if(!c||!(c.touches&&c.touches.length>1)){c=b(c);if(!ra)c.returnValue=!1;var d=c.chartX,e=c.chartY,f=!Eb(d-S,e-L);ra&&c.type==="touchstart"&&(r(c.target, +"isTracker")?l.runTrackerClick||c.preventDefault():!Bb&&!f&&c.preventDefault());f&&(dS+la&&(d=S+la),eL+ma&&(e=L+ma));if(Ya&&c.type!=="touchstart"){if(k=Math.sqrt(Math.pow(i-d,2)+Math.pow(j-e,2)),k>10){var g=Eb(i-S,j-L);if(Ob&&(u||v)&&g)n||(n=K.rect(S,L,F?1:la,t?1:ma,0).attr({fill:q.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add());n&&F&&(c=d-i,n.attr({width:ya(c),x:(c>0?0:c)+i}));n&&t&&(e-=j,n.attr({height:ya(e),y:(e>0?0:e)+j}));g&&!n&&q.panning&&l.pan(d)}}else if(!f){var h, +d=l.hoverPoint,e=l.hoverSeries,m,o,g=qa,x=X?c.chartY:c.chartX-S;if(sb&&a.shared&&(!e||!e.noSharedTooltip)){h=[];m=Y.length;for(o=0;og&&h.splice(m,1);if(h.length&&h[0].plotX!==nb)sb.refresh(h),nb=h[0].plotX}if(e&&e.tracker&&(c=e.tooltipPoints[x])&&c!==d)c.onMouseOver()}return f||!Ob}};G.onmousemove= +d;ja(G,"mouseleave",h);ja(V,"mousemove",g);G.ontouchstart=function(a){if(u||v)G.onmousedown(a);d(a)};G.ontouchmove=d;G.ontouchend=function(){k&&e()};G.onclick=function(a){var d=l.hoverPoint,a=b(a);a.cancelBubble=!0;if(!k)if(d&&r(a.target,"isTracker")){var e=d.plotX,f=d.plotY;N(d,{pageX:Va.left+S+(X?la-f:e),pageY:Va.top+L+(X?ma-e:f)});Z(d.series,"click",N(a,{point:d}));d.firePointEvent("click",a)}else N(a,c(a)),Eb(a.chartX-S,a.chartY-L)&&Z(l,"click",a);k=!1}})();N(this,{zoomX:u,zoomY:v,resetTracker:e, +normalizeMouseEvent:b,destroy:function(){if(l.trackerGroup)l.trackerGroup=Wa=l.trackerGroup.destroy();Na(G,"mouseleave",h);Na(V,"mousemove",g);G.onclick=G.onmousedown=G.onmousemove=G.ontouchstart=G.ontouchend=G.ontouchmove=null}})}function f(a){var b=a.type||q.type||q.defaultSeriesType,c=Ca[b],d=l.hasRendered;if(d)if(X&&b==="column")c=Ca.bar;else if(!X&&b==="bar")c=Ca.column;b=new c;b.init(l,a);!d&&b.inverted&&(X=!0);if(b.isCartesian)Ob=b.isCartesian;Y.push(b);return b}function g(){q.alignTicks!== +!1&&o(va,function(a){a.adjustTickAmount()});hb=null}function h(a){var b=l.isDirtyLegend,c,d=l.isDirtyBox,e=Y.length,f=e,h=l.clipRect;for(Lb(a,l);f--;)if(a=Y[f],a.isDirty&&a.options.stacking){c=!0;break}if(c)for(f=e;f--;)if(a=Y[f],a.options.stacking)a.isDirty=!0;o(Y,function(a){a.isDirty&&a.options.legendType==="point"&&(b=!0)});if(b&&Yb.renderLegend)Yb.renderLegend(),l.isDirtyLegend=!1;Ob&&(Ja||(hb=null,o(va,function(a){a.setScale()})),g(),Zb(),o(va,function(a){Z(a,"afterSetExtremes",a.getExtremes()); +a.isDirty&&a.redraw()}));d&&(ob(),Aa(),h&&(Pb(h),h.animate({width:l.plotSizeX,height:l.plotSizeY+1})));o(Y,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});rb&&rb.resetTracker&&rb.resetTracker();K.draw();Z(l,"redraw")}function i(){var b=a.xAxis||{},d=a.yAxis||{},b=Hb(b);o(b,function(a,b){a.index=b;a.isX=!0});d=Hb(d);o(d,function(a,b){a.index=b});b=b.concat(d);o(b,function(a){new c(a)});g()}function k(){var a=Ba.lang,b=q.resetZoomButton,c=b.theme,d=c.states,e=b.relativeTo=== +"chart"?null:{x:S,y:L,width:la,height:ma};l.resetZoomButton=K.button(a.resetZoom,null,null,Ib,c,d&&d.hover).attr({align:b.position.align,title:a.resetZoomTitle}).add().align(b.position,!1,e)}function j(b,c){fa=M(a.title,b);da=M(a.subtitle,c);o([["title",b,fa],["subtitle",c,da]],function(a){var b=a[0],c=l[b],d=a[1],a=a[2];c&&d&&(c=c.destroy());a&&a.text&&!c&&(l[b]=K.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":Da+b,zIndex:1}).css(a.style).add().align(a,!1,R))})}function m(){Ea=q.renderTo; +Oa=Da+lc++;yb(Ea)&&(Ea=V.getElementById(Ea));Ea||jc(13,!0);Ea.innerHTML="";Ea.offsetWidth||(aa=Ea.cloneNode(0),U(aa,{position:tb,top:"-9999px",display:""}),V.body.appendChild(aa));na=(aa||Ea).offsetWidth;za=(aa||Ea).offsetHeight;l.chartWidth=qa=q.width||na||600;l.chartHeight=ta=q.height||(za>19?za:400);l.container=G=xa(db,{className:Da+"container"+(q.className?" "+q.className:""),id:Oa},N({position:yc,overflow:$a,width:qa+ia,height:ta+ia,textAlign:"left",lineHeight:"normal"},q.style),aa||Ea);l.renderer= +K=q.forExport?new Fb(G,qa,ta,!0):new $b(G,qa,ta);wa&&K.create(l,G,qa,ta);var a,b;zc&&G.getBoundingClientRect&&(a=function(){U(G,{left:0,top:0});b=G.getBoundingClientRect();U(G,{left:-(b.left-Q(b.left))+ia,top:-(b.top-Q(b.top))+ia})},a(),ja(ea,"resize",a),ja(l,"destroy",function(){Na(ea,"resize",a)}))}function n(){function a(c){var d=q.width||Ea.offsetWidth,e=q.height||Ea.offsetHeight,c=c.target;if(d&&e&&(c===ea||c===V)){if(d!==na||e!==za)clearTimeout(b),b=setTimeout(function(){zb(d,e,!1)},100);na= +d;za=e}}var b;ja(ea,"resize",a);ja(l,"destroy",function(){Na(ea,"resize",a)})}function u(){l&&Z(l,"endResize",null,function(){Ja-=1})}function t(){for(var b=X||q.inverted||q.type==="bar"||q.defaultSeriesType==="bar",c=a.series,d=c&&c.length;!b&&d--;)c[d].type==="bar"&&(b=!0);l.inverted=X=b}function D(){var b=a.labels,c=a.credits,d;j();Yb=l.legend=new Tb;o(va,function(a){a.setScale()});Zb();o(va,function(a){a.setTickPositions(!0)});g();Zb();ob();Ob&&o(va,function(a){a.render()});if(!l.seriesGroup)l.seriesGroup= +K.g("series-group").attr({zIndex:3}).add();o(Y,function(a){a.translate();a.setTooltipPoints();a.render()});b.items&&o(b.items,function(){var a=N(b.style,this.style),c=Q(a.left)+S,d=Q(a.top)+L+12;delete a.left;delete a.top;K.text(this.html,c,d).attr({zIndex:2}).css(a).add()});if(c.enabled&&!l.credits)d=c.href,l.credits=K.text(c.text,0,0).on("click",function(){if(d)location.href=d}).attr({align:c.position.align,zIndex:8}).css(c.style).add().align(c.position);Aa();l.hasRendered=!0;aa&&(Ea.appendChild(G), +Vb(aa))}function x(){if(!Qb&&ea==ea.top&&V.readyState!=="complete"||wa&&!ea.canvg)wa?Ac.push(x,a.global.canvasToolsURL):V.attachEvent("onreadystatechange",function(){V.detachEvent("onreadystatechange",x);V.readyState==="complete"&&x()});else{m();Z(l,"init");if(Highcharts.RangeSelector&&a.rangeSelector.enabled)l.rangeSelector=new Highcharts.RangeSelector(l);pb();xb();t();i();o(a.series||[],function(a){f(a)});if(Highcharts.Scroller&&(a.navigator.enabled||a.scrollbar.enabled))l.scroller=new Highcharts.Scroller(l); +l.render=D;l.tracker=rb=new e(a.tooltip);D();K.draw();b&&b.apply(l,[l]);o(l.callbacks,function(a){a.apply(l,[l])});Z(l,"load")}}var E=a.series;a.series=null;a=M(Ba,a);a.series=E;var q=a.chart,E=q.margin,E=kb(E)?E:[E,E,E,E],w=p(q.marginTop,E[0]),v=p(q.marginRight,E[1]),Sa=p(q.marginBottom,E[2]),A=p(q.marginLeft,E[3]),C=q.spacingTop,F=q.spacingRight,T=q.spacingBottom,gb=q.spacingLeft,R,fa,da,L,ka,O,S,sa,Ea,aa,G,Oa,na,za,qa,ta,bb,ab,Ha,Pa,Xa,pa,l=this,Bb=(E=q.events)&&!!E.click,Ka,Eb,sb,Ya,ub,wb,Ia, +ma,la,rb,Wa,Aa,Yb,Fa,vb,Va,Ob=q.showAxes,Ja=0,va=[],hb,Y=[],X,K,mb,Cb,nb,ob,Zb,pb,xb,zb,Ab,Ib,Tb=function(){function a(b,c){var d=b.legendItem,e=b.legendLine,g=b.legendSymbol,h=q.color,i=c?f.itemStyle.color:h,h=c?b.color:h;d&&d.css({fill:i});e&&e.attr({stroke:h});g&&g.attr({stroke:h,fill:h})}function b(a){var c=a.legendItem,d=a.legendLine,e=a._legendItemPos,f=e[0],e=e[1],g=a.legendSymbol,a=a.checkbox;c&&c.attr({x:v?f:Fa-f,y:e});d&&d.translate(v?f:Fa-f,e-4);g&&(c=f+g.xOff,g.attr({x:v?c:Fa-c,y:e+g.yOff})); +if(a)a.x=f,a.y=e}function c(){o(j,function(a){var b=a.checkbox,c=r.alignAttr;b&&U(b,{left:c.translateX+a.legendItemWidth+b.x-40+ia,top:c.translateY+b.y-11+ia})})}function d(b){var c,e,j,k,l=b.legendItem;k=b.series||b;var o=k.options,F=o&&o.borderWidth||0;if(!l){k=/^(bar|pie|area|column)$/.test(k.type);b.legendItem=l=K.text(f.labelFormatter.call(b),0,0,f.useHTML).css(b.visible?n:q).on("mouseover",function(){b.setState(Ra);l.css(m)}).on("mouseout",function(){l.css(b.visible?n:q);b.setState()}).on("click", +function(){var a=function(){b.setVisible()};b.firePointEvent?b.firePointEvent("legendItemClick",null,a):Z(b,"legendItemClick",null,a)}).attr({align:v?"left":"right",zIndex:2}).add(r);if(!k&&o&&o.lineWidth){var T={"stroke-width":o.lineWidth,zIndex:2};if(o.dashStyle)T.dashstyle=o.dashStyle;b.legendLine=K.path([ua,(-h-i)*(v?1:-1),0,ha,-i*(v?1:-1),0]).attr(T).add(r)}if(k)j=K.rect(c=-h-i,e=-11,h,12,2).attr({zIndex:3}).add(r),v||(c+=h);else if(o&&o.marker&&o.marker.enabled)j=o.marker.radius,j=K.symbol(b.symbol, +c=-h/2-i-j,e=-4-j,2*j,2*j).attr(b.pointAttr[Ga]).attr({zIndex:3}).add(r),v||(c+=h/2);if(j)j.xOff=c+F%2/2,j.yOff=e+F%2/2;b.legendSymbol=j;a(b,b.visible);if(o&&o.showCheckbox)b.checkbox=xa("input",{type:"checkbox",checked:b.selected,defaultChecked:b.selected},f.itemCheckboxStyle,G),ja(b.checkbox,"click",function(a){Z(b,"checkboxClick",{checked:a.target.checked},function(){b.select()})})}c=l.getBBox();e=b.legendItemWidth=f.itemWidth||h+i+c.width+u;w=c.height;if(g&&x-t+e>(C||qa-2*u-t))x=t,p+=E+w+y;D= +p+y;b._legendItemPos=[x,p];g?x+=e:p+=E+w+y;A=C||$(g?x-t:e,A)}function e(){x=t;p=u+E+F-5;D=A=0;r||(r=K.g("legend").attr({zIndex:10}).add());j=[];o(L,function(a){var b=a.options;b.showInLegend&&(j=j.concat(a.legendItems||(b.legendType==="point"?a.data:a)))});Kc(j,function(a,b){return(a.options.legendIndex||0)-(b.options.legendIndex||0)});O&&j.reverse();o(j,d);Fa=C||A;vb=D-F+w;if(Sa||B){Fa+=2*u;vb+=2*u;if(T){if(Fa>0&&vb>0)T[T.isNew?"attr":"animate"](T.crisp(null,null,null,Fa,vb)),T.isNew=!1}else T=K.rect(0, +0,Fa,vb,f.borderRadius,Sa||0).attr({stroke:f.borderColor,"stroke-width":Sa||0,fill:B||ga}).add(r).shadow(f.shadow),T.isNew=!0;T[j.length?"show":"hide"]()}o(j,b);for(var a=["left","right","top","bottom"],g,h=4;h--;)g=a[h],k[g]&&k[g]!=="auto"&&(f[h<2?"align":"verticalAlign"]=g,f[h<2?"x":"y"]=Q(k[g])*(h%2?-1:1));j.length&&r.align(N(f,{width:Fa,height:vb}),!0,R);Ja||c()}var f=l.options.legend;if(f.enabled){var g=f.layout==="horizontal",h=f.symbolWidth,i=f.symbolPadding,j,k=f.style,n=f.itemStyle,m=f.itemHoverStyle, +q=M(n,f.itemHiddenStyle),u=f.padding||Q(k.padding),v=!f.rtl,F=18,t=4+u+h+i,x,p,D,w=0,E=f.itemMarginTop||0,y=f.itemMarginBottom||0,T,Sa=f.borderWidth,B=f.backgroundColor,r,A,C=f.width,L=l.series,O=f.reversed;e();ja(l,"endResize",c);return{colorizeItem:a,destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine","legendSymbol"],function(b){a[b]&&a[b].destroy()});b&&Vb(a.checkbox)},renderLegend:e,destroy:function(){T&&(T=T.destroy());r&&(r=r.destroy())}}}};Eb=function(a,b){return a>=0&&a<= +la&&b>=0&&b<=ma};Ib=function(){var a=l.resetZoomButton;Z(l,"selection",{resetSelection:!0},Ab);if(a)l.resetZoomButton=a.destroy()};Ab=function(a){var b=l.pointCount<100,c;l.resetZoomEnabled!==!1&&!l.resetZoomButton&&k();!a||a.resetSelection?o(va,function(a){a.options.zoomEnabled!==!1&&(a.setExtremes(null,null,!1),c=!0)}):o(a.xAxis.concat(a.yAxis),function(a){var b=a.axis;if(l.tracker[b.isXAxis?"zoomX":"zoomY"])b.setExtremes(a.min,a.max,!1),c=!0});c&&h(!0,b)};l.pan=function(a){var b=l.xAxis[0],c=l.mouseDownX, +d=b.pointRange/2,e=b.getExtremes(),f=b.translate(c-a,!0)+d,c=b.translate(c+la-a,!0)-d;(d=l.hoverPoints)&&o(d,function(a){a.setState()});f>Za(e.dataMin,e.min)&&c<$(e.dataMax,e.max)&&b.setExtremes(f,c,!0,!1);l.mouseDownX=a;U(G,{cursor:"move"})};Zb=function(){var b=a.legend,c=p(b.margin,10),d=b.x,e=b.y,f=b.align,g=b.verticalAlign,h;pb();if((l.title||l.subtitle)&&!y(w))(h=$(l.title&&!fa.floating&&!fa.verticalAlign&&fa.y||0,l.subtitle&&!da.floating&&!da.verticalAlign&&da.y||0))&&(L=$(L,h+p(fa.margin,15)+ +C));b.enabled&&!b.floating&&(f==="right"?y(v)||(ka=$(ka,Fa-d+c+F)):f==="left"?y(A)||(S=$(S,Fa+d+c+gb)):g==="top"?y(w)||(L=$(L,vb+e+c+C)):g==="bottom"&&(y(Sa)||(O=$(O,vb-e+c+T))));l.extraBottomMargin&&(O+=l.extraBottomMargin);l.extraTopMargin&&(L+=l.extraTopMargin);Ob&&o(va,function(a){a.getOffset()});y(A)||(S+=sa[3]);y(w)||(L+=sa[0]);y(Sa)||(O+=sa[2]);y(v)||(ka+=sa[1]);xb()};zb=function(a,b,c){var d=l.title,e=l.subtitle;Ja+=1;Lb(c,l);ab=ta;bb=qa;if(y(a))l.chartWidth=qa=B(a);if(y(b))l.chartHeight= +ta=B(b);U(G,{width:qa+ia,height:ta+ia});K.setSize(qa,ta,c);la=qa-S-ka;ma=ta-L-O;hb=null;o(va,function(a){a.isDirty=!0;a.setScale()});o(Y,function(a){a.isDirty=!0});l.isDirtyLegend=!0;l.isDirtyBox=!0;Zb();d&&d.align(null,null,R);e&&e.align(null,null,R);h(c);ab=null;Z(l,"resize");Wb===!1?u():setTimeout(u,Wb&&Wb.duration||500)};xb=function(){l.plotLeft=S=B(S);l.plotTop=L=B(L);l.plotWidth=la=B(qa-S-ka);l.plotHeight=ma=B(ta-L-O);l.plotSizeX=X?ma:la;l.plotSizeY=X?la:ma;R={x:gb,y:C,width:qa-gb-F,height:ta- +C-T};o(va,function(a){a.setAxisSize();a.setAxisTranslation()})};pb=function(){L=p(w,C);ka=p(v,F);O=p(Sa,T);S=p(A,gb);sa=[0,0,0,0]};ob=function(){var a=q.borderWidth||0,b=q.backgroundColor,c=q.plotBackgroundColor,d=q.plotBackgroundImage,e,f={x:S,y:L,width:la,height:ma};e=a+(q.shadow?8:0);if(a||b)Ha?Ha.animate(Ha.crisp(null,null,null,qa-e,ta-e)):Ha=K.rect(e/2,e/2,qa-e,ta-e,q.borderRadius,a).attr({stroke:q.borderColor,"stroke-width":a,fill:b||ga}).add().shadow(q.shadow);c&&(Pa?Pa.animate(f):Pa=K.rect(S, +L,la,ma,0).attr({fill:c}).add().shadow(q.plotShadow));d&&(Xa?Xa.animate(f):Xa=K.image(d,S,L,la,ma).add());q.plotBorderWidth&&(pa?pa.animate(pa.crisp(null,S,L,la,ma)):pa=K.rect(S,L,la,ma,0,q.plotBorderWidth).attr({stroke:q.plotBorderColor,"stroke-width":q.plotBorderWidth,zIndex:4}).add());l.isDirtyBox=!1};q.reflow!==!1&&ja(l,"load",n);if(E)for(Ka in E)ja(l,Ka,E[Ka]);l.options=a;l.series=Y;l.xAxis=[];l.yAxis=[];l.addSeries=function(a,b,c){var d;a&&(Lb(c,l),b=p(b,!0),Z(l,"addSeries",{options:a},function(){d= +f(a);d.isDirty=!0;l.isDirtyLegend=!0;b&&l.redraw()}));return d};l.animation=wa?!1:p(q.animation,!0);l.Axis=c;l.destroy=function(){var b,c=G&&G.parentNode;if(l!==null){Z(l,"destroy");Na(l);for(b=va.length;b--;)va[b]=va[b].destroy();for(b=Y.length;b--;)Y[b]=Y[b].destroy();o("title,subtitle,seriesGroup,clipRect,credits,tracker,scroller,rangeSelector".split(","),function(a){var b=l[a];b&&(l[a]=b.destroy())});o([Ha,pa,Pa,Yb,sb,K,rb],function(a){a&&a.destroy&&a.destroy()});Ha=pa=Pa=Yb=sb=K=rb=null;if(G)G.innerHTML= +"",Na(G),c&&Vb(G),G=null;clearInterval(Cb);for(b in l)delete l[b];a=l=null}};l.get=function(a){var b,c,d;for(b=0;b=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};C=Oa(Ab,1,mb,1E3,Bb,6E4,Pa,36E5,na,864E5,Ka,6048E5,Xa,2592E6,za,31556952E3);Ia={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,k=function(a){for(g= +a.length;g--;)a[g]===ua&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));d===1&&(c=[].concat(c).splice(0,f).concat(c));a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
          ',pointFormat:'{series.name}: {point.y}
          ',shadow:!0,shared:wa,snap:ra?25:10,style:{color:"#333333", +fontSize:"12px",padding:"5px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var cc={dateTimeLabelFormats:Oa(Ab,"%H:%M:%S.%L",mb,"%H:%M:%S",Bb,"%H:%M",Pa,"%H:%M",na,"%e. %b",Ka,"%e. %b",Xa,"%b '%y",za,"%Y"),endOnTick:!1,gridLineColor:"#C0C0C0",labels:A,lineColor:"#C0D0E0",lineWidth:1,max:null,min:null,minPadding:0.01,maxPadding:0.01, +minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#6D869F",fontWeight:"bold"}},type:"linear"},kc=M(cc,{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{align:"right",x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0, +tickWidth:0,title:{rotation:270,text:"Y-values"},stackLabels:{enabled:!1,formatter:function(){return this.total},style:A.style}}),Nc={labels:{align:"right",x:-8,y:null},title:{rotation:270}},Mc={labels:{align:"left",x:8,y:null},title:{rotation:90}},wc={labels:{align:"center",x:0,y:14},title:{rotation:0}},Lc=M(wc,{labels:{y:-5}}),ka=Ba.plotOptions,A=ka.line;ka.spline=M(A);ka.scatter=M(A,{lineWidth:0,states:{hover:{lineWidth:0}},tooltip:{headerFormat:'{series.name}
          ', +pointFormat:"x: {point.x}
          y: {point.y}
          "}});ka.area=M(A,{threshold:0});ka.areaspline=M(ka.area);ka.column=M(A,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{y:null,verticalAlign:null},threshold:0});ka.bar=M(ka.column,{dataLabels:{align:"left",x:5,y:0}});ka.pie=M(A,{borderColor:"#FFFFFF", +borderWidth:1,center:["50%","50%"],colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},y:5},legendType:"point",marker:null,size:"75%",showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}}});uc();var bb=function(a){var b=[],c;(function(a){(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[Q(c[1]),Q(c[2]),Q(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))&& +(b=[Q(c[1],16),Q(c[2],16),Q(c[3],16),1])})(a);return{get:function(c){return b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a},brighten:function(a){if(Ja(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=Q(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},setOpacity:function(a){b[3]=a;return this}}};pa.prototype={init:function(a,b){this.element=b==="span"?xa(b):V.createElementNS("http://www.w3.org/2000/svg",b);this.renderer=a;this.attrSetters={}},animate:function(a, +b,c){b=p(b,Wb,!0);Pb(this);if(b){b=M(b);if(c)b.complete=c;ec(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName,i=this.renderer,k,j=this.attrSetters,m=this.shadows,n,o=this;yb(a)&&y(b)&&(c=a,a={},a[c]=b);if(yb(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),o=r(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&(o=parseFloat(o));else for(c in a)if(k=!1,d=a[c],e=j[c]&&j[c](d,c),e!==!1){e!==ba&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")), +/(NaN| {2}|^$)/.test(d)&&(d="M 0 0"),this.d=d;else if(c==="x"&&h==="text"){for(e=0;en&&(U(b,{width:n+ia,display:"block",whiteSpace:"normal"}),j=n),n=B((Q(b.style.fontSize)||12)*1.2),x=u<0&&-j,E=t<0&&-m,D=u*t<0,x+=t*n*(D?1-h:h),E-=u*n*(k?D?h:1-h:1),i&&(x-=j*h*(u<0?-1:1),k&&(E-=m*h*(t<0?-1:1)),U(b,{textAlign:g})),a.xCorr=x,a.yCorr=E;U(b,{left:e+x+ia,top:f+E+ia});a.cTT=q}}else this.alignOnAdd=!0},updateTransform:function(){var a=this.translateX|| +0,b=this.translateY||0,c=this.inverted,d=this.rotation,e=[];c&&(a+=this.attr("width"),b+=this.attr("height"));(a||b)&&e.push("translate("+a+","+b+")");c?e.push("rotate(90) scale(-1,1)"):d&&e.push("rotate("+d+" "+this.x+" "+this.y+")");e.length&&r(this.element,"transform",e.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){a?(this.alignOptions=a,this.alignByTranslate=b,c||this.renderer.alignedObjects.push(this)):(a=this.alignOptions,b= +this.alignByTranslate);var c=p(c,this.renderer),d=a.align,e=a.verticalAlign,f=(c.x||0)+(a.x||0),g=(c.y||0)+(a.y||0),h={};/^(right|center)$/.test(d)&&(f+=(c.width-(a.width||0))/{right:1,center:2}[d]);h[b?"translateX":"x"]=B(f);/^(bottom|middle)$/.test(e)&&(g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1));h[b?"translateY":"y"]=B(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a){var b,c,d=this.rotation;c=this.element;var e=d*Bc;if(c.namespaceURI=== +"http://www.w3.org/2000/svg"){try{b=c.getBBox?N({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(f){}if(!b||b.width<0)b={width:0,height:0};a=b.width;c=b.height;if(d)b.width=ya(c*sa(e))+ya(a*fa(e)),b.height=ya(c*fa(e))+ya(a*sa(e))}else b=this.htmlGetBBox(a);return b},show:function(){return this.attr({visibility:eb})},hide:function(){return this.attr({visibility:$a})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=r(f,"zIndex"),h;this.parentInverted= +a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=Q(g);if(c.handleZ)for(c=0;cg||!y(g)&&y(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;Z(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.box,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=null;Pb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy(); +if(a.stops){for(f=0;f/g, +'').replace(/<(i|em)>/g,'').replace(//g,"").split(//g),d=b.childNodes,e=/style="([^"]+)"/,f=/href="([^"]+)"/,g=r(b,"x"),h=a.styles,i=h&&Q(h.width),k=h&&h.lineHeight,j,h=d.length;h--;)b.removeChild(d[h]);i&&!a.added&&this.box.appendChild(b);c[c.length-1]===""&&c.pop();o(c,function(c,d){var h,t=0,p,c=c.replace(//g,"|||");h=c.split("|||"); +o(h,function(c){if(c!==""||h.length===1){var m={},o=V.createElementNS("http://www.w3.org/2000/svg","tspan");e.test(c)&&r(o,"style",c.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"));f.test(c)&&(r(o,"onclick",'location.href="'+c.match(f)[1]+'"'),U(o,{cursor:"pointer"}));c=(c.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");o.appendChild(V.createTextNode(c));t?m.dx=3:m.x=g;if(!t){if(d){!Qb&&a.renderer.forExport&&U(o,{display:"block"});p=ea.getComputedStyle&&Q(ea.getComputedStyle(j, +null).getPropertyValue("line-height"));if(!p||isNaN(p))p=k||j.offsetHeight||18;r(o,"dy",p)}j=o}r(o,m);b.appendChild(o);t++;if(i)for(var c=c.replace(/-/g,"- ").split(" "),w,v=[];c.length||v.length;)w=a.getBBox().width,m=w>i,!m||c.length===1?(c=v,v=[],c.length&&(o=V.createElementNS("http://www.w3.org/2000/svg","tspan"),r(o,{dy:k||16,x:g}),b.appendChild(o),w>i&&(i=w))):(o.removeChild(o.firstChild),v.unshift(c.pop())),c.length&&o.appendChild(V.createTextNode(c.join(" ").replace(/- /g,"-")))}})})},button:function(a, +b,c,d,e,f,g){var h=this.label(a,b,c),i=0,k,j,m,n,o,a={x1:0,y1:0,x2:0,y2:1},e=M(Oa("stroke-width",1,"stroke","#999","fill",Oa("linearGradient",a,"stops",[[0,"#FFF"],[1,"#DDD"]]),"r",3,"padding",3,"style",Oa("color","black")),e);m=e.style;delete e.style;f=M(e,Oa("stroke","#68A","fill",Oa("linearGradient",a,"stops",[[0,"#FFF"],[1,"#ACF"]])),f);n=f.style;delete f.style;g=M(e,Oa("stroke","#68A","fill",Oa("linearGradient",a,"stops",[[0,"#9BD"],[1,"#CDF"]])),g);o=g.style;delete g.style;ja(h.element,"mouseenter", +function(){h.attr(f).css(n)});ja(h.element,"mouseleave",function(){k=[e,f,g][i];j=[m,n,o][i];h.attr(k).css(j)});h.setState=function(a){(i=a)?a===2&&h.attr(g).css(o):h.attr(e).css(m)};return h.on("click",function(){d.call(h)}).attr(e).css(N({cursor:"default"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=B(a[1])+b%2/2);a[2]===a[5]&&(a[2]=a[5]=B(a[2])+b%2/2);return a},path:function(a){return this.createElement("path").attr({d:a,fill:ga})},circle:function(a,b,c){a=kb(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)}, +arc:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;return this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0})},rect:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.width,d=a.height,e=a.r,f=a.strokeWidth,a=a.x;e=this.createElement("rect").attr({rx:e,ry:e,fill:ga});return e.attr(e.crisp(f,a,b,$(c,0),$(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()}, +g:function(a){var b=this.createElement("g");return y(a)?b.attr({"class":Da+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:ga};arguments.length>1&&N(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(B(b),B(c),d,e,f),i=/^url\((.*?)\)$/,k;if(h)g=this.path(h),N(g,{symbolName:a, +x:b,y:c,width:d,height:e}),f&&N(g,f);else if(i.test(a)){var j=function(a,b){a.attr({width:b[0],height:b[1]}).translate(-B(b[0]/2),-B(b[1]/2))};k=a.match(i)[1];a=Dc[k];g=this.image(k).attr({x:b,y:c});a?j(g,a):(g.attr({width:0,height:0}),xa("img",{onload:function(){j(g,Dc[k]=[this.width,this.height])},src:k}))}return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[ua,a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return[ua,a,b,ha,a+c,b,a+c, +b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return[ua,a+c/2,b,ha,a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return[ua,a,b,ha,a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return[ua,a+c/2,b,ha,a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-1.0E-6,d=e.innerR,h=fa(f),i=sa(f),k=fa(g),g=sa(g),e=e.end-f');if(b)c=b===db||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=xa(c);this.renderer=a;this.attrSetters={}},add:function(a){var b= +this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);wb&&d.gVis===$a&&U(c,{visibility:$a});d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.htmlUpdateTransform();Z(this,"add");return this},toggleChildren:function(a,b){for(var c=a.childNodes,d=c.length;d--;)U(c[d],{visibility:b}),c[d].nodeName==="DIV"&&this.toggleChildren(c[d],b)},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,k=this.symbolName, +j,m=this.shadows,n,o=this.attrSetters,p=this;yb(a)&&y(b)&&(c=a,a={},a[c]=b);if(yb(a))c=a,p=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],n=!1,e=o[c]&&o[c](d,c),e!==!1&&d!==null){e!==ba&&(d=e);if(k&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))j||(this.symbolAttr(a),j=!0),n=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");e=d.length;for(n=[];e--;)n[e]=Ja(d[e])?B(d[e]*10)-5:d[e]==="Z"?"x":d[e];d=n.join(" ")||"x";f.path=d;if(m)for(e=m.length;e--;)m[e].path= +d;n=!0}else if(c==="zIndex"||c==="visibility"){if(wb&&c==="visibility"&&h==="DIV")f.gVis=d,this.toggleChildren(f,d),d===eb&&(d=null);d&&(g[c]=d);n=!0}else if(c==="width"||c==="height")d=$(0,d),this[c]=d,this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,n=!0;else if(c==="x"||c==="y")this[c]=d,g[{x:"left",y:"top"}[c]]=d;else if(c==="class")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]= +d,Ja(d)&&(d+=ia);else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||xa(i.prepVML([""]),null,null,f))[c]=d||"solid",this.dashstyle=d,n=!0;else if(c==="fill")h==="SPAN"?g.color=d:(f.filled=d!==ga?!0:!1,d=i.color(d,f,c),c="fillcolor");else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.htmlUpdateTransform(),n=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,n=!0;if(m&&c==="visibility")for(e=m.length;e--;)m[e].style[c]=d;n||(wb?f[c]=d:r(f,c,d))}return p},clip:function(a){var b= +this,c=a.members;c.push(b);b.destroyClip=function(){Gb(c,b)};return b.css(a.getCSS(b.inverted))},css:pa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Vb(a)},destroy:function(){this.destroyClip&&this.destroyClip();return pa.prototype.destroy.apply(this)},empty:function(){for(var a=this.element.childNodes,b=a.length,c;b--;)c=a[b],c.parentNode.removeChild(c)},on:function(a,b){this.element["on"+a]=function(){var a=ea.event;a.target=a.srcElement;b(a)};return this},shadow:function(a,b){var c= +[],d,e=this.element,f=this.renderer,g,h=e.style,i,k=e.path;k&&typeof k.value!=="string"&&(k="x");if(a){for(d=1;d<=3;d++)i=[''],g=xa(f.prepVML(i),null,{left:Q(h.left)+1,top:Q(h.top)+1}),i=[''],xa(f.prepVML(i),null,null,g),b?b.element.appendChild(g):e.parentNode.insertBefore(g,e),c.push(g);this.shadows=c}return this}}),isIE8:Ha.indexOf("MSIE 8.0")> +-1,init:function(a,b,c){var d;this.alignedObjects=[];d=this.createElement(db);a.appendChild(d.element);this.box=d.element;this.boxWrapper=d;this.setSize(b,c,!1);if(!V.namespaces.hcv)V.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),V.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "},clipRect:function(a,b,c,d){var e=this.createElement();return N(e,{members:[],left:a,top:b,width:c,height:d,getCSS:function(a){var b= +this.top,c=this.left,d=c+this.width,e=b+this.height,b={clip:"rect("+B(a?c:b)+"px,"+B(a?e:d)+"px,"+B(a?d:e)+"px,"+B(a?b:c)+"px)"};!a&&wb&&N(b,{width:d+ia,height:e+ia});return b},updateClipping:function(){o(e.members,function(a){a.css(e.getCSS(a.inverted))})}})},color:function(a,b,c){var d,e=/^rgba/;if(a&&a.linearGradient){var f,g,h=a.linearGradient,i=h.x1||h[0]||0,k=h.y1||h[1]||0,j=h.x2||h[2]||0,h=h.y2||h[3]||0,m,n,p,t;o(a.stops,function(a,b){e.test(a[1])?(d=bb(a[1]),f=d.get("rgb"),g=d.get("a")):(f= +a[1],g=1);b?(p=f,t=g):(m=f,n=g)});if(c==="fill")a=90-oa.atan((h-k)/(j-i))*180/ab,a=[''],xa(this.prepVML(a),null,null,b);else return f}else if(e.test(a)&&b.tagName!=="IMG")return d=bb(a),a=["<",c,' opacity="',d.get("a"),'"/>'],xa(this.prepVML(a),null,null,b),d.get("rgb");else{b=b.getElementsByTagName(c);if(b.length)b[0].opacity=1;return a}},prepVML:function(a){var b=this.isIE8, +a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.css({left:b,top:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){if(kb(a))b=a.y,c=a.width,d=a.height,f=a.strokeWidth,a=a.x;var g=this.symbol("rect");g.r=e;return g.attr(g.crisp(f,a,b,$(c,0),$(d,0)))},invertChild:function(a,b){var c=b.style;U(a,{flip:"x",left:Q(c.width)-10,top:Q(c.height)-10,rotation:-90})}, +symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,c=e.r||c||d,d=fa(f),h=sa(f),i=fa(g),k=sa(g),e=e.innerR,j=0.07/c,m=e&&0.1/e||0;if(g-f===0)return["x"];else 2*ab-g+fa+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=a.data;a.data=null;c=M(c[this.type],c.series,a);c.data=a.data=d;this.tooltipOptions=M(b.tooltip,c.tooltip);return c},getColor:function(){var a= +this.chart.options.colors,b=this.chart.counters;this.color=this.options.color||a[b.color++]||"#0000ff";b.wrapColor(a.length)},getSymbol:function(){var a=this.options.marker,b=this.chart,c=b.options.symbols,b=b.counters;this.symbol=a.symbol||c[b.symbol++];if(/^url/.test(this.symbol))a.radius=0;b.wrapSymbol(c.length)},addPoint:function(a,b,c,d){var e=this.data,f=this.graph,g=this.area,h=this.chart,i=this.xData,k=this.yData,j=f&&f.shift||0,m=this.options.data;Lb(d,h);if(f&&c)f.shift=j+1;if(g)g.shift= +j+1,g.isArea=!0;b=p(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);i.push(d.x);k.push(this.valueCount===4?[d.open,d.high,d.low,d.close]:d.y);m.push(a);c&&(e[0]?e[0].remove(!1):(e.shift(),i.shift(),k.shift(),m.shift()));this.getAttribs();this.isDirtyData=this.isDirty=!0;b&&h.redraw()},setData:function(a,b){var c=this.points,d=this.options,e=this.initialColor,f=this.chart,g=null;this.xIncrement=null;this.pointRange=this.xAxis&&this.xAxis.categories&&1||d.pointRange;if(y(e))f.counters.color= +e;var h=[],i=[],k=a?a.length:[],j=this.valueCount===4;if(k>(d.turboThreshold||1E3)){for(e=0;g===null&&ej||this.forceCrop)if(a=i.getExtremes(),i=a.min,j=a.max,b[d-1]j)b=[],c=[];else if(b[0]j){for(a=0;a=i){e=$(0,a-1);break}for(;aj){f=a+1;break}b=b.slice(e,f);c=c.slice(e,f);g=!0}for(a=b.length-1;a>0;a--)if(d=b[a]-b[a-1],h===ba||d0||k)g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(this.group)}, +convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=ka[a.type].marker?a.options.marker:a.options,c=b.states,d=c[Ra],e,f=a.color,g={stroke:f,fill:f},h=a.points,i=[],k,j=a.pointAttrToOptions,m;a.options.marker?(d.radius=d.radius||b.radius+2,d.lineWidth=d.lineWidth||b.lineWidth+1):d.color=d.color||bb(d.color||f).brighten(d.brightness).get();i[Ga]=a.convertAttribs(b, +g);o([Ra,"select"],function(b){i[b]=a.convertAttribs(c[b],i[Ga])});a.pointAttr=i;for(f=h.length;f--;){g=h[f];if((b=g.options&&g.options.marker||g.options)&&b.enabled===!1)b.radius=0;e=!1;if(g.options)for(m in j)y(b[j[m]])&&(e=!0);if(e){k=[];c=b.states||{};e=c[Ra]=c[Ra]||{};if(!a.options.marker)e.color=bb(e.color||g.options.color).brighten(e.brightness||d.brightness).get();k[Ga]=a.convertAttribs(b,i[Ga]);k[Ra]=a.convertAttribs(c[Ra],i[Ra],k[Ga]);k.select=a.convertAttribs(c.select,i.select,k[Ga])}else k= +i;g.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=a.clipRect,d=/AppleWebKit\/533/.test(Ha),e,f,g=a.data||[],h,i,k;Z(a,"destroy");Na(a);o(["xAxis","yAxis"],function(b){if(k=a[b])Gb(k.series,a),k.isDirty=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(f=g.length;f--;)(h=g[f])&&h.destroy&&h.destroy();a.points=null;if(c&&c!==b.clipRect)a.clipRect=c.destroy();o(["area","graph","dataLabelsGroup","group","tracker"],function(b){a[b]&&(e=d&&b==="group"?"hide":"destroy",a[b][e]())});if(b.hoverSeries=== +a)b.hoverSeries=null;Gb(b.series,a);for(i in a)delete a[i]},drawDataLabels:function(){var a=this,b=a.options,c=b.dataLabels;if(c.enabled||a._hasPointLabels){var d,e,f=a.points,g,h,i,k=a.dataLabelsGroup,j=a.chart,m=a.xAxis,m=m?m.left:j.plotLeft,n=a.yAxis,n=n?n.top:j.plotTop,u=j.renderer,t=j.inverted,D=a.type,x=b.stacking,E=D==="column"||D==="bar",q=c.verticalAlign===null,w=c.y===null,v;E&&(x?(q&&(c=M(c,{verticalAlign:"middle"})),w&&(c=M(c,{y:{top:14,middle:4,bottom:-6}[c.verticalAlign]}))):q&&(c=M(c, +{verticalAlign:"top"})));k?k.translate(m,n):k=a.dataLabelsGroup=u.g("data-labels").attr({visibility:a.visible?eb:$a,zIndex:6}).translate(m,n).add();h=c;o(f,function(f){v=f.dataLabel;c=h;(g=f.options)&&g.dataLabels&&(c=M(c,g.dataLabels));if(v&&a.isCartesian&&!j.isInsidePlot(f.plotX,f.plotY))f.dataLabel=v.destroy();else if(c.enabled){i=c.formatter.call(f.getLabelConfig(),c);var n=f.barX,m=n&&n+f.barW/2||f.plotX||-999,o=p(f.plotY,-999),q=c.align,r=w?f.y>=0?-6:12:c.y;d=(t?j.plotWidth-o:m)+c.x;e=(t?j.plotHeight- +m:o)+r;D==="column"&&(d+={left:-1,right:1}[q]*f.barW/2||0);!x&&t&&f.y<0&&(q="right",d-=10);c.style.color=p(c.color,c.style.color,a.color,"black");if(v)t&&!c.y&&(e=e+Q(v.styles.lineHeight)*0.9-v.getBBox().height/2),v.attr({text:i}).animate({x:d,y:e});else if(y(i))v=f.dataLabel=u.text(i,d,e,c.useHTML).attr({align:q,rotation:c.rotation,zIndex:1}).css(c.style).add(k),t&&!c.y&&v.attr({y:e+Q(v.styles.lineHeight)*0.9-v.getBBox().height/2});if(E&&b.stacking&&v)m=f.barY,o=f.barW,f=f.barH,v.align(c,null,{x:t? +j.plotWidth-m-f:n,y:t?j.plotHeight-n-o:m,width:t?f:o,height:t?o:f})}})}},drawGraph:function(){var a=this,b=a.options,c=a.graph,d=[],e,f=a.area,g=a.group,h=b.lineColor||a.color,i=b.lineWidth,k=b.dashStyle,j,m=a.chart.renderer,n=a.yAxis.getThreshold(b.threshold),u=/^area/.test(a.type),t=[],D=[];o(a.segments,function(c){j=[];o(c,function(d,e){a.getPointSpline?j.push.apply(j,a.getPointSpline(c,d,e)):(j.push(e?ha:ua),e&&b.step&&j.push(d.plotX,c[e-1].plotY),j.push(d.plotX,d.plotY))});c.length>1?d=d.concat(j): +t.push(c[0]);if(u){var e=[],f,g=j.length;for(f=0;f=0;f--)fa&&i>e?(i=$(a,e),j=2*e-i):ig&&j>e?(j=$(g,e),i=2*e-j):jw?h-w:q-(g<=q?w:0));N(f,{barX:i,barY:j,barW:x,barH:k});f.shapeType="rect";g=N(b.renderer.Element.prototype.crisp.apply({},[e,i,j,x,k]),{r:c.borderRadius});e%2&&(g.y-=1,g.height+=1);f.shapeArgs=g;f.trackerArgs=ya(k)<3&&M(f.shapeArgs,{height:6,y:j-3})})},getSymbol:function(){}, +drawGraph:function(){},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d,e;o(a.points,function(f){var g=f.plotY;if(g!==ba&&!isNaN(g)&&f.y!==null)d=f.graphic,e=f.shapeArgs,d?(Pb(d),d.animate(e)):f.graphic=d=c[f.shapeType](e).attr(f.pointAttr[f.selected?"select":Ga]).add(a.group).shadow(b.shadow)})},drawTracker:function(){var a=this,b=a.chart,c=b.renderer,d,e,f=+new Date,g=a.options,h=g.cursor,i=h&&{cursor:h},k,j;a.isCartesian&&(k=c.g().clip(b.clipRect).add(b.trackerGroup));o(a.points, +function(h){e=h.tracker;d=h.trackerArgs||h.shapeArgs;delete d.strokeWidth;if(h.y!==null)e?e.attr(d):h.tracker=c[h.shapeType](d).attr({isTracker:f,fill:Ec,visibility:a.visible?eb:$a,zIndex:g.zIndex||1}).on(ra?"touchstart":"mouseover",function(c){j=c.relatedTarget||c.fromElement;if(b.hoverSeries!==a&&r(j,"isTracker")!==f)a.onMouseOver();h.onMouseOver()}).on("mouseout",function(b){if(!g.stickyTracking&&(j=b.relatedTarget||b.toElement,r(j,"isTracker")!==f))a.onMouseOut()}).css(i).add(h.group||k)})},animate:function(a){var b= +this,c=b.points,d=b.options;if(!a)o(c,function(a){var c=a.graphic,a=a.shapeArgs,g=b.yAxis,h=d.threshold;c&&(c.attr({height:0,y:y(h)?g.getThreshold(h):g.translate(g.getExtremes().min,0,1,0,1)}),c.animate({height:a.height,y:a.y},d.animation))}),b.animate=null},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0});R.prototype.remove.apply(a,arguments)}});Ca.column=xb;A=O(xb,{type:"bar",init:function(){this.inverted=!0;xb.prototype.init.apply(this, +arguments)}});Ca.bar=A;A=O(R,{type:"scatter",translate:function(){var a=this;R.prototype.translate.apply(a);o(a.points,function(b){b.shapeType="circle";b.shapeArgs={x:b.plotX,y:b.plotY,r:a.chart.options.tooltip.snap}})},drawTracker:function(){for(var a=this,b=a.options.cursor,b=b&&{cursor:b},c=a.points,d=c.length,e;d--;)if(e=c[d].graphic)e.element._index=d;a._hasTracking?a._hasTracking=!0:a.group.on(ra?"touchstart":"mouseover",function(b){a.onMouseOver();c[b.target._index].onMouseOver()}).on("mouseout", +function(){if(!a.options.stickyTracking)a.onMouseOut()}).css(b)}});Ca.scatter=A;A=O(Aa,{init:function(){Aa.prototype.init.apply(this,arguments);var a=this,b;N(a,{visible:a.visible!==!1,name:p(a.name,"Slice")});b=function(){a.slice()};ja(a,"select",b);ja(a,"unselect",b);return a},setVisible:function(a){var b=this.series.chart,c=this.tracker,d=this.dataLabel,e=this.connector,f=this.shadowGroup,g;g=(this.visible=a=a===ba?!this.visible:a)?"show":"hide";this.group[g]();if(c)c[g]();if(d)d[g]();if(e)e[g](); +if(f)f[g]();this.legendItem&&b.legend.colorizeItem(this,a)},slice:function(a,b,c){var d=this.series.chart,e=this.slicedTranslation;Lb(c,d);p(b,!0);a=this.sliced=y(a)?a:!this.sliced;a={translateX:a?e[0]:d.plotLeft,translateY:a?e[1]:d.plotTop};this.group.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}});A=O(R,{type:"pie",isCartesian:!1,pointClass:A,pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:function(){this.initialColor=this.chart.counters.color}, +animate:function(){var a=this;o(a.points,function(b){var c=b.graphic,b=b.shapeArgs,d=-ab/2;c&&(c.attr({r:0,start:d,end:d}),c.animate({r:b.r,start:b.start,end:b.end},a.options.animation))});a.animate=null},setData:function(){R.prototype.setData.apply(this,arguments);this.processData();this.generatePoints()},translate:function(){this.generatePoints();var a=0,b=-0.25,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f=c.center.concat([c.size,c.innerSize||0]),g=this.chart,h=g.plotWidth,i=g.plotHeight, +k,j,m,n=this.points,p=2*ab,t,D=Za(h,i),x,r,q,w=c.dataLabels.distance,f=Xb(f,function(a,b){return(x=/%$/.test(a))?[h,i,D,D][b]*Q(a)/100:a});this.getX=function(a,b){m=oa.asin((a-f[1])/(f[2]/2+w));return f[0]+(b?-1:1)*fa(m)*(f[2]/2+w)};this.center=f;o(n,function(b){a+=b.y});o(n,function(c){t=a?c.y/a:0;k=B(b*p*1E3)/1E3;b+=t;j=B(b*p*1E3)/1E3;c.shapeType="arc";c.shapeArgs={x:f[0],y:f[1],r:f[2]/2,innerR:f[3]/2,start:k,end:j};m=(j+k)/2;c.slicedTranslation=Xb([fa(m)*d+g.plotLeft,sa(m)*d+g.plotTop],B);r=fa(m)* +f[2]/2;q=sa(m)*f[2]/2;c.tooltipPos=[f[0]+r*0.7,f[1]+q*0.7];c.labelPos=[f[0]+r+fa(m)*w,f[1]+q+sa(m)*w,f[0]+r+fa(m)*e,f[1]+q+sa(m)*e,f[0]+r,f[1]+q,w<0?"center":m

          0,u=[[],[]],t,r,x,y,q=2,w;if(d.enabled){R.prototype.drawDataLabels.apply(this);o(a,function(a){a.dataLabel&&u[a.labelPos[7]x){h=[].concat(A);h.sort(y);for(w=C;w--;)h[w].rank=w;for(w=C;w--;)A[w].rank>=x&&A.splice(w,1);C=A.length}for(w=0;wr&&v[F+1]!==null||t").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"":"")+""),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
          a

          ",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
          ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
          t
          ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="
          "+""+"
          ";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&& +(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

          ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
          ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/",""],legend:[1,"
          ","
          "],thead:[1,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],col:[2,"","
          "],area:[1,"",""],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div
          ","
          "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after" +,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
          ").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/harstorage/public/scripts/preferences.js b/harstorage/public/scripts/preferences.js new file mode 100644 index 0000000..c1204f9 --- /dev/null +++ b/harstorage/public/scripts/preferences.js @@ -0,0 +1,156 @@ +/* + * Name space + */ +var HARSTORAGE = HARSTORAGE || {}; + +/* + * Cookies + */ +HARSTORAGE.create_cookie = function(name, value) { + "use strict"; + + document.cookie = name + "=" + value + ";" + + "expires=Wed, 1 Jan 2014 00:00:00 UTC;" + + "path=/"; +}; + +HARSTORAGE.read_cookie = function(name) { + "use strict"; + + var nameEQ = name + "="; + var cookies = document.cookie.split(";"); + + for (var i=0; i < cookies.length; i++) { + var cookie = cookies[i]; + while (cookie.charAt(0) === " ") { + cookie = cookie.substring(1, cookie.length); + } + if (cookie.indexOf(nameEQ) === 0) { + return cookie.substring(nameEQ.length, cookie.length); + } + } + + return null; +}; + +/* + * View Preferences Menu + */ +HARSTORAGE.view_preferences = function() { + "use strict"; + + // Read preference from Cookie + var theme = HARSTORAGE.read_cookie("chartTheme"); + + // If preference is found - update form + if (theme) { + var theme_list = document.getElementById("theme-list"); + + var len = theme_list.length; + + for (var i=0; i < len; i++ ) { + if (theme_list[i].value === theme) { + theme_list[i].checked = true; + break; + } + } + } + + // Display preference menu + var menu = document.getElementById("preferences"); + + if (menu.style.display === "none" || menu.style.display === "") { + menu.style.display = "block"; + } else { + menu.style.display = "none"; + } +}; + +/* + * Update Preferences + */ +HARSTORAGE.update_preferences = function() { + "use strict"; + + // Look up for selected theme + var theme_list = document.getElementById("theme-list"); + + var len = theme_list.length; + + for (var i=0; i < len; i++ ) { + if (theme_list[i].checked === true) { + HARSTORAGE.create_cookie("chartTheme", theme_list[i].value); + break; + } + } + + // Refresh current window + window.location.reload(); +}; + +/* + * Chart colors from theme + */ +HARSTORAGE.Colors = function() { + "use strict"; + + // Colors for Y Axis labels + var theme = HARSTORAGE.read_cookie("chartTheme"); + + if (theme === "dark-green" || !theme) { + return [ + "#DDDF0D", + "#55BF3B", + "#DF5353", + "#7798BF", + "#6AF9C4", + "#DB843D", + "#EEAAEE", + "#669933", + "#CC3333", + "#FF9944", + "#996633", + "#4572A7", + "#80699B", + "#92A8CD", + "#A47D7C", + "#9A48C9", + "#C99A48", + "#879D79" + ]; + } else { + return [ + "#669933", + "#CC3333", + "#FF9944", + "#996633", + "#4572A7", + "#80699B", + "#92A8CD", + "#EEAAEE", + "#A47D7C", + "#DDDF0D", + "#55BF3B", + "#DF5353", + "#7798BF", + "#6AF9C4", + "#DB843D", + "#9A48C9", + "#C99A48", + "#879D79" + ]; + } +}; + +/* + * Spinner options + */ +HARSTORAGE.SpinnerOpts = { + lines: 10, + length: 6, + width: 3, + radius: 6, + color: "#498a2d", + speed: 0.8, + trail: 80 +}; \ No newline at end of file diff --git a/harstorage/public/scripts/spin.js b/harstorage/public/scripts/spin.js new file mode 100644 index 0000000..1100a0c --- /dev/null +++ b/harstorage/public/scripts/spin.js @@ -0,0 +1,325 @@ +/** + * Copyright (c) 2011 Felix Gnass [fgnass at neteye dot de] + * Licensed under the MIT license + */ + +(function(window, document, undefined) { + "use strict"; + + var prefixes = ['webkit', 'Moz', 'ms', 'O'], /* Vendor prefixes */ + animations = {}, /* Animation rules keyed by their name */ + useCssAnimations; + + /** + * Utility function to create elements. If no tag name is given, + * a DIV is created. Optionally properties can be passed. + */ + function createEl(tag, prop) { + var el = document.createElement(tag || 'div'), + n; + + for (n in prop) { + if (prop.hasOwnProperty(n)) { + el[n] = prop[n]; + } + } + return el; + } + + /** + * Inserts child1 before child2. If child2 is not specified, + * child1 is appended. If child2 has no parentNode, child2 is + * appended first. + */ + function ins(parent, child1, child2) { + if (child2 && !child2.parentNode) { + ins(parent, child2); + } + parent.insertBefore(child1, child2||null); + return parent; + } + + /** + * Insert a new stylesheet to hold the @keyframe or VML rules. + */ + var sheet = (function() { + var el = createEl('style'); + ins(document.getElementsByTagName('head')[0], el); + return el.sheet || el.styleSheet; + })(); + + /** + * Creates an opacity keyframe animation rule and returns its name. + * Since most mobile Webkits have timing issues with animation-delay, + * we create separate rules for each line/segment. + */ + function addAnimation(alpha, trail, i, lines) { + var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-'), + start = 0.01 + i/lines*100, + z = Math.max(1-(1-alpha)/trail*(100-start) , alpha), + prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase(), + pre = prefix && '-'+prefix+'-' || ''; + + if (!animations[name]) { + sheet.insertRule( + '@' + pre + 'keyframes ' + name + '{' + + '0%{opacity:'+z+'}' + + start + '%{opacity:'+ alpha + '}' + + (start+0.01) + '%{opacity:1}' + + (start+trail)%100 + '%{opacity:'+ alpha + '}' + + '100%{opacity:'+ z + '}' + + '}', 0 + ); + animations[name] = 1; + } + return name; + } + + /** + * Tries various vendor prefixes and returns the first supported property. + **/ + function vendor(el, prop) { + var s = el.style, + pp, + i; + + if (s[prop] !== undefined) { + return prop; + } + prop = prop.charAt(0).toUpperCase() + prop.slice(1); + for (i=0; i> 1) - ep.x+tp.x + 'px', + top: (target.offsetHeight >> 1) - ep.y+tp.y + 'px' + }); + } + el.setAttribute('aria-role', 'progressbar'); + self.lines(el, self.opts); + if (!useCssAnimations) { + // No CSS animation support, use setTimeout() instead + var o = self.opts, + i = 0, + fps = o.fps, + f = fps/o.speed, + ostep = (1-o.opacity)/(f*o.trail / 100), + astep = f/o.lines; + + (function anim() { + i++; + for (var s=o.lines; s; s--) { + var alpha = Math.max(1-(i+s*astep)%f * ostep, o.opacity); + self.opacity(el, o.lines-s, alpha, o); + } + self.timeout = self.el && setTimeout(anim, ~~(1000/fps)); + })(); + } + return self; + }, + stop: function() { + var el = this.el; + if (el) { + clearTimeout(this.timeout); + if (el.parentNode) { + el.parentNode.removeChild(el); + } + this.el = undefined; + } + return this; + } + }; + + proto.lines = function(el, o) { + var i = 0, + seg; + + function fill(color, shadow) { + return css(createEl(), { + position: 'absolute', + width: (o.length+o.width) + 'px', + height: o.width + 'px', + background: color, + boxShadow: shadow, + transformOrigin: 'left', + transform: 'rotate(' + ~~(360/o.lines*i) + 'deg) translate(' + o.radius+'px' +',0)', + borderRadius: (o.width>>1) + 'px' + }); + } + + for (; i < o.lines; i++) { + seg = css(createEl(), { + position: 'absolute', + top: 1+~(o.width/2) + 'px', + transform: 'translate3d(0,0,0)', + opacity: o.opacity, + animation: useCssAnimations && addAnimation(o.opacity, o.trail, i, o.lines) + ' ' + 1/o.speed + 's linear infinite' + }); + if (o.shadow) { + ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'})); + } + ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)'))); + } + return el; + }; + + proto.opacity = function(el, i, val) { + if (i < el.childNodes.length) { + el.childNodes[i].style.opacity = val; + } + }; + + ///////////////////////////////////////////////////////////////////////// + // VML rendering for IE + ///////////////////////////////////////////////////////////////////////// + + /** + * Check and init VML support + */ + (function() { + var s = css(createEl('group'), {behavior: 'url(#default#VML)'}), + i; + + if (!vendor(s, 'transform') && s.adj) { + + // VML support detected. Insert CSS rules ... + for (i=4; i--;) { + sheet.addRule(['group', 'roundrect', 'fill', 'stroke'][i], 'behavior:url(#default#VML)'); + } + + proto.lines = function(el, o) { + var r = o.length+o.width, + s = 2*r; + + function grp() { + return css(createEl('group', {coordsize: s +' '+s, coordorigin: -r +' '+-r}), {width: s, height: s}); + } + + var g = grp(), + margin = ~(o.length+o.radius+o.width)+'px', + i; + + function seg(i, dx, filter) { + ins(g, + ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}), + ins(css(createEl('roundrect', + {arcsize: 1}), { + width: r, + height: o.width, + left: o.radius, + top: -o.width>>1, + filter: filter}), + createEl('fill', {color: o.color, opacity: o.opacity}), + createEl('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change + ) + ) + ); + } + + if (o.shadow) { + for (i = 1; i <= o.lines; i++) { + seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)'); + } + } + for (i = 1; i <= o.lines; i++) { + seg(i); + } + return ins(css(el, { + margin: margin + ' 0 0 ' + margin, + zoom: 1 + }), g); + }; + + proto.opacity = function(el, i, val, o) { + var c = el.firstChild; + o = o.shadow && o.lines || 0; + if (c && i+o < c.childNodes.length) { + c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild; + if (c) { + c.opacity = val; + } + } + }; + } + else { + useCssAnimations = vendor(s, 'animation'); + } + })(); + + window.Spinner = Spinner; + +})(window, document); \ No newline at end of file diff --git a/harstorage/public/scripts/tabber.js b/harstorage/public/scripts/tabber.js new file mode 100644 index 0000000..828c8aa --- /dev/null +++ b/harstorage/public/scripts/tabber.js @@ -0,0 +1,476 @@ +/*================================================== + License (http://www.opensource.org/licenses/mit-license.php) + + Copyright (c) 2006 Patrick Fitzgerald + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + ==================================================*/ + +function TabberObj(argsObj) { + "use strict"; + + var arg; /* name of an argument to override */ + + /* Element for the main tabber div. If you supply this in argsObj, + then the init() method will be called. + */ + this.div = null; + + /* Class of the main tabber div */ + this.classMain = "tabber"; + + /* Rename classMain to classMainLive after tabifying + (so a different style can be applied) + */ + this.classMainLive = "tabberlive"; + + /* Class of each DIV that contains a tab */ + this.classTab = "tabbertab"; + + /* Class to indicate which tab should be active on startup */ + this.classTabDefault = "tabbertabdefault"; + + /* Class for the navigation UL */ + this.classNav = "tabbernav"; + + /* When a tab is to be hidden, instead of setting display='none', we + set the class of the div to classTabHide. In your screen + stylesheet you should set classTabHide to display:none. In your + print stylesheet you should set display:block to ensure that all + the information is printed. + */ + this.classTabHide = "tabbertabhide"; + + /* Class to set the navigation LI when the tab is active, so you can + use a different style on the active tab. + */ + this.classNavActive = "tabberactive"; + + /* Elements that might contain the title for the tab, only used if a + title is not specified in the TITLE attribute of DIV classTab. + */ + this.titleElements = ['h2','h3','h4','h5','h6']; + + /* Should we strip out the HTML from the innerHTML of the title elements? + This should usually be true. + */ + this.titleElementsStripHTML = true; + + /* If the user specified the tab names using a TITLE attribute on + the DIV, then the browser will display a tooltip whenever the + mouse is over the DIV. To prevent this tooltip, we can remove the + TITLE attribute after getting the tab name. + */ + this.removeTitle = true; + + /* If you want to add an id to each link set this to true */ + this.addLinkId = false; + + /* If addIds==true, then you can set a format for the ids. + will be replaced with the id of the main tabber div. + will be replaced with the tab number + (tab numbers starting at zero) + will be replaced with the tab number + (tab numbers starting at one) + will be replaced by the tab title + (with all non-alphanumeric characters removed) + */ + this.linkIdFormat = 'nav'; + + /* You can override the defaults listed above by passing in an object: + var mytab = new tabber({property:value,property:value}); + */ + for (arg in argsObj) { + if (argsObj.hasOwnProperty(arg)) { + this[arg] = argsObj[arg]; + } + } + + /* Create regular expressions for the class names; Note: if you + change the class names after a new object is created you must + also change these regular expressions. + */ + this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi'); + this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi'); + this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi'); + this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi'); + this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi'); + + /* Array of objects holding info about each tab */ + this.tabs = []; + + /* If the main tabber div was specified, call init() now */ + if (this.div) { + this.init(this.div); + + /* We don't need the main div anymore, and to prevent a memory leak + in IE, we must remove the circular reference between the div + and the tabber object. */ + this.div = null; + } +} + +/*-------------------------------------------------- + Methods for TabberObj + --------------------------------------------------*/ + +TabberObj.prototype.init = function(e) { + "use strict"; + + /* Set up the tabber interface. + + e = element (the main containing div) + + Example: + init(document.getElementById('mytabberdiv')) + */ + + var childNodes, /* child nodes of the tabber div */ + i, i2, /* loop indices */ + t, /* object to store info about a single tab */ + defaultTab=0, /* which tab to select by default */ + DOM_ul, /* tabbernav list */ + DOM_li, /* tabbernav list item */ + DOM_a, /* tabbernav link */ + aId, /* A unique id for DOM_a */ + headingElement; /* searching for text to use in the tab */ + + /* Verify that the browser supports DOM scripting */ + if (!document.getElementsByTagName) { + return false; + } + + /* If the main DIV has an ID then save it. */ + if (e.id) { + this.id = e.id; + } + + /* Clear the tabs array (but it should normally be empty) */ + this.tabs.length = 0; + + /* Loop through an array of all the child nodes within our tabber element. */ + childNodes = e.childNodes; + for (i=0; i < childNodes.length; i++) { + + /* Find the nodes where class="tabbertab" */ + if(childNodes[i].className && + childNodes[i].className.match(this.REclassTab)) { + + /* Create a new object to save info about this tab */ + t = {}; + + /* Save a pointer to the div for this tab */ + t.div = childNodes[i]; + + /* Add the new object to the array of tabs */ + this.tabs[this.tabs.length] = t; + + /* If the class name contains classTabDefault, + then select this tab by default. + */ + if (childNodes[i].className.match(this.REclassTabDefault)) { + defaultTab = this.tabs.length-1; + } + } + } + + /* Create a new UL list to hold the tab headings */ + DOM_ul = document.createElement("ul"); + DOM_ul.className = this.classNav; + + /* Loop through each tab we found */ + for (i=0; i < this.tabs.length; i++) { + + t = this.tabs[i]; + + /* Get the label to use for this tab: + From the title attribute on the DIV, + Or from one of the this.titleElements[] elements, + Or use an automatically generated number. + */ + t.headingText = t.div.title; + + /* Remove the title attribute to prevent a tooltip from appearing */ + if (this.removeTitle) { t.div.title = ''; } + + if (!t.headingText) { + + /* Title was not defined in the title of the DIV, + So try to get the title from an element within the DIV. + Go through the list of elements in this.titleElements + (typically heading elements ['h2','h3','h4']) + */ + for (i2=0; i2/gi," "); + t.headingText = t.headingText.replace(/<[^>]+>/g,""); + } + break; + } + } + } + + if (!t.headingText) { + /* Title was not found (or is blank) so automatically generate a + number for the tab. + */ + t.headingText = i + 1; + } + + /* Create a list element for the tab */ + DOM_li = document.createElement("li"); + + /* Save a reference to this list item so we can later change it to + the "active" class */ + t.li = DOM_li; + + /* Create a link to activate the tab */ + DOM_a = document.createElement("a"); + DOM_a.appendChild(document.createTextNode(t.headingText)); + DOM_a.href = "javascript:void(null);"; + DOM_a.title = t.headingText; + DOM_a.onclick = this.navClick; + + /* Add some properties to the link so we can identify which tab + was clicked. Later the navClick method will need this. + */ + DOM_a.tabber = this; + DOM_a.tabberIndex = i; + + /* Do we need to add an id to DOM_a? */ + if (this.addLinkId && this.linkIdFormat) { + + /* Determine the id name */ + aId = this.linkIdFormat; + aId = aId.replace(//gi, this.id); + aId = aId.replace(//gi, i); + aId = aId.replace(//gi, i+1); + aId = aId.replace(//gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, '')); + + DOM_a.id = aId; + } + + /* Add the link to the list element */ + DOM_li.appendChild(DOM_a); + + /* Add the list element to the list */ + DOM_ul.appendChild(DOM_li); + } + + /* Add the UL list to the beginning of the tabber div */ + e.insertBefore(DOM_ul, e.firstChild); + + /* Make the tabber div "live" so different CSS can be applied */ + e.className = e.className.replace(this.REclassMain, this.classMainLive); + + /* Activate the default tab, and do not call the onclick handler */ + this.tabShow(defaultTab); + + return this; +}; + + +TabberObj.prototype.navClick = function(event) { + "use strict"; + + /* This method should only be called by the onClick event of an + element, in which case we will determine which tab was clicked by + examining a property that we previously attached to the + element. + + Since this was triggered from an onClick event, the variable + "this" refers to the element that triggered the onClick + event (and not to the TabberObj). + + When TabberObj was initialized, we added some extra properties + to the element, for the purpose of retrieving them now. Get + the TabberObj object, plus the tab number that was clicked. + */ + + var rVal, /* Return value from the user onclick function */ + a, /* element that triggered the onclick event */ + self, /* the tabber object */ + tabberIndex, /* index of the tab that triggered the event */ + onClickArgs; /* args to send the onclick function */ + + a = this; + + if (!a.tabber) { + return false; + } + + self = a.tabber; + tabberIndex = a.tabberIndex; + + /* Remove focus from the link because it looks ugly. + I don't know if this is a good idea... + */ + a.blur(); + + /* If the user specified an onClick function, call it now. + If the function returns false then do not continue. + */ + if (typeof self.onClick === 'function') { + onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event}; + + /* IE uses a different way to access the event object */ + if (!event) { + onClickArgs.event = window.event; + } + + rVal = self.onClick(onClickArgs); + if (rVal === false) { return false; } + } + + self.tabShow(tabberIndex); + + return false; +}; + + +TabberObj.prototype.tabHideAll = function() { + "use strict"; + + var i; /* counter */ + + /* Hide all tabs and make all navigation links inactive */ + for (i = 0; i < this.tabs.length; i++) { + this.tabHide(i); + } +}; + + +TabberObj.prototype.tabHide = function(tabberIndex) { + "use strict"; + + var div; + + if (!this.tabs[tabberIndex]) { + return false; + } + + /* Hide a single tab and make its navigation link inactive */ + div = this.tabs[tabberIndex].div; + + /* Hide the tab contents by adding classTabHide to the div */ + if (!div.className.match(this.REclassTabHide)) { + div.className += ' ' + this.classTabHide; + } + this.navClearActive(tabberIndex); + + return this; +}; + + +TabberObj.prototype.tabShow = function(tabberIndex) { + "use strict"; + + /* Show the tabberIndex tab and hide all the other tabs */ + + var div; + + if (!this.tabs[tabberIndex]) { + return false; + } + + /* Hide all the tabs first */ + this.tabHideAll(); + + /* Get the div that holds this tab */ + div = this.tabs[tabberIndex].div; + + /* Remove classTabHide from the div */ + div.className = div.className.replace(this.REclassTabHide, ''); + + /* Mark this tab navigation link as "active" */ + this.navSetActive(tabberIndex); + + /* If the user specified an onTabDisplay function, call it now. */ + if (typeof this.onTabDisplay === 'function') { + this.onTabDisplay({'tabber':this, 'index':tabberIndex}); + } + + return this; +}; + +TabberObj.prototype.navSetActive = function(tabberIndex) { + "use strict"; + + /* Note: this method does *not* enforce the rule + that only one nav item can be active at a time. + */ + + /* Set classNavActive for the navigation list item */ + this.tabs[tabberIndex].li.className = this.classNavActive; + + return this; +}; + + +TabberObj.prototype.navClearActive = function(tabberIndex) { + "use strict"; + + /* Note: this method does *not* enforce the rule + that one nav should always be active. + */ + + /* Remove classNavActive from the navigation list item */ + this.tabs[tabberIndex].li.className = ''; + + return this; +}; + +(function tabberAutomatic() { + "use strict"; + + /* This function finds all DIV elements in the document where + class=tabber.classMain, then converts them to use the tabber + interface. + + tabberArgs = an object to send to "new tabber()" + */ + var tempObj, /* Temporary tabber object */ + divs, /* Array of all divs on the page */ + i, /* Loop index */ + tabberArgs = {}; + + /* Create a tabber object so we can get the value of classMain */ + tempObj = new TabberObj(tabberArgs); + + /* Find all DIV elements in the document that have class=tabber */ + + /* First get an array of all DIV elements and loop through them */ + divs = document.getElementsByTagName("div"); + for (i=0; i < divs.length; i++) { + + /* Is this DIV the correct class? */ + if (divs[i].className && + divs[i].className.match(tempObj.REclassMain)) { + + /* Now tabify the DIV */ + tabberArgs.div = divs[i]; + divs[i].tabber = new TabberObj(tabberArgs); + } + } +})(); \ No newline at end of file diff --git a/harstorage/public/styles/chosen/chosen-sprite.png b/harstorage/public/styles/chosen/chosen-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..f20db4439ea5c1038126bf326c8fd048b03a8226 GIT binary patch literal 742 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 literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png b/harstorage/public/styles/datatables/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png b/harstorage/public/styles/datatables/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png b/harstorage/public/styles/datatables/images/ui-bg_glass_75_dadada_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/harstorage/public/styles/datatables/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..45e8928e5284adacea3f9ec07b9b50667d2ac65f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c GIT binary patch literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png b/harstorage/public/styles/datatables/images/ui-icons_888888_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..5ba708c39172a69e069136bd1309c4322c61f571 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css b/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..0cb22be --- /dev/null +++ b/harstorage/public/styles/datatables/jquery-ui-1.8.4.custom.css @@ -0,0 +1,572 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* + * jQuery UI Resizable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; }/* + * jQuery UI Autocomplete @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/harstorage/public/styles/datatables/table_jui.css b/harstorage/public/styles/datatables/table_jui.css new file mode 100644 index 0000000..5ee14f6 --- /dev/null +++ b/harstorage/public/styles/datatables/table_jui.css @@ -0,0 +1,448 @@ +/* + * jQuery UI specific styling + */ + +.paging_two_button .ui-button { + float: left; + cursor: pointer; + * cursor: hand; +} + +.paging_full_numbers .ui-button { + padding: 2px 6px; + margin: 0; + cursor: pointer; + * cursor: hand; +} + +.dataTables_paginate .ui-button { + margin-right: -0.1em !important; +} + +.paging_full_numbers { + width: 350px !important; +} + +.dataTables_wrapper .ui-toolbar { + padding: 5px; + font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +.dataTables_paginate { + width: auto; +} + +.dataTables_info { + padding-top: 3px; +} + +table.display thead th { + padding: 3px 0px 3px 10px; + cursor: pointer; + * cursor: hand; +} + +table.display thead th.left { + text-align:left; +} + +table.display thead th.center { + text-align:center; +} + +div.dataTables_wrapper .ui-widget-header { + font-weight: normal; + font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + + +/* + * Sort arrow icon positioning + */ +table.display thead th div.DataTables_sort_wrapper { + position: relative; + padding-right: 20px; + padding-right: 20px; +} + +table.display thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: 0; +} + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +.dataTables_wrapper { + position: relative; + /*min-height: 302px;*/ + _height: 302px; + clear: both; +} + +.dataTables_processing { + position: absolute; + top: 0px; + left: 50%; + width: 250px; + margin-left: -125px; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 11px; + padding: 2px 0; +} + +.dataTables_length { + width: 40%; + float: left; +} + +.dataTables_filter { + width: 50%; + float: right; + text-align: right; +} + +.dataTables_info { + width: 50%; + float: left; +} + +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Pagination nested */ +.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { + height: 19px; + width: 19px; + margin-left: 3px; + float: left; +} + +.paginate_disabled_previous { + background-image: url('../images/back_disabled.jpg'); +} + +.paginate_enabled_previous { + background-image: url('../images/back_enabled.jpg'); +} + +.paginate_disabled_next { + background-image: url('../images/forward_disabled.jpg'); +} + +.paginate_enabled_next { + background-image: url('../images/forward_enabled.jpg'); +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables display + */ +table.display { + margin: 0 auto; + width: 100%; + clear: both; + border-collapse: collapse; + font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +table.display tfoot th { + padding: 3px 0px 3px 10px; + font-weight: bold; + font-weight: normal; +} + +table.display tr.heading2 td { + border-bottom: 1px solid #aaa; +} + +table.display td { + padding: 3px 10px; + color: #498a2d; +} + +table.display td.center { + text-align: center; + color: #498a2d; +} +table.display td.left { + text-align: left; + color: #498a2d; + overflow:hidden; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables sorting + */ + +.sorting_asc { + background: url('../images/sort_asc.png') no-repeat center right; +} + +.sorting_desc { + background: url('../images/sort_desc.png') no-repeat center right; +} + +.sorting { + background: url('../images/sort_both.png') no-repeat center right; +} + +.sorting_asc_disabled { + background: url('../images/sort_asc_disabled.png') no-repeat center right; +} + +.sorting_desc_disabled { + background: url('../images/sort_desc_disabled.png') no-repeat center right; +} + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables row classes + */ +tr.odd { + background-color: #F2FBED; +} + +tr.even { + background-color: white; +} + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Misc + */ +.dataTables_scroll { + clear: both; +} + +.top, .bottom { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +.top .dataTables_info { + float: none; +} + +.clear { + clear: both; +} + +.dataTables_empty { + text-align: center; +} + +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444; +} + +tfoot input.search_init { + color: #999; +} + +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E; +} + +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E; +} + + +.example_alt_pagination div.dataTables_info { + width: 40%; +} + +.paging_full_numbers span.paginate_button, + .paging_full_numbers span.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; +} + +.paging_full_numbers span.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers span.paginate_button:hover { + background-color: #ccc; +} + +.paging_full_numbers span.paginate_active { + background-color: #99B3FF; +} + +table.display tr.even.row_selected td { + background-color: #B0BED9; +} + +table.display tr.odd.row_selected td { + background-color: #9FAFD1; +} + + +/* + * Sorting classes for columns + */ +/* For the standard odd/even */ +tr.odd td.sorting_1 { + background-color: #C0D0B8; +} + +tr.odd td.sorting_2 { + background-color: #DADCFF; +} + +tr.odd td.sorting_3 { + background-color: #E0E2FF; +} + +tr.even td.sorting_1 { + background-color: #F4F9F1; +} + +tr.even td.sorting_2 { + background-color: #F2F3FF; +} + +tr.even td.sorting_3 { + background-color: #F9F9FF; +} + + +/* For the Conditional-CSS grading rows */ +/* + Colour calculations (based off the main row colours) + Level 1: + dd > c4 + ee > d5 + Level 2: + dd > d1 + ee > e2 + */ +tr.odd.gradeA td.sorting_1 { + background-color: #c4ffc4; +} + +tr.odd.gradeA td.sorting_2 { + background-color: #d1ffd1; +} + +tr.odd.gradeA td.sorting_3 { + background-color: #d1ffd1; +} + +tr.even.gradeA td.sorting_1 { + background-color: #d5ffd5; +} + +tr.even.gradeA td.sorting_2 { + background-color: #e2ffe2; +} + +tr.even.gradeA td.sorting_3 { + background-color: #e2ffe2; +} + +tr.odd.gradeC td.sorting_1 { + background-color: #c4c4ff; +} + +tr.odd.gradeC td.sorting_2 { + background-color: #d1d1ff; +} + +tr.odd.gradeC td.sorting_3 { + background-color: #d1d1ff; +} + +tr.even.gradeC td.sorting_1 { + background-color: #d5d5ff; +} + +tr.even.gradeC td.sorting_2 { + background-color: #e2e2ff; +} + +tr.even.gradeC td.sorting_3 { + background-color: #e2e2ff; +} + +tr.odd.gradeX td.sorting_1 { + background-color: #ffc4c4; +} + +tr.odd.gradeX td.sorting_2 { + background-color: #ffd1d1; +} + +tr.odd.gradeX td.sorting_3 { + background-color: #ffd1d1; +} + +tr.even.gradeX td.sorting_1 { + background-color: #ffd5d5; +} + +tr.even.gradeX td.sorting_2 { + background-color: #ffe2e2; +} + +tr.even.gradeX td.sorting_3 { + background-color: #ffe2e2; +} + +tr.odd.gradeU td.sorting_1 { + background-color: #c4c4c4; +} + +tr.odd.gradeU td.sorting_2 { + background-color: #d1d1d1; +} + +tr.odd.gradeU td.sorting_3 { + background-color: #d1d1d1; +} + +tr.even.gradeU td.sorting_1 { + background-color: #d5d5d5; +} + +tr.even.gradeU td.sorting_2 { + background-color: #e2e2e2; +} + +tr.even.gradeU td.sorting_3 { + background-color: #e2e2e2; +} + + +/* + * Row highlighting example + */ +.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} diff --git a/harstorage/public/styles/harviewer/harPreview.css b/harstorage/public/styles/harviewer/harPreview.css new file mode 100644 index 0000000..089516c --- /dev/null +++ b/harstorage/public/styles/harviewer/harPreview.css @@ -0,0 +1 @@ +.tabView {width: 100%; background-color: #FFFFFF; color: #000000;}.tabViewCol {background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; vertical-align:top;}.tabViewBody {margin: 2px 0px 0px 0px;}.tabBar {padding-left: 14px; border-bottom: 1px solid #D7D7D7; white-space: nowrap;}.tab {position: relative; top: 1px; padding: 4px 8px; border: 1px solid transparent; border-bottom: none; color: #565656; font-weight: bold; white-space: nowrap; -moz-user-select: none; display:inline-block;}.tab:hover {cursor: pointer; border-color: #D7D7D7; -moz-border-radius: 4px 4px 0 0; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-radius: 4px 4px 0 0;}.tab[selected="true"],.tab .selected {cursor: default !important; border-color: #D7D7D7; background-color: #FFFFFF; -moz-border-radius: 4px 4px 0 0; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-radius: 4px 4px 0 0;}.tabBodies {width: 100%; overflow: auto;}.tabBody {display: none; margin: 0;}.tabBody[selected="true"],.tabBody.selected {display: block;}@media print {.tabBodies {overflow:visible;}.tabViewCol {background: none;}}.infoTip {z-index: 2147483647; position: fixed; padding: 2px 4px 3px 4px; background: LightYellow; font-family: Lucida Grande, Tahoma, sans-serif; color: #000000; display: none; white-space: nowrap; font-size: 11px; border: 1px solid rgb(126, 171, 205); background: url(images/tabEnabled.png) repeat-x scroll 0px 0px rgb(249, 249, 249); background-position-x: 0; background-position-y: 100%; background-repeat: repeat-x; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: gray 2px 2px 3px; -webkit-box-shadow: gray 2px 2px 3px; box-shadow: gray 2px 2px 3px; filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray'); -ms-filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray')";}.infoTip[active="true"] {display: block;}.infoTip[multiline="true"] {background-image: none;}.popupMenu {display: none; position: absolute; font-size: 11px; z-index: 2147483647; font-family: Lucida Grande, Tahoma, sans-serif;}.popupMenuContent {padding: 2px;}.popupMenuSeparator {display: block; position: relative; padding: 1px 18px 0; text-decoration: none; color: #000; cursor: default; background: #ACA899; margin: 2px 0;}.popupMenuOption{display: block; position: relative; padding: 2px 18px; text-decoration: none; color: #000; cursor: default;}.popupMenuOption:hover{color: #fff; background: #316AC5;}.popupMenuGroup {background: transparent url(images/menu/tabMenuPin.png) no-repeat right 0;}.popupMenuGroup:hover {background: #316AC5 url(images/menu/tabMenuPin.png) no-repeat right -17px;}.popupMenuGroupSelected {color: #fff; background: #316AC5 url(images/menu/tabMenuPin.png) no-repeat right -17px;}.popupMenuChecked {background: transparent url(images/menu/tabMenuCheckbox.png) no-repeat 4px 0;}.popupMenuChecked:hover {background: #316AC5 url(images/menu/tabMenuCheckbox.png) no-repeat 4px -17px;}.popupMenuRadioSelected {background: transparent url(images/menu/tabMenuRadio.png) no-repeat 4px 0;}.popupMenuRadioSelected:hover {background: #316AC5 url(images/menu/tabMenuRadio.png) no-repeat 4px -17px;}.popupMenuShortcut {padding-right: 85px;}.popupMenuShortcutKey {position: absolute; right: 0; top: 2px; width: 77px;}.popupMenuDisabled {color: #ACA899 !important;}.popupMenuShadow {float: left; background: url(images/menu/shadowAlpha.png) no-repeat bottom right !important; margin: 10px 0 0 10px !important; margin: 10px 0 0 5px;}.popupMenuShadowContent {display: block; position: relative; background-color: #fff; border: 1px solid #a9a9a9; top: -6px; left: -6px;}#optionsMenu {top: 22px; left: 0;}.toolbar {font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; font-size: 11px; font-weight: 400; font-style: normal; border-bottom: 1px solid #EEEEEE; padding: 0 3px 0 3px;}.toolbarButton,.toolbarSeparator {display: inline-block; vertical-align: middle; cursor: pointer; color: #000000; -moz-user-select: none; -moz-box-sizing: padding-box;}.toolbarButton.dropDown .arrow {width: 11px; height: 10px; background: url(images/contextMenuTarget.png) no-repeat; display: inline-block; margin-left: 3px; position: relative; right: 0; top: 1px;}.toolbarButton.image {padding: 0; height: 16px; width: 16px;}.toolbarButton.text,.toolbarSeparator {margin: 3px 0 3px 0; padding: 3px; border: 1px solid transparent;}.toolbarButton.text:hover {background: url(images/bg-button.gif) repeat-x scroll 0 0 #FFFFFF; border-top:1px solid #bbb; border-bottom:1px solid #aaa; border-left:1px solid #bbb; border-right:1px solid #aaa; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px;}.toolbarButton.text:active {background-position: 0 -400px;}.pageList {width: 100%;}.pageTable {width: 100%; font-family: Lucida Grande, Tahoma, sans-serif; font-size: 11px;}.pageCol {white-space: nowrap; border-bottom: 1px solid #EEEEEE;}.pageRow {font-weight: bold; height: 17px; background-color: white;}.pageRow:hover {background: #EFEFEF;}.opened > .pageCol > .pageName {background-image: url(images/twisty-sprites.png); background-position: 3px -17px;}.pageName {background-image: url(images/twisty-sprites.png); background-repeat: no-repeat; background-position: 3px 2px; padding-left: 18px; font-weight: bold; cursor:pointer;}.pageID {color: gray;}.pageInfoCol {background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; padding: 0px 0px 4px 17px;}.pageRow:hover > .netOptionsCol > .netOptionsLabel {display: block;}.pageRow > .netOptionsCol {padding-right: 2px;}@media print {.pageInfoCol {background: none;}}.netTable {width: 100%; border-left: 1px solid #EFEFEF; font-family: Lucida Grande, Tahoma, sans-serif; font-size: 11px; table-layout: fixed;}.netRow {background: white;}.netRow.loaded {background: #FFFFFF;}.netHrefCol:hover {}.netRow.loaded:hover {background: #EFEFEF;}.netCol {padding: 0; vertical-align: top; border-bottom: 1px solid #EFEFEF; white-space: nowrap; text-overflow: clip; overflow: hidden;}.netRow[breakLayout="true"] .netCol {border-top: 1px solid rgb(207,207,207);}.netTypeCol,.netStatusCol {color: rgb(128, 128, 128);}.responseError > .netStatusCol {color: red;}.responseRedirect > td {color: #f93;}.netStatusCol,.netTypeCol,.netDomainCol,.netSizeCol,.netTimeCol {padding-left: 8px;}.netTimeCol {overflow: visible;}.netSizeCol {text-align: right;}.netHrefLabel {-moz-box-sizing: padding-box; overflow: hidden; z-index: 100; position: relative; padding-left: 18px; padding-top: 1px; font-weight: bold;}.netFullHrefLabel {position: absolute; display: none; -moz-user-select: none; padding-right: 10px; padding-bottom: 3px; background: #FFFFFF;}.netHrefCol:hover > .netStatusLabel,.netHrefCol:hover > .netDomainLabel,.netHrefCol:hover > .netHrefLabel {display: none;}.netHrefCol:hover > .netFullHrefLabel {display: block;}.netRow.loaded:hover > .netCol > .netFullHrefLabel {background-color: #EFEFEF;}.netStatusLabel,.netTypeLabel,.netDomainLabel,.netSizeLabel,.netTimelineBar {padding: 1px 0 2px 0 !important;}.responseError {color: red;}.netOptionsCol {width: 11px; padding-left: 2px; padding-top: 3px;}.netOptionsLabel {width: 11px; height: 10px; background: url(images/contextMenuTarget.png) no-repeat; display: none;}.netRow:hover > .netOptionsCol > .netOptionsLabel {display: block;}.netOptionsLabel:hover {background-image: url(images/contextMenuTargetHover.png);}.netHrefLabel:hover {cursor: pointer;}.isExpandable .netHrefLabel:hover {cursor: pointer; color: blue; text-decoration: underline;}.netTimelineBar {position: relative; border-right: 50px solid transparent;}.netBlockingBar {position: absolute; left: 0; top: 0; bottom: 0; background: #FFFFFF url(images/timeline-sprites.png) repeat-x; min-width: 0px; z-index: 70; height: 16px;}.netResolvingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -16px #FFFFFF; min-width: 0px; z-index: 60; height: 16px;}.netConnectingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -32px #FFFFFF; min-width: 0px; z-index: 50; height: 16px;}.netSendingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -48px #FFFFFF; min-width: 0px; z-index: 40; height: 16px;}.netWaitingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -64px #FFFFFF; min-width: 1px; z-index: 30; height: 16px;}.netReceivingBar {position: absolute; left: 0; top: 0; bottom: 0; background: url(images/timeline-sprites.png) repeat-x scroll 0 -80px #B6B6B6; min-width: 0px; z-index: 20; height: 16px;}.fromCache .netReceivingBar,.fromCache.netReceivingBar {background: url(images/timeline-sprites.png) repeat-x scroll 0 -96px #D6D6D6; border-color: #D6D6D6; height: 16px;}.netPageTimingBar {position: absolute; left: 0; top: 0; bottom: 0; width: 1px; z-index:90; opacity: 0.5; display: none; background-color: green; margin-bottom: -1px; border-left: 1px solid white; border-right: 1px solid white;}.netWindowLoadBar {background-color: red;}.netContentLoadBar {background-color: blue;}.netTimeStampBar {background-color: olive;}.netTimeLabel {-moz-box-sizing: padding-box; position: absolute; top: 1px; left: 100%; padding-left: 6px; color: #444444; min-width: 16px;}.sizeInfoTip {font-size: 11px;}.timeInfoTip {width: 150px; height: 40px; font-size: 11px;}.timeInfoTipBar,.timeInfoTipEventBar {position: relative; display: block; margin: 0; opacity: 1; height: 15px; width: 4px;}.timeInfoTipStartLabel {color: gray;}.timeInfoTipSeparator {padding-top: 10px; color: gray;}.timeInfoTipSeparator SPAN {white-space:pre-wrap;}.timeInfoTipEventBar {width: 1px !important;}.netWindowLoadBar.timeInfoTipBar,.netContentLoadBar.timeInfoTipBar {width: 1px;}.netSummaryRow .netTimeLabel,.loaded .netTimeLabel {background: transparent;}.loaded .netTimeBar {background: #B6B6B6 url(images/netBarLoaded.gif) repeat-x; border-color: #B6B6B6;}.fromCache .netTimeBar {background: #D6D6D6 url(images/netBarCached.gif) repeat-x; border-color: #D6D6D6;}.netSummaryRow .netTimeBar {background: #BBBBBB; border: none; display: inline-block;}.timeInfoTipCell.startTime {padding-right: 25px;}.timeInfoTipCell.elapsedTime {text-align: right; padding-right: 8px;}.netSummaryLabel {color: #222222;}.netSummaryRow {background: #BBBBBB !important; font-weight: bold;}.netSummaryRow TD {padding: 1px 0 2px 0 !important;}.netSummaryRow > .netCol {border-top: 1px solid #999999; border-bottom: 1px solid; border-bottom-color: #999999; padding-top: 1px;}.netSummaryRow > .netCol:first-child {border-left: 1px solid #999999;}.netSummaryRow > .netCol:last-child {border-right: 1px solid #999999;}.netCountLabel {padding-left: 18px;}.netTotalSizeCol {text-align: right;}.netTotalTimeCol {text-align: right;}.netCacheSizeLabel {display: inline-block; float:left; padding-left: 6px;}.netTotalTimeLabel {padding-right: 6px;}.netInfoCol {border-top: 1px solid #EEEEEE; background: url(images/timeline-sprites.png) repeat-x scroll 0 -112px #FFFFFF; padding-left: 10px; padding-bottom: 4px;}.isExpandable .netHrefLabel {background-image: url(images/twisty-sprites.png); background-repeat: no-repeat; background-position: 3px 3px;}.netRow.opened > .netCol > .netHrefLabel {background-image: url(images/twisty-sprites.png); background-position: 3px -16px;}#content[hiddenCols~=url] TD.netHrefCol,#content[hiddenCols~=status] TD.netStatusCol,#content[hiddenCols~=domain] TD.netDomainCol,#content[hiddenCols~=size] TD.netSizeCol,#content[hiddenCols~=timeline] TD.netTimeCol,#content[hiddenCols~=type] TD.netTypeCol {display: none;}.requestBodyBodies {border-left: 1px solid #D7D7D7; border-right: 1px solid #D7D7D7; border-bottom: 1px solid #D7D7D7;}.netInfoRow .tabView {width: 99%;}.netInfoText {padding: 8px; background-color: #FFFFFF; font-family: Monaco, monospace;}.netInfoText[selected="true"] {display: block;}.netInfoParamName {padding: 0 10px 0 0; font-family: Lucida Grande, Tahoma, sans-serif; font-weight: bold; vertical-align: top; text-align: right; white-space: nowrap;}.netInfoParamValue > PRE {margin: 0}.netInfoHeadersText,.netInfoCookiesText {padding-top: 0; width: 100%;}.netInfoParamValue {width: 100%;}.netInfoHeadersGroup,.netInfoCookiesGroup {margin-bottom: 4px; border-bottom: 1px solid #D7D7D7; padding-top: 8px; padding-bottom: 2px; font-family: Lucida Grande, Tahoma, sans-serif; font-weight: bold; color: #565656;}.netInfoHtmlPreview {border: 0; width: 100%; height: 100px;}.netInfoHtmlText {padding: 0;}.htmlPreviewResizer {width: 100%; height: 5px; background-color: lightgrey; cursor: s-resize;}body[resizingHtmlPreview="true"] * {cursor: s-resize !important;}body[resizingHtmlPreview="true"] .netInfoHtmlPreview {pointer-events: none !important;}.menu {position: absolute; right: 2px; font-size: 10px; font-family: Lucida Grande,Tahoma,sans-serif; text-decoration: none; outline: none; white-space: nowrap;}.menu .menuContent {display: inline-block; overflow: hidden; vertical-align: top; line-height: 13px;}.menu .menuHandle {display: inline-block; width: 9px; height: 16px; background-image: url(images/menu/previewMenuHandle.png);}.menu .menuHandle.opened {background-image: url(images/menu/previewMenuHandle.png); background-position: 9px 0;}.menu .toolbar {border: 0; vertical-align: top; display: inline; padding-left: 0;}.menu .toolbarSeparator {}.menu .toolbarSeparator,.menu .toolbarButton {padding: 0; margin: 0 3px 1px 3px; border: none; color: gray;}.toolbarButton.text:hover {border: none; background: none; color: blue;}.dp-highlighter{font-family: "Consolas", "Courier New", Courier, mono, serif; font-size: 12px; width: 100%; overflow: auto;}.dp-highlighter ol,.dp-highlighter ol li,.dp-highlighter ol li span {margin: 0; padding: 0; border: none;}.dp-highlighter a,.dp-highlighter a:hover{background: none; border: none; padding: 0; margin: 0;}.dp-highlighter .bar{padding-left: 45px;}.dp-highlighter.collapsed .bar,.dp-highlighter.nogutter .bar{padding-left: 0px;}.dp-highlighter ol{list-style: decimal; background-color: #fff; margin: 0px 0px 1px 45px !important; padding: 0px; color: #5C5C5C;}.dp-highlighter.nogutter ol,.dp-highlighter.nogutter ol li{list-style: none !important; margin-left: 0px !important;}.dp-highlighter ol li,.dp-highlighter .columns div{list-style: decimal-leading-zero; list-style-position: outside !important; border-left: 1px solid rgb(204,204,204); background-color: #F8F8F8; color: #5C5C5C; padding: 0 3px 0 10px !important; margin: 0 !important; line-height: 14px;}.dp-highlighter.nogutter ol li,.dp-highlighter.nogutter .columns div{border: 0;}.dp-highlighter .columns{background-color: #F8F8F8; color: gray; overflow: hidden; width: 100%;}.dp-highlighter .columns div{padding-bottom: 5px;}.dp-highlighter ol li.alt{background-color: #FFF; color: inherit;}.dp-highlighter ol li span{color: black; background-color: inherit;}.dp-highlighter.collapsed ol{margin: 0px;}.dp-highlighter.collapsed ol li{display: none;}.dp-highlighter.printing{border: none;}.dp-highlighter.printing .tools{display: none !important;}.dp-highlighter.printing li{display: list-item !important;}.dp-highlighter .tools{padding: 3px 8px 3px 10px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; padding-bottom: 10px; border-left: 3px solid #6CE26C;}.dp-highlighter.nogutter .tools{border-left: 0;}.dp-highlighter.collapsed .tools{border-bottom: 0;}.dp-highlighter .tools a{font-size: 9px; color: #a0a0a0; background-color: inherit; text-decoration: none; margin-right: 10px;}.dp-highlighter .tools a:hover{color: red; background-color: inherit; text-decoration: underline;}.dp-about {background-color: #fff; color: #333; margin: 0px; padding: 0px;}.dp-about table {width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important;}.dp-about td {padding: 10px; vertical-align: top;}.dp-about .copy {border-bottom: 1px solid #ACA899; height: 95%;}.dp-about .title {color: red; background-color: inherit; font-weight: bold;}.dp-about .para {margin: 0 0 4px 0;}.dp-about .footer {background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right;}.dp-about .close {font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px;}.dp-highlighter .comment, .dp-highlighter .comments {color: #008200; background-color: inherit;}.dp-highlighter .string {color: blue; background-color: inherit;}.dp-highlighter .keyword {color: #069; font-weight: bold; background-color: inherit;}.dp-highlighter .preprocessor {color: gray; background-color: inherit;} \ No newline at end of file diff --git a/harstorage/public/styles/harviewer/images/contextMenuTarget.png b/harstorage/public/styles/harviewer/images/contextMenuTarget.png new file mode 100644 index 0000000000000000000000000000000000000000..957bd9f2adabb791aee25df923efebc85e86c0da GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!2~4VPBOj%q*&4&eI0=`L$_*zFOXs@3GxeO z_zz_L?>wMC0Z1Erx;TbNOiliC{=FVdQ&MBb@07%~_*#H0l literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/harviewer/images/contextMenuTargetHover.png b/harstorage/public/styles/harviewer/images/contextMenuTargetHover.png new file mode 100644 index 0000000000000000000000000000000000000000..200a37083d6d9f325c493ffe490dde115521f2bd GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!2~4VPBOj%q*&4&eI0=`L$_*zFOXs@3GxeO z_zz_L?>wMC0Z3bVx;TbNOij+o$VfQAJ>!G7@X{t$r>obmC!aDkGgCU#P++h$Fvl^h q<&0Y)y9?7AWd_t#WIN4R$IgJ!7nL1dUm3)~Pmht#83(M}62D#GH L)z4*}Q$iB}mI6(; literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/harviewer/images/menu/shadowAlpha.png b/harstorage/public/styles/harviewer/images/menu/shadowAlpha.png new file mode 100644 index 0000000000000000000000000000000000000000..a2561df971728d988424100c74c817916eca1979 GIT binary patch literal 3403 zcmeAS@N?(olHy`uVBq!ia0y~yV738bR}L1Sh{z?w93Z7#;u=xnT$Gwvl9`{U5R#dj z$`F!Ks$i<%mYSqsWME*TU}$J%1Vly(x&~$j21QvmX+Ul4C7!;n>{pmr1x4l8+mz-4 zg*Xd5B8wRqxP?HN@zUM8KR`j2bVpxD28NCO+HqZdXMAQjaPeGm)a##I4DP>8^|Q}*osX?x zu(w4E^8SQ>2<4nWJ;;$Ch1?$dLgm)?6;Yr9_CdHMW*W(@x+ip*R06EH_T4pml(Y0_%+Z_b^VZki z+Ig-L)GH{z-FHJSJv;l^O{dMW8|Geryoiy(edpWebG3Q>oX-o7q}^hCpz*y@X6IS? ZpGWQ1{0Pup3+%oyc)I$ztaD0e0swh%>OlYi literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png b/harstorage/public/styles/harviewer/images/menu/tabMenuCheckbox.png new file mode 100644 index 0000000000000000000000000000000000000000..4726e62208e024a017a7c5325e160e202976d7d9 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^oItF^!3HFIe|>%mq!^2X+?^QKos)S9l5Y=V1NPK>@SUgxxb#j0)Hj=K%#H@hrp<0(ziY;Cn$qB$lOko9uweeR$HkHl1f*xW@hE+`)>M8>*Knp@$Fl1{s~J39 L{an^LB{Ts5ttLz; literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/harviewer/images/tabEnabled.png b/harstorage/public/styles/harviewer/images/tabEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..d40cf4525b3df2afa80c92a7c9519be7972805f8 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQqm978H@CH?yU-(Hx<*ucO*@${!j#rgR;jYfl7twyC%pS^6u>G=GW54 zrh3&+00001bW%=J06^y0W&i*HSV=@dRCr#!jyDc~Fc83UmrCuum;e8fLy;l|vf{~; zWyZn683Yz!Aca7gg=9(@jH8t-!H1OW$O|m1nyhI%?1zzTnis9N9bUa3@ZJk|Z$9o% ccYpcrZ_yhCtjO0aX#fBK07*qoM6N<$f`+e{NdN!< literal 0 HcmV?d00001 diff --git a/harstorage/public/styles/main-ie.css b/harstorage/public/styles/main-ie.css new file mode 100644 index 0000000..9e5984e --- /dev/null +++ b/harstorage/public/styles/main-ie.css @@ -0,0 +1,12 @@ +.header #preferences { + height: 178px; +} +.sp-create .howto { + width: 960px; +} +.sp-create .spinner { + left: 470px; +} +.results .spinner { + margin: 12px 0 -12px 0; +} \ No newline at end of file diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css new file mode 100644 index 0000000..6e02144 --- /dev/null +++ b/harstorage/public/styles/main.css @@ -0,0 +1,444 @@ +/* Document Body */ +body { + color: #498a2d; +} +body a { + color: #498a2d; + text-decoration: none; +} +body a:hover { + text-decoration: underline; +} +/* Document Header and Footer*/ +.header .left a:hover { + text-decoration: none; +} +.header .right { + text-align: right; + font-family: "Gill Sans", Verdana; + font-size: 77%; + margin: 6px 0 0 0; +} +.header .left { + float: left; + text-align: left; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + font-size: 174%; +} +.header .hr,.footer .hr { + height: 1px; + width: 100%; + background-color: #498a2d; + margin: 10px 0 10px 0; +} +/* Preferences menu */ +.header #preferences { + position: absolute; + width: 250px; + height: 168px; + top: 60px; + right: 7px; + padding: 8px; + background: #FFFFFF; + opacity: 0.85; + border: 1px solid #498a2d; + -moz-border-radius: 0px 0px 10px 10px; + -webkit-border-radius: 0px 0px 10px 10px; + border-radius: 0px 0px 10px 10px; + z-index: 100; + display: none; +} +.header #close { + position: absolute; + top: 7px; + right: 8px; + z-index: 110; + font-family: "Gill Sans", Verdana; + font-weight: bold; + font-size: 85%; + text-decoration: none; +} +.header #close a { + text-decoration: none; + font-family: "Gill Sans", Verdana; + font-size: 85%; +} +.header .radio { + vertical-align: -3px; + margin: 0 0 10px 0; +} +.header #preferences strong { + font-family: "Gill Sans", Verdana; + font-weight: bold; + font-size: 77%; +} +.header #preferences .theme-name { + font-family: "Gill Sans", Verdana; + font-size: 77%; +} +.header #preferences button { + width: 100px; + padding: 4px 0; + margin: 0px 75px 0px 75px; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +/* Manual uploader */ +.uploader fieldset { + margin: 20px 0 20px 0; + border: 1px solid #498a2d; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; + width: 480px; +} +.uploader legend { + color: #fff; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 93%; + background: #498a2d; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + padding: 2px 20px; +} +.uploader .file { + width: 300px; + height: 24px; + color: #000; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +.uploader .button { + width: 100px; + padding: 4px 0; + margin: 20px 0 20px 20px; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +/* Summary Table on Home Page */ +.summary { + width: 960px; + visibility: hidden; +} +.summary .title { + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + font-size: 108%; + margin: 0 0 12px 0; + text-align: left; +} +.summary table { + table-layout: fixed; +} +.summary button { + width: 220px; + padding: 4px 0; + margin: 20px 0; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +/* Superposed Test */ +.sp-display { + width: 960px; +} +.sp-display #chart{ + width: 960px; + height: 400px; +} +.sp-display #summary-table { + visibility: hidden; +} +.sp-display .title { + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + font-size: 108%; + margin: 12px 0 18px 0; + float: left; + text-align: left; +} +.sp-display #metrics, .sp-display #timings { + visibility: hidden; +} +.sp-display #metrics { + width: 155px; +} +.sp-display #timings { + width: 200px; +} +.sp-display .selector { + text-align: right; + margin: 12px 0 18px 0; +} +.sp-create fieldset { + width: 960px; + border: 1px solid #498a2d; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; +} +.sp-create legend { + color: #fff; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 93%; + background: #498a2d; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + padding: 2px 20px; +} +.sp-create { + position: relative; +} +.sp-create .form { + position: relative; + z-index: 1; +} +.sp-create .spinner { + position: relative; + z-index: 2; + width: 24px; + top: 32px; + left: 480px; + display: none; +} +.sp-create .howto { + width: 980px; + margin: 20px 0 10px 0; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 100%; + text-align: right; +} +.sp-create .howto a { + text-decoration: none; +} +.sp-create .howto a:hover { + text-decoration: underline; +} +.sp-create .slct-label { + float: left; + width: 200px; +} +.sp-create .slct-start { + float: left; + width: 160px; +} +.sp-create .slct-end { + width: 160px; +} +.sp-create .container { + text-align: left; + margin: 20px 0 0 0; +} +.sp-create .title,.sp-create .text { + float: left; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 93%; +} +.sp-create .text { + margin: 4px 10px 0 20px; +} +.sp-create .title { + width: 60px; + font-weight: bold; + margin: 4px 0 0 10px; +} +.sp-create .image { + vertical-align: top; + margin: 0 0 0 20px; +} +.sp-create .submit { + width: 220px; + padding: 4px 0; + margin: 20px 0 20px 0; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +.sp-create .checkbox { + margin: 25px 5px 0 20px; + vertical-align: -2px; +} +.sp-create .checkbox-text { + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 93%; +} +/* Results */ +.results { + width: 960px; +} +.results #timeline{ + width: 960px; + height: 450px; +} +.results .title { + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + font-size: 108%; + margin: 12px 0 0 0; + float: left; + text-align: left; +} +.results select { + width: 200px; + display: none; +} +.results .selector { + text-align: right; + margin: 12px 0 0 0; +} +.results #gauge { + margin: 10px 0 0 0; + float: left; + text-align: left; + width: 200px; + height: 200px; +} +.results .container-max,.results .container-min,.results .container-umin { + height: 210px; + float: left; + margin: 10px 0 0 0; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-size: 93%; +} +.results .container-max { + width: 260px; +} +.results .container-min { + width: 220px; +} +.results .container-umin { + width: 200px; +} +.results .title-max, .results .title-min, .results .title-umax { + text-align: right; + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + margin: 8px 0 8px 0; + float: left; +} +.results .title-max { + width: 180px; +} +.results .title-umax { + width: 160px; +} +.results .title-min { + width: 140px; +} +.results .value { + text-align: left; + margin: 8px 0 8px 10px; + width: 70px; + float: left; +} +.results .value-min { + text-align: left; + margin: 8px 0 8px 10px; + width: 50px; + float: left; +} +.results .image { + margin: 35px 0 0 170px; +} +.results #by-size, .results #by-req { + width:450px; + height:300px; + float:left; +} +.results #by-size { + margin: 10px 0 10px 10px; +} +.results #by-req { + margin: 10px 0 10px 30px; +} +.results #domains-by-size, .results #domains-by-req { + width:930px; + height:300px; + margin: 10px 0; +} +.results #pagespeed { + margin: 10px 0; +} +.results #harviewer { + margin: 10px 0; +} +.results #manager { + text-align: left; + padding: 20px 0 20px 10px; +} +.results button { + width: 200px; + padding: 4px 0; + margin: 0 10px; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; + display: none; +} +.results .newtab { + text-align: center; +} +.results .newtab button { + width: 200px; + padding: 4px 0; + margin: 5px 0px 10px 0px; + color: #000; + font-family: arial; + font-size: 77%; + background: #d7e7cf; + border: 1px solid #498a2d; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +.results .spinner { + position: relative; + width: 26px; + left: 515px; + top: -27px; + margin: 12px 0 0 0; + display: none; +} \ No newline at end of file diff --git a/harstorage/public/styles/tabber.css b/harstorage/public/styles/tabber.css new file mode 100644 index 0000000..f2e57b2 --- /dev/null +++ b/harstorage/public/styles/tabber.css @@ -0,0 +1,86 @@ +/*-------------------------------------------------- + REQUIRED to hide the non-active tab content. + But do not hide them in the print stylesheet! + --------------------------------------------------*/ +.tabberlive .tabbertabhide { + display:none; +} + +/*-------------------------------------------------- + .tabber = before the tabber interface is set up + .tabberlive = after the tabber interface is set up + --------------------------------------------------*/ +.tabber { +} +.tabberlive { + margin-top:1em; + width:960px; + border:10px; +} + +/*-------------------------------------------------- + ul.tabbernav = the tab navigation list + li.tabberactive = the active tab + --------------------------------------------------*/ +ul.tabbernav +{ + margin:0; + padding: 3px 0; + border-bottom: 1px solid #498a2d; + font: bold 12px Verdana, sans-serif; + text-align:left; +} + +ul.tabbernav li +{ + list-style: none; + margin: 0; + display: inline; +} + +ul.tabbernav li a +{ + padding: 3px 0.5em; + margin-left: 3px; + border: 1px solid #498a2d; + border-bottom: none; + background: #D7E7CF; + text-decoration: none; +} + +ul.tabbernav li a:link { color: #498a2d; } +ul.tabbernav li a:visited { color: #498a2d; } + +ul.tabbernav li a:hover +{ + color: #498a2d; + background: #F2FBED; + border-color: #498a2d; +} + +ul.tabbernav li.tabberactive a +{ + background-color: #fff; + border-bottom: 1px solid #fff; +} + +ul.tabbernav li.tabberactive a:hover +{ + color: #000; + background: white; + border-bottom: 1px solid white; +} + +/*-------------------------------------------------- + .tabbertab = the tab content + Add style only after the tabber interface is set up (.tabberlive) + --------------------------------------------------*/ +.tabberlive .tabbertab { + padding:5px; + border:1px solid #498a2d; + border-bottom-left-radius:10px; + border-bottom-right-radius:10px; + border-top:none; + width:930; + overflow:auto; +} diff --git a/harstorage/public/swf/copy_cvs_xls.swf b/harstorage/public/swf/copy_cvs_xls.swf new file mode 100644 index 0000000000000000000000000000000000000000..709ef812d521c0460c98f246a7318d11597309ec GIT binary patch literal 2131 zcmV-Z2(0%*S5pcu4FCXm+I?2ra@)ueod!V+0Fn}Qw`F@x+mf}bB}Gd1`l6L(Nt9&C zmP|#Lwc|uFL0}+a1p+Jp)a7aY3;6>-ZRH=fQd`Mms*-}_%KAM|`;`2_Dm?&o^QMB5 zW=@~(>FMe20eC>fe-YC0Jt0?s%y(TSgnZZYHy~unGt9~L`NiBp!*={hl%9;#gP=KC zEbi~`kL}+ZbG@D7_~XZqi=~O;#6$rt3jU!JXa@zyzcVr&Ihbd@?pe*ia-AHPwVK-s zo{WsNy&C$N(`L)FBbSC=WHxIsC-95oW8>(^&?imTYiPl=)@<6Au5ow8gMwdo_1%4K zj}=T?^XpT^b3?u+umYP+&l+xxi6R@G{b! z$x)12z^2Dbg$>p$Oq9mQ<0v>eRs1B`Z3gQ%P3E&dC#FbQI5|0aqb9Jx68?*%@{mN2 z{_xN16Ik$nsBf6(mTjw9b2ZN(Klc7xB?J}3^t1*WCs{H^gm=Frh(Ov;gNS>sWu&9@ zkFh;ov*ZGwq>aF{oEm+gLWFS}O=#N7m7HlN|)f8fIr#HZ7aI!~i8t=O-6+w|OX8jy~r$s9x8+4Hk&4 zzyeeBG#+i2P>V04ECYo6Ow{J`6Ew>B3arBBiLgO!Djb_Ndu z<~f?(wa^C34$h{gv;Ip-iqfM6dR=L_EuU5Pm?!FZG&vSqLCnu%htUXaHIsgTZPc;B z#|^Y)tFFP6h1av?&9{ron~HzRwTtN=`T=Xm8%%Fu1rA{}h5p_BdAFfij=JJ%2J@C3 z(-l3}4OII~R+}2{77W{$Dz$H!9tf6kt9_%+Z`16?z2Zcv^q^R4S$1GKy_d>98JB(N zGC3d5vDdPTZyL*C-p$KKQO0;D?6KJJ+W&EK{bJ)zMvXh)&MfoPxZQY8GMK{iD$6^b z)~s8)uhiI%MAcvv|qBk zvRrk+)uKGUl)#!#jGNnapF3&g61sb!}x~b3x>-n`j#5>}K8abC!c=LVeCP zbC>!shf2o{a=Po7)=tY~Mh@Sr{jXJ@{3=_ z%FPCypOiIosRO!x)i3@3yUlw0p+C_t_ouF?Nzy;uKb|B5Ab&lm4o(d|8Jr$`Iyf`< zxc`;VDS@DFCUMbyp||R1hg7DM%D3O(+ypDyFHFp;8BxI;qq}rEV(qQmK!^ z0EH_Qu2LAJaE-!s3O6WxM&Txva#XrSrQ1}xL!}`~?^5`JLV=276p9o|RGy%4pNd~m zctGJHg+~+~E0aKBmckr`GKF~x3ltV9JfpBgVVMfgDZHStLSdD{O9~k68cqC$sv8tG zY0qm4zoqbo%5N!DDb%ikVt~TXrAc9jrs`C%sQ4`vcd2Oi@h<{^@T&nIfqzE;5_}K| zxgdQqh!+ zLWG9MXfTqWYEjAT+O59tyGWXa>&k;~C)$PtGLH@YgdU z$CWJEo(j$E@Xxd|CGbOqrjlQePX$j1j1nmUinwtomuRbF#k=x6V)J?YvPq1qJ4*N`nyy4rQRl+a z5cxPnbP=axbKcj*>}|}>@dtC^D6hX?T!f*M9v)Ad$iw0@Vd<}l4>hsxA5Rw|*2N=p zKG2ig2j6!1BwqXrpR)K1RXM7Oi_anW_yJYvP97OI7$RKX#YN=*#HkNM^7lB`#6P0f znpjKr{pI9@Z`~{4{k;>G7^#kysxL~_l~Q%JRDD^h%J}!1+=!k!#Uyq2@ZY + + + + + ${title} + + + + + + + + diff --git a/harstorage/templates/common/footer.html b/harstorage/templates/common/footer.html new file mode 100644 index 0000000..a3fd47b --- /dev/null +++ b/harstorage/templates/common/footer.html @@ -0,0 +1,10 @@ +<%def name="html()"> + + + + diff --git a/harstorage/templates/common/header.html b/harstorage/templates/common/header.html new file mode 100644 index 0000000..6a6eefa --- /dev/null +++ b/harstorage/templates/common/header.html @@ -0,0 +1,28 @@ +<%def name="html()"> +
          + + + +
          + +
          + Chart Theme + +
          + +
          + Light
          + Light Green
          + Dark Green + + +
          + + + +
          + X +
          +
          +
          + diff --git a/harstorage/templates/create/core.html b/harstorage/templates/create/core.html new file mode 100644 index 0000000..1394a51 --- /dev/null +++ b/harstorage/templates/create/core.html @@ -0,0 +1,59 @@ +<%namespace name="jsloader" file="/create/jsloader.html"/> +<%namespace name="dochead" file="/common/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("Superposed Tests")} +${header.html()} +
          +
          + + +
          + +
          +
          +
          + Aggregate and Compare + +
          +
          +
          Set 1 >
          +
          Label:
          + + + +
          Start Time:
          + + + +
          End Time:
          + + + + + +
          +
          + +
          + Column Chart + Spline Chart + Data Table
          + +
          +
          + +
          +
          +
          +${jsloader.html()} +${footer.html()} diff --git a/harstorage/templates/create/jsloader.html b/harstorage/templates/create/jsloader.html new file mode 100644 index 0000000..1fbf9e0 --- /dev/null +++ b/harstorage/templates/create/jsloader.html @@ -0,0 +1,13 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html new file mode 100644 index 0000000..a22d766 --- /dev/null +++ b/harstorage/templates/details/core.html @@ -0,0 +1,89 @@ +<%namespace name="jsloader" file="/details/jsloader.html"/> +<%namespace name="dochead" file="/details/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("Details | " + c.label)} +${header.html()} +
          +
          +
          + +

          Run Info

          + +
          + +
          + +
          + +
          +
          +
          +
          Full Load Time:
          n/a
          +
          onLoad Event:
          n/a
          +
          Start Render Time:
          n/a
          +
          Time to First Byte:
          n/a
          +
          + +
          +
          Total DNS Time:
          n/a
          +
          Total Transfer Time:
          n/a
          +
          Total Server Time:
          n/a
          +
          Avg. Connecting Time:
          n/a
          +
          Avg. Blocking Time:
          n/a
          +
          +
          +
          Total Size:
          n/a
          +
          Text Files:
          n/a
          +
          Media Files:
          n/a
          +
          Cache Size:
          +
          +
          +
          Requests:
          n/a
          +
          Redirects:
          n/a
          +
          Bad Requests:
          n/a
          +
          Domains:
          n/a
          + +
          +
          +
          + +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          +
          + +
          +
          +
          + +
          +
          + +
          +
          + + + + +
          +
          +
          +
          +
          +${jsloader.html()} +${footer.html()} diff --git a/harstorage/templates/details/dochead.html b/harstorage/templates/details/dochead.html new file mode 100644 index 0000000..2539fca --- /dev/null +++ b/harstorage/templates/details/dochead.html @@ -0,0 +1,20 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + + + diff --git a/harstorage/templates/details/jsloader.html b/harstorage/templates/details/jsloader.html new file mode 100644 index 0000000..0129d2a --- /dev/null +++ b/harstorage/templates/details/jsloader.html @@ -0,0 +1,26 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/display/core.html b/harstorage/templates/display/core.html new file mode 100644 index 0000000..67cbf9d --- /dev/null +++ b/harstorage/templates/display/core.html @@ -0,0 +1,33 @@ +<%namespace name="jsloader" file="/display/jsloader.html"/> +<%namespace name="dochead" file="/display/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> +<%namespace name="modules" file="/display/modules.html"/> + +${dochead.html("Superposed Tests | " + c.agg_type)} +${header.html()} +
          +
          + % if c.chart == "true": + ${modules.chart()} + % endif + +

          Aggregated Statistics

          + +
          + +
          + + % if c.table == "true": + ${modules.table()} + % endif +
          +
          +${jsloader.html()} +${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/display/dochead.html b/harstorage/templates/display/dochead.html new file mode 100644 index 0000000..c7314f4 --- /dev/null +++ b/harstorage/templates/display/dochead.html @@ -0,0 +1,20 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + + + diff --git a/harstorage/templates/display/jsloader.html b/harstorage/templates/display/jsloader.html new file mode 100644 index 0000000..055f8ea --- /dev/null +++ b/harstorage/templates/display/jsloader.html @@ -0,0 +1,47 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/display/modules.html b/harstorage/templates/display/modules.html new file mode 100644 index 0000000..a895ce1 --- /dev/null +++ b/harstorage/templates/display/modules.html @@ -0,0 +1,28 @@ +<%def name="chart()"> +
          + + +<%def name="table()"> +
          +
          + + + + % for column in range(len(c.headers)-1): + + % endfor + + + + % for row in range(c.rowcount): + + + % for column in range(len(c.headers)-1): + + % endfor + + % endfor + +
          ${c.headers[0]}${c.headers[column+1]}
          ${c.metrics_table[0][row]}${c.metrics_table[column+1][row]}
          +
          + \ No newline at end of file diff --git a/harstorage/templates/error.html b/harstorage/templates/error.html new file mode 100644 index 0000000..5bafbd1 --- /dev/null +++ b/harstorage/templates/error.html @@ -0,0 +1,10 @@ +<%namespace name="dochead" file="/common/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html(c.message)} +${header.html()} +

          + ${c.message} +

          +${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/harviewer.html b/harstorage/templates/harviewer.html new file mode 100644 index 0000000..542e2ff --- /dev/null +++ b/harstorage/templates/harviewer.html @@ -0,0 +1,13 @@ + + + + + HAR Viewer + + + +
          + + + + diff --git a/harstorage/templates/histogram/core.html b/harstorage/templates/histogram/core.html new file mode 100644 index 0000000..26d639d --- /dev/null +++ b/harstorage/templates/histogram/core.html @@ -0,0 +1,23 @@ +<%namespace name="jsloader" file="/histogram/jsloader.html"/> +<%namespace name="dochead" file="/histogram/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("Histogram | " + c.label)} +${header.html()} +
          +
          +
          +

          Histogram

          + +
          + +
          +
          +
          +${jsloader.html()} +${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/histogram/dochead.html b/harstorage/templates/histogram/dochead.html new file mode 100644 index 0000000..9249ae4 --- /dev/null +++ b/harstorage/templates/histogram/dochead.html @@ -0,0 +1,18 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + diff --git a/harstorage/templates/histogram/jsloader.html b/harstorage/templates/histogram/jsloader.html new file mode 100644 index 0000000..7054aab --- /dev/null +++ b/harstorage/templates/histogram/jsloader.html @@ -0,0 +1,18 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/home/core.html b/harstorage/templates/home/core.html new file mode 100644 index 0000000..bb4a25e --- /dev/null +++ b/harstorage/templates/home/core.html @@ -0,0 +1,51 @@ +<%namespace name="jsloader" file="/home/jsloader.html"/> +<%namespace name="dochead" file="/home/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("HAR Storage")} +${header.html()} +
          +
          +
          +
          + New File + + +
          +
          +
          + +
          +

          Latest Results

          + + + + + + + + + + + + + + % for index in range(c.rowcount): + + + + + + + + + % endfor + +
          TimestampLabelURLTotal Size (kB)Total RequestsFull Load Time (s)
          ${c.metrics_table[0][index]}${c.metrics_table[1][index]}${c.metrics_table[2][index]}${c.metrics_table[3][index]}${c.metrics_table[4][index]}${c.metrics_table[5][index]}
          + + +
          +
          +${jsloader.html()} +${footer.html()} diff --git a/harstorage/templates/home/dochead.html b/harstorage/templates/home/dochead.html new file mode 100644 index 0000000..5cb547e --- /dev/null +++ b/harstorage/templates/home/dochead.html @@ -0,0 +1,18 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + diff --git a/harstorage/templates/home/jsloader.html b/harstorage/templates/home/jsloader.html new file mode 100644 index 0000000..48cae2b --- /dev/null +++ b/harstorage/templates/home/jsloader.html @@ -0,0 +1,23 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/migration.html b/harstorage/templates/migration.html new file mode 100644 index 0000000..6534bd1 --- /dev/null +++ b/harstorage/templates/migration.html @@ -0,0 +1,14 @@ +<%namespace name="dochead" file="/common/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("Data Migration")} +${header.html()} +

          + Data migration started.
          Please do not close browser window! +

          + + +${footer.html()} diff --git a/harstorage/templates/upload.html b/harstorage/templates/upload.html new file mode 100644 index 0000000..87dd76a --- /dev/null +++ b/harstorage/templates/upload.html @@ -0,0 +1,10 @@ +<%namespace name="dochead" file="/common/dochead.html"/> +<%namespace name="header" file="/common/header.html"/> +<%namespace name="footer" file="/common/footer.html"/> + +${dochead.html("Upload Error")} +${header.html()} +

          + ${c.error} +

          +${footer.html()} \ No newline at end of file diff --git a/harstorage/tests/__init__.py b/harstorage/tests/__init__.py new file mode 100644 index 0000000..0470886 --- /dev/null +++ b/harstorage/tests/__init__.py @@ -0,0 +1,35 @@ +"""Pylons application test package + +This package assumes the Pylons environment is already loaded, such as +when this script is imported from the `nosetests --with-pylons=test.ini` +command. + +This module initializes the application via ``websetup`` (`paster +setup-app`) and provides the base testing objects. +""" +from unittest import TestCase + +from paste.deploy import loadapp +from paste.script.appinstall import SetupCommand +from pylons import url +from routes.util import URLGenerator +from webtest import TestApp + +import pylons.test + +__all__ = ["environ", "url", "TestController"] + +# Invoke websetup with the current config file +SetupCommand("setup-app").run([pylons.test.pylonsapp.config["__file__"]]) + +environ = {} + + +class TestController(TestCase): + + def __init__(self, *args, **kwargs): + wsgiapp = pylons.test.pylonsapp + config = wsgiapp.config + self.app = TestApp(wsgiapp) + url._push_object(URLGenerator(config["routes.map"], environ)) + TestCase.__init__(self, *args, **kwargs) diff --git a/harstorage/tests/functional/__init__.py b/harstorage/tests/functional/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/tests/functional/test_chart.py b/harstorage/tests/functional/test_chart.py new file mode 100644 index 0000000..031d8b6 --- /dev/null +++ b/harstorage/tests/functional/test_chart.py @@ -0,0 +1,37 @@ +from harstorage.tests import * + + +class TestChartController(TestController): + + """ + Test suite for chart export + + """ + + def test_01_export_svg(self): + """Export SVG""" + + # Expected valid image + with open("harstorage/tests/functional/testdata/validfile.svg") as file: + response = self.app.post( + url(controller="chart", action="export"), + params={"svg": file.read(), "type": "image/svg+xml", + "filename": "timeline", "width": 960}, + status=200) + + # Response header + assert response.content_type == "image/svg+xml" + + def test_02_export_png(self): + """Export PNG""" + + # Expected valid image + with open("harstorage/tests/functional/testdata/validfile.svg") as file: + response = self.app.post( + url(controller="chart", action="export"), + params={"svg": file.read(), "type": "image/png", + "filename": "timeline", "width": 960}, + status=200) + + # Response header + assert response.content_type == "image/png" diff --git a/harstorage/tests/functional/test_combine.py b/harstorage/tests/functional/test_combine.py new file mode 100644 index 0000000..53aae45 --- /dev/null +++ b/harstorage/tests/functional/test_combine.py @@ -0,0 +1,41 @@ +from harstorage.tests import * + + +class TestCombineController(TestController): + + """ + Test suite for consolidation of static resources + + """ + + def test_01_combine_styles(self): + """Combine common styles""" + + # Expected valid response + response = self.app.get( + url(controller="combine", action="styles"), + params={"ver": "1.0", "main.css": "", "tabber.css": "", + "datatables/table_jui.css": "", + "datatables/ColReorder.css": "", + "datatables/TableTools_JUI.css": ""}, + status=200) + + # Response body + assert response.content_type == "text/css" + + def test_02_combine_missing_styles(self): + """Combine missing styles""" + + # Expected 404 status code + response = self.app.get( + url(controller="combine", action="styles"), + params={"ver": "1.0", "imnotexistingfile.css": ""}, + status=404) + + # Response body + assert "404 Not Found" in response.body + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert response.tmpl_context.message == "404 Not Found" diff --git a/harstorage/tests/functional/test_migration.py b/harstorage/tests/functional/test_migration.py new file mode 100644 index 0000000..cf4305b --- /dev/null +++ b/harstorage/tests/functional/test_migration.py @@ -0,0 +1,7 @@ +from harstorage.tests import * + + +class TestMigrationController(TestController): + + def test_index(self): + pass diff --git a/harstorage/tests/functional/test_results.py b/harstorage/tests/functional/test_results.py new file mode 100644 index 0000000..3878d4d --- /dev/null +++ b/harstorage/tests/functional/test_results.py @@ -0,0 +1,279 @@ +import pymongo +import json +import time + +from harstorage.tests import * + + +class TestResultsController(TestController): + + """ + Test suite for test results + + """ + + def test_01_upload_empty(self): + """Upload empty file""" + + # Expected valid response + response = self.app.post( + url(controller="results", action="upload"), + params={"file": ""}, + status=200) + + # Response body + assert "Empty file" in response.body + + # Template context + assert response.tmpl_context.error == "Empty file" + + def test_02_upload_empty_auto(self): + """Upload empty file in automated mode""" + + # Expected valid response + response = self.app.post( + url(controller="results", action="upload"), + params={"file": ""}, + headers={"Automated": "true"}, + status=200) + + # Response body + assert response.body == "Empty file" + + def test_03_upload_valid_file(self): + """Upload valid file""" + + # Database collection + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + # Check data in database before + before = collection.find({"label": "validfile"}).count() + + # Expected redirect + with open("harstorage/tests/functional/testdata/validfile.har") as file: + response = self.app.post( + url(controller="results", action="upload"), + params={"file": file.read()}, + status=302) + + # Response header + assert "results/details?label=validfile" in response.location + + time.sleep(1) + + # Check data in database before + after = collection.find({"label": "validfile"}).count() + + assert after - before == 1 + + def test_04_upload_valid_file_auto(self): + """Upload valid file in automated mode""" + + # Database collection + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + # Check data in database before + before = collection.find({"label": "validfile"}).count() + + # Expected redirect + with open("harstorage/tests/functional/testdata/validfile.har") as file: + response = self.app.post( + url(controller="results", action="upload"), + params={"file": file.read()}, + headers={"Automated": "true"}, + status=200) + + # Response header + assert response.body == "Successful" + + time.sleep(1) + + # Check data in database before + after = collection.find({"label": "validfile"}).count() + + assert after - before == 1 + + def test_05_index_get(self): + """Valid GET request""" + + # Successful response + response = self.app.get( + url(controller="results", action="index"), + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert response.tmpl_context.rowcount > 0 + + def test_06_index_post(self): + """Prohibited POST request""" + + # Expected 405 status code + response = self.app.post( + url(controller="results", action="index"), + status=405) + + # Response body + assert "405 Method Not Allowed" in response.body + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert response.tmpl_context.message == "405 Method Not Allowed" + + def test_07_index_404(self): + """Error document""" + + # Expected 404 status code + response = self.app.get( + url("/404"), + status=404) + + # Response body + assert "404 Not Found" in response.body + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert response.tmpl_context.message == "404 Not Found" + + def test_08_details_label(self): + """Test results - label""" + + # Successful response + response = self.app.get( + url(controller="results", action="details"), + params={"label": "validfile"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + assert response.tmpl_context.label == "validfile" + + def test_09_details_url(self): + """Test results - url""" + + # Successful response + response = self.app.get( + url(controller="results", action="details"), + params={"url": "http://valid.host/"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + assert response.tmpl_context.label == "http://valid.host/" + + def test_10_timeline_label(self): + """Timeline data - label""" + + # Successful response + response = self.app.get( + url(controller="results", action="timeline"), + params={"label": "validfile", "mode": "label"}, + status=200) + + # Data validation + assert len(response.body.split("#")) == 35 + assert len(response.body.split(";")) == 19 + + def test_11_timeline_url(self): + """Timeline data - url""" + + # Successful response + response = self.app.get( + url(controller="results", action="timeline"), + params={"label": "http://valid.host/", + "mode": "url"}, + status=200) + + # Data validation + assert len(response.body.split("#")) == 35 + assert len(response.body.split(";")) == 19 + + def test_12_runinfo(self): + """Runinfo""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="results", action="runinfo"), + params={"timestamp": timestamp}, + status=200) + + # Data validation + assert json.loads(response.body) + + def test_13_donwload(self): + """Download HAR""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + id = collection.find_one({"label": "validfile"})["_id"] + + # Successful response + response = self.app.get( + url(controller="results", action="download"), + params={"id": id}, + status=200) + + # Data validation + har = response.body.replace("onInputData(", "")[:-2] + + assert json.loads(har) + + def test_14_harviewer(self): + """HAR Viewer iframe""" + + # Successful response + response = self.app.get( + url(controller="results", action="harviewer"), + status=200) + + # Cookie + cookie = response.response.headers.get("Set-Cookie") + + assert "phaseInterval=-1;" in cookie + assert "Max-Age=31536000;" in cookie + assert "Path=/" in cookie + + def test_15_delete_label(self): + """Delete - label""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="results", action="deleterun"), + params={"label": "validfile", "timestamp": timestamp, + "mode": "label", "all": "false"}, + status=200) + + # Response validation + assert response.body == "details?label=validfile" + + def test_16_delete_url(self): + """Delete - url""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"url": "http://valid.host/"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="results", action="deleterun"), + params={"label": "http://valid.host/", "timestamp": timestamp, + "mode": "url", "all": "false"}, + status=200) + + # Response validation + assert response.body == "/" diff --git a/harstorage/tests/functional/test_superposed.py b/harstorage/tests/functional/test_superposed.py new file mode 100644 index 0000000..7e0f827 --- /dev/null +++ b/harstorage/tests/functional/test_superposed.py @@ -0,0 +1,175 @@ +import pymongo +import time + +from harstorage.tests import * + + +class TestTestflowController(TestController): + + """ + Test suite for aggregation of test results + + """ + + def test_01_init(self): + """Init data for Superposed""" + + # Add valid file + with open("harstorage/tests/functional/testdata/validfile.har") as file: + self.app.post( + url(controller="results", action="upload"), + params={"file": file.read()}, + status=302) + + time.sleep(1) + + def test_02_create(self): + """Valid GET request for create form""" + + # Successful response + response = self.app.get( + url(controller="superposed", action="create"), + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert isinstance(response.tmpl_context.labels, list) + + def test_03_dates(self): + """Dates for label""" + + # Successful response + response = self.app.get( + url(controller="superposed", action="dates"), + params={"label": "validfile"}, + status=200) + + # Template context + assert response.body.find(";") == -1 + + def test_04_display_average(self): + """Display superposed - Average""" + + # Fetch data from database + collection = \ + pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="superposed", action="display"), + params={"step_1_label": "validfile", + "step_1_start_ts": timestamp, + "step_1_end_ts": timestamp, + "metric": "Average"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert len(response.tmpl_context.metrics_table) == 19 + + def test_05_display_median(self): + """Display superposed - Median""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="superposed", action="display"), + params={"step_1_label": "validfile", + "step_1_start_ts": timestamp, + "step_1_end_ts": timestamp, + "metric": "Median"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert len(response.tmpl_context.metrics_table) == 19 + + def test_06_display_minimum(self): + """Display superposed - Minimum""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="superposed", action="display"), + params={"step_1_label": "validfile", + "step_1_start_ts": timestamp, + "step_1_end_ts": timestamp, + "metric": "Minimum"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert len(response.tmpl_context.metrics_table) == 19 + + def test_07_display_maximum(self): + """Display superposed - Maximum""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="superposed", action="display"), + params={"step_1_label": "validfile", + "step_1_start_ts": timestamp, + "step_1_end_ts": timestamp, + "metric": "Maximum"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert len(response.tmpl_context.metrics_table) == 19 + + def test_08_display_percentile(self): + """Display superposed - 90th Percentile""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + response = self.app.get( + url(controller="superposed", action="display"), + params={"step_1_label": "validfile", + "step_1_start_ts": timestamp, + "step_1_end_ts": timestamp, + "metric": "90th Percentile"}, + status=200) + + # Template context + assert response.tmpl_context.rev == response.config["app_conf"]["static_version"] + + assert len(response.tmpl_context.metrics_table) == 19 + + def test_09_close(self): + """Clear test data from Superposed""" + + # Fetch data from database + collection = pymongo.Connection("localhost:27017")["harstorage"]["results"] + + timestamp = collection.find_one({"label": "validfile"})["timestamp"] + + # Successful response + self.app.get( + url(controller="results", action="deleterun"), + params={"label": "validfile", "timestamp": timestamp, + "mode": "label", "all": "true"}, + status=200) diff --git a/harstorage/tests/functional/testdata/validfile.har b/harstorage/tests/functional/testdata/validfile.har new file mode 100644 index 0000000..cec0b96 --- /dev/null +++ b/harstorage/tests/functional/testdata/validfile.har @@ -0,0 +1,1866 @@ +{ + "log": { + "version": "1.1", + "creator": { + "name": "Firebug", + "version": "1.8" + }, + "browser": { + "name": "Firefox", + "version": "6.0.2" + }, + "pages": [ + { + "startedDateTime": "2011-09-21T10:57:59.243+03:00", + "id": "validfile", + "title": "Оптимизация производительности и времени загрузки сайтов | Web Performance", + "pageTimings": { + "onContentLoad": 915, + "onLoad": 1636 + } + } + ], + "entries": [ + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:57:59.243+03:00", + "time": 516, + "request": { + "method": "GET", + "url": "http://valid.host/", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "__cfduid", + "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" + }, + { + "name": "__utma", + "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" + }, + { + "name": "__utmz", + "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" + }, + { + "name": "__utmv", + "value": "81600529.blog_team" + }, + { + "name": "wp-settings-1", + "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" + }, + { + "name": "wp-settings-time-1", + "value": "1312181035" + } + ], + "headers": [ + { + "name": "Host", + "value": "webperformance.ru" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Cookie", + "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" + } + ], + "queryString": [], + "headersSize": 690, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Server", + "value": "cloudflare-nginx" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 07:57:58 GMT" + }, + { + "name": "Content-Type", + "value": "text/html; charset=UTF-8" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Vary", + "value": "Accept-Encoding,Cookie" + }, + { + "name": "Cache-Control", + "value": "max-age=0, no-cache, no-store" + }, + { + "name": "Content-Encoding", + "value": "gzip" + } + ], + "content": { + "mimeType": "text/html", + "size": 34586, + "text": "\n\n\n\nОптимизация производительности и времени загрузки сайтов | Web Performance\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\"Web\n
          \n\n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Уменьшение размера текстовых файлов (HTML, JavaScript и CSS) не является сложной задачей. Минимизация и обфускация кода, сжатие передаваемых файлов на уровне веб-сервера — все это уже давно известные подходы к оптимизации скорости загрузки сайтов. Однако при этом довольно часто игнорируется тот факт, что основной размер страницы вероятнее всего приходится на файлы изображений.

          \n
          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Адаптивный дизайн является одним из ключевых решений для оптимизации мобильных сайтов. Известным подходом является использование медиа-запросов CSS3, о чем мы подробно рассказывали ранее. Альтернативной и иногда даже более простой является реализация с использованием HTTP куки.

          \n
          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Интерфейс Navigation Timing является универсальным решением для измерения времени загрузки страниц. При этом охватывается полный цикл взаимодействия с сайтом – от момента самого первого запроса пользователя до полной загрузки.

          \n

          Особый интерес данный стандарт представляет для мобильных сайтов и приложений, для которых процесс измерения показателей производительности является сложно реализуемым. Navigation Timing API полноценно поддерживается WebKit и потому со временем может быть реализован для большинства мобильных платформ – iOS и Android.

          \n

          Кроме того, в отличие от популярных методов измерения, связанных с использованием JavaScript, ´Ð¾ÑÑ‚упными будут и низкоуровневые метрики – время обращения к DNS серверам или потраченное на переадресацию время.

          \n

          К сожалению, пока данный интерфейс доступен только для последних версий браузеров Internet Explorer и Chrome.

          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Широкое применение конвейерной обработки HTTP запросов (HTTP pipelining) долговое время сдерживалось из-за слабой поддержки даже в современных бразерах. Однако в сегменте мобильных устройств положение меняется коренным образом. Самые популярные браузеры Opera и Android (порядка 40% от всего сегмента) полноценно поддерживают данный стандарт.

          \n
          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n
          \n

          Популярный аддон и букмарклет YSlow теперь доступен и для Opera. Скачать новую версию можно на официальной странице расширений браузера.

          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Как правило, полноценное взаимодействие с сайтом или веб-приложением без наличия интернет (или интранет) соединения невозможно. Данное ограничение является одним из ключевых недостатков онлайн приложений по сравнению с традиционными «настольными» программами.

          \n

          В этой статье мы расскажем о том, как просто и надежно создаются оффлайн версии веб-приложений. Но что еще важнее, в данной статье представлен новый инструмент для решения подобных задач – ManifestR.

          \n

          И даже если вы в основном занимаетесь созданием сайтов, а не веб-приложений, то представленные здесь техники и подходы смогут помочь вам улучшить кэширование динамических и статических данных для ваших проектов.

          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Вместе с ростом мобильного интернета растёт и необходимость оптимизации скорости работы мобильных сайтов. Даже самые современные смартфоны на Android, iOS, WebOS, BlackBerry OS и др. обладают процессорами с частотой не более 1Ghz, а скорости 3G можно считать достаточно медленными (скорость загрузки в 3 раза меньше DSL).

          \n

          Мобильные устройства унаследовали проблемы “больших” машин: от количества http-запросов до эффективности работы JavaScript.

          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Проблемы с загрузкой файлов JavaScript широко известны. К ним относятся нежелательные блокировки в старых версиях браузеров, сложность управления процессом выполнения кода, необходимость отслеживать зависимости между файлами.

          \n

          Решать подобные трудности помогают многочисленные загрузчики JavaScript, которые делают получение скриптов параллельным, асинхронным и, самое главное, управляемым. Одним из наиболее популярных и высокопроизводительных решений является модуль LabJS, последний релиз которого стал еще более простым для применения.

          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          Существует огромное количество программного обеспечения и online сервисов для тестирования и анализа клиентской производительности сайтов. Page Speed, YSlow, Firebug, WebPagetest.org, HttpWatch, dynaTrace, Web Inspector – далеко не полный список. Однако чаще всего данные решения связаны с настольными веб-браузерами. В случае диагностики сайтов для мобильный устройств придется обратиться к дополнительному набору инструментов.

          \n
          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n

          После очередного превью платформы Internet Expolorer 10 стало очевидным, что Microsoft продолжает работу по оптимизации своего браузера. Как и ранее в центре внимания оказались HTML5 технологии, а также поддержка новых спецификаций и API рабочих групп W3C.

          \n
          \n
          \nЧитать далее \t
          \n
          \n
          \n
          \n
          \n
          \n\n
          \n
          \n
          \n\n
          \t
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n\n
          \n
          \n

          Последние записи

          \n\n
          \n
          \n
          \n
          \n

          Еще

          \n
          \n\"Follow\n\"View\n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n\n\n" + }, + "redirectURL": "", + "headersSize": 274, + "bodySize": 9318 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 79, + "send": 0, + "wait": 296, + "receive": 141 + }, + "serverIPAddress": "173.245.61.106", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:57:59.665+03:00", + "time": 297, + "request": { + "method": "GET", + "url": "http://valid.host/wp-content/themes/platform/style.css", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "__cfduid", + "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" + }, + { + "name": "__utma", + "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" + }, + { + "name": "__utmz", + "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" + }, + { + "name": "__utmv", + "value": "81600529.blog_team" + }, + { + "name": "wp-settings-1", + "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" + }, + { + "name": "wp-settings-time-1", + "value": "1312181035" + } + ], + "headers": [ + { + "name": "Host", + "value": "webperformance.ru" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "text/css,*/*;q=0.1" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/" + }, + { + "name": "Cookie", + "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" + } + ], + "queryString": [], + "headersSize": 717, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Server", + "value": "cloudflare-nginx" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 07:57:59 GMT" + }, + { + "name": "Content-Type", + "value": "text/css" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Last-Modified", + "value": "Thu, 26 May 2011 16:04:10 GMT" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "Cache-Control", + "value": "public, max-age=31536000" + }, + { + "name": "CF-Cache-Status", + "value": "HIT" + }, + { + "name": "Expires", + "value": "Thu, 20 Sep 2012 07:57:59 GMT" + }, + { + "name": "Content-Encoding", + "value": "gzip" + } + ], + "content": { + "mimeType": "text/css", + "size": 30644, + "text": "html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}\np,.p{margin-bottom:1em;}\na:focus{outline:1px dotted invert;}\ninput::-moz-focus-inner{border:0;}\nhr{border:0 transparent solid;border-bottom-width:1px;clear:both;height:0}\nol{list-style:decimal}\nol ol{list-style:lower-roman}\nol ol ol{list-style:lower-alpha}\nul{list-style:disc;}\ndt{font-weight:bold;}\ndd{font-style:italic;}\nsup{font-size:.7em;vertical-align:top;vertical-align:super;}\nsub{font-size:.7em;vertical-align:bottom;}\nbig{font-size:1.3em;}\nabbr, acronym{border-bottom:.1em dotted;cursor:help;}\nq:before, q:after{content:\"'\";}\ninput{font-size:110%;font-size-adjust:none;font-stretch:normal;font-style:normal;font-variant:normal;font-weight:normal;line-height:normal;padding:5px 3px 3px 5px;}\ninput[type=\"submit\"], .submit, input[type=\"button\"], .button, input[type=\"reset\"], .reset{padding:3px 6px;}\ntextarea{font-size:110%;border-color:transparent;border-style:solid;border-width:1px;padding:5px 3px 3px 7px;}\n#calendar_wrap{text-align:center;padding:8px 15px;margin:0;}\n#wp-calendar{text-align:center;margin-top:5px;width:100%;}\n#wp-calendar caption{font-weight:bold;font-size:1.2em;}\n#wp-calendar td{padding:4px 8px;}\n#wp-calendar #today{font-weight:bold;}\n.widget_tag_cloud .winner div{padding:15px;}\n.widget_archive .winner select{margin:10px;}\n.screen-reader-text{display:none;}\n#wpstats{width:0px;height:0px;overflow:hidden;}\n#commentform{margin-top:10px;}\n#commentform small{font-size:90%;}\n#commentform input{padding:5px;display:block;}\n#commentform textarea{width:95%;height:140px;}\n#respond{margin:20px 0;}\nol ul #commentform textarea{width:90%;}\n#commentform .form-submit{margin-bottom:2em;}\n#commentform #submit{display:inline;}\n.form-allowed-tags{font-size:.85em;}\n.form-allowed-tags code{display:block;font-size:10px;}\n.nocommentform{display:none}\n.commentlist{list-style-type:none;margin:10px 0px 10px 18px;line-height:130%;padding-left:55px;}\n.commentlist li{padding:10px;}\n.commentlist ul.children{list-style-type:none;margin:1em 0;}\n.commentlist cite{font-weight:bold;font-style:normal;}\n.commentlist img.avatar{float:left;margin:0 5px 5px -65px;position:relative;}\n.commentlist .children img.avatar{float:left;margin:0 10px 5px 0;position:relative;}\n.commentlist .comment-meta{margin-bottom:5px;display:block;font-size:87%;}\n.nocomments{display:none;}\n.hidden{display:none;visibility:hidden;}\n.aligncenter,.alignnone{display:block;margin-left:auto;margin-right:auto;}\n.center, .textcenter{text-align:center;}\n.alignleft{float:left;margin:0 1.4em .4em 0;}\n.left{float:left;}\n.textleft{text-align:left;}\n.alignright{float:right;margin:0 0 .4em 1.4em;}\n.right{float:right;}\n.textright{text-align:right;}\n.clear{clear:both;}\n.block{display:block;}\nimg.center, img[align=\"center\"]{display:block;margin-left:auto;margin-right:auto;}\nimg.left, img[align=\"left\"]{float:left;margin:2px 10px 5px 0px;}\nimg.right, img[align=\"right\"]{float:right;margin:2px 0px 5px 10px;}\n.fix:after{content:\".\";display:block;height:0;clear:both;visibility:hidden;}\n.fix{display:inline-block;}\n* html .fix{height:1%;}\n.fix{display:block;}\nbody{font-size:87.5%;line-height:1.6em;height:100%;padding-top:5px;}\n#page, #dynamic-content{min-height:500px;zoom:1;}\n#page-canvas{margin:0 auto;}\nbody, .font1, .font-primary, .commentlist, input{font-family:Georgia, 'Times New Roman', Times, serif;}\nh1, h2, h3, h4, h5, h6, .site-title{font-family:Georgia, 'Times New Roman', Times, serif;}\n.font2, .font-sub, ul.main-nav li a, #secondnav li a, .metabar, .subtext, .subhead, .widget-title, .post-comments, .reply a, .editpage, #pagination .wp-pagenavi, .post-edit-link, #wp-calendar caption, #wp-calendar thead th, .soapbox-links a, .fancybox, .standard-form .admin-links, #featurenav a, .pagelines-blink, .ftitle small, .button, input[type=\"submit\"], input[type=\"button\"], input[type=\"reset\"], .submit{font-family:\"Lucida Grande\", \"Lucida Sans\", \"Lucida Sans Unicode\", sans-serif;text-transform:uppercase;letter-spacing:.1em;}\ninput[type=\"text\"], input[type=\"password\"], textarea, #dsq-content textarea{font-family:\"Courier New\", Courier, Verdana, sans-serif;}\nbody{color:#fff;}\n#footer, #footer li.link-list a, #footer .latest_posts li .list-excerpt{color:#999;}\n#footer a, #footer .widget-title, #footer li h5 a{color:#fff;}\n#page, .tcolor1, #subnav ul li a:active, .commentlist cite a, #breadcrumb a, .metabar a:hover, .post-nav a:hover, .post-footer a, #buddypress-page #object-nav ul li a, #buddypress-page table.forum .td-title a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #twitterbar a, #carousel .carousel_text, #site #dsq-content .dsq-request-user-info td a, #pagination .wp-pagenavi a:hover, #pagination .wp-pagenavi .current, #primary-nav .main-nav li a:hover, #featurenav a.activeSlide, .content-pagination a:hover .cp-num{color:#000;}\na, .lcolor1 a, #subnav_row li.current_page_item a, #subnav_row li a:hover, #grandchildnav .current_page_item > a, .branding h1 a:hover, .bbcrumb a:hover, #feature_slider .fcontent.fstyle-lightbg a, #feature_slider .fcontent.fstyle-nobg a, #respond h3 small a{color:#225E9B;}\n.hcolor, h1, h2, h3, h4, h5, h6, h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, #branding h1 a, a.site-title, .entry-title a, .entry-title a:hover, .widget-title a:hover, h3.widget-title a:hover, .content-pagination .cp-num{color:#000;}\n.tcolor2, .lcolor2 a, .subhead, .widget-title, .post-edit-link, .metabar .sword, #branding .site-description, #callout, #commentform .required, #postauthor .subtext, #buddypress-page .standard-form .admin-links, #wp-calendar caption, #carousel .thecarousel, #pagination .wp-pagenavi span.pages, .commentlist .comment-meta a, #highlight .highlight-subhead, .content-pagination span, .content-pagination a .cp-num, .searchform .searchfield{color:#AFAFAF;}\n.tcolor3, .lcolor3 a, .main_nav li a, .widget-title a, h3.widget-title a, #subnav_row li a, .metabar em, .metabar a, .tags, #commentform label, .form-allowed-tags code, .rss-date, #breadcrumb, .reply a, .post-nav a, .post-nav a:visited, .post-footer, .auxilary a, #buddypress-page .standard-form .admin-links a, #twitterbar .content .tbubble, .widget ul.twitter .twitter-item, .cform .emailreqtxt,.cform .reqtxt, #pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .main_nav ul.sf-menu a, .sf-menu a:visited, #featurenav a, #feature-footer span.playpause{color:#777;}\nbody{background-color:#000;}\nbody.fixed_width{background-color:#444;}\n#page, .canvas #page-canvas, .sf-menu li, .main_nav ul.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active, .commentlist ul.children .even, .alt #commentform textarea{background:#FFF;}\n#feature-footer, .main-nav li.current-page-ancestor a, .main-nav li.current_page_item a, .main-nav li.current-page-ancestor ul a, .main-nav li.current_page_item ul a, #wp-calendar caption, #buddypress-page #subnav, #buddypress-page .activity .activity-inner, #buddypress-page table.forum th, #grandchildnav.widget, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, .commentlist .alt, #wp-calendar #today, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, .post-nav, .current_posts_info, .post-footer, #twitterbar, #carousel .content-pad, .success, .sf-menu li li, .sf-menu li li, .sf-menu li li li, .content-pagination a .cp-num, .hentry table .alternate td{background-color:#F7F7F7;}\n.main_nav .main-nav li a:hover, #wp-calendar thead th, #buddypress-page #object-nav, .item-avatar a, .comment blockquote, #grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover, #carousel .carousel_text, pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .sf-menu li:hover, .sf-menu li.sfHover, #featurenav a, #feature-footer span.playpause, .content-pagination .cp-num, .content-pagination a:hover .cp-num, ins{background-color:#F1F1F1;}\n#buddypress-page #object-nav ul li a:hover,#buddypress-page #object-nav ul li.selected a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #featurenav a.activeSlide{background-color:#e1e1e1;}\nhr, .fpost, .clip_box, .widget-title, #buddypress-page .item-list li, .metabar a, #morefoot .widget-title, #site #dsq-content h3{border-bottom:1px solid #E9E9E9;}\n#nav_row.main_nav, ul.sf-menu ul li{border-bottom:1px solid #E9E9E9;}\n.post.fpost .entry, #soapbox .fboxinfo, #feature-footer.nonav{border-top:1px solid #E9E9E9;}\n#feature-footer{border:1px solid #E9E9E9;}\n.fpost.sticky{border-top:3px solid #E9E9E9;border-bottom:3px solid #E9E9E9;}\n.post-nav, .current_posts_info, .post-footer{border-right:3px solid #E9E9E9;border-left:3px solid #E9E9E9;}\n#grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover{border-left:3px solid #E9E9E9;}\n#feature-footer .feature-footer-pad{border-top:1px solid #fff;border-left:1px solid #fff;}\n#featurenav a, #feature-footer span.playpause{border:1px solid #ddd;border-left:1px solid #ccc;border-top:1px solid #ccc;}\n#featurenav a.activeSlide{border:1px solid #CCC;border-left:1px solid #999;border-top:1px solid #999;}\ntextarea:focus, #commentform textarea:focus, #commentform input[type=\"text\"]:focus{border:solid 1px #bbb;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget{border:1px solid #E9E9E9;border-left:1px solid #DDDDDD;border-top:1px solid #DDDDDD;}\n.fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border:1px solid #E9E9E9;border-left:1px solid #DDDDDD;border-top:1px solid #DDDDDD;}\n#carousel .content ul li a img{background:#fff;border:1px solid #ccc;border-right:1px solid #ddd;border-bottom:1px solid #ddd;}\n#carousel .content ul li a:hover img{background:#ddd;border:1px solid #bbb;border-right:1px solid #ccc;border-bottom:1px solid #ccc;}\n.widget_flickrRSS a img, .wp125_write_ads_widget.widget #wp125adwrap_2c .wp125ad a{border:1px solid #eee;border-bottom:2px solid #ddd;background:#fff;}\n#feature-footer, #grandchildnav li a, #grandchildnav .current_page_item ul li a, #buddypress-page #object-nav ul li a{text-shadow:#fff 0 1px 0;}\n.fixed_width #footer{text-shadow:#000 0 -1px 0;}\na.pagelines-blink, a.soapbox_link, #feature_slider .fcontent a.post-edit-link, .button, input[type=\"submit\"], input[type=\"button\"],input[type=\"reset\"], .submit{text-decoration:none;font-size:12px;line-height:12px;display:block;float:left;background:#eee;border:1px solid #d1d1d1;border-top:1px solid #e1e1e1;border-left:1px solid #e1e1e1;color:#333;text-shadow:#fff 0 1px 0;margin-right:.8em;}\na.pagelines-blink:hover, a.soapbox_link:hover, .button:hover, input[type=\"submit\"]:hover, .submit:hover{color:#777;}\na.pagelines-blink .pagelines-blink-pad, a.soapbox_link .soapbox_link-pad, #feature_slider .fcontent a.post-edit-link{display:block;padding:5px 7px;border:1px solid transparent;border-top:1px solid #fff;border-left:1px solid #fff;}\na.pagelines-blink .pagelines-blink-pad .blink-arrow, a.soapbox_link .soapbox_arrow{padding-right:9px;background:url(./images/more-black.png) no-repeat right center;}\ninput[type=\"submit\"], .submit, input[type=\"button\"], .button, input[type=\"reset\"], .reset{cursor:pointer;background:url(./images/button-grey-up.png) repeat-x left bottom;}\n.button:active, input[type=\"submit\"]:active, .submit:active{color:#000;border:1px solid #ddd;border-top:1px solid #bbb;border-left:1px solid #bbb;background:url(./images/button-grey-down.png) repeat-x left bottom;}\na.pagelines-blink.blue-blink, a.soapbox_link.soapbox_callout{background:#225E9B;border:1px solid #000;border-top:1px solid #2D7ED1;border-left:1px solid #2D7ED1;text-shadow:#000 0 -1px 0;color:#fff;}\na.pagelines-blink.blue-blink:hover, a.soapbox_link.soapbox_callout:hover{color:#eee;}\na.pagelines-blink.blue-blink .pagelines-blink-pad, a.soapbox_link.soapbox_callout .soapbox_link-pad{border-top:1px solid #2C7AC9;border-left:1px solid #2C7AC9;}\na.pagelines-blink.blue-blink .pagelines-blink-pad .blink-arrow, a.soapbox_link.soapbox_callout .soapbox_arrow{background:url(./images/more.png) no-repeat right center;}\na.pagelines-blink.black-blink, #feature_slider .fcontent a, #feature_slider .fcontent a.post-edit-link{background:#111;border:1px solid #000;border-top:1px solid #111;border-left:1px solid #111;color:#fff;text-shadow:none;}\na.pagelines-blink.black-blink:hover, #feature_slider .fcontent a:hover, #feature_slider .fcontent a.post-edit-link:hover{background:#333;border-bottom:1px solid #000;}\na.pagelines-blink.black-blink .pagelines-blink-pad, #feature_slider .fcontent a.post-edit-link{border-top:1px solid #444;border-left:1px solid #444;}\na.pagelines-blink.black-blink .pagelines-blink-pad .blink-arrow{background:url(./images/more.png) no-repeat right center;}\na.pagelines-blink.black-blink:active .pagelines-blink-pad , #feature_slider .fcontent a.post-edit-link:active{background:#000;border:1px solid #000;border-right:1px solid #444;border-bottom:1px solid #444;}\nh1, h2, h3, h4, h5, h6{font-weight:normal;margin:0;padding:0;line-height:1.2em;margin-bottom:.1em;}\nh1 em, h2 em, h3 em, h4 em, h5 em, h6 em, #nav em{text-transform:lowercase;font-style:italic;}\nh1, h1.pagetitle{font-size:2.5em;}\nh2{font-size:2.0em;}\nh3{font-size:1.5em;}\nh4{font-size:1.3em;}\nh5{font-size:1.1em;}\nh6{font-size:1em;}\n.subhead{margin-bottom:1.6em;font-size:.8em;}\nblockquote{margin:0 0 1em 1em;padding:1em 1em .5em;font-style:italic;}\n.comment blockquote{border:none;padding-right:10px;}\n.comment blockquote blockquote{margin-bottom:0;}\na{text-decoration:none;}\n.hentry a:hover{text-decoration:underline;}\n#subnav ul li a:active{text-decoration:none;}\n.post-edit-link{font-size:9px;}\n#site{position:relative;}\n#wrapper{padding-bottom:50px;}\n.content{width:960px;margin:0px auto 0;}\n#column-wrap, #container{float:left;}\n#sidebar-wrap{float:right;}\n.two-sidebar-left #column-wrap, .one-sidebar-left #column-wrap, .two-sidebar-left #buddypress-page #container, .one-sidebar-left #buddypress-page #container{float:right;}\n.two-sidebar-left #sidebar-wrap, .one-sidebar-left #sidebar-wrap{float:left;}\n.two-sidebar-left #column-main, .one-sidebar-left #column-main, .two-sidebar-left #buddypress-page #container, .one-sidebar-left #buddypress-page #container{float:right;}\n.two-sidebar-center #column-main{float:right;}\n.mcolumn-pad{padding-top:2em;}\n.two-sidebar-center #column-main .mcolumn-pad{padding-right:20px;padding-left:20px;}\n.fullwidth #column-main .mcolumn-pad{padding-right:15px;padding-left:15px;}\n.one-sidebar-right #column-main .mcolumn-pad, .one-sidebar-right #container #content, .two-sidebar-right #column-main .mcolumn-pad, .two-sidebar-right #container #content{padding:2em 30px 0 15px;}\n.one-sidebar-left #column-main .mcolumn-pad , .one-sidebar-left #container #content, .two-sidebar-left #column-main .mcolumn-pad , .two-sidebar-left #container #content{padding:2em 15px 0 30px;}\n#page-main .content{border-right:1px solid transparent;border-left:1px solid transparent;}\n#column-main{float:left;width:630px;display:inline;}\n#sidebar1, #sidebar2{float:left;overflow:hidden;}\n#header .outline{position:relative;zoom:1;z-index:15;}\n#branding .content{z-index:10;}\n#branding .content-pad{padding:25px 0px 25px 15px;}\n#branding .branding_wrap{position:relative;zoom:1;}\nh1 a{font-size:44px;line-height:.9;}\n.site-description{font-size:.85em;margin-left:.2em;}\na.site-title{display:block;margin:.3em 0 .15em;font-size:2.6em;line-height:1em;}\n.icons{text-align:right;position:absolute;bottom:15px;right:0px;line-height:20px;height:24px;}\n.icons a{display:block;width:22px;height:22px;margin-left:7px;float:right;text-align:right;}\n.icons .twitterlink{background:url(./images/sprite-socialicons.png) no-repeat -22px 0;}\n.icons .youtubelink{background:url(./images/sprite-socialicons.png) no-repeat -44px 0;}\n.icons .linkedinlink{background:url(./images/sprite-socialicons.png) no-repeat -66px 0;}\n.icons .facebooklink{background:url(./images/sprite-socialicons.png) no-repeat -88px 0;}\n.icons .rsslink{background:url(./images/sprite-socialicons.png) no-repeat 0 0;}\n.icons .twitterlink:hover{background-position:-22px -22px;}\n.icons .youtubelink:hover{background-position:-44px -22px;}\n.icons .linkedinlink:hover{background-position:-66px -22px;}\n.icons .facebooklink:hover{background-position:-88px -22px;}\n.icons .rsslink:hover{background-position:0px -22px;}\n.main_nav{line-height:1.1em;text-align:left;margin-top:0px;z-index:28;position:relative;}\n.main_nav .content-pad{padding-top:6px;}\n.main_nav ul{list-style:none;display:block;margin:0px 0px 0px 0px;padding:0px;float:left;}\n.main_nav li{position:relative;}\n.main_nav ul li{margin:0px 0px 0px 0px;padding:0px;float:left;text-align:right;}\n.main_nav li a{padding:10px 15px 10px;text-decoration:none;display:block;border:1px solid transparent;border-bottom:none;}\n.main-nav li a{font-size:.85em;}\n*html .main_nav li a{border-color:white;}\n.main_nav ul ul{display:none;}\n.main_nav ul ul li{text-align:left;}\n#secondnav{line-height:1.1;font-size:.7em;}\n#secondnav ul{line-height:.95em;list-style:none;margin:0;}\n#secondnav .secondnav_menu{margin:0 0 0 0px;}\n#secondnav ul li{float:left;}\n#secondnav li a{display:block;padding:10px 10px;border:none;}\nbody #wp-admin-bar #admin-bar-logo{line-height:1.4em;}\nbody.buddypress{border-top:none;padding-top:none;}\n#buddypress-page #container{margin:20px auto;float:left;}\n#buddypress-page #content{padding-right:30px;}\n#buddypress-page #object-nav{margin:0;margin-top:1em;padding:0;}\n#buddypress-page #item-nav{margin-bottom:1.5em;}\n#buddypress-page #object-nav ul li a{padding:3px 12px;display:block;}\n#buddypress-page #subnav{margin:0;margin-bottom:2.5em;padding:10px;}\n#buddypress-page #subnav a{font-size:12px;line-height:1.2em;padding:7px;display:block;}\n#buddypress-page #settings-form input{margin-bottom:1.3em;}\n#buddypress-page div.activity-comments form textarea, #buddypress-page form#whats-new-form #whats-new-textarea textarea{background:none;}\n#buddypress-page #container .submit{border:none;background:none;padding:7px 0px;margin:0px;}\n#buddypress-page #container .submit .auto{padding:5px;}\n#buddypress-page ul.button-nav{list-style-type:none;}\n#buddypress-page form.dir-form div.dir-search{width:47%;}\n#buddypress-page form.dir-form div.dir-search input[type=\"submit\"]{float:right;clear:right;padding:4px 4px;margin-right:5px;}\n#buddypress-page .profile-fields td{padding:5px;}\n#buddypress-page .radio ul{margin:5px 0 1em 50px;}\n#buddypress-page div.item-list-tabs ul li{margin:0 5px;}\n#buddypress-page table.forum{width:100%;margin:1.4em 0;text-align:center;}\n#buddypress-page table.forum th{padding:5px;font-weight:normal;}\n#buddypress-page table.forum td{padding:.5em;}\n#buddypress-page table.forum .td-poster .poster-name{display:inline;}\n#buddypress-page table.forum .td-poster img{vertical-align:middle;margin-right:5px;}\n#buddypress-page table.forum .td-title{font-size:1.3em;text-align:left;}\n#buddypress-page table.forum .td-title a:hover{text-decoration:underline;}\n#buddypress-page .standard-form #topic-meta h3{margin:1em 0;font-size:1.9em;}\n#buddypress-page .standard-form .admin-links{font-size:.8em;padding:4px 0;}\n#buddypress-page .item-list li{margin-bottom:1.5em;padding:.3em 0;}\n#buddypress-page .item-list .item-title{font-size:1.3em;}\n#buddypress-page .item-list .poster-meta{font-size:1.3em;font-style:italic;}\n#buddypress-page .item-list .poster-meta img{vertical-align:middle;margin-right:10px;}\n#buddypress-page .item-list .post-content{padding:20px 20px 10px;}\n#buddypress-page #item-actions{margin-bottom:1em;}\n#buddypress-page .activity{font-style:italic;font-size:.9em;}\n#buddypress-page .activity .activity-inner{font-style:normal;padding:10px 10px 2px;margin-bottom:1em;}\n.item-avatar{float:left;margin-right:10px;}\n.item-avatar a{padding:3px;display:block;}\n.item-avatar a img{display:block;}\n.searchform{position:relative;width:210px;margin:0 auto;margin-top:3px;}\n#header .searchform{float:right;}\n.searchform input{background:transparent;border:none;}\n.searchform .searchfield, #forumsidebar input.forumsearchfield{font-family:arial, \"Helvetica Neue\", Helvetica, sans-serif;font-size:13px;}\n.searchform .searchfield{height:13px;padding:7px 30px 5px 7px;width:170px;}\n.searchform input.submit{margin:0;padding:0;position:absolute;right:8px;top:4px;height:17px;width:17px;}\n.hentry{clear:both;}\n.hentry ul, .hentry ol, .comment-body ul, .comment-body ol{margin-left:25px;margin-bottom:1em;}\n.billboard{padding:60px 15px;margin:0 0 2.5em 0;}\n.fpost{margin-bottom:1.6em;}\n.fpost.sticky{padding:20px 0px 5px;}\n.fpost .post-excerpt, .fpost .entry_content{font-size:1.1em;line-height:1.6em;}\n.fpost .textcontent{margin:20px 10px 0 0;}\n.post.fpost .entry{margin-bottom:1em;padding:1em 0;}\n.post-meta{margin-bottom:1.5em;}\n.fpost .post-header{padding-top:3px;float:left;display:inline;}\n.fpost .post-header.post-nothumb{width:100%;}\n.fpost .post-title-section{position:relative;}\n.fpost .post-title h2{padding-bottom:0;font-size:2em;line-height:1em;margin:0;text-transform:none;}\n.fpost .post-title h2 a:hover{text-decoration:underline;}\n.post-comments a:hover{text-decoration:none;}\n.fpost .metabar{margin:0 0 .2em 0;}\n.metabar em{font-size:11px;font-style:normal;line-height:1.75em;}\n.metabar a:hover{text-decoration:none;}\n.metabar .sword{text-transform:lowercase;letter-spacing:0px;}\n.fpost .post-excerpt{margin:1em 0;}\n.post-thumb, .fpost .post-thumb a{float:left;}\n.fpost .post-thumb img{padding:4px;display:block;}\n#pagelines_content .clip, #buddypress-page .clip{width:47%;}\n#site.fullwidth #pagelines_content .clip, #site.fullwidth #buddypress-page .clip{width:48%;}\n.clip_box{margin-bottom:.5em;padding:1em 0;}\n.clip_box .hentry{padding:0;}\n.clip{width:100px;float:left;clear:none;}\n.clip-right{width:100px;float:right;}\n.clip .clip-header{padding:4px 0 4px 0;display:table-cell;width:10000px;}\n.clip .clip-thumb a{float:left;margin-right:10px;}\n.clip .clip-thumb img{padding:2px;display:block;margin:0 0 0.4em;}\n.clip .entry-title{line-height:1.2em;padding:0;font-size:1.4em;}\n.clip .metabar{line-height:1em;padding:0;}\n.clip .metabar em{font-size:11px;}\n.clip .post-excerpt{font-size:1em;line-height:1.5em;margin-bottom:1.5em;margin-top:.5em;}\n.post-nav, .current_posts_info{clear:both;padding:5px 10px;margin:0em 0 1.8em;font-size:12px;position:relative;}\n.post-nav a, .post-nav a:visited{text-decoration:none;}\n.post-nav a:hover{text-decoration:none;}\n.post-nav .previous a{float:left;display:block;padding-left:24px;background-image:url(./images/sprite-post-2.png);background-repeat:no-repeat;background-position:left -74px;}\n.post-nav .next a{float:right;display:block;padding-right:24px;text-align:right;background-image:url(./images/sprite-post-2.png);background-repeat:no-repeat;background-position:right -49px;}\n#postauthor{margin-bottom:2em;}\n#postauthor .copy-pad{padding:10px 15px;}\n#postauthor .subtext{font-size:.85em;}\n#postauthor .author-info{margin-left:120px;}\n.author-thumb{text-align:left;margin-left:-120px;}\n.author-thumb img{float:left;margin-right:25px;padding:5px;}\n.author-details{font-size:.9em;}\n.post-footer{line-height:25px;padding:8px 18px 8px;overflow:hidden;margin-bottom:30px;font-size:1em;}\n.post-footer a{font-weight:bold;}\n.post-footer .right img{vertical-align:top;}\n.post-footer .left span{font-weight:bold;font-size:14px;text-align:center;padding:4px 0 8px 0;width:33px;margin-right:6px;display:inline-block;line-height:21px;}\n.post-footer .right{padding:0px 0 0;}\n.post-footer .right span{line-height:21px;}\n.post-footer img{margin:0 0 0 2px;}\n.tags{font-style:italic;font-size:10px;}\n.scolumn-pad{padding:2em .7em;}\n#sidebar-wrap #sidebar_universal{padding:2em 1em 0 1em;}\nul.sidebar_widgets{list-style-type:none;}\n.widget{margin-bottom:1em;overflow:hidden;}\n.widget-title{text-align:left;padding:6px 8px 3px 0px;margin-bottom:.6em;font-size:.9em;}\n.widget-title a, h3.widget-title a{background:url(./images/morearrow.png) no-repeat 100% 50%;padding-right:10px;}\n.widget ul{margin:0 0 10px .4em;}\n.widget ul.sub-menu{margin:0px;}\n.widget ul li{list-style:none;display:block;padding:.3em 2px;}\n.widget ul li a:hover{text-decoration:underline;}\n.widget ul li ul li{margin-left:.3em;}\n.widget-default{padding:10px;margin-bottom:.7em;margin-top:.3em;}\n#grandchildnav.widget{padding:10px;margin-bottom:25px;}\n#grandchildnav li{padding:0;margin:0;line-height:1em;border-top:none;}\n#grandchildnav li a, #grandchildnav .current_page_item ul li a{display:block;padding:7px 5px;border:1px solid transparent;border-left:3px solid transparent;background:transparent;}\n#grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover{text-decoration:none;}\n#grandchildnav li ul{margin:0 0 0 25px;}\n.widget_search .widget-title{margin-bottom:10px;}\n.widget_categories .postform{margin:10px 10px;}\n.rss-date{display:block;font-size:.9em;line-height:1.2em;}\na.rsswidget img{position:relative;top:1px;}\n#sidebar #widgets{margin-bottom:1em;}\n.socialicons .widget-title, .widgetcform .widget-title{margin-bottom:8px;}\n.socialicons{margin-bottom:30px;}\n.textwidget{padding:5px 2px;}\n#footer .widget_twitter .twitter-item{padding-bottom:10px;}\n.twitter-item:nth-child(2n){font-weight:bolder;}\n.dcol{float:left;display:inline;}\n.dcol.lastcol .dcol-pad{padding-right:0;}\n.page-nav-default{padding:15px 0;}\n.page-nav-default .previous-entries{float:left;}\n.page-nav-default .next-entries{float:right;}\n#footer{clear:both;font-size:1em;overflow:hidden;text-align:left;position:relative;}\n#footer ul{padding:0 5px;}\n#footer li{list-style-type:none;}\n#footer li a:hover{text-decoration:underline;}\n#footer li h5 a{font-size:1em;}\n#footer .content-pad{padding:20px 0 1em;}\n#footer .widget-title{padding-left:0;border:0;margin-bottom:.6em;font-size:.85em;}\n#footer .findent{padding:0 5px 0 0;}\n#footer .latest_posts{padding:0;}\n#footer .latest_posts li{margin-bottom:.5em;}\n#footer .latest_posts li .list-excerpt{font-size:.9em;line-height:1.5em;}\n#fcolumns_container .socialicons{float:left;background:none;width:20%;border:none;}\n#fcolumns_container .socialicons .socialeffect{border:none;padding:1px 20px;}\n#fcolumns_container .socialicons span{font-size:17px;display:block;padding-bottom:26px;}\n.fcol{width:152px;float:left;display:inline;padding:0 20px;}\n.fcol ul ul{padding-left:10px;font-size:.9em;}\n#breadcrumbs{padding:10px 5px;}\n#breadcrumb .content-pad{padding:0 12px;}\n#breadcrumb .content{padding:5px 0px;font-size:.8em;}\n.breadcrumb a:hover{text-decoration:underline;}\n#simple_footer_nav #logo{float:left;padding-right:20px;}\n#simple_footer_nav #logo h1{font-size:2em;}\n#simple_footer_nav ul{float:left;margin:10px 10px 0 10px;}\n#simple_footer_nav ul li{float:left;}\n#footer #simple_footer_nav ul li a{padding:0 10px;}\n#simple_footer_nav .terms{float:right;margin-top:10px;}\n#respond{padding:20px 0px;}\n#respond form{margin-left:25px;}\nh3#comments-title{padding-left:22px;background:url(\"./images/sprite-post-2.png\") no-repeat 0 3px scroll transparent;}\n#respond h3{padding-left:25px;background:url(\"./images/sprite-post-2.png\") no-repeat 0px -22px scroll transparent;}\n#respond h3 small{font-size:12px;font-style:italic;}\n.commentlist .comment-meta{margin-bottom:16px;}\n.commentlist p{margin:0px 0 1em 5px;}\n.reply a{font-size:.8em;}\n#notfound, #previewing-posttypes{padding:100px;min-height:350px;}\nh2.notfound-splash{font-size:8em;}\nh2.notavail{margin-bottom:1.5em;}\n#cred{text-align:center;padding:15px;}\na.plimage{font-size:8px;text-align:center;}\n.pad_small{padding:8px;}\n.pad_big{padding:15px 20px;}\n.aligncenter{display:block;margin-left:auto;margin-right:auto;}\n.alignleft{float:left;}\n.alignright{float:right;}\n#calendar_wrap{overflow:hidden;padding:0;}\n#wp-calendar caption{padding:2px;font-size:12px;font-weight:normal;}\n#wp-calendar thead th{padding:2px;font-size:12px;}\n#callout{overflow:hidden;}\n#callout .content-pad{padding:30px 17px 30px;}\n#callout .callout_text{width:70%;float:left;}\n#callout .callout_text-pad{padding:0 10px;}\n#callout .callout_text.noimage{width:100%;}\n#callout .callout_head{font-size:2em;}\n#callout .callout_copy{font-size:.9em;}\n#callout .callout_image a{display:block;line-height:1em;}\n#callout .callout_image{float:right;width:30%;text-align:center;vertical-align:center;}\n.typekit-badge{display:none !important;}\n.ithumb, .iframe{padding:5px;}\n.fancybox span{font-size:.9em;display:block;}\n.content-pagination .cp-desc{font-style:italic;}\n.content-pagination a:hover{text-decoration:none;}\n.content-pagination .cp-num, .content-pagination a:hover .cp-num{margin:0 2px;text-decoration:none;display:inline-block;line-height:0.9em;padding:3px 7px 6px;}\ntable{width:100%;}\n.hentry table, #comments table{margin-bottom:1em;}\n.hentry table th, #comments table th{font-weight:normal;text-align:center;padding:.3em;font-size:1.1em;}\n.hentry table td, #comments table td{padding:.35em .6em;text-align:center;}\n.hentry table .label, #comments table .label{text-align:left;}\n.mediablock{overflow:hidden;overflow:visible;zoom:1;}\n.mediablock-image{float:left;margin-right:10px;}\n.iconlist .mediablock-image{padding-top:.4em;}\n.mediablock-content{display:table-cell;vertical-align:top;width:10000px;}\n.iconlist li{margin-bottom:.5em;}\n.ui-img-big{margin-right:15px;}\n.styled-list{list-style-type:none;}\n.wp-caption{text-align:center;padding:5px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;max-width:98%;margin-bottom:1em;}\n.wp-caption-text{font-size:11px;text-align:center;margin:0;padding:6px 3px 2px;line-height:16px;}\n.wp-caption-dd{font-size:11px;line-height:17px;padding:0 4px 5px;margin:0;}\n.wp-caption img{margin:0;padding:0;border:0 none;}\n.wp-caption-dd{font-size:11px;line-height:17px;padding:0 4px 5px;margin:0;}\n.alignright{}\n.alignleft{}\n.alignnone{}\n.aligncenter{}\n.avatar{}\n.wp-caption{}\n.wp-caption-text{}\n.gallery{}\n.gallery-caption{}\n.sticky{}\n.bypostauthor{}\n.wp-smiley{}\n" + }, + "redirectURL": "", + "headersSize": 354, + "bodySize": 7362 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 78, + "send": 0, + "wait": 79, + "receive": 140 + }, + "serverIPAddress": "173.245.61.106", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:57:59.665+03:00", + "time": 235, + "request": { + "method": "GET", + "url": "http://valid.host/wp-content/themes/platform/css/dynamic.css?ver=-050711220836", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "__cfduid", + "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" + }, + { + "name": "__utma", + "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" + }, + { + "name": "__utmz", + "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" + }, + { + "name": "__utmv", + "value": "81600529.blog_team" + }, + { + "name": "wp-settings-1", + "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" + }, + { + "name": "wp-settings-time-1", + "value": "1312181035" + } + ], + "headers": [ + { + "name": "Host", + "value": "webperformance.ru" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "text/css,*/*;q=0.1" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/" + }, + { + "name": "Cookie", + "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" + } + ], + "queryString": [ + { + "name": "ver", + "value": "-050711220836" + } + ], + "headersSize": 741, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Server", + "value": "cloudflare-nginx" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 07:57:59 GMT" + }, + { + "name": "Content-Type", + "value": "text/css" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Last-Modified", + "value": "Sat, 07 May 2011 22:08:36 GMT" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "Cache-Control", + "value": "public, max-age=31536000" + }, + { + "name": "CF-Cache-Status", + "value": "HIT" + }, + { + "name": "Expires", + "value": "Thu, 20 Sep 2012 07:57:59 GMT" + }, + { + "name": "Content-Encoding", + "value": "gzip" + } + ], + "content": { + "mimeType": "text/css", + "size": 11298, + "text": "/* PageLines Dynamic CSS - Copyright 2008 - 2011 */\n\n/* NOTE: Loaded inline because the 'inline dynamic css' option is activated. */\n\n/* Typography --------------- */\n\n/* Set Type */\nh1, h2, h3, h4, h5, h6, .site-title{font-family:Georgia, \"Times New Roman\", Times, serif;}\n\nbody, .font1, .font-primary, .commentlist{font-family:Georgia, \"Times New Roman\", Times, serif;}\n\n.font2, .font-sub, ul.main-nav li a, #secondnav li a, .metabar, .subtext, .subhead, .widget-title, .post-comments, .reply a, .editpage, #pagination .wp-pagenavi, .post-edit-link, #wp-calendar caption, #wp-calendar thead th, .soapbox-links a, .fancybox, .standard-form .admin-links, #featurenav a, .pagelines-blink, .ftitle small{font-family:\"Lucida Grande\", \"Lucida Sans\", \"Lucida Sans Unicode\", sans-serif;letter-spacing:0.10em;text-transform:uppercase;}\n\ninput[type=\"text\"], input[type=\"password\"], textarea, #dsq-content textarea{font-family:Courier, Verdana, sans-serif;}\n\n\n/* Dynamic Layout --------------- */\n\n.fixed_width #page, .fixed_width #footer, .canvas #page-canvas{width:980px}\n#page-main .content{width:962px}\n#site{min-width:962px}\n#site .content, .wcontent, #primary-nav ul.main-nav.nosearch{width:960px}\n#primary-nav ul.main-nav{width:740px}\n\n.fullwidth #pagelines_content #column-main, .fullwidth .wmain, .fullwidth #buddypress-page #container{width:960px}\n.fullwidth #pagelines_content #sidebar1, .fullwidth #buddypress-page #sidebar1{width:0px}\n.fullwidth #pagelines_content #sidebar2, .fullwidth #buddypress-page #sidebar2{width:0px}\n.fullwidth #pagelines_content #column-wrap, .fullwidth #buddypress-page #container{width:960px}\n.fullwidth #pagelines_content #sidebar-wrap, .fullwidth #buddypress-page #sidebar-wrap{width:0px}\n\n.one-sidebar-right #pagelines_content #column-main, .one-sidebar-right .wmain, .one-sidebar-right #buddypress-page #container{width:690px}\n.one-sidebar-right #pagelines_content #sidebar1, .one-sidebar-right #buddypress-page #sidebar1{width:250px}\n.one-sidebar-right #pagelines_content #sidebar2, .one-sidebar-right #buddypress-page #sidebar2{width:0px}\n.one-sidebar-right #pagelines_content #column-wrap, .one-sidebar-right #buddypress-page #container{width:690px}\n.one-sidebar-right #pagelines_content #sidebar-wrap, .one-sidebar-right #buddypress-page #sidebar-wrap{width:250px}\n\n.one-sidebar-left #pagelines_content #column-main, .one-sidebar-left .wmain, .one-sidebar-left #buddypress-page #container{width:700px}\n.one-sidebar-left #pagelines_content #sidebar1, .one-sidebar-left #buddypress-page #sidebar1{width:240px}\n.one-sidebar-left #pagelines_content #sidebar2, .one-sidebar-left #buddypress-page #sidebar2{width:0px}\n.one-sidebar-left #pagelines_content #column-wrap, .one-sidebar-left #buddypress-page #container{width:700px}\n.one-sidebar-left #pagelines_content #sidebar-wrap, .one-sidebar-left #buddypress-page #sidebar-wrap{width:240px}\n\n.two-sidebar-right #pagelines_content #column-main, .two-sidebar-right .wmain, .two-sidebar-right #buddypress-page #container{width:480px}\n.two-sidebar-right #pagelines_content #sidebar1, .two-sidebar-right #buddypress-page #sidebar1{width:240px}\n.two-sidebar-right #pagelines_content #sidebar2, .two-sidebar-right #buddypress-page #sidebar2{width:240px}\n.two-sidebar-right #pagelines_content #column-wrap, .two-sidebar-right #buddypress-page #container{width:480px}\n.two-sidebar-right #pagelines_content #sidebar-wrap, .two-sidebar-right #buddypress-page #sidebar-wrap{width:480px}\n\n.two-sidebar-left #pagelines_content #column-main, .two-sidebar-left .wmain, .two-sidebar-left #buddypress-page #container{width:480px}\n.two-sidebar-left #pagelines_content #sidebar1, .two-sidebar-left #buddypress-page #sidebar1{width:240px}\n.two-sidebar-left #pagelines_content #sidebar2, .two-sidebar-left #buddypress-page #sidebar2{width:240px}\n.two-sidebar-left #pagelines_content #column-wrap, .two-sidebar-left #buddypress-page #container{width:480px}\n.two-sidebar-left #pagelines_content #sidebar-wrap, .two-sidebar-left #buddypress-page #sidebar-wrap{width:480px}\n\n.two-sidebar-center #pagelines_content #column-main, .two-sidebar-center .wmain, .two-sidebar-center #buddypress-page #container{width:480px}\n.two-sidebar-center #pagelines_content #sidebar1, .two-sidebar-center #buddypress-page #sidebar1{width:240px}\n.two-sidebar-center #pagelines_content #sidebar2, .two-sidebar-center #buddypress-page #sidebar2{width:240px}\n.two-sidebar-center #pagelines_content #column-wrap, .two-sidebar-center #buddypress-page #container{width:720px}\n.two-sidebar-center #pagelines_content #sidebar-wrap, .two-sidebar-center #buddypress-page #sidebar-wrap{width:240px}\n\n/* Dynamic Grid --------------- */\n\n.dcol_container_2{width: 980px; float: right;}\n.dcol_2{width: 470px; margin-left: 20px;}\n\n.dcol_container_3{width: 980px; float: right;}\n.dcol_3{width: 306px; margin-left: 20px;}\n\n.dcol_container_4{width: 980px; float: right;}\n.dcol_4{width: 225px; margin-left: 20px;}\n\n.dcol_container_5{width: 980px; float: right;}\n.dcol_5{width: 176px; margin-left: 20px;}\n\n/* Options --------------- */\n\nbody, body.fixed_width{background-color:#000000;}\nbody #page, .sf-menu li, #primary-nav ul.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active, .commentlist ul.children .even, .alt #commentform textarea{background-color:#FFFFFF;}\n.canvas #page-canvas{background-color:#FFFFFF;}\nhr, .fpost, .clip_box, .widget-title, #buddypress-page .item-list li, .metabar a, #morefoot .widget-title, #site #dsq-content h3, .post.fpost .entry, #soapbox .fboxinfo, #primary-nav #nav_row, .fpost.sticky{border-color:#E9E9E9;}\nh1, h2, h3, h4, h5, h6, h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, a.site-title, .entry-title a, .entry-title a:hover, .widget-title a:hover, h3.widget-title a:hover{color:#000000;}\n#page, .tcolor1, #subnav ul li a:active, .commentlist cite a, #breadcrumb a, .metabar a:hover, .post-nav a:hover, .post-footer a, #buddypress-page #object-nav ul li a, #buddypress-page table.forum .td-title a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #twitterbar a, #carousel .carousel_text, #site #dsq-content .dsq-request-user-info td a, #pagination .wp-pagenavi a:hover, #pagination .wp-pagenavi .current, #primary-nav .main-nav li a:hover, #featurenav a.activeSlide, .content-pagination a:hover .cp-num{color:#000000;}\n.tcolor2, .lcolor2 a, .subhead, .widget-title, .post-edit-link, .metabar .sword, #branding .site-description, #callout, #commentform .required, #postauthor .subtext, #buddypress-page .standard-form .admin-links, #wp-calendar caption, #carousel .thecarousel, #pagination .wp-pagenavi span.pages, .commentlist .comment-meta a, #highlight .highlight-subhead, .content-pagination span, .content-pagination a .cp-num, .searchform .searchfield{color:#AFAFAF;}\n.tcolor3, .lcolor3 a, .main_nav li a, .widget-title a, h3.widget-title a, #subnav_row li a, .metabar em, .metabar a, .tags, #commentform label, .form-allowed-tags code, .rss-date, #breadcrumb, .reply a, .post-nav a, .post-nav a:visited, .post-footer, .auxilary a, #buddypress-page .standard-form .admin-links a, #twitterbar .content .tbubble, .widget ul.twitter .twitter-item, .cform .emailreqtxt,.cform .reqtxt, #pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .main_nav ul.sf-menu a, .sf-menu a:visited, #featurenav a, #feature-footer span.playpause{color:#777777;}\na, #subnav_row li.current_page_item a, #subnav_row li a:hover, #grandchildnav .current_page_item > a, .branding h1 a:hover, .post-comments a:hover, .bbcrumb a:hover, \t#feature_slider .fcontent.fstyle-lightbg a, #feature_slider .fcontent.fstyle-nobg a{color:#225E9B;}\na:hover,.commentlist cite a:hover, #grandchildnav .current_page_item a:hover, .headline h1 a:hover{color:#0F457C;}\n#feature-footer, .main-nav li.current-page-ancestor a, .main-nav li.current_page_item a, .main-nav li.current-page-ancestor ul a, .main-nav li.current_page_item ul a, #wp-calendar caption, #buddypress-page #subnav, #buddypress-page .activity .activity-inner, #buddypress-page table.forum th, #grandchildnav.widget, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, .commentlist .alt, #wp-calendar #today, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, .post-nav, .current_posts_info, .post-footer, #twitterbar, #carousel .content-pad, .success, .sf-menu li li, .sf-menu li li, .sf-menu li li li, .content-pagination a .cp-num, .hentry table .alternate td{background:#F7F7F7;}\nul.sf-menu ul li, .post-nav, .current_posts_info, .post-footer, blockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, .fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img, #carousel .content ul li a img, #carousel .content ul li a:hover img, #feature-footer{border-color:#E9E9E9;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border-left-color:#DDDDDD;}\nblockquote, input, textarea, .searchform .searchfield, .wp-caption, .widget-default, #buddypress-page div.activity-comments form .ac-textarea, #buddypress-page form#whats-new-form #whats-new-textarea, #grandchildnav.widget, fpost .post-thumb img, .clip .clip-thumb img, .author-thumb img{border-top-color:#DDDDDD;}\n#feature-footer .feature-footer-pad{border-left-color:#FFFFFF;}\n#feature-footer .feature-footer-pad{border-top-color:#FFFFFF;}\n#feature-footer, #grandchildnav li a, #grandchildnav .current_page_item ul li a, #buddypress-page #object-nav ul li a{ text-shadow:#FFFFFF 0 1px 0;}\n.main_nav .main-nav li a:hover, #wp-calendar thead th, #buddypress-page #object-nav, .item-avatar a, .comment blockquote, #grandchildnav .current_page_item a, #grandchildnav li a:hover, #grandchildnav .current_page_item ul li a:hover, #carousel .carousel_text, pagination .wp-pagenavi a, #pagination .wp-pagenavi .current, #pagination .wp-pagenavi .extend, .sf-menu li:hover, .sf-menu li.sfHover, #featurenav a, #feature-footer span.playpause, .content-pagination .cp-num, .content-pagination a:hover .cp-num, ins{background:#F1F1F1;}\n#featurenav a, #feature-footer span.playpause{border-color:#DDDDDD;}\n#featurenav a, #feature-footer span.playpause{border-left-color:#CCCCCC;}\n#featurenav a, #feature-footer span.playpause{border-top-color:#CCCCCC;}\n#buddypress-page #object-nav ul li a:hover,#buddypress-page #object-nav ul li.selected a, #buddypress-page #subnav a:hover, #buddypress-page #subnav li.current a, #featurenav a.activeSlide{background:#E1E1E1;}\n#featurenav a.activeSlide{border-color:#CCCCCC;}\n#featurenav a.activeSlide{border-left-color:#999999;}\n#featurenav a.activeSlide{border-top-color:#999999;}\n#footer, #footer li.link-list a, #footer .latest_posts li .list-excerpt{color:#999999;}\n#footer a, #footer .widget-title, #footer li h5 a{color:#FFFFFF;}\n#footer, .fixed_width #footer{ text-shadow:#000000 0 -1px 0;}\n\n\n/* Custom CSS */\n\nbody{}\n\n\n\n/* Triggered By Page Load*/\n" + }, + "redirectURL": "", + "headersSize": 354, + "bodySize": 2531 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 78, + "send": 0, + "wait": 79, + "receive": 78 + }, + "serverIPAddress": "173.245.61.106", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:57:59.665+03:00", + "time": 235, + "request": { + "method": "GET", + "url": "http://valid.host/wp-content/plugins/headjs-loader/head.min.js", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "__cfduid", + "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" + }, + { + "name": "__utma", + "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" + }, + { + "name": "__utmz", + "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" + }, + { + "name": "__utmv", + "value": "81600529.blog_team" + }, + { + "name": "wp-settings-1", + "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" + }, + { + "name": "wp-settings-time-1", + "value": "1312181035" + } + ], + "headers": [ + { + "name": "Host", + "value": "webperformance.ru" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/" + }, + { + "name": "Cookie", + "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" + } + ], + "queryString": [], + "headersSize": 710, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Server", + "value": "cloudflare-nginx" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 07:57:59 GMT" + }, + { + "name": "Content-Type", + "value": "application/javascript" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Last-Modified", + "value": "Mon, 16 May 2011 07:55:37 GMT" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "Cache-Control", + "value": "public, max-age=31536000" + }, + { + "name": "CF-Cache-Status", + "value": "HIT" + }, + { + "name": "Expires", + "value": "Thu, 20 Sep 2012 07:57:59 GMT" + }, + { + "name": "Content-Encoding", + "value": "gzip" + } + ], + "content": { + "mimeType": "application/javascript", + "size": 5537, + "text": "/**\n\tHead JS\t\tThe only script in your \n\tCopyright\tTero Piirainen (tipiirai)\n\tLicense\t\tMIT / http://bit.ly/mit-license\n\tVersion\t\t0.8\n\t\n\thttp://headjs.com\n*/(function(a){var b=a.documentElement,c={screens:[320,480,640,768,1024,1280,1440,1680,1920],section:\"-section\",page:\"-page\",head:\"head\"},d=[];if(window.head_conf)for(var e in head_conf)head_conf[e]&&(c[e]=head_conf[e]);function f(a){d.push(a)}function g(a){var c=new RegExp(\"\\\\b\"+a+\"\\\\b\");b.className=b.className.replace(c,\"\")}function h(a,b){for(var c=0;c2&&this[d+1]!==undefined)d&&f(this.slice(1,d+1).join(\"-\")+c.section);else{var e=a||\"index\",g=e.indexOf(\".\");g>0&&(e=e.substring(0,g)),b.id=e+c.page,d||f(\"root\"+c.section)}});function l(){var a=window.outerWidth||b.clientWidth;b.className=b.className.replace(/ (w|lt)-\\d+/g,\"\"),f(\"w-\"+Math.round(a/100)*100),h(c.screens,function(b){a<=b&&f(\"lt-\"+b)}),i.feature()}l(),window.onresize=l,i.feature(\"js\",true).feature()})(document),function(){var a=document.createElement(\"i\"),b=a.style,c=\" -o- -moz- -ms- -webkit- -khtml- \".split(\" \"),d=\"Webkit Moz O ms Khtml\".split(\" \"),e=window.head_conf&&head_conf.head||\"head\",f=window[e];function g(a){for(var c in a)if(b[a[c]]!==undefined)return true}function h(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+\" \"+d.join(b+\" \")+b).split(\" \");return!!g(c)}var i={gradient:function(){var a=\"background-image:\",d=\"gradient(linear,left top,right bottom,from(#9f9),to(#fff));\",e=\"linear-gradient(left top,#eee,#fff);\";b.cssText=(a+c.join(d+a)+c.join(e+a)).slice(0,-a.length);return!!b.backgroundImage},rgba:function(){b.cssText=\"background-color:rgba(0,0,0,0.5)\";return!!b.backgroundColor},opacity:function(){return a.style.opacity===\"\"},textshadow:function(){return b.textShadow===\"\"},multiplebgs:function(){b.cssText=\"background:url(//:),url(//:),red url(//:)\";return(new RegExp(\"(url\\\\s*\\\\(.*?){3}\")).test(b.background)},boxshadow:function(){return h(\"boxShadow\")},borderimage:function(){return h(\"borderImage\")},borderradius:function(){return h(\"borderRadius\")},reflections:function(){return h(\"boxReflect\")},transforms:function(){return h(\"transform\")},transitions:function(){return h(\"transition\")}};for(var j in i)i[j]&&f.feature(j,i[j].call(),true);f.feature()}(),function(a){var b=a.documentElement,c=navigator.userAgent.toLowerCase().indexOf(\"msie\")!=-1,d=false,e=[],f={},g={},h=a.createElement(\"script\").async===true||\"MozAppearance\"in a.documentElement.style||window.opera;var i=window.head_conf&&head_conf.head||\"head\",j=window[i]=window[i]||function(){j.ready.apply(null,arguments)};var k=0,l=1,m=2,n=3;h?j.js=function(){var a=arguments,b=a[a.length-1],c=[];r(b)||(b=null),q(a,function(d,e){d!=b&&(d=p(d),c.push(d),v(d,b&&e==a.length-2?function(){s(c)&&b()}:null))});return j}:j.js=function(){var a=arguments,b=[].slice.call(a,1),c=b[0];if(!d){e.push(function(){j.js.apply(null,a)});return j}c?(q(b,function(a){r(a)||u(p(a))}),v(p(a[0]),r(c)?c:function(){j.js.apply(null,b)})):v(p(a[0]));return j},j.ready=function(a,b){r(a)&&(b=a,a=\"ALL\");var c=g[a];if(c&&c.state==n||a==\"ALL\"&&s()){b();return j}var d=f[a];d?d.push(b):d=f[a]=[b];return j};function o(a){var b=a.split(\"/\"),c=b[b.length-1],d=c.indexOf(\"?\");return d!=-1?c.substring(0,d):c}function p(a){var b;if(typeof a==\"object\")for(var c in a)a[c]&&(b={name:c,url:a[c]});else b={name:o(a),url:a};var d=g[b.name];if(d)return d;for(var e in g)if(g[e].url==b.url)return g[e];g[b.name]=b;return b}function q(a,b){if(a){typeof a==\"object\"&&(a=[].slice.call(a));for(var c=0;c\").appendTo(\"body\"),d=b.css(\"display\");b.remove();if(d===\"none\"||d===\"\"){ck||(ck=c.createElement(\"iframe\"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write(\"\");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,\"display\"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!==\"*\"?a+\".\":\"\")+b.replace(A,\"`\").replace(B,\"&\")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,\"events\");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type===\"click\")){a.namespace&&(n=new RegExp(\"(^|\\\\.)\"+a.namespace.split(\".\").join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+\"defer\",g=c+\"queue\",h=c+\"mark\",i=f.data(a,e,b,!0);i&&(d===\"queue\"||!f.data(a,g,b,!0))&&(d===\"mark\"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!==\"toJSON\")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(j,\"$1-$2\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/\\d/,n=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,o=/^[\\],:{}\\s]*$/,p=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,r=/(?:^|:|,)(?:\\s*\\[)+/g,s=/(webkit)[ \\/]([\\w.]+)/,t=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,u=/(msie) ([\\w.]+)/,v=/(mozilla)(?:.*? rv:([\\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.6.1\",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),\"slice\",D.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").unbind(\"ready\")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",z,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",z),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a&&typeof a==\"object\"&&\"setInterval\"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,\"constructor\")&&!B.call(a.constructor.prototype,\"isPrototypeOf\"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,\"@\").replace(q,\"]\").replace(r,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,\"text/xml\")):(c=new ActiveXObject(\"Microsoft.XMLDOM\"),c.async=\"false\",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName===\"parsererror\")&&e.error(\"Invalid XML: \"+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
          a\",d=a.getElementsByTagName(\"*\"),e=a.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};f=c.createElement(\"select\"),g=f.appendChild(c.createElement(\"option\")),h=a.getElementsByTagName(\"input\")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName(\"tbody\").length,htmlSerialize:!!a.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value===\"on\",optSelected:g.selected,getSetAttribute:a.className!==\"t\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent(\"onclick\",function b(){j.noCloneEvent=!1,a.detachEvent(\"onclick\",b)}),a.cloneNode(!0).fireEvent(\"onclick\")),h=c.createElement(\"input\"),h.value=\"t\",h.setAttribute(\"type\",\"radio\"),j.radioValue=h.value===\"t\",h.setAttribute(\"checked\",\"checked\"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML=\"\",a.style.width=a.style.paddingLeft=\"1px\",l=c.createElement(\"body\"),m={visibility:\"hidden\",width:0,height:0,border:0,margin:0,background:\"none\"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,\"zoom\"in a.style&&(a.style.display=\"inline\",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display=\"\",a.innerHTML=\"
          \",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML=\"
          t
          \",n=a.getElementsByTagName(\"td\"),r=n[0].offsetHeight===0,n[0].style.display=\"\",n[1].style.display=\"none\",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML=\"\",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement(\"div\"),i.style.width=\"0\",i.style.marginRight=\"0\",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML=\"\",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p=\"on\"+q,r=p in a,r||(a.setAttribute(p,\"return;\"),r=typeof a[p]==\"function\"),j[q+\"Bubbles\"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\\{.*\\}|\\[.*\\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c==\"string\",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c===\"events\"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a==\"undefined\"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&\"get\"in c&&(d=c.get(e,\"value\"))!==b)return d;return(e.value||\"\").replace(p,\"\")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type===\"select-one\";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:\"tabIndex\"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!(\"getAttribute\"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!=\"boolean\"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,\"form\")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&\"set\"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,\"\"+d);return d}if(i&&\"get\"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,\"\"),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabIndex\");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&\"set\"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&\"get\"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,\"button\"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,\"button\"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==\"\"?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})})),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\\./g,B=/ /g,C=/[^\\w\\s.|`]/g,D=function(a){return a.replace(C,\"\\\\$&\")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(\" \");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(\".\")>-1?(n=l.split(\".\"),l=n.shift(),h.namespace=n.slice(0).sort().join(\".\")):(n=[],h.namespace=\"\"),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent(\"on\"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c==\"string\"&&c.charAt(0)===\".\"){c=c||\"\";for(h in t)f.event.remove(a,h+c);return}c=c.split(\" \");while(h=c[k++]){r=h,q=null,l=h.indexOf(\".\")<0,m=[],l||(m=h.split(\".\"),h=m.shift(),n=new RegExp(\"(^|\\\\.)\"+f.map(m.slice(0).sort(),D).join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join(\".\"),c.namespace_re=new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem\n)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(\":\")<0?\"on\"+h:\"\";do{var m=f._data(k,\"handle\");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,\"events\")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join(\"-\"):\"\":f.nodeName(a,\"select\")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,\"_change_data\"),g=J(d),(c.type!==\"focusout\"||d.type!==\"radio\")&&f._data(d,\"_change_data\",g);if(e===b||g===e)return;if(e!=null||g)c.type=\"change\",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,\"input\")?b.type:\"\";(c===\"radio\"||c===\"checkbox\"||f.nodeName(b,\"select\"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,\"input\")?b.type:\"\";(a.keyCode===13&&!f.nodeName(b,\"textarea\")||a.keyCode===32&&(c===\"checkbox\"||c===\"radio\")||c===\"select-multiple\")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,\"_change_data\",J(b))}},setup:function(a,b){if(this.type===\"file\")return!1;for(var c in I)f.event.add(this,c+\".specialChange\",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,\".specialChange\");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each([\"bind\",\"one\"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a==\"object\"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c===\"one\"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a===\"unload\"&&c!==\"one\")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\\\/g,j=/\\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(\"\"),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]===\"~\"||x[0]===\"+\")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r=\"\",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)===\"[object Array]\")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,\"\")},TAG:function(a,b){return a[1].replace(i,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,\"\");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(i,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||k.getText([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return\"\\\\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+l.match[o].source.replace(/\\\\(\\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var f=a.length;c\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(l.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"

          \";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var m=e,n=e.getAttribute(\"id\"),o=n||d,q=e.parentNode,r=/^\\s*[+~]/.test(b);n?o=o.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll(\"[id='\"+o+\"'] \"+b),f)}catch(s){}finally{n||m.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"
          \";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;l.order.splice(1,0,\"CLASS\"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var v=function(a,b){var c,d=[],e=\"\",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,\"\");a=l.relative[a]?a+\"*\":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a||typeof a==\"string\")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\\d+=\"(?:\\d+|null)\"/g,Z=/^\\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,_=/<([\\w:]+)/,ba=/\",\"\"],legend:[1,\"
          \",\"
          \"],thead:[1,\"\",\"
          \"],tr:[2,\"\",\"
          \"],td:[3,\"\",\"
          \"],col:[2,\"\",\"
          \"],area:[1,\"\",\"\"],_default:[0,\"\",\"\"]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div
          \",\"
          \"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!=\"object\"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,\"\"):null;if(typeof a==\"string\"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace($,\"<$1>\");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||\nb[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k==\"number\"&&(k+=\"\");if(!k)continue;if(typeof k==\"string\")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,\"<$1>\");var l=(_.exec(k)||[\"\",\"\"])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement(\"div\");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l===\"table\"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===\"\"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],\"tbody\")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)==\"number\")for(i=0;i=0)return b+\"px\"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?\"\":\"alpha(opacity=\"+b*100+\")\",g=d&&d.filter||c.filter||\"\";c.filter=bo.test(g)?g.replace(bo,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:\"inline-block\"},function(){b?c=bz(a,\"margin-right\",\"marginRight\"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,\"-$1\").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b===\"fontSize\"?\"1em\":d||0,d=f.pixelLeft+\"px\",f.left=c,e&&(a.runtimeStyle.left=e));return d===\"\"?\"auto\":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\\[\\]$/,bG=/\\r?\\n/g,bH=/#.*$/,bI=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\\-storage|.+\\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\\/\\//,bN=/\\?/,bO=/)<[^<]*)*<\\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\\s+/,bR=/([?&])_=[^&]*/,bS=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement(\"a\"),bW.href=\"\",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"
          \").append(c.replace(bO,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,\"\\r\\n\")}}):{name:b.name,value:c.replace(bG,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":\"*/*\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=x;if(y=v.getResponseHeader(\"Etag\"))f.etag[k]=y}if(a===304)c=\"notmodified\",o=!0;else try{r=cb(d,w),c=\"success\",o=!0}catch(z){c=\"parsererror\",u=z}}else{u=c;if(!c||a)c=\"error\",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bH,\"\").replace(bM,bX[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bX[3]||(bX[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?\"&\":\"?\")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,\"$1_=\"+x);d.url=y+(y===d.url?(bN.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", */*; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join(\"&\").replace(bE,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cc++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=b.contentType===\"application/x-www-form-urlencoded\"&&typeof b.data==\"string\";if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,co,cp=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu(\"show\",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){d.style[\"overflow\"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
          \";f.extend(b.style,{position:\"absolute\",top:0,left:0,margin:0,border:0,width:\"1px\",height:\"1px\",visibility:\"hidden\"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position=\"fixed\",e.style.top=\"20px\",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top=\"\",d.style.overflow=\"hidden\",d.style.position=\"relative\",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each([\"Left\",\"Top\"],function(a,c){var d=\"scroll\"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?\"pageXOffset\"in g?g[a?\"pageYOffset\":\"pageXOffset\"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each([\"Height\",\"Width\"],function(a,c){var d=c.toLowerCase();f.fn[\"inner\"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,\"padding\")):null},f.fn[\"outer\"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?\"margin\":\"border\")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement[\"client\"+c];return e.document.compatMode===\"CSS1Compat\"&&g||e.document.body[\"client\"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement[\"client\"+c],e.body[\"scroll\"+c],e.documentElement[\"scroll\"+c],e.body[\"offset\"+c],e.documentElement[\"offset\"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a==\"string\"?a:a+\"px\")}}),a.jQuery=a.$=f})(window);" + }, + "redirectURL": "", + "headersSize": 394, + "bodySize": 31988 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 63, + "send": 0, + "wait": 47, + "receive": 62 + }, + "serverIPAddress": "74.125.39.95", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:58:00.150+03:00", + "time": 125, + "request": { + "method": "GET", + "url": "http://www.google-analytics.com/ga.js", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Host", + "value": "www.google-analytics.com" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/" + } + ], + "queryString": [], + "headersSize": 322, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Content-Length", + "value": "12570" + }, + { + "name": "Content-Encoding", + "value": "gzip" + }, + { + "name": "Last-Modified", + "value": "Tue, 20 Sep 2011 20:00:43 GMT" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 06:57:21 GMT" + }, + { + "name": "Expires", + "value": "Wed, 21 Sep 2011 08:57:21 GMT" + }, + { + "name": "Content-Type", + "value": "text/javascript" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "name": "Cache-Control", + "value": "max-age=7200, public" + }, + { + "name": "Age", + "value": "3638" + }, + { + "name": "Server", + "value": "GFE/2.0" + } + ], + "content": { + "mimeType": "text/javascript", + "size": 31737, + "text": "(function(){var g=void 0,h=null,aa=encodeURIComponent,ba=decodeURIComponent,j=Math;function ca(a,b){return a.name=b}var k=\"push\",da=\"slice\",ea=\"replace\",fa=\"load\",l=\"charAt\",ga=\"value\",n=\"indexOf\",ha=\"match\",o=\"name\",ia=\"host\",r=\"toString\",s=\"length\",t=\"prototype\",u=\"split\",v=\"stopPropagation\",ja=\"scope\",w=\"location\",x=\"getString\",y=\"substring\",la=\"navigator\",A=\"join\",B=\"toLowerCase\",C;function ma(a,b){switch(b){case 0:return\"\"+a;case 1:return a*1;case 2:return!!a;case 3:return a*1E3}return a}function D(a){return g==a||\"-\"==a||\"\"==a}function na(a){if(!a||\"\"==a)return\"\";for(;a&&\" \\n\\r\\t\"[n](a[l](0))>-1;)a=a[y](1);for(;a&&\" \\n\\r\\t\"[n](a[l](a[s]-1))>-1;)a=a[y](0,a[s]-1);return a}function oa(a){var b=1,c=0,d;if(!D(a)){b=0;for(d=a[s]-1;d>=0;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=c!=0?b^c>>21:b}return b}function pa(){return j.round(j.random()*2147483647)}\nfunction qa(){}function E(a,b){return aa instanceof Function?b?encodeURI(a):aa(a):(F(68),escape(a))}function G(a){a=a[u](\"+\")[A](\" \");if(ba instanceof Function)try{return ba(a)}catch(b){F(17)}else F(68);return unescape(a)}var ra=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent(\"on\"+b,c)},sa=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,!!d):a.detachEvent&&a.detachEvent(\"on\"+b,c)};function H(a){return a&&a[s]>0?a[0]:\"\"}\nfunction ta(a){var b=a?a[s]:0;return b>0?a[b-1]:\"\"}var ua=function(){this.prefix=\"ga.\";this.F={}};ua[t].set=function(a,b){this.F[this.prefix+a]=b};ua[t].get=function(a){return this.F[this.prefix+a]};ua[t].contains=function(a){return this.get(a)!==g};function va(a){a[n](\"www.\")==0&&(a=a[y](4));return a[B]()}function wa(a,b){var c,d={url:a,protocol:\"http\",host:\"\",path:\"\",c:new ua,anchor:\"\"};if(!a)return d;c=a[n](\"://\");if(c>=0)d.protocol=a[y](0,c),a=a[y](c+3);c=a.search(\"/|\\\\?|#\");if(c>=0)d.host=a[y](0,c)[B](),a=a[y](c);else return d.host=a[B](),d;c=a[n](\"#\");if(c>=0)d.anchor=a[y](c+1),a=a[y](0,c);c=a[n](\"?\");c>=0&&(xa(d.c,a[y](c+1)),a=a[y](0,c));d.anchor&&b&&xa(d.c,d.anchor);a&&a[l](0)==\"/\"&&(a=a[y](1));d.path=a;return d}\nfunction xa(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b)[k](c)}for(var d=na(b)[u](\"&\"),e=0;e=1||(a=[\"utmt=error\",\"type=\"+a,\"utmwv=5.1.7\",\"utmn=\"+pa(),\"utmsp=1\"],b&&a[k](\"api=\"+b),c&&a[k](\"msg=\"+E(c[y](0,100))),J.p&&a[k](\"aip=1\"),Aa(a[A](\"&\")))};var Ba=0;function K(a){return(a?\"_\":\"\")+Ba++}\nvar Ca=K(),Da=K(),Ea=K(),Fa=K(),Ga=K(),L=K(),M=K(),Ha=K(),Ia=K(),Ja=K(),Ka=K(),La=K(),Ma=K(),Na=K(),Oa=K(),Pa=K(),Qa=K(),Ra=K(),Sa=K(),Ta=K(),Ua=K(),Va=K(),Wa=K(),Xa=K(),Ya=K(),Za=K(),$a=K(),ab=K(),bb=K(),cb=K(),db=K(),eb=K(),fb=K(),gb=K(),hb=K(),N=K(!0),ib=K(),jb=K(),kb=K(),lb=K(),mb=K(),nb=K(),ob=K(),pb=K(),qb=K(),rb=K(),O=K(!0),sb=K(!0),tb=K(!0),ub=K(!0),wb=K(!0),xb=K(!0),yb=K(!0),zb=K(!0),Ab=K(!0),Bb=K(!0),Cb=K(!0),P=K(!0),Db=K(!0),Eb=K(!0),Fb=K(!0),Gb=K(!0),Hb=K(!0),Ib=K(!0),Jb=K(!0),Kb=K(!0),\nLb=K(!0),Mb=K(!0),Nb=K(!0),Ob=K(!0),Pb=K(!0),Qb=K(),Rb=K();K();var Sb=K(),Tb=K(),Ub=K(),Vb=K(),Wb=K(),Xb=K(),$b=K(),ac=K(),bc=K();K();var cc=K(),dc=K();var ec=function(){function a(a,c,d){Q(R[t],a,c,d)}S(\"_getName\",Ea,58);S(\"_getAccount\",Ca,64);S(\"_visitCode\",O,54);S(\"_getClientInfo\",Na,53,1);S(\"_getDetectTitle\",Qa,56,1);S(\"_getDetectFlash\",Oa,65,1);S(\"_getLocalGifPath\",$a,57);S(\"_getServiceMode\",ab,59);T(\"_setClientInfo\",Na,66,2);T(\"_setAccount\",Ca,3);T(\"_setNamespace\",Da,48);T(\"_setAllowLinker\",Ka,11,2);T(\"_setDetectFlash\",Oa,61,2);T(\"_setDetectTitle\",Qa,62,2);T(\"_setLocalGifPath\",$a,46,0);T(\"_setLocalServerMode\",ab,92,g,0);T(\"_setRemoteServerMode\",\nab,63,g,1);T(\"_setLocalRemoteServerMode\",ab,47,g,2);T(\"_setSampleRate\",Za,45,1);T(\"_setCampaignTrack\",Pa,36,2);T(\"_setAllowAnchor\",La,7,2);T(\"_setCampNameKey\",Sa,41);T(\"_setCampContentKey\",Xa,38);T(\"_setCampIdKey\",Ra,39);T(\"_setCampMediumKey\",Va,40);T(\"_setCampNOKey\",Ya,42);T(\"_setCampSourceKey\",Ua,43);T(\"_setCampTermKey\",Wa,44);T(\"_setCampCIdKey\",Ta,37);T(\"_setCookiePath\",M,9,0);T(\"_setMaxCustomVariables\",bb,0,1);T(\"_setVisitorCookieTimeout\",Ha,28,1);T(\"_setSessionCookieTimeout\",Ia,26,1);T(\"_setCampaignCookieTimeout\",\nJa,29,1);T(\"_setReferrerOverride\",kb,49);a(\"_trackPageview\",R[t].ka,1);a(\"_trackEvent\",R[t].u,4);a(\"_trackSocial\",R[t].la,104);a(\"_trackPageLoadTime\",R[t].ja,100);a(\"_trackTrans\",R[t].ma,18);a(\"_sendXEvent\",R[t].t,78);a(\"_createEventTracker\",R[t].S,74);a(\"_getVersion\",R[t].X,60);a(\"_setDomainName\",R[t].s,6);a(\"_setAllowHash\",R[t].ba,8);a(\"_getLinkerUrl\",R[t].W,52);a(\"_link\",R[t].link,101);a(\"_linkByPost\",R[t].aa,102);a(\"_setTrans\",R[t].ea,20);a(\"_addTrans\",R[t].L,21);a(\"_addItem\",R[t].J,19);a(\"_setTransactionDelim\",\nR[t].fa,82);a(\"_setCustomVar\",R[t].ca,10);a(\"_deleteCustomVar\",R[t].U,35);a(\"_getVisitorCustomVar\",R[t].Y,50);a(\"_setXKey\",R[t].ha,83);a(\"_setXValue\",R[t].ia,84);a(\"_getXKey\",R[t].Z,76);a(\"_getXValue\",R[t].$,77);a(\"_clearXKey\",R[t].P,72);a(\"_clearXValue\",R[t].Q,73);a(\"_createXObj\",R[t].T,75);a(\"_addIgnoredOrganic\",R[t].H,15);a(\"_clearIgnoredOrganic\",R[t].M,97);a(\"_addIgnoredRef\",R[t].I,31);a(\"_clearIgnoredRef\",R[t].N,32);a(\"_addOrganic\",R[t].K,14);a(\"_clearOrganic\",R[t].O,70);a(\"_cookiePathCopy\",\nR[t].R,30);a(\"_get\",R[t].V,106);a(\"_set\",R[t].da,107);a(\"_addEventListener\",R[t].addEventListener,108);a(\"_removeEventListener\",R[t].removeEventListener,109);a(\"_initData\",R[t].l,2);a(\"_setVar\",R[t].ga,22);T(\"_setSessionTimeout\",Ia,27,3);T(\"_setCookieTimeout\",Ja,25,3);T(\"_setCookiePersistence\",Ha,24,1);a(\"_setAutoTrackOutbound\",qa,79);a(\"_setTrackOutboundSubdomains\",qa,81);a(\"_setHrefExamineLimit\",qa,80)},Q=function(a,b,c,d){a[b]=function(){try{return F(d),c.apply(this,arguments)}catch(a){throw za(\"exc\",\nb,a&&a[o]),a;}}},S=function(a,b,c,d){R[t][a]=function(){try{return F(c),ma(this.a.get(b),d)}catch(e){throw za(\"exc\",a,e&&e[o]),e;}}},T=function(a,b,c,d,e){R[t][a]=function(f){try{F(c),e==g?this.a.set(b,ma(f,d)):this.a.set(b,e)}catch(i){throw za(\"exc\",a,i&&i[o]),i;}}},fc=function(a,b){return{type:b,target:a,stopPropagation:function(){throw\"aborted\";}}};var gc=function(a,b){return b!==\"/\"?!1:(a[n](\"www.google.\")==0||a[n](\".google.\")==0||a[n](\"google.\")==0)&&!(a[n](\"google.org\")>-1)?!0:!1},hc=function(a){var b=a.get(Ga),c=a[x](M,\"/\");gc(b,c)&&a[v]()};var lc=function(){var a={},b={},c=new ic;this.g=function(a,b){c.add(a,b)};var d=new ic;this.d=function(a,b){d.add(a,b)};var e=!1,f=!1,i=!0;this.G=function(){e=!0};this.f=function(a){this[fa]();this.set(Qb,a,!0);e=!1;d.execute(this);e=!0;b={};this.i()};this.load=function(){e&&(e=!1,this.na(),jc(this),f||(f=!0,c.execute(this),kc(this),jc(this)),e=!0)};this.i=function(){if(e)if(f)e=!1,kc(this),e=!0;else this[fa]()};this.get=function(c){c&&c[l](0)==\"_\"&&this[fa]();return b[c]!==g?b[c]:a[c]};this.set=\nfunction(c,d,e){c&&c[l](0)==\"_\"&&this[fa]();e?b[c]=d:a[c]=d;c&&c[l](0)==\"_\"&&this.i()};this.m=function(b){a[b]=this.b(b,0)+1};this.b=function(a,b){var c=this.get(a);return c==g||c===\"\"?b:c*1};this.getString=function(a,b){var c=this.get(a);return c==g?b:c+\"\"};this.na=function(){if(i){var b=this[x](Ga,\"\"),c=this[x](M,\"/\");gc(b,c)||(a[L]=a[Ma]&&b!=\"\"?oa(b):1,i=!1)}}};lc[t].stopPropagation=function(){throw\"aborted\";};function mc(a,b){for(var b=b||[],c=0;c=0&&d>0&&e>0&&f>0&&b>=0))return F(110),!1;a.set(O,c);a.set(wb,d);a.set(xb,e);a.set(yb,f);a.set(zb,b);return!0},pc=function(a){var b=a.get(O),c=a.get(wb),d=a.get(xb),e=a.get(yb),f=a.b(zb,1);b==g?F(113):b==NaN&&F(114);b>=0&&c>0&&d>0&&e>0&&f>=0||F(115);return[a.b(L,1),b!=g?b:\"-\",c||\"-\",d||\"-\",e||\"-\",f][A](\".\")},qc=function(a){return[a.b(L,1),a.b(Cb,0),a.b(P,1),\na.b(Db,0)][A](\".\")},rc=function(a,b,c){var c=c?\"\":a[x](L,\"1\"),d=b[u](\".\");if(d[s]!==4||nc(d[0],c))d=h;a.set(Cb,d?d[1]*1:0);a.set(P,d?d[2]*1:10);a.set(Db,d?d[3]*1:a.get(Fa));return d!=h||!nc(b,c)},sc=function(a,b){var c=E(a[x](tb,\"\")),d=[],e=a.get(N);if(!b&&e){for(var f=0;f0&&(c+=\"|\"+d[A](\",\"))}return c?a.b(L,1)+\".\"+c:h},tc=function(a,b,c){c=c?\"\":a[x](L,\"1\");b=b[u](\".\");if(b[s]<2||nc(b[0],c))return!1;b=b[da](1)[A](\".\")[u](\"|\");\nb[s]>0&&a.set(tb,G(b[0]));if(b[s]<=1)return!0;for(var c=b[1][u](b[1][n](\",\")==-1?\"^\":\",\"),d=0;d=0&&F(125);return!0},vc=function(a,b){var c=uc(a,b);return c?[a.b(L,1),a.b(Eb,0),a.b(Fb,1),a.b(Gb,1),c][A](\".\"):\"\"},uc=function(a){function b(b,e){if(!D(a.get(b))){var f=a[x](b,\"\"),f=f[u](\" \")[A](\"%20\"),f=f[u](\"+\")[A](\"%20\");c[k](e+\"=\"+f)}}var c=[];b(Ib,\"utmcid\");b(Mb,\"utmcsr\");b(Kb,\n\"utmgclid\");b(Lb,\"utmdclid\");b(Jb,\"utmccn\");b(Nb,\"utmcmd\");b(Ob,\"utmctr\");b(Pb,\"utmcct\");return c[A](\"|\")},xc=function(a,b,c){c=c?\"\":a[x](L,\"1\");b=b[u](\".\");if(b[s]<5||nc(b[0],c))return a.set(Eb,g),a.set(Fb,g),a.set(Gb,g),a.set(Ib,g),a.set(Jb,g),a.set(Mb,g),a.set(Nb,g),a.set(Ob,g),a.set(Pb,g),a.set(Kb,g),a.set(Lb,g),!1;a.set(Eb,b[1]*1);a.set(Fb,b[2]*1);a.set(Gb,b[3]*1);wc(a,b[da](4)[A](\".\"));return!0},wc=function(a,b){function c(a){return(a=b[ha](a+\"=(.*?)(?:\\\\|utm|$)\"))&&a[s]==2?a[1]:g}function d(b,\nc){c&&(c=e?G(c):c[u](\"%20\")[A](\" \"),a.set(b,c))}b[n](\"=\")==-1&&(b=G(b));var e=c(\"utmcvr\")==\"2\";d(Ib,c(\"utmcid\"));d(Jb,c(\"utmccn\"));d(Mb,c(\"utmcsr\"));d(Nb,c(\"utmcmd\"));d(Ob,c(\"utmctr\"));d(Pb,c(\"utmcct\"));d(Kb,c(\"utmgclid\"));d(Lb,c(\"utmdclid\"))},nc=function(a,b){return b?a!=b:!/^\\d+$/.test(a)};var ic=function(){this.r=[]};ic[t].add=function(a,b){this.r[k]({name:a,xa:b})};ic[t].execute=function(a){try{for(var b=0;b=a.get(Za)*100&&a[v]()}function zc(a){Ac()&&a[v]()}function Bc(a){I[w].protocol==\"file:\"&&a[v]()}function Cc(a){a.get(jb)||a.set(jb,I.title,!0);a.get(ib)||a.set(ib,I[w].pathname+I[w].search,!0)};var Dc=new function(){var a=[];this.set=function(b){a[b]=!0};this.ya=function(){for(var b=[],c=0;c=0){b=b[ea](/\\n|\\r/g,\" \");f=0;for(var i=b[s];f2E3&&(b=b[y](0,\n2E3),F(69));a=a+\"=\"+b+\"; path=\"+c+\"; \";e&&(a+=\"expires=\"+(new Date((new Date).getTime()+e)).toGMTString()+\"; \");d&&(a+=\"domain=\"+d+\";\");I.cookie=a}};var Fc,Gc,Hc=function(){if(!Fc){var a={},b=U[la],c=U.screen;a.D=c?c.width+\"x\"+c.height:\"-\";a.C=c?c.colorDepth+\"-bit\":\"-\";a.language=(b&&(b.language||b.browserLanguage)||\"-\")[B]();a.javaEnabled=b&&b.javaEnabled()?1:0;a.characterSet=I.characterSet||I.charset||\"-\";Fc=a}},Ic=function(){Hc();for(var a=Fc,b=U[la],a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.D+a.C+(I.cookie?I.cookie:\"\")+(I.referrer?I.referrer:\"\"),b=a[s],c=U.history[s];c>0;)a+=c--^b++;return oa(a)},Jc=function(a){Hc();\nvar b=Fc;a.set(mb,b.D);a.set(nb,b.C);a.set(qb,b.language);a.set(rb,b.characterSet);a.set(ob,b.javaEnabled);if(a.get(Na)&&a.get(Oa)){if(!(b=Gc)){var c,d,e;d=\"ShockwaveFlash\";if((b=(b=U[la])?b.plugins:g)&&b[s]>0)for(c=0;c-1&&(e=d.description[u](\"Shockwave Flash \")[1]);else{d=d+\".\"+d;try{c=new ActiveXObject(d+\".7\"),e=c.GetVariable(\"$version\")}catch(f){}if(!e)try{c=new ActiveXObject(d+\".6\"),e=\"WIN 6,0,21,0\",c.AllowScriptAccess=\"always\",e=c.GetVariable(\"$version\")}catch(i){}if(!e)try{c=\nnew ActiveXObject(d),e=c.GetVariable(\"$version\")}catch(m){}e&&(e=e[u](\" \")[1][u](\",\"),e=e[0]+\".\"+e[1]+\" r\"+e[2])}b=e?e:\"-\"}Gc=b;a.set(pb,Gc)}else a.set(pb,\"-\")};var X=function(){Q(X[t],\"push\",X[t][k],5);Q(X[t],\"_createAsyncTracker\",X[t].va,33);Q(X[t],\"_getAsyncTracker\",X[t].wa,34);this.q=0};X[t].va=function(a,b){return J.k(a,b||\"\")};X[t].wa=function(a){return J.o(a)};X[t].push=function(a){this.q>0&&F(105);this.q++;for(var b=arguments,c=0,d=0;d0&&(e=f[y](0,i),f=f[y](i+1));var m=e==\"_gat\"?J:e==\"_gaq\"?Kc:J.o(e);m[f].apply(m,b[d][da](1))}}catch(p){c++}this.q--;return c};var Nc=function(){function a(a,b,c,d){g==f[a]&&(f[a]={});g==f[a][b]&&(f[a][b]=[]);f[a][b][c]=d}function b(a,b,c){if(g!=f[a]&&g!=f[a][b])return f[a][b][c]}function c(a,b){if(g!=f[a]&&g!=f[a][b]){f[a][b]=g;var c=!0,d;for(d=0;d0)&&(W(\"__utmd\",\"1\",a[x](M,\"/\"),a[x](Ga,\"\"),1E4),V(\"__utmd\")[s]==0&&a[v]())};var Yc=function(a){a.get(O)==g?Wc(a):a.get(ub)&&!a.get(cc)?Wc(a):a.get(Bb)&&Xc(a)},Zc=function(a){a.get(Hb)&&!a.get(Ab)&&(Xc(a),a.set(Fb,a.get(zb)))},Wc=function(a){var b=a.get(Fa);a.set(sb,!0);a.set(O,pa()^Ic(a)&2147483647);a.set(tb,\"\");a.set(wb,b);a.set(xb,b);a.set(yb,b);a.set(zb,1);a.set(Ab,!0);a.set(Cb,0);a.set(P,10);a.set(Db,b);a.set(N,[]);a.set(ub,!1);a.set(Bb,!1)},Xc=function(a){a.set(xb,a.get(yb));a.set(yb,a.get(Fa));a.m(zb);a.set(Ab,!0);a.set(Cb,0);a.set(P,10);a.set(Db,a.get(Fa));a.set(Bb,\n!1)};var $c=\"daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:q,lycos:query,ask:q,netscape:query,cnn:query,about:terms,mamma:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,ozu:q,terra:query,rambler:query\".split(\",\"),fd=function(a){if(a.get(Pa)&&!a.get(cc)){for(var b=!D(a.get(Ib))||!D(a.get(Mb))||!D(a.get(Kb))||!D(a.get(Lb)),c={},d=0;d=0)||c&&c[ia][n](\"google\")>-1&&c.c.contains(\"q\")&&c.path==\"cse\")return!1;if((b=gd(a,c))&&!b[2])return dd(a,g,b[0],g,g,\"(organic)\",\"organic\",b[1],g),!0;\nelse if(b)return!1;if(a.get(Ab))a:{for(var b=a.get(eb),d=va(c[ia]),e=0;e-1){a=!1;break a}dd(a,g,d,g,g,\"(referral)\",\"referral\",g,\"/\"+c.path);a=!0}else a=!1;return a},gd=function(a,b){for(var c=a.get(cb),d=0;d-1){var f=H(b.c.get(e[1]));if(f&&(!e[3]||b.url[n](e[3])>-1)){a:{for(var c=f,d=a.get(db),c=G(c)[B](),i=0;i0&&d==c}var e=!1;if(d(Kb)||d(Lb))e=!0;for(var f=0;f0&&(c=b[y](e),b=b[y](0,e)),f<0?b+\"?\"+d+c:b+\"&\"+d+c)};var md=\"|\",od=function(a,b,c,d,e,f,i,m,p){var q=nd(a,b);q||(q={},a.get(fb)[k](q));q.id_=b;q.affiliation_=c;q.total_=d;q.tax_=e;q.shipping_=f;q.city_=i;q.state_=m;q.country_=p;q.items_=q.items_||[];return q},pd=function(a,b,c,d,e,f,i){var a=nd(a,b)||od(a,b,\"\",0,0,0,\"\",\"\",\"\"),m;a:{if(a&&a.items_){m=a.items_;for(var p=0;p=a.b(bc,0))return!1;var c=sd();c==g&&(c=td());if(c==g||c==Infinity||isNaN(c))return!1;c>0?b(ud(c)):ra(U,\"load\",function(){vd(a,b)},!1);return!0},ud=function(a){var b=new Nc,c=j.min(j.floor(a/100),5E3);b.e(14,1,c>0?c+\"00\":\"0\");b.j(14,1,a);return b},sd=function(){var a=U.performance||U.webkitPerformance;return(a=a&&a.timing)&&a.loadEventStart-a.fetchStart},td=function(){if(U.top==U){var a=U.external,b=a&&a.onloadT;a&&!a.isValidLoadTime&&(b=g);b>2147483648&&(b=g);\nb>0&&a.setPageReadyTime();return b}};var R=function(a,b,c){function d(a){return function(b){if((b=b.get(dc)[a])&&b[s])for(var c=fc(e,a),d=0;d-1?(F(13),this.set(ib,a,!0)):typeof a===\"object\"&&a!==h&&this.oa(a);this.a.f(\"page\")};C.u=function(a,b,c,d,e){if(a==\"\"||!Lc(a)||b==\"\"||!Lc(b))return!1;if(c!=g&&!Lc(c))return!1;if(d!=g&&!Mc(d))return!1;this.set(Tb,a,!0);this.set(Ub,b,!0);this.set(Vb,c,!0);this.set(Wb,d,!0);this.set(Sb,!!e,!0);this.a.f(\"event\");return!0};\nC.la=function(a,b,c,d){if(!a||!b)return!1;this.set(Xb,a,!0);this.set($b,b,!0);this.set(ac,c||I[w].href,!0);d&&this.set(ib,d,!0);this.a.f(\"social\");return!0};C.ja=function(){var a=this;return vd(this.a,function(b){a.t(b)})};C.ma=function(){this.a.f(\"trans\")};C.t=function(a){this.set(hb,a,!0);this.a.f(\"event\")};C.S=function(a){this.l();var b=this;return{_trackEvent:function(c,d,e){F(91);b.u(a,c,d,e)}}};C.V=function(a){return this.get(a)};\nC.da=function(a,b){if(a)if(a!=g&&(a.constructor+\"\")[n](\"String\")>-1)this.set(a,b);else if(typeof a==\"object\")for(var c in a)a.hasOwnProperty(c)&&this.set(c,a[c])};C.addEventListener=function(a,b){var c=this.get(dc)[a];c&&c[k](b)};C.removeEventListener=function(a,b){for(var c=this.get(dc)[a],d=0;c&&de.get(bb))a=!1;else if(!b||!c||E(b)[s]+E(c)[s]>64)a=!1;else{d!=1&&d!=2&&(d=3);var f={};ca(f,b);f.value=c;f.scope=d;e.get(N)[a]=f;a=!0}a&&this.a.i();return a};C.U=function(a){this.a.get(N)[a]=g;this.a.i()};C.Y=function(a){return(a=this.a.get(N)[a])&&a[ja]==1?a[ga]:g};C.ha=function(a,b,c){this.h().e(a,b,c)};C.ia=function(a,b,c){this.h().j(a,b,c)};C.Z=function(a,b){return this.h().getKey(a,b)};\nC.$=function(a,b){return this.h().z(a,b)};C.P=function(a){this.h().v(a)};C.Q=function(a){this.h().w(a)};C.T=function(){return new Nc};C.H=function(a){a&&this.get(db)[k](a[B]())};C.M=function(){this.set(db,[])};C.I=function(a){a&&this.get(eb)[k](a[B]())};C.N=function(){this.set(eb,[])};C.K=function(a,b,c,d,e){if(a&&b){a=[a,b[B]()][A](\":\");if(d||e)a=[a,d,e][A](\":\");d=this.get(cb);d.splice(c?0:d[s],0,a)}};C.O=function(){this.set(cb,[])};\nC.R=function(a){this.a[fa]();var b=this.get(M),c=kd(this.a);this.set(M,a);this.a.i();jd(this.a,c);this.set(M,b)};C.l=function(){this.a[fa]()};C.ga=function(a){a&&a!=\"\"&&(this.set(tb,a),this.a.f(\"var\"))};var wd=function(a){a.get(Qb)!==\"trans\"&&a.b(Cb,0)>=500&&a[v]();if(a.get(Qb)===\"event\"){var b=(new Date).getTime(),c=a.b(Db,0),d=a.b(yb,0),c=j.floor(0.2*((b-(c!=d?c:c*1E3))/1E3));c>0&&(a.set(Db,b),a.set(P,j.min(10,a.b(P,0)+c)));a.b(P,0)<=0&&a[v]()}},yd=function(a){a.get(Qb)===\"event\"&&a.set(P,j.max(0,a.b(P,10)-1))};var zd=function(){var a=[];this.add=function(b,c,d){d&&(c=E(\"\"+c));a[k](b+\"=\"+c)};this.toString=function(){return a[A](\"&\")}},Ad=function(a,b){(b||a.get(ab)!=2)&&a.m(Cb)},Bd=function(a,b){b.add(\"utmwv\",\"5.1.7\");b.add(\"utms\",a.get(Cb));b.add(\"utmn\",pa());var c=I[w].hostname;D(c)||b.add(\"utmhn\",c,!0);c=a.get(Za);c!=100&&b.add(\"utmsp\",c,!0)},Dd=function(a,b){b.add(\"utmac\",a.get(Ca));a.get(Sb)&&b.add(\"utmni\",1);Cd(a,b);J.p&&b.add(\"aip\",1);b.add(\"utmu\",Dc.ya())},Cd=function(a,b){function c(a,b){b&&d[k](a+\n\"=\"+b+\";\")}var d=[];c(\"__utma\",pc(a));c(\"__utmz\",vc(a,!1));c(\"__utmv\",sc(a,!0));c(\"__utmx\",kd(a));b.add(\"utmcc\",d[A](\"+\"),!0)},Ed=function(a,b){a.get(Na)&&(b.add(\"utmcs\",a.get(rb),!0),b.add(\"utmsr\",a.get(mb)),b.add(\"utmsc\",a.get(nb)),b.add(\"utmul\",a.get(qb)),b.add(\"utmje\",a.get(ob)),b.add(\"utmfl\",a.get(pb),!0))},Fd=function(a,b){a.get(Qa)&&a.get(jb)&&b.add(\"utmdt\",a.get(jb),!0);b.add(\"utmhid\",a.get(lb));b.add(\"utmr\",ya(a.get(kb),a.get(M)),!0);b.add(\"utmp\",E(a.get(ib),!0),!0)},Gd=function(a,b){for(var c=\na.get(gb),d=a.get(hb),e=a.get(N)||[],f=0;f=0&&![].reduce)throw new Md(a[s]);Od(a,b)||Pd(a,b)}else throw new Ld(a[s]);},Nd=function(a,b,c){var c=c||Kd+\"/__utm.gif?\",d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=h;\nb()}},Od=function(a,b){var c,d=Kd+\"/p/__utm.gif\",e=U.XDomainRequest;if(e)c=new e,c.open(\"POST\",d);else if(e=U.XMLHttpRequest)e=new e,\"withCredentials\"in e&&(c=e,c.open(\"POST\",d,!0),c.setRequestHeader(\"Content-Type\",\"text/plain\"));if(c)return c.onreadystatechange=function(){c.readyState==4&&(b(),c=h)},c.send(a),!0},Pd=function(a,b){if(I.body){a=aa(a);try{var c=I.createElement('')}catch(d){c=I.createElement(\"iframe\"),ca(c,a)}c.height=\"0\";c.width=\"0\";c.style.display=\"none\";\nc.style.visibility=\"hidden\";var e=I[w],e=Kd+\"/u/post_iframe.html#\"+aa(e.protocol+\"//\"+e[ia]+\"/favicon.ico\"),f=function(){c.src=\"\";c.parentNode&&c.parentNode.removeChild(c)};ra(U,\"beforeunload\",f);var i=!1,m=0,p=function(){if(!i){try{if(m>9||c.contentWindow[w][ia]==I[w][ia]){i=!0;f();sa(U,\"beforeunload\",f);b();return}}catch(a){}m++;setTimeout(p,200)}};ra(c,\"load\",p);I.body.appendChild(c);c.src=e}else Ec(function(){Pd(a,b)},100)};var $=function(){this.p=!1;this.A={};this.B=[];this.ra=0;this._gasoCPath=this._gasoDomain=g;Q($[t],\"_createTracker\",$[t].k,55);Q($[t],\"_getTracker\",$[t].ta,0);Q($[t],\"_getTrackerByName\",$[t].o,51);Q($[t],\"_getTrackers\",$[t].ua,130);Q($[t],\"_anonymizeIp\",$[t].sa,16);ec()};C=$[t];C.ta=function(a,b){return this.k(a,g,b)};C.k=function(a,b,c){b&&F(23);c&&F(67);b==g&&(b=\"~\"+J.ra++);a=new R(b,a,c);J.A[b]=a;J.B[k](a);return a};C.o=function(a){a=a||\"\";return J.A[a]||J.k(g,a)};C.ua=function(){return J.B[da](0)};\nC.sa=function(){this.p=!0};var Qd=function(a){if(I.webkitVisibilityState==\"prerender\")return!1;a();return!0};var J=new $;var Rd=U._gat;Rd&&typeof Rd._getTracker==\"function\"?J=Rd:U._gat=J;var Kc=new X;(function(a){if(!Qd(a)){F(123);var b=!1,c=function(){!b&&Qd(a)&&(F(124),b=!0,sa(I,\"webkitvisibilitychange\",c))};ra(I,\"webkitvisibilitychange\",c)}})(function(){var a=U._gaq,b=!1;if(a&&typeof a[k]==\"function\"&&(b=Object[t][r].call(Object(a))==\"[object Array]\",!b)){Kc=a;return}U._gaq=Kc;b&&Kc[k].apply(Kc,a)});})();\n" + }, + "redirectURL": "", + "headersSize": 341, + "bodySize": 12570 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 62, + "send": 0, + "wait": 63, + "receive": 0 + }, + "serverIPAddress": "209.85.148.101", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:58:00.259+03:00", + "time": 235, + "request": { + "method": "GET", + "url": "http://valid.host/wp-content/themes/platform/images/sprite-socialicons.png", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "__cfduid", + "value": "d3552a34b74161ed004120ba1b32cf7d31307088195" + }, + { + "name": "__utma", + "value": "81600529.1101727785.1311945788.1316167926.1316176689.4" + }, + { + "name": "__utmz", + "value": "81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" + }, + { + "name": "__utmv", + "value": "81600529.blog_team" + }, + { + "name": "wp-settings-1", + "value": "m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1" + }, + { + "name": "wp-settings-time-1", + "value": "1312181035" + } + ], + "headers": [ + { + "name": "Host", + "value": "webperformance.ru" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "image/png,image/*;q=0.8,*/*;q=0.5" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/wp-content/themes/platform/style.css" + }, + { + "name": "Cookie", + "value": "__cfduid=d3552a34b74161ed004120ba1b32cf7d31307088195; __utma=81600529.1101727785.1311945788.1316167926.1316176689.4; __utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=81600529.blog_team; wp-settings-1=m5%3Do%26m1%3Dc%26m2%3Dc%26m4%3Dc%26align%3Dcenter%26editor%3Dhtml%26hidetb%3D1; wp-settings-time-1=1312181035" + } + ], + "queryString": [], + "headersSize": 788, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Server", + "value": "cloudflare-nginx" + }, + { + "name": "Date", + "value": "Wed, 21 Sep 2011 07:57:59 GMT" + }, + { + "name": "Content-Type", + "value": "image/png" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Last-Modified", + "value": "Thu, 14 Apr 2011 19:46:19 GMT" + }, + { + "name": "Cache-Control", + "value": "public, max-age=31536000" + }, + { + "name": "Content-Length", + "value": "14980" + }, + { + "name": "CF-Cache-Status", + "value": "HIT" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "Expires", + "value": "Thu, 20 Sep 2012 07:57:59 GMT" + } + ], + "content": { + "mimeType": "image/png", + "size": 14980 + }, + "redirectURL": "", + "headersSize": 326, + "bodySize": 14980 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "send": 0, + "wait": 78, + "receive": 157 + }, + "serverIPAddress": "173.245.61.106", + "connection": "80" + }, + { + "pageref": "validfile", + "startedDateTime": "2011-09-21T10:58:00.806+03:00", + "time": 63, + "request": { + "method": "GET", + "url": "http://www.google-analytics.com/__utm.gif?utmwv=5.1.7&utms=1&utmn=1042196436&utmhn=webperformance.ru&utmcs=UTF-8&utmsr=1280x1024&utmsc=24-bit&utmul=en-us&utmje=1&utmfl=10.3%20r183&utmdt=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%B8%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%20%7C%20Web%20Performance&utmhid=1465352691&utmr=-&utmp=%2F&utmac=UA-23339380-1&utmcc=__utma%3D81600529.1101727785.1311945788.1316176689.1316591880.5%3B%2B__utmz%3D81600529.1311945788.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B%2B__utmv%3D81600529.blog_team%3B&utmu=q~", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Host", + "value": "www.google-analytics.com" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" + }, + { + "name": "Accept", + "value": "image/png,image/*;q=0.8,*/*;q=0.5" + }, + { + "name": "Accept-Language", + "value": "en-us,en;q=0.5" + }, + { + "name": "Accept-Encoding", + "value": "gzip, deflate" + }, + { + "name": "Accept-Charset", + "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.7" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Referer", + "value": "http://valid.host/" + } + ], + "queryString": [ + { + "name": "utmac", + "value": "UA-23339380-1" + }, + { + "name": "utmcc", + "value": "__utma=81600529.1101727785.1311945788.1316176689.1316591880.5;+__utmz=81600529.1311945788.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);+__utmv=81600529.blog_team;" + }, + { + "name": "utmcs", + "value": "UTF-8" + }, + { + "name": "utmdt", + "value": "Оптимизация производительности и времени загрузки сайтов | Web Performance" + }, + { + "name": "utmfl", + "value": "10.3 r183" + }, + { + "name": "utmhid", + "value": "1465352691" + }, + { + "name": "utmhn", + "value": "webperformance.ru" + }, + { + "name": "utmje", + "value": "1" + }, + { + "name": "utmn", + "value": "1042196436" + }, + { + "name": "utmp", + "value": "/" + }, + { + "name": "utmr", + "value": "-" + }, + { + "name": "utms", + "value": "1" + }, + { + "name": "utmsc", + "value": "24-bit" + }, + { + "name": "utmsr", + "value": "1280x1024" + }, + { + "name": "utmu", + "value": "q~" + }, + { + "name": "utmul", + "value": "en-us" + }, + { + "name": "utmwv", + "value": "5.1.7" + } + ], + "headersSize": 1110, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "Date", + "value": "Wed, 14 Sep 2011 09:27:28 GMT" + }, + { + "name": "Content-Length", + "value": "35" + }, + { + "name": "Pragma", + "value": "no-cache" + }, + { + "name": "Expires", + "value": "Wed, 19 Apr 2000 11:43:00 GMT" + }, + { + "name": "Last-Modified", + "value": "Wed, 21 Jan 2004 19:51:30 GMT" + }, + { + "name": "Content-Type", + "value": "image/gif" + }, + { + "name": "Cache-Control", + "value": "private, no-cache, no-cache=Set-Cookie, proxy-revalidate" + }, + { + "name": "Server", + "value": "GFE/2.0" + } + ], + "content": { + "mimeType": "image/gif", + "size": 35 + }, + "redirectURL": "", + "headersSize": 295, + "bodySize": 35 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "send": 0, + "wait": 63, + "receive": 0 + }, + "serverIPAddress": "209.85.148.101", + "connection": "80" + } + ] + } +} \ No newline at end of file diff --git a/harstorage/tests/functional/testdata/validfile.svg b/harstorage/tests/functional/testdata/validfile.svg new file mode 100644 index 0000000..1d60635 --- /dev/null +++ b/harstorage/tests/functional/testdata/validfile.svg @@ -0,0 +1 @@ +Performance TrendsFull Load TimeTotal RequestsTotal SizePage Speed Score2011-12-0814:35:402011-12-0817:36:372011-12-0817:36:462011-12-0818:07:112011-12-0818:07:512011-12-0911:20:222011-12-0912:42:182011-12-1214:42:59051015202530Full Load Time02.557.51012.515Total Requests0100200300400500600Total Size (kB)0100255075125150Page Speed Score \ No newline at end of file diff --git a/harstorage/tests/test_models.py b/harstorage/tests/test_models.py new file mode 100644 index 0000000..e69de29 diff --git a/harstorage/websetup.py b/harstorage/websetup.py new file mode 100644 index 0000000..cd7caf9 --- /dev/null +++ b/harstorage/websetup.py @@ -0,0 +1,15 @@ +import logging + +import pylons.test + +from harstorage.config.environment import load_environment + +log = logging.getLogger(__name__) + + +def setup_app(command, conf, vars): + """harstorage setup""" + + # Don't reload the app if it was loaded under the testing environment + if not pylons.test.pylonsapp: + load_environment(conf.global_conf, conf.local_conf) From 7238aa297e659fa92a1178b3215384c0f809e88d Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:36:54 -0700 Subject: [PATCH 05/88] Added throughput data and fixed timestamp to be that of the HAR and not of the current date/time --- harstorage/lib/HAR.py | 110 ++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 53 deletions(-) mode change 100644 => 100755 harstorage/lib/HAR.py diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py old mode 100644 new mode 100755 index 951532c..dd50b99 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -4,7 +4,6 @@ DATE_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" - class Bytes(float): """ @@ -15,14 +14,15 @@ def __add__(self, other): """ @return - result of addition """ + return Bytes(self.__float__() + other) def to_kilobytes(self): """ @return - value in kilobytes """ - return int(round(self.__float__() / 1024.0)) + return int(round(self.__float__()/1024.0)) class Headers(): @@ -36,11 +36,11 @@ def __init__(self, headers): @as_dictionary - dictionary of headers """ + self.as_dict = dict() for header in headers: self.as_dict[header["name"]] = header["value"] - class Fixer(): """ @@ -123,7 +123,6 @@ def fix_pagespeed(har): return har - class HAR(): """ @@ -158,24 +157,25 @@ def __init__(self, har, fixed=False): self.parsing_status = "Successful" except Exception as error: - self.parsing_status = "{0}: {1}".format(type(error).__name__, - error.message) + self.parsing_status = ": ".join([type(error).__name__, error.message]) def init_variables(self): self.full_load_time = 0 - self.total_dns_time = 0.0 + self.total_dns_time = 0.0 self.total_transfer_time = 0.0 - self.total_server_time = 0.0 + self.total_server_time = 0.0 + self.total_download_time = 0.0 self.avg_connecting_time = 0.0 - self.avg_blocking_time = 0.0 + self.avg_blocking_time = 0.0 + self.throughput = 0.0 self.total_size = Bytes(0) - self.text_size = Bytes(0) + self.text_size = Bytes(0) self.media_size = Bytes(0) self.cache_size = Bytes(0) - self.redirects = 0 + self.redirects = 0 self.bad_requests = 0 self.domains = dict() @@ -190,11 +190,12 @@ def analyze(self): # Parse each entry of page for self.entry in self.har["log"]["entries"]: # Micro timgings - self.total_dns_time += self.get_dns_time() + self.total_dns_time += self.get_dns_time() self.total_transfer_time += self.get_transfer_time() - self.total_server_time += self.get_server_time() + self.total_server_time += self.get_server_time() self.avg_connecting_time += self.get_connecting_time() - self.avg_blocking_time += self.get_blocking_time() + self.avg_blocking_time += self.get_blocking_time() + self.total_download_time += self.get_download_time(); # Update Request/Page time frame self.update_timeframe() @@ -224,6 +225,9 @@ def analyze(self): # Update domain info self.update_domain_info() + + # Calculate thoughput + self.throughput = round(self.total_download_time / self.total_size, 0) # Label self.label = self.get_label() @@ -249,31 +253,29 @@ def analyze(self): # From bytes to kilobytes self.total_size = self.total_size.to_kilobytes() - self.text_size = self.text_size.to_kilobytes() + self.text_size = self.text_size.to_kilobytes() self.media_size = self.media_size.to_kilobytes() self.cache_size = self.cache_size.to_kilobytes() - + + self.throughput = round((self.total_size - self.cache_size) / (self.total_download_time / 1000), 0) def weight_ratio(self): """Breakdown by size of page objects""" - resources = dict() + resources = dict() for entry in self.har["log"]["entries"]: - mime_type = \ - entry["response"]["content"]["mimeType"].partition(";")[0] + mime_type = entry["response"]["content"]["mimeType"].partition(";")[0] if cmp(mime_type, ""): mime_type = self.get_normalized_value(mime_type) size = Bytes(entry["response"]["content"]["size"]) - resources[mime_type] = resources.get(mime_type, 0) + \ - size.to_kilobytes() + resources[mime_type] = resources.get(mime_type, 0) + size.to_kilobytes() return resources def req_ratio(self): """Breakdown by number of page objects""" - + resources = dict() for entry in self.har["log"]["entries"]: - mime_type = \ - entry["response"]["content"]["mimeType"].partition(";")[0] + mime_type = entry["response"]["content"]["mimeType"].partition(";")[0] if cmp(mime_type, ""): mime_type = self.get_normalized_value(mime_type) resources[mime_type] = resources.get(mime_type, 0) + 1 @@ -320,22 +322,25 @@ def get_send_time(self): send_time = self.entry["timings"]["send"] return max(send_time, 0) + def get_download_time(self): + download_time = max( self.entry['timings']['receive'], 0) + return download_time + def get_server_time(self): server_time = self.entry["timings"]["wait"] return max(server_time, 0) - + def get_connecting_time(self): connecting_time = self.entry["timings"]["connect"] return max(connecting_time, 0) - + def get_blocking_time(self): blocking_time = self.entry["timings"]["blocked"] return max(blocking_time, 0) def update_timeframe(self): # Original time format: 2000-01-01T00:00:00.000+00:00 - seconds, dot, milliseconds = \ - self.entry["startedDateTime"].partition(".") + seconds, dot, milliseconds = self.entry["startedDateTime"].partition(".") seconds = time.strptime(seconds, "%Y-%m-%dT%H:%M:%S") seconds = time.mktime(seconds) @@ -347,8 +352,7 @@ def update_timeframe(self): milliseconds = milliseconds.replace("Z", "") time_request_started = seconds + float("0." + milliseconds) - time_request_completed = time_request_started + \ - self.entry["time"] / 1000.0 + time_request_completed = time_request_started + self.entry["time"]/1000.0 if time_request_completed > self.max_timestamp: self.max_timestamp = time_request_completed @@ -358,14 +362,15 @@ def update_timeframe(self): self.is_first = True else: self.is_first = False + def get_time_to_first_byte(self): if self.is_first: return self.get_blocking_time() + \ - self.get_dns_time() + \ - self.get_connecting_time() + \ - self.get_send_time() + \ - self.get_server_time() + self.get_dns_time() + \ + self.get_connecting_time() + \ + self.get_send_time() + \ + self.get_server_time() else: return self.time_to_first_byte @@ -377,22 +382,20 @@ def get_response_size(self): return compressed_size def is_text(self): - mime_type = \ - self.entry["response"]["content"]["mimeType"].partition(";")[0] + mime_type = self.entry["response"]["content"]["mimeType"].partition(";")[0] if cmp(mime_type, ""): mime_type = self.get_normalized_value(mime_type) if mime_type.count("javascript") \ - or mime_type.count("text") \ - or mime_type.count("html") \ - or mime_type.count("xml") \ - or mime_type.count("json"): + or mime_type.count("text") \ + or mime_type.count("html") \ + or mime_type.count("xml") \ + or mime_type.count("json"): return True return False def is_media(self): - mime_type = \ - self.entry["response"]["content"]["mimeType"].partition(";")[0] + mime_type = self.entry["response"]["content"]["mimeType"].partition(";")[0] if cmp(mime_type, ""): mime_type = self.get_normalized_value(mime_type) @@ -407,7 +410,8 @@ def is_long_term_cache(self): cache_control = headers.as_dict["Cache-Control"] if not cache_control.count("no-cache") \ - and not cache_control.count("max-age=0"): + and not cache_control.count("max-age=0"): + # Extract DATE from HTTP header date = headers.as_dict["Date"] date = time.strptime(date, DATE_FORMAT) @@ -425,7 +429,8 @@ def is_long_term_cache(self): return False def is_redirect(self): - if 300 <= self.entry["response"]["status"] < 400: + if self.entry["response"]["status"] >= 300 \ + and self.entry["response"]["status"] < 400: return True def is_bad_request(self): @@ -451,11 +456,11 @@ def get_onload_event(self): try: onload_event = self.har["log"]["pages"][0]["pageTimings"]["onLoad"] if onload_event > 0: - return onload_event - except TypeError: # dynaTrace bug + return onload_event + except TypeError: # dynaTrace bug return self.har["log"]["pages"][0]["pageTimings"][0]["onLoad"] except KeyError: - pass + pass return "n/a" def get_start_render_time(self): @@ -465,23 +470,22 @@ def get_start_render_time(self): return "n/a" def get_avg_connecting_time(self): - return round(self.avg_connecting_time / self.requests, 0) + return round(self.avg_connecting_time / self.requests, 0) def get_avg_blocking_time(self): return round(self.avg_blocking_time / self.requests, 0) def update_domain_info(self): - domain = \ - self.entry["request"]["url"].partition("//")[-1].partition("/")[0] + domain = self.entry["request"]["url"].partition("//")[-1].partition("/")[0] # WORKAROUND: Mongo prevents using dots in key names - mongo_domain = re.sub("\.", "|", domain) + mongo_domain = re.sub("\.","|", domain) # {DOMAIN: [NUMBER OF REQUESTS, TOTAL DATA FROM HOST IN KB], ...} - domain_requests = self.domains.get(mongo_domain, [0, 0])[0] + domain_requests = self.domains.get(mongo_domain, [0, 0])[0] domain_data_size = self.domains.get(mongo_domain, [0, 0])[1] - domain_requests += 1 + domain_requests += 1 domain_data_size += self.get_response_size().to_kilobytes() self.domains[mongo_domain] = [domain_requests, domain_data_size] From 234a0fd9b9f98130d18a00809f37632c38b903c1 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:38:57 -0700 Subject: [PATCH 06/88] Added throughput data and fixed timestamp to that of the HAR and not current date/time. Also added a 'source' if availalbe in the 'creator' object of the HAR. This source is text that could be a link to point to the actual source that generated the HAR - for example a URL to the results on Webpagetest --- harstorage/controllers/results.py | 299 ++++++++++++++---------------- 1 file changed, 143 insertions(+), 156 deletions(-) mode change 100644 => 100755 harstorage/controllers/results.py diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py old mode 100644 new mode 100755 index c6bb2d6..b69da0b --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -17,7 +17,6 @@ from harstorage.lib.MongoHandler import MongoDB import harstorage.lib.helpers as h - class ResultsController(BaseController): """ @@ -34,72 +33,53 @@ def index(self): """Home page with the latest test results""" # Migration (harstorage v1.0) - migration_handler = MongoDB(collection="migration") - if hasattr(c, "message"): - return render("/error.html") + migration_handler = MongoDB(collection = "migration") + if hasattr(c, "message"): return render("/error.html") status = migration_handler.collection.find_one({"status": "ok"}) - if status is None: - redirect(h.url_for('/migration/status')) + if status is None: redirect("/migration/status") # MongoDB handler mdb_handler = MongoDB() - if hasattr(c, "message"): - return render("/error.html") + if hasattr(c, "message"): return render("/error.html") # Read aggregated data from database # Aggregation is based on unique labels, urls and latest timestamps - - - ''' - Replaced the original grouping with an aggregate function. This function - actually returns all of the fields needed such that we also do not needed - to make any subsequent requests back to MongoDB to retrieve details on - the list - ''' - latest_results = mdb_handler.collection.aggregate( - [{"$group":{"_id": {"label":"$label", "url":"$url"}, - "timestamp":{"$last":"$timestamp"}, - "total_size":{"$last":"$total_size"}, - "requests":{"$last":"$requests"}, - "full_load_time": {"$last":"$full_load_time"}}}, - {"$sort":{"timestamp" : -1}}]) - - ''' - Get the number of records - - Since we changed the initial request, we need to deal with the json array - differently as well. - ''' - c.rowcount = len(latest_results["result"]) + latest_results = mdb_handler.collection.group( + key = ["label", "url"], + condition = None, + initial = {"timestamp": "1970-01-01 01:00:00"}, + reduce = "\ + function(doc, prev) { \ + if (doc.timestamp > prev.timestamp) { \ + prev.timestamp = doc.timestamp; \ + } \ + }") + + key = lambda timestamp: timestamp["timestamp"] + latest_results = sorted(latest_results, key = key, reverse = True) + + # Numner of records + c.rowcount = len(latest_results) # Populate data table with the latest test results c.metrics_table = [[], [], [], [], [], []] - ''' - for group in latest_results["result"]: - condition = {"label": group["_id"]["label"], "timestamp": group["timestamp"]} + fields = ["timestamp", "label", "url", "total_size", "requests", + "full_load_time"] + + for group in latest_results: + condition = {"label": group["label"], "timestamp": group["timestamp"]} - result = mdb_handler.collection.find_one(condition, fields=fields) + result = mdb_handler.collection.find_one(condition, fields = fields) c.metrics_table[0].append(result["timestamp"]) c.metrics_table[1].append(result["label"]) c.metrics_table[2].append(result["url"]) c.metrics_table[3].append(result["total_size"]) c.metrics_table[4].append(result["requests"]) - c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) - ''' + c.metrics_table[5].append(round(result["full_load_time"]/1000.0, 1)) - # loop through our results and return them - for result in latest_results["result"]: - c.metrics_table[0].append(result["timestamp"]) - c.metrics_table[1].append(result["_id"]["label"]) - c.metrics_table[2].append(result["_id"]["url"]) - c.metrics_table[3].append(result["total_size"]) - c.metrics_table[4].append(result["requests"]) - c.metrics_table[5].append(round(result["full_load_time"] / 1000.0, 1)) - - return render("/home/core.html") @restrict("GET") @@ -128,27 +108,29 @@ def details(self): else: c.histo = "false" c.query = "None" - + return render("/details/core.html") - + def _set_options_in_selector(self, mode, label): """ Create context data - a list of timestamps. @parameter label - label of set with test results + @parameter url - URL of set with test results """ # Read data for selector box from database results = MongoDB().collection.find( {mode: label}, - fields=["timestamp"], - sort=[("timestamp", -1)]) + fields = ["timestamp"], + sort = [("timestamp", -1)]) c.timestamp = list() for result in results: c.timestamp.append(result["timestamp"]) + @restrict("GET") def timeline(self): """Generate data for timeline chart""" @@ -156,24 +138,23 @@ def timeline(self): # Parameters from GET request label = h.decode_uri(request.GET["label"]) mode = request.GET["mode"] - limit = int(config["app_conf"].get("limit", 0)) # Metrics - METRICS = ("timestamp", "full_load_time", "requests", "total_size", - "ps_scores", "onload_event", "start_render_time", - "time_to_first_byte", "total_dns_time", - "total_transfer_time", "total_server_time", - "avg_connecting_time", "avg_blocking_time", "text_size", - "media_size", "cache_size", "redirects", "bad_requests", - "domains") - - TITLES = ["Full Load Time", "Total Requests", - "Total Size", "Page Speed Score", "onLoad Event", - "Start Render Time", "Time to First Byte", - "Total DNS Time", "Total Transfer Time", "Total Server Time", - "Avg. Connecting Time", "Avg. Blocking Time", "Text Size", - "Media Size", "Cache Size", "Redirects", "Bad Rquests", - "Domains"] + METRICS = ( "timestamp", "full_load_time", "requests", "total_size", + "ps_scores", "onload_event", "start_render_time", + "time_to_first_byte", "total_dns_time", + "total_transfer_time", "total_server_time", + "avg_connecting_time", "avg_blocking_time", "text_size", + "media_size", "cache_size", "redirects", "bad_requests", + "domains") + + TITLES = [ "Full Load Time", "Total Requests", + "Total Size", "Page Speed Score", "onLoad Event", + "Start Render Time", "Time to First Byte", + "Total DNS Time", "Total Transfer Time", "Total Server Time", + "Avg. Connecting Time", "Avg. Blocking Time", "Text Size", + "Media Size", "Cache Size", "Redirects", "Bad Rquests", + "Domains"] # Set of metrics to exclude (due to missing data) exclude = set() @@ -184,9 +165,8 @@ def timeline(self): # Read data for timeline from database in custom format (hash separated) results = MongoDB().collection.find( {mode: label}, - fields=METRICS, - limit=limit, - sort=[("timestamp", 1)]) + fields = METRICS, + sort = [("timestamp", 1)]) for result in results: index = 0 @@ -238,23 +218,24 @@ def runinfo(self): domains_weight_ratio[hostname] = value[1] # Summary stats - summary = {"full_load_time": test_results["full_load_time"], - "onload_event": test_results["onload_event"], - "start_render_time": test_results["start_render_time"], - "time_to_first_byte": test_results["time_to_first_byte"], - "total_dns_time": test_results["total_dns_time"], - "total_transfer_time": test_results["total_transfer_time"], - "total_server_time": test_results["total_server_time"], - "avg_connecting_time": test_results["avg_connecting_time"], - "avg_blocking_time": test_results["avg_blocking_time"], - "total_size": test_results["total_size"], - "text_size": test_results["text_size"], - "media_size": test_results["media_size"], - "cache_size": test_results["cache_size"], - "requests": test_results["requests"], - "redirects": test_results["redirects"], - "bad_requests": test_results["bad_requests"], - "domains": test_results["domains"]} + summary = { "full_load_time": test_results["full_load_time"], + "onload_event": test_results["onload_event"], + "start_render_time": test_results["start_render_time"], + "time_to_first_byte": test_results["time_to_first_byte"], + "total_dns_time": test_results["total_dns_time"], + "total_transfer_time": test_results["total_transfer_time"], + "total_server_time": test_results["total_server_time"], + "total_download_time": test_results["total_download_time"], + "avg_connecting_time": test_results["avg_connecting_time"], + "avg_blocking_time": test_results["avg_blocking_time"], + "total_size": test_results["total_size"], + "text_size": test_results["text_size"], + "media_size": test_results["media_size"], + "cache_size": test_results["cache_size"], + "requests": test_results["requests"], + "redirects": test_results["redirects"], + "bad_requests": test_results["bad_requests"], + "domains": test_results["domains"]} # Page Speed Scores scores = dict() @@ -264,28 +245,33 @@ def runinfo(self): # Data for HAR Viewer har_id = str(test_results["_id"]) + currentHar = test_results["har"] + + source = str(currentHar['log']['creator']['source']) + filename = os.path.join(config["app_conf"]["temp_store"], har_id) - with open(filename, "w") as fh: - fh.write(test_results["har"].encode("utf-8")) + with open(filename, "w") as file: + file.write(test_results["har"].encode("utf-8")) # Final JSON - return json.dumps({"summary": summary, - "pagespeed": scores, - "weights": test_results["weights_ratio"], - "requests": test_results["requests_ratio"], - "d_weights": domains_weight_ratio, - "d_requests": domains_req_ratio, - "har": har_id}) + return json.dumps({"summary": summary, + "pagespeed": scores, + "weights": test_results["weights_ratio"], + "requests": test_results["requests_ratio"], + "d_weights": domains_weight_ratio, + "d_requests": domains_req_ratio, + "har": har_id, + "source": source}) @restrict("GET") def harviewer(self): """HAR Viewer iframe""" # HAR Viewer customization via cookie - response.set_cookie("phaseInterval", "-1", max_age=365 * 24 * 3600) + response.set_cookie("phaseInterval", "-1", max_age=365*24*3600 ) return render("/harviewer.html") - + @restrict("GET") def deleterun(self): """Controller for deletion of tests""" @@ -299,42 +285,40 @@ def deleterun(self): mode = request.GET["mode"] if request.GET["all"] == "true": - del_all = True + all = True else: - del_all = False - + all = False + # Remove document from collection if mode == "label": - if del_all: + if all: mdb_handler.collection.remove({"label": label}) else: - mdb_handler.collection.remove({"label": label, - "timestamp": timestamp}) + mdb_handler.collection.remove({"label": label, "timestamp": timestamp}) count = mdb_handler.collection.find({"label": label}).count() else: - if del_all: + if all: mdb_handler.collection.remove({"url": label}) else: - mdb_handler.collection.remove({"url": label, - "timestamp": timestamp}) + mdb_handler.collection.remove({"url": label, "timestamp":timestamp}) count = mdb_handler.collection.find({"url": label}).count() if count: - return "details?" + mode + "=" + label + return ("details?" + mode + "=" + label) else: - return "/" + return ("/") def upload_rest(function): @functools.wraps(function) def wrapper(*args): result, ext = function(*args) - if result: + if result == True: try: if request.headers["automated"] == "true": return "Successful" except KeyError: - redirect(h.url_for('/results/details') + "?label=" + ext) + redirect("/results/details?label=" + ext) else: try: if request.headers["automated"] == "true": @@ -355,7 +339,7 @@ def upload(self): har = HAR(request.POST["file"].value) except: har = HAR(request.POST["file"]) - + # Analysis of uploaded data if har.parsing_status == "Successful": # Parsing imported HAR file @@ -363,41 +347,45 @@ def upload(self): har.analyze() except Exception as error: return False, ": ".join([type(error).__name__, error.message]) - + # Evaluate Page Speed scores if config["app_conf"]["ps_enabled"] == "true": scores = self._get_pagespeed_scores(har.har) else: scores = dict([("Total Score", 100)]) - + # Add document to collection - timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) - - result = {"label": har.label, - "url": har.url, - "timestamp": timestamp, - "full_load_time": har.full_load_time, - "onload_event": har.onload_event, - "start_render_time": har.start_render_time, - "time_to_first_byte": har.time_to_first_byte, - "total_dns_time": har.total_dns_time, - "total_transfer_time": har.total_transfer_time, - "total_server_time": har.total_server_time, - "avg_connecting_time": har.avg_connecting_time, - "avg_blocking_time": har.avg_blocking_time, - "total_size": har.total_size, - "text_size": har.text_size, - "media_size": har.media_size, - "cache_size": har.cache_size, - "requests": har.requests, - "redirects": har.redirects, - "bad_requests": har.bad_requests, - "domains": len(har.domains), - "ps_scores": scores, - "har": har.origin, - "weights_ratio": har.weight_ratio(), - "requests_ratio": har.req_ratio(), - "domains_ratio": har.domains} + + timestamp = har.har['log']['pages'][0]['startedDateTime'][0:19] + timestamp = timestamp.replace("T", " ") + + result = { "label": har.label, + "url": har.url, + "timestamp": timestamp, + "full_load_time": har.full_load_time, + "onload_event": har.onload_event, + "start_render_time": har.start_render_time, + "time_to_first_byte": har.time_to_first_byte, + "total_dns_time": har.total_dns_time, + "total_transfer_time": har.total_transfer_time, + "total_server_time": har.total_server_time, + "total_download_time": har.total_download_time, + "avg_connecting_time": har.avg_connecting_time, + "avg_blocking_time": har.avg_blocking_time, + "throughput": har.throughput, + "total_size": har.total_size, + "text_size": har.text_size, + "media_size": har.media_size, + "cache_size": har.cache_size, + "requests": har.requests, + "redirects": har.redirects, + "bad_requests": har.bad_requests, + "domains": len(har.domains), + "ps_scores": scores, + "har": har.origin, + "weights_ratio": har.weight_ratio(), + "requests_ratio": har.req_ratio(), + "domains_ratio": har.domains} # MongoDB handler mdb_handler = MongoDB() @@ -416,8 +404,8 @@ def _get_pagespeed_scores(self, har): temp_store = config["app_conf"]["temp_store"] filename = os.path.join(temp_store, hashname) - with open(filename, "w") as fh: - fh.write(json.dumps(har)) + with open(filename, "w") as file: + file.write(json.dumps(har)) # STDOUT,STDERR os_type = platform.system() @@ -435,15 +423,15 @@ def _get_pagespeed_scores(self, har): outfile = filename + ".out" - os.system(pagespeed_bin + - " -input_file " + filename + - " -output_format formatted_json" + - " -output_file " + outfile + - std_out) + os.system(pagespeed_bin + \ + " -input_file " + filename + \ + " -output_format formatted_json" + \ + " -output_file " + outfile + \ + std_out) # Output report (JSON) - with open(outfile, "r") as fh: - output = json.loads(fh.read()) + with open(outfile, "r") as file: + output = json.loads(file.read()) # Final scores scores = dict() @@ -458,18 +446,17 @@ def download(self): """Return serialized HAR file""" # Parameters from GET request - har_id = request.GET["id"] + id = request.GET["id"] # Read HAR file from disk - filename = os.path.join(config["app_conf"]["temp_store"], har_id) - with open(filename, "r") as fh: - data = fh.read() + filename = os.path.join(config["app_conf"]["temp_store"], id) + with open(filename, "r") as file: + data = file.read() # JSON to JSON-P data = "onInputData(" + data + ");" # Add content type header - response.content_type = mimetypes.guess_type(filename)[0] or \ - "text/plain" + response.content_type = mimetypes.guess_type(filename)[0] or "text/plain" return data From 4fd2c07863faf631c61d5c8ad9c6b907ea7b8edb Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:40:07 -0700 Subject: [PATCH 07/88] Added 'source' to be a link to the source that generated the har file --- harstorage/templates/details/core.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html index a22d766..b314292 100644 --- a/harstorage/templates/details/core.html +++ b/harstorage/templates/details/core.html @@ -42,6 +42,7 @@
          Text Files:
          n/a
          Media Files:
          n/a
          Cache Size:
          +
          Source:
          Requests:
          n/a
          @@ -49,7 +50,7 @@
          Bad Requests:
          n/a
          Domains:
          n/a
          -
          +
          @@ -86,4 +87,4 @@
          ${jsloader.html()} -${footer.html()} +${footer.html()} \ No newline at end of file From 6606f7c352ccd78d2a8eda30d994c60803ab4704 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 8 Sep 2014 11:41:14 -0700 Subject: [PATCH 08/88] Removed ignore of .py files as I'm making edits to these --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index d150bfb..aff50c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -*.py[cod] # C extensions *.so From 8cfe14d0afaac7bd5044bbfa08d52429678b2659 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 10 Sep 2014 11:55:24 -0700 Subject: [PATCH 09/88] Updated to read and display a source URL if available --- harstorage/controllers/results.py | 21 +++++++++++++----- harstorage/public/scripts/harstorage.js | 29 ++++++++++--------------- harstorage/templates/details/core.html | 3 ++- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index b69da0b..8f33599 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -6,7 +6,9 @@ import re import functools import platform - +import logging +logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO) +logger = logging.getLogger(__name__) from pylons import request, response, tmpl_context as c from pylons import config from pylons.controllers.util import redirect @@ -22,6 +24,7 @@ class ResultsController(BaseController): """ Core controller of repository """ + logger = logging.getLogger('logger_root') def __before__(self): """Define version of static content""" @@ -217,6 +220,16 @@ def runinfo(self): domains_req_ratio[hostname] = value[0] domains_weight_ratio[hostname] = value[1] + har = json.loads(test_results["har"]) + source = '' + total_download_time = 0 + + if 'total_download_time' in test_results: + total_download_time = test_results["total_download_time"] + + if 'source' in har["log"]["creator"]: + source = har["log"]["creator"]["source"] + # Summary stats summary = { "full_load_time": test_results["full_load_time"], "onload_event": test_results["onload_event"], @@ -225,7 +238,7 @@ def runinfo(self): "total_dns_time": test_results["total_dns_time"], "total_transfer_time": test_results["total_transfer_time"], "total_server_time": test_results["total_server_time"], - "total_download_time": test_results["total_download_time"], + "total_download_time": total_download_time, "avg_connecting_time": test_results["avg_connecting_time"], "avg_blocking_time": test_results["avg_blocking_time"], "total_size": test_results["total_size"], @@ -245,10 +258,6 @@ def runinfo(self): # Data for HAR Viewer har_id = str(test_results["_id"]) - currentHar = test_results["har"] - - source = str(currentHar['log']['creator']['source']) - filename = os.path.join(config["app_conf"]["temp_store"], har_id) with open(filename, "w") as file: file.write(test_results["har"].encode("utf-8")) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index f3a10dc..925f8f5 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -32,14 +32,6 @@ if (!Array.prototype.indexOf) { */ var HARSTORAGE = HARSTORAGE || {}; - -/* - * Base url to be used when generating urls - */ -var base_url = $('#base-url').text(); -HARSTORAGE.base_url = base_url - - /* * Time metrics */ @@ -218,7 +210,7 @@ HARSTORAGE.Timeline.prototype.draw = function(points) { ] } }, - url: HARSTORAGE.base_url + "/chart/export", + url: "/chart/export", filename: "timeline", width: 960 }, @@ -310,7 +302,7 @@ HARSTORAGE.Histogram.prototype.draw = function(points, title) { ] } }, - url: HARSTORAGE.base_url + "/chart/export", + url: "/chart/export", filename: "histogram", width: 960 }, @@ -392,7 +384,7 @@ HARSTORAGE.Columns.prototype.draw = function(points, chart_type) { ] } }, - url: HARSTORAGE.base_url + "/chart/export", + url: "/chart/export", filename: "superposed", width: 960 }, @@ -467,7 +459,7 @@ HARSTORAGE.RunInfo = function(mode, label, query, histo) { if (query !== "None") { agg_btn.style.display = "inline"; agg_btn.onclick = function() { - location.href = HARSTORAGE.base_url + query.replace(/amp;/g,"") + "&chart=column&table=true"; + location.href = query.replace(/amp;/g,"") + "&chart=column&table=true"; }; } @@ -477,7 +469,7 @@ HARSTORAGE.RunInfo = function(mode, label, query, histo) { if (histo === "true") { histo_btn.style.display = "inline"; histo_btn.onclick = function() { - location.href = HARSTORAGE.base_url + "/superposed/histogram?label=" + label + "&metric=full_load_time"; + location.href = "/superposed/histogram?label=" + label + "&metric=full_load_time"; }; } }; @@ -523,7 +515,7 @@ HARSTORAGE.RunInfo.prototype.resources = function (div, title, hash, units, widt ] } }, - url: HARSTORAGE.base_url + "/chart/export", + url:"/chart/export", filename: "resources", width: width }, @@ -642,7 +634,6 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { // Dynamic data this.json = []; - // Show Ajax spinner this.spinner.style.display = "block"; @@ -685,6 +676,9 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { that.json = JSON.parse(that.xhr.responseText); that.cache[that.URI] = that.json; } + + var sourceUrl = that.formatter(that.json.source, "string"); + var source = ''+sourceUrl+''; // Summary $("#full-load-time").html(that.formatter(that.json.summary.full_load_time, "ms")); @@ -697,6 +691,7 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { $("#total-server-time").html(that.formatter(that.json.summary.total_server_time, "ms")); $("#avg-connecting-time").html(that.formatter(that.json.summary.avg_connecting_time, "ms")); $("#avg-blocking-time").html(that.formatter(that.json.summary.avg_blocking_time, "ms")); + $("#source-url").html(source); $("#total-size").html(that.formatter(that.json.summary.total_size, "kB")); $("#text-size").html(that.formatter(that.json.summary.text_size, "kB")); @@ -710,7 +705,7 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { // HAR Viewer var iframe = document.createElement("iframe"); - var url = HARSTORAGE.base_url + "/results/harviewer?inputUrl=" + HARSTORAGE.base_url + "/results/download%3Fid%3D"; + var url = "/results/harviewer?inputUrl=/results/download%3Fid%3D"; url += that.json.har; url += "&expand=true"; @@ -1217,4 +1212,4 @@ HARSTORAGE.SuperposeForm.prototype.checkbox = function(input) { var checkbox = document.getElementById(id); checkbox.checked = false; } -}; +}; \ No newline at end of file diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html index b314292..985dd03 100644 --- a/harstorage/templates/details/core.html +++ b/harstorage/templates/details/core.html @@ -36,13 +36,14 @@
          Total Server Time:
          n/a
          Avg. Connecting Time:
          n/a
          Avg. Blocking Time:
          n/a
          + +
          Source:
          Total Size:
          n/a
          Text Files:
          n/a
          Media Files:
          n/a
          Cache Size:
          -
          Source:
          Requests:
          n/a
          From 8408770ba37b48a52bb4cd8a647e3bf6b3db86b2 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 17 Sep 2014 14:43:18 -0700 Subject: [PATCH 10/88] Updated to reflact latest pagespeed_bin requirement of rule_impact vs. rule_score --- harstorage/controllers/results.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 8f33599..7543d69 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -446,7 +446,7 @@ def _get_pagespeed_scores(self, har): scores = dict() scores["Total Score"] = int(output["score"]) for rule in output["rule_results"]: - scores[rule["localized_rule_name"]] = int(rule["rule_score"]) + scores[rule["localized_rule_name"]] = int(rule["rule_impact"]) return scores From 8a0f8aa8642ae0f168a496ade45956d73db1eb19 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 10 Oct 2014 10:18:24 -0700 Subject: [PATCH 11/88] Fixing a divide by zero error when the bytes aren't set by the test engine --- harstorage/lib/HAR.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index dd50b99..1d3c1c4 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -226,8 +226,11 @@ def analyze(self): # Update domain info self.update_domain_info() - # Calculate thoughput - self.throughput = round(self.total_download_time / self.total_size, 0) + # Calculate thoughput + if self.total_size > 0: + self.throughput = round(self.total_download_time / self.total_size, 0) + else: + self.throughput = 0.0 # Label self.label = self.get_label() @@ -258,6 +261,7 @@ def analyze(self): self.cache_size = self.cache_size.to_kilobytes() self.throughput = round((self.total_size - self.cache_size) / (self.total_download_time / 1000), 0) + def weight_ratio(self): """Breakdown by size of page objects""" From acec9b7399a98103bd2c41c9683ef86e455f9e72 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 14 Oct 2014 10:03:59 -0700 Subject: [PATCH 12/88] Fixed errors for when individual requests do not contain the bytes within the HAR, to fallback to the page bytes size. Also fixed naming so that if the first URL requested isn't the same as the 'page url' we still get the correct name - can happen when using WPT scripting --- harstorage/lib/HAR.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index 1d3c1c4..8be25d8 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -195,7 +195,7 @@ def analyze(self): self.total_server_time += self.get_server_time() self.avg_connecting_time += self.get_connecting_time() self.avg_blocking_time += self.get_blocking_time() - self.total_download_time += self.get_download_time(); + self.total_download_time += self.get_download_time(); # Update Request/Page time frame self.update_timeframe() @@ -225,7 +225,10 @@ def analyze(self): # Update domain info self.update_domain_info() - + + if self.total_size == 0: + self.total_size = self.get_page_size() + # Calculate thoughput if self.total_size > 0: self.throughput = round(self.total_download_time / self.total_size, 0) @@ -381,9 +384,11 @@ def get_time_to_first_byte(self): def get_response_size(self): compressed_size = Bytes(max(self.entry["response"]["bodySize"], 0)) if compressed_size == 0: - return Bytes(self.entry["response"]["content"]["size"]) - else: - return compressed_size + compressed_size = Bytes(self.entry["response"]["content"]["size"]) + return compressed_size + + def get_page_size(self): + return Bytes(self.har["log"]["pages"][0]["_bytesIn"]) def is_text(self): mime_type = self.entry["response"]["content"]["mimeType"].partition(";")[0] @@ -445,7 +450,7 @@ def get_label(self): return self.har["log"]["pages"][0]["id"] def get_url(self): - return self.har["log"]["entries"][0]["request"]["url"][:512] + return self.har["log"]["pages"][0]["_URL"][:512].replace("&", "&") def get_number_of_requests(self): return len(self.har["log"]["entries"]) From 42b9673d2b3faf984ba693cb91529a78566c9ca7 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 15 Oct 2014 15:04:23 -0700 Subject: [PATCH 13/88] updated formatting --- harstorage/lib/HAR.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index 8be25d8..9d3345f 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -165,10 +165,10 @@ def init_variables(self): self.total_dns_time = 0.0 self.total_transfer_time = 0.0 self.total_server_time = 0.0 - self.total_download_time = 0.0 + self.total_download_time = 0.0 self.avg_connecting_time = 0.0 self.avg_blocking_time = 0.0 - self.throughput = 0.0 + self.throughput = 0.0 self.total_size = Bytes(0) self.text_size = Bytes(0) @@ -195,7 +195,7 @@ def analyze(self): self.total_server_time += self.get_server_time() self.avg_connecting_time += self.get_connecting_time() self.avg_blocking_time += self.get_blocking_time() - self.total_download_time += self.get_download_time(); + self.total_download_time += self.get_download_time(); # Update Request/Page time frame self.update_timeframe() From 1b73cb0285c62991241c055447f47dda0d1023b1 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Wed, 5 Nov 2014 10:48:02 -0500 Subject: [PATCH 14/88] update method of getting base_url --- harstorage/public/scripts/harstorage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index f3a10dc..e2238ec 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -36,7 +36,7 @@ var HARSTORAGE = HARSTORAGE || {}; /* * Base url to be used when generating urls */ -var base_url = $('#base-url').text(); +var base_url = window.location.protocol+"//"+window.location.host; HARSTORAGE.base_url = base_url From de9dae1ea861d9d359d7de82198ec0e9530207b8 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 10 Nov 2014 14:52:42 -0500 Subject: [PATCH 15/88] add requirements file --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2da7f75 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pylons==1.0 +pymongo==2.7.2 +webob==0.9.8 From 7c67eac7ddcd14ad4ecdf693d7675d86ea04e03a Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 10 Nov 2014 12:06:08 -0800 Subject: [PATCH 16/88] Removed bad harPreview.js. Also added in new filter labels for summary page --- harstorage/lib/HAR.py | 5 ++++- harstorage/public/scripts/harviewer/harPreview.js | 1 - harstorage/templates/home/core.html | 5 ++++- harstorage/templates/home/jsloader.html | 7 ++++++- harstorage/templates/home/labels.html | 11 +++++++++++ 5 files changed, 25 insertions(+), 4 deletions(-) delete mode 100644 harstorage/public/scripts/harviewer/harPreview.js create mode 100644 harstorage/templates/home/labels.html diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index 9d3345f..ed2d835 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -447,7 +447,10 @@ def is_bad_request(self): return True def get_label(self): - return self.har["log"]["pages"][0]["id"] + if 'label' in self.har["log"]["pages"][0]: + return self.har["log"]["pages"][0]["label"] + else: + return self.har["log"]["pages"][0]["id"] def get_url(self): return self.har["log"]["pages"][0]["_URL"][:512].replace("&", "&") diff --git a/harstorage/public/scripts/harviewer/harPreview.js b/harstorage/public/scripts/harviewer/harPreview.js deleted file mode 100644 index 1076136..0000000 --- a/harstorage/public/scripts/harviewer/harPreview.js +++ /dev/null @@ -1 +0,0 @@ -require.def("core/lib",["core/trace"],function(a){var b={},c=navigator.userAgent.toLowerCase();b.isFirefox=/firefox/.test(c),b.isOpera=/opera/.test(c),b.isWebkit=/webkit/.test(c),b.isSafari=/webkit/.test(c),b.isIE=/msie/.test(c)&&!/opera/.test(c),b.isIE6=/msie 6/i.test(navigator.appVersion),b.browserVersion=(c.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],b.isIElt8=b.isIE&&b.browserVersion-0<8,b.extend=function d(a,c){var d={};b.append(d,a),b.append(d,c);return d},b.append=function(a,b){for(var c in b)a[c]=b[c];return a},b.bind=function(){var a=b.cloneArray(arguments),c=a.shift(),d=a.shift();return function(){return c.apply(d,b.arrayInsert(b.cloneArray(a),0,arguments))}},b.bindFixed=function(){var a=b.cloneArray(arguments),c=a.shift(),d=a.shift();return function(){return c.apply(d,a)}},b.dispatch=function(b,c,d){for(var e=0;b&&e=a.top&&c<=a.top+a.height&&b>=a.left&&b<=a.left+a.width},b.cloneArray=function(a,b){var c=[];if(b)for(var d=0;d2?2:b,b=b<-1?-1:b;if(b==-1)return a+" B";var c=Math.pow(10,b);return a==-1||a==undefined?"?":a==0?"0":a<1024?a+" B":a<1048576?Math.round(a/1024*c)/c+" KB":Math.round(a/1048576*c)/c+" MB"},b.formatTime=function(a){return a==-1?"-":a<1e3?a+"ms":a<6e4?Math.ceil(a/10)/100+"s":Math.ceil(a/6e4*100)/100+"m"},b.formatNumber=function(a){a+="";var b=a.split("."),c=b[0],d=b.length>1?"."+b[1]:"",e=/(\d+)(\d{3})/;while(e.test(c))c=c.replace(e,"$1 $2");return c+d},b.formatString=function(a){var c=b.cloneArray(arguments),a=c.shift();for(var d=0;d0?"-":"+")+b(Math.abs(e))+":"+b(Math.abs(f));return c+g},b.getFileName=function(c){try{var d=b.splitURLBase(c);return d.name}catch(e){a.log(unescape(c))}return c},b.getFileExtension=function(a){if(!a)return null;var b=a.indexOf("?");b!=-1&&(a=a.substr(0,b));var c=a.lastIndexOf(".");return a.substr(c+1)},b.splitURLBase=function(a){if(b.isDataURL(a))return b.splitDataURL(a);return b.splitURLTrue(a)},b.isDataURL=function(a){return a&&a.substr(0,5)=="data:"},b.splitDataURL=function(a){var c=a.indexOf(":",3);if(c!=4)return!1;var d=a.indexOf(",",c+1);if(d"+l}else e.name=k.name,e.path=k.path}else e.hasOwnProperty("path")||(e.path="data:"),e.hasOwnProperty("name")||(e.name=decodeURIComponent(e.encodedContent.substr(0,200)).replace(/\s*$/,""));return e},b.splitURLTrue=function(a){var b=/:\/{1,3}(.*?)\/([^\/]*?)\/?($|\?.*)/,c=b.exec(a);return c?c[2]?{path:c[1],name:c[2]+c[3]}:{path:c[1],name:c[1]}:{name:a,path:a}},b.getURLParameter=function(a){var b=window.location.search.substring(1),c=b.split("&");for(var d=0;dd&&!c&&(k=b.$STR("LargeData")),e.push({name:f(j),value:f(k)})}else{var j=g[h];e.push({name:f(j),value:""})}}catch(l){}e.sort(function(a,b){return a.name<=b.name?-1:1});return e},b.getBody=function(a){if(a.body)return a.body;var b=a.getElementsByTagName("body")[0];if(b)return b;return null},b.getHead=function(a){return a.getElementsByTagName("head")[0]},b.getAncestorByClass=function(a,c){for(var d=a;d;d=d.parentNode)if(b.hasClass(d,c))return d;return null},b.$=function(){return b.getElementByClass.apply(this,arguments)},b.getElementByClass=function(a,c){if(!a)return null;var d=b.cloneArray(arguments);d.splice(0,1);for(var e=a.firstChild;e;e=e.nextSibling){var f=b.cloneArray(d);f.unshift(e);if(b.hasClass.apply(this,f))return e;var g=b.getElementByClass.apply(this,f);if(g)return g}return null},b.getElementsByClass=function(a,c){function f(a,c,d){for(var e=a.firstChild;e;e=e.nextSibling){var g=b.cloneArray(c);g.unshift(e),b.hasClass.apply(null,g)&&d.push(e),f(e,c,d)}}if(a.querySelectorAll){var d=b.cloneArray(arguments);d.shift();var e="."+d.join(".");return a.querySelectorAll(e)}var g=[],d=b.cloneArray(arguments);d.shift(),f(a,d,g);return g},b.getChildByClass=function(a){for(var c=1;c=0){var d=b.length;a.className=a.className.substr(0,c-1)+a.className.substr(c+d)}}},b.toggleClass=function(a,c){if(b.hasClass(a,c)){b.removeClass(a,c);return!1}b.setClass(a,c);return!0},b.setClassTimed=function(a,c,d){d||(d=1300),a.__setClassTimeout?clearTimeout(a.__setClassTimeout):b.setClass(a,c),a.__setClassTimeout=setTimeout(function(){delete a.__setClassTimeout,b.removeClass(a,c)},d)},b.trim=function(a){return a.replace(/^\s*|\s*$/g,"")},b.wrapText=function(a,c){var d=/[^A-Za-z_$0-9'"-]/,e=[],f=100,g=b.splitLines(a);for(var h=0;hf){var j=d.exec(i.substr(f,100)),k=f+(j?j.index:0),l=i.substr(0,k);i=i.substr(k),c||e.push("
          "),e.push(c?l:b.escapeHTML(l)),c||e.push("
          ")}c||e.push("
          "),e.push(c?i:b.escapeHTML(i)),c||e.push("
          ")}return e.join(c?"\n":"")},b.insertWrappedText=function(a,c,d){c.innerHTML="
          "+b.wrapText(a,d)+"
          "},b.splitLines=function(a){var b=/\r\n|\r|\n/;if(!a)return[];if(a.split)return a.split(b);var c=a+"",d=c.split(b);return d},b.getPrettyDomain=function(a){var b=/[^:]+:\/{1,3}(www\.)?([^\/]+)/.exec(a);return b?b[2]:""},b.escapeHTML=function(a){function b(a){switch(a){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case'"':return"""}return"?"}return String(a).replace(/[<>&"']/g,b)},b.cropString=function(a,c){a=a+"";if(c)var d=c/2;else var d=50;return a.length>c?b.escapeNewLines(a.substr(0,d)+"..."+a.substr(a.length-d)):b.escapeNewLines(a)},b.escapeNewLines=function(a){return a.replace(/\r/g,"\\r").replace(/\n/g,"\\n")},b.cloneJSON=function(b){if(b==null||typeof b!="object")return b;try{var c=b.constructor();for(var d in b)c[d]=cloneJSON(b[d]);return c}catch(e){a.exception(b)}return null},b.getOverflowParent=function(a){for(var b=a.parentNode;b;b=b.offsetParent)if(b.scrollHeight>b.offsetHeight)return b},b.getElementBox=function(a){var c={};if(a.getBoundingClientRect){var d=a.getBoundingClientRect(),e=b.isIE?document.body.clientTop||document.documentElement.clientTop:0,f=b.getWindowScrollPosition();c.top=Math.round(d.top-e+f.top),c.left=Math.round(d.left-e+f.left),c.height=Math.round(d.bottom-d.top),c.width=Math.round(d.right-d.left)}else{var g=b.getElementPosition(a);c.top=g.top,c.left=g.left,c.height=a.offsetHeight,c.width=a.offsetWidth}return c},b.getElementPosition=function(a){var b=0,c=0;do b+=a.offsetLeft,c+=a.offsetTop;while(a=a.offsetParent);return{left:b,top:c}},b.getWindowSize=function(){var a=0,b=0,c;typeof window.innerWidth=="number"?(a=window.innerWidth,b=window.innerHeight):(c=document.documentElement)&&(c.clientHeight||c.clientWidth)?(a=c.clientWidth,b=c.clientHeight):(c=document.body)&&(c.clientHeight||c.clientWidth)&&(a=c.clientWidth,b=c.clientHeight);return{width:a,height:b}},b.getWindowScrollSize=function(){var a=0,c=0,d;!b.isIEQuiksMode&&(d=document.documentElement)&&(d.scrollHeight||d.scrollWidth)&&(a=d.scrollWidth,c=d.scrollHeight),(d=document.body)&&(d.scrollHeight||d.scrollWidth)&&(d.scrollWidth>a||d.scrollHeight>c)&&(a=d.scrollWidth,c=d.scrollHeight);return{width:a,height:c}},b.getWindowScrollPosition=function(){var a=0,b=0,c;typeof window.pageYOffset=="number"?(a=window.pageYOffset,b=window.pageXOffset):(c=document.body)&&(c.scrollTop||c.scrollLeft)?(a=c.scrollTop,b=c.scrollLeft):(c=document.documentElement)&&(c.scrollTop||c.scrollLeft)&&(a=c.scrollTop,b=c.scrollLeft);return{top:a,left:b}},b.scrollIntoCenterView=function(a,c,d,e){if(a){c||(c=b.getOverflowParent(a));if(!c)return;var f=b.getClientOffset(a);if(!e){var g=f.y-c.scrollTop,h=c.scrollTop+c.clientHeight-(f.y+a.offsetHeight);if(g<0||h<0){var i=f.y-c.clientHeight/2;c.scrollTop=i}}if(!d){var j=f.x-c.scrollLeft,k=c.scrollLeft+c.clientWidth-(f.x+a.clientWidth);if(j<0||k<0){var l=f.x-c.clientWidth/2;c.scrollLeft=l}}}},b.getClientOffset=function(a){function b(a,c,d){var e=a.offsetParent,f=d.getComputedStyle(a,"");a.offsetLeft&&(c.x+=a.offsetLeft+parseInt(f.borderLeftWidth)),a.offsetTop&&(c.y+=a.offsetTop+parseInt(f.borderTopWidth)),e?e.nodeType==1&&b(e,c,d):a.ownerDocument.defaultView.frameElement&&b(a.ownerDocument.defaultView.frameElement,c,a.ownerDocument.defaultView)}var c={x:0,y:0};if(a){var d=a.ownerDocument.defaultView;b(a,c,d)}return c},b.addStyleSheet=function(a,c){if(!a.getElementById(c)){var d=a.createElement("link");d.type="text/css",d.rel="stylesheet",d.href=c,d.setAttribute("id",c);var e=b.getHead(a);e.appendChild(d)}},b.selectElementText=function(a,b,c){var d=window,e=d.document;if(d.getSelection&&e.createRange){var f=d.getSelection(),g=e.createRange();g.setStart(a,b),g.setEnd(a,c),f.removeAllRanges(),f.addRange(g)}else e.body.createTextRange&&(g=e.body.createTextRange(),g.moveToElementText(a),g.select())};return b}),require.def("core/cookies",["core/lib"],function(a){var b={getCookie:function(b){var c=document.cookie.split(";");for(var d=0;d-1&&(q=c[b]);b--){d=a[q];if(d===!0||d===1)d=e(j+q+"/"+l);require.mixin(o,d)}f(o)})})}})}(),define("nls/requestList",{root:{fromCache:"From Cache",menuBreakLayout:"Break Timeline Layout",menuOpenRequestInWindow:"Open Request in New Window",menuOpenResponseInWindow:"Open Response in New Window",request:"Request",requests:"Requests",tooltipSize:"%S (%S bytes)",tooltipZippedSize:"%S (%S bytes) - compressed",tooltipUnzippedSize:"%S (%S bytes) - uncompressed",unknownSize:"Unknown size","request.Started":"Request start time since the beginning","request.phases.label":"Request phases start and elapsed time relative to the request start:","request.phase.Resolving":"DNS Lookup","request.phase.Connecting":"Connecting","request.phase.Blocking":"Blocking","request.phase.Sending":"Sending","request.phase.Waiting":"Waiting","request.phase.Receiving":"Receiving","request.timings.label":"Event timing relative to the request start:",ContentLoad:"DOM Loaded",WindowLoad:"Page Loaded","page.event.Load":"Page Loaded",menuBreakTimeline:"Break Timeline Layout",menuOpenRequest:"Open Request in New Window",menuOpenResponse:"Open Response in New Window"}}),require.def("preview/jsonSchema",[],function(){var a={validate:function(a,b){return this._validate(a,b,!1)},checkPropertyChange:function(a,b,c){return this._validate(a,b,c||"property")},_validate:function(a,b,c){function f(a,b,f,g){if(typeof b=="object"){(typeof a!="object"||a instanceof Array)&&d.push({property:f,message:"an object is required"});for(var h in b)if(b.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")){var i=a[h],j=b[h];e(i,j,f,h)}}for(h in a){a.hasOwnProperty(h)&&(h.charAt(0)!="_"||h.charAt(1)!="_")&&b&&!b[h]&&g===!1&&d.push({property:f,message:typeof i+"The property "+h+" is not defined in the schema and the schema does not allow additional properties"});var k=b&&b[h]&&b[h].requires;k&&!(k in a)&&d.push({property:f,message:"the presence of the property "+h+" requires that "+k+" also be present"}),i=a[h],b&&typeof b=="object"&&!(h in b)&&e(i,g,f,h),!c&&i&&i.$schema&&(d=d.concat(e(i,i.$schema,f,h)))}return d}function e(a,b,g,h){function k(a,b){if(a){if(typeof a=="string"&&a!="any"&&(a=="null"?b!==null:typeof b!=a)&&!(b instanceof Array&&a=="array")&&(a!="integer"||b%1!==0))return[{property:g,message:typeof b+" value found, but a "+a+" is required"}];if(a instanceof Array){var c=[];for(var f=0;fb.maxItems&&j("There must be a maximum of "+b.maxItems+" in the array")}else b.properties&&d.concat(f(a,b.properties,g,b.additionalProperties));b.pattern&&typeof a=="string"&&!a.match(b.pattern)&&j("does not match the regex pattern "+b.pattern),b.maxLength&&typeof a=="string"&&a.length>b.maxLength&&j("may only be "+b.maxLength+" characters long"),b.minLength&&typeof a=="string"&&a.lengtha&&j("must have a minimum value of "+b.minimum),typeof b.maximum!==undefined&&typeof a==typeof b.maximum&&b.maximum=32&&b<127||b==10||b==13)return a.charAt(0);var c=b.toString(16).toUpperCase();while(c.length<4)c="0"+c;return"\\u"+c}).join("");return a}function g(){this.input=null}g.prototype={append:function(a){{if(a){if(this.input){if(!a.log.pages){f.error("Import of additional data without a page is not yet supported.");return null}for(var b=0;b0?a[0]:null},getPageEntries:function(a){return g.getPageEntries(this.input,a)},getAllEntries:function(a){return this.input?this.input.log.entries:[]},getParentPage:function(a){return g.getParentPage(this.input,a)},importPage:function(a,b){var c=this.getUniquePageID(a.id),d=a.id;a.id=c,this.input.log.pages.push(a);for(var e=0;e0)&&h.length>0)return this.loadRemoteArchive(h,f,b,c);var j=a.getURLParameter("path");if(j)return this.loadLocalArchive(j,b,c)},loadExample:function(a,b){var c=document.location.href,d=c.indexOf("?");document.location=c.substr(0,d)+"?path="+a,e.setCookie("timeline",!0),e.setCookie("stats",!0)},loadLocalArchive:function(a,b,c){$.ajax({url:a,context:this,success:function(a){b(a)},error:function(a,b){c(a,b)}});return!0},loadRemoteArchive:function(a,b,c,d){if(!a.length)return!1;var e=a.shift();b||(b="onInputData"),$.ajax({url:e,context:this,dataType:"jsonp",jsonp:"callback",jsonpCallback:b,success:function(e){c&&c(e);if(a.length){var f=this;setTimeout(function(){f.loadRemoteArchive(a,b,c,d)},300)}},error:function(a,b){d&&d(a,b)}});return!0},load:function(a,b,c,d,e,f){function h(b,c){a.onLoadError&&a.onLoadError(b,c),f&&f.call(a,b,c)}function g(b){a.appendPreview&&a.appendPreview(b),e&&e.call(a,b)}return c?this.loadRemoteArchive([b],d,g,h):this.loadLocalArchive(b,g,h)}};return g}),define("nls/requestBody",{root:{RequestHeaders:"Request Headers",ResponseHeaders:"Response Headers",RequestCookies:"Request Cookies",ResponseCookies:"Response Cookies",URLParameters:"Params",Headers:"Headers",Post:"Post",Put:"Put",Cookies:"Cookies",Response:"Response",Cache:"Cache",HTML:"HTML",DataURL:"Data URL"}}),require.def("domplate/tabView",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var TabViewTempl=domplate({tag:TABLE({"class":"tabView",cellpadding:0,cellspacing:0,_repObject:"$tabView"},TBODY(TR({"class":"tabViewRow"},TD({"class":"tabViewCol",valign:"top"},TAG("$tabList",{tabView:"$tabView"}))))),tabList:DIV({"class":"tabViewBody",onclick:"$onClickTab"},DIV({"class":"$tabView.id\\Bar tabBar"}),DIV({"class":"$tabView.id\\Bodies tabBodies"})),tabHeaderTag:A({"class":"$tab.id\\Tab tab",view:"$tab.id",_repObject:"$tab"},"$tab.label"),tabBodyTag:DIV({"class":"tab$tab.id\\Body tabBody",_repObject:"$tab"}),hideTab:function(a){return!1},onClickTab:function(a){var b=Lib.fixEvent(a),c=this.getTabView(b.target);c.onClickTab(b)},getTabView:function(a){var b=Lib.getAncestorByClass(a,"tabView");return b.repObject}});function TabView(a){this.id=a,this.tabs=[],this.listeners=[],this.tabBarVisibility=!0}TabView.prototype={appendTab:function(a){this.tabs.push(a),a.tabView=this;return a},removeTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a){this.tabs.splice(b,1);break}}},getTab:function(a){for(var b in this.tabs){var c=this.tabs[b];if(c.id==a)return c}},selectTabByName:function(a){var b=Lib.getElementByClass(this.element,a+"Tab");b&&this.selectTab(b)},showTabBar:function(a){this.element?a?this.element.removeAttribute("hideTabBar"):this.element.setAttribute("hideTabBar","true"):this.tabBarVisibility=a},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)},onClickTab:function(a){var b=Lib.getAncestorByClass(a.target,"tab");b&&this.selectTab(b)},selectTab:function(a){if(Lib.hasClass(a,"tab")){if(Lib.hasClass(a,"selected"))return;var b=a.getAttribute("view");if(!b)return;var c=Lib.getAncestorByClass(a,"tabViewBody");c.selectedTab&&(c.selectedTab.removeAttribute("selected"),c.selectedBody.removeAttribute("selected"),Lib.removeClass(c.selectedTab,"selected"),Lib.removeClass(c.selectedBody,"selected"));var d=Lib.getElementByClass(c,"tab"+b+"Body");d||Trace.error("TabView.selectTab; Missing tab body",a),c.selectedTab=a,c.selectedBody=d,c.selectedTab.setAttribute("selected","true"),c.selectedBody.setAttribute("selected","true"),Lib.setClass(c.selectedBody,"selected"),Lib.setClass(c.selectedTab,"selected"),this.updateTabBody(c,b)}},updateTabBody:function(a,b){var c=a.selectedTab.repObject;if(!c._body._updated){c._body._updated=!0,c.bodyTag&&c.bodyTag.replace({tab:c},c._body),c&&c.onUpdateBody&&c.onUpdateBody(this,c._body);for(var d=0;dAbout...

          dp.SyntaxHighlighter

          Version: {V}

          http://www.dreamprojections.com/syntaxhighlighter

          ©2004-2007 Alex Gorbatchev.
          '},ClipboardSwf:null,Version:"1.5.1"}};a.SyntaxHighlighter=a.sh,a.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function(a){return a.collapse},func:function(a,b){a.parentNode.removeChild(a),b.div.className=b.div.className.replace("collapsed","")}},ViewSource:{label:"view plain",func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/'+d+""),e.document.close()}},CopyToClipboard:{label:"copy to clipboard",check:function(){return window.clipboardData!=null||a.sh.ClipboardSwf!=null},func:function(b,c){var d=a.sh.Utils.FixForBlogger(c.originalCode).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");if(window.clipboardData)window.clipboardData.setData("text",d);else if(a.sh.ClipboardSwf!=null){var e=c.flashCopier;e==null&&(e=document.createElement("div"),c.flashCopier=e,c.div.appendChild(e)),e.innerHTML=''}alert("The code is in your clipboard now")}},PrintSource:{label:"print",func:function(b,c){var d=document.createElement("IFRAME"),e=null;d.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;",document.body.appendChild(d),e=d.contentWindow.document,a.sh.Utils.CopyStyles(e,window.document),e.write('
          '+c.div.innerHTML+"
          "),e.close(),d.contentWindow.focus(),d.contentWindow.print(),alert("Printing..."),document.body.removeChild(d)}},About:{label:"?",func:function(b){var c=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"),d=c.document;a.sh.Utils.CopyStyles(d,window.document),d.write(a.sh.Strings.AboutDialog.replace("{V}",a.sh.Version)),d.close(),c.focus()}}},a.sh.Toolbar.Create=function(b){var c=document.createElement("DIV");c.className="tools";for(var d in a.sh.Toolbar.Commands){var e=a.sh.Toolbar.Commands[d];if(e.check!=null&&!e.check(b))continue;c.innerHTML+='"+e.label+""}return c},a.sh.Toolbar.Command=function(b,c){var d=c;while(d!=null&&d.className.indexOf("dp-highlighter")==-1)d=d.parentNode;d!=null&&a.sh.Toolbar.Commands[b].func(c,d.highlighter)},a.sh.Utils.CopyStyles=function(a,b){var c=b.getElementsByTagName("link");for(var d=0;d')},a.sh.Utils.FixForBlogger=function(b){return a.sh.isBloggerMode==!0?b.replace(/|<br\s*\/?>/gi,"\n"):b},a.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"',"g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'","g")},a.sh.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c},a.sh.Highlighter=function(){this.noGutter=!1,this.addControls=!0,this.collapse=!1,this.tabsToSpaces=!0,this.wrapColumn=80,this.showColumns=!0},a.sh.Highlighter.SortCallback=function(a,b){if(a.indexb.index)return 1;if(a.lengthb.length)return 1;return 0},a.sh.Highlighter.prototype.CreateElement=function(a){var b=document.createElement(a);b.highlighter=this;return b},a.sh.Highlighter.prototype.GetMatches=function(b,c){var d=0,e=null;while((e=b.exec(this.code))!=null)this.matches[this.matches.length]=new a.sh.Match(e[0],e.index,c)},a.sh.Highlighter.prototype.AddBit=function(a,b){if(a!=null&&a.length!=0){var c=this.CreateElement("SPAN");a=a.replace(/ /g," "),a=a.replace(/");if(b!=null)if(/br/gi.test(a)){var d=a.split(" 
          ");for(var e=0;ec.index&&a.index/gi,"\n"),c=b.split("\n");this.addControls==!0&&this.bar.appendChild(a.sh.Toolbar.Create(this));if(this.showColumns){var d=this.CreateElement("div"),e=this.CreateElement("div"),f=10,g=1;while(g<=150)g%f==0?(d.innerHTML+=g,g+=(g+"").length):(d.innerHTML+="·",g++);e.className="columns",e.appendChild(d),this.bar.appendChild(e)}for(var g=0,h=this.firstLine;g0;h++){if(c(d[h]).length==0)continue;var i=f.exec(d[h]);i!=null&&i.length>0&&(g=Math.min(i[0].length,g))}if(g>0)for(var h=0;h0&&c.appendTab(new HeadersTab(b)),b.request.queryString&&b.request.queryString.length&&c.appendTab(new ParamsTab(b)),b.request.postData&&c.appendTab(new SentDataTab(b,b.request.method)),b.response.content.text&&b.response.content.text.length>0&&c.appendTab(new ResponseTab(b)),this.showCache(b)&&c.appendTab(new CacheTab(b)),this.showHtml(b)&&c.appendTab(new HtmlTab(b)),this.showDataURL(b)&&c.appendTab(new DataURLTab(b));var d=c.render(a);c.tabs.length>0&&c.selectTabByName(c.tabs[0].id);return d},showCache:function(a){if(!a.cache)return!1;if(!a.cache.afterRequest)return!1;if(a.category=="image")return!1;return!0},showHtml:function(a){return a.response.content.mimeType=="text/html"||a.mimeType=="application/xhtml+xml"},showDataURL:function(a){return a.request.url.indexOf("data:")==0}});function HeadersTab(a){this.file=a}HeadersTab.prototype=domplate(TabView.Tab.prototype,{id:"Headers",label:Strings.Headers,bodyTag:TABLE({"class":"netInfoHeadersText netInfoText netInfoHeadersTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.ResponseHeaders))),TR({"class":"netInfoRequestHeadersTitle"},TD({colspan:2},DIV({"class":"netInfoHeadersGroup"},Strings.RequestHeaders))))),headerDataTag:FOR("param","$headers",TR(TD({"class":"netInfoParamName"},"$param.name"),TD({"class":"netInfoParamValue"},PRE("$param|getParamValue")))),getParamValue:function(a){return Lib.wrapText(a.value,!0)},onUpdateBody:function(a,b){this.file.response.headers&&this.insertHeaderRows(b,this.file.response.headers,"Headers","ResponseHeaders"),this.file.request.headers&&this.insertHeaderRows(b,this.file.request.headers,"Headers","RequestHeaders")},insertHeaderRows:function(a,b,c,d){var e=Lib.getElementByClass(a,"netInfo"+c+"Table"),f=Lib.getElementByClass(e,"netInfo"+d+"Title");b.length?(this.headerDataTag.insertRows({headers:b},f?f:a),Lib.removeClass(f,"collapsed")):Lib.setClass(f,"collapsed")}});function ResponseTab(a){this.file=a}ResponseTab.prototype=domplate(TabView.Tab.prototype,{id:"Response",label:Strings.Response,bodyTag:DIV({"class":"netInfoResponseText netInfoText"},PRE({"class":"javascript:nocontrols:nogutter:",name:"code"})),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoResponseText");if(this.file.category=="image"){Lib.clearNode(c);var d=b.ownerDocument.createElement("img");d.src=this.file.href,c.appendChild(d,c)}else{Lib.clearNode(c.firstChild);var e=this.file.response.content.text,f=this.file.response.content.mimeType;f=="application/javascript"||f=="text/javascript"||f=="application/x-javascript"||f=="text/ecmascript"||f=="application/ecmascript"?(c.firstChild.innerHTML=e,dp.SyntaxHighlighter.HighlightAll(c.firstChild)):Lib.insertWrappedText(e,c.firstChild)}}});function ParamsTab(a){this.file=a}ParamsTab.prototype=domplate(HeadersTab.prototype,{id:"Params",label:Strings.URLParameters,bodyTag:TABLE({"class":"netInfoParamsText netInfoText netInfoParamsTable",cellpadding:0,cellspacing:0},TBODY()),onUpdateBody:function(a,b){if(this.file.request.queryString){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,this.file.request.queryString,"Params")}}});function SentDataTab(a,b){b=b.charAt(0).toUpperCase()+b.slice(1).toLowerCase(),this.file=a,this.id=b,this.label=Strings[b]}SentDataTab.prototype=domplate(HeadersTab.prototype,{bodyTag:DIV({"class":"netInfo$tab.id\\Text netInfoText"},TABLE({"class":"netInfo$tab.id\\Table",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){var c=this.file.request.postData;if(c){var d=Lib.getElementByClass(b,"netInfo"+this.id+"Text");c.mimeType=="application/x-www-form-urlencoded"?this.insertHeaderRows(d,c.params,this.id):Lib.insertWrappedText(c.text,d)}}});function CookiesTab(a){this.file=a}CookiesTab.prototype=domplate(HeadersTab.prototype,{id:"Cookies",label:Strings.Cookies,bodyTag:DIV({"class":"netInfoCookiesText netInfoText"},TABLE({"class":"netInfoCookiesTable",cellpadding:0,cellspacing:0},TBODY(TR({"class":"netInfoResponseCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.ResponseCookies))),TR({"class":"netInfoRequestCookiesTitle"},TD({colspan:2},DIV({"class":"netInfoCookiesGroup"},Strings.RequestCookies)))))),onUpdateBody:function(a,b){if(file.response.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.response.cookies,"Cookies","ResponseCookies")}if(file.request.cookies){var c=Lib.getElementByClass(b,"netInfoParamsText");this.insertHeaderRows(c,file.request.cookies,"Cookies","RequestCookies")}}});function CacheTab(a){this.file=a}CacheTab.prototype=domplate(HeadersTab.prototype,{id:"Cache",label:Strings.Cache,bodyTag:DIV({"class":"netInfoCacheText netInfoText"},TABLE({"class":"netInfoCacheTable",cellpadding:0,cellspacing:0},TBODY())),onUpdateBody:function(a,b){if(this.file.cache&&this.file.cache.afterRequest){var c=this.file.cache.afterRequest,d=[];for(var e in c)d.push({name:e,value:c[e]});this.insertHeaderRows(b,d,"Cache")}}});function HtmlTab(a){this.file=a}HtmlTab.prototype=domplate(HeadersTab.prototype,{id:"HTML",label:Strings.HTML,bodyTag:DIV({"class":"netInfoHtmlText netInfoText"},IFRAME({"class":"netInfoHtmlPreview",onload:"$onLoad"}),DIV({"class":"htmlPreviewResizer"})),onUpdateBody:function(a,b){this.preview=Lib.getElementByClass(b,"netInfoHtmlPreview");var c=parseInt(Cookies.getCookie("htmlPreviewHeight"));isNaN(c)||(this.preview.style.height=c+"px");var d=Lib.getElementByClass(b,"htmlPreviewResizer");this.resizer=new DragDrop.Tracker(d,{onDragStart:Lib.bind(this.onDragStart,this),onDragOver:Lib.bind(this.onDragOver,this),onDrop:Lib.bind(this.onDrop,this)})},onLoad:function(a){var b=Lib.fixEvent(a),c=Lib.getAncestorByClass(b.target,"tabHTMLBody").repObject;c.preview.contentWindow.document.body.innerHTML=c.file.response.content.text},onDragStart:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.setAttribute("resizingHtmlPreview","true"),this.startHeight=this.preview.clientHeight},onDragOver:function(a,b){var c=this.startHeight+a.y;this.preview.style.height=c+"px",Cookies.setCookie("htmlPreviewHeight",c)},onDrop:function(a){var b=Lib.getBody(this.preview.ownerDocument);b.removeAttribute("resizingHtmlPreview")}});function DataURLTab(a){this.file=a}DataURLTab.prototype=domplate(HeadersTab.prototype,{id:"DataURL",label:Strings.DataURL,bodyTag:DIV({"class":"netInfoDataURLText netInfoText"}),onUpdateBody:function(a,b){var c=Lib.getElementByClass(b,"netInfoDataURLText"),d=this.file.request.url;if(d.indexOf("data:image")==0){var e=b.ownerDocument.createElement("img");e.src=d,c.appendChild(e)}else Lib.insertWrappedText(unescape(d),c)}});return RequestBody}}),require.def("domplate/infoTip",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var InfoTip=Lib.extend({listeners:[],maxWidth:100,maxHeight:80,infoTipMargin:10,infoTipWindowPadding:25,tags:domplate({infoTipTag:DIV({"class":"infoTip"})}),initialize:function(){if(!$.browser.msie){var a=$("body");a.bind("mouseover",Lib.bind(this.onMouseMove,this)),a.bind("mouseout",Lib.bind(this.onMouseOut,this)),a.bind("mousemove",Lib.bind(this.onMouseMove,this));return this.infoTip=this.tags.infoTipTag.append({},Lib.getBody(document))}},showInfoTip:function(a,b,c,d,e,f){var g=Lib.getOverflowParent(b),h=c+(g?g.scrollLeft:0),i=Lib.dispatch2(this.listeners,"showInfoTip",[a,b,h,d,e,f]);if(i){var j=a.ownerDocument.documentElement,k=j.clientWidth,l=j.clientHeight;c+a.offsetWidth+this.infoTipMargin>k-this.infoTipWindowPadding?(a.style.left="auto",a.style.right=k-c+this.infoTipMargin+"px"):(a.style.left=c+this.infoTipMargin+"px",a.style.right="auto"),d+a.offsetHeight+this.infoTipMargin>l?(a.style.top=Math.max(0,l-(a.offsetHeight+this.infoTipMargin))+"px",a.style.bottom="auto"):(a.style.top=d+this.infoTipMargin+"px",a.style.bottom="auto"),a.setAttribute("active","true")}else this.hideInfoTip(a)},hideInfoTip:function(a){a&&a.removeAttribute("active")},onMouseOut:function(a){a.relatedTarget||this.hideInfoTip(this.infoTip)},onMouseMove:function(a){this.infoTip.setAttribute("multiline",!1);var b=a.clientX,c=a.clientY;this.showInfoTip(this.infoTip,a.target,b,c,a.rangeParent,a.rangeOffset)},populateTimingInfoTip:function(a,b){this.tags.colorTag.replace({rgbValue:b},a);return!0},addListener:function(a){this.listeners.push(a)},removeListener:function(a){Lib.remove(this.listeners,a)}});InfoTip.initialize();return InfoTip}}),require.def("domplate/popupMenu",["domplate/domplate","core/lib","core/trace"],function(Domplate,Lib,Trace){with(Domplate){var Controller={controllers:[],controllerContext:{label:"controller context"},initialize:function(a){this.controllers=[],this.controllerContext=a||this.controllerContext},shutdown:function(){this.removeControllers()},addController:function(){for(var a=0,b;b=arguments[a];a++){typeof b[0]=="string"&&(b[0]=$$(b[0],this.controllerContext));var c=b[2];b[2]=Lib.bind(c,this),b[3]=c,this.controllers.push(b),Lib.addEventListener.apply(this,b)}},removeController:function(){for(var a=0,b;b=arguments[a];a++)for(var c=0,d;d=this.controllers[c];c++)b[0]==d[0]&&b[1]==d[1]&&b[2]==d[3]&&Lib.removeEventListener.apply(this,d)},removeControllers:function(){for(var a=0,b;b=this.controllers[a];a++)Lib.removeEventListener.apply(this,b)}},menuItemProps={"class":"$item.className",type:"$item.type",value:"$item.value",_command:"$item.command"};Lib.isIE6&&(menuItemProps.href="javascript:void(0)");var MenuPlate=domplate({tag:DIV({"class":"popupMenu popupMenuShadow"},DIV({"class":"popupMenuContent popupMenuShadowContent"},FOR("item","$object.items|memberIterator",TAG("$item.tag",{item:"$item"})))),itemTag:A(menuItemProps,"$item.label"),checkBoxTag:A(Lib.extend(menuItemProps,{checked:"$item.checked"}),"$item.label"),radioButtonTag:A(Lib.extend(menuItemProps,{selected:"$item.selected"}),"$item.label"),groupTag:A(Lib.extend(menuItemProps,{child:"$item.child"}),"$item.label"),shortcutTag:A(menuItemProps,"$item.label",SPAN({"class":"popupMenuShortcutKey"},"$item.key")),separatorTag:SPAN({"class":"popupMenuSeparator"}),memberIterator:function(a){var b=[];for(var c=0,d=a.length;c0?a.response.status+" ":"";return b+a.response.statusText},getType:function(a){return a.response.content.mimeType},getDomain:function(a){return Lib.getPrettyDomain(a.request.url)},getSize:function(a){var b=a.response.bodySize,c=b&&b!=-1?b:a.response.content.size;return this.formatSize(c)},isExpandable:function(a){var b=a.response.headers.length>0,c=a.request.url.indexOf("data:")==0;return b||c},formatSize:function(a){return Lib.formatSize(a)},getElapsedTime:function(a){return Lib.formatTime(a.time)},onClick:function(a){var b=Lib.fixEvent(a);if(Lib.isLeftClick(a)){var c=Lib.getAncestorByClass(b.target,"netRow");c&&(this.toggleHeadersRow(c),Lib.cancelEvent(a))}else Lib.isControlClick(a)&&window.open(a.target.innerText||a.target.textContent)},toggleHeadersRow:function(a){if(Lib.hasClass(a,"isExpandable")){var b=a.repObject;Lib.toggleClass(a,"opened");if(Lib.hasClass(a,"opened")){var c=this.netInfoTag.insertRows({},a)[0];c.repObject=b;var d=new RequestBody;d.render(c.firstChild,b)}else{var c=a.nextSibling,e=Lib.getElementByClass(c,"netInfoBody");a.parentNode.removeChild(c)}}},onOpenOptions:function(a){var b=Lib.fixEvent(a);Lib.cancelEvent(a);if(Lib.isLeftClick(a)){var c=b.target,d=Lib.getAncestorByClass(c,"netRow"),e=this.getMenuItems(d),f=new Menu({id:"requestContextMenu",items:e});f.showPopup(c)}},getMenuItems:function(a){var b=a.repObject,c=a.phase,d=c.files[0]==b&&this.phases[0]==c,e=[{label:Strings.menuBreakTimeline,type:"checkbox",disabled:d,checked:c.files[0]==b&&!d,command:Lib.bind(this.breakLayout,this,a)},"-",{label:Strings.menuOpenRequest,command:Lib.bind(this.openRequest,this,b)},{label:Strings.menuOpenResponse,disabled:!b.response.content.text,command:Lib.bind(this.openResponse,this,b)}];Lib.dispatch(this.listeners,"getMenuItems",[this,e,c,b]);return e},openRequest:function(a,b){window.open(b.request.url)},openResponse:function(a,b){var c=b.response.content.text,d=b.response.content.mimeType,e=b.response.content.encoding,f="data:"+(d?d:"")+";"+(e?e:"")+","+c;window.open(f)},breakLayout:function(a,b){var c=b.repObject,d=b.phase,e=d.files[0]==c;b.breakLayout=!e,b.setAttribute("breakLayout",b.breakLayout?"true":"false");var f=Lib.getAncestorByClass(b,"netTable"),g=HarModel.getParentPage(this.input,c);this.updateLayout(f,g)},updateLayout:function(a,b){var c=HarModel.getPageEntries(this.input,b);this.table=a;var d=this.table.firstChild,e=this.firstRow=d.firstChild.nextSibling;this.phases=[];var f=Cookies.getCookie("phaseInterval");f||(f=4e3);var g=null,h=b?Lib.parseISO8601(b.startedDateTime):null,i=b&&b.pageTimings?b.pageTimings.onLoad:-1;i>0&&(i+=h);for(var j=0;j=0&&(o=l>i&&l-m>=f&&l+k.time>=n+f),typeof e.breakLayout=="boolean"?!g||e.breakLayout?g=this.startPhase(k):g.addFile(k):!g||o?g=this.startPhase(k):g.addFile(k),this.phases[0]!=g&&e.setAttribute("breakLayout",g.files[0]==k?"true":"false");if(g.startTime==undefined||g.startTime>l)g.startTime=l;if(g.endTime==undefined||g.endTime0){var g=d+f-c.startTime,h=(g/this.phaseElapsed*100).toFixed(3);c.pageTimings[e].offset=h}}}},updateTimeline:function(a){var b=this.table.firstChild,c;for(var d=this.firstRow;d;d=d.nextSibling){var e=d.repObject;if(!e)continue;if(Lib.hasClass(d,"netInfoRow"))continue;c=this.calculateFileTimes(a,e,c),d.phase=e.phase,delete e.phase;var f=Lib.getElementByClass(d,"netTimelineBar"),g=f.children[0],h=g.nextSibling,i=h.nextSibling,j=i.nextSibling,k=j.nextSibling,l=k.nextSibling;g.style.left=i.style.left=h.style.left=j.style.left=k.style.left=l.style.left=this.barOffset+"%",g.style.width=this.barBlockingWidth+"%",h.style.width=this.barResolvingWidth+"%",i.style.width=this.barConnectingWidth+"%",j.style.width=this.barSendingWidth+"%",k.style.width=this.barWaitingWidth+"%",l.style.width=this.barReceivingWidth+"%";var m=Lib.getElementsByClass(f,"netPageTimingBar");for(var n=0;n0&&b.push({label:d.name,time:e,classes:d.classes,comment:d.description})}var f=a.pageTimings?a.pageTimings._timeStamps:[];f&&b.push.apply(b,f);var g=this.phases;for(var c=0;c=h.startTime)h.startTime>l&&(h.startTime=l),h.endTime0&&(o+=" (onload: "+Lib.formatTime(a.pageTimings.onLoad)+")"),n.innerHTML=o}},formatRequestCount:function(a){return a+" "+(a==1?Strings.request:Strings.requests)},summarizePhase:function(a){var b=0,c=0,d="all";d=="all"&&(d=null);var e=0,f=0,g=0;for(var h=0;hg&&(g=m)}}var n=g-f;return{cachedSize:b,totalSize:c,totalTime:n,fileCount:e}},showInfoTip:function(a,b,c,d){var e=Lib.getAncestorByClass(b,"netTable");if(e&&e.repObject==this){var f=Lib.getAncestorByClass(b,"netRow");if(f){if(Lib.getAncestorByClass(b,"netBar")){a.setAttribute("multiline",!0);var g=f.repObject.startedDateTime+"-nettime";this.infoTipURL=g;return this.populateTimeInfoTip(a,f)}if(Lib.hasClass(b,"netSizeLabel")){var g=f.repObject.startedDateTime+"-netsize";this.infoTipURL=g;return this.populateSizeInfoTip(a,f)}}}},populateTimeInfoTip:function(a,b){EntryTimeInfoTip.render(this,b,a);return!0},populateSizeInfoTip:function(a,b){EntrySizeInfoTip.render(this,b,a);return!0},render:function(a,b){var c=HarModel.getPageEntries(this.input,b);if(!c.length)return null;return this.append(a,b,c)},append:function(a,b,c){this.table||(this.table=this.tableTag.replace({requestList:this},a,this)),this.summaryRow||(this.summaryRow=this.summaryTag.insertRows({},this.table.firstChild)[0]);var d=this.table.firstChild,e=d.lastChild.previousSibling,f=this.fileTag.insertRows({files:c},e,this);this.updateLayout(this.table,b);return f[0]},addPageTiming:function(a){this.pageTimings.push(a)}});function Phase(a){this.files=[],this.pageTimings=[],this.addFile(a)}Phase.prototype={addFile:function(a){this.files.push(a),a.phase=this},getLastStartTime:function(){return this.files[this.files.length-1].startedDateTime}};var EntryTimeInfoTip=domplate({tableTag:TABLE({"class":"timeInfoTip"},TBODY()),timingsTag:FOR("time","$timings",TR({"class":"timeInfoTipRow",$collapsed:"$time|hideBar"},TD({"class":"$time|getBarClass timeInfoTipBar",$loaded:"$time.loaded",$fromCache:"$time.fromCache"}),TD({"class":"timeInfoTipCell startTime"},"$time.start|formatStartTime"),TD({"class":"timeInfoTipCell elapsedTime"},"$time.elapsed|formatTime"),TD("$time|getLabel"))),startTimeTag:TR(TD(),TD("$startTime.time|formatStartTime"),TD({"class":"timeInfoTipStartLabel",colspan:2},"$startTime|getLabel")),separatorTag:TR({},TD({"class":"timeInfoTipSeparator",colspan:4,height:"10px"},SPAN("$label"))),eventsTag:FOR("event","$events",TR({"class":"timeInfoTipEventRow"},TD({"class":"timeInfoTipBar",align:"center"},DIV({"class":"$event|getPageTimingClass timeInfoTipEventBar"})),TD("$event.start|formatStartTime"),TD({colspan:2},"$event|getTimingLabel"))),hideBar:function(a){return!a.elapsed&&a.bar=="request.phase.Blocking"},getBarClass:function(a){var b=a.bar.substr(a.bar.lastIndexOf(".")+1);return"net"+b+"Bar"},getPageTimingClass:function(a){return a.classes?a.classes:""},formatTime:function(a){return Lib.formatTime(a)},formatStartTime:function(a){var b=a>0,c=Lib.formatTime(Math.abs(a));if(!a)return c;return(b>0?"+":"-")+c},getLabel:function(a){return Strings[a.bar]},getTimingLabel:function(a){return a.bar},render:function(a,b,c){var d=a.input,e=b.repObject,f=HarModel.getParentPage(d,e),g=f?Lib.parseISO8601(f.startedDateTime):null,h=Lib.parseISO8601(e.startedDateTime),i=EntryTimeInfoTip.tableTag.replace({},c),j={};g?j.time=h-g:j.time=h-b.phase.startTime,j.bar="request.Started",this.startTimeTag.insertRows({startTime:j},i.firstChild),this.separatorTag.insertRows({label:Strings["request.phases.label"]},i.firstChild);var k=0,l=[],m=e.timings.blocked,n=e.timings.dns,o=e.timings.ssl,p=e.timings.connect,q=e.timings.send,r=e.timings.wait,s=e.timings.receive;m>=0&&l.push({bar:"request.phase.Blocking",elapsed:m,start:k}),n>=0&&l.push({bar:"request.phase.Resolving",elapsed:n,start:k+=m<0?0:m}),p>=0&&l.push({bar:"request.phase.Connecting",elapsed:p,start:k+=n<0?0:n}),q>=0&&l.push({bar:"request.phase.Sending",elapsed:q,start:k+=p<0?0:p}),r>=0&&l.push({bar:"request.phase.Waiting",elapsed:r,start:k+=q<0?0:q}),s>=0&&l.push({bar:"request.phase.Receiving",elapsed:s,start:k+=r<0?0:r,loaded:e.loaded,fromCache:e.fromCache}),this.timingsTag.insertRows({timings:l},i.firstChild);if(!f)return!0;var t=[];for(var u=0;u0?Lib.setClass(a,"opened"):Lib.removeClass(a,"opened")})},render:function(a,b){return this.tag.append({object:b},a,this)}});return Menu}}),require.def("harPreview",["preview/pageList","preview/harModel","core/lib","core/trace","preview/menu"],function(a,b,c,d,e){function f(){this.id="harPreview",this.model=new b}f.prototype={initialize:function(a){this.topMenu=new e,this.topMenu.render(a);var d=c.bind(this.appendPreview,this);b.Loader.run(d)},appendPreview:function(e){try{var f=b.parse(e,!0);this.model.append(f);var h=new a(f);h.render(g),c.fireEvent(g,"onPreviewHARLoaded")}catch(i){d.exception("HarPreview.appendPreview; EXCEPTION ",i)}},loadHar:function(a,c){c=c||{};return b.Loader.load(this,a,c.jsonp,c.jsonpCallback,c.success,c.ajaxError)}};var g=document.getElementById("content"),h=g.repObject=new f;c.fireEvent(g,"onPreviewPreInit"),h.initialize(g),c.fireEvent(g,"onPreviewInit"),d.log("HarPreview; initialized OK")}) \ No newline at end of file diff --git a/harstorage/templates/home/core.html b/harstorage/templates/home/core.html index bb4a25e..eab688e 100644 --- a/harstorage/templates/home/core.html +++ b/harstorage/templates/home/core.html @@ -2,6 +2,8 @@ <%namespace name="dochead" file="/home/dochead.html"/> <%namespace name="header" file="/common/header.html"/> <%namespace name="footer" file="/common/footer.html"/> +<%namespace name="labels" file="/home/labels.html"/> + ${dochead.html("HAR Storage")} ${header.html()} @@ -18,7 +20,8 @@

          Latest Results

          - + + ${labels.html()} diff --git a/harstorage/templates/home/jsloader.html b/harstorage/templates/home/jsloader.html index 48cae2b..5602ed8 100644 --- a/harstorage/templates/home/jsloader.html +++ b/harstorage/templates/home/jsloader.html @@ -7,7 +7,7 @@ "&datatables/ColReorder.min.js&ver=1.0.4").wait() .wait(function(){ $(document).ready(function() { - $('#stats_table').dataTable({ + statsTable = $('#stats_table').dataTable({ "bJQueryUI": true, "sPaginationType": "full_numbers", "sDom": 'R<"H"lfr>t<"F"ip<', @@ -17,6 +17,11 @@ }); $('#summary-table').css('visibility', 'visible'); + + filterTable = function(keyword, regex, smart) { + statsTable.fnFilter(keyword, null, regex, smart, false, false); + } + }); }) diff --git a/harstorage/templates/home/labels.html b/harstorage/templates/home/labels.html new file mode 100644 index 0000000..a9fb4e4 --- /dev/null +++ b/harstorage/templates/home/labels.html @@ -0,0 +1,11 @@ +<%def name="html()"> +
          +

          Filter Results by:

          + + + + + + +
          + \ No newline at end of file From abba8dfb8e87fd43e251bbacec042061f416cd07 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 10 Nov 2014 12:14:06 -0800 Subject: [PATCH 17/88] Adding reset filters option --- harstorage/templates/home/jsloader.html | 4 ++++ harstorage/templates/home/labels.html | 2 ++ 2 files changed, 6 insertions(+) diff --git a/harstorage/templates/home/jsloader.html b/harstorage/templates/home/jsloader.html index 5602ed8..81b5989 100644 --- a/harstorage/templates/home/jsloader.html +++ b/harstorage/templates/home/jsloader.html @@ -22,6 +22,10 @@ statsTable.fnFilter(keyword, null, regex, smart, false, false); } + fnResetAllFilters = function() { + statsTable.fnFilter('', null, true, false, false, false); + } + }); }) diff --git a/harstorage/templates/home/labels.html b/harstorage/templates/home/labels.html index a9fb4e4..fb6d1c7 100644 --- a/harstorage/templates/home/labels.html +++ b/harstorage/templates/home/labels.html @@ -1,6 +1,8 @@ <%def name="html()">

          Filter Results by:

          + + From 739f8e46b8be9a4a6ba48552c8332984dfb300d2 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Wed, 12 Nov 2014 10:30:45 -0500 Subject: [PATCH 18/88] add requirements to setup --- setup.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 71d4f7e..87a3a8c 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,11 @@ license='BSD, see LICENSE.txt for details', platforms=['Linux', 'Windows'], setup_requires=[], - install_requires=[], + install_requires=[ + 'pylons==1.0', + 'pymongo==2.7.2', + 'webob==0.9.8', + ], packages=find_packages(), include_package_data=True, test_suite='nose.collector', From 46b4e6c38495b355a2b3593f29636b96bf9bb376 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 12 Nov 2014 14:20:01 -0800 Subject: [PATCH 19/88] Adding in throughput measurement. Also cleaning up HTML on the labels --- harstorage/controllers/results.py | 7 +++++-- harstorage/public/scripts/harstorage.js | 1 + harstorage/templates/details/core.html | 1 + harstorage/templates/home/labels.html | 8 ++++---- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 7543d69..1b4f5a0 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -230,6 +230,8 @@ def runinfo(self): if 'source' in har["log"]["creator"]: source = har["log"]["creator"]["source"] + throughput = test_results["throughput"] + # Summary stats summary = { "full_load_time": test_results["full_load_time"], "onload_event": test_results["onload_event"], @@ -270,7 +272,8 @@ def runinfo(self): "d_weights": domains_weight_ratio, "d_requests": domains_req_ratio, "har": har_id, - "source": source}) + "source": source, + "throughput": throughput}) @restrict("GET") def harviewer(self): @@ -381,7 +384,7 @@ def upload(self): "total_download_time": har.total_download_time, "avg_connecting_time": har.avg_connecting_time, "avg_blocking_time": har.avg_blocking_time, - "throughput": har.throughput, + "throughput": har.throughput, "total_size": har.total_size, "text_size": har.text_size, "media_size": har.media_size, diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 925f8f5..1bb2981 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -691,6 +691,7 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { $("#total-server-time").html(that.formatter(that.json.summary.total_server_time, "ms")); $("#avg-connecting-time").html(that.formatter(that.json.summary.avg_connecting_time, "ms")); $("#avg-blocking-time").html(that.formatter(that.json.summary.avg_blocking_time, "ms")); + $("#throughput").html(that.formatter(that.json.throughput, "kB/s")); $("#source-url").html(source); $("#total-size").html(that.formatter(that.json.summary.total_size, "kB")); diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html index 985dd03..cdf5ca4 100644 --- a/harstorage/templates/details/core.html +++ b/harstorage/templates/details/core.html @@ -28,6 +28,7 @@
          onLoad Event:
          n/a
          Start Render Time:
          n/a
          Time to First Byte:
          n/a
          +
          Throughput:
          n/a
          diff --git a/harstorage/templates/home/labels.html b/harstorage/templates/home/labels.html index fb6d1c7..db28cf1 100644 --- a/harstorage/templates/home/labels.html +++ b/harstorage/templates/home/labels.html @@ -1,13 +1,13 @@ <%def name="html()">
          -

          Filter Results by:

          - - +
          Filter Results by: - + + +
          \ No newline at end of file From 20b126a9ac06dc842f2081d8af4947ce555eedd8 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 17 Nov 2014 11:41:20 -0500 Subject: [PATCH 20/88] add 95th and 99th percentiles --- harstorage/lib/Math.py | 8 ++++++-- harstorage/public/scripts/harstorage.js | 8 ++++++++ harstorage/templates/display/core.html | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/harstorage/lib/Math.py b/harstorage/lib/Math.py index bbce245..59916d5 100644 --- a/harstorage/lib/Math.py +++ b/harstorage/lib/Math.py @@ -69,10 +69,14 @@ def get_aggregated_value(self, list, agg_type, metric): return self.minimum(list) elif agg_type == "Maximum": return self.maximum(list) - elif agg_type == "90th Percentile": - return self.percentile(list, 0.9) elif agg_type == "Median": return self.percentile(list, 0.5) + elif agg_type == "90th Percentile": + return self.percentile(list, 0.9) + elif agg_type == "95th Percentile": + return self.percentile(list, 0.95) + elif agg_type == "99th Percentile": + return self.percentile(list, 0.99) def exclude_missing(self, points): """Remove points missing in all subsets""" diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index e2238ec..697876b 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -900,6 +900,14 @@ HARSTORAGE.AggregatedStatistics = function(id) { if (metric === "90th%20Percentile") { metric = "90th Percentile"; } + + if (metric === "95th%20Percentile") { + metric = "95th Percentile"; + } + + if (metric === "99th%20Percentile") { + metric = "99th Percentile"; + } } // Update selector box active option diff --git a/harstorage/templates/display/core.html b/harstorage/templates/display/core.html index 67cbf9d..1eb90fc 100644 --- a/harstorage/templates/display/core.html +++ b/harstorage/templates/display/core.html @@ -19,8 +19,10 @@ + + - s +
          From 53b8591c270aa251dec7b3580bf5924b15298377 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 17 Nov 2014 09:12:53 -0800 Subject: [PATCH 21/88] Adding in ability to choose mulitple tests for aggregation during aggregate and compare. This allows aggregation of a single test that may be running from multiple locations and stored as seperate data entities (labels) --- harstorage/controllers/superposed.py | 12 +-- harstorage/public/scripts/harstorage.js | 104 ++++++++++++++++----- harstorage/public/scripts/jquery-ui.min.js | 13 +++ harstorage/public/styles/main.css | 4 +- harstorage/templates/create/core.html | 20 ++-- harstorage/templates/create/dochead.html | 18 ++++ harstorage/templates/create/jsloader.html | 16 +++- harstorage/templates/display/modules.html | 7 +- 8 files changed, 151 insertions(+), 43 deletions(-) create mode 100755 harstorage/public/scripts/jquery-ui.min.js create mode 100644 harstorage/templates/create/dochead.html diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index 95ecb89..f0d36b7 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -75,10 +75,9 @@ def display(self): c.agg_type = request.GET.get("metric", "Average") # Number of records - if c.chart == "true" and c.table == "true" and init != "true": - c.rowcount = len(request.GET) / 3 - 1 - else: - c.rowcount = len(request.GET) / 3 + rows = [x for x in request.GET if "_label_hidden" in x] + c.rowcount = len(rows) + # Data table c.headers = ["Label", "Full Load Time (ms)", "Total Requests", @@ -101,7 +100,7 @@ def display(self): # Test results from database for row_index in range(c.rowcount): # Parameters from GET request - label = request.GET["step_" + str(row_index + 1) + "_label"] + label = request.GET[ 'step_' + str(row_index+1) + '_label_hidden' ] start_ts = request.GET["step_" + str(row_index + 1) + "_start_ts"] end_ts = request.GET["step_" + str(row_index + 1) + "_end_ts"] @@ -110,8 +109,9 @@ def display(self): c.points += label + "#" # Fetch test results + labels = label.split(",") condition = { - "label": label, + "label": { '$in': labels}, "timestamp": {"$gte": start_ts, "$lte": end_ts} } documents = md_handler.collection.find(condition, diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 1bb2981..46a50bc 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -927,12 +927,6 @@ HARSTORAGE.SuperposeForm = function() { // Initialize cache this.cache = {}; - // Select box event handler - var selector = document.getElementById("step_1_label"); - selector.onchange = function() { - that.setTimestamps(this.name); - }; - // Submit button event handler var submit = document.getElementById("submit"); submit.onclick = function() { @@ -968,20 +962,40 @@ HARSTORAGE.SuperposeForm = function() { HARSTORAGE.SuperposeForm.prototype.submit = function() { "use strict"; - var selectors = document.getElementsByTagName("select"); + var that = this; + + var datepickers = document.getElementsByClassName('datepicker'); - for (var i = 0, len = selectors.length/3; i < len; i += 1) { - var id = 1 + i*3; + for(var i = 0, len = datepickers.length/2; i < len; i += 2) { - var start_ts = selectors.item(id).options[ selectors.item(id).options.selectedIndex ].value; - var end_ts = selectors.item(id+1).options[ selectors.item(id+1).options.selectedIndex ].value; + var start_ts = datepickers.item(i).value; + var end_ts = datepickers.item(i+1).value; if (end_ts < start_ts) { - window.alert("Invalid timestamps!"); + window.alert('Invalid timestamps!'); return false; } } + var selectors = document.getElementsByTagName('select'); + for(var i = 0, len = selectors.length; i < len; i += 1) { + + var selector = selectors.item(i); + var selectedValue = selector.value; + + if (selectedValue === "") { + window.alert('Invalid test selected!'); + return false; + } else { + // get all the selected values + var values = that.getSelectValues(selector); + //Set the hidden input field + var id = selector.id + "_hidden"; + document.getElementById(id).value = values; + + } + } + var form = document.getElementById("superpose-form"); form.onsubmit = "return true;"; @@ -1013,29 +1027,35 @@ HARSTORAGE.SuperposeForm.prototype.add = function(button) { // Update name and id of selectors var selectors = new_div.getElementsByTagName("select"); + var datepickers = new_div.getElementsByClassName('datepicker'); for (i = selectors.length; i -- ; ) { switch (selectors.item(i).name) { case prev_id + "_label": selectors.item(i).name = new_id + "_label"; selectors.item(i).id = new_id + "_label"; - selectors.item(i).onchange = function() { - that.setTimestamps(this.name); - }; break; - case prev_id + "_start_ts": - selectors.item(i).name = new_id + "_start_ts"; - selectors.item(i).id = new_id + "_start_ts"; + default: + break; + } + } + for(i = datepickers.length; i -- ; ) { + switch (datepickers.item(i).name) { + case prev_id + '_start_ts': + datepickers.item(i).name = new_id + '_start_ts'; + datepickers.item(i).id = new_id + '_start_ts'; break; - case prev_id + "_end_ts": - selectors.item(i).name = new_id + "_end_ts"; - selectors.item(i).id = new_id + "_end_ts"; + case prev_id + '_end_ts': + datepickers.item(i).name = new_id + '_end_ts'; + datepickers.item(i).id = new_id + '_end_ts'; break; default: break; } } + that.initializeDatePickers(); + // Update inputs var inputs = new_div.getElementsByTagName("input"); @@ -1070,6 +1090,11 @@ HARSTORAGE.SuperposeForm.prototype.add = function(button) { that.del(this); }; break; + case prev_id + '_label_hidden': + // Set new id + inputs.item(i).id = new_id + '_label_hidden'; + inputs.item(i).name = new_id + '_label_hidden'; + break; default: break; } @@ -1087,8 +1112,6 @@ HARSTORAGE.SuperposeForm.prototype.add = function(button) { } } - // Update timestamp - this.setTimestamps(new_id + "_label"); }; // Delete selected step @@ -1119,6 +1142,7 @@ HARSTORAGE.SuperposeForm.prototype.del = function(button) { }; // Set timelines for selected label +/* HARSTORAGE.SuperposeForm.prototype.setTimestamps = function(id) { "use strict"; @@ -1192,6 +1216,8 @@ HARSTORAGE.SuperposeForm.prototype.setTimestamps = function(id) { set_data(); } }; +*/ + // Add Ajax spinner HARSTORAGE.SuperposeForm.prototype.addSpinner = function() { "use strict"; @@ -1213,4 +1239,34 @@ HARSTORAGE.SuperposeForm.prototype.checkbox = function(input) { var checkbox = document.getElementById(id); checkbox.checked = false; } -}; \ No newline at end of file +}; + +// Return an array of the selected opion values +// select is an HTML select element +HARSTORAGE.SuperposeForm.prototype.getSelectValues = function(select) { + var result = []; + var options = select && select.options; + var opt; + + for (var i=0, iLen=options.length; i"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
          ",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("
          "),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.widthi?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("
          ").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)} +},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("
          ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("
          "),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidthe.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("
          "),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this; +this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
          ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("
          ",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.leftthis.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id"); +t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("
           
          "+"",C=d?"":"",x=0;7>x;x++)N=(x+u)%7,C+="";for(M+=C+"",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),z=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;z>F;F++){for(M+="",E=d?"":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],j=H.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>H||$&&H>$,E+="",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+""}Z++,Z>11&&(Z=0,et++),M+="
          "+this._get(e,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[N]+"
          "+this._get(e,"calculateWeek")(H)+""+(j&&!v?" ":W?""+H.getDate()+"":""+H.getDate()+"")+"
          "+(Q?"
          "+(K[0]>0&&T===K[1]-1?"
          ":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="
          ",_="";if(a||!g)_+=""+o[t]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+=""}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+=""+i+"";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="
          "},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.2",e.datepicker,e.widget("ui.dialog",{version:"1.11.2",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement; +e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("
          ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("
          ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("
          ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("
          ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("
          ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("
          ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("
          ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("
          ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+"" +},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
          ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.2",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("
          ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){u.of=e,o.is(":hidden")||o.position(u)}var a,o,r,h,l,u=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(l=s.clone(),l.removeAttr("id").find("[id]").removeAttr("id")):l=s,e("
          ").html(l).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(u.of),clearInterval(h))},e.fx.interval)),this._trigger("open",t,{tooltip:o}),r={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(r.remove=function(){this._removeTooltip(o)}),t&&"mouseover"!==t.type||(r.mouseleave="close"),t&&"focusin"!==t.type||(r.focusout="close"),this._on(!0,i,r)}},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);a&&(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)))},_tooltip:function(t){var i=e("
          ").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("
          ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("

          ")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.2",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("

          ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments); +var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("
          ").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("
          ").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}}); \ No newline at end of file diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css index 6e02144..b6a5ebf 100644 --- a/harstorage/public/styles/main.css +++ b/harstorage/public/styles/main.css @@ -257,7 +257,8 @@ body a:hover { } .sp-create .container { text-align: left; - margin: 20px 0 0 0; + margin: 50px 0 0 0; + float: left; } .sp-create .title,.sp-create .text { float: left; @@ -289,6 +290,7 @@ body a:hover { -webkit-border-radius: 3px; border-radius: 3px; cursor: pointer; + float: right; } .sp-create .checkbox { margin: 25px 5px 0 20px; diff --git a/harstorage/templates/create/core.html b/harstorage/templates/create/core.html index 1394a51..fdba9c4 100644 --- a/harstorage/templates/create/core.html +++ b/harstorage/templates/create/core.html @@ -1,5 +1,5 @@ <%namespace name="jsloader" file="/create/jsloader.html"/> -<%namespace name="dochead" file="/common/dochead.html"/> +<%namespace name="dochead" file="/create/dochead.html"/> <%namespace name="header" file="/common/header.html"/> <%namespace name="footer" file="/common/footer.html"/> @@ -23,28 +23,28 @@
          Set 1 >
          Label:
          - % for label in c.labels: % endfor -
          Start Time:
          + - - -
          End Time:
          +
          Start Time: + +
          - +
          End Time: + +
          -
          +
          Column Chart Spline Chart Data Table
          diff --git a/harstorage/templates/create/dochead.html b/harstorage/templates/create/dochead.html new file mode 100644 index 0000000..e6c30fc --- /dev/null +++ b/harstorage/templates/create/dochead.html @@ -0,0 +1,18 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + diff --git a/harstorage/templates/create/jsloader.html b/harstorage/templates/create/jsloader.html index 1fbf9e0..3c2eab9 100644 --- a/harstorage/templates/create/jsloader.html +++ b/harstorage/templates/create/jsloader.html @@ -2,12 +2,26 @@ diff --git a/harstorage/templates/display/modules.html b/harstorage/templates/display/modules.html index a895ce1..784b577 100644 --- a/harstorage/templates/display/modules.html +++ b/harstorage/templates/display/modules.html @@ -16,7 +16,12 @@ % for row in range(c.rowcount): -
          ${c.metrics_table[0][row]} + % if "," not in c.metrics_table[0][row]: + + ${c.metrics_table[0][row]} + % else: + ${c.metrics_table[0][row]} + % endif % for column in range(len(c.headers)-1): ${c.metrics_table[column+1][row]} % endfor From fa0c20731fefea92a6ac9a44f53015220aeb99ce Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 17 Nov 2014 13:12:55 -0500 Subject: [PATCH 22/88] rename Math to math_helpers --- harstorage/controllers/superposed.py | 2 +- harstorage/lib/{Math.py => math_helpers.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename harstorage/lib/{Math.py => math_helpers.py} (100%) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index 95ecb89..40feafc 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -4,7 +4,7 @@ from harstorage.lib.base import BaseController, render from harstorage.lib.MongoHandler import MongoDB -from harstorage.lib.Math import Histogram, Aggregator +from harstorage.lib.math_helpers import Histogram, Aggregator class SuperposedController(BaseController): diff --git a/harstorage/lib/Math.py b/harstorage/lib/math_helpers.py similarity index 100% rename from harstorage/lib/Math.py rename to harstorage/lib/math_helpers.py From e21084805dca4a5d36f57c973df221827e013427 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 18 Nov 2014 11:17:17 -0800 Subject: [PATCH 23/88] Trimming labels on the chart to 40char to avoid data collision --- harstorage/controllers/superposed.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index f0d36b7..d0cc80d 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -105,8 +105,8 @@ def display(self): end_ts = request.GET["step_" + str(row_index + 1) + "_end_ts"] # Add label - c.metrics_table[0].append(label) - c.points += label + "#" + c.metrics_table[0].append(label[:40]) + c.points += label[:40] + "#" # Fetch test results labels = label.split(",") @@ -118,7 +118,7 @@ def display(self): fields=aggregator.METRICS) # Add data row to aggregator - aggregator.add_row(label, row_index, documents) + aggregator.add_row(label[:40], row_index, documents) # Aggregated data per column column = 1 From 974eebd5a8594f9ef2e3a3cacae35b6008f19362 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 12 Jan 2015 09:59:05 -0800 Subject: [PATCH 24/88] Updated the canned search labels for team pages --- harstorage/templates/home/labels.html | 1 + 1 file changed, 1 insertion(+) diff --git a/harstorage/templates/home/labels.html b/harstorage/templates/home/labels.html index db28cf1..ed4e626 100644 --- a/harstorage/templates/home/labels.html +++ b/harstorage/templates/home/labels.html @@ -7,6 +7,7 @@ +
          From 227d0bc5c0de73d455f8c3e423de5ef4db3d7913 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 12 Jan 2015 10:19:41 -0800 Subject: [PATCH 25/88] Fixed issue that if no data found a 0 is returned instead of an error --- harstorage/controllers/superposed.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index d0cc80d..fd4ed69 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -128,7 +128,10 @@ def display(self): for row_index in range(c.rowcount): data_list = aggregator.data[metric][row_index] - value = aggregator.get_aggregated_value(data_list, c.agg_type, + if len(data_list) <= 0: + value = 0 + else: + value = aggregator.get_aggregated_value(data_list, c.agg_type, metric) c.points += str(value) + "#" From 09baee98587fac34e370760d04f6bd8c7629266b Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Thu, 15 Jan 2015 15:28:32 -0800 Subject: [PATCH 26/88] Performance optimizations of home page --- harstorage/controllers/results.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 1b4f5a0..c479a4d 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -13,12 +13,14 @@ from pylons import config from pylons.controllers.util import redirect from pylons.decorators.rest import restrict +from time import gmtime, strftime from harstorage.lib.base import BaseController, render from harstorage.lib.HAR import HAR from harstorage.lib.MongoHandler import MongoDB import harstorage.lib.helpers as h + class ResultsController(BaseController): """ @@ -48,9 +50,12 @@ def index(self): # Read aggregated data from database # Aggregation is based on unique labels, urls and latest timestamps + + #Performance fix, home page will only load the labels/tests for the last 30 days + condTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-720*60*60)) latest_results = mdb_handler.collection.group( key = ["label", "url"], - condition = None, + condition = {"timestamp": {"$gte": condTs}}, initial = {"timestamp": "1970-01-01 01:00:00"}, reduce = "\ function(doc, prev) { \ @@ -59,6 +64,7 @@ def index(self): } \ }") + key = lambda timestamp: timestamp["timestamp"] latest_results = sorted(latest_results, key = key, reverse = True) From ee1137d6e59e733ec619ef315bdb057417f65f54 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Thu, 15 Jan 2015 16:50:49 -0800 Subject: [PATCH 27/88] Begging to add filters based on timeframe to details page --- harstorage/controllers/results.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index c479a4d..c4ef22e 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -104,23 +104,36 @@ def details(self): c.label = request.GET["label"] c.mode = "label" + # Try to fetch time filter + try: + timeFilter = request.GET["timeFilter"] + except: + timeFilter = "30" + + if timeFilter == "all": + startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-8760*60*60)) + if timeFilter == "30": + startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-720*60*60)) + if timeFilter == "60": + startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-1440*60*60)) + # Generate context for selector - self._set_options_in_selector(c.mode, c.label) + self._set_options_in_selector(c.mode, c.label, startTs) # Define url for data aggregation if c.mode == "label": c.query = "/superposed/display?" + \ "step_1_label=" + c.label + \ - "&step_1_start_ts=" + min(c.timestamp) + \ + "&step_1_start_ts=" + startTs + \ "&step_1_end_ts=" + max(c.timestamp) c.histo = "true" else: - c.histo = "false" + c.histo = "false"j c.query = "None" return render("/details/core.html") - def _set_options_in_selector(self, mode, label): + def _set_options_in_selector(self, mode, label, ts): """ Create context data - a list of timestamps. @@ -129,10 +142,18 @@ def _set_options_in_selector(self, mode, label): """ # Read data for selector box from database + condition = { + mode: label, + "timestamp": {"$gte": ts} + } results = MongoDB().collection.find( - {mode: label}, + condition, fields = ["timestamp"], sort = [("timestamp", -1)]) +# results = MongoDB().collection.find( +# {mode: label}, +# fields = ["timestamp"], +# sort = [("timestamp", -1)]) c.timestamp = list() From 1649e6083160b25db58b4e435de74ad83a11df44 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 20 Jan 2015 16:34:49 -0800 Subject: [PATCH 28/88] Modified to have a filter functionality on the detail page to view by 7, 30, 60 days or all results --- harstorage/controllers/results.py | 36 ++++++++++++---------- harstorage/public/scripts/harstorage.js | 4 +-- harstorage/templates/details/core.html | 10 +++++- harstorage/templates/details/jsloader.html | 2 +- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index c4ef22e..bc35a27 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -110,50 +110,49 @@ def details(self): except: timeFilter = "30" - if timeFilter == "all": - startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-8760*60*60)) - if timeFilter == "30": - startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-720*60*60)) - if timeFilter == "60": - startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-1440*60*60)) + if timeFilter == "7": + c.startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-168*60*60)) + elif timeFilter == "30": + c.startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-720*60*60)) + elif timeFilter == "60": + c.startTs = strftime("%Y-%m-%d %H:%M:%S", gmtime(time.time()-1440*60*60)) + else: + c.startTs = "1970-01-01 01:00:00" # Generate context for selector - self._set_options_in_selector(c.mode, c.label, startTs) + self._set_options_in_selector(c.mode, c.label, c.startTs) # Define url for data aggregation if c.mode == "label": c.query = "/superposed/display?" + \ "step_1_label=" + c.label + \ - "&step_1_start_ts=" + startTs + \ + "&step_1_start_ts=" + c.startTs + \ "&step_1_end_ts=" + max(c.timestamp) c.histo = "true" else: - c.histo = "false"j + c.histo = "false" c.query = "None" return render("/details/core.html") - def _set_options_in_selector(self, mode, label, ts): + def _set_options_in_selector(self, mode, label, startTs): """ Create context data - a list of timestamps. @parameter label - label of set with test results @parameter url - URL of set with test results + @parameter startTs - the start timestamp to narrow the results from """ # Read data for selector box from database condition = { mode: label, - "timestamp": {"$gte": ts} + "timestamp": {"$gte": startTs} } results = MongoDB().collection.find( condition, fields = ["timestamp"], sort = [("timestamp", -1)]) -# results = MongoDB().collection.find( -# {mode: label}, -# fields = ["timestamp"], -# sort = [("timestamp", -1)]) c.timestamp = list() @@ -168,6 +167,7 @@ def timeline(self): # Parameters from GET request label = h.decode_uri(request.GET["label"]) mode = request.GET["mode"] + startTs = request.GET["startTs"] # Metrics METRICS = ( "timestamp", "full_load_time", "requests", "total_size", @@ -193,8 +193,12 @@ def timeline(self): data.append(str()) # Read data for timeline from database in custom format (hash separated) + condition = { + mode: label, + "timestamp": {"$gte": startTs} + } results = MongoDB().collection.find( - {mode: label}, + condition, fields = METRICS, sort = [("timestamp", 1)]) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 46a50bc..1335354 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -152,7 +152,7 @@ HARSTORAGE.Timeline = function(run_info) { }; // Get data for timeline -HARSTORAGE.Timeline.prototype.get = function(label, mode) { +HARSTORAGE.Timeline.prototype.get = function(label, mode, startTs) { "use strict"; // Pointer @@ -167,7 +167,7 @@ HARSTORAGE.Timeline.prototype.get = function(label, mode) { } }; - var URI = "timeline?label=" + encodeURIComponent(label) + "&mode=" + mode; + var URI = "timeline?label=" + encodeURIComponent(label) + "&mode=" + mode + "&startTs=" + encodeURIComponent(startTs); xhr.open("GET", URI, true); xhr.send(); diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html index cdf5ca4..0057751 100644 --- a/harstorage/templates/details/core.html +++ b/harstorage/templates/details/core.html @@ -7,9 +7,17 @@ ${header.html()}
          +
          +
          -

          Run Info

          +
          + + + + +
          +

          Run Info

          + + + + + + +
          + + % if c.table == "true": + ${modules.table()} + % endif +
          +
          +${jsloader.html()} +${footer.html()} \ No newline at end of file diff --git a/harstorage/templates/dashboard/overview/dochead.html b/harstorage/templates/dashboard/overview/dochead.html new file mode 100644 index 0000000..c7314f4 --- /dev/null +++ b/harstorage/templates/dashboard/overview/dochead.html @@ -0,0 +1,20 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + + + diff --git a/harstorage/templates/dashboard/overview/jsloader.html b/harstorage/templates/dashboard/overview/jsloader.html new file mode 100644 index 0000000..2a7709d --- /dev/null +++ b/harstorage/templates/dashboard/overview/jsloader.html @@ -0,0 +1,47 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/dashboard/overview/modules.html b/harstorage/templates/dashboard/overview/modules.html new file mode 100644 index 0000000..784b577 --- /dev/null +++ b/harstorage/templates/dashboard/overview/modules.html @@ -0,0 +1,33 @@ +<%def name="chart()"> +
          + + +<%def name="table()"> +
          + + + + + % for column in range(len(c.headers)-1): + + % endfor + + + + % for row in range(c.rowcount): + + % if "," not in c.metrics_table[0][row]: + + + % else: + + % endif + % for column in range(len(c.headers)-1): + + % endfor + + % endfor + +
          ${c.headers[0]}${c.headers[column+1]}
          ${c.metrics_table[0][row]}${c.metrics_table[0][row]}${c.metrics_table[column+1][row]}
          +
          + \ No newline at end of file diff --git a/harstorage/templates/display/core.html b/harstorage/templates/display/core.html index 67cbf9d..2be618d 100644 --- a/harstorage/templates/display/core.html +++ b/harstorage/templates/display/core.html @@ -20,7 +20,7 @@ - s +
          From df5aaab57f0ab9d028a1f6c2a7c1b24686905958 Mon Sep 17 00:00:00 2001 From: Zac Delagrange Date: Thu, 7 May 2015 13:24:45 -0700 Subject: [PATCH 54/88] changes to table layout --- harstorage/public/styles/main.css | 2 +- harstorage/templates/home/core.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css index 6e02144..f482c65 100644 --- a/harstorage/public/styles/main.css +++ b/harstorage/public/styles/main.css @@ -139,7 +139,7 @@ body a:hover { } /* Summary Table on Home Page */ .summary { - width: 960px; + width: 1300px; visibility: hidden; } .summary .title { diff --git a/harstorage/templates/home/core.html b/harstorage/templates/home/core.html index bb4a25e..1cce0df 100644 --- a/harstorage/templates/home/core.html +++ b/harstorage/templates/home/core.html @@ -23,7 +23,7 @@ Timestamp - Label + Label URL Total Size (kB) Total Requests From b35d06e2836ba1ee0f438382397e1e53d943e117 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 8 May 2015 10:36:36 -0700 Subject: [PATCH 55/88] Removing the RW point as it is no longer valid --- dashboard_config.json | 42 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index 8eae69f..27fcad1 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -22,19 +22,9 @@ "trends" : [{ "tabName": "mWeb", "charts" : [ - { - "title": "Simplified Home Page", - "labels": [ - "unifiedHP_cable_prod_RW", - "unifiedHP_cable_prod_SLCD", - "unifiedHP_cable_prod_SF", - "unifiedHP_cable_prod_EG" - ] - }, { "title": "Explore Home Page", "labels": [ - "unifiedCardsHP_cable_prod_RW", "unifiedCardsHP_cable_prod_SLCD", "unifiedCardsHP_cable_prod_SF", "unifiedCardsHP_cable_prod_EG" @@ -43,7 +33,6 @@ { "title":"Event Page", "labels": [ - "unifiedEvent_cable_prod_RW", "unifiedEvent_cable_prod_SLCD", "unifiedEvent_cable_prod_SF", "unifiedEvent_cable_prod_EG" @@ -52,7 +41,6 @@ { "title":"Search Results Page", "labels": [ - "unifiedSearchResults_cable_prod_RW", "unifiedSearchResults_cable_prod_SLCD", "unifiedSearchResults_cable_prod_SF", "unifiedSearchResults_cable_prod_EG" @@ -61,7 +49,6 @@ { "title":"Artist Page", "labels": [ - "unifiedArtist_cable_prod_RW", "unifiedArtist_cable_prod_SLCD", "unifiedArtist_cable_prod_SF", "unifiedArtist_cable_prod_EG" @@ -70,7 +57,6 @@ { "title":"Team Page", "labels": [ - "unifiedTeam_cable_prod_RW", "unifiedTeam_cable_prod_SLCD", "unifiedTeam_cable_prod_SF", "unifiedTeam_cable_prod_EG" @@ -79,7 +65,6 @@ { "title":"Venue Page", "labels": [ - "unifiedVenue_cable_prod_RW", "unifiedVenue_cable_prod_SLCD", "unifiedVenue_cable_prod_SF", "unifiedVenue_cable_prod_EG" @@ -88,7 +73,6 @@ { "title":"XO Page", "labels":[ - "xo_newxo_cable_prod_RW", "xo_newxo_cable_prod_SLCD", "xo_newxo_cable_prod_SF", "xo_newxo_cable_prod_EG" @@ -97,7 +81,6 @@ { "title":"Category Page", "labels":[ - "unifiedCategory_cable_prod_RW", "unifiedCategory_cable_prod_SLCD", "unifiedCategory_cable_prod_EG", "unifiedCategory_cable_prod_SF" @@ -106,7 +89,6 @@ { "title":"Grouping Page", "labels":[ - "unifiedGrouping_cable_prod_RW", "unifiedGrouping_cable_prod_SLCD", "unifiedGrouping_cable_prod_EG", "unifiedGrouping_cable_prod_SF" @@ -119,28 +101,25 @@ { "title": "Home Page", "labels": [ - "desktopHP_cable_prod_RW", + "desktopHP_cable_prod_EG", "desktopHP_cable_prod_SLCD", - "desktopHP_cable_prod_SF", - "desktopHP_cable_prod_EG" + "desktopHP_cable_prod_SF" ] }, { "title": "Search Results Page", "labels": [ - "desktopSearch_cable_prod_SF", - "desktopSearch_cable_prod_SLCD", "desktopSearch_cable_prod_EG", - "desktopSearch_cable_prod_RW" + "desktopSearch_cable_prod_SLCD", + "desktopSearch_cable_prod_SF" ] }, { "title": "Event Page", "labels": [ - "desktop_event_cable_prod_RW", - "desktop_event_cable_prod_SF", + "desktop_event_cable_prod_EG", "desktop_event_cable_prod_SLCD", - "desktop_event_cable_prod_EG" + "desktop_event_cable_prod_SF" ] }, { @@ -148,14 +127,12 @@ "labels": [ "desktop_grouping_cable_prod_EG", "desktop_grouping_cable_prod_SLCD", - "desktop_grouping_cable_prod_SF", - "desktop_grouping_cable_prod_RW" + "desktop_grouping_cable_prod_SF" ] }, { "title": "Venue Page", "labels": [ - "desktop_venue_cable_prod_RW", "desktop_venue_cable_prod_EG", "desktop_venue_cable_prod_SLCD", "desktop_venue_cable_prod_SF" @@ -164,10 +141,9 @@ { "title": "Category Page", "labels": [ - "desktop_category_cable_prod_SF", - "desktop_category_cable_prod_RW", "desktop_category_cable_prod_EG", - "desktop_category_cable_prod_SLCD" + "desktop_category_cable_prod_SLCD", + "desktop_category_cable_prod_SF" ] }] } From c0bc2271dd6376fb2783e83ce6ca52567e8a2958 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 8 May 2015 10:36:56 -0700 Subject: [PATCH 56/88] Fixing a JSON format issue --- harstorage/lib/HAR.py | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index 6738001..a273725 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -1,7 +1,6 @@ import json import time import re -import string DATE_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" @@ -181,8 +180,7 @@ def init_variables(self): self.bad_requests = 0 self.domains = dict() - self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", - "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping") + self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping") self.pageNamesFriendlyName = json.loads('{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results",}') def analyze(self): @@ -230,7 +228,7 @@ def analyze(self): # Update domain info self.update_domain_info() - + if self.total_size == 0: self.total_size = self.get_page_size() @@ -506,30 +504,15 @@ def get_avg_connecting_time(self): def get_avg_blocking_time(self): return round(self.avg_blocking_time / self.requests, 0) - def update_domain_info(self): - domain = self.entry["request"]["url"].partition("//")[-1].partition("/")[0] - - # WORKAROUND: Mongo prevents using dots in key names - mongo_domain = re.sub("\.","|", domain) - - # {DOMAIN: [NUMBER OF REQUESTS, TOTAL DATA FROM HOST IN KB], ...} - domain_requests = self.domains.get(mongo_domain, [0, 0])[0] - domain_data_size = self.domains.get(mongo_domain, [0, 0])[1] - - domain_requests += 1 - domain_data_size += self.get_response_size().to_kilobytes() - - self.domains[mongo_domain] = [domain_requests, domain_data_size] - def getPageName(self): # loop through possible page names # conduct a regex pattern match for the page name # if found, return the page name used in the pattern match # self.pageNamesFriendlyName # self.pageNames - capLabel = string.capitalize(self.label) + capLabel = self.label.lower() for pageName in self.pageNames: - capPageName = string.capitalize(pageName) + capPageName = pageName.lower() #if pagename found if capLabel.find(capPageName) != -1: #lookup in friendly names @@ -539,3 +522,19 @@ def getPageName(self): return pageName return 'n/a' + + def update_domain_info(self): + domain = self.entry["request"]["url"].partition("//")[-1].partition("/")[0] + + # WORKAROUND: Mongo prevents using dots in key names + mongo_domain = re.sub("\.","|", domain) + + # {DOMAIN: [NUMBER OF REQUESTS, TOTAL DATA FROM HOST IN KB], ...} + domain_requests = self.domains.get(mongo_domain, [0, 0])[0] + domain_data_size = self.domains.get(mongo_domain, [0, 0])[1] + + domain_requests += 1 + domain_data_size += self.get_response_size().to_kilobytes() + + self.domains[mongo_domain] = [domain_requests, domain_data_size] + From bc40226f3db4adc440aa91fca453e746efa1349e Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 8 May 2015 11:00:36 -0700 Subject: [PATCH 57/88] Split into 2 lines for easier reading --- harstorage/lib/HAR.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index a273725..565ab13 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -181,7 +181,9 @@ def init_variables(self): self.domains = dict() self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping") - self.pageNamesFriendlyName = json.loads('{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results",}') + + friendlyNames = '{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results"}' + self.pageNamesFriendlyName = json.loads(friendlyNames) def analyze(self): """Extract data from HAR container""" From 0d04c528edc7bd15b8a8ace52e4c371f7bcd01fe Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 8 May 2015 11:00:55 -0700 Subject: [PATCH 58/88] Moving filter to top of screen --- harstorage/templates/dashboard/overview/core.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/harstorage/templates/dashboard/overview/core.html b/harstorage/templates/dashboard/overview/core.html index 49abcc1..d2c34ff 100644 --- a/harstorage/templates/dashboard/overview/core.html +++ b/harstorage/templates/dashboard/overview/core.html @@ -7,10 +7,6 @@ ${dochead.html("Superposed Tests | " + c.agg_type)}
          - % if c.chart == "true": - ${modules.chart()} - % endif -

          Aggregated Statistics

          @@ -23,6 +19,10 @@
          + % if c.chart == "true": + ${modules.chart()} + % endif + % if c.table == "true": ${modules.table()} % endif From 216ee5f1bd22b2e9da6ce1bfc63e9113549aee01 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Fri, 8 May 2015 11:01:27 -0700 Subject: [PATCH 59/88] Removing table tools as this was causing hanging requests --- harstorage/templates/dashboard/overview/jsloader.html | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/harstorage/templates/dashboard/overview/jsloader.html b/harstorage/templates/dashboard/overview/jsloader.html index 2a7709d..b3b7ffb 100644 --- a/harstorage/templates/dashboard/overview/jsloader.html +++ b/harstorage/templates/dashboard/overview/jsloader.html @@ -17,23 +17,19 @@ .script("${h.url_for('/scripts/chosen.jquery.js')}?ver=0.9.5") .script("${h.url_for('/scripts/harstorage.js')}?ver=${c.rev}").wait() .wait(function(){ + HARSTORAGE.AggregatedStatistics("metrics"); + % if c.chart == "true": var columns = new HARSTORAGE.Columns(); columns.draw("${c.points}", "${c.chart_type}"); % endif - HARSTORAGE.AggregatedStatistics("metrics"); - % if c.table == "true": $(document).ready(function() { $("#stats_table").dataTable({ "bJQueryUI": true, "sPaginationType": "full_numbers", - "sDom": 'R<"H"Tfr>t<"F"ip>', - "oTableTools": { - "sSwfPath": "${h.url_for('/swf/copy_cvs_xls.swf')}", - "aButtons": ["copy", "csv", "xls"] - }, + "sDom": 'R<"H">t<"F"ip>', "bAutoWidth": false, "iDisplayLength": 100, "sScrollX": "4270px" From 002596257b78ddea9e48d1a7a9e16e64bb8811a0 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 11 May 2015 14:13:53 -0700 Subject: [PATCH 60/88] Split the trends by location tab into it's own section for ease of managing. Then added an aggregate filter option to chose median, average, 90th percent, etc... --- harstorage/controllers/results.py | 11 +++ harstorage/public/scripts/harstorage.js | 40 ++++++++++ harstorage/public/styles/main.css | 21 +++++- harstorage/templates/dashboard/core.html | 2 +- .../templates/dashboard/location/core.html | 9 +++ .../templates/dashboard/location/dochead.html | 19 +++++ .../dashboard/location/jsloader.html | 75 +++++++++++++++++++ .../templates/dashboard/overview/core.html | 1 - 8 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 harstorage/templates/dashboard/location/core.html create mode 100644 harstorage/templates/dashboard/location/dochead.html create mode 100644 harstorage/templates/dashboard/location/jsloader.html diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 5026362..9de70ba 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -542,6 +542,17 @@ def dashboard(self): return render("/dashboard/core.html") + @restrict("GET") + def dashboardLocation(self): + """Page with test results""" + filename = os.path.join(config["app_conf"]["dashboard_config_dir"], config["app_conf"]["dashboard_config_filename"]) + with open(filename) as json_file: + configData = json.load(json_file) + + c.configData = html.literal(configData) + + return render("/dashboard/location/core.html") + @restrict("GET") def dashboardChart(self): """Generate data for timeline chart""" diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 3f51c13..5ff04cd 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -920,6 +920,46 @@ HARSTORAGE.AggregatedStatistics = function(id) { }; }; +/* +* Setting the aggregate option list for the dashboard location tab +*/ +HARSTORAGE.setAggregatedForDashboard = function(ids) { + "use strict"; + + // Determine metric type from Query string + var metric, + href; + + if (location.href.indexOf("metric") === -1) { + href = location.href + "?metric="; + metric = "Average"; + } else { + href = location.href.split("metric")[0] + "metric="; + metric = location.href.split("metric")[1].split("=")[1]; + + if (metric === "90th%20Percentile") { + metric = "90th Percentile"; + } + } + + // Update selector box active option + $.each(ids, function(i, id) { + var selector = document.getElementById(id); + for (var i = 0, len = selector.options.length; i < len; i += 1 ) { + if (selector.options[i].value === metric) { + selector.selectedIndex = i; + $("#" + id).trigger("liszt:updated"); + break; + } + } + // Add event handler to selector box + selector.onchange = function() { + location.href = href + this.value; + }; + }); + +}; + /* * Superpose Form */ diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css index 193396b..850e5dd 100644 --- a/harstorage/public/styles/main.css +++ b/harstorage/public/styles/main.css @@ -320,6 +320,21 @@ body a:hover { #dashboardTrendsContainer.tabberlive { width: 100%; } +#dashboardTrendsIframeContainer.tabberlive { + width: 100%; +} +.dashboard-container .selector { + text-align: center; + margin: 12px 0 18px 0; +} +.dashboard-container .title { + font-family: times, "Times New Roman", times-roman, georgia, serif; + font-weight: bold; + font-size: 108%; + margin: 12px 0 18px 0; + float: center; + text-align: center; +} .results .title { font-family: times, "Times New Roman", times-roman, georgia, serif; font-weight: bold; @@ -343,7 +358,7 @@ body a:hover { width: 200px; height: 200px; } -.results .container-max,.results .container-min,.results .container-umin, .results .dashboardOverviewContainer, .results .dashboardTrendsContainer { +.results .container-max,.results .container-min,.results .container-umin, .results .dashboardOverviewContainer, .results .dashboardTrendsContainer, .results .dashboardTrendsIframeContainer { height: 210px; float: left; margin: 10px 0 0 0; @@ -358,6 +373,10 @@ body a:hover { width: 100%; height: 100%; } +.results .dashboardTrendsIframeContainer { + width: 100%; + height: 100%; +} .results .container-max { width: 260px; } diff --git a/harstorage/templates/dashboard/core.html b/harstorage/templates/dashboard/core.html index ca2922b..dd313ec 100644 --- a/harstorage/templates/dashboard/core.html +++ b/harstorage/templates/dashboard/core.html @@ -29,7 +29,7 @@
          -
          +
          diff --git a/harstorage/templates/dashboard/location/core.html b/harstorage/templates/dashboard/location/core.html new file mode 100644 index 0000000..6d5700e --- /dev/null +++ b/harstorage/templates/dashboard/location/core.html @@ -0,0 +1,9 @@ +<%namespace name="jsloader" file="/dashboard/location/jsloader.html"/> +<%namespace name="dochead" file="/dashboard/location/dochead.html"/> + +${dochead.html("Dashboard - Trends by Location")} +
          +
          +
          +
          +${jsloader.html()} diff --git a/harstorage/templates/dashboard/location/dochead.html b/harstorage/templates/dashboard/location/dochead.html new file mode 100644 index 0000000..de3b293 --- /dev/null +++ b/harstorage/templates/dashboard/location/dochead.html @@ -0,0 +1,19 @@ +<%def name="html(title)"> + + + + + ${title} + + + + + + + + + + diff --git a/harstorage/templates/dashboard/location/jsloader.html b/harstorage/templates/dashboard/location/jsloader.html new file mode 100644 index 0000000..c585d50 --- /dev/null +++ b/harstorage/templates/dashboard/location/jsloader.html @@ -0,0 +1,75 @@ +<%def name="html()"> + + diff --git a/harstorage/templates/dashboard/overview/core.html b/harstorage/templates/dashboard/overview/core.html index d2c34ff..3f3c614 100644 --- a/harstorage/templates/dashboard/overview/core.html +++ b/harstorage/templates/dashboard/overview/core.html @@ -1,6 +1,5 @@ <%namespace name="jsloader" file="/dashboard/overview/jsloader.html"/> <%namespace name="dochead" file="/dashboard/overview/dochead.html"/> -<%namespace name="header" file="/common/header.html"/> <%namespace name="footer" file="/common/footer.html"/> <%namespace name="modules" file="/dashboard/overview/modules.html"/> From 90e3bbb82cc3317521909b96e6d4530653d1a7c6 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 11 May 2015 14:14:39 -0700 Subject: [PATCH 61/88] Missed on previous check-in, part of the same bundle for location tab breakout --- harstorage/templates/dashboard/jsloader.html | 29 ++------------------ 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/harstorage/templates/dashboard/jsloader.html b/harstorage/templates/dashboard/jsloader.html index 6203d47..7fb1ab3 100644 --- a/harstorage/templates/dashboard/jsloader.html +++ b/harstorage/templates/dashboard/jsloader.html @@ -50,33 +50,10 @@ var html = ''; //Setup the HTML for receiving the charts - $.each(configObj[0].trends, function(i, conf) { - html += "
          "; - html += "
          "; - html += "
          "; + html += ""; + html += "
          " + $('#dashboardTrendsIframeContainer').append(html); - var charts = conf.charts; - $.each(charts, function(j, chart) { - html += "
          "; - if((j+1) % 4 == 0) { - html += "
          "; - html += "
          "; - } - }); - html += "
          " - }); - $('#dashboardTrendsContainer').append(html); - - //Generate the charts - var dashboard = new HARSTORAGE.Dashboard(); - var timeFrameInDays = '30'; - var metrics = [ "full_page_time", "user_ready_time"]; - $.each(configObj[0].trends, function(i, conf) { - var charts = conf.charts; - $.each(charts, function(i, chart) { - dashboard.get(chart.title, chart.labels, metric, timeFrameInDays, metrics, chart.title + "-" + conf.tabName); - }); - }); }) .script("/scripts/tabber.js?ver=1.9.1").wait() From 41a8914d073e9e63055468d20c7dc2f4bc5357c4 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 12 May 2015 10:56:35 -0700 Subject: [PATCH 62/88] updated the dashboard plot options location to work with the iframe --- harstorage/public/scripts/harstorage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 5ff04cd..716c648 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -1471,7 +1471,7 @@ HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv) { events: { click: function() { if(this.series.name != 'Aggregate') { - location.href = "/results/details?label=" + this.series.name; + window.top.location.href = "/results/details?label=" + this.series.name; } } } From a253b167b99565cbb9be494cfcf1741296d79d8c Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 12 May 2015 10:58:01 -0700 Subject: [PATCH 63/88] Updated tab order to be consistent across all dashboard pages. Also renamed the legacy desktop as such --- dashboard_config.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index 27fcad1..5b27bfd 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -1,16 +1,16 @@ [ { -"overview" : [{ - "tabName" : "prod-desktop", +"overview" : [{ + "tabName" : "prod-mWeb", + "query" : "/superposed/display?step_1_label=unifiedEvent_cable_prod_RW&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EG&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_RW%2CunifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EG%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedHP_cable_prod_RW&step_2_label=unifiedHP_cable_prod_SLCD&step_2_label=unifiedHP_cable_prod_EG&step_2_label=unifiedHP_cable_prod_SF&step_2_label_hidden=unifiedHP_cable_prod_RW%2CunifiedHP_cable_prod_SLCD%2CunifiedHP_cable_prod_EG%2CunifiedHP_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedSearchResults_cable_prod_RW&step_3_label=unifiedSearchResults_cable_prod_SLCD&step_3_label=unifiedSearchResults_cable_prod_EG&step_3_label=unifiedSearchResults_cable_prod_SF&step_3_label_hidden=unifiedSearchResults_cable_prod_RW%2CunifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EG%2CunifiedSearchResults_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedTeam_cable_prod_RW&step_4_label=unifiedTeam_cable_prod_SLCD&step_4_label=unifiedTeam_cable_prod_EG&step_4_label=unifiedTeam_cable_prod_SF&step_4_label_hidden=unifiedTeam_cable_prod_RW%2CunifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EG%2CunifiedTeam_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedArtist_cable_prod_RW&step_5_label=unifiedArtist_cable_prod_SLCD&step_5_label=unifiedArtist_cable_prod_EG&step_5_label=unifiedArtist_cable_prod_SF&step_5_label_hidden=unifiedArtist_cable_prod_RW%2CunifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EG%2CunifiedArtist_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=unifiedVenue_cable_prod_RW&step_6_label=unifiedVenue_cable_prod_SLCD&step_6_label=unifiedVenue_cable_prod_EG&step_6_label=unifiedVenue_cable_prod_SF&step_6_label_hidden=unifiedVenue_cable_prod_RW%2CunifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EG%2CunifiedVenue_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=xo_newxo_cable_prod_SLCD&step_7_label=xo_newxo_cable_prod_EG&step_7_label=xo_newxo_cable_prod_SF&step_7_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EG%2Cxo_newxo_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCardsHP_cable_prod_RW&step_8_label=unifiedCardsHP_cable_prod_SLCD&step_8_label=unifiedCardsHP_cable_prod_EG&step_8_label=unifiedCardsHP_cable_prod_SF&step_8_label_hidden=unifiedCardsHP_cable_prod_RW%2CunifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EG%2CunifiedCardsHP_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedCategory_cable_prod_RW&step_9_label=unifiedCategory_cable_prod_SLCD&step_9_label=unifiedCategory_cable_prod_EG&step_9_label=unifiedCategory_cable_prod_SF&step_9_label_hidden=unifiedCategory_cable_prod_RW%2CunifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EG%2CunifiedCategory_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&step_10_label=unifiedGrouping_cable_prod_RW&step_10_label=unifiedGrouping_cable_prod_SLCD&step_10_label=unifiedGrouping_cable_prod_EG&step_10_label=unifiedGrouping_cable_prod_SF&step_10_label_hidden=unifiedGrouping_cable_prod_RW%2CunifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EG%2CunifiedGrouping_cable_prod_SF&step_10_start_ts=&step_10_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + }, + { + "tabName" : "prod-legacy-desktop", "query" : "/superposed/display?step_1_label=desktopHP_cable_prod_EG&step_1_label=desktopHP_cable_prod_RW&step_1_label=desktopHP_cable_prod_SF&step_1_label=desktopHP_cable_prod_SLCD&step_1_label_hidden=desktopHP_cable_prod_EG%2CdesktopHP_cable_prod_RW%2CdesktopHP_cable_prod_SF%2CdesktopHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktopSearch_cable_prod_EG&step_2_label=desktopSearch_cable_prod_RW&step_2_label=desktopSearch_cable_prod_SF&step_2_label=desktopSearch_cable_prod_SLCD&step_2_label_hidden=desktopSearch_cable_prod_EG%2CdesktopSearch_cable_prod_RW%2CdesktopSearch_cable_prod_SF%2CdesktopSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_category_cable_prod_EG&step_3_label=desktop_category_cable_prod_RW&step_3_label=desktop_category_cable_prod_SF&step_3_label=desktop_category_cable_prod_SLCD&step_3_label_hidden=desktop_category_cable_prod_EG%2Cdesktop_category_cable_prod_RW%2Cdesktop_category_cable_prod_SF%2Cdesktop_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_event_cable_prod_EG&step_4_label=desktop_event_cable_prod_RW&step_4_label=desktop_event_cable_prod_SF&step_4_label=desktop_event_cable_prod_SLCD&step_4_label_hidden=desktop_event_cable_prod_EG%2Cdesktop_event_cable_prod_RW%2Cdesktop_event_cable_prod_SF%2Cdesktop_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_grouping_cable_prod_EG&step_5_label=desktop_grouping_cable_prod_RW&step_5_label=desktop_grouping_cable_prod_SF&step_5_label=desktop_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_grouping_cable_prod_EG%2Cdesktop_grouping_cable_prod_RW%2Cdesktop_grouping_cable_prod_SF%2Cdesktop_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_venue_cable_prod_EG&step_6_label=desktop_venue_cable_prod_RW&step_6_label=desktop_venue_cable_prod_SF&step_6_label=desktop_venue_cable_prod_SLCD&step_6_label_hidden=desktop_venue_cable_prod_EG%2Cdesktop_venue_cable_prod_RW%2Cdesktop_venue_cable_prod_SF%2Cdesktop_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "prod-unified-desktop", "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EG&step_1_label=desktop_unifiedHP_cable_prod_RW&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EG%2Cdesktop_unifiedHP_cable_prod_RW%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EG&step_2_label=desktop_unifiedSearch_cable_prod_RW&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EG%2Cdesktop_unifiedSearch_cable_prod_RW%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EG&step_3_label=desktop_unified_category_cable_prod_RW&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EG%2Cdesktop_unified_category_cable_prod_RW%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EG&step_4_label=desktop_unified_event_cable_prod_RW&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EG%2Cdesktop_unified_event_cable_prod_RW%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EG&step_5_label=desktop_unified_grouping_cable_prod_RW&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EG%2Cdesktop_unified_grouping_cable_prod_RW%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EG&step_6_label=desktop_unified_venue_cable_prod_RW&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EG%2Cdesktop_unified_venue_cable_prod_RW%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, - { - "tabName" : "prod-mWeb", - "query" : "/superposed/display?step_1_label=unifiedEvent_cable_prod_RW&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EG&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_RW%2CunifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EG%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedHP_cable_prod_RW&step_2_label=unifiedHP_cable_prod_SLCD&step_2_label=unifiedHP_cable_prod_EG&step_2_label=unifiedHP_cable_prod_SF&step_2_label_hidden=unifiedHP_cable_prod_RW%2CunifiedHP_cable_prod_SLCD%2CunifiedHP_cable_prod_EG%2CunifiedHP_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedSearchResults_cable_prod_RW&step_3_label=unifiedSearchResults_cable_prod_SLCD&step_3_label=unifiedSearchResults_cable_prod_EG&step_3_label=unifiedSearchResults_cable_prod_SF&step_3_label_hidden=unifiedSearchResults_cable_prod_RW%2CunifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EG%2CunifiedSearchResults_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedTeam_cable_prod_RW&step_4_label=unifiedTeam_cable_prod_SLCD&step_4_label=unifiedTeam_cable_prod_EG&step_4_label=unifiedTeam_cable_prod_SF&step_4_label_hidden=unifiedTeam_cable_prod_RW%2CunifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EG%2CunifiedTeam_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedArtist_cable_prod_RW&step_5_label=unifiedArtist_cable_prod_SLCD&step_5_label=unifiedArtist_cable_prod_EG&step_5_label=unifiedArtist_cable_prod_SF&step_5_label_hidden=unifiedArtist_cable_prod_RW%2CunifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EG%2CunifiedArtist_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=unifiedVenue_cable_prod_RW&step_6_label=unifiedVenue_cable_prod_SLCD&step_6_label=unifiedVenue_cable_prod_EG&step_6_label=unifiedVenue_cable_prod_SF&step_6_label_hidden=unifiedVenue_cable_prod_RW%2CunifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EG%2CunifiedVenue_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=xo_newxo_cable_prod_SLCD&step_7_label=xo_newxo_cable_prod_EG&step_7_label=xo_newxo_cable_prod_SF&step_7_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EG%2Cxo_newxo_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCardsHP_cable_prod_RW&step_8_label=unifiedCardsHP_cable_prod_SLCD&step_8_label=unifiedCardsHP_cable_prod_EG&step_8_label=unifiedCardsHP_cable_prod_SF&step_8_label_hidden=unifiedCardsHP_cable_prod_RW%2CunifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EG%2CunifiedCardsHP_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedCategory_cable_prod_RW&step_9_label=unifiedCategory_cable_prod_SLCD&step_9_label=unifiedCategory_cable_prod_EG&step_9_label=unifiedCategory_cable_prod_SF&step_9_label_hidden=unifiedCategory_cable_prod_RW%2CunifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EG%2CunifiedCategory_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&step_10_label=unifiedGrouping_cable_prod_RW&step_10_label=unifiedGrouping_cable_prod_SLCD&step_10_label=unifiedGrouping_cable_prod_EG&step_10_label=unifiedGrouping_cable_prod_SF&step_10_label_hidden=unifiedGrouping_cable_prod_RW%2CunifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EG%2CunifiedGrouping_cable_prod_SF&step_10_start_ts=&step_10_end_ts=&chart=column&table=true&timeFormat=s&overview=true" - }, { "tabName" : "qa-desktop", "query" : "/superposed/display?step_1_label=unified_desktop_event_cable_slce006&step_1_label_hidden=unified_desktop_event_cable_slce006&step_1_start_ts=&step_1_end_ts=&step_2_label=unified_homepage_desktop_cable_slce006&step_2_label_hidden=unified_homepage_desktop_cable_slce006&step_2_start_ts=&step_2_end_ts=&step_3_label=unified_desktop_searchResults_cable_slce006&step_3_label_hidden=unified_desktop_searchResults_cable_slce006&step_3_start_ts=&step_3_end_ts=&step_4_label=unified_desktop_venue_cable_slcq020&step_4_label_hidden=unified_desktop_venue_cable_slcq020&step_4_start_ts=&step_4_end_ts=&chart=column&table=true&timeFormat=s&overview=true" From 2a1a1ec0205c437c2f529c66e7555af6503ad3d2 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 12 May 2015 11:14:36 -0700 Subject: [PATCH 64/88] Continuing to update the overview tabs to be uniform accross the dashboard --- dashboard_config.json | 8 ++++---- harstorage/templates/dashboard/core.html | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index 5b27bfd..c359da5 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -11,13 +11,13 @@ "tabName" : "prod-unified-desktop", "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EG&step_1_label=desktop_unifiedHP_cable_prod_RW&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EG%2Cdesktop_unifiedHP_cable_prod_RW%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EG&step_2_label=desktop_unifiedSearch_cable_prod_RW&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EG%2Cdesktop_unifiedSearch_cable_prod_RW%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EG&step_3_label=desktop_unified_category_cable_prod_RW&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EG%2Cdesktop_unified_category_cable_prod_RW%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EG&step_4_label=desktop_unified_event_cable_prod_RW&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EG%2Cdesktop_unified_event_cable_prod_RW%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EG&step_5_label=desktop_unified_grouping_cable_prod_RW&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EG%2Cdesktop_unified_grouping_cable_prod_RW%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EG&step_6_label=desktop_unified_venue_cable_prod_RW&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EG%2Cdesktop_unified_venue_cable_prod_RW%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, - { - "tabName" : "qa-desktop", - "query" : "/superposed/display?step_1_label=unified_desktop_event_cable_slce006&step_1_label_hidden=unified_desktop_event_cable_slce006&step_1_start_ts=&step_1_end_ts=&step_2_label=unified_homepage_desktop_cable_slce006&step_2_label_hidden=unified_homepage_desktop_cable_slce006&step_2_start_ts=&step_2_end_ts=&step_3_label=unified_desktop_searchResults_cable_slce006&step_3_label_hidden=unified_desktop_searchResults_cable_slce006&step_3_start_ts=&step_3_end_ts=&step_4_label=unified_desktop_venue_cable_slcq020&step_4_label_hidden=unified_desktop_venue_cable_slcq020&step_4_start_ts=&step_4_end_ts=&chart=column&table=true&timeFormat=s&overview=true" - }, { "tabName" : "qa-mWeb", "query" : "/superposed/display?step_1_label=unified_artist_cable_slcq020&step_1_label_hidden=unified_artist_cable_slcq020&step_1_start_ts=&step_1_end_ts=&step_2_label=unified_event_cable_srwe07&step_2_label_hidden=unified_event_cable_srwe07&step_2_start_ts=&step_2_end_ts=&step_3_label=unified_homepage_cable_app1_QA&step_3_label_hidden=unified_homepage_cable_app1_QA&step_3_start_ts=&step_3_end_ts=&step_4_label=unified_simplified_homepage_cable_QA&step_4_label_hidden=unified_simplified_homepage_cable_QA&step_4_start_ts=&step_4_end_ts=&step_5_label=unified_team_cable_slcq020&step_5_label_hidden=unified_team_cable_slcq020&step_5_start_ts=&step_5_end_ts=&step_6_label=unified_venue_cable_slcq020&step_6_label_hidden=unified_venue_cable_slcq020&step_6_start_ts=&step_6_end_ts=&step_7_label=xo_newxo_cable_slcq006&step_7_label_hidden=xo_newxo_cable_slcq006&step_7_start_ts=&step_7_end_ts=&step_8_label=uunified_searchResults_cable_slcq020&step_8_label_hidden=unified_searchResults_cable_slcq020&step_8_start_ts=&step_8_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + }, + { + "tabName" : "qa-desktop", + "query" : "/superposed/display?step_1_label=unified_desktop_event_cable_slce006&step_1_label_hidden=unified_desktop_event_cable_slce006&step_1_start_ts=&step_1_end_ts=&step_2_label=unified_homepage_desktop_cable_slce006&step_2_label_hidden=unified_homepage_desktop_cable_slce006&step_2_start_ts=&step_2_end_ts=&step_3_label=unified_desktop_searchResults_cable_slce006&step_3_label_hidden=unified_desktop_searchResults_cable_slce006&step_3_start_ts=&step_3_end_ts=&step_4_label=unified_desktop_venue_cable_slcq020&step_4_label_hidden=unified_desktop_venue_cable_slcq020&step_4_start_ts=&step_4_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }], "trends" : [{ "tabName": "mWeb", diff --git a/harstorage/templates/dashboard/core.html b/harstorage/templates/dashboard/core.html index dd313ec..75469dc 100644 --- a/harstorage/templates/dashboard/core.html +++ b/harstorage/templates/dashboard/core.html @@ -10,21 +10,21 @@
          -
          +
          +
          +
          +
          -
          -
          +
          +
          -
          -
          -
          From fb694d9c66d97ead31b3c8d2dc1e0147ffb72f8e Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 18 May 2015 15:51:56 -0700 Subject: [PATCH 65/88] If a pagename is available use that in the display instead of the label --- harstorage/controllers/superposed.py | 26 ++++++++++++++----- .../templates/dashboard/overview/modules.html | 7 +---- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index faac2f5..4adee98 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -117,21 +117,35 @@ def display(self): start_ts = request.GET["step_" + str(row_index + 1) + "_start_ts"] end_ts = request.GET["step_" + str(row_index + 1) + "_end_ts"] - # Add label - c.metrics_table[0].append(label[:40]) - c.points += label[:40] + "#" - # Fetch test results labels = label.split(",") condition = { "label": { '$in': labels}, "timestamp": {"$gte": start_ts, "$lte": end_ts} } + fields = list() + for metric in self.METRICS: + fields.append(metric) + fields.append("pagename") + documents = md_handler.collection.find(condition, - fields=aggregator.METRICS) + fields=fields) # Add data row to aggregator - aggregator.add_row(label[:40], row_index, documents) + if forOverview == "true": + try: + pagename = documents[0]["pagename"] + except: + pagename = label[:40] + + aggregator.add_row(pagename, row_index, documents) + c.metrics_table[0].append(pagename) + c.points += pagename + "#" + else: + # Add label + c.metrics_table[0].append(label[:40]) + c.points += label[:40] + "#" + aggregator.add_row(label[:40], row_index, documents) # Aggregated data per column column = 1 diff --git a/harstorage/templates/dashboard/overview/modules.html b/harstorage/templates/dashboard/overview/modules.html index 784b577..955870f 100644 --- a/harstorage/templates/dashboard/overview/modules.html +++ b/harstorage/templates/dashboard/overview/modules.html @@ -16,12 +16,7 @@ % for row in range(c.rowcount): - % if "," not in c.metrics_table[0][row]: - - ${c.metrics_table[0][row]} - % else: - ${c.metrics_table[0][row]} - % endif + ${c.metrics_table[0][row]} % for column in range(len(c.headers)-1): ${c.metrics_table[column+1][row]} % endfor From 45d7156450e655f435f6bd766b81fa871005f4b9 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Mon, 18 May 2015 15:58:35 -0700 Subject: [PATCH 66/88] Fixed a bug where the prod legacy desktop wasn't showing --- harstorage/templates/dashboard/core.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harstorage/templates/dashboard/core.html b/harstorage/templates/dashboard/core.html index 75469dc..9ee8681 100644 --- a/harstorage/templates/dashboard/core.html +++ b/harstorage/templates/dashboard/core.html @@ -14,7 +14,7 @@
          -
          +
          From 81ce72b48fe10a413103082872c28abd047a2bdb Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 20 May 2015 10:06:19 -0700 Subject: [PATCH 67/88] Made the metric for graphing part of the URI call instead of hard coded --- harstorage/controllers/results.py | 11 ++++++----- harstorage/public/scripts/harstorage.js | 2 +- harstorage/templates/dashboard/location/jsloader.html | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 9de70ba..057a9a8 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -566,14 +566,15 @@ def dashboardChart(self): # Aggregation option c.agg_type = request.GET.get("aggMethod", "Average") timeFrameInDays = int(request.GET.get("timeFrameInDays", "7")) - metrics = h.decode_uri(request.GET["metrics"]) + metric = h.decode_uri(request.GET["metric"]) yLabels = str() - yLabels += "Full Load Time" + yLabels += metric # Metrics - FIELDS = ( "label", "timestamp", "full_load_time") + FIELDS = ["label", "timestamp"] + FIELDS.append(metric) # Read data for timeline from database in custom format (hash separated) labels = label.split(",") @@ -641,8 +642,8 @@ def dashboardChart(self): # Date has changed, so add the row and reset for the next loop # Data is getting reversed in the pionts array somehow, need to check this if timestamp == ts: - docs.append(row["full_load_time"]) - aggregated_docs[counter].append(row["full_load_time"]) + docs.append(row[metric]) + aggregated_docs[counter].append(row[metric]) else: if len(docs) > 0: points += str(aggregator.get_aggregated_value(docs, c.agg_type, c.agg_type)) + str("#") diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 716c648..276793c 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -1346,7 +1346,7 @@ HARSTORAGE.Dashboard.prototype.get = function(graph, labels, aggMethod, timeFram } }; - var URI = "/results/dashboardChart?labels=" + encodeURIComponent(labels) + "&aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays + "&metrics=" + encodeURIComponent(metrics); + var URI = "/results/dashboardChart?labels=" + encodeURIComponent(labels) + "&aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays + "&metric=" + encodeURIComponent(metrics); xhr.open("GET", URI, true); xhr.send(); diff --git a/harstorage/templates/dashboard/location/jsloader.html b/harstorage/templates/dashboard/location/jsloader.html index c585d50..2d04a80 100644 --- a/harstorage/templates/dashboard/location/jsloader.html +++ b/harstorage/templates/dashboard/location/jsloader.html @@ -30,7 +30,7 @@ html += "
          "; html += "

          Aggregated Statistics

          "; html += "
          "; - html += ""; html += ""; html += ""; html += ""; @@ -40,7 +40,7 @@ html += "
          "; html += "
          "; - selectorIds.push("metrics-" + conf.tabName); + selectorIds.push("aggMethod-" + conf.tabName); var charts = conf.charts; $.each(charts, function(j, chart) { @@ -58,7 +58,7 @@ //Generate the charts var dashboard = new HARSTORAGE.Dashboard(); var timeFrameInDays = '30'; - var metrics = [ "full_page_time", "user_ready_time"]; + var metrics = "full_load_time"; $.each(configObj[0].trends, function(i, conf) { $(".chosen-select-" + conf.tabName).chosen(); var charts = conf.charts; From 083550bfa1cd35ae90bd7c5ff1d8391b42ede7ad Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Thu, 21 May 2015 10:17:11 -0700 Subject: [PATCH 68/88] Added a new dropdown to the dashboard loation tab giving the ability to switch between full and user ready times --- harstorage/public/scripts/harstorage.js | 62 ++++++++++++++++--- harstorage/public/styles/main.css | 3 +- harstorage/templates/dashboard/jsloader.html | 3 +- .../dashboard/location/jsloader.html | 33 +++++++--- 4 files changed, 82 insertions(+), 19 deletions(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 276793c..7259431 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -920,6 +920,25 @@ HARSTORAGE.AggregatedStatistics = function(id) { }; }; +HARSTORAGE.replaceUrlParam = function(url, paramName, paramValue){ + var pattern = new RegExp('('+paramName+'=).*?(&|$)') + var newUrl=url + if(url.search(pattern)>=0){ + newUrl = url.replace(pattern,'$1' + paramValue + '$2'); + } + else{ + newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue + } + return newUrl +} + +HARSTORAGE.getParameterByName = function(name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); +} + /* * Setting the aggregate option list for the dashboard location tab */ @@ -930,16 +949,41 @@ HARSTORAGE.setAggregatedForDashboard = function(ids) { var metric, href; - if (location.href.indexOf("metric") === -1) { - href = location.href + "?metric="; - metric = "Average"; - } else { - href = location.href.split("metric")[0] + "metric="; - metric = location.href.split("metric")[1].split("=")[1]; + metric = HARSTORAGE.getParameterByName("metric"); + if (metric == "") { + metric = "Average"; + } - if (metric === "90th%20Percentile") { - metric = "90th Percentile"; + // Update selector box active option + $.each(ids, function(i, id) { + var selector = document.getElementById(id); + for (var i = 0, len = selector.options.length; i < len; i += 1 ) { + if (selector.options[i].value === metric) { + selector.selectedIndex = i; + $("#" + id).trigger("liszt:updated"); + break; + } } + // Add event handler to selector box + selector.onchange = function() { + location.href = HARSTORAGE.replaceUrlParam(location.href, "metric", this.value); + }; + }); + +}; + +/* +* Setting the metrics option list for the dashboard location tab +*/ +HARSTORAGE.setMetricsForDashboard = function(ids) { + "use strict"; + + // Determine metric type from Query string + var metric, + href; + metric = HARSTORAGE.getParameterByName("value"); + if (metric == "") { + metric = "full_load_time"; } // Update selector box active option @@ -954,7 +998,7 @@ HARSTORAGE.setAggregatedForDashboard = function(ids) { } // Add event handler to selector box selector.onchange = function() { - location.href = href + this.value; + location.href = HARSTORAGE.replaceUrlParam(location.href, "value", this.value); }; }); diff --git a/harstorage/public/styles/main.css b/harstorage/public/styles/main.css index 850e5dd..6e4492c 100644 --- a/harstorage/public/styles/main.css +++ b/harstorage/public/styles/main.css @@ -325,7 +325,8 @@ body a:hover { } .dashboard-container .selector { text-align: center; - margin: 12px 0 18px 0; + margin: 12px 10px 18px 0; + padding-left: 10px; } .dashboard-container .title { font-family: times, "Times New Roman", times-roman, georgia, serif; diff --git a/harstorage/templates/dashboard/jsloader.html b/harstorage/templates/dashboard/jsloader.html index 7fb1ab3..56ec25a 100644 --- a/harstorage/templates/dashboard/jsloader.html +++ b/harstorage/templates/dashboard/jsloader.html @@ -18,6 +18,7 @@ var monthStr = month; var metric = "90th Percentile"; var metricUrlEncoded = "90th%20Percentile"; + var value = "full_load_time"; if(month<10) { monthStr = '0'+month; @@ -50,7 +51,7 @@ var html = ''; //Setup the HTML for receiving the charts - html += ""; + html += ""; html += "
          " $('#dashboardTrendsIframeContainer').append(html); diff --git a/harstorage/templates/dashboard/location/jsloader.html b/harstorage/templates/dashboard/location/jsloader.html index 2d04a80..6960e59 100644 --- a/harstorage/templates/dashboard/location/jsloader.html +++ b/harstorage/templates/dashboard/location/jsloader.html @@ -14,23 +14,30 @@ config = config.replace(/'/g,"\""); var configObj = JSON.parse(config); - var metric = "90th Percentile"; + var aggMethod = "90th Percentile"; + var metric = "full_load_time"; if (location.href.indexOf("metric") > -1) { - metric = location.href.split("metric")[1].split("=")[1]; - if (metric === "90th%20Percentile") { - metric = "90th Percentile"; + aggMethod = location.href.split("metric")[1].split("=")[1]; + if (aggMethod === "90th%20Percentile") { + aggMethod = "90th Percentile"; } } + if (location.href.indexOf("value") > -1) { + metric = location.href.split("value")[1].split("=")[1]; + } + var html = ''; var selectorIds = []; + var metricsSelectorIds = []; //Setup the HTML for receiving the charts $.each(configObj[0].trends, function(i, conf) { html += "
          "; html += "
          "; + html += "
          "; html += "

          Aggregated Statistics

          "; html += "
          "; - html += ""; html += ""; html += ""; html += ""; @@ -38,9 +45,18 @@ html += ""; html += ""; html += "
          "; + html += "

          Metric

          "; + html += "
          "; + html += ""; + html += "
          "; + html += "
          "; html += "
          "; selectorIds.push("aggMethod-" + conf.tabName); + metricsSelectorIds.push("metric-" + conf.tabName); var charts = conf.charts; $.each(charts, function(j, chart) { @@ -58,16 +74,17 @@ //Generate the charts var dashboard = new HARSTORAGE.Dashboard(); var timeFrameInDays = '30'; - var metrics = "full_load_time"; $.each(configObj[0].trends, function(i, conf) { - $(".chosen-select-" + conf.tabName).chosen(); + $(".chosen-select-agg-" + conf.tabName).chosen(); + $(".chosen-select-metric-" + conf.tabName).chosen(); var charts = conf.charts; $.each(charts, function(i, chart) { - dashboard.get(chart.title, chart.labels, metric, timeFrameInDays, metrics, chart.title + "-" + conf.tabName); + dashboard.get(chart.title, chart.labels, aggMethod, timeFrameInDays, metric, chart.title + "-" + conf.tabName); }); }); HARSTORAGE.setAggregatedForDashboard(selectorIds); + HARSTORAGE.setMetricsForDashboard(metricsSelectorIds); }) .script("/scripts/tabber.js?ver=1.9.1").wait() From a5d9ed9a7095673a3851f19ee4dea223ba199f7b Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 26 May 2015 16:58:47 -0700 Subject: [PATCH 69/88] Adding an aggregate trending line chart to the overview tabs --- dashboard_config.json | 132 +++++++++++++++++- harstorage/controllers/results.py | 98 +++++++++++++ harstorage/public/scripts/harstorage.js | 34 ++++- harstorage/templates/dashboard/jsloader.html | 1 + .../templates/dashboard/overview/core.html | 2 + .../dashboard/overview/jsloader.html | 7 + 6 files changed, 270 insertions(+), 4 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index c359da5..ef90797 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -147,5 +147,135 @@ ] }] } -] +], +"aggTrendCharts" : { + "metrics" : [ "full_load_time", "user_ready_time"], + "defaultAggMethod" : "90th Percentile", + "prod-mWeb": { + "charts" : [ + { + "title": "Explore Home Page", + "labels": [ + "unifiedCardsHP_cable_prod_SLCD", + "unifiedCardsHP_cable_prod_SF", + "unifiedCardsHP_cable_prod_EG" + ] + }, + { + "title":"Event Page", + "labels": [ + "unifiedEvent_cable_prod_SLCD", + "unifiedEvent_cable_prod_SF", + "unifiedEvent_cable_prod_EG" + ] + }, + { + "title":"Search Results Page", + "labels": [ + "unifiedSearchResults_cable_prod_SLCD", + "unifiedSearchResults_cable_prod_SF", + "unifiedSearchResults_cable_prod_EG" + ] + }, + { + "title":"Artist Page", + "labels": [ + "unifiedArtist_cable_prod_SLCD", + "unifiedArtist_cable_prod_SF", + "unifiedArtist_cable_prod_EG" + ] + }, + { + "title":"Team Page", + "labels": [ + "unifiedTeam_cable_prod_SLCD", + "unifiedTeam_cable_prod_SF", + "unifiedTeam_cable_prod_EG" + ] + }, + { + "title":"Venue Page", + "labels": [ + "unifiedVenue_cable_prod_SLCD", + "unifiedVenue_cable_prod_SF", + "unifiedVenue_cable_prod_EG" + ] + }, + { + "title":"XO Page", + "labels":[ + "xo_newxo_cable_prod_SLCD", + "xo_newxo_cable_prod_SF", + "xo_newxo_cable_prod_EG" + ] + }, + { + "title":"Category Page", + "labels":[ + "unifiedCategory_cable_prod_SLCD", + "unifiedCategory_cable_prod_EG", + "unifiedCategory_cable_prod_SF" + ] + }, + { + "title":"Grouping Page", + "labels":[ + "unifiedGrouping_cable_prod_SLCD", + "unifiedGrouping_cable_prod_EG", + "unifiedGrouping_cable_prod_SF" + ] + }] + }, + "prod-legacy-desktop": { + "charts" : [ + { + "title": "Home Page", + "labels": [ + "desktopHP_cable_prod_EG", + "desktopHP_cable_prod_SLCD", + "desktopHP_cable_prod_SF" + ] + }, + { + "title": "Search Results Page", + "labels": [ + "desktopSearch_cable_prod_EG", + "desktopSearch_cable_prod_SLCD", + "desktopSearch_cable_prod_SF" + ] + }, + { + "title": "Event Page", + "labels": [ + "desktop_event_cable_prod_EG", + "desktop_event_cable_prod_SLCD", + "desktop_event_cable_prod_SF" + ] + }, + { + "title": "Grouping Page", + "labels": [ + "desktop_grouping_cable_prod_EG", + "desktop_grouping_cable_prod_SLCD", + "desktop_grouping_cable_prod_SF" + ] + }, + { + "title": "Venue Page", + "labels": [ + "desktop_venue_cable_prod_EG", + "desktop_venue_cable_prod_SLCD", + "desktop_venue_cable_prod_SF" + ] + }, + { + "title": "Category Page", + "labels": [ + "desktop_category_cable_prod_EG", + "desktop_category_cable_prod_SLCD", + "desktop_category_cable_prod_SF" + ] + }] + } +} }] \ No newline at end of file diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 057a9a8..296e137 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -672,3 +672,101 @@ def dashboardChart(self): c.points = yLabels +';'+seriesNames +';'+categories+';'+points+';'+agg_points return c.points + + @restrict("GET") + def dashboardAggregateTrendingChart(self): + """Generate data for average trending timeline chart""" + + # Load the config file and it's data + filename = os.path.join(config["app_conf"]["dashboard_config_dir"], config["app_conf"]["dashboard_config_filename"]) + with open(filename) as json_file: + configData = json.load(json_file) + + aggTrendCharts = str() + for jsonObj in configData: + aggTrendCharts = jsonObj["aggTrendCharts"]; + + defaultAggMethod = aggTrendCharts["defaultAggMethod"] + metrics = aggTrendCharts["metrics"] + + # requestParams + tabName = h.decode_uri(request.GET["tabName"]) + agg_type = request.GET.get("aggMethod", defaultAggMethod) + timeFrameInDays = int(request.GET.get("timeFrameInDays", "7")) + startTs = strftime("%Y-%m-%d 00:00:00", gmtime(time.time()-(timeFrameInDays*24*60*60))) + + try: + tabData = aggTrendCharts[tabName] + charts = tabData["charts"] + except: + # No configured chart for this tab, return empty points + return "" + + # Setup the chart data + seriesNames = str() + points = str() + categories = str() + timestamps = list() + + # Aggregator + aggregator = Aggregator() + + for t in range (0, timeFrameInDays): + newTime = time.strftime("%Y-%m-%d", gmtime(time.time()-(timeFrameInDays-t)*24*60*60)) + categories += newTime + "#" + timestamps.append(newTime) + + categories = categories[:-1] + + # Loop returned charts for tab + # Get the title and tests for aggregating + # Query the dataset and aggregate + for metric in metrics: + for chart in charts: + labels = chart["labels"] + seriesNames += chart["title"] + "-" + metric + "#" + counter = 0 + + + # fields results from datastore + fields = ["label", "timestamp"] + fields.append(metric) + + condition = { + "label": { '$in': labels}, + "timestamp": {"$gte": startTs} + } + results = MongoDB().collection.find( + condition, + fields = fields, + sort = [("timestamp", 1)]) + + #Initialize a list for capturing the resulting metric data to analyze + aggregated_docs = list() + + for result in results: + ts = timestamps[counter] + timestamp = result["timestamp"][:-9] + # Date has changed, so add the row and reset for the next loop + # Data is getting reversed in the pionts array somehow, need to check this + if timestamp == ts: + aggregated_docs.append(result[metric]) + else: + if len(aggregated_docs) > 0: + points += str(aggregator.get_aggregated_value(aggregated_docs, agg_type, agg_type)) + str("#") + else: + points += "n/a#" + # set vars for the next loop + aggregated_docs = list() + counter += 1 + if counter >= len(timestamps): + break + points = points[:-1] + points += ";" + + points = points[:-1] + + # Final chart points + points = "Time" +';'+seriesNames +';'+categories+';'+points + + return points diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 7259431..fc29210 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -1386,7 +1386,7 @@ HARSTORAGE.Dashboard.prototype.get = function(graph, labels, aggMethod, timeFram xhr.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { - that.draw(graph, this.responseText, renderToDiv); + that.draw(graph, this.responseText, renderToDiv, true); } }; @@ -1475,7 +1475,7 @@ HARSTORAGE.Dashboard.prototype.converter = function(points) { }; // Dashboard Draw graph -HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv) { +HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv, allowLinkTo) { "use strict"; // Pointer @@ -1514,7 +1514,7 @@ HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv) { point: { events: { click: function() { - if(this.series.name != 'Aggregate') { + if(this.series.name != 'Aggregate' && allowLinkTo) { window.top.location.href = "/results/details?label=" + this.series.name; } } @@ -1526,3 +1526,31 @@ HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv) { }); }; +/* +* Get data for the dashboard chart +* tabName - Name of the tab to fetch the chart for +* aggMethod - How to aggregate the data (average, 90th Percentile, etc...) +* timeFrameInDays - How many days back to see results for +* renderToDiv - the div to render the chart to +*/ +HARSTORAGE.Dashboard.prototype.getAggregateTrendChart = function(tabName, aggMethod, timeFrameInDays, renderToDiv) { + "use strict"; + + // Pointer + var that = this; + + // Retrieve data for timeline via XHR call + var xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + if(this.responseText != "") + that.draw(tabName, this.responseText, renderToDiv, false); + } + }; + + var URI = "/results/dashboardAggregateTrendingChart?tabName=" + encodeURIComponent(tabName) + "&aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays; + + xhr.open("GET", URI, true); + xhr.send(); +}; diff --git a/harstorage/templates/dashboard/jsloader.html b/harstorage/templates/dashboard/jsloader.html index 56ec25a..b1f99cf 100644 --- a/harstorage/templates/dashboard/jsloader.html +++ b/harstorage/templates/dashboard/jsloader.html @@ -41,6 +41,7 @@ query = query.replace(//g,sdFormatted); query = query.replace(//g,tFormatted); query = query + '&metric=' + metricUrlEncoded; + query = query + '&tabName=' + conf.tabName; var iframeHtml = ""; $('#'+conf.tabName+'-container').append(iframeHtml); diff --git a/harstorage/templates/dashboard/overview/core.html b/harstorage/templates/dashboard/overview/core.html index 3f3c614..6c7ec23 100644 --- a/harstorage/templates/dashboard/overview/core.html +++ b/harstorage/templates/dashboard/overview/core.html @@ -18,6 +18,8 @@
          +
          + % if c.chart == "true": ${modules.chart()} % endif diff --git a/harstorage/templates/dashboard/overview/jsloader.html b/harstorage/templates/dashboard/overview/jsloader.html index b3b7ffb..38c107c 100644 --- a/harstorage/templates/dashboard/overview/jsloader.html +++ b/harstorage/templates/dashboard/overview/jsloader.html @@ -19,6 +19,13 @@ .wait(function(){ HARSTORAGE.AggregatedStatistics("metrics"); + var dashboard = new HARSTORAGE.Dashboard(); + var tabName = HARSTORAGE.getParameterByName("tabName"); + var aggMethod = HARSTORAGE.getParameterByName("metric"); + var timeFrameInDays = '30'; + + dashboard.getAggregateTrendChart(tabName, aggMethod, timeFrameInDays, "aggTrendsChart"); + % if c.chart == "true": var columns = new HARSTORAGE.Columns(); columns.draw("${c.points}", "${c.chart_type}"); From c06cc52b46b3354d3fd13f2de8c23b879b7d5e55 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 27 May 2015 12:59:56 -0700 Subject: [PATCH 70/88] Fixing aggregate stat dropdown issue and adding jpg export options --- harstorage/public/scripts/harstorage.js | 110 ++++--------------- harstorage/templates/dashboard/jsloader.html | 2 +- 2 files changed, 22 insertions(+), 90 deletions(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index fc29210..0f75a9f 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -891,16 +891,12 @@ HARSTORAGE.AggregatedStatistics = function(id) { var metric, href; - if (location.href.indexOf("metric") === -1) { - href = location.href + "&metric="; - metric = "Average"; - } else { - href = location.href.split("metric")[0] + "metric="; - metric = location.href.split("metric")[1].split("=")[1]; - - if (metric === "90th%20Percentile") { - metric = "90th Percentile"; - } + metric = HARSTORAGE.getParameterByName("metric"); + if (metric == "") { + metric = "Average"; + } + if (metric === "90th%20Percentile") { + metric = "90th Percentile"; } // Update selector box active option @@ -917,6 +913,7 @@ HARSTORAGE.AggregatedStatistics = function(id) { // Add event handler to selector box selector.onchange = function() { location.href = href + this.value; + location.href = HARSTORAGE.replaceUrlParam(location.href, "metric", this.value); }; }; @@ -1230,83 +1227,6 @@ HARSTORAGE.SuperposeForm.prototype.del = function(button) { } }; -// Set timelines for selected label -/* -HARSTORAGE.SuperposeForm.prototype.setTimestamps = function(id) { - "use strict"; - - // Poiner - var that = this; - - // Dynamic data - this.dates = []; - - // Show Ajax spinner - this.spinner.style.display = "block"; - - // Update timestamps - var set_data = function() { - var i, - len, - ts; - - // Calculate id - id = id.split("_")[0] + "_" + id.split("_")[1]; - - // Hide Ajax spinner - that.spinner.style.display = "none"; - - // Update cache - if (typeof(that.cache[that.URI]) === "undefined") { - that.dates = that.xhr.responseText.split(";"); - that.cache[that.URI] = that.dates; - } else { - that.dates.reverse(); - } - - // Start timestamps - var select = document.getElementById(id + "_start_ts"); - select.options.length = 0; - - for (i = 0, len = that.dates.length; i < len; i += 1) { - ts = that.dates[i]; - select.options[i] = new Option(ts, ts, false, false); - } - - // End timestamps - select = document.getElementById(id + "_end_ts"); - select.options.length = 0; - that.dates.reverse(); - - for (i = 0, len = that.dates.length; i < len; i += 1) { - ts = that.dates[i]; - select.options[i] = new Option(ts, ts, false, false); - } - }; - - // Request data via XHR or read from cache - var select = document.getElementById(id); - var label = select.options[select.selectedIndex].text; - this.URI = "dates?label=" + label; - - this.xhr = new XMLHttpRequest(); - - this.xhr.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - set_data(); - } - }; - - if (typeof(this.cache[this.URI]) === "undefined") { - this.xhr.open("GET", this.URI, true); - this.xhr.send(); - } else { - this.dates = this.cache[this.URI]; - set_data(); - } -}; -*/ - // Add Ajax spinner HARSTORAGE.SuperposeForm.prototype.addSpinner = function() { "use strict"; @@ -1498,7 +1418,19 @@ HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv, allow enabled: false }, exporting: { - enabled: false + buttons: { + printButton: { + enabled: false + }, + exportButton: { + menuItems: [ + {}, + null, + null, + {} + ] + } + }, }, title: { text: graph @@ -1549,7 +1481,7 @@ HARSTORAGE.Dashboard.prototype.getAggregateTrendChart = function(tabName, aggMet } }; - var URI = "/results/dashboardAggregateTrendingChart?tabName=" + encodeURIComponent(tabName) + "&aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays; + var URI = "/results/dashboardAggregateTrendingChart?aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays + "&tabName=" + encodeURIComponent(tabName); xhr.open("GET", URI, true); xhr.send(); diff --git a/harstorage/templates/dashboard/jsloader.html b/harstorage/templates/dashboard/jsloader.html index b1f99cf..daad26c 100644 --- a/harstorage/templates/dashboard/jsloader.html +++ b/harstorage/templates/dashboard/jsloader.html @@ -52,7 +52,7 @@ var html = ''; //Setup the HTML for receiving the charts - html += ""; + html += ""; html += "
          " $('#dashboardTrendsIframeContainer').append(html); From 4f304e4932afee4e62c46bc3979e6597222b1725 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 27 May 2015 13:04:12 -0700 Subject: [PATCH 71/88] Added a 5px spacing between charts --- harstorage/templates/dashboard/overview/core.html | 2 +- harstorage/templates/dashboard/overview/modules.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/harstorage/templates/dashboard/overview/core.html b/harstorage/templates/dashboard/overview/core.html index 6c7ec23..4ba0884 100644 --- a/harstorage/templates/dashboard/overview/core.html +++ b/harstorage/templates/dashboard/overview/core.html @@ -18,7 +18,7 @@
          -
          +
          % if c.chart == "true": ${modules.chart()} diff --git a/harstorage/templates/dashboard/overview/modules.html b/harstorage/templates/dashboard/overview/modules.html index 955870f..6fbe2ed 100644 --- a/harstorage/templates/dashboard/overview/modules.html +++ b/harstorage/templates/dashboard/overview/modules.html @@ -1,5 +1,5 @@ <%def name="chart()"> -
          +
          <%def name="table()"> From 2c0061823824c55ba370ebd426d3c3a9400f00a1 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 27 May 2015 13:33:11 -0700 Subject: [PATCH 72/88] Altered to display 2 seperate graphs based upon metric to avoid data clutter --- dashboard_config.json | 1 - harstorage/controllers/results.py | 81 +++++++++---------- harstorage/public/scripts/harstorage.js | 6 +- .../templates/dashboard/overview/core.html | 3 +- .../dashboard/overview/jsloader.html | 3 +- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index ef90797..52f6a53 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -149,7 +149,6 @@ } ], "aggTrendCharts" : { - "metrics" : [ "full_load_time", "user_ready_time"], "defaultAggMethod" : "90th Percentile", "prod-mWeb": { "charts" : [ diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 296e137..4849d62 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -687,10 +687,11 @@ def dashboardAggregateTrendingChart(self): aggTrendCharts = jsonObj["aggTrendCharts"]; defaultAggMethod = aggTrendCharts["defaultAggMethod"] - metrics = aggTrendCharts["metrics"] # requestParams tabName = h.decode_uri(request.GET["tabName"]) + metric = h.decode_uri(request.GET["metric"]) + agg_type = request.GET.get("aggMethod", defaultAggMethod) timeFrameInDays = int(request.GET.get("timeFrameInDays", "7")) startTs = strftime("%Y-%m-%d 00:00:00", gmtime(time.time()-(timeFrameInDays*24*60*60))) @@ -721,48 +722,46 @@ def dashboardAggregateTrendingChart(self): # Loop returned charts for tab # Get the title and tests for aggregating # Query the dataset and aggregate - for metric in metrics: - for chart in charts: - labels = chart["labels"] - seriesNames += chart["title"] + "-" + metric + "#" - counter = 0 - + for chart in charts: + labels = chart["labels"] + seriesNames += chart["title"] + "-" + metric + "#" + counter = 0 - # fields results from datastore - fields = ["label", "timestamp"] - fields.append(metric) - - condition = { - "label": { '$in': labels}, - "timestamp": {"$gte": startTs} - } - results = MongoDB().collection.find( - condition, - fields = fields, - sort = [("timestamp", 1)]) - - #Initialize a list for capturing the resulting metric data to analyze - aggregated_docs = list() - - for result in results: - ts = timestamps[counter] - timestamp = result["timestamp"][:-9] - # Date has changed, so add the row and reset for the next loop - # Data is getting reversed in the pionts array somehow, need to check this - if timestamp == ts: - aggregated_docs.append(result[metric]) + # fields results from datastore + fields = ["label", "timestamp"] + fields.append(metric) + + condition = { + "label": { '$in': labels}, + "timestamp": {"$gte": startTs} + } + results = MongoDB().collection.find( + condition, + fields = fields, + sort = [("timestamp", 1)]) + + #Initialize a list for capturing the resulting metric data to analyze + aggregated_docs = list() + + for result in results: + ts = timestamps[counter] + timestamp = result["timestamp"][:-9] + # Date has changed, so add the row and reset for the next loop + # Data is getting reversed in the pionts array somehow, need to check this + if timestamp == ts: + aggregated_docs.append(result[metric]) + else: + if len(aggregated_docs) > 0: + points += str(aggregator.get_aggregated_value(aggregated_docs, agg_type, agg_type)) + str("#") else: - if len(aggregated_docs) > 0: - points += str(aggregator.get_aggregated_value(aggregated_docs, agg_type, agg_type)) + str("#") - else: - points += "n/a#" - # set vars for the next loop - aggregated_docs = list() - counter += 1 - if counter >= len(timestamps): - break - points = points[:-1] - points += ";" + points += "n/a#" + # set vars for the next loop + aggregated_docs = list() + counter += 1 + if counter >= len(timestamps): + break + points = points[:-1] + points += ";" points = points[:-1] diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 0f75a9f..41ebde4 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -1465,7 +1465,7 @@ HARSTORAGE.Dashboard.prototype.draw = function(graph, points, renderToDiv, allow * timeFrameInDays - How many days back to see results for * renderToDiv - the div to render the chart to */ -HARSTORAGE.Dashboard.prototype.getAggregateTrendChart = function(tabName, aggMethod, timeFrameInDays, renderToDiv) { +HARSTORAGE.Dashboard.prototype.getAggregateTrendChart = function(tabName, aggMethod, timeFrameInDays, renderToDiv, metric) { "use strict"; // Pointer @@ -1477,11 +1477,11 @@ HARSTORAGE.Dashboard.prototype.getAggregateTrendChart = function(tabName, aggMet xhr.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { if(this.responseText != "") - that.draw(tabName, this.responseText, renderToDiv, false); + that.draw(tabName + " - " + metric, this.responseText, renderToDiv, false); } }; - var URI = "/results/dashboardAggregateTrendingChart?aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays + "&tabName=" + encodeURIComponent(tabName); + var URI = "/results/dashboardAggregateTrendingChart?aggMethod=" + aggMethod + "&timeFrameInDays=" + timeFrameInDays + "&tabName=" + encodeURIComponent(tabName) + "&metric=" + metric; xhr.open("GET", URI, true); xhr.send(); diff --git a/harstorage/templates/dashboard/overview/core.html b/harstorage/templates/dashboard/overview/core.html index 4ba0884..030a72f 100644 --- a/harstorage/templates/dashboard/overview/core.html +++ b/harstorage/templates/dashboard/overview/core.html @@ -18,7 +18,8 @@
          -
          +
          +
          % if c.chart == "true": ${modules.chart()} diff --git a/harstorage/templates/dashboard/overview/jsloader.html b/harstorage/templates/dashboard/overview/jsloader.html index 38c107c..ccec21f 100644 --- a/harstorage/templates/dashboard/overview/jsloader.html +++ b/harstorage/templates/dashboard/overview/jsloader.html @@ -24,7 +24,8 @@ var aggMethod = HARSTORAGE.getParameterByName("metric"); var timeFrameInDays = '30'; - dashboard.getAggregateTrendChart(tabName, aggMethod, timeFrameInDays, "aggTrendsChart"); + dashboard.getAggregateTrendChart(tabName, aggMethod, timeFrameInDays, "aggTrendsChart-full", "full_load_time"); + dashboard.getAggregateTrendChart(tabName, aggMethod, timeFrameInDays, "aggTrendsChart-user", "user_ready_time"); % if c.chart == "true": var columns = new HARSTORAGE.Columns(); From 1db52cf143872794c511cbe99c08b73ad8dc4bf1 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 3 Jun 2015 09:19:05 -0700 Subject: [PATCH 73/88] Metric is now passed in. Renamed charts accordingly and also set the y axis to be in seconds --- harstorage/controllers/results.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 4849d62..fecb36a 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -646,7 +646,7 @@ def dashboardChart(self): aggregated_docs[counter].append(row[metric]) else: if len(docs) > 0: - points += str(aggregator.get_aggregated_value(docs, c.agg_type, c.agg_type)) + str("#") + points += str(aggregator.get_aggregated_value(docs, c.agg_type, c.agg_type) / 1000) + str("#") else: points += "n/a#" # set vars for the next loop @@ -660,7 +660,7 @@ def dashboardChart(self): agg_points = str() for x in range (0, len(aggregated_docs)): if len(aggregated_docs[x]) > 0: - agg_points += str(aggregator.get_aggregated_value(aggregated_docs[x], c.agg_type, c.agg_type)) + str("#") + agg_points += str(aggregator.get_aggregated_value(aggregated_docs[x], c.agg_type, c.agg_type) / 1000) + str("#") else: agg_points += "n/a#" @@ -724,7 +724,7 @@ def dashboardAggregateTrendingChart(self): # Query the dataset and aggregate for chart in charts: labels = chart["labels"] - seriesNames += chart["title"] + "-" + metric + "#" + seriesNames += chart["title"] + "#" counter = 0 # fields results from datastore @@ -752,7 +752,7 @@ def dashboardAggregateTrendingChart(self): aggregated_docs.append(result[metric]) else: if len(aggregated_docs) > 0: - points += str(aggregator.get_aggregated_value(aggregated_docs, agg_type, agg_type)) + str("#") + points += str(aggregator.get_aggregated_value(aggregated_docs, agg_type, agg_type) / 1000) + str("#") else: points += "n/a#" # set vars for the next loop @@ -766,6 +766,6 @@ def dashboardAggregateTrendingChart(self): points = points[:-1] # Final chart points - points = "Time" +';'+seriesNames +';'+categories+';'+points + points = "Time"+';'+seriesNames +';'+categories+';'+points return points From 2e716615359b5653a83aedc4b426c25e5d6be0ab Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 9 Jun 2015 11:12:23 -0700 Subject: [PATCH 74/88] Updating config file to reflect latest tests as well as add new desktop tabs --- dashboard_config.json | 173 +++++++++++++++++++++++++++++++++--------- 1 file changed, 138 insertions(+), 35 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index 52f6a53..54ac6d2 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -1,15 +1,15 @@ [ { "overview" : [{ "tabName" : "prod-mWeb", - "query" : "/superposed/display?step_1_label=unifiedEvent_cable_prod_RW&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EG&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_RW%2CunifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EG%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedHP_cable_prod_RW&step_2_label=unifiedHP_cable_prod_SLCD&step_2_label=unifiedHP_cable_prod_EG&step_2_label=unifiedHP_cable_prod_SF&step_2_label_hidden=unifiedHP_cable_prod_RW%2CunifiedHP_cable_prod_SLCD%2CunifiedHP_cable_prod_EG%2CunifiedHP_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedSearchResults_cable_prod_RW&step_3_label=unifiedSearchResults_cable_prod_SLCD&step_3_label=unifiedSearchResults_cable_prod_EG&step_3_label=unifiedSearchResults_cable_prod_SF&step_3_label_hidden=unifiedSearchResults_cable_prod_RW%2CunifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EG%2CunifiedSearchResults_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedTeam_cable_prod_RW&step_4_label=unifiedTeam_cable_prod_SLCD&step_4_label=unifiedTeam_cable_prod_EG&step_4_label=unifiedTeam_cable_prod_SF&step_4_label_hidden=unifiedTeam_cable_prod_RW%2CunifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EG%2CunifiedTeam_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedArtist_cable_prod_RW&step_5_label=unifiedArtist_cable_prod_SLCD&step_5_label=unifiedArtist_cable_prod_EG&step_5_label=unifiedArtist_cable_prod_SF&step_5_label_hidden=unifiedArtist_cable_prod_RW%2CunifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EG%2CunifiedArtist_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=unifiedVenue_cable_prod_RW&step_6_label=unifiedVenue_cable_prod_SLCD&step_6_label=unifiedVenue_cable_prod_EG&step_6_label=unifiedVenue_cable_prod_SF&step_6_label_hidden=unifiedVenue_cable_prod_RW%2CunifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EG%2CunifiedVenue_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=xo_newxo_cable_prod_SLCD&step_7_label=xo_newxo_cable_prod_EG&step_7_label=xo_newxo_cable_prod_SF&step_7_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EG%2Cxo_newxo_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCardsHP_cable_prod_RW&step_8_label=unifiedCardsHP_cable_prod_SLCD&step_8_label=unifiedCardsHP_cable_prod_EG&step_8_label=unifiedCardsHP_cable_prod_SF&step_8_label_hidden=unifiedCardsHP_cable_prod_RW%2CunifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EG%2CunifiedCardsHP_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedCategory_cable_prod_RW&step_9_label=unifiedCategory_cable_prod_SLCD&step_9_label=unifiedCategory_cable_prod_EG&step_9_label=unifiedCategory_cable_prod_SF&step_9_label_hidden=unifiedCategory_cable_prod_RW%2CunifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EG%2CunifiedCategory_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&step_10_label=unifiedGrouping_cable_prod_RW&step_10_label=unifiedGrouping_cable_prod_SLCD&step_10_label=unifiedGrouping_cable_prod_EG&step_10_label=unifiedGrouping_cable_prod_SF&step_10_label_hidden=unifiedGrouping_cable_prod_RW%2CunifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EG%2CunifiedGrouping_cable_prod_SF&step_10_start_ts=&step_10_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?step_1_label=unifiedEvent_cable_prod_RW&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EAST&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_RW%2CunifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EAST%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedSearchResults_cable_prod_RW&step_2_label=unifiedSearchResults_cable_prod_SLCD&step_2_label=unifiedSearchResults_cable_prod_EAST&step_2_label=unifiedSearchResults_cable_prod_SF&step_2_label_hidden=unifiedSearchResults_cable_prod_RW%2CunifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EAST%2CunifiedSearchResults_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedTeam_cable_prod_RW&step_3_label=unifiedTeam_cable_prod_SLCD&step_3_label=unifiedTeam_cable_prod_EAST&step_3_label=unifiedTeam_cable_prod_SF&step_3_label_hidden=unifiedTeam_cable_prod_RW%2CunifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EAST%2CunifiedTeam_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedArtist_cable_prod_RW&step_4_label=unifiedArtist_cable_prod_SLCD&step_4_label=unifiedArtist_cable_prod_EAST&step_4_label=unifiedArtist_cable_prod_SF&step_4_label_hidden=unifiedArtist_cable_prod_RW%2CunifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EAST%2CunifiedArtist_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedVenue_cable_prod_RW&step_5_label=unifiedVenue_cable_prod_SLCD&step_5_label=unifiedVenue_cable_prod_EAST&step_5_label=unifiedVenue_cable_prod_SF&step_5_label_hidden=unifiedVenue_cable_prod_RW%2CunifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EAST%2CunifiedVenue_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=xo_newxo_cable_prod_SLCD&step_6_label=xo_newxo_cable_prod_EAST&step_6_label=xo_newxo_cable_prod_SF&step_6_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EAST%2Cxo_newxo_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=unifiedCardsHP_cable_prod_RW&step_7_label=unifiedCardsHP_cable_prod_SLCD&step_7_label=unifiedCardsHP_cable_prod_EAST&step_7_label=unifiedCardsHP_cable_prod_SF&step_7_label_hidden=unifiedCardsHP_cable_prod_RW%2CunifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EAST%2CunifiedCardsHP_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCategory_cable_prod_RW&step_8_label=unifiedCategory_cable_prod_SLCD&step_8_label=unifiedCategory_cable_prod_EAST&step_8_label=unifiedCategory_cable_prod_SF&step_8_label_hidden=unifiedCategory_cable_prod_RW%2CunifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EAST%2CunifiedCategory_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedGrouping_cable_prod_RW&step_9_label=unifiedGrouping_cable_prod_SLCD&step_9_label=unifiedGrouping_cable_prod_EAST&step_9_label=unifiedGrouping_cable_prod_SF&step_9_label_hidden=unifiedGrouping_cable_prod_RW%2CunifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EAST%2CunifiedGrouping_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "prod-legacy-desktop", - "query" : "/superposed/display?step_1_label=desktopHP_cable_prod_EG&step_1_label=desktopHP_cable_prod_RW&step_1_label=desktopHP_cable_prod_SF&step_1_label=desktopHP_cable_prod_SLCD&step_1_label_hidden=desktopHP_cable_prod_EG%2CdesktopHP_cable_prod_RW%2CdesktopHP_cable_prod_SF%2CdesktopHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktopSearch_cable_prod_EG&step_2_label=desktopSearch_cable_prod_RW&step_2_label=desktopSearch_cable_prod_SF&step_2_label=desktopSearch_cable_prod_SLCD&step_2_label_hidden=desktopSearch_cable_prod_EG%2CdesktopSearch_cable_prod_RW%2CdesktopSearch_cable_prod_SF%2CdesktopSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_category_cable_prod_EG&step_3_label=desktop_category_cable_prod_RW&step_3_label=desktop_category_cable_prod_SF&step_3_label=desktop_category_cable_prod_SLCD&step_3_label_hidden=desktop_category_cable_prod_EG%2Cdesktop_category_cable_prod_RW%2Cdesktop_category_cable_prod_SF%2Cdesktop_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_event_cable_prod_EG&step_4_label=desktop_event_cable_prod_RW&step_4_label=desktop_event_cable_prod_SF&step_4_label=desktop_event_cable_prod_SLCD&step_4_label_hidden=desktop_event_cable_prod_EG%2Cdesktop_event_cable_prod_RW%2Cdesktop_event_cable_prod_SF%2Cdesktop_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_grouping_cable_prod_EG&step_5_label=desktop_grouping_cable_prod_RW&step_5_label=desktop_grouping_cable_prod_SF&step_5_label=desktop_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_grouping_cable_prod_EG%2Cdesktop_grouping_cable_prod_RW%2Cdesktop_grouping_cable_prod_SF%2Cdesktop_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_venue_cable_prod_EG&step_6_label=desktop_venue_cable_prod_RW&step_6_label=desktop_venue_cable_prod_SF&step_6_label=desktop_venue_cable_prod_SLCD&step_6_label_hidden=desktop_venue_cable_prod_EG%2Cdesktop_venue_cable_prod_RW%2Cdesktop_venue_cable_prod_SF%2Cdesktop_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?step_1_label=desktopHP_cable_prod_EAST&step_1_label=desktopHP_cable_prod_RW&step_1_label=desktopHP_cable_prod_SF&step_1_label=desktopHP_cable_prod_SLCD&step_1_label_hidden=desktopHP_cable_prod_EAST%2CdesktopHP_cable_prod_RW%2CdesktopHP_cable_prod_SF%2CdesktopHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktopSearch_cable_prod_EAST&step_2_label=desktopSearch_cable_prod_RW&step_2_label=desktopSearch_cable_prod_SF&step_2_label=desktopSearch_cable_prod_SLCD&step_2_label_hidden=desktopSearch_cable_prod_EAST%2CdesktopSearch_cable_prod_RW%2CdesktopSearch_cable_prod_SF%2CdesktopSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_category_cable_prod_EAST&step_3_label=desktop_category_cable_prod_RW&step_3_label=desktop_category_cable_prod_SF&step_3_label=desktop_category_cable_prod_SLCD&step_3_label_hidden=desktop_category_cable_prod_EAST%2Cdesktop_category_cable_prod_RW%2Cdesktop_category_cable_prod_SF%2Cdesktop_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_event_cable_prod_EAST&step_4_label=desktop_event_cable_prod_RW&step_4_label=desktop_event_cable_prod_SF&step_4_label=desktop_event_cable_prod_SLCD&step_4_label_hidden=desktop_event_cable_prod_EAST%2Cdesktop_event_cable_prod_RW%2Cdesktop_event_cable_prod_SF%2Cdesktop_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_grouping_cable_prod_EAST&step_5_label=desktop_grouping_cable_prod_RW&step_5_label=desktop_grouping_cable_prod_SF&step_5_label=desktop_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_grouping_cable_prod_EAST%2Cdesktop_grouping_cable_prod_RW%2Cdesktop_grouping_cable_prod_SF%2Cdesktop_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_venue_cable_prod_EAST&step_6_label=desktop_venue_cable_prod_RW&step_6_label=desktop_venue_cable_prod_SF&step_6_label=desktop_venue_cable_prod_SLCD&step_6_label_hidden=desktop_venue_cable_prod_EAST%2Cdesktop_venue_cable_prod_RW%2Cdesktop_venue_cable_prod_SF%2Cdesktop_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "prod-unified-desktop", - "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EG&step_1_label=desktop_unifiedHP_cable_prod_RW&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EG%2Cdesktop_unifiedHP_cable_prod_RW%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EG&step_2_label=desktop_unifiedSearch_cable_prod_RW&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EG%2Cdesktop_unifiedSearch_cable_prod_RW%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EG&step_3_label=desktop_unified_category_cable_prod_RW&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EG%2Cdesktop_unified_category_cable_prod_RW%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EG&step_4_label=desktop_unified_event_cable_prod_RW&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EG%2Cdesktop_unified_event_cable_prod_RW%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EG&step_5_label=desktop_unified_grouping_cable_prod_RW&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EG%2Cdesktop_unified_grouping_cable_prod_RW%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EG&step_6_label=desktop_unified_venue_cable_prod_RW&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EG%2Cdesktop_unified_venue_cable_prod_RW%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EAST&step_1_label=desktop_unifiedHP_cable_prod_RW&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EAST%2Cdesktop_unifiedHP_cable_prod_RW%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EAST&step_2_label=desktop_unifiedSearch_cable_prod_RW&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EAST%2Cdesktop_unifiedSearch_cable_prod_RW%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EAST&step_3_label=desktop_unified_category_cable_prod_RW&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EAST%2Cdesktop_unified_category_cable_prod_RW%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EAST&step_4_label=desktop_unified_event_cable_prod_RW&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EAST%2Cdesktop_unified_event_cable_prod_RW%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EAST&step_5_label=desktop_unified_grouping_cable_prod_RW&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EAST%2Cdesktop_unified_grouping_cable_prod_RW%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EAST&step_6_label=desktop_unified_venue_cable_prod_RW&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EAST%2Cdesktop_unified_venue_cable_prod_RW%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "qa-mWeb", @@ -27,7 +27,7 @@ "labels": [ "unifiedCardsHP_cable_prod_SLCD", "unifiedCardsHP_cable_prod_SF", - "unifiedCardsHP_cable_prod_EG" + "unifiedCardsHP_cable_prod_EAST" ] }, { @@ -35,7 +35,7 @@ "labels": [ "unifiedEvent_cable_prod_SLCD", "unifiedEvent_cable_prod_SF", - "unifiedEvent_cable_prod_EG" + "unifiedEvent_cable_prod_EAST" ] }, { @@ -43,7 +43,7 @@ "labels": [ "unifiedSearchResults_cable_prod_SLCD", "unifiedSearchResults_cable_prod_SF", - "unifiedSearchResults_cable_prod_EG" + "unifiedSearchResults_cable_prod_EAST" ] }, { @@ -51,7 +51,7 @@ "labels": [ "unifiedArtist_cable_prod_SLCD", "unifiedArtist_cable_prod_SF", - "unifiedArtist_cable_prod_EG" + "unifiedArtist_cable_prod_EEAST" ] }, { @@ -59,7 +59,7 @@ "labels": [ "unifiedTeam_cable_prod_SLCD", "unifiedTeam_cable_prod_SF", - "unifiedTeam_cable_prod_EG" + "unifiedTeam_cable_prod_EAST" ] }, { @@ -67,7 +67,7 @@ "labels": [ "unifiedVenue_cable_prod_SLCD", "unifiedVenue_cable_prod_SF", - "unifiedVenue_cable_prod_EG" + "unifiedVenue_cable_prod_EAST" ] }, { @@ -75,7 +75,7 @@ "labels":[ "xo_newxo_cable_prod_SLCD", "xo_newxo_cable_prod_SF", - "xo_newxo_cable_prod_EG" + "xo_newxo_cable_prod_EAST" ] }, { @@ -83,7 +83,7 @@ "labels":[ "unifiedCategory_cable_prod_SLCD", "unifiedCategory_cable_prod_EG", - "unifiedCategory_cable_prod_SF" + "unifiedCategory_cable_prod_EAST" ] }, { @@ -91,7 +91,7 @@ "labels":[ "unifiedGrouping_cable_prod_SLCD", "unifiedGrouping_cable_prod_EG", - "unifiedGrouping_cable_prod_SF" + "unifiedGrouping_cable_prod_EAST" ] }] }, @@ -101,7 +101,7 @@ { "title": "Home Page", "labels": [ - "desktopHP_cable_prod_EG", + "desktopHP_cable_prod_EAST", "desktopHP_cable_prod_SLCD", "desktopHP_cable_prod_SF" ] @@ -109,7 +109,7 @@ { "title": "Search Results Page", "labels": [ - "desktopSearch_cable_prod_EG", + "desktopSearch_cable_prod_EAST", "desktopSearch_cable_prod_SLCD", "desktopSearch_cable_prod_SF" ] @@ -117,7 +117,7 @@ { "title": "Event Page", "labels": [ - "desktop_event_cable_prod_EG", + "desktop_event_cable_prod_EAST", "desktop_event_cable_prod_SLCD", "desktop_event_cable_prod_SF" ] @@ -125,7 +125,7 @@ { "title": "Grouping Page", "labels": [ - "desktop_grouping_cable_prod_EG", + "desktop_grouping_cable_prod_EAST", "desktop_grouping_cable_prod_SLCD", "desktop_grouping_cable_prod_SF" ] @@ -133,7 +133,7 @@ { "title": "Venue Page", "labels": [ - "desktop_venue_cable_prod_EG", + "desktop_venue_cable_prod_EAST", "desktop_venue_cable_prod_SLCD", "desktop_venue_cable_prod_SF" ] @@ -141,12 +141,64 @@ { "title": "Category Page", "labels": [ - "desktop_category_cable_prod_EG", + "desktop_category_cable_prod_EAST", "desktop_category_cable_prod_SLCD", "desktop_category_cable_prod_SF" ] }] - } + }, + { + "tabName": "unified-desktop_unified", + "charts" : [ + { + "title": "Home Page", + "labels": [ + "desktop_unifiedHP_cable_prod_EAST", + "desktop_unifiedHP_cable_prod_SLCD", + "desktop_unifiedHP_cable_prod_SF" + ] + }, + { + "title": "Search Results Page", + "labels": [ + "desktop_unifiedSearch_cable_prod_EAST", + "desktop_unifiedSearch_cable_prod_SLCD", + "desktop_unifiedSearch_cable_prod_SF" + ] + }, + { + "title": "Event Page", + "labels": [ + "desktop_unified_event_cable_prod_EAST", + "desktop_unified_event_cable_prod_SLCD", + "desktop_unified_event_cable_prod_SF" + ] + }, + { + "title": "Grouping Page", + "labels": [ + "desktop_unified_grouping_cable_prod_EAST", + "desktop_unified_grouping_cable_prod_SLCD", + "desktop_unified_grouping_cable_prod_SF" + ] + }, + { + "title": "Venue Page", + "labels": [ + "desktop_unified_venue_cable_prod_EAST", + "desktop_unified_venue_cable_prod_SLCD", + "desktop_unified_venue_cable_prod_SF" + ] + }, + { + "title": "Category Page", + "labels": [ + "desktop_unified_category_cable_prod_EAST", + "desktop_unified_category_cable_prod_SLCD", + "desktop_unified_category_cable_prod_SF" + ] + }] + } ], "aggTrendCharts" : { "defaultAggMethod" : "90th Percentile", @@ -157,7 +209,7 @@ "labels": [ "unifiedCardsHP_cable_prod_SLCD", "unifiedCardsHP_cable_prod_SF", - "unifiedCardsHP_cable_prod_EG" + "unifiedCardsHP_cable_prod_EAST" ] }, { @@ -165,7 +217,7 @@ "labels": [ "unifiedEvent_cable_prod_SLCD", "unifiedEvent_cable_prod_SF", - "unifiedEvent_cable_prod_EG" + "unifiedEvent_cable_prod_EAST" ] }, { @@ -173,7 +225,7 @@ "labels": [ "unifiedSearchResults_cable_prod_SLCD", "unifiedSearchResults_cable_prod_SF", - "unifiedSearchResults_cable_prod_EG" + "unifiedSearchResults_cable_prod_EAST" ] }, { @@ -181,7 +233,7 @@ "labels": [ "unifiedArtist_cable_prod_SLCD", "unifiedArtist_cable_prod_SF", - "unifiedArtist_cable_prod_EG" + "unifiedArtist_cable_prod_EAST" ] }, { @@ -189,7 +241,7 @@ "labels": [ "unifiedTeam_cable_prod_SLCD", "unifiedTeam_cable_prod_SF", - "unifiedTeam_cable_prod_EG" + "unifiedTeam_cable_prod_EAST" ] }, { @@ -197,7 +249,7 @@ "labels": [ "unifiedVenue_cable_prod_SLCD", "unifiedVenue_cable_prod_SF", - "unifiedVenue_cable_prod_EG" + "unifiedVenue_cable_prod_EAST" ] }, { @@ -205,7 +257,7 @@ "labels":[ "xo_newxo_cable_prod_SLCD", "xo_newxo_cable_prod_SF", - "xo_newxo_cable_prod_EG" + "xo_newxo_cable_prod_EAST" ] }, { @@ -213,7 +265,7 @@ "labels":[ "unifiedCategory_cable_prod_SLCD", "unifiedCategory_cable_prod_EG", - "unifiedCategory_cable_prod_SF" + "unifiedCategory_cable_prod_EAST" ] }, { @@ -221,7 +273,7 @@ "labels":[ "unifiedGrouping_cable_prod_SLCD", "unifiedGrouping_cable_prod_EG", - "unifiedGrouping_cable_prod_SF" + "unifiedGrouping_cable_prod_EAST" ] }] }, @@ -230,7 +282,7 @@ { "title": "Home Page", "labels": [ - "desktopHP_cable_prod_EG", + "desktopHP_cable_prod_EAST", "desktopHP_cable_prod_SLCD", "desktopHP_cable_prod_SF" ] @@ -238,7 +290,7 @@ { "title": "Search Results Page", "labels": [ - "desktopSearch_cable_prod_EG", + "desktopSearch_cable_prod_EAST", "desktopSearch_cable_prod_SLCD", "desktopSearch_cable_prod_SF" ] @@ -246,7 +298,7 @@ { "title": "Event Page", "labels": [ - "desktop_event_cable_prod_EG", + "desktop_event_cable_prod_EAST", "desktop_event_cable_prod_SLCD", "desktop_event_cable_prod_SF" ] @@ -254,7 +306,7 @@ { "title": "Grouping Page", "labels": [ - "desktop_grouping_cable_prod_EG", + "desktop_grouping_cable_prod_EAST", "desktop_grouping_cable_prod_SLCD", "desktop_grouping_cable_prod_SF" ] @@ -262,7 +314,7 @@ { "title": "Venue Page", "labels": [ - "desktop_venue_cable_prod_EG", + "desktop_venue_cable_prod_EAST", "desktop_venue_cable_prod_SLCD", "desktop_venue_cable_prod_SF" ] @@ -270,11 +322,62 @@ { "title": "Category Page", "labels": [ - "desktop_category_cable_prod_EG", + "desktop_category_cable_prod_EAST", "desktop_category_cable_prod_SLCD", "desktop_category_cable_prod_SF" ] }] - } + }, + "prod-unified-desktop_unified": { + "charts" : [ + { + "title": "Home Page", + "labels": [ + "desktop_unifiedHP_cable_prod_EAST", + "desktop_unifiedHP_cable_prod_SLCD", + "desktop_unifiedHP_cable_prod_SF" + ] + }, + { + "title": "Search Results Page", + "labels": [ + "desktop_unifiedSearch_cable_prod_EAST", + "desktop_unifiedSearch_cable_prod_SLCD", + "desktop_unifiedSearch_cable_prod_SF" + ] + }, + { + "title": "Event Page", + "labels": [ + "desktop_unified_event_cable_prod_EAST", + "desktop_unified_event_cable_prod_SLCD", + "desktop_unified_event_cable_prod_SF" + ] + }, + { + "title": "Grouping Page", + "labels": [ + "desktop_unified_grouping_cable_prod_EAST", + "desktop_unified_grouping_cable_prod_SLCD", + "desktop_unified_grouping_cable_prod_SF" + ] + }, + { + "title": "Venue Page", + "labels": [ + "desktop_unified_venue_cable_prod_EAST", + "desktop_unified_venue_cable_prod_SLCD", + "desktop_unified_venue_cable_prod_SF" + ] + }, + { + "title": "Category Page", + "labels": [ + "desktop_unified_category_cable_prod_EAST", + "desktop_unified_category_cable_prod_SLCD", + "desktop_unified_category_cable_prod_SF" + ] + }] + } } }] \ No newline at end of file From 0fda71ffbf349fe56499b526d49f7a6234f87276 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 9 Jun 2015 11:21:05 -0700 Subject: [PATCH 75/88] Bug in tabname for unified desktop aggs --- dashboard_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard_config.json b/dashboard_config.json index 54ac6d2..bcd3232 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -328,7 +328,7 @@ ] }] }, - "prod-unified-desktop_unified": { + "prod-unified-desktop": { "charts" : [ { "title": "Home Page", From f619497a26123cd6633936163b3eb8ec2ca42c56 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Thu, 11 Jun 2015 16:00:10 -0700 Subject: [PATCH 76/88] Added path for hosting a daily report file --- harstorage/controllers/results.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index fecb36a..4c45c3d 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -769,3 +769,9 @@ def dashboardAggregateTrendingChart(self): points = "Time"+';'+seriesNames +';'+categories+';'+points return points + + @restrict("GET") + def dailyReport(self): + """Page with test results""" + + return render("/dailyReport.html") From 0daeefee979ed1d55ebf2825c32c03ed483ca878 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 17 Jun 2015 10:12:52 -0700 Subject: [PATCH 77/88] Added Desktop Search Results category --- harstorage/lib/HAR.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index 565ab13..a3b561e 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -1,6 +1,7 @@ import json import time import re +import sys DATE_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" @@ -180,10 +181,13 @@ def init_variables(self): self.bad_requests = 0 self.domains = dict() - self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping") + self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping", "Search_") - friendlyNames = '{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results"}' - self.pageNamesFriendlyName = json.loads(friendlyNames) + try: + friendlyNames = '{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results", "Search_" : "Search Results"}' + self.pageNamesFriendlyName = json.loads(friendlyNames) + except Exception, err: + print sys.exc_info()[0] def analyze(self): """Extract data from HAR container""" @@ -540,3 +544,4 @@ def update_domain_info(self): self.domains[mongo_domain] = [domain_requests, domain_data_size] + From defe2375d4ebe88e18755aee02a07ea19da5b4cd Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 21 Jul 2015 09:49:29 -0700 Subject: [PATCH 78/88] Fixed a typo --- dashboard_config.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dashboard_config.json b/dashboard_config.json index bcd3232..d8f3385 100644 --- a/dashboard_config.json +++ b/dashboard_config.json @@ -1,15 +1,15 @@ [ { "overview" : [{ "tabName" : "prod-mWeb", - "query" : "/superposed/display?step_1_label=unifiedEvent_cable_prod_RW&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EAST&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_RW%2CunifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EAST%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedSearchResults_cable_prod_RW&step_2_label=unifiedSearchResults_cable_prod_SLCD&step_2_label=unifiedSearchResults_cable_prod_EAST&step_2_label=unifiedSearchResults_cable_prod_SF&step_2_label_hidden=unifiedSearchResults_cable_prod_RW%2CunifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EAST%2CunifiedSearchResults_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedTeam_cable_prod_RW&step_3_label=unifiedTeam_cable_prod_SLCD&step_3_label=unifiedTeam_cable_prod_EAST&step_3_label=unifiedTeam_cable_prod_SF&step_3_label_hidden=unifiedTeam_cable_prod_RW%2CunifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EAST%2CunifiedTeam_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedArtist_cable_prod_RW&step_4_label=unifiedArtist_cable_prod_SLCD&step_4_label=unifiedArtist_cable_prod_EAST&step_4_label=unifiedArtist_cable_prod_SF&step_4_label_hidden=unifiedArtist_cable_prod_RW%2CunifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EAST%2CunifiedArtist_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedVenue_cable_prod_RW&step_5_label=unifiedVenue_cable_prod_SLCD&step_5_label=unifiedVenue_cable_prod_EAST&step_5_label=unifiedVenue_cable_prod_SF&step_5_label_hidden=unifiedVenue_cable_prod_RW%2CunifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EAST%2CunifiedVenue_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=xo_newxo_cable_prod_SLCD&step_6_label=xo_newxo_cable_prod_EAST&step_6_label=xo_newxo_cable_prod_SF&step_6_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EAST%2Cxo_newxo_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=unifiedCardsHP_cable_prod_RW&step_7_label=unifiedCardsHP_cable_prod_SLCD&step_7_label=unifiedCardsHP_cable_prod_EAST&step_7_label=unifiedCardsHP_cable_prod_SF&step_7_label_hidden=unifiedCardsHP_cable_prod_RW%2CunifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EAST%2CunifiedCardsHP_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCategory_cable_prod_RW&step_8_label=unifiedCategory_cable_prod_SLCD&step_8_label=unifiedCategory_cable_prod_EAST&step_8_label=unifiedCategory_cable_prod_SF&step_8_label_hidden=unifiedCategory_cable_prod_RW%2CunifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EAST%2CunifiedCategory_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedGrouping_cable_prod_RW&step_9_label=unifiedGrouping_cable_prod_SLCD&step_9_label=unifiedGrouping_cable_prod_EAST&step_9_label=unifiedGrouping_cable_prod_SF&step_9_label_hidden=unifiedGrouping_cable_prod_RW%2CunifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EAST%2CunifiedGrouping_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?&step_1_label=unifiedEvent_cable_prod_SLCD&step_1_label=unifiedEvent_cable_prod_EAST&step_1_label=unifiedEvent_cable_prod_SF&step_1_label_hidden=unifiedEvent_cable_prod_SLCD%2CunifiedEvent_cable_prod_EAST%2CunifiedEvent_cable_prod_SF&step_1_start_ts=&step_1_end_ts=&step_2_label=unifiedSearchResults_cable_prod_SLCD&step_2_label=unifiedSearchResults_cable_prod_EAST&step_2_label=unifiedSearchResults_cable_prod_SF&step_2_label_hidden=unifiedSearchResults_cable_prod_SLCD%2CunifiedSearchResults_cable_prod_EAST%2CunifiedSearchResults_cable_prod_SF&step_2_start_ts=&step_2_end_ts=&step_3_label=unifiedTeam_cable_prod_SLCD&step_3_label=unifiedTeam_cable_prod_EAST&step_3_label=unifiedTeam_cable_prod_SF&step_3_label_hidden=unifiedTeam_cable_prod_SLCD%2CunifiedTeam_cable_prod_EAST%2CunifiedTeam_cable_prod_SF&step_3_start_ts=&step_3_end_ts=&step_4_label=unifiedArtist_cable_prod_SLCD&step_4_label=unifiedArtist_cable_prod_EAST&step_4_label=unifiedArtist_cable_prod_SF&step_4_label_hidden=unifiedArtist_cable_prod_SLCD%2CunifiedArtist_cable_prod_EAST%2CunifiedArtist_cable_prod_SF&step_4_start_ts=&step_4_end_ts=&step_5_label=unifiedVenue_cable_prod_SLCD&step_5_label=unifiedVenue_cable_prod_EAST&step_5_label=unifiedVenue_cable_prod_SF&step_5_label_hidden=unifiedVenue_cable_prod_SLCD%2CunifiedVenue_cable_prod_EAST%2CunifiedVenue_cable_prod_SF&step_5_start_ts=&step_5_end_ts=&step_6_label=xo_newxo_cable_prod_SLCD&step_6_label=xo_newxo_cable_prod_EAST&step_6_label=xo_newxo_cable_prod_SF&step_6_label_hidden=xo_newxo_cable_prod_SLCD%2Cxo_newxo_cable_prod_EAST%2Cxo_newxo_cable_prod_SF&step_6_start_ts=&step_6_end_ts=&step_7_label=unifiedCardsHP_cable_prod_SLCD&step_7_label=unifiedCardsHP_cable_prod_EAST&step_7_label=unifiedCardsHP_cable_prod_SF&step_7_label_hidden=unifiedCardsHP_cable_prod_SLCD%2CunifiedCardsHP_cable_prod_EAST%2CunifiedCardsHP_cable_prod_SF&step_7_start_ts=&step_7_end_ts=&step_8_label=unifiedCategory_cable_prod_SLCD&step_8_label=unifiedCategory_cable_prod_EAST&step_8_label=unifiedCategory_cable_prod_SF&step_8_label_hidden=unifiedCategory_cable_prod_SLCD%2CunifiedCategory_cable_prod_EAST%2CunifiedCategory_cable_prod_SF&step_8_start_ts=&step_8_end_ts=&step_9_label=unifiedGrouping_cable_prod_SLCD&step_9_label=unifiedGrouping_cable_prod_EAST&step_9_label=unifiedGrouping_cable_prod_SF&step_9_label_hidden=unifiedGrouping_cable_prod_SLCD%2CunifiedGrouping_cable_prod_EAST%2CunifiedGrouping_cable_prod_SF&step_9_start_ts=&step_9_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "prod-legacy-desktop", - "query" : "/superposed/display?step_1_label=desktopHP_cable_prod_EAST&step_1_label=desktopHP_cable_prod_RW&step_1_label=desktopHP_cable_prod_SF&step_1_label=desktopHP_cable_prod_SLCD&step_1_label_hidden=desktopHP_cable_prod_EAST%2CdesktopHP_cable_prod_RW%2CdesktopHP_cable_prod_SF%2CdesktopHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktopSearch_cable_prod_EAST&step_2_label=desktopSearch_cable_prod_RW&step_2_label=desktopSearch_cable_prod_SF&step_2_label=desktopSearch_cable_prod_SLCD&step_2_label_hidden=desktopSearch_cable_prod_EAST%2CdesktopSearch_cable_prod_RW%2CdesktopSearch_cable_prod_SF%2CdesktopSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_category_cable_prod_EAST&step_3_label=desktop_category_cable_prod_RW&step_3_label=desktop_category_cable_prod_SF&step_3_label=desktop_category_cable_prod_SLCD&step_3_label_hidden=desktop_category_cable_prod_EAST%2Cdesktop_category_cable_prod_RW%2Cdesktop_category_cable_prod_SF%2Cdesktop_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_event_cable_prod_EAST&step_4_label=desktop_event_cable_prod_RW&step_4_label=desktop_event_cable_prod_SF&step_4_label=desktop_event_cable_prod_SLCD&step_4_label_hidden=desktop_event_cable_prod_EAST%2Cdesktop_event_cable_prod_RW%2Cdesktop_event_cable_prod_SF%2Cdesktop_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_grouping_cable_prod_EAST&step_5_label=desktop_grouping_cable_prod_RW&step_5_label=desktop_grouping_cable_prod_SF&step_5_label=desktop_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_grouping_cable_prod_EAST%2Cdesktop_grouping_cable_prod_RW%2Cdesktop_grouping_cable_prod_SF%2Cdesktop_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_venue_cable_prod_EAST&step_6_label=desktop_venue_cable_prod_RW&step_6_label=desktop_venue_cable_prod_SF&step_6_label=desktop_venue_cable_prod_SLCD&step_6_label_hidden=desktop_venue_cable_prod_EAST%2Cdesktop_venue_cable_prod_RW%2Cdesktop_venue_cable_prod_SF%2Cdesktop_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?step_1_label=desktopHP_cable_prod_EAST&step_1_label=desktopHP_cable_prod_SF&step_1_label=desktopHP_cable_prod_SLCD&step_1_label_hidden=desktopHP_cable_prod_EAST%2CdesktopHP_cable_prod_SF%2CdesktopHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktopSearch_cable_prod_EAST&step_2_label=desktopSearch_cable_prod_SF&step_2_label=desktopSearch_cable_prod_SLCD&step_2_label_hidden=desktopSearch_cable_prod_EAST%2CdesktopSearch_cable_prod_SF%2CdesktopSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_category_cable_prod_EAST&step_3_label=desktop_category_cable_prod_SF&step_3_label=desktop_category_cable_prod_SLCD&step_3_label_hidden=desktop_category_cable_prod_EAST%2Cdesktop_category_cable_prod_SF%2Cdesktop_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_event_cable_prod_EAST&step_4_label=desktop_event_cable_prod_SF&step_4_label=desktop_event_cable_prod_SLCD&step_4_label_hidden=desktop_event_cable_prod_EAST%2Cdesktop_event_cable_prod_SF%2Cdesktop_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_grouping_cable_prod_EAST&step_5_label=desktop_grouping_cable_prod_SF&step_5_label=desktop_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_grouping_cable_prod_EAST%2Cdesktop_grouping_cable_prod_SF%2Cdesktop_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_venue_cable_prod_EAST&step_6_label=desktop_venue_cable_prod_SF&step_6_label=desktop_venue_cable_prod_SLCD&step_6_label_hidden=desktop_venue_cable_prod_EAST%2Cdesktop_venue_cable_prod_SF%2Cdesktop_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "prod-unified-desktop", - "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EAST&step_1_label=desktop_unifiedHP_cable_prod_RW&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EAST%2Cdesktop_unifiedHP_cable_prod_RW%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EAST&step_2_label=desktop_unifiedSearch_cable_prod_RW&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EAST%2Cdesktop_unifiedSearch_cable_prod_RW%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EAST&step_3_label=desktop_unified_category_cable_prod_RW&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EAST%2Cdesktop_unified_category_cable_prod_RW%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EAST&step_4_label=desktop_unified_event_cable_prod_RW&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EAST%2Cdesktop_unified_event_cable_prod_RW%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EAST&step_5_label=desktop_unified_grouping_cable_prod_RW&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EAST%2Cdesktop_unified_grouping_cable_prod_RW%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EAST&step_6_label=desktop_unified_venue_cable_prod_RW&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EAST%2Cdesktop_unified_venue_cable_prod_RW%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" + "query" : "/superposed/display?step_1_label=desktop_unifiedHP_cable_prod_EAST&step_1_label=desktop_unifiedHP_cable_prod_SF&step_1_label=desktop_unifiedHP_cable_prod_SLCD&step_1_label_hidden=desktop_unifiedHP_cable_prod_EAST%2Cdesktop_unifiedHP_cable_prod_SF%2Cdesktop_unifiedHP_cable_prod_SLCD&step_1_start_ts=&step_1_end_ts=&step_2_label=desktop_unifiedSearch_cable_prod_EAST&step_2_label=desktop_unifiedSearch_cable_prod_SF&step_2_label=desktop_unifiedSearch_cable_prod_SLCD&step_2_label_hidden=desktop_unifiedSearch_cable_prod_EAST%2Cdesktop_unifiedSearch_cable_prod_SF%2Cdesktop_unifiedSearch_cable_prod_SLCD&step_2_start_ts=&step_2_end_ts=&step_3_label=desktop_unified_category_cable_prod_EAST&step_3_label=desktop_unified_category_cable_prod_SF&step_3_label=desktop_unified_category_cable_prod_SLCD&step_3_label_hidden=desktop_unified_category_cable_prod_EAST%2Cdesktop_unified_category_cable_prod_SF%2Cdesktop_unified_category_cable_prod_SLCD&step_3_start_ts=&step_3_end_ts=&step_4_label=desktop_unified_event_cable_prod_EAST&step_4_label=desktop_unified_event_cable_prod_SF&step_4_label=desktop_unified_event_cable_prod_SLCD&step_4_label_hidden=desktop_unified_event_cable_prod_EAST%2Cdesktop_unified_event_cable_prod_SF%2Cdesktop_unified_event_cable_prod_SLCD&step_4_start_ts=&step_4_end_ts=&step_5_label=desktop_unified_grouping_cable_prod_EAST&step_5_label=desktop_unified_grouping_cable_prod_SF&step_5_label=desktop_unified_grouping_cable_prod_SLCD&step_5_label_hidden=desktop_unified_grouping_cable_prod_EAST%2Cdesktop_unified_grouping_cable_prod_SF%2Cdesktop_unified_grouping_cable_prod_SLCD&step_5_start_ts=&step_5_end_ts=&step_6_label=desktop_unified_venue_cable_prod_EAST&step_6_label=desktop_unified_venue_cable_prod_SF&step_6_label=desktop_unified_venue_cable_prod_SLCD&step_6_label_hidden=desktop_unified_venue_cable_prod_EAST%2Cdesktop_unified_venue_cable_prod_SF%2Cdesktop_unified_venue_cable_prod_SLCD&step_6_start_ts=&step_6_end_ts=&chart=column&table=true&timeFormat=s&overview=true" }, { "tabName" : "qa-mWeb", @@ -51,7 +51,7 @@ "labels": [ "unifiedArtist_cable_prod_SLCD", "unifiedArtist_cable_prod_SF", - "unifiedArtist_cable_prod_EEAST" + "unifiedArtist_cable_prod_EAST" ] }, { From 5eea6c5a64e298ec080e54583a92c2e83829e998 Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Tue, 21 Jul 2015 14:59:43 -0700 Subject: [PATCH 79/88] Adding in the ads_full_time for tracking --- harstorage/controllers/results.py | 18 ++++++++++++++++-- harstorage/controllers/superposed.py | 2 +- harstorage/lib/HAR.py | 23 ++++++++++++++++++++++- harstorage/lib/Math.py | 4 ++-- harstorage/public/scripts/harstorage.js | 4 +++- harstorage/templates/details/core.html | 1 + 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/harstorage/controllers/results.py b/harstorage/controllers/results.py index 4c45c3d..0446181 100755 --- a/harstorage/controllers/results.py +++ b/harstorage/controllers/results.py @@ -272,13 +272,21 @@ def runinfo(self): throughput = test_results["throughput"] try: - userReady = har['log']['pages'][0]['_userTime.mark-user-ready'] + userReady = test_results["user_ready_time"] + #har['log']['pages'][0]['_userTime.mark-user-ready'] except: userReady = 0 + try: + ads_full_time = test_results["ads_full_time"] + #har['log']['pages'][0]['_userTime.mark-user-ready'] + except: + ads_full_time = 0 + # Summary stats summary = { "full_load_time": test_results["full_load_time"], "user_ready_time": userReady, + "ads_full_time": ads_full_time, "onload_event": test_results["onload_event"], "start_render_time": test_results["start_render_time"], "time_to_first_byte": test_results["time_to_first_byte"], @@ -415,16 +423,22 @@ def upload(self): timestamp = har.har['log']['pages'][0]['startedDateTime'][0:19] timestamp = timestamp.replace("T", " ") + try: - userReady = har.har['log']['pages'][0]['_userTime.mark-user-ready'] + userReady = har.user_ready_time except: userReady = 0 + try: + ads_full_time = har.ads_full_time + except: + ads_full_time = 0 result = { "label": har.label, "url": har.url, "timestamp": timestamp, "full_load_time": har.full_load_time, "user_ready_time": userReady, + "ads_full_time": ads_full_time, "onload_event": har.onload_event, "start_render_time": har.start_render_time, "time_to_first_byte": har.time_to_first_byte, diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index 4adee98..8ef50d5 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -100,7 +100,7 @@ def display(self): "Total Transfer Time (ms)", "Total Server Time (ms)", "Avg. Connecting Time (ms)", "Avg. Blocking Time (ms)", "Text Size (kB)", "Media Size (kB)", "Cache Size (kB)", - "Redirects", "Bad Rquests", "Domains"] + "Redirects", "Bad Rquests", "Domains", "Ads Time"] c.metrics_table = list() c.metrics_table.append(list()) diff --git a/harstorage/lib/HAR.py b/harstorage/lib/HAR.py index a3b561e..d0f2d8e 100755 --- a/harstorage/lib/HAR.py +++ b/harstorage/lib/HAR.py @@ -163,6 +163,7 @@ def __init__(self, har, fixed=False): def init_variables(self): self.full_load_time = 0 self.user_ready_time = 0 + self.ads_full_time = 0 self.total_dns_time = 0.0 self.total_transfer_time = 0.0 @@ -184,7 +185,7 @@ def init_variables(self): self.pageNames = ("Event", "Venue", "CardsHP", "UnifiedHP", "desktopHP", "xo_newxo", "SearchResults", "Artist", "team", "category", "grouping", "Search_") try: - friendlyNames = '{"CardsHP" : "Explore Home", "UnifiedHP" : "Simplified Home", "desktopHP" : "Explore Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results", "Search_" : "Search Results"}' + friendlyNames = '{"CardsHP" : "Home", "UnifiedHP" : "Home", "desktopHP" : "Home", "xo_newxo" : "Checkout", "SearchResults" : "Search Results", "Search_" : "Search Results"}' self.pageNamesFriendlyName = json.loads(friendlyNames) except Exception, err: print sys.exc_info()[0] @@ -280,6 +281,8 @@ def analyze(self): # Get user Time self.user_ready_time = self.getUserReadyTime() + # Get Ads Full Time + self.ads_full_time = self.getAdsTime() def getUserReadyTime(self): try: @@ -288,6 +291,24 @@ def getUserReadyTime(self): user_ready_time = 0 return user_ready_time + def getAdsTime(self): + try: + # Get Ad Load Start time + ad_start_time = self.har["log"]['pages'][0]['_userTime.mark-ad-load-start-time'] + ad_content_load_time = 0 + # Find the last _userTime.mark-*content-load-time (it's value - time - should be the largest) + for key in self.har["log"]['pages'][0].keys(): + if key.find("content-load-time") != -1: + content_load_time = self.har["log"]['pages'][0][key] + if content_load_time > ad_content_load_time: + ad_content_load_time = content_load_time + + # calculate the total ads times + ads_full_time = ad_content_load_time - ad_start_time + except: + ads_full_time = 0 + return ads_full_time + def weight_ratio(self): """Breakdown by size of page objects""" diff --git a/harstorage/lib/Math.py b/harstorage/lib/Math.py index fa9f956..2a11298 100644 --- a/harstorage/lib/Math.py +++ b/harstorage/lib/Math.py @@ -16,7 +16,7 @@ def __init__(self): "total_transfer_time", "total_server_time", "avg_connecting_time", "avg_blocking_time", "text_size", "media_size", "cache_size", "redirects", "bad_requests", - "domains") + "domains", "ads_full_time") self.TITLES = ["Full Load Time", "User Ready Time", "Total Requests", "Total Size", "Page Speed Score", "onLoad Event", "Start Render Time", @@ -24,7 +24,7 @@ def __init__(self): "Total Transfer Time", "Total Server Time", "Avg. Connecting Time", "Avg. Blocking Time", "Text Size", "Media Size", "Cache Size", "Redirects", - "Bad Rquests", "Domains"] + "Bad Rquests", "Domains", "Ads Time"] self.data = self.data_container() diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index 41ebde4..3a780e1 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -65,7 +65,8 @@ HARSTORAGE.Units = { "Cache Size": "kB", "Redirects": "", "Bad Rquests": "", - "Domains": "" + "Domains": "", + "Ads Time": "s" }; /* @@ -699,6 +700,7 @@ HARSTORAGE.RunInfo.prototype.get = function(opt_ts) { $("#throughput").html(that.formatter(that.json.throughput, "kB/s")); $("#source-url").html(source); + $("#ads-full-time").html(that.formatter(that.json.summary.ads_full_time, "ms")); $("#total-size").html(that.formatter(that.json.summary.total_size, "kB")); $("#text-size").html(that.formatter(that.json.summary.text_size, "kB")); $("#media-size").html(that.formatter(that.json.summary.media_size, "kB")); diff --git a/harstorage/templates/details/core.html b/harstorage/templates/details/core.html index 213d8b9..ced0280 100644 --- a/harstorage/templates/details/core.html +++ b/harstorage/templates/details/core.html @@ -50,6 +50,7 @@
          Source:
          +
          Ads Time:
          Total Size:
          n/a
          Text Files:
          n/a
          Media Files:
          n/a
          From d8680268fbe8b2094af567bef372c3f102cde93f Mon Sep 17 00:00:00 2001 From: Dominic McGinnis Date: Wed, 22 Jul 2015 10:56:19 -0700 Subject: [PATCH 80/88] Updated ads_full_time for formatting --- harstorage/controllers/superposed.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index 8ef50d5..1d632f4 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -84,13 +84,12 @@ def display(self): if c.timeFormat == "s": fltLabel = "Full Load Time (s)" - else: - fltLabel = "Full Load Time (ms)" - - if c.timeFormat == "s": usrLabel = "User Ready Time (s)" + adsLabel = "Ads Time (s)" else: + fltLabel = "Full Load Time (ms)" usrLabel = "User Ready Time (ms)" + adsLabel = "Ads Time (ms)" # Data table c.headers = ["Label", fltLabel, usrLabel, "Total Requests", @@ -100,7 +99,7 @@ def display(self): "Total Transfer Time (ms)", "Total Server Time (ms)", "Avg. Connecting Time (ms)", "Avg. Blocking Time (ms)", "Text Size (kB)", "Media Size (kB)", "Cache Size (kB)", - "Redirects", "Bad Rquests", "Domains", "Ads Time"] + "Redirects", "Bad Rquests", "Domains", adsLabel] c.metrics_table = list() c.metrics_table.append(list()) @@ -164,10 +163,7 @@ def display(self): c.points += str(value) + "#" tableValue = value - if metric == "full_load_time": - if c.timeFormat == "s": - tableValue = round(tableValue / 1000, 2) - if metric == "user_ready_time": + if metric == "full_load_time" or metric == "user_ready_time" or metric == "ads_full_time": if c.timeFormat == "s": tableValue = round(tableValue / 1000, 2) From 2ca400ab2eda556ab774e0c4552b13ce21bf46d5 Mon Sep 17 00:00:00 2001 From: Zac Date: Wed, 22 Jul 2015 17:31:57 -0400 Subject: [PATCH 81/88] add onload to fix problem in production --- harstorage/public/scripts/harstorage.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index f3a10dc..5aafa5f 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -877,7 +877,9 @@ HARSTORAGE.autoHeight = function() { "use strict"; var iframe = document.getElementById("harviewer-iframe"); - iframe.height = iframe.contentDocument.body.offsetHeight; + iframe.onload = function() { + this.height = this.contentDocument.body.offsetHeight; + } }; /* From c04326559c9ab50d819bd854d562fc7847a393e6 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Wed, 5 Nov 2014 10:48:02 -0500 Subject: [PATCH 82/88] update method of getting base_url --- harstorage/public/scripts/harstorage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index f3a10dc..e2238ec 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -36,7 +36,7 @@ var HARSTORAGE = HARSTORAGE || {}; /* * Base url to be used when generating urls */ -var base_url = $('#base-url').text(); +var base_url = window.location.protocol+"//"+window.location.host; HARSTORAGE.base_url = base_url From 758821a1161acf8aa2f0e6e1db2122d6e382f4df Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 10 Nov 2014 14:52:42 -0500 Subject: [PATCH 83/88] add requirements file --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2da7f75 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pylons==1.0 +pymongo==2.7.2 +webob==0.9.8 From 1b056925294d4652660ad81c21c983a9e9498f40 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Wed, 12 Nov 2014 10:30:45 -0500 Subject: [PATCH 84/88] add requirements to setup --- setup.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 71d4f7e..87a3a8c 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,11 @@ license='BSD, see LICENSE.txt for details', platforms=['Linux', 'Windows'], setup_requires=[], - install_requires=[], + install_requires=[ + 'pylons==1.0', + 'pymongo==2.7.2', + 'webob==0.9.8', + ], packages=find_packages(), include_package_data=True, test_suite='nose.collector', From f30c0527cd4dcea08395a46761d93a84d093421b Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 17 Nov 2014 11:41:20 -0500 Subject: [PATCH 85/88] add 95th and 99th percentiles --- harstorage/lib/Math.py | 8 ++++++-- harstorage/public/scripts/harstorage.js | 8 ++++++++ harstorage/templates/display/core.html | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/harstorage/lib/Math.py b/harstorage/lib/Math.py index bbce245..59916d5 100644 --- a/harstorage/lib/Math.py +++ b/harstorage/lib/Math.py @@ -69,10 +69,14 @@ def get_aggregated_value(self, list, agg_type, metric): return self.minimum(list) elif agg_type == "Maximum": return self.maximum(list) - elif agg_type == "90th Percentile": - return self.percentile(list, 0.9) elif agg_type == "Median": return self.percentile(list, 0.5) + elif agg_type == "90th Percentile": + return self.percentile(list, 0.9) + elif agg_type == "95th Percentile": + return self.percentile(list, 0.95) + elif agg_type == "99th Percentile": + return self.percentile(list, 0.99) def exclude_missing(self, points): """Remove points missing in all subsets""" diff --git a/harstorage/public/scripts/harstorage.js b/harstorage/public/scripts/harstorage.js index e2238ec..697876b 100644 --- a/harstorage/public/scripts/harstorage.js +++ b/harstorage/public/scripts/harstorage.js @@ -900,6 +900,14 @@ HARSTORAGE.AggregatedStatistics = function(id) { if (metric === "90th%20Percentile") { metric = "90th Percentile"; } + + if (metric === "95th%20Percentile") { + metric = "95th Percentile"; + } + + if (metric === "99th%20Percentile") { + metric = "99th Percentile"; + } } // Update selector box active option diff --git a/harstorage/templates/display/core.html b/harstorage/templates/display/core.html index 67cbf9d..1eb90fc 100644 --- a/harstorage/templates/display/core.html +++ b/harstorage/templates/display/core.html @@ -19,8 +19,10 @@ + + - s +
          From a0eb90984fab2af51a64ff924254ecf830651fd8 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Mon, 17 Nov 2014 13:12:55 -0500 Subject: [PATCH 86/88] rename Math to math_helpers --- harstorage/controllers/superposed.py | 2 +- harstorage/lib/{Math.py => math_helpers.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename harstorage/lib/{Math.py => math_helpers.py} (100%) diff --git a/harstorage/controllers/superposed.py b/harstorage/controllers/superposed.py index 95ecb89..40feafc 100644 --- a/harstorage/controllers/superposed.py +++ b/harstorage/controllers/superposed.py @@ -4,7 +4,7 @@ from harstorage.lib.base import BaseController, render from harstorage.lib.MongoHandler import MongoDB -from harstorage.lib.Math import Histogram, Aggregator +from harstorage.lib.math_helpers import Histogram, Aggregator class SuperposedController(BaseController): diff --git a/harstorage/lib/Math.py b/harstorage/lib/math_helpers.py similarity index 100% rename from harstorage/lib/Math.py rename to harstorage/lib/math_helpers.py From c2d478e2f0772e52070dfad654b98d970d269e2a Mon Sep 17 00:00:00 2001 From: Kelly Kane Date: Tue, 8 Mar 2016 16:22:50 -0800 Subject: [PATCH 87/88] Adding Markdown format, lots of general cleanup. --- README | 111 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/README b/README index b745b02..83ee9ab 100644 --- a/README +++ b/README @@ -1,5 +1,5 @@ -Supported platforms -Test Suite Passes: +# Supported platforms +## Test Suite Passes: Ubuntu 10.04, 11.10 Mint 12 @@ -14,52 +14,47 @@ Chrome 17.0 Safari 5.1 Opera 11.61 IE 8, 9 -32-bit limitations + +### 32-bit limitations MongoDB uses memory-mapped files. When running on a 32-bit operating system, the total storage size for the server (data, indexes, everything) is 2GB. If you are running on a 64-bit os, there is virtually no limit to storage size. Thus 64 bit production deployments are recommended. -Debian/Ubuntu/Mint dependencies +# Environment setup +## Debian/Ubuntu/Mint dependencies Install the following packages as root: -apt-get install mongodb - +``` apt-get install lib32stdc++6 (for 64-bit OS) +apt-get install python python-cairo python-rsvg python-setuptools +``` +``` +pip install pylons==1.0 +pip install webob==0.9.8 +``` -apt-get install python - -apt-get install python-cairo - -apt-get install python-rsvg - -apt-get install python-setuptools - -easy_install pylons==1.0 - -easy_install webob==0.9.8 +### Install and setup your preferred backend, for example MongoDB +`apt-get install mongodb` +`pip install pymongo` -easy_install pymongo -CentOS dependencies -Install and start MongoDB +## CentOS dependencies Install the following packages as root: - -yum install python - -yum install pycairo - -yum install gnome-python2-rsvg - -yum install python-setuptools - -easy_install pylons==1.0 - -easy_install webob==0.9.8 - -easy_install pymongo -Windows dependencies +``` +yum install python pycairo gnome-python2-rsvg python-setuptools +``` +``` +pip install pylons==1.0 +pip install webob==0.9.8 +``` + +### Install and setup your preferred backend, for example MongoDB +`yum install mongodb` +`pip install pymongo` + +## Windows dependencies Install and start MongoDB Install Python 2.7.2 @@ -75,39 +70,41 @@ Install setuptools Finally run in command prompt: +``` easy_install pylons==1.0 - easy_install webob==0.9.8 - easy_install pymongo -Installation -Download the latest package. Use easy_install to install downloaded egg file (root privileges are required): +``` -easy_install harstorage-1.0-py2.7.egg +# Installation +Download the latest package. Use `pip install` to install downloaded egg file (root privileges are required): + +`pip install harstorage-1.0-py2.7.egg` Create a skeleton config file for your application instance called production.ini: -paster make-config "harstorage" production.ini +`paster make-config "harstorage" production.ini` After that run the following command, specifying the config file you want to set up, which in this case is production.ini: -paster setup-app production.ini +`paster setup-app production.ini` Now you can run HAR Storage using the Paste HTTP server: -paster serve production.ini -Upgrade Notes +`paster serve production.ini` + +## Upgrade Notes In case of upgrade to HAR Storage v0.6 downgrade of WebOb may be necessary: -easy_install webob==0.9.8 +`pip install webob==0.9.8` In case of upgrade to HAR Storage v1.0 go to home page (http://localhost:5000/ by default) and wait until the data was migrated. Also check that you are using exactly Pylons 1.0: -easy_install pylons==1.0 +`pip install pylons==1.0` It really makes sense to backup your test results before upgrade. -Customization +## Customization Once the production.ini file is created, you can customize it for your particular deployment. -Web server options +## Web server options host, port - these specify the IP address and port the server should listen on for requests. If you want to serve an application on all interfaces, you will need to change the host option to 0.0.0.0. MongoDB options mongo_host - IP address MongoDB database. @@ -116,21 +113,23 @@ mongo_db - name of database. mongo_auth - this can be true or false. If true, MongoDB authentication is enabled (false by default). mongo_user - user name for authentication. mongo_pswd - password for authentication. -Debugging -debug - this can be true or false. If true, the interactive debugger is enabled to allow you to track down problems (false by default). -Logging + +## Debugging +`debug` - this can be true or false. If true, the interactive debugger is enabled to allow you to track down problems (false by default). + +## Logging Sometimes it makes sense to redirect application output to log file using --log-file option: -paster serve production.ini --log-file production.log -Theme +`paster serve production.ini --log-file production.log` + +## Theme You can also customize chart theme via Preference menu at the top right corner of the browser window. -Page Speed integration (optional) +## Page Speed integration (optional) There are prepared binaries for two platforms: Windows x86 Linux x86 -You can download them here. In order to create own file you should meet prerequisites for your platfrom. @@ -140,7 +139,7 @@ Now you are ready to build Page Speed library. pagespeed_bin or pagespeed_bin.ex If you want to enable Page Speed integration change permissions of pagespeed_bin file (Linux only): -chmod +x pagespeed_bin +`chmod +x pagespeed_bin` and modify configuration file production.ini: ps_enabled - this can be true or false. If true, Page Speed integration in enabled. From 9d28e29fd43fdf2ddfa357b6ca7c5649a6c1ddee Mon Sep 17 00:00:00 2001 From: Kelly Kane Date: Tue, 8 Mar 2016 16:23:31 -0800 Subject: [PATCH 88/88] Markdown filename! --- README => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README => README.md (100%) diff --git a/README b/README.md similarity index 100% rename from README rename to README.md