From 01e3ddcda5be69341bc65e5b8bd65a12166f1b23 Mon Sep 17 00:00:00 2001 From: Jon Robson Date: Mon, 12 Dec 2022 12:08:14 -0800 Subject: [PATCH] Child elements also trigger previews Follow up to Iefe98c1f0422dbf034e385b1a41a859d030a2cf4 where we switched from the jquery event delegation pattern to native methods. One thing that we overlooked was that we also need to consider the case where the selector matches the parent of an element, for example a span nested inside an eligible link. I've rethought this logic, to first find the closest eligible element to normalize the element passed to model methods before running matchesSelector. Bug: T325007 Change-Id: I4133751dc900a51829173e9c0d965cbb18e6a33e --- .nycrc.json | 2 +- resources/dist/index.js | Bin 40373 -> 40514 bytes resources/dist/index.js.map.json | Bin 196704 -> 197554 bytes src/index.js | 7 +++-- src/preview/model.js | 44 +++++++++++++++++++++++-------- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/.nycrc.json b/.nycrc.json index 71aca443f..9d01d33b2 100644 --- a/.nycrc.json +++ b/.nycrc.json @@ -13,7 +13,7 @@ "include": [ "src/**/*.js" ], "//": "Set the coverage percentage by category thresholds.", - "statements": 84, + "statements": 83, "branches": 70, "functions": 82, "lines": 90, diff --git a/resources/dist/index.js b/resources/dist/index.js index 91d4f4dd8aa3129a0197df61bf186ecc9e1d91ff..a38e3c21b5526118524651453e5376a5647d95cb 100644 GIT binary patch delta 3317 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 m9EBS=)n#NklF2$I;M~pQ=*OSm>K+L=h@gV zw(|vn@=;*zG|oT}{@76W(Uo;&eM3xIRi;YaANyymR8?9#!KP{IA46LAp@~Tw+Icpy z9i;wq?>)bB?z!jQ`@8p?58kV|`>TpOE-%VWb zrM?CJrmq2W(++58+5)3ZdgyD~3>TVoFpvFR?BB%x&)9#8`mZ-@iBoB9{;aZ|&Im`w zJEvx)uq-AdZH#05LMD{b%EAnM$c<~GYt$KzQJG(e8k4i>7$@^|2CRHDnN*_uBSPjN zu=h1$hxg63@OWkp!THE|Hvan{Fj!8t%7T#dg^E7V*Ek@8>G=u4$b3q1tRA zL(p$_Zk|wMNHKXfC21$&`{o8RsJw6fO-1b-4JV`wOUeFFlm!x=M1;jH0rY5qU$=Es z1voo52T$6Z7=ojnZpv}Z#?bLlj!JX_PPOkU2ZrFs?FUJ>^00k(C9%Pi7j@fx!opJN zAY5t?;uNRz!NHD$#0QCvMr^;`QSbGZ&dA0wV~m9&q7>z+B&cFKlwt1BB#ZMjl?TG{ zM0ynw^GJ-vlL3~)<4XuOc--;MZku|RQfP)*Y@Ec?2up`kVp6>kORCGJd}wi0!CM_0 zmD-mE3Gpgo_uWd;1C90|aVuGSu#$|y@0{br2`w&dYp);~CC~A;GtYyEc zb%}cNvPqR&_nXQ#I}FRNWWC3j?Zh1?3JeOp&WLc+F`+iH-t7pzrxb<=kX#5-DiGRa78<*nYqw#I9d!T8f zdabf3#~Babd$|@u19ij-a|62PMg*O?M41!tlYuK+)-HqL)G5aX%@td45u=Qk&hfZb z3UmY8m3x6lm1G2dFlt4AUyRv#OMMogjz?Ly8mmC6#)! z%73MM>&Ri{7wMxFBn{7J4q|&bqXjXe%a6RL!c5RxeZGL6CUN9;dHW}Nf_ArCPva+oPvbt8;8_m#tqkw~rM?o6qBS+XK8^ zPoqV!x7+2mquWdo>9+a?11dBLr?WMu=1}1uw2!##!PPMBWzdk*7u3^0Ibyea^)!db zkUbD^c^yL&1tWhsz?Ixbag`%eeWON~knc5;7)ozLJ42RN8 zJ6SS;>t}Xp0wr0wf2M(G%6z~Vuk6uGmkeOX*+!CtjESd>^<-H* zj+xk^Gp(+L49Kq;fsNRj zHp+x%E-OlrM3$#PSh)P73M+%hRgJxJC>3S0S|FqZiHbthcswCWoStg+Jk4?`D)NQ2 zf+MVJ+?=E)CM?*d#3 z@4L6ja1Vwz%ZyWrgv?TIQJTggiKkCdyy)qGnv*e~u3{-BMVR_87m>6alG7Rdz!R$& z?7LQ1|I|mC$ujaKje4w13SJ;|Z3ot~3)dcystg^V!!U7Oiz#FI`YS|+bvMi;1qW_i ztrn5bG-`}9DJo<2GY_BNXeQPxD_W$5Ze<51z0Q?4$S6EqsjC}ZEu=V}Vquqv#{-F^ aWfV5wdRt@=S%(QjdWTxp% z+Dw1ncP>D1cO}RF5WM%E$9KN>>)xL|`}XgA@a?ZWbVqilRNs!}v+aDRYgJ2y(pELU zmTedE-3y)zoqRQ)>o(dQ{GY2fIv9ihs`)}Tw=YN6O-!zLV~y=R9&R^sy&5j@?^a`b zA3xXcxNYL3dhCt|RO^oKy*mF6`%SO@#;I?=%rf0i$ksl0qbHk0r#cvFr&8>60E?2uISbbd>(4W-Lz>w>*xJ zW$B3v5#6`wK_c!+2)Vp6`d=htSfXzD^s;e!kYA<0Nl9xL_1X!#lU*C|yrd^Bq~G9W z*Xd5*;Jx*XkYVDUj3zN%_u*)KWl4`$nF|+x12IiFPbcR)lAGL^MaY(jkk6 zC-J{58w)%sBlHvX=<-=}mI2IQ;p7IxouY^NHZSO4L7=56HJ*be#^gE8NYm=!xV*g?#&|$X$BkET-1zxHG0cbY^rc8wHA@Fvwx}@LU4CY4CF{Jl z)nExp;H<*NKEevpnx@bwoso3lREdvOk;{BK076&@@B-1IiScsAtWB6|YURF@dn^Gl za0O$+Br#m>spN|1Qk|GrF4y#<8KR?Hp5~pRRTD^(%N0|-yfS|RgaGn)2=`9OQh&a3 zVQP+fCR*SVrKP842+=UAE=SfZbtSQVrpuQhCYsaJ?7hoBPG5a35qn~n;1P-52s)Am z9%%WEBJ*mL!4xSMOk9B-(ge?*QPGFvlRK<0;#i&u*jLHbE5|~-ur;k-Sj}I9A_5N5 z1*Ut7xvh1IuG zbDmrAd1RVbln^%HK{LNdgZY1D{hh~x{A_tadDb614rF5lm{DC@zh?$wkE=wNH^|fB zq7^=swNFY$q}yTKOoEW$*4&Mq4BYGuRsRu(@H zs%EQ?Zai=-NcKyvE~xKreCWavZJ>Pshged?nVG681M0tLE**pZ!y4ASx@U9x@M3xM;$7usEy4{$?t%Q;-AFy5>YjEK+X&d9AvaAp((Mw z?PWhE9aQ3p(;g^fF(1HQ7LM?%t=?MFpXXt-6$8mia zYkKJ|T2=bg%(eR_7L;@CLeft&tzEr$iD%~b2z4-SeLhDXdVx4-m9|Q2Tc3xrOydeh z3}z5Ymj<|!Fs=UZT5hr&Q4ce;96ehaS` z&#IT6x_hugySc>F-WOPoSb(wV;8v0>2s3eJbL>gUAm28m{n_l+*c0ge3~ao9lHMMB z0uK#lJE)(ecJSo*aHEEL{Jry&RY&c;cV@D%s{Z8ZOX}af_xRN&18Z0K6q#zAz%3f! z9U{%NX5<+fBdZ3cz3J(Py)2=^X))+7S$5e%hS@d_wV$U0C%bRXs;#HrO*?<-X?N$x zCz|RVS^r}NvWIJF&pceDl_rTJ_}LZ*2K1c+KHe!2R3W(0UJ3QnHp-xg^jjIGOHVzY z%}-WW)PKvKo?Bqs5{6*}pGQ5@Fu~iaDntSl!kj6hDCIzETKc0>u?5g$>6W~C` zEn21MVh8x>XA?hS%2q&SMbJsYLr5$0hHV_J#Yk3bzeS0H_9g@B^bqZOVNr$;>N=p)RE(}D?v4(h%6%f*9LB4!)`6d|QX zN>8M!F@lyswh#vbuCi>gSd6d-m=P5f9eN0yu`lE>4Qs5RlXG!T%Botfzu!@Rk-zjH z7@L$MNi$qpQpr8ND(g6BH-RVC&c1qN=Usz6Hr#fNb(oGQqdGJQV>hr^qREl;j)s5S z-Em+8h~Is@#Mp4C#QneWnUgpw55mKN&}4A||K0b2;e!s->ejy7hla$U6{?EYOg z5O7>HyTjO(jD@5dUBI4$-~=mZT-1(kbyfX#;lkEDlLX-`p*Kj93BIRYKwx{7?=G;s zrhs9RL+v6C_ieirr72Mi#E3N8^@`D5VPWg3D@ET5oKc)YZ(}!zk!1vnOC6A=X&)PS zq7CNt5y(@K&^Hw31ljVeVH2BzbnK+QUc7&yNoLlxT5N4|K6*Z4%@QkM^44)PQKvA| zhR1=)PEWnLbZ&qr@U5FBVh<9A3NJ$Av7v*TX|Wk04TW3{p{B#nQ%nsJW}Sf0Jqw=# ziVO>kFkj(#t~H8Ap!r~Px{FO7mg19wkKROJ1=LqcXHV_%(g}8h)AP$N&4TJDrO+gN z%e%`L21OFIf*G>lS%522+6@bLmRSrLxd4RF(>=2NZoTFz} zQ&yO=aaM-IXWBi=Vig+MQh!wO3;+j?>zDI7@8zxnPZZQ@82mKs8$R{%%s9*>StD8{ zMYDJ1te$C(p2*7U7Ua68s_J6hi&dMqhoU`pm%3Pn-b%OQQ}R-8guB_Xv3Hqu{kPctIDuH1-0NL47!$4M2j@%TT)4!p0Wx z7~qoHqGJRM7zB*!8vAOq?i;Y~*-Z6G>$HrL0T;|d%B^9r^8!$~E^^z&v*`{dZQIMP78$pg|51xv(`m}F`U$=l#0MS%|r z?K{IK1ht{~;MvoX5G^7YvA?s*5*Rsfr|d>_S@74r?8`eOwlPXc zNdfZG4=@6Tj>DhBq?I6xLIPKa9o89c_Uf~{`n01Bf7-lqq8I^=u^?Guv9C_H950KC z+~TwH7FblU7|}So=<-ImKx$OXD%BFh^bB)_Txn_$a21x_@Ddx-KI_kHTdT6p8YV+g zFnDFw2q}ht-S#w0Q8S=!<6=pKG{$xOx$0>_c~(q#0yNpgA|OW!p^g|aLDzuiNJN5~ zA*X+L=kRK^#cKU zfDk9EWKbazC7qnJz=v{M3+a*ZNl!tFFyb!~Lu6_Qy#u7K@teH`)ygImL!oF0Z-mLV z7p5c*2HQw{GTMc(4QAlc zP~b?eYK*dT;(&{jBD}5h2%}*Iz*Dj$J1oSL)*dfI9vaxYy{JRVLW-;zIp@|!k+Ea} zSwO?$dG^1{NA4ZHrGDJIZ!kQuPE@-`p3_@lRXHbzVH3rU>qsnsX~lt-7_2AF;q#s; zWo5rCON^sMz1Yk{?9b*{nPIFR^bd!OPw3khPZMDWY4GU@d9+=88vYI3=`WXKreMvAAsWLf0S9v>?X zNdRKg9rehsp1+ml?HbVG{Ul6f)3`x-BW;G<`ppKE4IPqPvuwgf0!hx{XgGOFu3dzO z2ZjRzYJ(Mx;xS_k&nQO;GY0z5Zot4Fu0^ulA#H7K?s6?V(mT5In4*D6VQEW&62M~H zEU~m|ATJ^Pr^n8dw-jz_#|Vi=LXq}b?WTJF`|cjVmSEcysf?xpw!wg;ZZAmevP5WW zgTz0!K@yzcs_8_#*VyB-otwGTbYv@&f+q|LVNOaEtp-gkSUuTgBarH?kYYl;1GrOn zJ#)wL19zE@ntA4d+lB@PJd_Tot!Kgmc$!3Sin6yty7m{w9cf}4W@Y{Zv6Y*UV!Bvh z&nJfLHzuZFg8+c3UF(Jp@R1pTu60kvxa)%xF}ffT^n(QOk`ex3!dGr$T%sGSK6Qg%8})CmI;Y zsG*!s6x(8wVx_n!Zy=@z`8HO2>a&B#)_pO++1}vtXMdw=csbxq!hkr!Uejgcq`MlL zDuCEHWQaI~XTr8vB77j-X~ThP`dQ;R4?qA{P`l6W9~(lX{`y(p(G$>B8otc5REg*A zx(yKu+bnS7idS`>yEx!N3KZKc!5Y8aS|0no&3PVQ67%0d4c&i z+1DJT_bD44_Am4B)`6MCfCs5Q-mH-v3U9-R@!r9Y71VyG$VSt=W9c7%Pm|>|M&R?LD=Gq3Rik%(gvq=On z0i0CiTJgieL9Gv)5Yx(aW>6>$V1z4D(QTSYwM62g1(p1@`%k$S%u>jLxC$bm{=u)^ zHyD40yfCr;JjE~J1CtYZB?H49xCmq-=ZCFrMlL7W&8T25K*o@a z0{)m;K_(^7kq>ejbPFyOpG-aU{GArK1VhoYfd>UHIYMgYiCjG_4+NAXnpcPtNLAw} zMOqdB5*8e2BK*K|Joo&iW4Hh`sh0Yk=dT{ybLXi4^88~Lbv-^gw?={x?Qb#$tK2M= za=QfzD*VEI$NfuqWJRXqs`kQt6Mps47cM-6QYWBD!qv``M@lpT7SX2z0!CmcO_PkR zl`g6O@WKOE{T$)B)i$2VjT%)0fg0r)X#%jB7qTU%7uA(tuV2{PV8zGv?d`r!+Yj%- zgAK2D)c1b<+}7|GrY?23wJA=?X4FDRP()(*9AFKfBhN?Ab2mH>?~Lzqpi8C!l&>H8 z;Dg5?8#pdbQ~uzi_YW@^^Vkl{`3+_=l2x)kCH3PEF3)L!+C<;TI3(~?ts4)7qEA?7 z?)xhGp?f3jp}?78Kg^dPdGIFsMuQKSL@_T%ehiZ4ys#Gjd2%SiG2Iz9)Cd*z%7@-L zaMgn@b~;r4foey_7oa9|eF|p?Lv53QAUT0mxqQ35 zj+MK7pF|QKJrPu=-;yl}Nae##86-P$^clny_5*!PXmS`kMo%?AeCGTO5R+H2Gw#r| z)Hgre$RZU8fp?FbWVqw(Xozr+^^}7S3!;bi5OVu81P*AKYdJ|>`O*c8(mMO$l-**6 zOp5fLSyY3M+er zl6)7I70>c;>PbM6nTrZbSGDTY(t!H=miiYTefI#y21~dpChcry0&J9!+hf*taF?8x z*(A6CKDqWX=Q+gOW+jjI4q^~CS268E+d2_jGsfN6$R^f6>L$i%X|8AvSYK1w4(@A| zL|5@a*knn1O<)&zGGB9H7ooytq<4jP!<6{>@cfI#w{7)_Vw@`C!@%FKs>d9WZw8qMEG`aW_TBSo`0w-kt|k_AsF67yBV@Mpeop4t)Ra9v8h3m0Z8jKSgNg8geyzP zZ?P7lrLaw6H^aMmd5FU)t0)%CAi6dYIa{(>hsRA!gx(ZDA8oLvh%@)3@$yuL+5-mH;3bT}Mx zmq*3|)+lInbOHmR1;K=5CLF#sI$qC6_Q}POi|D-|@N_#45!KQiDL!2*w5D^Mxmn~& zs>pU!?~@lU!}CNoXj224*@Zh|2F>jnTDUATM|j&NKy9!3;U_P?wM?9ugrl2Q|KpSI z$}pqmR|4b+ZmklLk=WBm)y)ua>p?(=tWFXcQc!vqu;2jM;0CVH=~?69$pdasN+26g zL;LF4Pn{7VT0^%OpmIP^#AjJDvSjDn?5@rvJ8spT{iq#xlu!NSQx8ux)Z5hMV^Hrv zY!2>=y8l?4#mDKW9W{HgN!c(thr~1n#9RC*nI}!3!XuELg0bIMbAw&>1*6<2gJ{9K zO~^z;$DY2AtQyqyu4^%&M2Jz2md|y0A_`+kBm~i5@gW=D6woX(e!UJyh$z`rHW?KR zcM=#>%}<~8&)jNRO*%LsWM_jZN^n8Cd(1D{p8C$dt9M1!Z=nZ!>s9&LUWY*M&KRb5}$$Av%S1amYefBEBMzbsG|97k=r`;p$k?hhI73(G0g&;0zwc*)uj%+vnBQ7_3rIe1}jV5XR>Q{)V(i0 zIK0Q*b6vBc5-4|n4Q&eI#xf7P`R_1Cam{b*B4B z_h#AD$+grp8wD2Zt`XWE$7p?%cvtu}$`Q?jOe^~-a-~IRjfI3_Hn(_*)C~@mV9g{q z*&lH{>g9j=V)E1jwW&u(G z*eJ8d+?8Ox5}h}c{|omHN=yet99Sob?35!`L{P_=h@!zp+-C&oM`sxUONwp{l`&$l z!VYf9SWu$_RD)TFB6o(PYlpVXZmPAP#Vxr?3jk{*$ulNI!d@a@r*~7Vrhyg>SS6%##gXHqOOCcZ(;woB{*AAOO zl5v+WVC1mE8sW-0VBt*e^G|q={1dr7e>)?KlNtqNa((ItU-aG{NMeSGYy*^W7x(_( z7lVTWFBRz`i*+M{Zh{8;C-52##+3|cV*I9Ejz$j{bc0W#nJ5Q+r-K6&#vvr>&=Kia zVChH&m>$U#zfP6k-J$bfEjkb&!paF0sDM+7z;Shhb)2xKKEl=Zt6S96>+51!5{ux%gaKV6-GG+c;pr+05t;rLiPK-HD=eFL@7fZK&0L= zm-&MTxCcxFoHPssOtbp-OD9j2nRYsei$@C7HDJq7TK)8;lLPo&NYdmF#%D>(wd-j6 zL*(Embgw{dV%f5>Pq-8v$II4we00Sf*O+A9vPFIbZ>tC%y^_{^4^ zO2rGqSLQ%5FrCgY(0MJtyU`H+V12xfMDV%C4(VbUbRE{FCVQCLhH;>N_N99U$Wo(N z6?2jD28s-E2y&r1h(xX&W@d+#11BBAi<~6zCrBUyiLx;k5695*MR>S{=yjI{;9%79 zkgNYi$7U%+AkV=vvZ+MfS(ZEIqx#K!6cukZ8{&>E4-f;P$z!tfkDWn@-5I9%Cbc0m@nts z#1&jT-O7v@juvcgV!wpCV9Z+&K!9us6jFfnT3Puj+f6RTouTg7hOS zbB#$TLt?uW%8*f!)>V@L`-fxT?YSmcJ@@jR16^^Aqcn+4(Ibm$i-h0H6@;SP+~ltO{xco%X{2i95jI0}`x zN>v6}cl>e7tx}ZPFv>l1mUCSRtO+%d;57x!hFWr8RNy@YZ&~8iNXcTbj>$(GkFQMW z3_@SQ!2Tp$MPsq=o>cE#F*aD}Y%gvjR4W)oR$Nus6UYb*I-Rtnp-t!_GJ!=v761i) z*&VQ5{4&H~Sty3!_?Zw>j>hY(o;F4V1%gJuJbHe8K*X86g$=)n1syX%JNCl2`|F;R z%&@Z$Ev9>M@LFFODwoQ-u{^{Iu&*Oc2N8^M6pc6-hgz9+=%}eCIX?E17Q;B2g&{EH zI*4csOb0gMdTyNa0%`YrG#_uXsGt5elqM%eUU$&=E*7hrXe0NA%VGvGHTJO9xRW8% zX5z$)xCyzI!^3cY_cFp$RafQ}#_g8tL{=eEHNvX!b~0HY2EFlo{P|MouFSt3L9Tb3?(@h&}SWw+>r_3>uS!8{in%QSEHT+lwp<=*@s&IUNUs5i8&= zRpQAbZkZ7E?5TS0K*6)j|=3kIs4bQz%D5qJ}Gq&?Oo zx91Y9 z{phWP@_pr``pMVsK1!T^?8susHBz1f)kH!cqDlDjF0o+YSbT7nA+>J80ul|bSi?EK z>Co5R- zm!Dm>0;=}S(~phM?z7&XGj6pTcO6)Xg5FF^+T!+t`j_9#4i4CO+<3OxHOl9pCXQv{ zJm`pQd^^0#16AFW?sgcj(^B<39WSU!dt^iH!tEJ&$5MynOr^gk;sN#L-#I%#vy#0u zXRe|85w|6?LCMhhGpz%|e2PV(zYKr?7kDH4ZmsH9!+$Aq!x_nwOt*ECrN1@}77D{` zvn^qV{B^BFRW-hK`u6@Bxf>bXed5&Ai{Co?#1WYURNxu3JHh^}qMS`G25^R`nf5^H z{f*2O+Prlpr|SZ!?s(g0;%43gu zUkQbj|HdZBLem&MGl>RhN0jnVS5Q9K#F1UwYru2lC*Qeubn&TI?;Q*uWN|hb zqqikdY9t-JZ?p}3O~dRhL8n;j*DIT z90*cQ`*=%mUOoCx9vSH6swS-=g%=IzJ^YLAzK|sSvLN>jG}(is2e(*m&ct$vju%WU zr`dtNLlUCfNN+Bfd5BdwBz^i6+`3w{rqN)Hekm&r)*7IR7)@9tlloQU6pI+z*Y=I2 z#^Ql&!Bw*Bkt`9tC1JmSZHFDE9I~_sB#?Q*Y=_QznD0adGrBc;qo24JugAh2Op;AH zFb<#G&W|7*^gdN|X+eGBpPm{}t+QzOH0KOcy|@{Lg@xYTH4&bV5gRF581Td#69yXr zd19JI?&4E2NT^TS6~l{%$f*U4YHn<*dk`dl4@GFk8qD*~B||rD?{kU3Z!GYO4>RD# zuvLxh(}z|TE0I;d#%%|kB33y9_d%k}8RHIuAxEU!@Fxgw9sQf>k}ob%;C2LFK1+(# zRlF&Q0l6Hh&wGh5h}O`W0;Ci7SZi~XR>aEccYp7p9Hu*qrKJcrOZpbs(VI2gbQ&r( zSShjKmf=0|sNZBu1-@i|)wyv5=@wQO1*5w~lOfegymkuj*Job4cd*B^qESzFxn)Xl z3Gi4l5Jl68#@B)rb~Sc&k2K{T_ZN#MD&Cj^g~jzmS45pIXFEs~iTO0RT@zoRK`WU) z(!3Eu05(8DNIM!wS&ZI7n5LJhh;)Y=78ZRHSs-lKFv@yEtr`y`($N?T=|c8xtIQ{* zx`b1Ya7wly3w&>!yWx_YCHPSC(s>ER{~^{be#mOVt4>>iA||Z>upn(#!}w z>PCR4rCbjr0PhA#KIGN3@uL13Vgh7famobB&N*O6aCdf(DjLwxyM}B3l2E+l1+DTv zVH-^ligWOo0XyLscPZttAfafyjJJqj4<8!Z!3Ukt1g8`Km?2|$Uj|1I z^fHSS%iu$iLt7pl4lj12;i?P6kSAW4)pvmavYv(?E-O{;TKYEX@NnZ(}jNK!o3#y-g?{sOJ4-Z#OgRZ|EQZVrKCs>588Q|OGyHnyZ#75fv zz*QV?jWCy@gNQ-|RDXbdzo~W6jf3i{_5HgB!zn?XBx|{^7;$JO$!-Gp;TU|Fg5<40 zat1NxOkUaKce`#Jiq<6UzLFD-1igL-@P_r!fj1xz9u-VpkYCzGM^2Efo`x69Gu*z( zpCd`5q|Kx80+=oO@QfQoX(@G6M_hYaIeybiP^ikE{sHHqUxXmrH5&MbCNrtCZGC&I#dq-@ zE{T^DgwW$RiEs@+SzeqXS8z6Y;Ls8jq=<;8gLj3za^0hD|H0b^cuxj99Q}G5>g_qY zJ3Ukhu1nmO+9-@#!AQ@Ld_&mqql43Aoik-HYjn^C=f$AleJpS_L(5n`gqai?TwcIG z1i+#vzuLFS_<~I~_HLv|SpDb+_asL;9fAX`g^{je3jn!TrB4lgpfB2xz+oJEAS|0R zkrWwH9YoV_ZqjV}Y}~^?y!?oFhh{?qQ@FssJUS>ir@l6=5#MF6d%dSSfNAa;{gFZS zi65RkKBR43ed~vJU2&nbNw`ogM=bfeoB#ZW7l;dp=J*r@cz6w23L-SUSkjhWV@c<( zQt)dNE#y(_#w?RLDh?QCyrT;3YjR66>fofeBYmpm2`?{{*1BgbKmeie0V52cPfXy{ zgOpFNG|yh>mhRVx>v*$ZKtwSE)oA!H<_wye09{Q6IYa`&NC>8Ze4J1RN^-#wwF(&?e*!TAmTenoRU>|XQm}AYEMKF$5+HJhj1Q!S+0o&m~k{yr^$eS_rD@?3NL{4Y1m@d%SGg7yg zW)V3Pd~h5S_~eq`aD&EPo+Y2F-44CI+g{wlq8)p&49A3s*MWdKmv9(zfaFdWmvo!N z5<-?mz5$V2GPK$>{ICAyAO8HYh*j%Vv)z1W%KgOWR4v~vHnyjB8ttjAcB9|Pw>wka zVzxWA-I%I3y4UJcSEf3>X0y@mPL;Y>r}9?|SEp>t=evIWwu#H1`P{^%>*taaZ>heo z-m6xhq2V*v>N~x9u3KuJOP-rO%iSVY=3xnVDKE=BJ*fyH8K$vUMP2YAZk0>*TkmvYn~yRI{DmE#>>8 z^Gsa5{>p!vJbk6x&Ubt5o6dg-#0Uk~@A&b=oinTXT(8|J?dGfdQ@LV3S0N(ghd7wZ z*0+KDjth3@>h&+&HZje3zwUc>;_Th8_gUBL|MRwqQxl!*cbu5GbdvGl;^*p+{11VO z6Q>;a^77~)QxA=!kZE-7bq;kCQLjJt*2z=XJughWoOtf7AN=@{|5m<1up;q delta 21584 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 DZjuq9 diff --git a/src/index.js b/src/index.js index 39214c94f..d941acc98 100644 --- a/src/index.js +++ b/src/index.js @@ -25,8 +25,7 @@ import reducers from './reducers'; import createMediaWikiPopupsObject from './integrations/mwpopups'; import { previewTypes, getPreviewType, registerModel, - isAnythingEligible, - isEligible } from './preview/model'; + isAnythingEligible, findNearestEligibleTarget } from './preview/model'; import isReferencePreviewsEnabled from './isReferencePreviewsEnabled'; import setUserConfigFlags from './setUserConfigFlags'; import { registerGatewayForPreviewType, getGatewayForPreviewType } from './gateway'; @@ -129,8 +128,8 @@ function registerChangeListeners( */ function handleDOMEventIfEligible( handler ) { return function ( event ) { - const target = event.target; - if ( !isEligible( target ) ) { + const target = findNearestEligibleTarget( event.target ); + if ( target === null ) { return; } const mwTitle = titleFromElement( target, mw.config ); diff --git a/src/preview/model.js b/src/preview/model.js index db8900851..310891001 100644 --- a/src/preview/model.js +++ b/src/preview/model.js @@ -124,6 +124,39 @@ const elementMatchesSelector = ( element, selector ) => { } }; +/** + * Emulates closest method for browsers that do not + * support it. e.g. IE11. + * + * @param {Element} element + * @param {string} selector + * @return {Element|null} + */ +function legacyClosest( element, selector ) { + const parentNode = element.parentNode; + if ( elementMatchesSelector( element, selector ) ) { + return element; + } else if ( !parentNode || parentNode === document.body ) { + // The `body` cannot be used as a preview selector. + return null; + } + return legacyClosest( parentNode, selector ); +} + +/** + * Recursively checks the element and its parents. + * @param {Element} element + * @return {Element|null} + */ +export function findNearestEligibleTarget( element ) { + const selector = selectors.join( ', ' ); + if ( element.closest ) { + return element.closest( selector ); + } else { + return legacyClosest( element, selector ); + } +} + /** * @typedef {Object} PreviewType * @property {string} name identifier for preview type @@ -217,17 +250,6 @@ export function registerModel( type, selector ) { } ); } -/** - * Check whether the element is eligible for previews. - * - * @param {Element} element - * @return {boolean} - */ -export function isEligible( element ) { - const validLinkSelector = selectors.join( ', ' ); - return elementMatchesSelector( element, validLinkSelector ); -} - /** * Check whether any kind of preview is enabled. *