From 0d1366aa576f843fe84c8bd316387f5922fd00da Mon Sep 17 00:00:00 2001 From: Choi lab Date: Tue, 12 May 2026 11:10:14 +0900 Subject: [PATCH] first commit --- content.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 9519 bytes manifest.json | 20 +++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 content.js create mode 100644 icon.png create mode 100644 manifest.json diff --git a/content.js b/content.js new file mode 100644 index 0000000..c2171ae --- /dev/null +++ b/content.js @@ -0,0 +1,80 @@ +(function() { + // ボタン群を包むコンテナのID + const CONTAINER_ID = 'yt-swift-control-container'; + + function updateSpeedButtonStyle(btn, rate) { + if (rate === 2) { + btn.style.backgroundColor = "#ff0000"; + btn.style.color = "#ffffff"; + btn.style.fontWeight = "bold"; + btn.innerHTML = '2.0x'; + } else { + btn.style.backgroundColor = "rgba(255, 255, 255, 0.1)"; + btn.style.color = "#ffffff"; + btn.style.fontWeight = "normal"; + btn.innerHTML = '1.0x'; + } + } + + function createControlBtn(text, title, onClick) { + const btn = document.createElement('button'); + btn.className = 'ytp-button'; + btn.innerHTML = text; + btn.title = title; + btn.style.width = 'auto'; + btn.style.minWidth = '45px'; + btn.style.height = '30px'; + btn.style.marginTop = '8px'; + btn.style.marginRight = '5px'; + btn.style.borderRadius = '4px'; + btn.style.fontSize = '12px'; + btn.style.display = 'inline-flex'; + btn.style.alignItems = 'center'; + btn.style.justifyContent = 'center'; + btn.style.transition = 'background-color 0.2s'; + btn.style.verticalAlign = 'top'; + btn.onclick = onClick; + return btn; + } + + function injectControls() { + const controls = document.querySelector('.ytp-right-controls'); + if (!controls || document.getElementById(CONTAINER_ID)) return; + + const container = document.createElement('div'); + container.id = CONTAINER_ID; + container.style.display = 'inline-flex'; + container.style.marginRight = '10px'; + container.style.verticalAlign = 'top'; + + const video = document.querySelector('video'); + + // 1. 10秒巻き戻しボタン + const prevBtn = createControlBtn('←10', '10秒巻き戻す', () => { + if (video) video.currentTime -= 10; + }); + + // 2. 速度切り替えボタン + const speedBtn = createControlBtn('1.0x', '再生速度を1x/2xで切り替え', () => { + if (video) { + const newRate = video.playbackRate === 1 ? 2 : 1; + video.playbackRate = newRate; + updateSpeedButtonStyle(speedBtn, newRate); + } + }); + updateSpeedButtonStyle(speedBtn, video ? video.playbackRate : 1); + + // 3. 10秒スキップボタン + const nextBtn = createControlBtn('10→', '10秒スキップ', () => { + if (video) video.currentTime += 10; + }); + + container.appendChild(prevBtn); + container.appendChild(speedBtn); + container.appendChild(nextBtn); + controls.prepend(container); + } + + const observer = new MutationObserver(injectControls); + observer.observe(document.body, { childList: true, subtree: true }); +})(); \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d66cd4a290f91f09e32460b491d6cb3e8cb4b0 GIT binary patch literal 9519 zcmbt)Wmp`+)92!_xVyVsaF?)Xuth^yTmvjl@Wma11cJLukl+ND;1b*+Sa646N8bBC z@7??L?n6&kRo7J2{GOhfuI`G|cn87+k^un#0H%_nyw+_(H~8bUU@XAqJb*_fYtr4!8L!jKYqO-+!n0wrmvbmToj=me#h863nMDM?JAxR>aw1qVwvQyMRakB+XQUJ`WwWmxo;{wL<9lN5KcuoBgh zSNM;{DvPE^yKp7=W=qf=H?X<5#i?Hc#2kO8*}N z@|LdVF1AoNTPH`Fe+Es>oZQ_c=-l0HEkvzMtpv<0ECe{sO!+N1d3h~NIZZA2c{wfk z`7MM5c!l|_c+Keki_t6bo~zuuYhp>8{y{V;`tZyKU!4X#n$pQihnL8dBy*0 z{C~*Ax&H<7e+4G_za_8F`bzybGXG%uZ*(mkUm^8;#f~F64IKcW=T(xI0ecxAXMM`d z((!v)-xHr$JcnqLegdaX__y18)V5QYFK-)=vA=d4D zSfiTF6Y^20VXUgtW%4U-ASw&edw;lzXM(MR&-3%oh~C*qLLwKBVAOJ+J*e;>BYj^! z3cu_ptQzK$plNsN3T0nV7-mH4#q}n0i zmZl@%Aiz+vqD`*DHx?k_N0qJCh7&bE04Mj%UOTK__h>9fbP;8a$axSxaY7F3z+aMZqq+zTI_`aeDzuf85`{X19}b=6!!p7MD>mz# zruS&qK zGuh^Zy)juc#E0=Po0$Fd;(kF)!|tEsOjt8*WIkEb#`-tNcdG&6M@N4vIJfmc06*^T zr+LGI&MRRsa<`f^AG)*-1r>U{S(7buweOM+n#@$u1;=CuDjBg{2HWC9#y4a{nHg?U zi}mfWDyujLyuO&`PATtwI@$q!J+4Go0-LIbWAga^~eWFM9yF9~__hSudCHx{6UY zJ|CK{s(;+*i-g6+>blTJViVWh=5KV;m8MmttSQhQ)tvWDuYle~q+>}foZ>->C$kd7 zjW$PhZd&zRCvcd)VZW?hH$o<5jmhB`u5d6;0+*}9V3Y}wVW2UEi7lKf*=y47fJGBF zlPG~Id5mOj>nkRyR@*-+2C%yuXdMouOp&6(c@M$gPbI&yMC?B6?4;&&zFjR;P7jcW zBGodWus`=qB1^qhwrkfOXD8mM`@oHQpF>t?_fmC5D~M@Ti37&NV<-5!jnsf*7 zLOp(OE_|v@KcNnj(*_vhI<~^kJ#zQqC46);S`Nn$`EA@!rhl>FKm?T$XOY4q?d-NW zOy~h1$@#kzp9?jQV&5uAvHd;vCv|b%xOjn8_g|~4N6CQzbl-NIn@=<5Ry(fJju&RP z3_WAzvku|xH-<&!7RbMEk`=Oe)nNDx=QTcS43>o*3Hwu#t3zPt8>rSOpo7$Ko$BQ4 zh`kq)%!kM?Z;-;nUf(_R?Doa+0i++td4u(H({jDcnB9V?jc@mi&Wv$_J_Lmb^foF| zu<5>lu>2^b3O)Nd1heb$3J6SdMT|~26s-@x1*w@ZmsUTvTqA4$o+a%1!n}D>(;ba1 z!-%~o2yHk<>_0N~?gobp*9UcKqF#PJD=NO6%XRmv+R}ypt2=JiE5eTUT@J@4&J$u4 zxh8n@T#h7sxqUV#RTJRb(=H0X0L2#fFF0O_gz4iY@{Ur`QV^Jp5UzQ@Z+l7&$>sKb z2SR=!EYU^G#xI~}f!cjUP|7#{s8PGQiM@)rI&w&zgM*?2@DY>>_c@)nS@ummo+=hC zIB%!?LU_W1=od7Dv`NK-w9KE4rBK7Hd%oCFmw{=FOc?8pN03f8%%ZuvDVo=18xIdSK8i@eqPJ?!}E3f^)SX_`$lk=xR0X}ixf*Tl|ZTd6AFbs z0nTlxlaX)+q+0QFIo8A|cq@HdFtz1s&#!@4j_ur;Km;5UyG58JFFUEU?^{y`QG+x@ps7pZCFZw}*PKXLs+tgRbKdOGHh$+g-nk2-XM;2E zc$KwIT z8l)j2CmLW#z{#X&fNU+)mF0+lrSq_#Hv$~se=?AO=90QrYQN){*OL>YKK)aj?#} zrH*)RAIP39l*tVocaCarwXmwKU6aiAthB-!4yBo zQ_ktV@Jeoa8q@#9icC^Zw_=O`tHROn{AnHzLA6qi9 zr5(!(_Op$o(ZROvuk)h^uoCc!dE`zXu)4!{>n8t>j2ab@Qwz-FP(o%@3ujBz$maZ| zCDndd0sX^xP0h=sjo&4=9z^YnjCU|_dBs~Q&Ps49^e}LzEz5c)UZ^k6Z5VR28l60{ z-zaFNe0Q1+U*iRb71gX|q{R$~Y?p4eyCL;?0|rmXf;3}eUF%V`s<2+(+k<^sXie>6 z2mH$@8?1vN)RPIyUI zG;lEUbQ_3!oh8QPozWDx@^Bl|9E1GO@RH28;Jr51H$VZa&0~Xek0xyzzKUmp=*7Zi zopscFJc<_=*mzy6sFIk$PiUm&!4tW_L-rwi+{6=>zgub_r1}k-~!Kay0(H3f6 zEjk#42mWeZ3~6bfZX9c2D66@<*u2TPQ+5apTWMAANgt1IHN9STl3z}!S^Q2elV6_M zODjJ-$^CLB7sVp_8nu~?@ACLe&AnS&Fl|HMKqyzYb1s&l#+yt?$gBK4gJ2BZ1d1Z= zflw%>@B(z^@yWaTX4?Ufr=bFUZ`xdSW-h9D`Eo)010#j4nKO!B9Z!hB!>xZ|aWj!U zbYC;dT1$S@gcVbdE%F&et9=7MhMp^Kf{zD6SLyG@0NyXlK2jE}&jG=L!RfP>y_Ip< z7y3Ts7{!!aEuP$v$0i5FaVSX(VX3fJMhLX+C<7bHW5WoJtX*|e`?)T_9q9AY|L$rZ zIbIm&B=pfi_FFWX`k|fW_8lijQ*fN-+23nMUp-BC!j$G>y!onowbn)@cl|#{g=#5f z5h^*q6>f*rCcDxx7p`c;Z(TFm<|Bmf$dLjvREO^H)Hb{nNKj>siXvFag9EBGBiV^= zyxSjMZYGWSD!p4qA5PYSJptYYyt3e5I24&oCKI~LD9}NY$w4N`qKwHXS(|2ePuS`0 z@0QNaQ7$QpdK7M;87!fkOe>pKN5FDoHA#vt4hydYqSKo&77zj zlqV_8PV%yx@~|06e)K0(!J!I4E98%Bu`L`b&U{pN*IDl>l7|;9-I?@{(SbyeZ*nD> zX2L~CcTDe65oM>A#i6(w&Pq$!O2`~sVqpKRv?o!c5_ zzHo?CM@!!V`kYWP*DhthiIG*mfmP(L3q9I+!m|7o@j{XDVjKdSxvv^qe6NPzwr|&u zwA|ICx=ziG+>btBZ&UmGaLwn4p)(UCuG!@9;1Qxt;ctG10dFyrKNXQps$O}%iD{HY z&0pw)^}I1{wIX@Z#`|hBUydBgHn+bv;(_T~pUqlK(AJ)C>@QvSGn~K!Z?FH}nMznt zMf_VN={uH{yIrp5-Rb+som0vIu^Pki;6W?JyX~e}v??!A$WCz<((9~ty_No2MVPa| zLbX3BqgVlqjeBG-xnkN0D9)11$DyJykHyu=+uUreaJQ?b&~Bp+bXq2Wz|?Pim! z5%QWBqDHkBo)z;@^ZWqJtz*vmzL}?t0jHyPJGMm>7~HCZGhzedkD_0bwaGg-JD=(= zg-#1=l-pG~ke|%l5NVEtuz^{#%O|oA6@ze%y1u?NRA`z^A7ac4^79-Iq5B%2;#?Ye zA*ZxT$@n~I1H{ten97=oi0Yx?^}I$r`Dt!uW&%T?T_Zm;WF9Nc6jkui zm04PVAaUu&-4LcwtL3zfdE(kow$&Gl!~1;eY!vfo{dAPf@>6s1SoM+8Jx4UkmcUS6e?Wjf`>|D+&*q(nP)QQundt4#Tj> zeA+!l;lo0MG(X-LOZu5(!wM8)heVWlH^@Cc(aJF76wEm5?rBkEC}~tpJXXo%PdW|r zn~&cQCgSW1vMu}vkIbCc1DGFVCWNdkk__Yogl^FU>%o66~i z(4sYjFlf1$;ST*Hik?@n&k<7TUu=RevQkSQU9ENH4fm8sTSlOwB{=>^fTx^gCUw>(PN`wTbb?y=)k1$zoleyz9Fi!)BNvqKfbrJ0rshxj4;6(U)te(~2EBGtU%5gsLM$fB#9z<@6@SGucvEeAt7(x{-_LC#_bNO0X_|Ra& zf_NUG-LvXXBBSz%8z6Xn(R4t}s_b4=PR|PcVNKl6g`%ClBi=9trr_j}=8|l_o;v_r zmcm$+VBmCAA0zSd?+LOfr7@EwT8Jk`aTXeB4og6;orUT)JIrGCEURgJYeLeOB;eu! zz4_&i;`P_F%P)3U5YMqi&6OQJ1*A+#(w&0!#KuU4@ORS|d*MLxphPT(w&Z!qStVse ze`;bz`jjhmSOoYYUH0Adn8z=QdYKIq^=i56i5J6i=-h!^>M`_hJ4R_ zT>~rXDFC$yuB<7)+<5i*Epw3K;u+R+5Eh8-9xb;NM{U3{H!)6nJPbMGB8Z~=G#5C6 zKmd7=rTv=bZ&z>HG~9yP+2FgJ6O==TJDo&`alE(gx!IN#2b!dHLvteL_q9w#cM&#Pc4s z%oxjHQE{;A|6(&Ygq!48GUz7aAUX)9S&K3l~ zb6#?M;$Fdzujy1ipLk9jp09DR+bqT#(pBw^`^F;nhlF!2H$R~s-nTv=#Fe8E{=6t^ z^nM9>`3C*^L7be+-28je_~NC(Qwbyk{K2*kZIWW=<2Klu{?h%_qLr^8AI}*~2UBJ+ zH20;eF^$1wn#HMJmp*W+&hzdaD~-FsomY?}_^s{TsR@!i)=-Rf^rbWK8Hjts^zo4~ z>IiAdaQG>P8?4C3Li#2M&5!3{^%sFTI!$(*e;8fCu=$ZgK*Xl7#`RF=?UR>Odlq!Y zsz)uO%=cD`<%8dM$`A5m<9T6sjbrNBr5ayt);FF|S(Va_ljO*AEUk?q?2^mp5etOi zm;#rj(6IwhwlH;DL_OS3!5M)F3Jq~MMaI{ao5iRya{-pZF^f8nK%H)?VxeTTTq=6ARu_ z+4UXU+mou#%ha=XlJCbT=1?v*WKvT0j8vC{ex4Evw*oW-)VjL+ZNwh*-r1PJvMzJp z7%nq)I~z(cFXQ#;vp00;Bt5u0cq-cO-*j_fs@L|r6}00;He$v3E?YK7{_M1J#DHrT zwO|YTuAvX^pFzp8j>2_{ zIybBAdxtiD;KJ8(UA_j9-snsGk6D!4gR z=D6Sg3MbZ3v=ar=9z@Z8;I$Y=79wy?$35ZF{z_QU-myx6x&Y+Bni?BziiJrT%>W5 zpGZiKSmqciPuEv>CQN5u$VQ4h!TBfGX{*{vdc5a$dbWfuvlC`>fB|n)3k*^sT@8K8 z?-LHY2lU|@J`_e)X=qe;=26jdD`f*yXHEwd-AB!?sRO>syZjOR7<&vC1k7g8C+4yW zKPaSe*VZx%7+R>dH!Cg07fwFVj`ej{-sjASH9s|YIEqzeQCFUr*n4K8+!Ebe z<|&h@5%sU}SlG9mtFDwr(DdVJanSXf*;~#sa%MwqUwP^XqTwcTPtIyX zQk!H8jM~o%|MuwsJ@e)_AU*`H)@J;}x32@Wk#FDzXtKk7hLxIY#E@>?OK4Kqv{>G? z_^rm5#!Nd+Ge97hz!s)6=X2#xRykfoADDCA2Yi~2Swl2gA29Gc>TEvUEE#%8H(%8g z?pZXOfrUr(Zd4(^6h&5{Q=l{EzKwY3i8J6`yXfyVm^{2p>ReEq=0}WEtFG)LkRmTV zGb&T&D8HoY32GkccXh?QMI(cuYOy7?UeFiTJXiRYRIInbhOdQi#P8AD)*;b6gc01} zh7NXb)&WF{vA9GP=l(^GA4lkY@4*kGdVoNZoa1?;u3fW4%i0c($u@WvQZ)zwzCi25o>>9GDhSsVlXZXH)hG+A55$)dU*0W&l-RUsY;)OI_-famn^T&7%=t|Tv1vKC zRR9oCQerOk0l+AQaZ@+5A2}5WlDAtoWk6lF+D)fg`!X*c!Y9Yy{`P*y{vP9;0RXmb zRyfsiyW2IelQgQBAe)|rhe0*4_D^W8OVdR>^W`UU7mI+|;n`9-qw_DgduJ*1+^ZJ| z$~hea9*7{^pEioKSOPX3m5@d!B#~p! zjpp^h7SJ!L6};D#yg%{d_M+h7FVZ4imStj+NABRJw?`HV+C*L{n!qx!Mi~K{NF540 zLa+zJZ^0U?$ab$SXy~}~pX8ytf`J>kxzLe?kGmTtUIlGyz+7QK#dvsh=SrepZ*2eF z^gGX(+_B!ZL7QYHH(l+LJ#1$lyX5Hd1|LU=qRwk9b-R42)=&HbK@ zxAA)3~n1(V`Q-FQN|`4wy&ht zeW%Umqed^;>`HU%5j+0&{-NMYc@?K6UL~4t9mu7xZyS91roNCkPIR42O7nK^7lOPi zJm7B5XCu^yM&KP=ig|$fH*J<0+(*tJa6xQ=f-_BxNIo8Zz{2s~_zc54U5)b279#t{ z>rJ{wB_T#79Dbd5(}!Q{y?861NhqAdRzt68rrH5i4^%4`tcn&OCm_!ah;7gtfv|(b ztZKsn&!Rn*x}Au`Zi%1|Td%pEa5%K@v*yoY7^_7c8ycXP>8cEbCC?DmNVL-`9EZ|f|L2Td`JX?RrkYc5K<Bk(`4S%B_4sfT zs_}YW)-FB7b+8p_!WgurcH%k(MP6oNX><2&=3kPO#44Wnfvpcu&Zy1C#_YM(7E6gy z2s|%J5T7OMoWl5IZWkLs5+bP*G{&K-cOd?R=QZ+c{Y8wBi7Buvc)2UH#!%XC4lkzeK$=7>Tm;J?zhAP-Kt=y%|Q8 zZ-JLz)capKW0_S-6vUy<8El+l6K#@4qv)IB;If<@rymhIoz9CDiIx&X_{3c}_5m24 z{%9Uf@XW^b(fX)1H;Qp;o8skt2dQt!Xr=L)3srUu@_ZE8;$zqZvaK~1KA8rF^c)fN z)st(b&M!2%C2od%z!7?bw!kJ?zF)H3pcJusS`VFN?TsZD3i3>EEINgGY$?qdBbv8I?>X5w~!( z;do_<_9egUuNLaG43J~^6{QDx6pVa!)}R$mhc@*rGd!qiy(2MS*Ui=^M3WBN?Se<{ z5NynNM}ZOTetMSC`sZBbO2qX()BtAvruf%HR6Up3tP@pQWTq~U0341^7H4PRdr35j ziA7FJPz(+tYMC+~b@-SS7o$=gsP0Y}%rO47)_qh*Ze;vOv~{nC@k$x1iL00+P^$;n zk;EmSxPnPD7t{wPwDss?Gm`84S;wT`P2-`mlzgGT^U)GcOgjHZj2=81%Xk1K_Q~*8 zcn}z!L+p?)P9!8&T?LUx{?zJjE&QmlPG**iIhxUKcP1QzH86j0v?qGyfI>pr1#+tF zC1}+17YgU$6FT74Cp_i{d)sPl5vHYr_DNhk(V;jRL+4GHa{sn|$5+Nr%+|B%tk%aV z;JxlUB5)IrWAW9n1Ps{&4LzJ1mPaLT{Mu&Qd8bxd%|TcNPdWm>qd{$XUy!o~%jh)u zV5rF`Ji|rPwJ}!*r@_^h-~Mo-Xh2bN5SRmLFWQa{ErX*3{QZT*pMo_99LslZGI{7; zYfPMlH-#L2U0z|!**%Ui7)Mih!M!oNq>mkR2$q0O%+qs26H;)zCtFCyA0r51+dW&_ ze@_3VY|r9$