From 5508cb31f177de828e414008b8db50ffed17286b Mon Sep 17 00:00:00 2001 From: ambrosechua Date: Mon, 26 Nov 2012 07:54:53 +0800 Subject: [PATCH] it works, now displays results --- index.html | 148 ++++++++++++++--- iyq-ns.mp3 | Bin 0 -> 9648 bytes iyq.mp3 | Bin 0 -> 11088 bytes jquery.xmlns.js | 411 ++++++++++++++++++++++++++++++++++++++++++++++++ loading.gif | Bin 0 -> 3208 bytes pwwwsyt.mp3 | Bin 0 -> 11376 bytes sample.xml | 408 +++++++++++++++++++++++++++++++++++++++++++++++ tts.php | 11 ++ 8 files changed, 959 insertions(+), 19 deletions(-) create mode 100644 iyq-ns.mp3 create mode 100644 iyq.mp3 create mode 100644 jquery.xmlns.js create mode 100644 loading.gif create mode 100644 pwwwsyt.mp3 create mode 100644 sample.xml create mode 100644 tts.php diff --git a/index.html b/index.html index 232e577..ef1dc7f 100755 --- a/index.html +++ b/index.html @@ -2,8 +2,17 @@ - + + + + + + + + EyesOff + +
-

Project EyesOff

-

Inspired by 'No screen at night! ', we give you Project EyesOff! It is a service that allows you to surf YouTube and listen to music via voice recognition and speech. Powered by Google Voice Recognition and text to voice, you can ensure it will give you the best possible results.

-
Go on...
+

Project EyesOff - Purely client-side!

+

Inspired by 'No screen at night! ', we give you Project EyesOff! It is a service that allows you to surf YouTube and listen to music via voice recognition and speech. Powered by Google Chrome's buit-in voice input and Google Translate's text to speech, you can ensure it will give you the best possible results. It only works on Google Chrome. On my blog.

+
Go on...


Type or say your search query

+

Here are your results

+
+ + +
+
+ +
+
Turn down brightness
+ + + + + + diff --git a/iyq-ns.mp3 b/iyq-ns.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..234ed3a8cf5af876d2263b56192d95f1d77334a4 GIT binary patch literal 9648 zcmb{0^6DpDA+u7GmKpKE+*o4-EI^_ZmzEd(xPR@ z7A^yMw@()HUOdwwxc}Uh1b@f&xj|{v5omL)?JSB2Cu|&=LtJDS&SumKm}(@UJQU34 z-=UyRm3S50s&yw>bVMAhquY6LiQ}Z`CftDvFeK%~t!nW#ijNHzeex!4T7SN|MX$Nu zulUZ`XyWpUY0-LG65X-7&*!s)4zSzyd!yCeq$Q1WSLEIJWvkqytxv$w6Z`osa3}Y& z;>{wd$>P{ad{}%OPu{1hYvEN$fK-;po{ryqJ^iLP)t!_l(;~fu&e;p{? zE{kB${{G{V`fDebdXCZg!yb*#-evuu_d$l@RZ-Ess-t4Wt-Oun{f(lj8vz0=cJ1&4 z9H0Hq!}c5;jrN}{C~<@uvBo(Zmaj;NceyIgZuOn>lGqNn#)l&W<9Z>jeSBVh5a&Ox z9^gJdkpRKp`a-7maYI*d7cjKB73ZGs?<1X*YkxM*{vY|SJaFNINoSWoq?taUIuKpT zm6{B!+-nQfcls6bB{8dYnbu#RsZ2Z2#g?lGHOk!I09*gH_+D+IJY=j6FVfIDpddQC zhNqgTMtTtrR8&+tYeUr9x3WUAwlJ)&3MckP3s0D`;;$;ECz1=1NDf76QCVVTqnSRX zXdcC;((&U?+8t1<1y$`^c{7{Z!8^3*ZE{slS3t>fLD`7GsUiZGp z68YVWD&u2JVMFZMl_^>UlzkH0yh8b_7Rp1+tZ0)4@*Hnory*ORW23n@Bl!wk9dIW* z)ggTtri0zTm_wf#g9Avz+rL%(ktF?2&qOTqnUUL0w;D3wJQ^yAp1&{<$~1M1O;4l= zcCPG3wgCVW_et$tOZU>9nJ>lr7YS!;c*HLfAWW(Z6mKH3Xq)7Z&bDV=3w`-Do$<*w2$uVY)?uk%k!PNb5Dhy^De$=#4A)+*rJl+W{i6tDd3mpMupoQs7{^8?4}o& zr@@fGGiQ4xvQ>XG^T!l9kUX$h_}yxCXN22#JfF?laJIkq;;pVPS6iBkJFadK2}QmQR$KRus$EOLq&L;{np3;`PB zPshY1_Z)cF`3LKJ8DeepVuoMIsuTlj@x1m7wSgV-z#agc@topb>)rW^RBBLDJEo;| zgogx-=KdK(1`(lU;V0NTU!gpVOzIE$nIdn{ZCJ3)_K};e&QFOgJbM1^XV37DyWPj9 zswu2Ijm@z-l>QwR?LQxf5>W9s4bTT!rqU@+``&#TMB49d>iIek4i|sB{Z`3;d<6gt zdLLAU$pGNz7yw+?6wTB}HOU>)?xr&~AWsM#;knjO%vf~C`4ukj^EBU?O|u`uCO1;) z?_Qxiyo`{HB+!t4!+Me$c2w@-v=ArR@PF()9I~KsdV0;s*Q-Q&RCP3f;Bg0C^Or+X}p1nJ^fv=+3N z0N~DdXgug;Vd<>c_ocbbJODUs8+PDJmcMR%Bhw?d5Rc2Vn&Byr@<`J^2bX}NqndFJ zgBYCy%Os%As$!!8O%tJ`j5z-6ff2SVU5W>OT_^8e9rdI^Q|kths$BA+80b7Pe3`TU{?J_-nM#J0(ag!gzINesOyH3(s9w_;sHd8oiH z`QJdjw8$4v(YHi8b8*Pc58|IzUxit$n+w)pEWAAfWmT&f$?Y3qiDv1+9( zMNPJdyp%ts^R7ZZcMSeGw_77t|Kd!yM4&l;FuwUi>)o0}Mr6ofMpSXIXVKGlU;-K{ z*F70H03eb)r#I~i7svMuT2#)lULe|{bqi=hr#-5Znou4v2OQ-gZ*UXHHnFx~_DKIt z>B#EGL(fxJ-W8n}IB2>1>qNo&he4&v#QfXC5ij03`E!A2woDH1|D);F#Q63VoeM$qU7r$ZjobQ=cdr?=#-l5q!F>D9xauUtoWnm!M z-9FJ;e>=baIl04lv5UbqJC#5CAH~+a!90;UYwz77!^}w{5kf}vhD?O59Zo1tXg4W0 zC<;u!+G}9rUE5N6ZNvvm)ab3BJ?j~K!&50384FyaE7i~`d4L5)7SM`3+M7zN*@BYE z%}^d%x~qVihx{O^FH~xE3lo*t9?x>|jrB3@=~cB28Lc!m)xHc<_UFW~fKgzYlU88A z*9m7#dzlz7=b)u8K3bx=#IKa*)tm6)vR#XU*G3=xVvL3Fdx|`tH#;$lP|N@aqe*en z71!U7AR#}Fr(_5vEFr`G3JPp(PlETaEATrTUJ$}w@cw7i2FWNvc|;h@O%Z5tRgmU^ zC`aR_`T(v~!V{rFK~_$;l!oa^UT>qb>X+8qg=JM-t7t?Wuap-`Do!%L(VkJYMhOgo zW35L%*K$0)!PeMcNx9v(uEEvFq0Q4@p7{Hbizcz*u7}@iTB~O9=6hwP1Ibef4!fGz zx1S-+Ze&Ah9B5N4o|w^@7`vtydL*0qJv}IoDqnFc674@j(5AvVX%a$$DI{3D_xV_l zPyoYlpBgXc$VcdP^6q$I*;rdavk$#LPoP4X95_@B7BzpBXX@t0O{RAV0A+Jll6SsT zW+r34rUR%?`O)r8a&hPn^Fw<|!UR>~pQlyeN{c>=W8nj}DqD<{EL~wJ10g0y6<6?a zFL}B_(Hp71eb*=tBLhAx4Q&hxx|hFqxU)>mICOAGR&&9XGuJleL}w*+6P5KR^j{4q zkZNX0>g>APr^i><6l#u1O4KRH&5Mq}e3aZ*aBe2zqW}R}&fgyav%qBeo$r0mG|(u{ zIW61I(H#WF)YtaQ5zr1CBZoS(%&9$2PxBSK?>nu`7+UntQ{=@IQB|?B+9pMLgc;Cw zb3ucXNm$+6Af3nDJTg2|c#$;R(3&j_BB|?=qG1`X(v4m)_}+V@D1AnG!{1+m_q$8z zPmMu&R3d6E>4}7&0hlLQDY+el?xiBM`njBKb8}hQ;Rxv zVA(HPa@4z)N`2v=Im!mY$>6g5%1t=9<@+x_a6R3}8-K=iD`w(JPsvSq|#Y15LoS4^3?H zqYTMGBXly)-C!*C53sF`tF#=;(J*ecP4JG)<)#QLwC^8c=dQ#Dhaixb?U9pCT!Cxh zl{Sbc)$@_*qyeoEixbKd%k-4`!84kqdd%%lrv;4oa0br?m7P#N~U9acL zXsCdx9mLiC*D7$M1ACB?@Od-TGNVw_hPNiqb%D+Gg(@>sF`cAG~ zkau^|RqLY~@5ZmCgj)yJd9{nMyn)Slodtd8A|H@=jH$X#@4wp9ShyR-! z`f=g)KlD=cmD!Uqi|MV)R7$=lnB(j{i7*0~RS22^3D5INm0xspK}4Kh{^Ys^PL2n^ z;K?DJ<19KSJ-jw>J&(yK{uH)>MiKag)ce#IC{F|3y6HC%DdB>J9bzay#7Jhq{g{)L zu*FF7P!i5^k9nSaRA3m8H|Nbl^$@=NAK^)t@CSN8EEh;Qa25VoYT#2FJ`b}qoNs-b z%3-UPy{eBlqmrWp!6$tw&>g1@O>bz3B7j$gyxJ);;GT9w4=qXWffyIf+hAGPPgV7jX0s@gQH2ev!T8W@atGl3Buu*4Hk`#}}qg}dgum0Ep?3w|8 zd^`S^4&WTMZ__T<;C629vq}CL5A|D-It`~4%*$5Ke$KC$OGH&uYUL<6l^vM}4_Cm7 z-4gHcAcW3AC~UW=eut@!I1Y5qy_aH#X+!10DzxPkg!LYa)>bxzP@+8Rj8mpHD39HK z=Lsee#j1;u60v!AP`hv~W)fda{Zm`2XPkO~RQd~!Rj^AHED}HD;=}PW52N0)b4o-+ znw-1Z>_lQ~fw$plDE1|Aw**{PF==T5_i6beiF(D_IT#(Q;hBh-40z(XCGUHBM~sd& zNhM_)GAdYQn0PMS1b z{C$2Zzt_+jX?`BPR4DgHyi8;LUg-7-PraFu!Pnd);D{k3y)*0LgSctD1+~&j?217K zxVWwF9Zkcz&cAxG!}1o=0Q#uD(36(dwkHJ~X(b(`-`5ZN{+`q#o@<2fRFyt-&)%D~ zJ-94=46sOcfla=($M}x3!6Yo0?=KTJC|_`Jr_K5mE#$jPDNK=^4*aBgQTFDitHo%+ zJM+hsU)r4yU2t48N-Xtx&%e)9w}linB0@NjX1PnFv@P@g=!!n8)Pu@B^Nk-+`PpT= zZp{Vt5;ioAx4RXd0$)dc(;wYjdRdiFkl^;eLOm;Y5a8y&m89^`Bi-IYku7}r?vg`t zEau$`g}CjC82wl($5TZDp{|n7&G(}89sYcjv}O5UsP!B8!_O>*3FC=QyFZFNvy7}4 z$j#-S39Q?g+DOz<%MIY8KlI!t9>Y@!>&Y8oh6HMaqdY5Mcv%Ig7rUX54r3E}TurIu zQ|r5Q3v}Nu8FMdC>*~spiFQ1Cn1}xc$`yU5uZ#FGoCn^2&!h_ZZRAUOT$IJ)_Y;?N zgH5wX&6}Zs@1idM&CgMGm0=zin~`!HmsB&pTpPFHZ&A%o8zx&3-w!#<^Vo87b0wpD zqF9k~;S$8y)Kqvl;*2F*l67=2^k(e%hpIBOKQu6Ej;Zv_<*e~dLqG|1`X?R_u^-%qR z<4*E#lxLX<;#33j9&E5~tu41Y(wJ$nuQoP5FRB}n74AzfqD7F9hXlt2CE;QOYU!Ky zrRbpHs+u3b^o_|_fWTZsc9{yF0Jwh3aql^DJuC9W4 zGK{F?TlOl>2*wHt!cg&?1J*WFlet~`x+`Xc6H= zZU-B9Q<=+L*X>-2b4evu33&$IvH?m>ZD*1?-+g~T3pTfps|C6Io52Sc9q zoP(Eq_h@U%vnTHjqEVhWMn#nxv<@D$_!xFc)&4b&W*662vHSZ)Q^r=O;lEkCC4wXj zqPW;}??UZ20wR_CY#E3If2pQeRqATsCs2{GeL{rql51aW$y&Qgjbt^Sr0sC#=kSMp zTAoz>uA?Uj*?>pj&NSt#CEU}GCyS*xQm@8-pL&cRu0?LQ2Y;!V^p+|u)~?Zq=c*Tu z^5h9|z;i(ilM8j9_`*A%tJKNq4D7E_HeVD|b=OHJuaAz=wWkbQqS21+l$DwR5%+p} zKBcK4E8$dyCVJ||PtjigwJj_q)D|a6!Ai?AUl}NcKsd2;Qf!T?G--(fm$#{KJ4Q-< z=YcNcl2XxB@_K-V@4B3ZK-2g7hj{By?QL1{{$$aJYcb){zxBE|EYeSt(4Im;Tu1>N zM3@B&uSJfM7S>aB)8R^3#h%v*N8GKu*sIgEKWnw|Ic@QZK?T~sw0q1GdNsuVtf5)R zqB#&Kk`f9SN#J6Jst{p~flCO(Dnwql_hVyFN?_q)g`*{KV4GCX!rQaPy63S$pjYid z{>9i(LLLP)sIyS-N_vR$J*z^rc_$GnKXxKY9?obhJyT{ zJS_M)ATE@Lnf=Tr679cCv<`AR4rf=*w1(GcI;yEyF`=EjIz=>6EQQV|(HaqqY$}|r z2~-u0VX+Wpqjz&yFryf1-YD(hV5B85qMc|&sR4T!57mXs-)8_fWnUj&nSX7uX7TH} z7$%QyZT4cINE6S`qrApB{3OdE}z z|9c7~VD}5IGc3|i2~)ut%uK-&fnH&P-wD!{k`c0fL_N%*W1RFkar(^4k+zHS`poIm zj~$h3pNER_V^p`F-_rCkm!L-lSwGHkFm?DHQ{gA-0!|t1lJG@{JwAYCy;B&kq3a;H(KW(ykL2~IgLa-&dk6~ z`7*zfeTcOXDFSq9;vl9|F};4^k^jv^97}8DjevXoT|K1fxu#%Z+XRgVUDW1jF`>ZE zj+{o_1e8abvGMvFXcRMv-Ms(;B8{|tzgZ+LIcmd5i$Oq033}RGGbd{z5466=5M)sf zsRzyQX#LBD+5Mf)${!GtADEu$7Hrg$(}~HIg5vSN{c-G zKt*F8ZDF1>w^mA4a}|U5HA_$WziuekI+6TAb#K#3h#=H8<#|}=(ab&&Frp?z+r9!r zBgkS6=>sj%STwal^pJRp8;88Wx;NH2(rI z^oLntZui3!T?3s5UeIm${yp%$zrII#EEr-AAL{93(($>ohA0!g@;scyD}K`e!IM&@ zylfH6Y0*EFfd4!@)6sbR#5st+AIswh+ zo4$lq`go!|9*m8qX`o&(l62HRk`aBv6J`jJhMv#^HP^xuLy_6+-p_FOI(f)ctsRJNGT;+-EKET7j0DAKm%4 z${$)B(_2PFivGT0R0{j`FZe_Jv*~I>KWBWm3i`-3ECen#33*TjJIWKn80PvgKQ%>G z%s>MaM)=2rb~XrEcq6-0<|P}r5(zv$c*KB(2M53V<0&0VO&yQNOIJh|G22xJ zVf7|}2=yBf*z5s>uEHZBw0w*{%XXiSP@V+FWOYx_4A@zH-}vrS_FbFho_SE8w?j+Z z7*4Zdd{0ZEpx};TaOFpdu!Q0e1pny6@HRaX&{^cOaOEmS|4Ny#!Lr-t=$Sub65gZ#)08zC0B46huF*VSa^P@Xm>wQK~a zYY|C0DeT5+WufCF#=oG)S9g(%a156d5B|77n6vV&k{c|8fIHjcW0q2H@ zh5!xDW#A5*p6X2sWC=idR_S6wK7qVxk^O@BJ(*|mdO=e~!R$$w4^z;Gndq)HPpl-( zN5@}ZSjYF>rJJ^!SfXQ=*Za%Y$%_7vWYIrJKmMrY9R+_Xy{l4I2E)>MI`~i zwEUEL&A%WJI(v#unGy;8Lds?zLQ^AJ&qjV|`_w!g&wz%BHS)p>^Y5v%+P=4DZZ8xxqy_OBS(`Z98Vt(5b7$a7tVMBa~k=DxZc!g-?~76|-YCxmx5f)mkT>?iYAHRfWbul)Q1}epe`2Bz zIrc+3P8td&ZtwQk2Zb9Ux2z;*@B7-9XPoo)HnEA{zVo@spO3f5_$ZAl6d`G3ZG%!e|grqu1 z(fwg@M!lnX66%ZI%$J!t23%z~0hdPr)gv_~0QZOrxVcZIG++>0x|QtgP{wjEl$eYV zUV8%EsF9kp`E?VpXv(|+S{UtmkVc_Nqobp1MvS>gl!{bTP);C@x`@)UhNqp>$oc$<++FBhjw9P&4$_oz?F3ZjJ;||Ai>BQ0BrQJ oap|!k8VZ`qB7%|mtpiuhMgF&I;9nmMTFNZ^ONVZjf{ zyW;X-B8mP9GVijOpN4Wh5uX#-0m3bDL9Pf!q78<};XCPKJH6Z#hDkgy1_E%>=T=+@ z$j9J&7YXS500ufaiAYJ5NKsJF*FFLQ(f0)4_V$Vj_P$MNM)Kr|LH3xp7==7NiduNZ zaM-Ob&u( z86rI5zjmY{9Qw}{@frjkqGh0#Io89p~JD^(N`N_pp`o8D2jKDP#$(@%ZIk9>f z#=iS!txV&YHo@JS-Yg?GrZ))raTlP|rMag%HiocuWGVXMox#GpW^OaJER=_w!Lkho z>QPKr#BJPkl|+wDWpwd8e_!J=Ex2vuLu;Mm;2{KGii4YXF%bU|*`TPa`xh44h zt%>2(aZj+ZCQcreX11G|cD?9W(kH5=Z zuaTIpP5eoJo1O|Sd)^%1X9Gd8i>ViV`5d$W|DW!UlhSLHHJW z3eoszxwCk?cSb^(bX^Xlk$Gq!I{5u6r4y;HG{CAvmhU&-ui>5w3Lr3GJXFuc9O68S znhj&$ippy0}O-#j5a{`mfJ z^n7WK<^l0Eab=VCQWeD{lgg$DhT(8qxHo6nF^`8RN1ATY{<3GudxiZi>ty}YRT}GSf%J5jb6=xQMa<5s-1)AdAumEdEoLwpq1WYh6n4eyAqdcVa0vd&A-7t_s54rAW z^;d5W4(G)yQJk0@r!=ud;{LC#KbLG29H*w~BCb`6N)+NLDJeg(jeZZ2_w$Q-#2Wt+ zmo{RA4o~x??kG>{0zBw)?0n`o-Ke(r(&$l;2r2_oI#>xze=N6oDG(8sT z&a@%j+~^8JxQZQY^4k+j81!1+ibv^1&FtM(mEq$Z&VsQ!d&;8`YM-b0_}@QU1@4}I zNLu#+1LFa@>$lriLCQy)KWaDUIT+;&(jLaVojW)@$Tw)&ow=+XpI`8(3cSE}#c%DJP`zwK+mh1UnW@$s&Lu*Z*@dL!*`xKsDUFW6(GpB%nfPi?rzt`k^CShdIIia7! z!=Q71gXr(cbC?S^EtfoRBn2ziY{!&+`eKVulmzh&Mz6t?8!| zPel)$*f+U`TLx%TY~jhH#*&KffuHH@jUxsT;JDOD$`m5cqOGq?MEr%E}D z(ALi>+7uz(^<9g6Q3RA+?L#!-FLEEr%>~`Q9!_&S*oFtW50AdDys2#9`h5iet8gDB zeo_EfoB#l1Q}ujHLc7#4^?p7Wk@kns#i-N<~4UKx7#l{0T<)`)E6E}h93t)3;?d4)a z?zYv5=5uq;p}n+t{EF4O1*wOX&Hz%f$q?|&KPa^4vB1!p>$f`Ld6Wv#T-90!fZL#v z$#C7O+6AGu^`-4H066X(b>hsHMz-2X^h>R#<3cyy`Jy~xG^+G9prnM)(m2QAVE3>( z5tzG@&^UMdRMa>aCxkgH*8WGY+);4vA2;KZ{ybRjr=c_@Hfa)$tA3b$GXwDNTKL_! z(9qETy7xU{=G#E-A8gQ{;1;MFeNWu(&Nz+1YbVg}qAq?)OU#E54RTzjC>)C=j8m+S zh7P!71@(g!#b1*gCb-F%Q661dJuw7Ggk)vZ-+RhQj)~Dsbh_5!Rgz0pBX9Bd5U*FY zm>mB#s`>B7#Rq*dsy~gxah7C_>4cH#gk^leTGR@RKhwLkwsK2K(A?_nw(*MAXRzYkq?dtVw2*`fz zQ+R;FCFjq+f0REB z+XmJuSl@lQ+=yU<^u)>w^1mD9nm#+*-F=&czZG~H#ftLyKH>7VM%9a`;5;IJlLXcX zbS;0H2ZSXxgE_mkww3(K+PdQ0=1aF5?vh`9yR(R7YIt4{sg6c5lciCQt_+TzLW1T$ z^uE(mA&X>bbAZlpRHoW48_4CW!+uVFV>mCkTYy{99cA?B_A%muk)_fS0w zAR9ZFFfo4+#C2xi(cZGsd;D)aOL5kCBhVrZKobQ4+zZ@lzgdJO)V?oncRr2}w$CUt zG|V1YE%+GQs98Td+MwFlvz=LEugOwq|1@P-TP^K~`3p;KhMj^_$KT8ufs^LVy&gZ_ z+d^{!Gx0UwIo%1R*j4DUYp8gC@UDP z3W+xhTC131;%;zlI394mNjz_cS_dfmys)?9q!qjvoz5r~lz*w9!u$|RL4}kpHh+_?Xo&r}^6H_=*N0Q!3&l!umiueua8 zK%e%_@@H@cU2zFzP=Z{H#V4azebbN>8AjDp90XQ@LNm9s7F7Ay_a`bilz(GzeBLT= zxcT-`&!wcf#AmeZpW`nZFSiWjB-*_2&|7lIA2QGX`uWVT<=Eh3R!NEgp|E9Pm=_&- z>Qkb31Z4J~)g^%=V7(JC1&%rBopj=+jP<*MAF7}{M3C0v8k9#^*+GFUpVJ2I1xD5b z1947yMXj)s5_yB!W6T^%%r5751a?|9vhA^a#!Kjd!YqDHo59M1LkI~$lLgnz-$HqX zss#j32Tr7R;@5hjFD5N@X+tV=^FL~cgkcRh*;3)hlM03eGv|qW7L;dR!3*VSSwfL| z>n{f_KYx^w%5yo^zEu9tvoCe;Aw%$)vvrk62XjIDt;R`Ml~f9%&%C00Y)E}a+n)Qd zs~QGbK-a213>3Q^4SL&xZ8Rx;I-rZiNddp1F59*!Ff)XCOUt$=T6cGnsqY2I#%O)=1`CxMqZU{>B#51@%#B3+MKfp2YzvPo? z_<;x0LJxx-YIPeNJ}-$VpPhEWCSZd^CbPWHro1w~{;+Uycc%#c#nm)DU&rMO#t$|J zcEVMV^^TL~9HqfKe#mqgUQXoz^iq($S~TBF;gmr~_A+CX2Lf)miw5;BW(g3wWg*6k z6#s@JmjWJc6Pn0c1%9u{F4KR@nr&mT!4eHokV#HHU*O?SXf`@r)}M1G$RtZ^c4$5j zy2{_n&d$5auUU37+UlfgE9BzvOqIS@f2NhcDDTc^TGs7&V zDa(DQ*sYTrSZ(~+A7f`Ld&q5UqddG|Lq|_EWhIa*Sv2}))K_Iywq6BowsIj#w(V@A zTpLn+mRVDu2iY$Rtd3;HvAIVL6Hf)y8F^WTW@H1?VxGSc z9NDWGtPG5?d&`7tu5oy9&hPD|@6h<(&PI58uRP#~xWh?#%dNY>l)(Mh@p;fK$3Tt3 zp5O;ImGmnLu3nebG{JgxN6#N}s#*JVsY)fEVlZNsy8Gd6bF8-y9i6Pu7XQoVWl9#> zk}v2hj+Ua_Qrg?#e7Ni~jm~0?`pH!%a{X@|FxGh$@%e&{`n<7oO>)DtK&6vNr8Ojz z1DAoH6oh|_?7VOO=7kCqpaEe8YtyApZ}#0xWk)J3O=F-{52ql{INyY_%84a!J-Pow zARD+ZgnLJO8*Osld^tyDR{vsa-}>eQHhUg@P4UMk_c?L z#59X;Ahw<#RLhMN>tOUzRg>k$ktaIQP+|Xo%0r{+f`cm)zyyfaVIE%ha2A#Znn}3f z*rmq`teiU1q=v-r_VU6ve9u@C1A{;`C?qZT?Mm!nc{$w}+EC48v8%>-F z0t6yi1%N~VI5`3CUi@Gu-r6bHS$)85RbwChm;!q%YTiCUq{4=43d~fW3@hQr_j6bE)=|QS-$Yt-+9}}S_lkppo+W4oKa=pK0M3h8i zl4q-dO#pjQcx-Fg2U|qs_ZcHZf=e!e1Nh0|;ux7N;m= z^=I0Ve|_$+1JDvFmW%Qf(0cNJ2Kn`^hSlu6*>ri+>wReIzxv#axcN$H z7qR%jP2Ssuple;$6kxF$xU+4NTL}=Da0`i%rP4jd2+|WFUU9tS(C2&WcqXv0oqxYm zz4tURZ@eo7jVB@KZVjCauK)fqbu+a2_Uw4!4NZl&Kx?|6lcDYPc(YKFrf{`qD*Z4k z9VhJPlmkUHWTn!N{{bj(%-SgDnH1}X4o5ej;@Wiy{)(%mdslt`b6Vh`0s3*V1ryE` zu)x`k{kxy%l)VAJKbCnD-X6(~(T>SuCMf?IFB;Z=Mq%5~6QzyvR4^d*D?#J>2rtuD zc6-#UHZ_H2HpOp~(FBbYNqCePNxeA4;y04yGjz5kH+%a$DWxRQx)crb3LTqn^n#9n zwho`(gN};7a|RsR<5z95_r1i$WLpBS*6+apDZYXXz4|n-nGBUX{wdKHZ9J7R;A9l^ z3+W$p#{k@Zzz7lfA94FtDnBwBAE z)}X0kxAm-AR1d-D5w979g>Omg1ho{KDt}>FN2Z$N8B3`@OH!x1Wuk`}#3T>U(h|!d z9hwf)^5l_G4Jc0s9fwXHXk@V!k?~o<*s9ZO-9&lly(0vopa-X6q z4tjk~bTfIs#`ziAgx~Qc5q&?37Pah!xs&)(J@y&xP;HzNGpLUB6h2uPYg@iEp1iQy zu*4IcQnzlQbegW)O)PHEX@Gy^c-pA@A!y-uZROmdg9=V?Y-{HGp#C5rwzdl88KvpL z&I8TpX92*q3-M^obNe}}xX!%MDLwYwGe;Ot^HWR;k$H^ThfAjNkVwbzsvw$|a=EKc z5u9~aTgR+TM=qU}pDH(a+^VMO6buv~axx&?qCw3kP^WETC7K+Q*US(>I>|xebjj&a z>uu3N#c{XWfiPAtrI$5s_D(A+=ZadGe z0pQ>Tp13kmRjo8!Z*h8c(SPCPE?l$=$EKKSWk?Z2TtkVCow(U`8U}5c=+UEMULQLB zZGKjr?gh;){?g{4ToA9q2G!ET7?gd0fhik?_mEj}u?JFwhF*G>pg1YNS>CAAr*?8j zc9|GA=OF?8O~XiiomVcqfbt+&YE*(j(?qLPCv{=;pI+}<5d(m_Cfr|h8 zU+zTS-YpZ!B|~phz)56|rB%4~U2j-MdfrIoB!pq(FaA*~7EaUCVM*c1UY#;^-mlH* zxJ7yPA=4hwplLFM=KN?Gla~C?lyV{c(Q4>f+8mRWV06oUj==Rww+#l7E4!l_7B_#) zHh{KJhHV%J`q2MG;&5pT=DwTshd_~q>J+M+VVdw4U>)_|H(DJ?3JoB+$$^#DoJd zT7lRWrMn#%&g1{Jr$@&EU{ETb0N2I2r>hOn!J zTqp~N(EL=$Q`y?ZgUvvZ;=2N46YDYCjVBG4M6HUi9_CRfJkp%aMc_SGbol5cx!_O1 zS##4XV2@OCH4v&!J$p9GrEN<&;J5w@OZs3s6|WrFc@DT&|B zX6|<)gOK+Db!Cb=ta;P%KVs>rG@Q~R{fLjRN?Zqn{j`Ws60o~{lz?f-(ne*%za+?R z{ybn=lEs#U=`ptpOQYf=3rEa1Z#emM#qcGrZNJ=YecJa1Ix1|ds3n{c?gZg4i=o1} z3LnuBv*ndrD9;8%x5vH5ERFTe)y_d;El-YSn=(TLwveg(QIKxXdnum#A{HgrQ#>C> z#&H)hs}MW49Q#{TtA(?%Jcw__#MHKkM2cRd^3S-=xEPF)OsRe`b*yBpvEu$r<7y(u z2{m#4_xkBJ_L1(J?l0i(XjsQ3{DN^Z`x%K^E!?jc?hnKSl(Vx7va|O!wk}fup`?Z(B+ZOy}bDEkdvhP-6+(XTQyLI3OH3&5# zENyD3Rb``MnCPjX(dm^Aj?0{nw5H=IF?l zV(M{YYWW#SaEBZRb5=iJ!tmncp1g5sKRZ^wp-RyrA-%m{pVFU9J>D3~yPxR})JOI5 zf`=XTLl(SxO301Q45~r4A{q}<0}mSi%+P`LCnlvanlEZ^irolI*BF?iT=d^IB6Mp> zJLBId?eM(Fm;CZ-(?_|ODPD^C1m&5ASnDG|7BQ4zpp>okU6uhm4pfBUBto&1%McQ7&#l!enQ?ahAF3w4 zXshOvM1I4ot=>K#k6V$w^o!%B>fy!gn*NTX#bURsq5Q*!3BH;(K9XZgLg+r*k)!E|2tkr*F8bkqpraZ~A$81?&v<0(W*MMHnw2deZ+U$~gyc z+b#Rny6IEp>huv$l{Z(7yv>u)Z{oyiUg4(Wg3^K4A+ItQMrhJGFH+`mg{!}{8kH*e z{q6hyCJ9rLC_WSJp4#=Rx%Px+{#DGf&{>^Z-ihItW{LJA|JBw%FF zfv?)(z(M( zkBmWWN86WW%iTNajJ$>Hy!-^XVR^f7u5pxSo$hMB33a|vm|-VqTC0_=1kX(~+?a1a z-qxuyWK3#*^C48nV0gT0U<@BG2@`nC4vlZbVNI7-3XQJT>r0pK^EMl?r}&)Ar9f4)J25QiEVog2Arbfz0!xNXc;yeN;M3VTNx|F2 zZq9+9OQXY8(}l%rkpYF$@Q~AEV4EuG$IBoIqWQE26J!u3B1R%DNj;)Mq`LgS-Gh^T z$1G_J4~I)<1OH)aE=$Uk^>NtjF^?=Rf44o_G)Ve^KK~1usTW_#r(e-zYg!+- z6B(5C>XG3LXn8Zium&~Ax7oOc_*3|my^7-}ZRTU&ua1Nx)ntawmY8Ls8j!8cuoG;kh)oVg|!Ug-hv(Vy#K{EmRuH~L2tWh-9CUv|+JwNn92@#(t z2uhx`0JpQRyD_k{Aj7iu?Nwp!>@vglFr{2RWwsT`7AN5u7^{ zuV~UxbLafum-OEcn!r03@t>h&RL&ivj5w-U7U{&?5f(}hf_Z-#fy1=UWazMloAG*> zzVD$tg7l|Gi2L_(X#M)d-=4GAZ9@Wwr$CWkhSBK<3NrOii9#B-_rs$Yj|Auhiw4=zP#$q6X2(1fkA*_|IE9p>QAGi=>}NL%1S>^3WX3l29h%+Aj4+%7aQ__n40 zMZo~y*#OE3`4GDipLs`$=)u2hXDUdVyEx(bk|Uqsmhxb6Q;{I)sc#_;x)m9&9x3Rz z7&-H2H(W&$9Fi>GH-()W#GoG=26PZU&_9n5JB7C=T4Etc7K2Oafl{GSVjZK*qGl#h z>UU}oR&Ycijy)gL8z|N+v~@O7()qsFg@u8QM3V`&xA5xRetYrbZ(^^#FW6>|&G0@D zF21T$d8*P()%(vEOG4H0*q&tny3M%#@$-)#*+Mfu0JkjaD+q93pGm&QOF=y<)B}x;6K(*FM zB&^MpVyLs&%pvG~q9q(Eq+ak^M^hnM!YVL3qg-rK+`fO??9^^PPxhnQYG56;3OQfO z{m1!tyLB_7c=JUp^`O=)0{hSDqf&JSC4;kStwqhO`_uBp>=cxT_>t0D6550XhCjRI@AnIy;7^cXyerRWd-|{*Qnb1KS$eS_7oU)a6Yi3YC?i& zf=vKOu|u_2RofMXiQ-rH(tb{$v$wVy4c44E7C+g zTkdA~qlACbjM(()o6zAKUEQF&MDq#G^_Hd8MbRy*(LjaL;qYNN zaGm^$nBvOz!=a~acB4G{T`vd7ddk+ya6Xcn+2#Dj5#wt42&d=tN*Q0a>K?6+t71iV z&q0y`kAlI!@eD>o-q%yiEUAN5QZ+~3m#(7~o<>?9s(QeTL}1v*cZVlKyX!!6iVrm! zQo0j|1Vj}1_# zSw@FmWV}idee5(yXAvC&tNJOI*2G%pgK8eQD%f>^BUp9Tf0u>0($SLkIg=DVa1d9r zf?_MDL+GLwkxT>veW00!sxwa;-#em;>Ecc2XO^@=*z~m5_bKmgvfR<>9|0;++NC zG@1I9rCQAm1=}w>aVHp*Jy|7fJiM$BEB@WHLBy4;R=NVii(aBV?|v(%!>AXjrO+^y zXfm{vFUjxQy!W_*hivmu_5J==q+oR~4Y^_IGnmZV$#f-^7i^UTk5s!L;bPXf7MR|R zk5Vk!2_FR4KdnDiDCXZ^iGP9r8#;TzdHQ=eUZuPeqsD#LBb@ph5g!vq%FQ+lNV3Oaxn4L)88%(DN#TRD>&eyjlpWv-I#y`j#h(Q{h$1BB$r-9xMG0709hYstjM( zPt`-oK@g^4HKjqaw@J&gvo2iDvknP&Q+d}FpJICNOMeKf;xkGT|G?-4t9yZ_%5a2k zDmpV}otF_16VuRL7!%#FZs{0LD8^0-{#W1QY4?nLLG$!!pcdqX?p&JV`RdklNyD#4 zx1;s76CV>u{7jwPLMGE_({VNiT^SyZ6NG6rslp%e;jv3$6XIYD7Ks>|d;&&Wom|y- zze67Xd+u$`u%iOvh?#l(^d#z-1^sF-lP9X1E#{kSEJ=)5W2q8Dy=WcUH0*T4vrPq8 zT6QA=wfSrYI;j3C1dC>bgT|@TW>@civYxK1UDR;7gfG>E)Dz;Z?TzV@KX<7K6z-6l zH+Dq`TM6xLx*0rO6aGBC-aXnzp{;5+a%VqtzoA}t1NPaq`ZueyRo@$ZrPn`lYqxtnlKb_^cDDB`O`Bs*jsVp@l&2B= zqc|Ehe!i#uI#PM$Hl=XZ@gqi0Bq8Rj;($6=MsL_|-%*naCzfp)zz;jCgQL*slg2w?yzfmh+Gd z>6T~{gA=dL2d-1qNjVe%A6C!rPBg1;PI#xEnx;Pv$CS4KGvZl^oQc;p_JI7ScE9+C z;N}Q$(Up8m-f5p%^1u0p^2~yhk-ngS=`35j0|9|nL9f@EER9t#`i%SWUwgm}NF7}_ z@%O`PAHCM!Z^uVd=097DoQ-9(sQE;(^vyB~#?!YNPX2Uk>D2250p+>wC>ywa%twNM zBKy^m8;$du=9<>p`H9O&{bv2qu@Sw-_c1nVeR+0)b<-_&qHEOvQOeH&SzJCeCU-yL zfBm(|5QFXv3Ruh%Wy{f^ecRi*Q#ClP`ms9yR9BfizV;=8BsSl^apmIEmvM^$ny1&PXMmun_L4KzUYxj-fr zf4lrC^XckB`j!)pth;~jtP9@GbNOavL;qaY`pNKFuXdqJG%BvJxG-E=0T~T0BiEWo zN)Q{aN^dopdI6cWIjTyl(E7>U%h$>bw~sd@$I|_uTk$u;BP=IYC;q;#GrqjqxFQ{A z?>u=>WVUnZrikNpWf@k~H)-DueTWf_kMgu|-e~ZGda+mg9oC3v9V02WL%tB^aaR$g zIf3-8pK&EV-iA`qO|J57?K6aIF9jmVKKUg61bkUd^Uu>FJ}6AEN}Hye`)nBX5(K@A zsiynZIX7;*-nZ2323=D4xQ|0>JkJvQ*B9conwA$Z94-`>`Avu>h1N?4{_anz?uf+c zLsCMgPj)LgwLSm#%Q4&(8eE_N!qth$4|Td``Srg>kIt_1-gvtN>`iq7n%Qo5J|4?! zo$oWE&g3pF$A(6<_xl-Q^=msFXI@?wS5Kb3%E6gqQog!ayJ2fNndvn4~%?QyLoLKejDo^2J2&tUhmshi12_LFZJeYjqYoFE*+KXi|gpN>KS2 zFylKyK>paRe0wf?(Gy!t} literal 0 HcmV?d00001 diff --git a/jquery.xmlns.js b/jquery.xmlns.js new file mode 100644 index 0000000..96c5a55 --- /dev/null +++ b/jquery.xmlns.js @@ -0,0 +1,411 @@ +// +// jquery.xmlns.js: xml-namespace selector support for jQuery +// +// This plugin modifies the jQuery tag and attribute selectors to +// support optional namespace specifiers as defined in CSS 3: +// +// $("elem") - matches 'elem' nodes in the default namespace +// $("|elem") - matches 'elem' nodes that don't have a namespace +// $("NS|elem") - matches 'elem' nodes in declared namespace 'NS' +// $("*|elem") - matches 'elem' nodes in any namespace +// $("NS|*") - matches any nodes in declared namespace 'NS' +// +// A similar synax is also supported for attribute selectors, but note +// that the default namespace does *not* apply to attributes - a missing +// or empty namespace selector selects only attributes with no namespace. +// +// In a slight break from the W3C standards, and with a nod to ease of +// implementation, the empty namespace URI is treated as equivalent to +// an unspecified namespace. Plenty of browsers seem to make the same +// assumption... +// +// Namespace declarations live in the $.xmlns object, which is a simple +// mapping from namespace ids to namespace URIs. The default namespace +// is determined by the value associated with the empty string. +// +// $.xmlns.D = "DAV:" +// $.xmlns.FOO = "http://www.foo.com/xmlns/foobar" +// $.xmlns[""] = "http://www.example.com/new/default/namespace/" +// +// Unfortunately this is a global setting - I can't find a way to do +// query-object-specific namespaces since the jQuery selector machinery +// is stateless. However, you can use the 'xmlns' function to push and +// pop namespace delcarations with ease: +// +// $().xmlns({D:"DAV:"}) // pushes the DAV: namespace +// $().xmlns("DAV:") // makes DAV: the default namespace +// $().xmlns(false) // pops the namespace we just pushed +// $().xmlns(false) // pops again, returning to defaults +// +// To execute this as a kind of "transaction", pass a function as the +// second argument. It will be executed in the context of the current +// jQuery object: +// +// $().xmlns("DAV:",function() { +// // The default namespace is DAV: within this function, +// // but it is reset to the previous value on exit. +// return this.find("response").each(...); +// }).find("div") +// +// If you pass a string as a function, it will be executed against the +// current jQuery object using find(); i.e. the following will find all +// "href" elements in the "DAV:" namespace: +// +// $().xmlns("DAV:","href") +// +// +// And finally, the legal stuff: +// +// Copyright (c) 2009, Ryan Kelly. +// TAG and ATTR functions derived from jQuery's selector.js. +// Dual licensed under the MIT and GPL licenses. +// http://docs.jquery.com/License +// + +(function($) { + +// Some common default namespaces, that are treated specially by browsers. +// +var default_xmlns = { + "xml": "http://www.w3.org/XML/1998/namespace", + "xmlns": "http://www.w3.org/2000/xmlns/", + "html": "http://www.w3.org/1999/xhtml/" +}; + + +// A reverse mapping for common namespace prefixes. +// +var default_xmlns_rev = {} +for(var k in default_xmlns) { + default_xmlns_rev[default_xmlns[k]] = k; +} + + +// $.xmlns is a mapping from namespace identifiers to namespace URIs. +// The default default-namespace is "*", and we provide some additional +// defaults that are specified in the XML Namespaces standard. +// +$.extend({xmlns: $.extend({},default_xmlns,{"":"*"})}); + + +// jQuery method to push/pop namespace declarations. +// +// If a single argument is specified: +// * if it's a mapping, push those namespaces onto the stack +// * if it's a string, push that as the default namespace +// * if it evaluates to false, pop the latest namespace +// +// If two arguments are specified, the second is executed "transactionally" +// using the namespace declarations found in the first. It can be either a +// a selector string (in which case it is passed to this.find()) or a function +// (in which case it is called in the context of the current jQuery object). +// The given namespace mapping is automatically pushed before executing and +// popped afterwards. +// +var xmlns_stack = []; +$.fn.extend({xmlns: function(nsmap,func) { + if(typeof nsmap == "string") { + nsmap = {"":nsmap}; + } + if(nsmap) { + xmlns_stack.push($.xmlns); + $.xmlns = $.extend({},$.xmlns,nsmap); + if(func !== undefined) { + if(typeof func == "string") { + return this.find(func).xmlns(undefined) + } else { + var self = this; + try { + self = func.call(this); + if(!self) { + self = this; + } + } finally { + self.xmlns(undefined); + } + return self + } + } else { + return this; + } + } else { + $.xmlns = (xmlns_stack ? xmlns_stack.pop() : {}); + return this; + } +}}); + + +// Convert a namespace prefix into a namespace URI, based +// on the delcarations made in $.xmlns. +// +var getNamespaceURI = function(id) { + // No namespace id, use the default. + if(!id) { + return $.xmlns[""]; + } + // Strip the pipe character from the specifier + id = id.substr(0,id.length-1); + // Certain special namespaces aren't mapped to a URI + if(id == "" || id == "*") { + return id; + } + var ns = $.xmlns[id]; + if(typeof(ns) == "undefined") { + throw "Syntax error, undefined namespace prefix '" + id + "'"; + } + return ns; +}; + + +// Update the regex used by $.expr to parse selector components for a +// particular type of selector (e.g. "TAG" or "ATTR"). +// +// This logic is taken straight from the jQuery/Sizzle sources. +// +var setExprMatchRegex = function(type,regex) { + $.expr.match[type] = new RegExp(regex.source + /(?![^\[]*\])(?![^\(]*\))/.source); + if($.expr.leftMatch) { + $.expr.leftMatch[type] = new RegExp(/(^(?:.|\r|\n)*?)/.source + $.expr.match[type].source.replace(/\\(\d+)/g, function(all, num){ + return "\\" + (num - 0 + 1); + })); + } +} + + + +// Modify the TAG match regexp to include optional namespace selector. +// This is basically (namespace|)?(tagname). +// +setExprMatchRegex("TAG",/^((?:((?:[\w\u00c0-\uFFFF\*_-]*\|)?)((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)))/); + + +// Perform some capability-testing. +// +var div = document.createElement("div"); + +// Sometimes getElementsByTagName("*") will return comment nodes, +// which we will have to remove from the results. +// +var gebtn_yields_comments = false; +div.appendChild(document.createComment("")); +if(div.getElementsByTagName("*").length > 0) { + gebtn_yields_comments = true; +} + +// Some browsers return node.localName in upper case, some in lower case. +// +var localname_is_uppercase = true; +if(div.localName && div.localName == "div") { + localname_is_uppercase = false; +} + +// Allow the testing div to be garbage-collected. +// +div = null; + + +// Modify the TAG find function to account for a namespace selector. +// +$.expr.find.TAG = function(match,context,isXML) { + var ns = getNamespaceURI(match[2]); + var ln = match[3]; + var res; + if(typeof context.getElementsByTagNameNS != "undefined") { + // Easy case - we have getElementsByTagNameNS + res = context.getElementsByTagNameNS(ns,ln); + } else if(typeof context.selectNodes != "undefined") { + // Use xpath if possible (not available on HTML DOM nodes in IE) + if(context.ownerDocument) { + context.ownerDocument.setProperty("SelectionLanguage","XPath"); + } else { + context.setProperty("SelectionLanguage","XPath"); + } + var predicate = ""; + if(ns != "*") { + if(ln != "*") { + predicate="namespace-uri()='"+ns+"' and local-name()='"+ln+"'"; + } else { + predicate="namespace-uri()='"+ns+"'"; + } + } else { + if(ln != "*") { + predicate="local-name()='"+ln+"'"; + } + } + if(predicate) { + res = context.selectNodes("descendant-or-self::*["+predicate+"]"); + } else { + res = context.selectNodes("descendant-or-self::*"); + } + } else { + // Otherwise, we need to simulate using getElementsByTagName + res = context.getElementsByTagName(ln); + if(gebtn_yields_comments && ln == "*") { + var tmp = []; + for(var i=0; res[i]; i++) { + if(res[i].nodeType == 1) { + tmp.push(res[i]); + } + } + res = tmp; + } + if(res && ns != "*") { + var tmp = []; + for(var i=0; res[i]; i++) { + if(res[i].namespaceURI == ns || res[i].tagUrn == ns) { + tmp.push(res[i]); + } + } + res = tmp; + } + } + return res; +}; + + +// Check whether a node is part of an XML document. +// Copied verbatim from jQuery sources, needed in TAG preFilter below. +// +var isXML = function(elem){ + return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || + !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; +}; + + +// Modify the TAG preFilter function to work with modified match regexp. +// This normalises case of the tag name if we're in a HTML document. +// +$.expr.preFilter.TAG = function(match, curLoop, inplace, result, not, isXML) { + var ln = match[3]; + if(!isXML) { + if(localname_is_uppercase) { + ln = ln.toUpperCase(); + } else { + ln = ln.toLowerCase(); + } + } + return [match[0],getNamespaceURI(match[2]),ln]; +}; + + +// Modify the TAG filter function to account for a namespace selector. +// +$.expr.filter.TAG = function(elem,match) { + var ns = match[1]; + var ln = match[2]; + var e_ns = elem.namespaceURI ? elem.namespaceURI : elem.tagUrn; + var e_ln = elem.localName ? elem.localName : elem.tagName; + if(ns == "*" || e_ns == ns || (ns == "" && !e_ns)) { + return ((ln == "*" && elem.nodeType == 1) || e_ln == ln); + } + return false; +}; + + +// Modify the ATTR match regexp to extract a namespace selector. +// This is basically ([namespace|])(attrname)(op)(quote)(pattern)(quote) +// +setExprMatchRegex("ATTR",/\[\s*((?:((?:[\w\u00c0-\uFFFF\*_-]*\|)?)((?:[\w\u00c0-\uFFFF_-]|\\.)+)))\s*(?:(\S?=)\s*(['"]*)(.*?)\5|)\s*\]/); + + +// Modify the ATTR preFilter function to account for new regexp match groups, +// and normalise the namespace URI. +// +$.expr.preFilter.ATTR = function(match, curLoop, inplace, result, not, isXML) { + var name = match[3].replace(/\\/g, ""); + if(!isXML && $.expr.attrMap[name]) { + match[3] = $.expr.attrMap[name]; + } + if( match[4] == "~=" ) { + match[6] = " " + match[6] + " "; + } + if(!match[2] || match[2] == "|") { + match[2] = ""; + } else { + match[2] = getNamespaceURI(match[2]); + } + return match; +}; + + +// Modify the ATTR filter function to account for namespace selector. +// Unfortunately this means factoring out the attribute-checking code +// into a separate function, since it might be called multiple times. +// +var filter_attr = function(result,type,check) { + var value = result + ""; + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value != check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0,check.length+1)===check+"-" : + false; +} + + +$.expr.filter.ATTR = function(elem, match) { + var ns = match[2]; + var name = match[3]; + var type = match[4]; + var check = match[6]; + var result; + // No namespace, just use ordinary attribute lookup. + if(ns == "") { + result = $.expr.attrHandle[name] ? + $.expr.attrHandle[name](elem) : + elem[name] != null ? + elem[name] : + elem.getAttribute(name); + return filter_attr(result,type,check); + } + // Directly use getAttributeNS if applicable and available + if(ns != "*" && typeof elem.getAttributeNS != "undefined") { + return filter_attr(elem.getAttributeNS(ns,name),type,check); + } + // Need to iterate over all attributes, either because we couldn't + // look it up or because we need to match all namespaces. + var attrs = elem.attributes; + for(var i=0; attrs[i]; i++) { + var ln = attrs[i].localName; + if(!ln) { + ln = attrs[i].nodeName + var idx = ln.indexOf(":"); + if(idx >= 0) { + ln = ln.substr(idx+1); + } + } + if(ln == name) { + result = attrs[i].nodeValue; + if(ns == "*" || attrs[i].namespaceURI == ns) { + if(filter_attr(result,type,check)) { + return true; + } + } + if(attrs[i].namespaceURI === "" && attrs[i].prefix) { + if(attrs[i].prefix == default_xmlns_rev[ns]) { + if(filter_attr(result,type,check)) { + return true; + } + } + } + } + } + return false; +}; + + +})(jQuery); + diff --git a/loading.gif b/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3aec67841be58283282e27cd0d82c2a3f50c7759 GIT binary patch literal 3208 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 literal 0 HcmV?d00001 diff --git a/pwwwsyt.mp3 b/pwwwsyt.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f8ae438bdd46f2440e2879b033db81ed9cd3d2d6 GIT binary patch literal 11376 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 literal 0 HcmV?d00001 diff --git a/sample.xml b/sample.xml new file mode 100644 index 0000000..c5b4fe8 --- /dev/null +++ b/sample.xml @@ -0,0 +1,408 @@ + + +tag:youtube.com,2008:videos + + +2012-11-25T11:27:44.283Z + + + +Videos matching: lmfao + + +http://www.youtube.com/img/pic_youtubelogo_123x63.gif + + + + + + + + + +YouTube + + +http://www.youtube.com/ + + + +YouTube data API + + +148223 + + +1 + + +3 + + + +tag:youtube.com,2008:video:KQ6zr6kCPj8 + + +2011-03-09T05:30:54.000Z + + +2012-11-25T10:24:45.000Z + + + +Syndication of this video was restricted. + + + + + +LMFAO - Party Rock Anthem ft. Lauren Bennett, GoonRock + + + + + + + + + + + +LMFAOVEVO + + +http://gdata.youtube.com/feeds/api/users/LMFAOVEVO + + +k78ZcA6kflEvBR0UrGDH0Q + + + + + + + + + + + + + + + + +Music + + + +lmfaovevo + + +Buy now glnk.it Music video by LMFAO performing Party Rock Anthem featuring Lauren Bennett and GoonRock. (c) 2011 Interscope #VEVOCertified on July 1, 2011. www.vevo.com www.youtube.com + + + +youtube + + + +DE + + + + + + + + +LMFAO - Party Rock Anthem ft. Lauren Bennett, GoonRock + + +widescreen + + + +2011-03-09T05:30:54.000Z + + +UCk78ZcA6kflEvBR0UrGDH0Q + + +KQ6zr6kCPj8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +tag:youtube.com,2008:video:wyx6JDQCslE + + +2011-09-16T07:00:00.000Z + + +2012-11-25T10:30:48.000Z + + + +Syndication of this video was restricted. + + + + + +LMFAO - Sexy and I Know It + + + + + + + + + + + +LMFAOVEVO + + +http://gdata.youtube.com/feeds/api/users/LMFAOVEVO + + +k78ZcA6kflEvBR0UrGDH0Q + + + + + + + + + + + + + + + + +Music + + + +lmfaovevo + + +Music video by LMFAO performing Sexy and I Know It. Get it on iTunes: glnk.it © 2011 Interscope Records #VEVOCertified on November 12, 2011. www.vevo.com www.youtube.com + + + +youtube + + + +1 + + +DE + + + + + + + + +LMFAO - Sexy and I Know It + + +widescreen + + + +2011-09-16T07:00:00.000Z + + +UCk78ZcA6kflEvBR0UrGDH0Q + + +wyx6JDQCslE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +tag:youtube.com,2008:video:SkTt9k4Y-a8 + + +2012-02-22T08:00:00.000Z + + +2012-11-25T10:28:05.000Z + + + +Syndication of this video was restricted. + + + + + +LMFAO - Sorry For Party Rocking + + + + + + + + + + + +LMFAOVEVO + + +http://gdata.youtube.com/feeds/api/users/LMFAOVEVO + + +k78ZcA6kflEvBR0UrGDH0Q + + + + + + + + + + + + + + + + +Music + + + +lmfaovevo + + +Sorry For Party Rocking - Buy the album now! smarturl.it + + + +youtube + + + +DE + + + + + + + + +LMFAO - Sorry For Party Rocking + + +widescreen + + + +2012-02-22T08:00:00.000Z + + +UCk78ZcA6kflEvBR0UrGDH0Q + + +SkTt9k4Y-a8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tts.php b/tts.php new file mode 100644 index 0000000..941695e --- /dev/null +++ b/tts.php @@ -0,0 +1,11 @@ + \ No newline at end of file