From bc3f2e4876036f3a457f6cdaae4eb93b3ab3f06e Mon Sep 17 00:00:00 2001 From: Su Yang Date: Fri, 17 Sep 2021 09:48:13 +0800 Subject: [PATCH] Add bilibili Embed Service (#2550) * feat: Add bilibili Embed Service * chore: code format * chore: update bilibili icon --- public/images/bilibili.png | Bin 0 -> 6483 bytes shared/embeds/Bilibili.js | 29 +++++++++++++++++++++++++++++ shared/embeds/Bilibili.test.js | 23 +++++++++++++++++++++++ shared/embeds/index.js | 8 ++++++++ 4 files changed, 60 insertions(+) create mode 100644 public/images/bilibili.png create mode 100644 shared/embeds/Bilibili.js create mode 100644 shared/embeds/Bilibili.test.js diff --git a/public/images/bilibili.png b/public/images/bilibili.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe7d018eed657b7b65990138c989aacdfb55a7d GIT binary patch literal 6483 zcmaJ`Wmr`0x<*PGL{dVeyM`Q6N^0l^$r*;48DIt&Kq*OS0cq(DX{0-)5hPVW8VNx{ z>fpEcxA*yRzO$}ttv9aczMuPf-}_xZ){4;4dPYp}hyVivgIG;fN$;*j|GDun@16~~ zIU#oqElSx0rH`;jdD*x_FrI=Dwh$&Ym<<%72eAQryA464F)*;$91ToRCLm3q9RkL0 z^CyNM4RgIiV_-j;cQH5Pcsl z13MpQJ4rCJoGgM5!GJJ;PvhS>pyas>(qczJp8dja?n?oa_CNy$47VF6)bzPkuMq&FO8gXV)HS^j2F zf*|eO9bHk52sqOpMjKm%2TF$dPU*i&fVuvM7LNS)GTkkh0NTb?K!{)PPf33Vff4~9R~yo zfpkE)G6~;FV&VkZ*g3-g%y9h$0fB&Oa3snGZU<3Ql3~6h;dgWd1BI1EpNdGRND8Wm z3kwM;D=H`{iAhR`izzB93kyFL7yTQngs}5~LExyrvEct=pZ+8Ej~igFcbSzS?v9=i zu!=hZ#`IU!K*xX9BL0tj|HgvHR2>jXG|FzeDPu&^lPxn90y&L?;`w;k@ z;oa|?JvOJbje$YgtETkS0KKsHoG{8_##=V_GNs51dM#$TCW?mDR>efZEMqtWgE=Gc zDqicjsFns{!t#S0o;-2lt~XSSoEcVQBXi=?_0A7bg*lLiP}vq(bA0RTCB$tdX{e^| zpgP#w-`g8m`n>JGIr60qX@xu(*()C%6Yv#5o^@=#JI=hl+Pu9z&O!>=5jCk!*F{*6 z*tvA5ay^gJ3IpSkD+?uQ0{OXL3#X1trR0!AprxrIn+OG{BK1RpUVQ}5T(u7dY{P(rHU8N}W{wFqA%fTv7%td?HW#Ebkk$A&Cog$~2n~J+8H*A30yz zDo)2wj4@|GKHsy){k1vU=Xd2dV&T>D-ggIH8L23Y{6(yP6 z);g1>l8;YexWbGvLRVpjK&dzla}Qei1<0k?}F18Q!KAoDf{m z6t>CP%J9sN7j(HjWpYX-2~5Kne&*r5>|EU?T{!cDkvF@?PCXOvjSkJ~Y%kEyC-<=6 zrO;04o640Iexn<=mulpF^N}84y(4{ZoKHe}nPj`T3rjh-=ffo;Vj`X^1HkqV#6)efD5n1NU^q2QPI z-ZEMqdyLwRypuQea$hkM%^3`Q3bm)>NoR{dNy`@H_tw|+v2}1wJ#Q&{y`fnPj}py^ zPhv!;0N1i6ghZO1?6$=A^x3U1Clu{m6Q5=zKU8*3$^)9qU*g$MuAy>wCIi+!AjXOx)VIsoo}jqySzL{M@W2D6iwYgW#bU(&if)IQNZ*E?PSAs z8rqqN_-mv3OK?xVeah<6uprmU@@n=sS)%d1jmAnS>+kM*A{P@fp~iMulTN8qjcs%F>jtjc9|8PBsD27^ z>4Van#rdRLDBt_yRHEy^))_ZPQbz*<0_EXJ8oHvq1Xl^dqq@RHjYyZZ+aZIWDsD&> z-{MA$dSW=>Q=CspJuVjD!Tv_)wXNoj>lBLrR6944Eu(BO&-eGLvEJdW4&yJ?EeCIj zZfdn)Ik&T5hGD>t{(ZPrp4aN`o7VZdDBjyd(shWXy|%Z9IrlStPZIstFAB6L2NNFm zBSTx>aDw(~!$ooi2_dogemUTVm5d-`jwm|nWFr*+H~r)u{F9l<{hXE4hAwjS&y=H& zwckzNk!;{OSzf)v9UFl6>3QkuY7iFQu(o(d_+2x@^v$AK@(QgO3AUiIoUx2lxH(d7 z_9+*d)>6y$nwLet3crxz0x4X)hzJV3vm13iqn|L`eq(VvNHIZ5CSq%sSO>qn5T&HB zqFcpi-v0He(r#$(gklGu>lC@-zGi3r{Cd**XF)B+UWHhiC`xtSbE%#ZdD#uKxFp!& zQgq6re;S6j=R45X;j4WHsJsrCy;=J(ry|KcOWMJAd!p2}*m`Whun{zv?j8VID8!Hg zpV+gPDi63v6)8F2`l`#T(5*MC_K`A9EJs@QYGlkD5EH@xdGOoaq3P}~8GC}~(o0tQ z89h-C@>V0faevAM;xQBP5f^A_U<+PpLUn7sg|swdH|m#7AN41yMv7vonRptqgfc!otXgdv5gYjugmCUvYX z8qvLSkK$}IDm3k8dtmzm54qx??Q)~i>SpwhVQ}`!x)EV!?!LHOs?Zl+nFM1QRGs`> zyIZb9eFgCZC1zR?HmA9Uvj!`K|pS3>c^S~`A00~?T=FOGT7l1w-=(^Frn9Q38IW(OldBEUwIqv=TKT_MYd z>nyRL6*eG|g#}as7S#|#qA1<7QErPJ_83^Q0(<6#uS&i#S9Xe2+u6<|H*6{F{VutMxR1zpKbhEt_{sqq#>;@G)$niaHm+I^U35WIW(r6!RUP7 zArz;0-8qv!Jtcq0vcxGEI2<8njZaI@XVD-Z4DHkOH^O6~s(mtPNUEwoOEJ^63rnWv z*V%8?kw5*QFrGB%5Z@}JMzX#Z3AwJ0_R-hD{XL$rlNZ)U*KCqj>^$Y-VP?+D*+yHk zFIYwfj<3jrypn8h2I*yHOS5y%y!zW#-; zDD@Y|{D6LfbVbF{YYGi86Aw`oV82v1@K>K*GDlRT-VP<#S}6n#%6QsloiE8vkGm^K zp1Hr35x-T4klQo_JH>~U-Z>d?G4(}gWfb6`+64ix(Hp4`Z^ty$pFYJQ)>Lam<@Wc{ ze!EVBJ zFR0roTs0q%tk-=7AH5$dvDeGTB#utEHHX(?nQ|lz9!fmr;RXW9XFZWPoQSHId5n=+ zRQnjfD*)i}vtrsbCZhfXR);eE{v^V=1A%F3j`gVCl+tYzS4AtuTzm~S9INcS9fun< z$-uZawZGf&i0Dg4dKSY5GsEr1I4u`KtHF55!8EvEb{a=^ol8Fo#%#=`luy64s^ZBKF$tJ z<|DgokzOnd6qA!KB#Na|^xn2Eae1ep+&LvWVLZ#l@Mdo_?Y=Kh=oof4+SVjb{upYW zW)M}hf1s;X&KdZsMVODDOt+DUASSYCugd$Ph_bm%V2n=o&^Bb>Li>Twbg?+Yv*nFg z+iD4sKKEucSQBS}e2Gdfk?toE9Z{G93~r^o^m>G02$`%Ch8tyOh{is!Zt;doN?ZZA zvTlABx4^4iTfEt9+<<1f{?g6xus-B)4V~ht>N}S2U#-i9^{f{xX`P>TBBV{PyUYiA z)^*n=7f@68+~}A+9ufgtqOy0c#L5ie)L5deU_<>5({E-PWV1o?0WHqPQTvABY2+YI zsuALG_R(Oqk1b^ne}O{ZCA3TFJ+j0Z4NW^Wu;_}exsP7<3YnZdLb2}?Bs6^P$kQ$J zIFZhe+s1`ur+))>LZRg<{N9K+^?`8QB^B(mQexD#0gI;7x1m zFn|f$uI2mqX{C=7QbTiIBr^bUt#cK5KYvj{eqLtC3+}4Rf-P3t3m9vTlqT3~C7H<; ze0Xm2abSi26(wag)8$yp9_ia18E2?F>b!+UZwM?LUzMW!>kT`FA#aj2sYtp^O?SRw zsp90OeC|EMflKaS$JOv-!8jb+7irK`MvAA!_jLROUPKHD-(vPAw4)t6t$%TDI#Pv@ zCIGd?x880tNj|Dt)3dh+B#k^tGCc8@HL7V2e0E;$(!@)BA4^WQmvfp`_j{$>f#AnT zo(Ij)UV0uKi6uOL%z>GAD|6XXo1Umlqk#x==eC_HSCLG#so#3<_f1QP)#ErTns-M5 z7s)k|?`4hx?F$9T>W;CF(hux3=6+xjR(-i~uK8j3doNxc;r3zIB#`KETYzsgHC?i=Sd0RiANJ_iX3ZJ!C^| zw$EuiPN!q<5aaZ_5S;-Uy(_!4H*C*wnX+Gh_KckPreveg6Kb~}l_MMjycxckyEOf= zz+WLH>R~%|exP5oHitu2EGNUt$m2vOmB>fCcBs12qxQSkt*c%4vM+Xl$kDC zZs3MLV$7Yea0X5h5T=^@e$jgmd1ZWlRWmnju72G>78sERe}^6BQda!Zt$|AhSJq;T8rSRUuR=HL>fgNs%KNZtt_E?}rRbE)1b(D{HZRPZX2|?j(%F$ZO}wFmkg!nN zH#%Vr@t+I7$Ijny>RH!9}e^+_UIIQF8o5Wd((1d=|0u zc$Ns=5=)NS$bP#?n@@xbJHaA(=8|&_-|XbrGm`Iku%;N5n_Wx6*yV=deKqx%m8|%! z7}2`lIGTF$7f8x8G8e3-{?J89ymO=7>G{Fm4#7cKx5cf>^F1~z>HCZ3i9HWVi9;W^ z7%JkkJC`xN*7UE52y5^@9t9*7 zBiPURXs?@bNa`cOL^^!<$D1X_(jlOA865+D3qcKsnN85O%~C56^mP4;n})3t2JnI;y|O5C2ssE zwCfoKZt|LhJ=wy`alebE2Va+gFWo$0MTPSu1P?8qNoDgz(mW!;^bw5pYPDJVns>rJ zuk5~Urx;~}B%`3UR5Ccn|9U|^;4z>)VAW%_Idk|z>3sLFU?Y#gtDq`k##(p5H%(fc z`F9SHEkU;rB#lzU$#i%u`Ay&x;qLs!FX17Q$;5?0Hy6;CpI$tU_E4<^%&vsTdlDA- z8sTqTPC1)02~yJYj!0#55tuoNex=F~YvA*6VvUu04Q%)DKAPoM%!(~i6kj67mT6M^ z5$6ia4xE}hKgF$h`TKQ+;~kQbUyZ+o%aXjrIHdv#1IN>(>gw%Pk91`P8g+ zU)wO{&=Cv$z*dRdodrxzta0&5GzRP_@aWw2aT6kG0k@jH*V<9KqiK$#%2buV2XEh;J3ef0jPmBVXI^y|zY=5WwT)arVTU;X0)GCMyy6pftUcY5~#5BE< z)Uo?QuBu4sSRAy-Kzom6LRLU~kj4A=CpBR~t?Tl^svyBp`kGAzMz^Ufu#pPwVUPAP zebtUN`?bJr?r_H`e6VJ-7>z`Hf&I-9_| zk5lm+!ldgb@yv8Qr99L2+9aDJ^X{4jnYoOLzp)P3F_*lGuU|PQ?Mi`0Y>V}hY^~Yx ztM0w(vuL7;)U{{VA1Fv&`Wdv^X4f^Q-=uKV{@~jARp8}kGO3@YdC=dgqV-6*?k(Homk|)cD|F-?k(twV(JbA%0>%Xz?v*r{S6Lj3KBE zyOakRczpGVwXqRLwt)IT z$Zl0_`qzwYdIBPmA_HaYo&DjD-TR8Fi~u;BEJ?ZqkjaTdBRg-AMPRq!Y00>hdLAsG-r0Ffc}g9Bq C3={DH literal 0 HcmV?d00001 diff --git a/shared/embeds/Bilibili.js b/shared/embeds/Bilibili.js new file mode 100644 index 00000000..7027311d --- /dev/null +++ b/shared/embeds/Bilibili.js @@ -0,0 +1,29 @@ +// @flow +import * as React from "react"; +import Frame from "./components/Frame"; + +const URL_REGEX = /(?:https?:\/\/)?(www\.bilibili\.com)\/video\/([\w\d]+)?(\?\S+)?/i; + +type Props = {| + attrs: {| + href: string, + matches: string[], + |}, +|}; + +export default class Vimeo extends React.Component { + static ENABLED = [URL_REGEX]; + + render() { + const { matches } = this.props.attrs; + const videoId = matches[2]; + + return ( + + ); + } +} diff --git a/shared/embeds/Bilibili.test.js b/shared/embeds/Bilibili.test.js new file mode 100644 index 00000000..44e4749e --- /dev/null +++ b/shared/embeds/Bilibili.test.js @@ -0,0 +1,23 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import Bilibili from "./Bilibili"; + +describe("Bilibili", () => { + const match = Bilibili.ENABLED[0]; + test("to be enabled on video link", () => { + expect( + "https://www.bilibili.com/video/BV1CV411s7jd?spm_id_from=333.999.0.0".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://youtu.be".match(match)).toBe(null); + expect("https://bilibili.com".match(match)).toBe(null); + expect("https://www.bilibili.com".match(match)).toBe(null); + expect("https://www.bilibili.com/logout".match(match)).toBe(null); + expect("https://www.bilibili.com/feed/subscriptions".match(match)).toBe( + null + ); + }); +}); diff --git a/shared/embeds/index.js b/shared/embeds/index.js index 3f53c865..e0c08d60 100644 --- a/shared/embeds/index.js +++ b/shared/embeds/index.js @@ -3,6 +3,7 @@ import * as React from "react"; import styled from "styled-components"; import Abstract from "./Abstract"; import Airtable from "./Airtable"; +import Bilibili from "./Bilibili"; import Cawemo from "./Cawemo"; import ClickUp from "./ClickUp"; import Codepen from "./Codepen"; @@ -66,6 +67,13 @@ export default [ component: Airtable, matcher: matcher(Airtable), }, + { + title: "Bilibili", + keywords: "video", + icon: () => , + component: Bilibili, + matcher: matcher(Bilibili), + }, { title: "Cawemo", keywords: "bpmn process",