pax_global_header00006660000000000000000000000064125126650440014517gustar00rootroot0000000000000052 comment=6e68c3cfd251c8befe0d09f7097740f373e1acc0 video-without-flash-restartless-3.1.1/000077500000000000000000000000001251266504400177745ustar00rootroot00000000000000video-without-flash-restartless-3.1.1/Makefile000077500000000000000000000006451251266504400214440ustar00rootroot00000000000000PROJECT="vwof" PWD=`pwd` BUILD="build" NAME="${PROJECT}.xpi" XPI="${PWD}/${BUILD}/${NAME}" .PHONY: latest xpi clean latest: @echo "Building latest '${XPI}'..." @mkdir -p ${BUILD} @zip -r ${XPI} * -x "${BUILD}/*" -x "configure" -x "Makefile" -x ".git/*" xpi: @echo "Building '${XPI}'..." @mkdir -p ${BUILD} @git archive --format=zip -o ${XPI} HEAD clean: @echo "Removing '${PWD}/${BUILD}'..." @rm -rf ${BUILD} video-without-flash-restartless-3.1.1/README.md000077500000000000000000000073531251266504400212660ustar00rootroot00000000000000video-without-flash =================== Firefox extension for watching videos without the flash plugin Fetch video source of flash based media and play the video directly with Firefox, without the use of the flash plug-in. **Supported sites/embed video player** * Youtube (partial support) * Blip * ScreenWaveMedia * HTML5 * Dailymotion * FC2 * niconico Due to some minor variations of providing the video by a same media provider (different version of there player, use of the embed tag) a few videos may not be detected. ** Usage ** By default the video are detected when a page load, you can disable this behavior in the preference pane and manually try to detect video by pressing ALT-w. **Why you may want to use this extension** * You experienced some lag or bad CPU performance using flash * You only use flash to watch videos, and do not want to install a non-free packages on your linux station (this extension is released under the GPL) **Pro tips** *To read MP4 videos you must install a media plugin like vlc-web-plugin or gecko-mplayer. Under Windows the vlc web plugin can be install when running the vlc install exe. * The video can be save with a "right click / save as" on the "open in a new tab" link. * Numerous options in the preference pane : select preferred format / quality when available, disable modules. **Known bugs** * YouTube : The video area is not reloading when clicking on a suggested video link. After clicking on such a link, and no ALT-w command. **How does it works** VWOF Fetchs the direct link to videos using regular expression, XPath, and DOM. A picture and a select control are displayed (the "video selector). Clicking the video selector will open the video link into a video tag. Each media provider is handled by a "parser". Javascript modules (.jsm) that are loaded at startup. The extension can fairly easy be extended due to it modular approache, as new media provider can be added by implementing a new jsm file. **Why a HTML5 parser ?** For licensing reasons firefox did not support the H264 codec. By using the HTML5 parser, you can read the video if a media player plugin is installed as stated previously. = Technical documentation for developers = == How to write a new parser == Do not esitate to fork and add your own parser * Step 1 : Add the name of your parser without the .jsm ext in vwof.parser_name * Step 2 : Create a jsm file in the modules directory The parser must respect the following API : ```javascript var parser = { BASE_URI: 'example.com', //called when the current page url domain name is this.BASE_URI parse_site: function(cw) { var video_info = []; ... return video_info; }, //called if other parser did not return video link with parse_site //as it does not make sens to search embed video in a video site parse_embed: function(cw) { var video_info = []; ... return video_info; } }; ``` === video_info variable === video player is an array of hash each video is an entry in the array and the hash contains video information If the videos array contains more than one element a combo box (select tag) will be added in the player displaying the format and quality ```javascript video_info = [ { //DOM where the video selector / video tag will be embed 'player':, //string link to the preview picture (or black background) 'video_img':, videos = [ { //quality of the video (low, medium, hd720, hd1080) 'quality':, //format of the video (webm, mp4, flv, ...) 'format':, //direct link to the video 'url': } ]; } ]; ``` video-without-flash-restartless-3.1.1/bootstrap.js000077500000000000000000000061641251266504400223610ustar00rootroot00000000000000const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import('resource://gre/modules/Services.jsm'); Cu.import('resource://gre/modules/NetUtil.jsm'); const PREF_BRANCH = "extensions.vwof."; function isAndroid() { return Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime) .widgetToolkit.toLowerCase() == "android"; } function onPageLoad(event) { var cw = event.originalTarget.defaultView; var prefManager = Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefBranch); var activate_onload = prefManager.getBoolPref(PREF_BRANCH+"activate_onload"); if(activate_onload){vwof.detectVideo(cw);} } function init_keyboard_shortcut(window){ let doc = window.document; keyset = doc.getElementById('mainKeyset'); //keyboard shortcut let key = doc.createElement('key'); key.setAttribute("oncommand", "//"); key.setAttribute('key', 'w'); key.setAttribute('modifiers', 'alt'); key.setAttribute('id', 'vwof-key'); key.addEventListener("command", function (){ vwof.detectVideo(window.gBrowser.contentDocument.defaultView); }); keyset.appendChild(key); keyset.parentElement.appendChild(keyset); } ////////////////// function startup(data,reason) { Services.scriptloader.loadSubScript("chrome://vwof/content/prefs.js") Services.scriptloader.loadSubScript('chrome://vwof/content/vwof.js'); Services.scriptloader.loadSubScript('chrome://vwof/content/player.js'); Services.scriptloader.loadSubScript('chrome://vwof/content/utils.js'); Services.scriptloader.loadSubScript('chrome://vwof/content/listener.js'); //prefs PrefObserver.register(); setDefaultPref(PREF_BRANCH, "modules", '{"HTML5":0, "blip":1, "dailymotion":1, "niconico":1, "FC2":1, "ScreenWaveMedia":1}'); setDefaultPref(PREF_BRANCH, "prefered_quality", 'medium'); setDefaultPref(PREF_BRANCH, "prefered_format", 'webm'); setDefaultPref(PREF_BRANCH, "activate_onload", true); vwof.load_modules(); vwof.set_parsers_activation(); if(!isAndroid()){ windowListener.register(); Services.wm.addListener(windowListener); } else{ let windows = Services.wm.getEnumerator("navigator:browser"); while (windows.hasMoreElements()) { let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); loadIntoWindow(domWindow); } Services.wm.addListener(windowListenerNative); } } function shutdown(data,reason) { if (reason == APP_SHUTDOWN) return; if(!isAndroid()){ // Stop listening to newly opened windows Services.wm.removeListener(windowListener); } else{ // Unload from any existing windows let windows = Services.wm.getEnumerator("navigator:browser"); while (windows.hasMoreElements()) { let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); unloadFromWindow(domWindow); } } } function install(data,reason) { } function uninstall(data,reason) { } video-without-flash-restartless-3.1.1/build/000077500000000000000000000000001251266504400210735ustar00rootroot00000000000000video-without-flash-restartless-3.1.1/build/vwof.xpi000066400000000000000000000756571251266504400226220ustar00rootroot00000000000000PKh"Fޝ README.mdUT TYA*Uux VێG}/{D.Z[ KHgzfg'3ZS= OtԩSk-}ߝVKu~3LotEU>ZwҺNl!1Fm/S0`p4PU>4єԘjҮ%x EWo< LQ;>nɛm}#ęi;g_& VbwwjMqʼhW/mM;@gg z8Pc[`5w1 )N/a2Z PVwKcS ^6!h7n^-_.'=ڡlQk佴,"qT"r A7Fa#.^^[nĥ79{PaҚ`qQ!.[[P*"2ȐN$:b]@rޝV V@ w|ںp)AGI ϗ/ੳm׉ΓtSW?kP^?#T$b E_ $}݄2|\Pk,t Napd:3Ap 4gx b@$rM8/(o,mt4cGM<ǡ[˵5+Ӹ6@(бke6;E`QH7.EK%#Flmv`Z?,3G)ԑ[ʃ020霮L .}sIy( ݬ>sK  \IXN$-ˤܺδt{QbT9mWf WUf4c$Aeti ]B6J}Zn(Yt|]5R>}%ŽQϣ7O?LB#'JfE( {>p)p eNbC~E댪\b}p@UA0yt Fʁ/_vy^y 'eY +""|!{1ed-$rVCR'e<2Vdy#x嚠u؆@%.ޣX2an~(s&!/E/o7>$r ;(GV܆2sb<9 M!пPKDF `kt bootstrap.jsUT Dd+UDd+Uux V[O6~WyIIҾ T(RFdƻ=es!LAm &| %%O0{d\tIGY.#r@ƪZ* Қ8~jrr{f{SBLyqrR` s2iq ?Y)%rYujcjc:h!ƽD5Å,_QM*sI$cPR'}/ݫ,5TIsodAļvMu(B{qF4B10UR`r 4_#,L}>RZLvҧ uyQ\.~LQͦf ,Mj.Ӧ,a ?\i6Q۠āaGs pG:i 0VF2wh3g!,TU!zwwἂd,Kxڴ-i6Rm2av(ٍeOn|i=1sfa Ъ$S¬yRw[_*`WkKA(}pp7DZ;\s̓h{q~ )g=v=FO]^|~@ٙh1źR ͂*5_ @>\7{jMtTp -c^tIwDv=ͯOuEhx#}0V(锑ZhXcas_zԕ's^*w,0n#lz H-ASUSsgg)(@$$mO73PIsPK FFcontent/UT \h+Uh+Uux PK GEcontent/modules/UT 9TYA*Uux PKGE[G, content/modules/blip.jsmUT 9TYA*Uux V[s6~B.N(s7ICH3G/dweJ ͩo (\赅໺wٸgF[nnFxxȟ4%(' ͘3 C4ZJGrke x J[iH"/(ț\~qgv8$ !1-.2): ;zj >=bxoMp 뛗Dx p`M6Xn[W3(eyb̈H';sdz;OfY}6I6 4aM%`ye;+:D'$-I%e^aCЕ%L. 0;rN[Qڽiw>[~ 2-pP %k&qPx4*G?6'yIL B gC(QJ*[OHNuO%#*f7},1`3f} UfM|,*M8j0&}u$L"vky)s f^;Q= `ӏ稇 i[m.쾄 >^+VtbՖA>G25' L阧z6 .>?gߜEcC[=*CvnUI*'Ōʝ3'u9/m*QkH|;Zo7:Q;ftTbeNlldGZsLmm(D<^l~(<=CELdO\f̭bn[:8ӟ>U0QmF ӱ0d;VP;Y';4|4$%~Q`aIh-lȰI4J F8hUX*$#%Y}@H%JPSML \D]# o'WQ:p Ͱ̵d)~ ]7ZYUN?[PKGE+S+content/modules/dailymotion.jsmUT 9TYA*Uux T]o0}_塆uJKvꒈR(B8(ߵa~Hq'9ڑݠ`NɽG. HGYjY 8ES/uR@yQ̀~j{/rr'bz{4g)'QJs{ n+}p<< ]2 pNkt[ W(j*5]B 9EfK+Nڳ&X)q,qxmsUf}co @iR9Х4Sul>uNs[, HaSJMtaS3ア&{{? 'euԹtjn`F)tǃڸ˓>n<ɲ)+Q;uXێ,#c QxNIi^y<֑..:UF_nPt [,tKе(fy^8WQC$Flu8Jlo@=XqC:Xv( EȕVzh:- [g:vO{$\o&<7yX$>"%FWMY|RҖVPKGE Dcontent/modules/HTML5.jsmUT 9TYA*Uux RMo0=_1Qr%"MUB !Q@SZsb=7f>yp~)VcFB[x2GVh۶ROclmPT yt]eJ0%Bu  #-FCo;}3jw`j )mVpSInJK w}Y~ ϻUzV/qBfodC_K8Dqn.$0=B `0 u7q>)Դh$^gum8Y$K_vq8pKϛU2H&^w 0Q (K} Dߙ\3D]nNJZ/jyGdN-[Uk$}Q>>_z>rk>Q+AI9*1R_읗?PKGE#content/modules/ScreenWaveMedia.jsmUT 9TYA*Uux U]o0}N~ˋAHU}lR?2VO|6I*}6|`{Ϲ؇%fF'85^\jDc^fyf+ ⭥O3a,iDrL@yg[Vg\QLLI&:} ܧѩiw~/;o^CB~_!#$[%IIDiG}x7ymzswxA5X".ɑX"jJP,U#\F4G=%J>O>b3f[&/dq~<9)rWT7BRv5 xƓd-Ļufz=#^^`H >< K.L~Rhv#"'a.%A$&0>WNC2&WxjvXX)Ri $ӒC)k@+7AGue13Ih8!Y "N`5*U͉h-*j+ WJ Bɨf%*vjYҨm8Sp_RL. Ǐ Bz~5TS3Y)(ޑJևs+X -/ mĦ\NdL3Tpm2Gx GɔsCm4cQ698'{^VCio[ُ2@"e؁Yj5 2mq2a=|-ià I!ʄ(9V0ΤzOVuy&q>?,[[wZO٢Kh RTy*ްjϙ^ݣ?2U$u׷vv4Ρm!J8GOToLob6%w<-SA~G 1Cq$q~h`Cͷou MTiѬx6m"B}nJ+EOϪ5f$Z:dهqZ/ 6G Gn7KL_J!ـb q~`Y`ړSE!9*y +Ep`x5M sPb"DI[2И[nD"vƖ, yC>&5ĕ1ng|-o~_.cnvA/ZUIі縒q'@o|ug~R|RZv݃$(r6/+TtUz^h\*/J^KZK*WJ\Ȅ?MF-w;&\&0|6r7|ܖ?lk*P+qpiwPKGE6^content/modules/FC2.jsmUT 9TYA*Uux Uo6~ {RRs`bְ"mDI\$eG (RlIwxiO8* 1z#n&= iD'(2()]XFbn~2q*,^ L`CFd*`. T"P~Fd9;Y[p<ۆëܰ;R}TP!^,"yIe{J_- upUb,(Lq,,-o&~B`qNd)iN94D5u 9,{A$VP@Z[{bmb ѽu• ZvnlEjV|RpX4?wƹoD07UDm]CR [4>znB_@cDkdPyhɁTGJkVYk;) U!S)-lQ]SUVP8$tXggIp^V-Ll\eUL&(,(0 _nKkCt n(t/W*+7=4)vp+ew}b8ƃL ^!r F`4[{`v \Կ+ɠ(9=0\(*"s"1[S8kN2i9zн*{ KotO ffu*M\M<X@TTtVu\L 86UƽSV"LjIH?f#GDό,T$eh*#&(ݫ5vD;HI3FNBz(ǫOPKGEJGXcontent/modules/Makefile.inUT 9TYA*Uux SVHU(/-JN-VH/R(sSJsR2sR x*+[̜Ģ &YUPKGE(Jcontent/modules/niconico.jsmUT 9TYA*Uux uUn8=[_^Hmwm"1-6UȿwHJi}ș7o#7ܲ 7ZdBFTIcQ(GS1i Z-ֵ2~p<E U*YB& `2- Mĥ e&X-012›#\(00YSri(ިƒ];w0Z;7r:B|ufufԑ0 *Bz>~LƵX'شF8ѣX=GH|GKTժxvҸn:x b%"{w"%:i3} %b[@YJ*7ց0ŝ\9g Wh)57l :S}.U8b~zLyr'Jxx3R2KݺY4K%mJͅTFDŽ^ưXX?W̜琜TK pb/x޿g;KiB>BA %pq?4Yc1.0u׊^ã>䥅VA`)ilm:))J˟+j: aS(7{( @YgǕ%Z`ަ 'yal9/!A^q7)H BY/q4Vܭ}[Jk{xŗ輥sͅ!4l`Z$${&LUeK%ZT~&X4Sg\<6zc|Zj~QI@!/ V+E-PYEܹsZǀQ'eUF!:Z1+l$Xp'Gns$^Lzӫ!qrsoȄxY7k݃jn< ]KQ:Be`AnTF߶9d5kg 5k#WB"$[R8+gQD?--ts\R_bp, 6v8hWqn*hэ6Gna\3xȶ[֝]i5[d;*W .?ScGEB?. ;.uϗzӱz`B|SFBWe [ܶC}<؝2tP>*XǍcBcՍCZe(j1Љ8n7VŦ94QomiC\iKH]S||-%+ӧ!.jk&-O[sc'"I>AOC>RhLi vT!JFm:u? }C)RnA?c<ȲKQmeOЯ ņWZI>+zJ>a6,G:XI- Y=Odͷ$Zm` '?@C4#;HC OrU8–ZG.o,y"#q0p=AmM($h+iYt4_lnJ!c}23(qG;4ꬓhwj~Ѷd䎭-^TO9>O޾HI&79GB0'h݆Nۈg9PKGEmcontent/utils.jsUT 9TYA*Uux TMo0 =ǿaTitX}zYS`@)4Y>JSga:ĎH>H)aOI|H*WX |"Zßjm b*Ⱥ,}RXlWo%x^<Oja?v&͇I/i$h8C,iBjA fre=q?={]@G$Db3)|yEV: 1[A棊U-X=5:w]",'*Oլ 9!|r8MOg1;1y/!>hT"У="(q+XP9vяno)|nGɳ~ O](#ݮvPa&qEM)ʋ"eK[rIwX3*i o6'PKFp-Y content/prefs.xulUT ת&Uת&Uux VK >7q٭*累S{b``I}d7J͉ CQ0)>bKcL `QaEe_ RN̞ =*Xc K cbCD){5z{t߃ zsYZb}5/fRWddž T@ACL&?f܅** xͦr8_㟣e ^.(catC,|،u/iyP uǀVJɥo+b iDSS'jy-uZ.JĒ*Q(_jxjC5]o+jE^tE ~+BaQJIrwvtr@M<(zSdUWrN0M5X'^ N8bR xknj?FbW-jv #רB U)fذsέRrJfu!1ɕTʣc&m u>EcNҎE[Nxm&YA1Ms/k')MTMrqus/%u嵧0)#?N܍eQqM7^8?KbvG6g"E8gt0Lܛ}PK bFx content/vwof.jsUT xQ&U*Uux Vێ6}C,:RR@aǽd[dӠN0hibW]5!) )ù33qvÐg˕'wYVq]1Y2SAwZ V*a ȢA'U70YDZl1 .F!ھ_>|KUV mX'F3:Njd;_Da.$ *BI699'᠔*F5L^Mś@85T\^&[;د0Wb9:QLPPp VɌ S,3+ۘ.{CysP;NuXUJ˼]1w/߿>J0iWPh?x!T4 B 4(0 [L6t %&kf+̃N[#j +GlUNUp)Jox @e^sA/6_Q<6 <}hrނF@4F_B oo ]p>xWkt"p4^U\ѥ8zX:د>:Py2 9Ͱ8\Q?@a>Emmmg$|HfɊ"T (3"b>!Q-LJ^k|dϪ$;fӯ}D@릔'N8OZvtxz)q;,NېsXia 8ڣCb0>7xP%w{xN{a*wkaO 5 6r34o`io[ѕ/X~v2i%vf3@Zch:7L4KNlP|)+:iQ@51pejFu÷ϡMo"ÌNRaOW]_dِOٴco#~ #dm'zـ>3Qj@btM!H~:eAf|;GhAA)ɣA;0Z[ьe#-y,(cdY\ÚIaR'[qkȰ&ݛة>irX+w IӪ&H4keh~Nv>bۢ J1 F!^g[=ҿ?V82W]a|vkNnOr'I[PcP bj=\>۫JE?Rq"iXP/PKFF}content/player.jsUT g+Ug+Uux Y[6~ x"ONM-E2D[Dd+L )Q{&X|2SX'U;JūW?Y&lĞ)}*T+eEV+jC*=Tiëŕ㲢CZ]1]3f_&G؃V\(dGx]4[^M&1ZVő}ګZDV=EjYZHG[q2IӼvv8.=:^\YL*zW}*b-VT&N*IGJ&U-i*,jjm.[ mE++O"JX4[]OYo|JU9jX2'' ڀG$onVFKxBN5u|why׻YWxbWqmMă :?4W1K/L]Ȏ~Mȏ:}oTz[777|3Li0 ׼T:=߽;L{P0"MZ~Ώ=BsDGU FQ&@458[)i.n-'+|I^妺 s0. i XA&7>(&ey3+ryTBBX=1@%?/u)uAn *m!u} h[W2{Mkq4sPCDV Q=Bon`F|4"_Uɾ܎YptszrTNZB&wO. \eL=n7lPTTXznz z@#LT79 \`y&.sekń>)TDo-ۤOCCW7"h7-y>o'iG1AN"cWŀqg98SQfGUR\o{*Vof]t]xXzGq[ yhkݍkvݎIzGkcǞ8]+G!I oX= &V{!س'j$Ʒ 09FM껛׹x_|5š[alPYqK)h{Ă-'TQAQa$ː [ۿ&WDn[4>55ߕH>poCvtnMwqƁ+H ض~N(>Eܙ61 1,eUEQIa Y l꣰3A_~O NN\S 3/\ne\sԂM5ٰ:IAԇvHEbH|>Q`CvhOhN4L`s\@OQ ܾO>j^7NQdb qύVǦ5.4[PofPWe?/pr29q!:w2Klniv_ qԳPz)0}Irs͇/v*PkWa[_5>V'T;"Ũt<+kPK?FzSo-ixpH.{?{GpZXV+{˞`?cjsFs`]݅ݧ4B|W7\(S̓bcBVtv#4e;ql;e ) N࠵-- OU颐IUo8aLZ>`t<4L[ξIٲf7b MsYx ~J4AKzGm<ن%A+ɥ}dwŰ&V1ђn+9,S` dK>%&|I m c ,DS@I ! <_Δ_"`Ng^]x]/WA@J-E0lNd{4:иPKGEVcontent/prefs.jsUT 9TYA*Uux ]o0+^5RI@%B@W"MݴvAIk)#?aaL૓ -$aAN+t1-Z+|8!uw"j?'aڷƦ볃7L^ NQCUNj|^=H9;`n,tfVl :_7`/҃ř/hCNNߦ!dXR:P(*@ēWMTa98ʉdߍCtXGq #s0n??L{i,QD0vwh  -tKAGR A**8E6-npu>nalM lFI$X%V/\-d9WrIm@d)Z}>n%Qsʕ&pZ]1zisn YzNlB:E;skRZR25-_Rܽ) |,C4i,G sRÐ ܤ^@J!QAUȋ1:㷡ϞL=S]ݵ0*霃T%Fe-%Z KP΋̞+ m.T}_.` L4F}2~~@w)Hs *gFJ4wJ8x=G[t+A)̏G{ݹΨ!/ d-0˘W Tl[7*W5a- evme5;v׻ػ{`Lu74McWBK!46oЀɒ]u:_e .$r]z2b{!>u~vQM9^lYMc^y>HT=Ѭ'7\rvKP ()ΓIgp`6M&;͏6U<+(x!lwt|ۮU-$V,)7CHI L$9S i <=GEhzPK Flocale/UT x'UYA*Uux PK GF locale/en-US/UT h+U&i+Uux PKGETkDMlocale/en-US/strings.propertiesUT 9T'Uux  LIILJͱ-+O  d؆'$g(Ċ3K2KKr3 ssRS+mùPK HF[n*88locale/en-US/strings.dtdUT W'UW'Uux  PK hFskin/UT (U*Uux PKGE)-Qskin/video-icon.pngUT 9TYA*Uux mW 8kpK:qYvPF}K:%Q5:I0dKْ}{~;3alx| A[`]mSavp? VXxe_30p0 EQA`&8aBA0}q aA L͞a8b0^QG Q0G10a܁L1C 1&(!0 2D1&`f_q7n0! /['gc21G1 l8``8&0;wGq PE(Gp PaLs?)?@r?%oi9w#(#(F5!Aq>@!2Ou19BO!!0˙C(!(s@05ZIrgШ̃45N9˾:rJD"Ip5nCswjSL!TWoUKS]1Pmx-՚A PD=eƽ8}U;KeoA^?kz$ʨ|oݷuttj^S"4Y%ȅ',ۈjxp ?*Ԝ={䨡!; U{]7B__߁|ܩW4—"e3b:V[[[ZOgsĚܾ}d,wCA(˽[)}O%{dI^H&o?][ѥ9mywIJ[zB9ǺcZbp!wfg*P||k=G;go /e$czߗIxP4BhwwMM_TݛXl%9,'GSfsܜPSJ;gKY$sss7>̂G&X*DjÌ=˺ /u֓W|-̴LR8H.%ef 7;eu;@oVP^7}A~VTT/ϩ({1rz*IHH(+/s!/ Z`ԝu!EM/VgOշ, SH=@.L:+t~לX͏[Z~fڈ5:޾}ۜd_?4uY8E:XEh"UZ[sv~MrekS~uÐ7uuӵ;w]r4OϿܒ".{árQ]ɔ*BSW, -N9'%O P˛L4'yyjc++As'eGؖfymd] Z׹[{n1(=:[#:mmWƨ^󋋅/WFBzC-F "Hpz@f+*AUhhlFteUȫ9nd1gWfyNؾTwp ޏ1Y iM 1*򦧖Z⪵i(XS /'#Ԟ,*razUdw_P  dBmhoԹn 1%ee/UoΜabIv>&|:VEX*4L,-+*X~uR< l޼;A"&`t%tDxDSb̦ ]RLhtIjjl/]jj|F5H*)EdIG/^8Dvj \DTvG.!7ᅮ@퟾qҔ`kLdS;-ɪʾjZ0UeCt[[Tx9''o(eWAǏG'V^ #>6..opL]XoRpvvP ;F >N,ִ%~vx dP8?G87% LJ4Qs{v뱱Nzugyk ?tu郈3561HW*^iN3kdiO@z{{C}#C dP]$ͱ1KCM;;qgݥu߱Iq>.;Q.wC/hxol}||@׏HcTlRq+++TUUզo;圍-,.^ b/>5>jjffe>?=K&ډ-j8 'N*Nb '𒴉R`Y'ׯ| CPglY_?T|%, ^׵nogk͔*--qnz٫\tC==d?)rEѳI?[3%rso zЋ@7OulNS֦ru5*jz;ma .LWOOto{' m3/zss%Aa1*>%67ߑ&$9Kշ| tiC&kEED:@'2Z ]Z#6?M/z*m  =+.WOr|0,E@[\MFʀR g^aϞ꺠Hw MRơҽ'힟ߴT<-re|:^sd#ջdmwq@W_eRRR@=A|d$ק|[KU$PeEբ@9G8Jl5JWOhDeeG`^L@HWVqu떍< kJ`6::sxꕗ+At!?|WOb+XO{D3;^z6s%ĀRJabBg2C FԔ ^!.)yA57UǁFR112/9x{; :93 cx|v{)kCN{w8>:w+*V$-Dzوf>p8nuH!z`ׯE8T|:&@0}j?[^=K ӻ*M:d@kh242n€˕Awcp,\Zxike|ee%6(+DGsPbAJ]KJI_΍j]h[-W"9nYy\, Xظgn oٲEʶ}]LÇBVn2-_{q~/Vq?<gff@?TjHM ݁6ȳ_uR+װXX#Veow+Q 1Χ8\PKhF~skin/player.cssUT (U*Uux T]0}Wʅ]B>K2æi[ߨޅ8sΘRQ+JnsWM Z$͍T`"ܢgIJbY58&cBY:kşwŖ&sP?DgF,:1I`s癢si\5a:b_!j!;K+;Rs% E9(rWGI.l*r*{4=A,BIų' I ڲu5Ԡ@p{n)3xI:]zOixvL_=!u~ gqX ՕZH%Ɠ7قdU֏wSk4Ccr`,x2'9)Q}TxXncx|t}ۯi?<@]r6=Է 9apeh@qha#PKZFP.content/prefs_modules_list.xulUT 'UYA*Uux }Pr  } i3Bt)=X:Kļ;)_lG"Tn{e7HhWMC״}AZ,@lJpVRp.hI[%gDP`&#V~B!33(~QaS<*>Ţs.|kiXF$GMpJ$Evbj"Gk™'?ݺ*zU_;BQeSkn#w?7]lH]|}2~K!ߑ5HlۗҼk~PKFlcontent/options.xulUT @(UYA*Uux UMs0=_!|p2=@u`Qu*v¯Grlv\3ݷIApTLMt_Fb~_7H)#\-Qb\V*\eV|SG^nnsë8'2;GAw#K1 !;6Q3Gs̺TP`:@)l«o-S1@u2LKwBBBmEH^cByO@6U>5'֡!]J;_Elmը|҂қ& 6;6M~8݇O0٠Am:v!JRyl"u|%""I*mnXyNmA=X\ ;9*Ǫ OPK GF locale/fr-FR/UT h+U&i+Uux PKChF>zeSlocale/fr-FR/options.dtdUT .(U*Uux Sn0C.{)*"@Bpdג3z6\~1Nl ʁC؞<~wpIYEBE 2ͻWחzlGHI;hޚ<οk' <ӿFu6`Hk-`p>0^HQ ɠw77 oyZ(Ȍ<<%BCo-T4ΒzЁlfJR,`6ZtWl`bm1X⨝ O.ʹљ!mI&,҇Dtctzs`9 <CA4F>Vxhj|;Rw:Rٜ܌!VVV-T -r"GCׄgbeitbǴpL %< qpsĀ2K,28SdϠKRNګ{% .ɊV'si3$y1cK F ]]AO!˄.y0DWHhj-*& ZѓǬKȯu)o`։]&y3#Er Oօp2P'PK:/Fm_content/player.xulUT (U(Uux ).)KO*KI-N-QLU*+O/IL-GWRPA«^I(V)9(?7J_N?'?91'U\( $h>sPK eVFo!!locale/en-US/player.propertiesUT ~(UYA*Uux newtab=Open the link in a new tabPK .FvH++locale/fr-FR/player.propertiesUT (UYA*Uux newtab=Ouvrir le lien dans un nouvel ongletPK 9eF! locale/jp-JP/player.propertiesUT m(U*Uux newtab=新しいタブで開く PKGF}ѥ locale/en-US/listener.propertiesUT h+U&i+Uux KI-IM.)LIͷu@bPKGFd locale/fr-FR/listener.propertiesUT h+U&i+Uux KI-IM.)LIͷuS@bPK OGF locale/jp-JP/listener.propertiesUT i+U&i+Uux detectvideo=ビデオ探す PKh"Fޝ README.mdUTTux PKDF `kt bootstrap.jsUTDd+Uux PK5F.g chrome.manifestUT'Uux PK FFAf content/UT\h+Uux PK GEA content/modules/UT9Tux PKGE[G,  content/modules/blip.jsmUT9Tux PKGE+S+content/modules/dailymotion.jsmUT9Tux PKGE Dcontent/modules/HTML5.jsmUT9Tux PKGE#9content/modules/ScreenWaveMedia.jsmUT9Tux PKGEn&R4gcontent/modules/youtube.jsmUT9Tux PKGE6^ content/modules/FC2.jsmUT9Tux PKGEJGXW$content/modules/Makefile.inUT9Tux PKGE(J$content/modules/niconico.jsmUT9Tux PK`F:U{(content/list_modules.jsUTS&Uux PKFF.T9+content/listener.jsUT\h+Uux PKGEm0content/utils.jsUT9Tux PKFp-Y 4content/prefs.xulUTת&Uux PK bFx  7content/vwof.jsUTxQ&Uux PKFF}+<content/player.jsUTg+Uux PKGEVEEcontent/prefs.jsUT9Tux PKEFxV |Ginstall.rdfUTf+Uux PK FAJlocale/UTx'Uux PK GF AJlocale/en-US/UTh+Uux PKGETkDM.Klocale/en-US/strings.propertiesUT9Tux PK HF[n*88Klocale/en-US/strings.dtdUTW'Uux PK hFAULskin/UT(Uux PKGE)-QLskin/video-icon.pngUT9Tux PKhF~2\skin/player.cssUT(Uux PKZFP.F^content/prefs_modules_list.xulUT'Uux PKFl_content/options.xulUT@(Uux PKX+Fߋn]blocale/en-US/options.dtdUTx(Uux PK GF A:dlocale/fr-FR/UTh+Uux PKChF>zeSdlocale/fr-FR/options.dtdUT.(Uux PK OGF Aflocale/jp-JP/UTi+Uux PK`FEuV]flocale/jp-JP/options.dtdUT(Uux PK:/Fm_9icontent/player.xulUT(Uux PK eVFo!!ilocale/en-US/player.propertiesUT~(Uux PK .FvH++]jlocale/fr-FR/player.propertiesUT(Uux PK 9eF! jlocale/jp-JP/player.propertiesUTm(Uux PKGF}ѥ Xklocale/en-US/listener.propertiesUTh+Uux PKGFd klocale/fr-FR/listener.propertiesUTh+Uux PK OGF 8llocale/jp-JP/listener.propertiesUTi+Uux PK**lvideo-without-flash-restartless-3.1.1/chrome.manifest000077500000000000000000000002561251266504400230070ustar00rootroot00000000000000content vwof content/ contentaccessible=yes locale vwof en-US locale/en-US/ locale vwof fr-FR locale/fr-FR/ locale vwof jp-JP locale/jp-JP/ skin vwof classic/1.0 skin/ video-without-flash-restartless-3.1.1/configure000077500000000000000000000113641251266504400217100ustar00rootroot00000000000000#!/bin/bash files='find . -type f -not \( -path "*$0*" -o -path "*git*" -o -path "*skin*" -o -path "*.md*" -o -ipath "*make*" \)' function replace { fieldName=$1 oldValue=$2 newValue=$3 verbose=$4 forced=$5 if [[ $forced -ne 1 ]]; then if [[ $oldValue == $newValue ]]; then echo "The add-on already uses this $fieldName." exit 1 fi if [ -z "`eval $files | xargs egrep $oldValue -l`" ]; then echo "ERROR: The addon's $fieldName was already customized." echo "Please clone the repository again to create a new add-on." exit 1 fi fi if [[ $verbose -ne 1 ]]; then read -p "This add-on's $fieldName will be changed. Continue? (y/n)? " else read -p "This add-on's $fieldName will be changed from '$oldValue' to '$newValue'. Continue? (y/n)? " fi if [[ $REPLY == "y" ]]; then if [[ "`uname`" == "Linux" ]]; then eval $files -print0 | xargs -0 sed -i 's/'"$oldValue"'/'"$newValue"'/g' elif [[ "`uname`" == "Darwin" ]]; then eval $files -print0 | xargs -0 sed -i '' 's/'"$oldValue"'/'"$newValue"'/g' else echo "ERROR: Your operating system is not supported yet." exit 1 fi printf "Done." if [ $verbose == "1" ]; then echo " Modified files:" eval $files | xargs egrep $newValue -l printf "\n" else printf "\n\n" fi else echo "WARNING: No changes were made to the addon's $fieldName." exit 1 fi } function proxy { profileName=$1 addonDir=$2 addonId=`sed -n 's/\(.*\)@mozilla.com<\/em:id>/\1/p' install.rdf | head -n 1 | tr -d ' '` forced=$3 if [[ "`uname`" == "Linux" ]]; then profile="~/.mozilla/firefox/*$profileName" elif [[ "`uname`" == "Darwin" ]]; then profile="~/Library/Application\ Support/Firefox/Profiles/*$profileName" else echo "ERROR: Your operating system is not supported yet." echo "Please refer to the readme for manually creating an extension proxy file." exit 1 fi if [[ $forced -ne 1 ]]; then read -p "This '$addonId' extension will be linked with the '$profileName' profile. Continue? (y/n)? " if [[ $REPLY != "y" ]]; then exit 1 fi fi if [[ -n "`eval cd $profile 2>&1`" ]]; then echo "ERROR: The specified profile does not seem to exist at $profile" echo "Please refer to the readme for manually creating an extension proxy file." exit 1 fi eval cd $profile mkdir extensions &> /dev/null touch extensions/$addonId@mozilla.com echo $addonDir > extensions/$addonId@mozilla.com echo "Done." printf "\n" echo "This add-on will be installed in the '$profileName' profile next time you open Firefox." echo "Tip: whenever you change something, go to about:addons in Firefox and re-enable the add-on to quickly update it." } if [[ $# -eq 0 ]]; then echo "Customize this add-on template:" echo " -i Specify the id, used to identify resources and files in this bundle" echo " -n Specify the name, displayed in the Toolbox and various Firefox menus" echo " -v Specify the version, useful for tracking bugs" echo " -d Specify the description, shown on addons.mozilla.org" echo " -a Specify the author, shown on addons.mozilla.org" echo " -h Specify the add-on's support homepage url" echo " -P Create an extension proxy file for this add-on, for the specified profile" exit 1 fi while getopts "i:n:v:d:a:h:P:" opt; do case $opt in i) replace "id" "my-addon" $OPTARG 1 ;; n) replace "name" "MyAddon" $OPTARG 1 ;; v) regex="\(\).*\(<\/em:version>\)" replace "version" $regex '\1'"$OPTARG"'\2' 0 1 ;; d) regex="\(\).*\(<\/em:description>\)" replace "description" $regex '\1'"$OPTARG"'\2' 0 1 ;; a) regex="\(\).*\(<\/em:creator>\)" replace "author" $regex '\1'"$OPTARG"'\2' 0 1 ;; h) regex="\(\).*\(<\/em:homepageURL>\)" replace "homepage" $regex '\1'"$OPTARG"'\2' 0 1 ;; P) INSTALL_PROFILE=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done if [[ $INSTALL_PROFILE ]]; then proxy $INSTALL_PROFILE `pwd` else read -p "WARNING: No user profile specified. Do you want this add-on to be installed next time you open Firefox? (y/n) " if [[ $REPLY == "y" ]]; then proxy "default" `pwd` 1 else echo "WARNING: This add-on won't be automatically installed next time you open Firefox." echo "For a faster development process, please refer to the readme for creating an extension proxy file." fi fi video-without-flash-restartless-3.1.1/content/000077500000000000000000000000001251266504400214465ustar00rootroot00000000000000video-without-flash-restartless-3.1.1/content/list_modules.js000066400000000000000000000035731251266504400245170ustar00rootroot00000000000000var prefPane = document.getElementById('vwof_pref_modules'); var s_modules = document.getElementById('extensions.vwof.modules').value; modules = JSON.parse(s_modules); var element_label = document.createElement('label'); element_label.setAttribute('value', 'Module activation'); prefPane.appendChild(element_label); let element_grid = document.createElement('grid'); var element_columns = document.createElement('columns'); var element_column_site = document.createElement('column'); var element_column_embed = document.createElement('column'); var element_rows = document.createElement('rows'); element_columns.appendChild(element_column_site); element_columns.appendChild(element_column_embed); element_grid.appendChild(element_columns); element_grid.appendChild(element_rows); for(var i=0;i