From b296504df7bb6c6cae57837016b8c12f3f4e04df Mon Sep 17 00:00:00 2001 From: Vignesh Joglekar Date: Fri, 10 May 2019 00:21:43 -0500 Subject: [PATCH] Version 0.0.2 --- .gitignore | 2 + src/images/logo.png | Bin 0 -> 2677 bytes src/images/logo_header.png | Bin 0 -> 26255 bytes src/manifest.json | 18 +++ src/popup.html | 35 +++++ src/scripts/makeRequest.js | 131 ++++++++++++++++++ src/styles/lighthouse.css | 267 +++++++++++++++++++++++++++++++++++++ 7 files changed, 453 insertions(+) create mode 100644 .gitignore create mode 100644 src/images/logo.png create mode 100644 src/images/logo_header.png create mode 100644 src/manifest.json create mode 100644 src/popup.html create mode 100644 src/scripts/makeRequest.js create mode 100644 src/styles/lighthouse.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..51781cf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +src/*.zip +*.zip \ No newline at end of file diff --git a/src/images/logo.png b/src/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e164cdf32098faca82e33e1ae884cac634fd60 GIT binary patch literal 2677 zcmV-*3X1iKP)C0008|P)t-sFi-xj zz4gk~^25*aXMOl2P5-*V>&eaO#mec;(dl%F_B~qtzs2jv%jt)e@x;mM#LVqdYx=^_ z^vT8Fy3yzI@Apw7S3(9PnPgv;r6 zWid_vGD-g|N&ob8L)m^t#)L<&j7XW3N`{(CEmrg?VdExh*&cnq8-=qKlb;Wwi4LiM zDYsP~zET#!QVhgW0>)MV%2NQ%R1=z%7mlVNc*QGQ>>_f^2()hny<-5&PXNzK0LoDS z$Ws8&NdV1F1HxPju6O{HJ5TWXl};^9|0z!Ylum@_Q7zU>FaP^)f`qxe zPgwu+cx_O(|C~)jUiI}|By@$*Rcz+3PiX2)8{$kT@aKWu*o<6q;eU?GA4vcI-C0d$ z>oZUL^;97G?s-v3&(_kAhLgqR-G~3zQ1@*z)Uv!ON&jR{y>(8g|L=1D-9^a9nvon>|Jzaj<3}}G|Nr=U z{lHWEpi}&`L*{rz=0_NMip_0V#_qmp(9M*4P^kW`=Ewj52R2DWK~#8N?3Pt?<4O=l z{f|eCW@cuFFf(VFnVFd{GF07>v{q&#yRup*^27SPtLAinqv(l%K)BR!&TCx$_5=?Q0hv@DH|+d4K>&>aXRaA!fIWATKr7(( z6h&h~z-tK}6;Mf?G$sUZg#;Z1%uW-gUm&aZ8|r+4=-dI0JC)Nf;LG|00ss2fd*C&a z*K|N3wfPMhEdP7v^yH@9_S^f~fxv>wl`Ny0XhhtbN8r=p=ROEHNUO$>qvEF4RJbx;19&<76)hmGZ zdp-(_{%ZnmX6QnM2>ek$isG`d@?Pd{o7p_zsM43U2P;1xSK;q`||r zfdbe83ShI2xFddl?a3}aDy)54aGaXO{wKzMmePizFn}Wgxe?KLu@OPN3Ax^Yk_swR zt!S-npC`_+>%KC>o~(TWx8)hs8GVMXd<9pvp~pXvusetE1H8T?tEc|n+%dUy~VHL7x!)N^4wsr$(&vG@d5V#-dWGRgYy8G z#Rmj!`%Ui{1OQoVfd8xHN+m4kci6j8!2DGY8;~ejLONwlV-d+M-k}4oD=zdd0$|_+ zettcN-bDa1OXz^x8J)3sz#8^Q)4x2+OaSQUfF6u=(a}@rFOZ#|E}(Y@D zVDN9>2lyjhF82J%P91hKS^x|dbx|x``=l!&#MI8iy~M5DV*_BM8{H{oxRE0idvVvcU_$)ba(` zDJcQXA;9Fr-i^k^9_o4_Kr^9tV}Ju}Kud?-O=YO_{Z^7yJxeI^oeTh{H4g^*X#hG8 zKZMwdjoiW;>i!l(cUcX>Kp2MEm)<9~fc%Eq5}|}-CK+%Y?#*Rz;|_W&a6EcEJ!-A} zc{cF9GmKB}UTzk<-O~4iAPnz6gkcy2zQ5cpUT>fIgt5~t&(lK`Cux?8V)d}zlu|zK zky36p>(xqBb+%2KXf9^|znVp{8i!k58knG**?n>}h5~t^cG-9t)AcQQ3+ti4Kk!Ya^BS9XT*)Pe7sp zKs`nbzc-APaV9jm>F!gSBid>k{nWsw^}Yl!(w+knfEM32aNeXv=?LvP830`=Z$E+a zq|yLr&(8q0S;P64c~2GSjJ*&f*X8kN0%zNv0PQ6iXRG%F&Q(t&?WN(E&~WDQSPr_Y literal 0 HcmV?d00001 diff --git a/src/images/logo_header.png b/src/images/logo_header.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed9e927a1a5b05f070bf9c24a1a3916fb7312f2 GIT binary patch literal 26255 zcmeEt^;6ql&~9)GRxC)7&|-z+?(R~cxCNKu?otSpqQ$j16!+p5+}&DSTcEhx4c~k3 z|M33sW`-FiSvhAvyU%%cPx3`gMHU;A3=;qVV9U!%sRICru$Mn{RQNk5QP>gyfTfna zl(?oB!eKW8HvG*V>igox0W=`|-~WC6kBdOg`r(SF-^|DR=hOUar@(M>DJOpv0gcE_ zi32T#b9udCLS(5TL=FMKTjgO&95uZw8K>GLmQADIXJ(QajpenudMzIEwb zTb!$bLW;@nwl==Pl3e%01RWR}W__CYYCL{{?Xqaz&M$u_)VF&cZLCG~NSu12&Q|uN-Z>>}A^_ldk{bZ94xDI^{^Fkf zzV^5M-pNW=u5aX2(xIJt!dz4N<0-d6*eUn56ZM3!Y2~dDhBFa?9s+<`E(HL{=~Wj@ z&cE{aNR9s~#C{ltbjq!W%hPUm8hq1Ao2n)V0DOOz5HP)GT{ep?LiBw@WWFkmVpe5_ z2mnazNx4*HD84#q8)MHH8T8BsT`hIrq~GK8t&u(D;5~Y8aPRi0sxWUj@v32Y8sYJW%`}khZ>`YSmSk45z2mq8`P?ILnMCz3@AOYGQ zy13tdX%M{(Egd)2`9{C;+SX-3UkRB2&_zTg=G}NNK~RBi0SGcn_I(P6xe3$09;im6 zIv4u(#RLJ+w28#9wtD8r5Mp%!p7~4KK1lT;!Nq=oV}k_{v^ahd3*wxM;?Yn-;%x6t z(XXv!$1K!Ms@QTZkEMu**d~IKZ;)F_m5`ADT^7d${*4D^O`nlXq?eEYZk7V=#`=gVd@Zx=udQr*nss~Pxat- zdjL8jpBjme`=9IY~`%>Pg*YS-%8NBagzq7&8cR@2{n zo~>qQW>K`R39D=e(D6) zm<%`Kz@HXK#L+RKbIk^zRw4R*|i zuPQlCH2X|+mFNH`)Ym%}_0n$O#0DJdVTGTvjEP-k&@}eQ`?B-0hyor~249=1Ik$KQ zX`rIwE2Gl|SN{mBR_&8}h+I_KD86OOXAA&a<=0g?^Lu*!qtAHB0@)wNJ#_{-^FPh> zMRAB3P&^t|J`LR(QEB-}Lbc!9v={bS^boQ$w_7|h<4ts0q44YFYVuP(S#uZ;AOk=! zX~zP@foB`)L%_S?Al9ENg9zt&20L4+xAW(PJkjzEetKbi(!jlb(RI=k^lHp2!}?7! zVzbajL|qsAenp~Y^*E>obca$(!wOaYZmR(GI(jgbEaGDM2wsZ~{ zy7TYV>F~eFP7lj#2k(f;hcVJl)hY{#48VE_`F5LAiAomStC;z#6?&_H2`Urkka#2R z4`=(Kmm+>W9|aAOo0y=wmvXSUj0t@so~Gt7Exl9IPF45&70n z_}difpFIMcunA0nA6O@`i;&g5{&`N{Cj1&?u+*RSkI?L`zWBDOd33;ZT^v)>ROCdV zzhjL{0LaPphgu|3&%%R;C+8yguKD=jc5V$UBXb^A7#E}Wgv)-IUqz5^x6>dp#xwYF zi-B{_Lc;K6`S9v~#g2+@al)GrrZi=ll4ZrhJ1oc6GDIxPEkVT2Y!$whD4FiNVn%rV z-Q_x=1lhJrY9FBsg*R?yiliF_t{Cp>`_%G@0^t{^n;(~vXimrkiJe(lS#IXemqs-J zL-n6M^CvfM0sx+0QspEZc4%MI zxK){C_fszedaJ)PD_K`vUn^A#nL}YW;&gznXC^}$E1BuS5C8ygcw@+|PCl2CuJ2LU zmGcbeqQURafQdBl*p|$);Ce!p9rH3uIY&PYexjDRg`FK4;`0H}cRIhFe?3dAu-H{+ivi@?UqRCTp_(P$}Ku0E9>)K4~Y+h@j&m1*s*2 z30v+T*aw@VxkU~KLMoPnR-djY`adde_~7fGuOn|lKiC< z0Wg8G{59)M6lQfEgyhw?4FH3+`rh<};HR!n&L0shp;@G-cetp4(6g9h zI=V~JHuv9(N3lo#e1Eu1X(D#@?`WV%1@Y=Ww|i7q{R|f>iAfGth=WL7uEA%ARr|cC zfSmQ8xcw}*+h3{ZEvtl+xFN3}f8B5K#F_P0&8{`3wGYH_Ag3HFh)KC z-~DG7`{(>e03c|y0v2AO&*6Bx{iQ4t5x-04!<8Y@4i}N`0W}oK9NH|J*LW8*VrW6x zIL)F2Lg`wfs{f^>---YL$nr*$HEe!GIiRzwdVkGt3g-}6cf0E93lb|~wGSNHtQL&X zby2y@BWz!a^geO0aqmPlCtE)J=pEX-ZQC%{u$=swER1fjMmX|W$dsUjhX4xTi%IiX z0@srO0BR>AXj`2RHzT68b@SODWDmiKt-4wol{*lkUS^7)tFj3!IFTP!P#)X^Z|BDGl*E!HWit5nznyF_XS#s6lKA;`tW_g|K_$W?0I-t??6j+ z6rAYG@a|8+rBRYJjUU9DGpFkQ>k-c6lxX(bg~o6uQl3q-_Hx2jWy|Z$7sv@+1!O*o z-;%O|+5FIg&}A4zO9?eP-f9(!qx;<%cNyKI%!Ci!w2MuBSN$M)z^IJOng_yzwc(3O zz&rsFCZR5(J6J>m)aA8}SUPVU45q~UkEP$bukLtfuI4obhnc2L3Ix@OGAvAqXW;{a z($-b?n3poM8gTF_a*j4uN$=1u$?A_DuAIVLeEDosz4{NtQq6}noq-Y^4dPv!CuJyq zNU%3%^vS2TSR%L0E{0#5IR`@1OtZR1s~@p1;mJejKq2Tc^}rf9HmtWdEu&*9?Opm- zvX348zWf8i*B)(Ohk_Y>GDAGr_p#B$Yw}>lY+Dj|DW*-5y{u~@J`#X{-kzW@6QlFA zR7~#W88NdQDI0pW?=ka(Pq)H2`}1*yJOXx4$7ikS;O`lO=tXB^u|xc(K3vUGt5$D{ zl`OSAK7r>Y_c@q;EAmqb48r-z+u`&?nnQ>2PONR!OpYV_S8Gf`b4 zCRz1<(0!KCTxLmESYD812u~g3;A9ZLk!Y3hVW^QX;;DV*?G-*G@eB)HMnGTY*`(`5 z7qiYBcV6t&6>waF=d@xyRp^QGyssP6h>JYY@qor{^kAy!qCk#ZEkKBiy(d@!5aKw~GQ?@6V)&t?iaPX|E~==uT#B?arSDxo`W&^6 zosA?Mx$%l}&7F_g(inBoTOu*$5ORcm`J)pAtuI|Z$}XK-GEdAo;`L-=7*DI}!mPEm zs9Y>B%ijcUlDpm2@o0+Nkus6r#I;<;7Ssl8lxi=w<5$$xU+LJ}$kws^neD5UG5mlo znoj5wg~5%m4x%K3iUqHC;o!SenS4sH{KQ!lpzLOXHx38xIgg~LVU(y>r70J_UE8MP*LH5*Br!%*8!LhXX4HPdeZJM-(m^7VZopetSm zZe4@M7cj;M{BcQasO?G3T`n55Jf~VLemVUI>FLs}qoa#9i|(u{?Q(iQx*Fl)lUHC% z0>&1ixXOJ#Ix#xMD9S`??OB}V7B(JiI(q>RhKI)!EZ5E~Q%O>i(73J`vxV zmIc}V{P^iTn#&%VdI>Q>KSD?*sVc4B1D46!@o{_S3n;dr^N9hej#caP`AtEHbb8KJ zn@!ken+l=Pl{l*TDSSazu3f~OXPhKe6oCZEGKL35lgdi_Olbx_0CHbnEb)5_!l1C38LwK7N5E{E?x1nn7}$=62ahHgl)Xr{b-#M!|l_L~&bRA<;R76c87bl5GbUghBXcNRmqavaEnPH1Cj;SArcv?v`HI>W>%ox~m{psf45 ze+$h!JC>LasJ+#RGi242fMOZe)W(Q7-crr=#g zDP5Q$)=S377k~qTx?s2GH?fu~hR%Qu)QAm5zTa5vz`2w`n%}CZ1^+TJ$i*f&5SFQ9 z%~a@-+iruE%<=WpJA5Qkufk`eP^vY8&A<$CCeHZQ7cYASZwWibezN8suTlY7JG57YtK_ zX9`K94nC|S_zlhmA!*bdNwSQ6D!`p!+pR5{8j)6@*`oIZj_u2bl9K>x=ua@z9|=GE z6kU?f%b4krmmtR|6`I0@6ti@3gg8<7)NZ6FdlDH&B+n zr-pXhePD_H$#lpb#E}MYf0bDF%#IPXrmdR6%jm28gUS>Y!0xxN+{@<0(v|^~gb8@X zMps%O&h}Hc$^-hr4_@CW0H$7n+He8?E}2J7$pN-Gaxs6{%sztAmvVfo{7z1Uzto-y zpppS}M7|cA*%I%%ed-V5WK(xsx2cs}1 zQ&8UW4Idam@St!COG(TG!)5uNragnzYje-;nUq1+hQ~g^T54N5(s1mVZ>vYa^ zdcVPQM^AtUaiKpN^D;NC)4V0Y~Xy;t+x<0t_#)rB@ ztZbe+vy(%vcnE5pb0O&`3Y5V^gyA-6bFl*PO)*Ir;KLsyyhY3+wBWSkuX3o z<%=-R{FNLE;wjlLaQ&4p?M91vpsXnx7Wn8{PIe-f9FX`c}qrRtb%Fe+y@9>2mJ2=WUho^>eg{S~*@D2eh5w zN)b{+CD+wd`6+`zJVE=(6g`aSN)_;`X5~bfqcywXmm(>d8e*Y^PGr@LehEVCbwa23 zr(Dndp}%O{43wAA`a?uQr>w&Yu~b$qrk%Y9Yj$_?yIKEe=G`SiFTsm#CsjE52tjG^ z?*RuUo?k$8erO?QN4PW{V#;TMl-H05k0^i`@c8&IY4l_uP?E2Mx!B)^D;Z-gIEO-? z5D_?QI&vpJL$7S`IX?-3{V;kfU|EFaX9YbQJ`B1jsYAt%?hS9OkdH|3sKLP5^`CPy zdsbEz!qFy(6{+7ELdMJYHxo2wGF~W;JK6awB7HmUU(Su9fBpsiGW#JZxOJeV`#lsT z6f{3Gj*piugUhx-4yOViuxLxPll7_@LSzZx>1(j0A;S-)0Thmc&1s z>im$tPoGuGnhjlo;%*FTU)D1LFHzNe>HLsFFhB9q_ERUmB<3p!N_zB0m4NT-9xE-k z!WmBe5+3MCxM(>m zqA+WJH0AaF1^v5VJguT@~&3_DvY0`mH@ z{lv}L7OQhAs`YZHbJ?HSQTXXurI2*x5CNL6iHH%1g7lv7Dv7z9@~xd}u}PvkmHsYv zP5C6Q6in=QGsVmG>0;vlcVAkLhlNG2W2X};6#ih0$TRs1tD_cFCe~Mcg_}Czbpw4q zK_lo0exb3e{2+W}wOaqhNpH^NJ#ekqyKZu`W;act%FKez0^gEN$vOv#rpnn*(tg_B&#Y zYy&eX?Tt2EH3vb-Q`#ao@+-Ygx_@aSAi{O~E>ei7lRx3R>VI>_L4aq6CrAG?3N%jB zhV}u~)?lN;0hm%>RTcYjgE>q=Pc#TLUniB-&lY2D)Enx!euz8l-b=GcokJsZRM!54 zNhx*`Lvc@A`0M$C-RqGGrVb~!TvRZZuwMjq5fH;jhoS)xwAzgf_Mh$x1ze`ai*cmn zcG;b+!lm96Bkw-&1&+*ZM1I1q!c=7&fx|@gxHLTt)Lnq{L4ZIlD{aHD5$)l%_k6!!C8Fcd%|WHuZr z*)i~n+N*&WR=y;x$$n*V6fGO&6C6o!EDj`>(!t#PU{%%=CNcR@=>`*dgHYh)**X-W z6$<%%bD7BhmqelFQB?JW=Z{k&rQ?UnDV-BxsPNV+D#m5fSkOYE!t%rS2TxhJAurY} z6dF^$ukfPWL)=-?c)*tkVjUSvznT+~$`jG{LbGrvptKS6Gv44911c68=9fskbM1Kz z+wSBvT@(WwEocBGR@{6t|I_C`%EEJ1JMs^$u|p0aVQ2negG(?_l(&nwYaN^TTp0oR z{Kd8~zZr6)eJT3}-qdH3%A*UEsGyrsL6BKZn`);WrZ@!VNP4K!e-vmmJ$On1$u%DX ze9*rWeb!YM+;l zM|uA$slMXfGn_=C5>LsamBCKR;In2Wu}iP_la#((JveP2Yu?SU2hP`KMX15O-*D*t zR^4eVmLTt5B8K-Cd_?rxtK5j}pVkxh)$tR_c1uO$C?SZY6RyD?7OT-sNRCY&zc@v* z>a008xtzKM-DW2e(`&x86dvZy3r*uqbl*#Tx!C zf^A8%$qTqNUf5(XN{SK}tj05%i9tj9hZaSt=0_WNv2RA=M}eUGyA-`P=t|g2MC?KT zOnL%yriq5@I$a9U5p^1zx^1Q2hmZ)d8~BeM=TGx0XV2%)Vi)_6IY3{A+}8Q>J6enC_t&8`uku@zN9{35N=;uGH7w z5yN-9d9|~$Z@qO_>0l{T8nIi~tG3VQaMr(sAYN_>@sG&M$TA+|ogr7c!PRV$Q1JzZ z;J)99<<{7nK5MpUkJ9#T8J{YI1P=x;{^UUqir!N4w4f78 zsi`kXM(?!Y-AC#PE_}e3DQRoK90KqN;Dt>09CwDe@mHpFGyXoRk#^s<>QPUh*i zFaptBN+fhJKg^b;cx4fK>LyA=!!xkVEsU7?hMfO3(lePj;65Pm_>nO|i-gt-0S^`d zL8@+H%;OBRO#)3vfLpw@KC|w56-dOxlg_{i30@pea5xy?jV0r^AC9C&Hv+sk)7g%) zmEy(R+@QD#$$U_jbNi-Ur6C?F;mNrn*tCx7V%f$_i=Ol8ev+oHn01X{c>Qrd-<spITEaL5!ubq_Gxxmxd56fWNA6|w+R115*$1~a z++8#3^v|vNwl4Wl>O>39Q{b$3vw3Ng0jFtD`(~k0&4R;6zt%D!(6A%s>kAiMZCyuY zs$Pi#h4x{IJTvNa|C%h#e+d&c6hVS|`7nJH+3PruSG{tJ1v%H*UWdmjzG_NvxBVEu zEeM3#%O=K<`h$dEJqv!>pdt&-n@oK&;Pp=atqAJIdU1|q9rLbV$&xPT@5>dyk{Ld< zU*lzf1t$d>&~+3sAT1Pu>%bg|Q<@#&qiZ}lHajoS`^uAHV(RM|$MQE$+JN()3C0S4 zJqAe^T2je$YFJ1CrXY4;4rCmibEUgCsr&6Qb@3ziYbmO2e)S=nV>y0OjKq{%WLYP^ zonN-EES^7OFbbtTk>)oo_+E=61<59v3OFJ`X^U{~hLUr%T6;-Y5O=?X8; zz9|~^dFxkse@!P=zxlKgobrc^Zv6~?wX?%#G%1S*_NscL=d6rA9!>zDR2ETQdo(EF zPuq&L?gF|0&C=EU!yf~o1DI5jDs}A`p5Y7+m4BX`6+3Zgd`!SFPGg=G@uE@ySpWVD zG+mrnB~y19+9L;)pb10 zusR;CvAcwXEjXGI{6Gy9yJEwn1XwTM62ccSE#qx^vk6!idr3wFl9t1)`WY=OgtGbd z%PfkLJ>34-s1Phbdi#f95Kd6)y9!jKuHzaEH(`RLZX(L{%gR^iMz!#LaVN;~KzBc* z1MKf!=FvHjX`-K@$bheQ0xyD8UF;7f;%1&~{P3x=o3RB3MQd!r%!ltT(BIkSv`y-on3>E9odR^9-*l&Uxpww?RX21S=sj0X4@RnI2!*{ zGDc(+QKM$;cT!gTp^k%$-xh}@`yNL*jV(KIA=AsKi=Olt9<7ZqoMO#$vXLwnby>;+ zZ#$AS|J5qVR6H|$Dq9dJ2vpa8&f`jQGnrV z_TLP*z>1Y>Y19+xAwCsy-IC;M+O9tgVPu>T^Hrgnho;c>Vo`0c+cVet0m`FiA|p24 z{lJ^(>=AT7UhaD&(k_z4^ZYbZ=GDhj`YvA$RX9RX=PHIV8LbtTHID4Jmva`beJH*# zv-MU*Boz8osGrKlRP~Iw?9iH&dG$}*XrtlU>@}mPMy_9Tj~y=kUK|iQQggYy%b zs*dP)0)sd0B{w*}CluZ&wU$(}K(wF+U+F>51nciU2K^36hl{tZ={T4OI;MxW5OJe~ z`$Kh=-GuE?ucP1lp|HHhb!l`B62GQLGguxkD_M_Kqll7fgHX)g;5)XX1T%OqYJFwd zyvL6-_kGc?);tBc!elp9CMSKY4EQ@9ia$h^!^w^rcIzk#0a+WnOo5&}Agn^7MxVX0 zVqf~{=Q_`n4-VvZpaJ)^v^3JT)x@;VcHZ5&eJ0J2-2#eT7ue{K4Qv$t0xDkl$~LeTz}-e>JZrD*Sk$)x;$TbW}Uuse~SsLXnj3r%On2m#P$&}^274YA<{;+ z@Ag6Idy9&8UW{_oFL`6U##lXNMf1sMb+`CH1&80i=rLdzaZ8hrY;6H%Lp@IS*|KgK zswNs~gttYeiF6|OVse<$_iuMm#hZWAs#on${J2`Ql*b8d3<+GX(4|L*EC0F}_U*9p zG)hS2Fw_6iQ|&XL(@BaVF_l7;&viN#F5Z<`Ya3@437DKI4;#RM@z~Anv~m6D9J}na zZ&#tO5=5usZZVP_Zb|uC4cX>_wb-lA8MCbKz?s+*Py+b**sCLwJ7d;iS{Kg`Kpd<2n z5wLZwyH`2B1iL$t?e|?D=b6D*?&;zybfOS616K{cwK=v=&8)3rjSl+fH8gz5ooaWu zOM7A7D0ECRHtXTI!ExKm>^EJ}HYjHVFp) z+}~u)gjKQkaYL}>1K4GRjNFPizgZp+f3j(0A$pZ!K zOhs>XGM=Gv=a3NAVBK{8PKy2+Xbz&}ZA!qlqi&rd>Ny$s<03B5@aw%WRTc>M=i6km zB}EYGE7~=Im1J9P`!2R^EL%1!22=VR)v5&%!cf-APDORw<``55_zoOnl4J>CqQF!1 zH)-k_8I!F+G41{YQ2P?uI%C-Hx1*%%K|zeT@1VwB=J_|CasmAtWUHucCuiQBp%C)F zQ-=#ej=>X_s6=NthW2$!T<;VuqwPn(q~7t7l)ULw2a28y%RpqpUC+JAC(p-R1K_1J zo4-`09K9rxPNG@vtTtZJe(it6)2Hw7t>~!eZ?$NsSw0~QSEyPZS&8xBksPf{5jKAJ z7Wm6J*79=?6Arb7tQcud5>b^x4~#&auIa6#ny6 zyuhFh0@Yjaf9_((x#@4LjjFBB2&hOyD-t*y6($xezN1SUs{vVOyj;->20LeSh?qA0 z0sX4NfBvxj{+A{>UAWQaC7kZjvOsZ^Z_7Pv$G=AlJE`UsIB3u&M3H!<39OoSHH)BX zZd1btJe^z}5@Z8=$csi(v=3Ax7xHb&Jfk;6GDzM0EDsx~rd|q42FJ_DVZ14CNd%wG zOfl-}OuFynjW92?Aa48az!HJYcfv1=l*1V?-{5$ZJlQM^H@_cbcllvh zNfg48jR8yEc48OJLHg~?%*ec^4Xm1S(ojocH+*#e3}|}$YEA%|RkzL91DBHFwt{H@ zshS>kG6s1H!)cjz^~MxYrOLpKtmK8He@VvAw-6$ber zqnsg`ICBNX=T#7(Hp9TVoswmI0>Z~qEBkff4M6T)-w7f%Pq2wpKpyH|CK&MWL#1q_ zav?tn%4X1T<{?}<2QXkrpzBlvuGmy#AdgxH2Cm@&viF^aE`92!@u04y4x2;O?}OAX zEczz1M##nB=U3}T={$76v+cu!^uocEf+VO?!=L562sh_OwCF*W-EH>_H3!uq67Hb@m`NkGZQ%E5=5VQ3w)nb#_LUaAD=eR1)##h!`0&i%j`>Ur$eANQPAz1 zOj5*xF%@V9dnMsW`e<81LKXm%w@K$Xv-$YYjJ@$#(P-0u0RPhYdGe#3uaUX5Da0~e ziA)YSyRZt?vgJZ$buXKExo!!@mNq%!szrv_2H~urOTY!0)A)bBGTL;7NaykKzA53X zG@-^v_%WLFH#S}Tivd#94PbUr*)4_|3VlTQbTwSf`JYe0xzy4~w@3Zt>3?Y2aJ*Lf~ylX`b2vM1S!~ZQTg>1`9S;Dw$1Aa^^_f39*VS$Gd z`yH?$;YPCMIle2|N1lUld8JH`>Hp+o$@1N@kpK{zQjmbN6Z-?po3#(0os{r-fuxG?4P3cVgS zA)jHDjCoWx&(qW11$elVf)|Y9(QWy$0Em|LpH26Ba>JZly>BbYf@UI{q}#95^4Nag z?tJDc$D-z^a4)5dW-I@V_kMe*dNrs{K=`$XH4QRsy8mdymyOjJ^ZomdO6pISxG81s zeNcCV*}>nNCQfgGYw14n*J%K}m_}{j>o)=Tz27mvPv;-Ft+|J7@X8!D*eC*XOH_oIqNd_>g;LT<`%u(wPhT}XSWW_m1B>MRsvlX{1LPin;hNBRBc&5@o7NjxH4~*PMMmC}l*T^;I9Q&a{!hCHOz`_}Iw+C?2$>I!Zwfa+6{B zKt&!Hc2{kAA66&?ZSF^7zZoYYylSxfoFoz7W5VKCOGFP*r2!`XBOY)8;rQm?zOINS zWiNyU6jS${hhCuY7D^`eJ0^Jy9fo6@+OVH>ysF{<2cX`o2`qlQnTOs-%r*rw;1b zgoqD7&Y)|71)&7E0TpjYZ!RDbI@HXJ2qw>C1PoR5Pmn3H>=Eha z!RNUB`l_fJ>nhUFY|&6Gz5Qzk+2{5gQ#GJzG>b6%RZbPl6hI{a z=kZ3|dZx5T@Jd$J?bE5ZT+Qm#6Cm^_#~zFAf8Mo=0PHJkRdNMD{@8ytNva=(I&EZjg8OGW(5D3*fuj= zk>~6(`VIImsecA!@pyhXWzS0~grUjs>z8gv^vJ5AX*t5bVyd1mA_Vu?Fed<)XOinP zJ_>&;5{~#Ow=UV&%;oo<%5T7AtIrxxcuPcn8<9U35t2EmeUH+&U~Yr#Gyf&tJ zbSn81vZ+|Bh7=aQ#Veg(iRBa?VST&U4ul2Nx=7IxD|H635B2SmR>(+&fgK+!b8aG; zXT^BXOta_3zPQuHjpu}OcPDQQR`M?m&a4;#L5fnYbuK5*X~?MasMkXVfboY$_gY65al zx2tjcjWDYGsDf(zlded3bCs4OZIAY}Jm)5ac@{u}kD5a_P<6Qd2&RiOWzKrQ zq)zR`#Dy+-$nisqh7rVxMRZ?N26v}Dyr#Lpd3Kz196(+Zq2~5uA^B1`QVeG;F_)7 zX>;EC0&?LW25Q`;*Venru!x9ZdVW&qO04Yp4~NfXuzRZVAYns#GE>ZkdcTAU-DxkZp_5;nswZgMuOng?UN;|C-DZkhZ+#67q`-JNk zH8I@7a^PRl8$?pT3^3$cmqn10%C_EMN)ex~h3JSpU)Vl~9pW?B#+l>W>wo8pT5?Z*Yk3+v~^MaWY` z@A@f8`K?4Qk}ygk756AoD$(XRaQ|n+t;YK>3>uR;Pn%5e*t;QBR z#{PTIr6ViUY|)e02-m$LhYLlwgmPo!#<1q(8W|7Yn~CO0Q85(q=*2}F@p^(DMkjm0 z#*Em>$`Jh)YfjSWdCxu}BH|UA5r^|j1UQpJ3phkbdHD12NK8=*Ys_Z_$K~L=msvdvydv*(ps`8 z*`+@H7C))sFieyKzK2Y;098)zj7ZK(Fu;SbX+ewOV zd@f)SCl66f*mAaC(c9jA2s)hk$?hn9f(&7Fo;SlfWCwqf)kP^}H~)du5Yv79CG0)% zdLWmNLgO!lEfQRu;FZ2&VROIE^oxMWu=Q_=G&iOrTHD(zaWp!Z!)y;DiLdP7E6Mw| z*Sdv^T$l^DvSi>yTKT8VUKTTQDN+ipxEv=P@4@NG+F+#vcgg#wEuxcJ_{QlEEex2H zxo2K%4p$rZO}i_D~^Q-AgkRn*era#pps!YHB|M=;-JUzBzyzI zCbry@HbpU@fie%TxJ6!#Oo7;i_S2gHMP{dX0A|!%#rYQOo@-V&nGumf16q!@b53<^ z(vSv>l@HZID0{fZli^12N5S|fmig3tk-G?4@G3A^@TV%$jxK|L>gP7s6n6FsJdcA= zvpiF8@$?+7Q08rD+qpn>bRqGS#hKp;fq0WpCwI~4(!^zMj+1-8n`GE}=}^0~nKJ4) z#l%9mp=%h#=0nXN*|N8+&0&$>K9Pp3EC(KP*6+hGgyzL21o3GYuxYTGA+9B5NNWbR zlpka2FIX1q_(=~|jlctC&V~%ueuA_^YFkrhwUvJ)D{Wxagk(Q@ET>cK2S(qA=>4Tb zKlt?Pyii)iQR;6-$TVJUoc{7p#E1y8zw=Qapk%Rhx{Sb|`}tbeJr*5x-D?59m8;au zHWs>aaz55!6Xa9a(%n@Uk=KO#al)@?qU|y9KTOpJBVcsLszd({{v!hfw^b5I;?379iZ5bs_(S2hNL>XGL`qB7-^I1Sx1xCdldguavR*{p+EhzZu1E zuAd3nWLXKM_60sEFqbgF!8G?!g-B2RCm=@F4D?T+X*$vOowHWFHpJ^*WTZ_>wqWV? zjj#AA^q*+lSXg&9Gar7uA^O*aNz)SOd_H&mYux$_9TqILqE*S_9wbnVNM5(+;7>U2iiTK9QiNpM zul)p7&{~)QE$=VJCsj0pSjQAR_Wt_Lw^#>rH417`B6GhKHz0vuSN z5S?Fi467xVtOW(@3w;vAnAG4>NbKySZ2@}Mkl2D71Ty2)eup=*d)WUoA$(qxl4ar7 z%d*C&c8XS0jx7StXQ?v-FTny=RqIxZw);k2d;tl(liYDEh+~0zO5i*>?1};FeIZq- z_S&E1N=W}Z?;BGWQ-YUh#oQG(!>YMNE@Oc0s-f$GDBe1CPlEMPHM>WyQn~onZyB;n zFIml9O`!%-;Jjp*6uL?hWG=9UW%gva%$qOEy8xp3tR2 za&y}tlue%9#|guJLwu47IDp?iiI52>C2VjxQ7C>aUwRCJG{wLAHr!NP@#V(l97Fsx zk@-!i^!jxlVloExvHOv6&Na z;K_Cg*JC0&?H6O+uy*=?Y(QU|n<(`aYwj}Y7ho~?&nr*3M-2o^rBg3O&kB?+bU+Qq zC1sVbalteDrrMg2KrJ|1B#{~O85MRgl=_YtNpD`$w&$}o;f3M~Yi~Tv5`a1Nr219j zlWL7@+|l>+&j-4{joBrJJKIlT?uwZF7q z3tvvS#PfY*y!cygsuDqZiUKJ7@`@R{QJmgU($sRS)gB)mQTplq!;c)HXy#<%O(|Rl zVmsX z>|}=PINxQwIt+g)>u*`e8CR`N`dIGkJ96#Wy#A%(IJo?&@Gbn7iFt3hRX)>4yl7cm8y!oh%IQaM@4q z7n?qm2bVk&l2VS@^g{>amJCAbM`d;D?h!a*fAiEE|NMp!_?`w6m zA_(%ESs08oyIK}1?X{|j=ZL2L{yvV*UPG${?7_G4X1`H!? zP)cI`t;+b_;{XL?p6aePhZT1v}k(+kE^;VFVBBsf2}%bW4ko|_=T1qr3eSc&YE

rOaIEZ`ze#NyH8wD(XL%q@>W$6X8A^+u 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 Y+UZmbid8I2f4oEGg`x(u0%95Ve{+D5g8%>k literal 0 HcmV?d00001 diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..30948c5 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,18 @@ +{ + "manifest_version": 2, + "name": "Lighthouse Report Generator", + "version": "0.0.2", + "description": "Generates a Lighthouse Report and without needing to use Chrome", + "icons": { + "128": "images/logo.png" + }, + "permissions": ["activeTab", "storage"], + "browser_action": { + "default_icon": { + "38": "images/logo.png" + }, + "default_title": "Lighthouse", + "default_popup": "popup.html", + "browser_style": true + } +} diff --git a/src/popup.html b/src/popup.html new file mode 100644 index 0000000..edd5a9d --- /dev/null +++ b/src/popup.html @@ -0,0 +1,35 @@ + + + + + Lighthouse Report Generator + + + +

+ Lighthouse Logo +
+

Lighthouse

+
+
+ + + +
+
+ Generate Report +
+
+
+ + + diff --git a/src/scripts/makeRequest.js b/src/scripts/makeRequest.js new file mode 100644 index 0000000..3c7cd8a --- /dev/null +++ b/src/scripts/makeRequest.js @@ -0,0 +1,131 @@ +const setLoader = state => { + if (state) { + document + .getElementsByClassName('content__button')[0] + .classList.add('running'); + } else { + document + .getElementsByClassName('content__button')[0] + .classList.remove('running'); + } +}; + +const setError = message => { + if (message) { + document.getElementById('error_message').innerText = message; + document.getElementById('error_message').hidden = false; + setSuccess(); + } else { + document.getElementById('error_message').hidden = true; + } +}; + +const setSuccess = message => { + if (message) { + document.getElementById('success_message').innerText = message; + document.getElementById('success_message').hidden = false; + setError(); + } else { + document.getElementById('success_message').hidden = true; + } +}; + +const setButtonText = text => { + if (text) { + document.getElementById('button_text').innerText = text; + document.getElementById('generate_report').classList.add('disabled'); + } else { + document.getElementById('button_text').innerText = 'Generate Report'; + document.getElementById('generate_report').classList.remove('disabled'); + } +}; + +const generateReport = () => { + if ( + document.getElementById('generate_report').classList.contains('disabled') || + document.getElementById('generate_report').classList.contains('successful') + ) { + return; + } + setLoader(true); + setButtonText('Verifying Start Conditions'); + setSuccess(); + setError(); + browser.tabs.query({ currentWindow: true }, tabs => { + const currentTab = tabs.filter(tab => tab.active)[0]; + if ( + /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/.test( + currentTab.url + ) + ) { + setTimeout(() => { + setButtonText('Generating Report'); + }, 1000); + let request = { + url: currentTab.url, + replace: true, + save: true, + }; + fetch('https://lighthouse-dot-webdotdevsite.appspot.com/lh/newaudit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': 64, + }, + body: JSON.stringify(request), + }) + .then(response => { + if (response.status === 201) { + setSuccess('Successfully ran Lighthouse. Opening Report...'); + setButtonText('Opening Report'); + setTimeout(() => { + setButtonText('Report Generated'); + setLoader(false); + document + .getElementById('generate_report') + .classList.add('successful'); + browser.tabs.create( + { + active: true, + url: `https://lighthouse-dot-webdotdevsite.appspot.com/lh/html?url=${ + currentTab.url + }`, + }, + () => { + setTimeout(() => { + window.close(); + }, 3000); + } + ); + }, 500); + } else { + return response.json(); + } + }) + .then(res => { + if (res) { + console.log(res); + setLoader(false); + setButtonText(); + setError('There was an error in getting data from Google...'); + } + }) + .catch(e => { + console.log(e); + setLoader(false); + setButtonText(); + setError('There was an error in getting data from Google'); + }); + } else { + setTimeout(() => { + setLoader(false); + setButtonText(); + setError(`That's not a valid URL to run Lighthouse on`); + }, 1000); + } + }); +}; + +document + .getElementById('generate_report') + .addEventListener('click', generateReport); diff --git a/src/styles/lighthouse.css b/src/styles/lighthouse.css new file mode 100644 index 0000000..8162aad --- /dev/null +++ b/src/styles/lighthouse.css @@ -0,0 +1,267 @@ +html, +body { + padding: 0; + overflow: hidden; + margin: 0; + max-width: 340px; + max-height: auto; + background-color: #f5f5f5; + color: #212121; +} + +.header { + padding: 15px; + display: flex; + flex: 1; +} + +.header__icon { + margin-right: 20px; +} + +.header-title__container { + display: flex; + flex-direction: column; + align-self: center; + flex: 1; + padding-left: 15px; + overflow: hidden; +} + +.header-title__item { + margin: 0; + font-family: 'Roboto', Arial, sans-serif; + font-weight: 300; + margin-bottom: 4px; +} + +.content { + height: 70px; + display: flex; + padding: 16px; + background-color: #304ffe; + text-align: center; + justify-content: center; + align-items: center; +} + +.content__button { + cursor: pointer; + font-family: 'Roboto', Arial, sans-serif; + -webkit-font-smoothing: antialiased; + border: none; + color: #fff; + background-color: #2979ff; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5); + border-radius: 2px; + font-weight: 500; + font-size: 16px; + padding: 8px 16px 10px 16px; +} + +.content__button.disabled { + background-color: #2455a8; + cursor: not-allowed; +} + +.content__button.disabled:hover { + background-color: #2455a8; + cursor: not-allowed; +} + +.content__button.successful { + background-color: rgb(24, 182, 99); +} + +.content__button.successful:hover { + background-color: rgb(24, 182, 99); +} + +.content__button.successful::after { + content: ' '; + display: inline-block; + transform: rotate(45deg); + height: 12px; + width: 6px; + margin: 0 0 0 15px; + border-bottom: 3px solid white; + border-right: 3px solid white; +} + +.content__button:hover { + background-color: #2257b1a6; +} + +.feedback__container { + display: flex; + text-align: center; + align-items: center; + justify-content: center; + max-height: 45px; + margin: 0 0 10px 0; +} + +.error { + font-family: 'Roboto', Arial, sans-serif; + font-size: 12pt; + text-align: center; + color: rgb(229, 57, 53); + padding: 0; + margin: auto; + width: 75%; + max-height: 45px; +} + +.success { + font-family: 'Roboto', Arial, sans-serif; + font-size: 12pt; + text-align: center; + margin: 0 0 10px 0; + color: rgb(24, 182, 99); + padding: 0; + margin: auto; + width: 75%; + max-height: 45px; +} + +/* Button Loaders */ +/* Credit to: https://loading.io/button/ */ + +.ld-ext-right, +.ld-ext-left, +.ld-ext-bottom, +.ld-ext-top, +.ld-over, +.ld-over-inverse, +.ld-over-full, +.ld-over-full-inverse { + position: relative; + transition: all 0.3s; + transition-timing-function: ease-in; + overflow: hidden; +} +.ld-ext-right > .ld, +.ld-ext-left > .ld, +.ld-ext-bottom > .ld, +.ld-ext-top > .ld, +.ld-over > .ld, +.ld-over-inverse > .ld, +.ld-over-full > .ld, +.ld-over-full-inverse > .ld { + position: absolute; + top: 50%; + left: 50%; + margin: -0.5em; + opacity: 0; + z-index: -100; + transition: all 0.3s; + transition-timing-function: ease-in; +} +.ld-ext-right.running > .ld, +.ld-ext-left.running > .ld, +.ld-ext-bottom.running > .ld, +.ld-ext-top.running > .ld, +.ld-over.running > .ld, +.ld-over-inverse.running > .ld, +.ld-over-full.running > .ld, +.ld-over-full-inverse.running > .ld { + opacity: 1; + z-index: auto; + visibility: visible; +} +.ld-ext-right.running { + padding-right: 2.5em !important; +} +.ld-ext-right > .ld { + top: 50%; + left: auto; + right: 1em; +} + +.ld-ball, +.ld-ring, +.ld-hourglass, +.ld-loader, +.ld-cross, +.ld-square, +.ld-pie, +.ld-spinner { + width: 1em; + height: 1em; + position: relative; + color: inherit; + display: inline-block; + /* + &:before + content: "◎" + display: block + visibility: hidden + */ +} +.ld-ball:after, +.ld-ring:after, +.ld-hourglass:after, +.ld-loader:after, +.ld-cross:after, +.ld-square:after, +.ld-pie:after, +.ld-spinner:after { + position: absolute; + margin: auto; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ' '; + display: inline-block; + background: center center no-repeat; + background-size: cover; +} + +.ld-ring:after { + border-radius: 50%; + border-style: solid; + border-width: 0.15em; + -webkit-background-clip: padding-box; + border-color: currentColor currentColor currentColor transparent; + box-sizing: border-box; +} + +@keyframes ld-spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 50% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes ld-spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + 50% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.ld.ld-spin { + -webkit-animation: ld-spin 1s infinite; + animation: ld-spin 1s infinite; +}