YouTube 动态视频网格

根据窗口宽度动态调整 YouTube 视频网格,以每行显示最佳数量的视频,覆盖默认的 3 个视频网格,以实现响应更快的布局

  1. // ==UserScript==
  2. // @name YouTube Dynamic Video Grid
  3. // @name:aa Youtube Dynamic Vidiyoh Giriid
  4. // @name:ab YouTube Адинамикатә видео џьбара
  5. // @name:af YouTube Dynamic Video Grid
  6. // @name:ak YouTube video grid a ɛyɛ nnam .
  7. // @name:am የዩቲዩብ ተለዋዋጭ ቪዲዮ ፍርግርግ
  8. // @name:ar YouTube شبكة فيديو ديناميكية
  9. // @name:as YouTube গতিশীল ভিডিঅ’ গ্ৰীড
  10. // @name:av YouTube Dynamic Video Grid
  11. // @name:ay YouTube dinámico video rejilla .
  12. // @name:az YouTube Dinamik Video Grid
  13. // @name:ba YouTube динамик видео селтәре
  14. // @name:be Дынамічная відэа -сетка YouTube
  15. // @name:bg YouTube Dynamic Video Grid
  16. // @name:bh यूट्यूब डायनामिक वीडियो ग्रिड के बा .
  17. // @name:bm YouTube dynamique vidéo grid .
  18. // @name:bn ইউটিউব ডায়নামিক ভিডিও গ্রিড
  19. // @name:bo YouTube Dynamic Video དྲ་ཚིགས།
  20. // @name:br YouTubevideo ar video dinamek
  21. // @name:bs YouTube Dynamic Video Grid
  22. // @name:ca YouTube Dynamic Video quadrícula
  23. // @name:ce YouTube Dynamic Video Grid
  24. // @name:ceb Youtube dinamikong video grid
  25. // @name:ch I Videmic Dinagian Dinagina na taotao-ña
  26. // @name:ckb تۆڕی ڤیدیۆی داینامیکی یوتیوب
  27. // @name:co Gridd video dynebte youtube
  28. // @name:cs Dynamická video mřížka YouTube
  29. // @name:cv YouTube динамика Видео сетки
  30. // @name:cy Grid fideo deinamig youtube
  31. // @name:da YouTube Dynamic Video Grid
  32. // @name:de YouTube Dynamic Video Grid
  33. // @name:dv ޔޫޓިއުބް ޑައިނަމިކް ވީޑިއޯ ގްރިޑް
  34. // @name:dz ཡུ་ཊུབ་ ཌའི་ནམ་བརྙན་འཕྲིན།
  35. // @name:ee YouTube ƒe Video Grid si trɔna .
  36. // @name:el Δυναμικό δίκτυο βίντεο YouTube
  37. // @name:en YouTube Dynamic Video Grid
  38. // @name:en-GB YouTube Dynamic Video Grid
  39. // @name:eo YouTube Dynamic Video Grid
  40. // @name:es Grid de video dinámico de YouTube
  41. // @name:es-419 Grid de video dinámico de YouTube
  42. // @name:et YouTube’i dünaamiline videovõrk
  43. // @name:eu YouTube Dynamic Video Grid
  44. // @name:fa شبکه ویدیویی پویا YouTube
  45. // @name:ff Video Dinamiik YouTube
  46. // @name:fi YouTube -dynaaminen videoverkko
  47. // @name:fil YouTube dynamic na grid ng video
  48. // @name:fj Iko Tube Dynamic Vidio .
  49. // @name:fo YouTube Dynamic Video Grid
  50. // @name:fr Grille vidéo dynamique YouTube
  51. // @name:fr-CA Grille vidéo dynamique YouTube
  52. // @name:fy YouTube Dynamic Video Grid
  53. // @name:ga Eangach Físeán Dinimiciúil YouTube
  54. // @name:gd Griod bhidio fiùdalach YouTube
  55. // @name:gl Rede de vídeo dinámico de YouTube
  56. // @name:gn YouTube video dinámico rejilla .
  57. // @name:gsw-berne YouTube Dynamic Video Grid
  58. // @name:gu યુટ્યુબ ગતિશીલ વિડિઓ ગ્રીડ
  59. // @name:gv Ghuir Gheuree You Tube Grid.
  60. // @name:ha Bidiyon Bidiyon YouTube
  61. // @name:he רשת וידאו דינמית של YouTube
  62. // @name:hi YouTube गतिशील वीडियो ग्रिड
  63. // @name:hmn Youtube dynamic video grid
  64. // @name:hr YouTube dinamična video rešetka
  65. // @name:ht YouTube dinamik griy videyo
  66. // @name:hu YouTube dinamikus videó rács
  67. // @name:hy YouTube դինամիկ տեսանյութի ցանց
  68. // @name:id YouTube Dynamic Video Grid
  69. // @name:ig Gdị anya vidiyo YouTube Gbara
  70. // @name:is Youtube Dynamic Video Grid
  71. // @name:it YouTube Dynamic Video Grid
  72. // @name:iu YouTube-ᖑᓂᕋᖅᑕᐅᔪᖅ ᑕᕐᕆᔭᒐᒃᓴᖅ
  73. // @name:ja YouTubeダイナミックビデオグリッド
  74. // @name:jv Grid Video Dinamis YouTube
  75. // @name:ka YouTube დინამიური ვიდეო ბადე
  76. // @name:kg Video ya Video Dynamique ya YouTube
  77. // @name:kk YouTube динамикалық бейне торы
  78. // @name:kl YouTube-imi dynamisk Video Grid
  79. // @name:km ក្រឡាចត្រង្គវីដេអូឌីជីថលថាមវន្ត
  80. // @name:kn ಯೂಟ್ಯೂಬ್ ಡೈನಾಮಿಕ್ ವಿಡಿಯೋ ಗ್ರಿಡ್
  81. // @name:ko YouTube 동적 비디오 그리드
  82. // @name:kr YouTubeye Grid
  83. // @name:ku YouTube video Dynamic Grid
  84. // @name:kv Ютубын динамическӧй видео сетка .
  85. // @name:ky Youtube Динамикалык видео тармагы
  86. // @name:la YouTube Dynamic video eget
  87. // @name:lb YouTube Dynamic Video Gitter
  88. // @name:lg YouTube Dynamic Video Grid .
  89. // @name:ln YouTube Dynamic Vidéo Grille .
  90. // @name:lo ຕາຂ່າຍໄຟຟ້າວິດີໂອ YouTube ແບບເຄື່ອນໄຫວ
  91. // @name:lt „YouTube“ dinaminis vaizdo tinklelis
  92. // @name:lv Youtube dinamiskais video režģis
  93. // @name:mg Video Video Dynamika YouTube
  94. // @name:mh You Tube Vidio eo an juon armej .
  95. // @name:mi YouTube YouTube Video Grid
  96. // @name:mk YouTube динамична видео решетка
  97. // @name:ml YouTube ഡൈനാമിക് വീഡിയോ ഗ്രിഡ്
  98. // @name:mn Youtube динамик видео сүлжээ
  99. // @name:mo Grila video dinamică YouTube
  100. // @name:mr YouTube डायनॅमिक व्हिडिओ ग्रीड
  101. // @name:ms Grid video dinamik YouTube
  102. // @name:mt Grid tal-vidjow dinamiku ta ’YouTube
  103. // @name:my YouTube Dynamic Video Grid
  104. // @name:nb YouTube Dynamic Video Grid
  105. // @name:ne YouTube गतिशील भिडियो ग्रिड
  106. // @name:nl YouTube Dynamic Video Grid
  107. // @name:nr KunguMGUMO Susa .
  108. // @name:ny YouTube Dynamic Video Grid
  109. // @name:oc YouTube Dinamica Video Grid .
  110. // @name:om YouTube giiridii viidiyoo daayinamikii .
  111. // @name:or ୟୁଟ୍ୟୁବ୍ ଡାଇନାମିକ୍ ଭିଡିଓ ଗ୍ରୀଡ୍ |
  112. // @name:os YouTube Dynamic Video Grid
  113. // @name:pa ਯੂਟਿ .ਬ ਡਾਇਨਾਮਿਕ ਵੀਡੀਓ ਗਰਿੱਡ
  114. // @name:pl Dynamiczna siatka wideo YouTube
  115. // @name:ps د یوټیوب متحرک ویډیو شبکه
  116. // @name:pt Grade de vídeo dinâmico do YouTube
  117. // @name:pt-BR Grade de vídeo dinâmico do YouTube
  118. // @name:pt-PT Grade de vídeo dinâmico do YouTube
  119. // @name:qu YouTube nisqapi video rejilla .
  120. // @name:rn YouTube Video Grid
  121. // @name:ro Grila video dinamică YouTube
  122. // @name:ru Dynamic Video Grid YouTube
  123. // @name:rw YouTube Dynamic Video
  124. // @name:sa YouTube गतिशील वीडियो ग्रिड .
  125. // @name:sd يوٽيوب متحرڪ وڊيو گرڊ
  126. // @name:se YouTube dynámalaš videofilbma
  127. // @name:sg Grille ti vidéo ti Dynamique ti YouTube
  128. // @name:sh Иоутубе динамична видео мрежа
  129. // @name:si යූ ටියුබ් ඩයිනමික් වීඩියෝ ජාලකය
  130. // @name:sk YouTube Dynamic Video Grid
  131. // @name:sl YouTube Dynamic Video Grid
  132. // @name:sm Youtube dynamic vitio grid
  133. // @name:sn YouTube Dynamic vhidhiyo Grid
  134. // @name:so YouTube Dyube Video grid
  135. // @name:sq Grid video dinamike në YouTube
  136. // @name:sr Иоутубе динамична видео мрежа
  137. // @name:ss I-YouTube i-Video Video Grid
  138. // @name:st Youtube Dynamic video Video
  139. // @name:su YouTube dinamis spidol grid
  140. // @name:sv YouTube Dynamic Video Grid
  141. // @name:sw Gridi ya Video ya Nguvu ya YouTube
  142. // @name:ta YouTube டைனமிக் வீடியோ கட்டம்
  143. // @name:te యూట్యూబ్ డైనమిక్ వీడియో గ్రిడ్
  144. // @name:tg YouTube Videcy Videctic Videc
  145. // @name:th กริดวิดีโอไดนามิกของ YouTube
  146. // @name:ti ዩቱብ ዳይናሚክ ቪድዮ ሽቦ
  147. // @name:tk Youutube dinamiki wideo wideo
  148. // @name:tl YouTube dynamic na grid ng video
  149. // @name:tn Keriti ya Dibidio tse di fetogang tsa YouTube
  150. // @name:to YouTube Dynamic Video Grid
  151. // @name:tr YouTube dinamik video ızgarası
  152. // @name:ts YouTube dynamic grid .
  153. // @name:tt Youtube динамик видео челтәр
  154. // @name:tw YouTube video grid a ɛyɛ nnam .
  155. // @name:ty YouTube
  156. // @name:ug YouTube ھەرىكەتچان سىن تورى
  157. // @name:uk Динамічна відео -сітка YouTube
  158. // @name:ur یوٹیوب متحرک ویڈیو گرڈ
  159. // @name:uz YouTube dinamik video panjara
  160. // @name:ve Giridi ya Vidio ya Dynamic ya YouTube
  161. // @name:vi YouTube Dynamic Video Grid
  162. // @name:wo Video Dynamique Grid bu YouTube
  163. // @name:xh I-YouTube Dynamic Vidi yeVidiyo
  164. // @name:yi יאָוטובע דינאַמיש ווידעא גריד
  165. // @name:yo YouTube ìwò fidio fidio
  166. // @name:zh YouTube 动态视频网格
  167. // @name:zh-CN YouTube 动态视频网格
  168. // @name:zh-HK YouTube 動態視頻網格
  169. // @name:zh-MO YouTube 動態視頻網格
  170. // @name:zh-MY YouTube 动态视频网格
  171. // @name:zh-SG YouTube 动态视频网格
  172. // @name:zh-TW YouTube 動態視頻網格
  173. // @name:zu Igridi yevidiyo enamandla ye-YouTube
  174. // @description:aa Diyamic massos Youtube viidiyoh grid elle rakitam meqe ixxima le viidiyooyal, default 3 viidiyoh girid sissikuk xalay.
  175. // @description:ab Динамикала YouTube авидео-цәаҳәа аԥенџьыр аҭбаара шьаҭас иҟаҵаны, цәаҳәак аҿы иреиӷьу авидеоқәа рхыԥхьаӡара аарԥшразы, еиҳа ирласны аҭакҟаҵаратә шьақәгылашьақәа рзы 3 видео-еилазаара ԥсахны
  176. // @description:af Pas die YouTube -video -rooster dinamies aan, gebaseer op vensterbreedte om die beste aantal video’s per reël te vertoon, en die standaard 3 video -roosters oorskryf vir vinniger reageer uitlegte
  177. // @description:ak Fa dynamically siesie YouTube video grid a egyina window width so ma ɛkyerɛ video dodow a eye sen biara wɔ line biara mu, na kyerɛw default 3 video grids no so ma ɛyɛ ntɛm mmuae nhyehyɛe .
  178. // @description:am በተከታታይ በመስኮት ስፋቱ ላይ የተመሠረተ የ YouTube ቪዲዮ ፍርግርግ በተንቀሳቃሽ የመስኮት ስፋቶች ላይ በመመርኮዝ ለተስፋፋው የቪዲዮ ፍርግርግ (የቪዲዮ ፍርግርግ) ፈጣን ምላሽ ሰጪዎች
  179. // @description:ar اضبط شبكة فيديو YouTube ديناميكيًا استنادًا إلى عرض النافذة لعرض أفضل عدد من مقاطع الفيديو لكل سطر ، واكتب شبكات الفيديو الافتراضية 3 للتخطيطات المستجيبة بشكل أسرع
  180. // @description:as প্ৰতিটো লাইনত সৰ্বোত্তম সংখ্যক ভিডিঅ’ প্ৰদৰ্শন কৰিবলৈ উইণ্ড’ৰ প্ৰস্থৰ ওপৰত ভিত্তি কৰি ইউটিউব ভিডিঅ’ গ্ৰীড গতিশীলভাৱে সামঞ্জস্য কৰক, দ্ৰুত প্ৰতিক্ৰিয়াশীল বিন্যাসৰ বাবে অবিকল্পিত ৩ ভিডিঅ’ গ্ৰীড অভাৰৰাইট কৰি
  181. // @description:av Динамически регулируйте видео YouTube, основанный на окружающем широки, чтобы отобразить лучшие количество видео по линии, переписать по умолчанию 3 видеосетки для быстрые ответственных макетов
  182. // @description:ay Dinámicamente rejilla de vídeo de YouTube ukax ventana ancho ukarjam askichatawa, sapa línea ukan videos ukanakax wali suma jakhüw uñacht’ayañataki, 3 rejillas de vídeo predeterminado ukanakax juk’amp rápidos respuestas ukan qillqt’atawa .
  183. // @description:az Bir sətirdə ən yaxşı sayda videonu göstərmək üçün Window, YouTube video şəbəkəsini dinamik şəkildə tənzimləyin, daha sürətli cavab verən layoutlar üçün standart 3 video ızgaraları üzərində yazın
  184. // @description:ba Динамик рәүештә YouTube видео селтәрен көйләү нигеҙендә тәҙрә киңлеге күрһәтеү өсөн иң яҡшы һаны видео бер юл, өҫтөнән яҙыу ғәҙәттәгесә 3 видео селтәрҙәр өсөн тиҙерәк яуап макеттары .
  185. // @description:be Дынамічна адрэгулюйце відэа -сетку YouTube на аснове шырыні вокнаў, каб адлюстраваць лепшую колькасць відэа ў радок, перазапісваючы 3 сеткі відэа для больш хуткіх спагадных макетаў
  186. // @description:bg Динамично регулирайте видео решетката в YouTube въз основа на ширината на прозореца, за да се покаже най -добрият брой видеоклипове на ред, презаписване по подразбиране 3 видео мрежи за по -бързи отзивчиви оформления
  187. // @description:bh डायनामिक रूप से विंडो चौड़ाई के आधार पर यूट्यूब वीडियो ग्रिड के समायोजित करीं ताकि प्रति लाइन सबसे बढ़िया वीडियो के प्रदर्शित कइल जा सके, तेज रिस्पांसिव लेआउट खातिर डिफ़ॉल्ट 3 वीडियो ग्रिड के ओवरराइट कइल जा सकेला
  188. // @description:bm YouTube video grid ladilan cogo la min bɛ kɛ ka da finɛtiriw bonya kan walasa ka wideyow hakɛ ɲuman jira layini kelen na, ka wideyow jatebɔ sɛbɛn 3 defaultw sɛbɛn walasa ka jaabiw di teliya la.
  189. // @description:bn দ্রুত প্রতিক্রিয়াশীল লেআউটগুলির জন্য ডিফল্ট 3 ভিডিও গ্রিডগুলি ওভাররাইটিং করে লাইন প্রতি সেরা সংখ্যক ভিডিও প্রদর্শন করতে উইন্ডো প্রস্থের উপর ভিত্তি করে ইউটিউব ভিডিও গ্রিডটি গতিশীলভাবে সামঞ্জস্য করুন
  190. // @description:bo སྒེའུ་ཁུང་གི་རྒྱ་ཁྱོན་ལ་བརྟེན་ནས་ཡུ་ཊུབ་བརྙན་འཕྲིན་གྱི་དྲ་མིག་དེ་ཐིག་རེ་ལ་བརྙན་འཕྲིན་གྱི་གྲངས་ཀ་ཡག་ཤོས་སྟོན་ཆེད་དུ་ཡུ་ཊུབ་བརྙན་འཕྲིན་གྱི་དྲ་མིག་དེ་ལེགས་སྒྲིག་བྱས་ནས་བརྙན་འཕྲིན་དྲ་མིག་3དེ་མགྱོགས་པོ་ལན་འདེབས་བྱེད་པའི་བཀོད་སྒྲིག་ལ་ཚད་ལས་བརྒལ་ཡོད།
  191. // @description:br Diazezañ ar rouedad video YouTube diazezet war led ar prenestr evit diskouez an niver gwellañ a videoioù dre linenn, o skrivañ dreist ar 3 rouedad video dre ziouer evit skeudennoù respontus buanoc’h
  192. // @description:bs Dinamički podesite YouTube video rešetku na osnovu širine prozora za prikaz najboljeg broja video zapisa po retku, prepisivanje zadanih 3 video mreža za brže reažne rasporede
  193. // @description:ca Ajusteu dinàmicament la graella de vídeo de YouTube basada en l’amplada de la finestra per mostrar el millor nombre de vídeos per línia, sobreescrivint les 3 quadrícules de vídeo predeterminades per a dissenys de resposta més ràpids
  194. // @description:ce Динамически нисъе YouTube видео сетка, коран шуьйраллин бух тӀехь, гайта уггаре а дика видеош хӀора могӀанна, совяздар стандартан 3 видео сетка сиха респонситивни макеташна
  195. // @description:ceb Dynamikong pag-adjust sa youtube video grid nga gibase sa Window Lapad aron ipakita ang labing kaayo nga gidaghanon sa mga video matag linya, nga adunay sulud nga 3 nga video grids alang sa mas paspas nga pagtubag sa mga layout
  196. // @description:ch Dynamicamente ha areglå i video video grid ni’ ma fa’tinas gi i bentanå-ña para u na’fanhuyong i mas maolek na numeron video kada linahyan, ya ha na’fanhuyong i default na 3 video grids para mas åpmam na tiempo para u fanma responsåpble i repositibu siha .
  197. // @description:ckb بە شێوەیەکی داینامیکی تۆڕی ڤیدیۆی یوتیوب ڕێکبخە بە پشتبەستن بە پانایی پەنجەرە بۆ پیشاندانی باشترین ژمارەی ڤیدیۆکان بۆ هەر هێڵێک، نووسینەوەی 3 تۆڕی ڤیدیۆیی پێشوەختە بۆ نەخشەی وەڵامدەرەوەی خێراتر
  198. // @description:co Aghjustate dinamicamente u gridu di video di YouTube nantu à a larghezza di a finestra per affissà u megliu numaru di video per a linea, rimpiazzà i video di video predeterminate
  199. // @description:cs Dynamicky upravte video mřížku YouTube na základě šířky okna a zobrazíte nejlepší počet videí na řádek a přepsáte výchozí 3 video mřížky pro rychlejší responzivní rozvržení
  200. // @description:cv Динамика мелĕпе YouTube видеосетьне чÿрече сарлакăшĕ тăрăх тĕпе хурса кашни йĕркере чи лайăх видео кăтартма, хăвăртрах хуравлакан макетсем валли стандартлă 3 видеосетьсене çырса кăтартăр
  201. // @description:cy Addaswch y grid fideo YouTube yn ddeinamig yn seiliedig ar led ffenestri i arddangos y nifer orau o fideos y llinell, gan drosysgrifennu’r gridiau fideo diofyn 3 ar gyfer cynlluniau ymatebol cyflymach
  202. // @description:da Juster dynamisk YouTube -videorettet baseret på vinduesbredde for at få vist det bedste antal videoer pr. Linje, og overskriv standard 3 -videotitrene til hurtigere responsive layouts
  203. // @description:de Passen Sie das YouTube -Video -Netz dynamisch anhand der Fensterbreite an, um die beste Anzahl von Videos pro Zeile anzuzeigen.
  204. // @description:dv ކޮންމެ ލައިނަކަށް އެންމެ ރަނގަޅު ވީޑިއޯ ދައްކާލުމަށްޓަކައި ވިންޑޯ ވިޑްތް އަށް ބަލައިގެން ޔޫޓިއުބް ވީޑިއޯ ގްރިޑް ޑައިނަމިކް ގޮތެއްގައި އެޖެސްޓްކޮށް، ރެސްޕޮންސިވް ލޭއައުޓްސް އަށް ވުރެ ބާރު ފޯރުވުމަށް ޑިފޯލްޓް 3 ވީޑިއޯ ގްރިޑްސް އޯވަރރައިޓް ކުރުން
  205. // @description:dz གྲལ་ཐིག་རེ་ལུ་ བརྙན་འཕྲིན་གྱངས་ཁ་དྲག་ཤོས་བཀྲམ་སྟོན་འབད་ནིའི་དོན་ལུ་ ཡུ་ཊུབ་བརྙན་འཕྲིན་གྱི་ གིརིཌི་འདི་ ཝིན་ཌོ་རྒྱ་ཚད་ལུ་གཞི་བཞག་སྟེ་ མགྱོགས་དྲགས་སྦེ་ བདེ་སྒྲིག་འབད་ཞིནམ་ལས་ མགྱོགས་དྲགས་སྦེ་ ལན་འདེབས་སྒྲིག་བཀོད་ཚུ་གི་དོན་ལུ་ སྔོན་སྒྲིག་བརྙན་འཕྲིན་གྱི་ གིརིཌི་༣ འདི་ ཚབ་སྲུང་འབད་ནི།
  206. // @description:ee Trɔ asi le YouTube video ƒe fli si wotu ɖe fesre ƒe kekeme dzi le mɔ si trɔna nu be wòaɖe video ƒe xexlẽme nyuitɔ kekeake afia le fli ɖesiaɖe dzi, atsɔ video ƒe fli 3 siwo woɖo ɖi la aŋlɔ ɖe edzi na ɖoɖo siwo wɔa dɔ kabakaba wu .
  207. // @description:el Ρυθμίστε δυναμικά το πλέγμα βίντεο YouTube με βάση το πλάτος παραθύρου για να εμφανίσετε τον καλύτερο αριθμό βίντεο ανά γραμμή, αντικαθιστώντας τα προεπιλεγμένα 3 πλέγματα βίντεο για ταχύτερες διατάξεις απόκρισης
  208. // @description:en Dynamically adjust the YouTube video grid based on window width to display the best number of videos per line, overwriting the default 3 video grids for faster responsive layouts
  209. // @description:en-GB Dynamically adjust the YouTube video grid based on window width to display the best number of videos per line, overwriting the default 3 video grids for faster responsive layouts
  210. // @description:eo Dinamike Ĝustigu la YouTube -Video -Kradon surbaze
  211. // @description:es Ajuste dinámicamente la cuadrícula de video de YouTube en función del ancho de la ventana para mostrar el mejor número de videos por línea, sobrescribiendo las 3 cuadrículas de video predeterminadas para diseños receptivos más rápidos
  212. // @description:es-419 Ajuste dinámicamente la cuadrícula de video de YouTube en función del ancho de la ventana para mostrar el mejor número de videos por línea, sobrescribiendo las 3 cuadrículas de video predeterminadas para diseños receptivos más rápidos
  213. // @description:et Reguleerige dünaamiliselt YouTube’i videovõrk, mis põhineb akna laiusel, et kuvada parim videote arv rea kohta, kirjutades vaikeseade 3 videovõrku kiiremate reageerivate paigutuste jaoks
  214. // @description:eu Dinamikoki doitu YouTube bideo-sareta leihoen zabalera oinarritzat hartuta, lerro bakoitzeko bideo kopuru onena erakusteko, lehenetsitako 3 bideo sareta gainidatzi diseinuaren diseinu arduratsuak lortzeko
  215. // @description:fa به صورت پویا شبکه ویدیویی YouTube را بر اساس عرض پنجره تنظیم کنید تا بهترین تعداد فیلم ها در هر خط نمایش داده شود ، و با استفاده از 3 شبکه ویدیویی پیش فرض برای طرح های سریعتر پاسخگو بازنویسی کنید
  216. // @description:ff Dinamique njuɓɓudi mbaydi wideyoo YouTube tuugiindi e njaajeendi windo ngam hollirde limoore ɓurnde moƴƴude e wideyooji e kala liggey, winnditiiɗo jokkorgal wideyoo 3 default ngam layouts jaabawol ɓurngol yaawde
  217. // @description:fi Säädä Dynaamisesti YouTube -videoverkkoa ikkunan leveyden perusteella, jotta saat parhaan määrän videoita riviä kohden, korvaavat oletusarvoiset 3 videoverkon nopeammille reagoiville asetteluille
  218. // @description:fil Dinamikong ayusin ang grid ng video sa YouTube batay sa lapad ng window upang ipakita ang pinakamahusay na bilang ng mga video bawat linya, na overwriting ang default na 3 video grids para sa mas mabilis na pagtugon sa mga layout
  219. // @description:fj Dynamically veisautaka na vidio grid grid e yavutaki ena katubaleka ni katubaleka me vakaraitaka na iwiliwili vinaka duadua ni vidio ni dua na laini, e sivia na grid ni vidio ni vidio me baleta na totolo ni totolo ni totolo .
  220. // @description:fo Dynamiskt stilla YouTube videonetið grundað á vindeygabreidd fyri at vísa besta talið av videoum á hvørjari linju, og skriva yvir forsett 3 videonet fyri skjótari svarandi uppsetingar
  221. // @description:fr Ajustez dynamiquement la grille vidéo YouTube en fonction de la largeur de la fenêtre pour afficher le meilleur nombre de vidéos par ligne, écrasant les 3 grilles vidéo par défaut pour des dispositions réactives plus rapides
  222. // @description:fr-CA Ajustez dynamiquement la grille vidéo YouTube en fonction de la largeur de la fenêtre pour afficher le meilleur nombre de vidéos par ligne, écrasant les 3 grilles vidéo par défaut pour des dispositions réactives plus rapides
  223. // @description:fy Dynamysk oanpasse de YouTube-fideo-roaster op basis fan finsterbreedte om it bêste oantal fideo’s per rigel te werjaan, de standert 3 fideo-roaster te ferskriuwen foar rapper respons
  224. // @description:ga Coigeartaigh an eangach físe YouTube go dinimiciúil bunaithe ar leithead na fuinneoige chun an líon is fearr físeáin a thaispeáint in aghaidh na líne, ag scríobh na greille físe réamhshocraithe 3 le haghaidh leagan amach sofhreagrach níos tapúla
  225. // @description:gd Atharraich clèithe bhidio YouTube stèidhichte air leud uinneig gus an àireamh de bhideothan as fheàrr a thaisbeanadh gach loidhne, a ’cur thairis air clioaichean naidheachd àbhaisteach airson cruthan nas luaithe
  226. // @description:gl Axuste dinámicamente a rede de vídeo de YouTube en función do ancho da xanela para amosar o mellor número de vídeos por liña, sobrescribindo as 3 cuadrículas predeterminadas para esquemas máis rápidos de resposta
  227. // @description:gn Emohenda dinámicamente YouTube video cuadrícula oñemopyendáva ventána ancho rehe ohechauka hag̃ua mboýpa oĩ video iporãvéva peteĩ línea rehe, ojehai jey hag̃ua umi cuadrícula 3 video rehegua por defecto umi diseño ombohovái pyaꞌevévape g̃uarã .
  228. // @description:gsw-berne Dynamically adjust the YouTube video grid based on window width to display the best number of videos per line, overwriting the default 3 video grids for faster responsive layouts
  229. // @description:gu ઝડપી પ્રતિભાવ લેઆઉટ માટે ડિફ default લ્ટ 3 વિડિઓ ગ્રીડને ફરીથી લખવા માટે, લાઇન દીઠ શ્રેષ્ઠ સંખ્યામાં વિડિઓઝ પ્રદર્શિત કરવા માટે વિંડોની પહોળાઈના આધારે ગતિશીલ રીતે યુટ્યુબ વિડિઓ ગ્રીડને સમાયોજિત કરો
  230. // @description:gv Dy-dynamys y grid video YouTube er y leed y vee dy hoilshaghey y chooid smoo jeh ny videoyn son dagh line, s’cosoylagh rish ny 3 grids video t’er ny h-oik.
  231. // @description:ha Dogara ta daidaita Grid Grid Video Grid Bidiyo dangane da Window Sondard Don nuna mafi kyawun bidiyon da ke cikin layi na 3
  232. // @description:he התאם באופן דינמי את רשת הווידיאו של YouTube על בסיס רוחב החלון כדי להציג את המספר הטוב ביותר של סרטונים בשורה, מה שמחלף את ברירת המחדל 3 רשתות הווידיאו עבור פריסות מגיבות מהירות יותר
  233. // @description:hi गतिशील रूप से YouTube वीडियो ग्रिड को खिड़की की चौड़ाई के आधार पर समायोजित करें, प्रति पंक्ति में सबसे अच्छी संख्या में वीडियो प्रदर्शित करने के लिए, तेजी से उत्तरदायी लेआउट के लिए डिफ़ॉल्ट 3 वीडियो ग्रिड को ओवरराइट करना
  234. // @description:hmn Dynamically Kho cov yeeb yaj kiab YouTube hauv lub qhov rai dav mus rau cov yeeb yaj kiab zoo tshaj plaws rau ib kab
  235. // @description:hr Dinamički prilagodite YouTube video mrežu na temelju širine prozora kako biste prikazali najbolji broj videozapisa po retku, prebrisati zadane 3 video rešetke za brže odgovarajuće izglede
  236. // @description:ht Dinamikman ajiste kadriyaj videyo YouTube ki baze sou lajè fenèt pou montre pi bon kantite videyo pou chak liy, ranplase default 3 kadriyaj videyo pou pi vit kouman reponn
  237. // @description:hu Dinamikusan állítsa be a YouTube -videó rácsot az ablak szélessége alapján, hogy megjelenjen a legjobb videók száma soronként, felülírva az alapértelmezett 3 videokrácsot a gyorsabb reagáló elrendezésekhez
  238. // @description:hy Դինամիկորեն կարգավորեք YouTube վիդեո ցանցը `ելնելով պատուհանի լայնության վրա` յուրաքանչյուր տողի համար տեսանյութերի լավագույն քանակը ցուցադրելու համար, ավելի արագ արձագանքող դասավորությունների համար
  239. // @description:id Sesuaikan secara dinamis kisi -kisi video YouTube berdasarkan lebar jendela untuk menampilkan jumlah video terbaik per baris, menimpa grid video 3 default untuk tata letak responsif yang lebih cepat
  240. // @description:ig Didiely Ghazie VID Trid dabere na window iji gosipụta ọnụọgụ vidiyo kachasị mma maka ahịrị 3 video grids ngwa ngwa
  241. // @description:is Stilltu virkan YouTube myndbandsnet byggt á gluggabreidd til að birta besta fjölda myndbanda á hverja línu, skrifa yfir sjálfgefið 3 myndbandsnet fyrir hraðari viðbragðs skipulag
  242. // @description:it Regola dinamicamente la griglia video di YouTube in base alla larghezza della finestra per visualizzare il miglior numero di video per riga, sovrascrivendo le 3 griglie video predefinite per layout più rapidi
  243. // @description:iu ᐋᖅᑭᒋᐊᕐᓗᒍ YouTube ᑕᕐᕆᔭᓕᐊᖑᓯᒪᔪᖅ ᑐᙵᕕᖃᖅᑐᖅ ᐃᒐᓛᑉ ᓯᕕᑐᓂᖓᓂᒃ ᑕᑯᒃᓴᐅᑎᑦᑎᖁᓪᓗᒍ ᐱᐅᓂᖅᐹᓂᒃ ᑕᕐᕆᔭᒐᒃᓴᓂᒃ ᐊᑕᐅᓯᕐᒧᑦ ᑎᑎᕋᖅᓯᒪᔪᓄᑦ, ᑎᑎᕋᓗᐊᕐᓂᖅ 3-ᓂᒃ ᑕᕐᕆᔭᒐᒃᓴᓂᒃ ᓱᒃᑲᓂᖅᓴᒃᑯᑦ ᑭᐅᔪᓐᓇᖅᑐᓄᑦ ᐋᖅᑭᒃᓯᒪᓂᖏᓐᓄᑦ
  244. // @description:ja ウィンドウの幅に基づいてYouTubeビデオグリッドを動的に調整して、1行あたりのビデオ数の数を表示し、デフォルトの3つのビデオグリッドを上書きしてレスポンシブレイアウトを高速化します
  245. // @description:jv Dinamis nyetel kamare jendhela YouTube adhedhasar jembar jendhela kanggo nampilake jumlah video paling apik saben baris, nulis gawan 2 video standar kanggo tata letak responsif sing luwih cepet
  246. // @description:ka დინამიურად შეცვალეთ YouTube ვიდეო ქსელი ფანჯრის სიგანეზე დაყრდნობით, რომ ნახოთ საუკეთესო რაოდენობის ვიდეო თითო ხაზზე, გადაწერეთ ნაგულისხმევი 3 ვიდეო ბადე უფრო სწრაფი საპასუხო განლაგებისთვის
  247. // @description:kg Kuyidika na mutindu ya mbote réseau ya video ya YouTube yina me simbama na nene ya fenetre sambu na kumonisa ntalu ya kuluta mbote ya bavideo na konso nzila, na kusonikaka na zulu ya réseau ya bavideo 3 yina bo me tula na ntwala sambu na ba layout ya nswalu yina ke pesa mvutu .
  248. // @description:kk YouTube бейне торын терезе ені негізінде динамикалық түрде реттеңіз, бұл әр жолдың ең жақсы санын көрсету үшін, тезірек жауап беру үшін әдепкі 3 бейне торларды қайта жазыңыз
  249. // @description:kl YouTube-imi video-grid-i igalaaq tunngavigalugu dynamik-imik naleqqussarlugu, videot ataasiakkaat pitsaanerpaat takutinniarlugit, video-grid-it 3-t atorneqarsinnaasut sukkanerusumik akissuteqarfiginiarlugit
  250. // @description:km ការលៃតម្រូវក្រឡាចត្រង្គវីដេអូយូធ្យូបដោយផ្អែកលើទទឹងបង្អួចដើម្បីបង្ហាញចំនួនវីដេអូល្អបំផុតក្នុងមួយខ្សែការសរសេរជាន់លើការសរសេរជាន់លើទី 3 វីដេអូសម្រាប់ប្លង់ឆ្លើយតបលឿនជាងមុន
  251. // @description:kn ಪ್ರತಿ ಸಾಲಿಗೆ ಉತ್ತಮ ಸಂಖ್ಯೆಯ ವೀಡಿಯೊಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ವಿಂಡೋ ಅಗಲವನ್ನು ಆಧರಿಸಿ ಯೂಟ್ಯೂಬ್ ವಿಡಿಯೋ ಗ್ರಿಡ್ ಅನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಹೊಂದಿಸಿ, ವೇಗವಾಗಿ ಸ್ಪಂದಿಸುವ ವಿನ್ಯಾಸಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ 3 ವೀಡಿಯೊ ಗ್ರಿಡ್‌ಗಳನ್ನು ತಿದ್ದಿ
  252. // @description:ko 창 너비를 기준으로 YouTube 비디오 그리드를 동적으로 조정하여 한 줄 당 가장 적합한 비디오 수를 표시하고 더 빠른 반응 형 레이아웃을 위해 기본 3 비디오 그리드를 덮어 씁니다.
  253. // @description:kr Nasha laa lan video do YouTube ye dəga faljin nəm farak window ye lan, video ngəla lai falyin fəletəro, kuru video grid video 3 ye dəga ruwozə duwaro awo kəlanzən tədin ma.
  254. // @description:ku Dînamîkî Grid Vîdyoya YouTube-ê li ser bingeha windabûna pencereyê bicîh bikin ku hejmar çêtirîn vîdyoyan li gorî xeta, ji bo pêvekên vîdyoyê yên 3 vîdyoyê dakêşin
  255. // @description:kv Динамика боксянь лӧсьӧдӧй YouTube видеосеть ӧшинь пасьта серти, медым петкӧдлыны медбур видео лыдсӧ ӧти линия вылӧ, умолчание серти 3 видеосетьяс ӧдйӧджык вочавидзысь планировкаяс вылӧ .
  256. // @description:ky Терезенин туурасы эң мыкты сандагы эң мыкты видеолорду көрсөтүү үчүн YouTube Video торун динамикалык түрдө тууралоо, бир сапка эң мыкты видеолорду чагылдырат, демейки 3 видео тармагын тез арада жооптуу
  257. // @description:la Dynamically adjust in YouTube videos eget secundum fenestram latitudinem ostentare optimum numerum videos per line, overwriting in default III video grids ad citius responsive layout
  258. // @description:lb Dynamik Upassung de YouTube Video GRIPUP baséiert op Fensterbreet fir déi bescht Zuel vu Videoen pro Line ze weisen, iwwerdréiglech ze weisen
  259. // @description:lg Dynamically adjust the YouTube video grid okusinziira ku bugazi bw’eddirisa okulaga omuwendo ogusinga obulungi ogwa vidiyo buli layini, okuwandiika ku 3 video grids for faster responsive responsive layouts
  260. // @description:ln Bobongisa na ndenge ya dynamique grille ya video ya YouTube na kotalela bonene ya fenetre mpo na kolakisa motango ya malamu koleka ya ba vidéos na ligne moko, kokoma likolo ya ba grille vidéo ya 3 par défaut mpo na ba layouts oyo ezali kopesa eyano ya mbangu .
  261. // @description:lo ປັບຕາຂ່າຍໄຟຟ້າວິດີໂອຢູ່ໃນປ່ອງຢ້ຽມແບບເຄື່ອນໄຫວເພື່ອສະແດງຈໍານວນວິດີໂອທີ່ດີທີ່ສຸດໃນເສັ້ນ, ການຂຽນທັບທີ່ມີຄວາມຕ້ອງການໃນຕອນຕົ້ນ
  262. // @description:lt Dinamiškai sureguliuokite „YouTube“ vaizdo įrašų tinklą pagal lango plotį, kad būtų rodomas geriausias vaizdo įrašų skaičius kiekvienoje eilutėje, perrašydami numatytus 3 vaizdo įrašų tinklelius, skirtas greitesniam reaguojančiam išdėstymui
  263. // @description:lv Dinamiski pielāgojiet YouTube video režģi, pamatojoties uz loga platumu, lai parādītu labāko videoklipu skaitu vienā rindā, pārrakstot noklusējuma 3 video režģus, lai veiktu ātrāku reaģējošu izkārtojumu
  264. // @description:mg Ampiharo amin’ny alàlan’ny Youtube Video Notsoraky ny YouTube mifototra amin’ny sakan’ny varavarankely mba hampisehoana ny isan’ny horonantsary tsara indrindra isaky ny andalana, fanoratana ny tahiry horonantsary 3 default 3
  265. // @description:mh Ej juon wāween eo em̧m̧an n̄an kōm̧m̧ane juon pija eo em̧m̧an tata n̄an kwaļo̧k jon̄an eo em̧m̧an tata ilo juon ļain, im ej kōm̧m̧an bwe en ļapļo̧k an ļapļo̧k an ļapļo̧k an ļapļo̧k an armej ro m̧ōņōņō .
  266. // @description:mi Ko te whakatika i te raarangi ataata YouTube i runga i te whanui matapihi hei whakaatu i te maha o nga ataata mo ia raina, ko te tuhi i nga tohu ataata 3 mo nga whakatakotoranga whakautu tere
  267. // @description:mk Динамички прилагодете ја видеото за видео на YouTube заснована на ширина на прозорецот за да се прикаже најдобриот број видеа по линија, препишувајќи ги стандардните 3 видео мрежи за побрзи распоред на одговорни
  268. // @description:ml വിൻഡോ വീതിയെ അടിസ്ഥാനമാക്കിയുള്ള YouTube വീഡിയോ ഗ്രിഡ് ക്രമീകരിക്കുക, വേഗത്തിൽ പ്രതികരിക്കുന്ന ലേ outs ട്ടുകളിനായുള്ള സ്ഥിരസ്ഥിതി 3 വീഡിയോ ഗ്രിഡുകളെ പുനരാലേഖനം ചെയ്യുക
  269. // @description:mn Шилдэг 3-р видео бичлэгийг харуулахын тулд WINDUBE VIDEROME-гийн хамгийн шилдэг видео бичлэгийг харуулахын тулд WINDUBE VIDERID-ийг дахин тохируулах
  270. // @description:mo Reglați dinamic rețeaua video YouTube pe baza lățimii ferestrei pentru a afișa cel mai bun număr de videoclipuri pe linie, suprascrisând 3 grile video implicite pentru machete mai rapide mai rapide
  271. // @description:mr विंडो रुंदीवर आधारित YouTube व्हिडिओ ग्रीड गतिशीलपणे समायोजित करा प्रति ओळीची उत्कृष्ट संख्या प्रदर्शित करण्यासाठी, वेगवान प्रतिसाद लेआउटसाठी डीफॉल्ट 3 व्हिडिओ ग्रिड अधिलिखित करते.
  272. // @description:ms Secara dinamik menyesuaikan grid video youtube berdasarkan lebar tetingkap untuk memaparkan bilangan video terbaik setiap baris, menimpa grid video lalai 3 untuk susun atur responsif yang lebih cepat
  273. // @description:mt Aġġusta b’mod dinamiku l-grilja tal-vidjow YouTube bbażata fuq il-wisa ’tat-tieqa biex turi l-aħjar numru ta’ vidjows għal kull linja, tibki l-grilji tal-vidjow default 3 għal tqassim li jirrispondi aktar malajr
  274. // @description:my သင့်တော်သောတုန့်ပြန်မှုများကိုပိုမိုမြန်ဆန်သောဗီဒီယိုနံပါတ်များကိုပြသရန် Window အကျယ်ကိုပြသနိုင်ရန်အတွက် Window Width ကို အခြေခံ. Youtube Video Grid ကို Dyname ဗီဒီယို GRID ကိုချိန်ညှိပါ
  275. // @description:nb Juster dynamisk YouTube Video Grid basert på vindusbredde for å vise det beste antallet videoer per linje, og overskrive standard 3 videoutgrader for raskere responsive oppsett
  276. // @description:ne गतिशील रूपमा तपाइँ प्रति रेखाको सर्वश्रेष्ठ संख्या प्रदर्शन गर्न विन्डोज चौडाइमा आधारित यूट्यूब भिडियो ग्रिड समायोजित गर्नुहोस्, छिटो उत्तरदायी लेआउटहरूको लागि पूर्वनिर्धारित 3 भिडियो ग्रिडहरू अधिकांश
  277. // @description:nl Pas het YouTube -videoretsel dynamisch aan op basis van de vensterbreedte om het beste aantal video’s per regel weer te geven, waarbij de standaard 3 videograden worden overschreven voor snellere responsieve lay -outs
  278. // @description:nr Kusilili 10, u-alis 10.
  279. // @description:ny Sinthani mwamphamvu vidiyo ya YouTube kutengera pawindo kutalika kwambiri kuti muwonetse makanema pamzere umodzi, kupitirira mavidiyo atatu a mavidiyo a kafukufuku
  280. // @description:oc Ajustar dinamicament la grasilha vidèo de YouTube en foncion de la largor de fenèstra per afichar lo melhor nombre de vidèos per linha, en subrescrivent las grasilhas vidèo per defaut per de disposicions responsivas mai rapidas
  281. // @description:om Lakkoofsa viidiyoo sarara tokkoof hunda caalu agarsiisuuf giiridii viidiyoo YouTube irratti hundaa’uun daayinamiikiin sirreessaa, qindaa’ina deebii saffisaa ta’eef giiriiwwan viidiyoo durtii 3 irra barreessuu .
  282. // @description:or ପରିସରର ସର୍ବୋତ୍ତମ ସଂଖ୍ୟା ଅନୁଯାୟୀ ଭିଡିଓ ଗ୍ରୀଡ୍ ଉପରେ ଗତି କରୁଥିବା ୱିଣ୍ଡୋ ମୋସ୍ତାକୁ ଗତିଶୀଳ ଭାବରେ ୟୁଟ୍ୟୁବ୍ ଭିଡିଓ ଗ୍ରୀଡ୍ କୁ ଦୃ un ତା କରାଇବା ପାଇଁ ଗତି କରେ |
  283. // @description:os Динамикон æгъдауæй æрæвæрын YouTube-ы видео-сеть, рудзынджы уæрхмæ гæсгæ, цæмæй равдиса хуыздæр нымæц видеотæ иу рæнхъæй, æрæвæрдта æнæмæнгхъæуæг 3 видеосеты æнæмæнгхъæуæгæй тагъддæр дзуаппдæттæг æвæрдтæн
  284. // @description:pa ਗਤੀਸ਼ੀਲ ਤੌਰ ਤੇ ਯੂਟਿ ube ਬ ਵੀਡੀਓ ਗਰਿੱਡ ਨੂੰ ਪ੍ਰਤੀ ਲਾਈਨ ਸਭ ਤੋਂ ਵਧੀਆ ਵੀਡੀਓ ਪ੍ਰਦਰਸ਼ਤ ਕਰਨ ਲਈ ਅਧਾਰਤ, ਤੇਜ਼ ਜਵਾਬਦੇਹ ਖਾਕੇ ਲਈ 3 ਵੀਡੀਓ ਗਰਡਜ਼ ਨੂੰ ਓਵਰਰਾਈਟ ਕਰਨਾ
  285. // @description:pl Dynamicznie dostosuj siatkę wideo YouTube na podstawie szerokości okna, aby wyświetlić najlepszą liczbę filmów na wiersz, zastąpując domyślne 3 siatki wideo dla szybszych responsywnych układów
  286. // @description:ps په متحرک ډول د یوټیوب ویډیو ګریډ تنظیم کړئ ترڅو په هره کرښه کې د ویډیوګانو ښودلو لپاره د وینډوز (د ډیفالټ 3 ویډیو ګریډونو ښودنه وکړئ
  287. // @description:pt Ajuste dinamicamente a grade de vídeo do YouTube com base na largura da janela para exibir o melhor número de vídeos por linha, substituindo as 3 grades de vídeo padrão para layouts responsivos mais rápidos
  288. // @description:pt-BR Ajuste dinamicamente a grade de vídeo do YouTube com base na largura da janela para exibir o melhor número de vídeos por linha, substituindo as 3 grades de vídeo padrão para layouts responsivos mais rápidos
  289. // @description:pt-PT Ajuste dinamicamente a grade de vídeo do YouTube com base na largura da janela para exibir o melhor número de vídeos por linha, substituindo as 3 grades de vídeo padrão para layouts responsivos mais rápidos
  290. // @description:qu Dinamicamente YouTube video cuadrícula kaqpi ventana ancho kaqpi allin yupay videokuna sapa linea kaqpi rikuchinapaq, ñawpaqmanta 3 video rejillas kaqmanta aswan utqaylla kutichiq churaykunapaq qillqay.
  291. // @description:rn Muhindure video ya YouTube ishingiye ku bwaguke bw’idirisha kugira ngo ugaragaze umubare mwiza cane w’amasanamu ku murongo, ukarengera ku nzira y’amasanamu 3 y’agaciro kugira ngo ubone imiterere yihuta
  292. // @description:ro Reglați dinamic rețeaua video YouTube pe baza lățimii ferestrei pentru a afișa cel mai bun număr de videoclipuri pe linie, suprascrisând 3 grile video implicite pentru machete mai rapide mai rapide
  293. // @description:ru Динамически отрегулируйте видео сетку на YouTube на основе ширины окна, чтобы отобразить лучшее количество видео на строку, перезаписывая видео сетки по умолчанию 3 для более быстрых отзывных макетов
  294. // @description:rw Guhindura imboro ya YouTube Video ishingiye kubugari bwidirishya kugirango yerekane umubare mwiza wa videwo kumurongo, kurenga kuri gride isanzwe ya videwo 3 ya videwo yitabira byihuse
  295. // @description:sa गतिशीलतया YouTube Video Grid इत्येतत् विण्डो चौड़ाई इत्यस्य आधारेण समायोजयन्तु यत् प्रतिपङ्क्तिं सर्वोत्तमसङ्ख्यायाः विडियो प्रदर्शयितुं, द्रुततरप्रतिसादविन्यासानां कृते पूर्वनिर्धारितं 3 विडियो ग्रिड् overwriting करणम्
  296. // @description:sd متحرڪ طور تي يوٽيوب ويڊيو گرڊ کي ترتيب ڏيڻ لاء ونڊو جي ويڪر کي ترتيب ڏيڻ لاء ونڊوز جي ويڪر کي ترتيب ڏيڻ لاء وڊيو ويڪر کي ترتيب ڏيڻ، فيڪٽري جي بهترين جوابي ترتيب ڏيڻ لاء
  297. // @description:se Dynámalaččat heivehit YouTube-videoráiddu vuođđuduvvon uvssaviidodahkii vai čájehat buoremus video juohke linjás, ja čále badjel 3 videofierpmádaga, vai vástideaddji layouts lea jođáneappot vástideaddji layout.
  298. // @description:sg Na lege ti fä, leke grille ti vidéo ti YouTube so aluti na ndo ti largeur ti fenêtre ni ti fa nzoni wungo ti avidéo na ndo ti ligne oko oko, na sû na ndo ti a-appareil ti vidéo 3 so a zia ni nde ti tene a leke ni hio .
  299. // @description:sh Динамично подесите ИоуТубе видео решетку на основу ширине прозора да бисте приказали најбољи број видео записа по линији, преписивање подразумеваних 3 видео решетке за брже одговорно распореди
  300. // @description:si පේළියකට හොඳම වීඩියෝ අංකය ප්රදර්ශනය කිරීම සඳහා කවුළු පළල මත පදනම්ව යූ ටියුබ් වීඩියෝ ජාලයක් අනුගමනය කරන්න, පෙරනිමි පිරිසැලසුම් සඳහා පෙරනිමි 3 වීඩියෝ ජාල
  301. // @description:sk Dynamicky upravte video YouTube na základe šírky okna tak, aby sa zobrazila najlepší počet videí na riadok, a prepísanie predvolených 3 video mriežky pre rýchlejšie responzívne rozloženie
  302. // @description:sl Dinamično prilagodite video omrežje YouTube na podlagi širine oken, da prikažete najboljše število videoposnetkov na vrstico in prepišite privzete 3 video mreže za hitrejše odzivne postavitve
  303. // @description:sm Dynamically fetuunai le YouTube vitio Grid faʻavae i luga o le faʻamalama lautele e faʻaali ai le sili atu numera o vitio i le laina o le 3 vitio mo le vave tali atu 3 vine
  304. // @description:sn Dynamaly gadzirisa iyo YouTube vhidhiyo Grid yakavakirwa pawindows upamhi kuratidza iyo yakanakisa nhamba yemavhidhiyo pamutsetse
  305. // @description:so Si firfircoon ula qabsato dhajiska fiidiyowga ee YouTube-ka oo ku saleysan ballaca daaqadaha si aad u muujiso tirada ugu wanaagsan ee fiidiyowyada halkii xariiq kasta, waxoogaa qorista xargaha 3-da ee xargaha fiidiyowga ah
  306. // @description:sq Rregulloni dinamikisht rrjetin e videos në YouTube bazuar në gjerësinë e dritares për të shfaqur numrin më të mirë të videove për rresht, duke kapërcyer 3 rrjetet e paracaktuara të videove për paraqitjet më të shpejta të përgjegjshme
  307. // @description:sr Динамично подесите ИоуТубе видео решетку на основу ширине прозора да бисте приказали најбољи број видео записа по линији, преписивање подразумеваних 3 видео решетке за брже одговорно распореди
  308. // @description:ss Lungisa ngemoya igridi yevidiyo ye-YouTube lesekelwe ebubanti befasitela kute ukhombise linani lelihle kakhulu lemavidiyo ngemugca, ubhale ngetulu kwemagridi langu-3 evidiyo kute utfole ema-lauts laphendvula ngekushesha .
  309. // @description:st Fokotsa grid ea video ea YouTube e thehiloeng ho ea bophara ba livideo ho bontša palo e ntle ea livideo ka tatellano ea livideo ka tatellano
  310. // @description:su Dinamis nyaluyukeun video YouTube Grid dumasar kana lebar jandéla pikeun nunjukkeun nomer video pangsaéna pikeun garis, oversal Fungsi standar langkung gancang
  311. // @description:sv Justera dynamiskt YouTube -videorätet baserat på fönsterbredd för att visa det bästa antalet videor per rad, och skriver över standard 3 -videoräten för snabbare responsiva layouter
  312. // @description:sw Rekebisha kwa nguvu gridi ya video ya YouTube kulingana na upana wa windows kuonyesha idadi bora ya video kwa kila mstari, kuorodhesha gridi 3 za video za chaguo -msingi kwa mpangilio wa msikivu wa haraka
  313. // @description:ta ஒரு வரிக்கு சிறந்த எண்ணிக்கையிலான வீடியோக்களைக் காண்பிக்க சாளர அகலத்தின் அடிப்படையில் YouTube வீடியோ கட்டத்தை மாறும் வகையில் சரிசெய்யவும், இயல்புநிலை 3 வீடியோ கட்டங்களை விரைவான பதிலளிக்கக்கூடிய தளவமைப்புகளுக்கு மேலெழுதும்
  314. // @description:te విండో వెడల్పు ఆధారంగా యూట్యూబ్ వీడియో గ్రిడ్‌ను డైనమిక్‌గా సర్దుబాటు చేయండి, ప్రతి పంక్తికి ఉత్తమమైన వీడియోలను ప్రదర్శించడానికి, వేగంగా ప్రతిస్పందించే లేఅవుట్ల కోసం డిఫాల్ట్ 3 వీడియో గ్రిడ్‌లను ఓవర్రైట్ చేస్తుంది
  315. // @description:tg Шабакаҳои видеоии YouTube-ро дар асоси дуографи тиреза ба таври фаврӣ танзим кунед
  316. // @description:th ปรับตารางวิดีโอ YouTube แบบไดนามิกตามความกว้างของหน้าต่างเพื่อแสดงจำนวนวิดีโอที่ดีที่สุดต่อบรรทัดการเขียนทับกริดวิดีโอเริ่มต้น 3 ค่าเริ่มต้นสำหรับเลย์เอาต์ที่ตอบสนองได้เร็วขึ้น
  317. // @description:ti ኣብ ነፍሲ ወከፍ መስመር ዝበለጸ ቁጽሪ ቪድዮታት ንምርኣይ፡ ነቲ ናይ ዩቱብ ቪድዮ ሽቦ መሰረት ብምግባር፡ ነቲ ናይ ዩቱብ ቪድዮ ሽቦ መሰረት ብምግባር፡ ነቲ ነባሪ 3 ናይ ቪድዮ ሽቦታት ንዝቐልጠፈ ምላሽ ዝህብ ኣቀማምጣታት ጽሒፍካ ብምጽሓፍ፡ ነቲ ዝበለጸ ቁጽሪ ቪድዮታት ንምቕራብ፡ ብስፍሓት መስኮት ኣስተኻኽሎ።
  318. // @description:tk Çelgaryň dinamiki görnüşini dinamiki giňeltmek üçin "Noutube Vrid" -y çyzyň
  319. // @description:tl Dinamikong ayusin ang grid ng video sa YouTube batay sa lapad ng window upang ipakita ang pinakamahusay na bilang ng mga video bawat linya, na overwriting ang default na 3 video grids para sa mas mabilis na pagtugon sa mga layout
  320. // @description:tn Fetola ka tsela e e sa siamang mo keriting ya bidio ya YouTube e e theilweng mo bophara jwa fensetere go bontsha palo e e gaisang ya dibidio ka mola, o kwalolola dikiriti tsa dibidio tse 3 tse di tlhomameng tsa dithulaganyo tse di tsibogang ka bonako
  321. // @description:to ’I he dinamically fakatonutonu ’a e vitio ’o e vitio ’o makatu’unga ’i he matapa sio’ata ’o e laulahi ke fakahaa’i ’a e lahi lelei taha ’o e ngaahi vitio ’i he laine, ’o overwriting ’a e default 3 vitio grids ki he ngaahi fokotu’utu’u tali vave ange .
  322. // @description:tr YouTube Video Izgarayı, satır başına en iyi sayıda video sayısını görüntülemek için pencere genişliğine göre dinamik olarak ayarlayarak, daha hızlı duyarlı düzenler için varsayılan 3 video ızgaralarının üzerine yazarak
  323. // @description:ts Hi ku cinca-cinca lulamisa giridi ya vhidiyo ya YouTube hi ku ya hi ku anama ka fasitere ku kombisa nhlayo leyinene ya tivhidiyo hi layini, u tsala ehenhla ka tigridi ta vhidiyo ta 3 ta ntolovelo leswaku u kuma swivumbeko leswi hlamulaka hi ku hatlisa .
  324. // @description:tt Тәрәзә киңлегеннән иң яхшы саннарны күрсәтү өчен, Тәрәзә киңлеге нигезендә YouTube видео челтәрен көйләгез, тизрәк җаваплылык маюментлары өчен
  325. // @description:tw Fa dynamically siesie YouTube video grid a egyina window width so ma ɛkyerɛ video dodow a eye sen biara wɔ line biara mu, na kyerɛw default 3 video grids no so ma ɛyɛ ntɛm mmuae nhyehyɛe .
  326. // @description:ty No te faaite i te numera maitai roa ’ ’ e o te mau hoho’a teata i nia i te reni, a tata’i i te ana’iraa hoho’a YouTube ia au i te rahi o te matapihi, ma te papa’i rahi i te mau ana’iraa video e 3 no te mau hoho’a oioi
  327. // @description:ug ھەر بىر قۇرغا مۇناسىۋەتلىك سىنلارنى ئاساس قىلىپ, ھەر بىر لىنىيەنىڭ ئەڭ كۆپ سانىنى كۆرسىتىش ئۈچۈن كۆزنەك سىن تورىنى كۆرسىتىش, سۈكۈتتىكى 3 سىن تورىنى تېخىمۇ ئەرزان باھاغا چاپلاش ئۈچۈن, سۈكۈتتىكى 3 سىن تورىنى قاپلايدۇ
  328. // @description:uk Динамічно відрегулюйте відео -сітку YouTube на основі ширини вікна, щоб відобразити найкращу кількість відеороликів на рядок, перезаписавши 3 -х сітки відео за замовчуванням для більш швидких реагуючих макетів
  329. // @description:ur متحرک طور پر یوٹیوب ویڈیو گرڈ کو ونڈو کی چوڑائی پر مبنی ایڈجسٹ کریں تاکہ فی لائن کی بہترین تعداد میں ویڈیوز کو ظاہر کیا جاسکے ، تیز رفتار ذمہ دار ترتیب کے لئے پہلے سے طے شدہ 3 ویڈیو گرڈ کو اوور رائٹنگ کریں۔
  330. // @description:uz YouTube Video Gridni deraza kengligini deraza kengligi asosida derazadagi eng ko’p videolarni aks ettirish uchun eng ko’p video panjaralarni qayta yozing
  331. // @description:ve U dzudzanya nga nḓila ya vhuṱali giridi ya vidio ya YouTube yo thewaho kha vhuphara ha fasiṱere u itela u sumbedza tshivhalo tsha khwine tsha vidio nga mutevhe, u ṅwala nga nṱha ha giridi dza vidio dza 3 dza mvelele u itela u ṱavhanya u fhindula .
  332. // @description:vi Động điều chỉnh lưới điện tử YouTube dựa trên chiều rộng cửa sổ để hiển thị số video tốt nhất trên mỗi dòng, ghi đè lên 3 lưới video mặc định để bố cục phản hồi nhanh hơn
  333. // @description Dynamically adjusts the YouTube video grid to display an optimal number of videos per row based on window width, overriding the default 3-video grid for a more responsive layout
  334. // @description:wo Ci anam wu leer, dafay méngale wideo YouTube bi lalu ci yaatuwaayu palanteer bi ngir wane limu wideo yi gëna baax ci ligne bu nekk, di gëna bind reso 3 wideo yi ngir gëna gaaw
  335. // @description:xh Ukulungelelanisa i-YouNoull Graid yeVidiyo yeVidiyo esekwe kububanzi befestile yokubonisa ezona ntlobo ze-videos kumgca ngamnye, ukubhala ngaphezulu iigridi zevidiyo ezi-3 ze-Grids yevidiyo
  336. // @description:yi דינאַמיקאַללי אַדזשאַסטיד די יאָוטובע ווידעא גריד באזירט אויף פֿענצטער ברייט צו ווייַזן די בעסטער נומער פון ווידיאס פּער שורה, אָווועררייטינג די פעליקייַט 3 ווידעא גרידאַוץ
  337. // @description:yo Dylminally satunṣe ori didi fidio YouTube da lori iwọn window lati ṣafihan nọmba awọn fidio ti o dara julọ 3
  338. // @description:zh 根据窗口宽度动态调整 YouTube 视频网格,以每行显示最佳数量的视频,覆盖默认的 3 个视频网格,以实现响应更快的布局
  339. // @description:zh-CN 根据窗口宽度动态调整 YouTube 视频网格,以每行显示最佳数量的视频,覆盖默认的 3 个视频网格,以实现响应更快的布局
  340. // @description:zh-HK 根據窗口寬度動態調整 YouTube 視頻網格,以每行顯示最佳數量的視頻,覆蓋默認的 3 個視頻網格,以實現響應更快的佈局
  341. // @description:zh-MO 根據窗口寬度動態調整 YouTube 視頻網格,以每行顯示最佳數量的視頻,覆蓋默認的 3 個視頻網格,以實現響應更快的佈局
  342. // @description:zh-MY 根据窗口宽度动态调整 YouTube 视频网格,以每行显示最佳数量的视频,覆盖默认的 3 个视频网格,以实现响应更快的布局
  343. // @description:zh-SG 根据窗口宽度动态调整 YouTube 视频网格,以每行显示最佳数量的视频,覆盖默认的 3 个视频网格,以实现响应更快的布局
  344. // @description:zh-TW 根據窗口寬度動態調整 YouTube 視頻網格,以每行顯示最佳數量的視頻,覆蓋默認的 3 個視頻網格,以實現響應更快的佈局
  345. // @description:zu Lungisa ngokunamandla i-Grid yevidiyo ye-YouTube ngokususelwa ku-Windows Ububanzi bokubonisa inani elihle kakhulu lamavidiyo ngakunye, ngaphezulu kokubhala ama-grid azenzakalelayo ama-3 wezakhiwo ezisabelayo ezisheshayo
  346. // @author Nick Fedor
  347. // @namespace https://github.com/nicholas-fedor/youtube-dynamic-grid
  348. // @supportURL https://github.com/nicholas-fedor/youtube-dynamic-grid/issues
  349. // @homepageURL https://github.com/nicholas-fedor/youtube-dynamic-grid
  350. // @homepage https://github.com/nicholas-fedor/youtube-dynamic-grid
  351. // @license MIT
  352. // @match https://www.youtube.com/*
  353. // @match https://youtube.com/*
  354. // @icon https://www.youtube.com/s/desktop/ee47b5e0/img/logos/favicon_144x144.png
  355. // @compatible chrome
  356. // @compatible firefox
  357. // @compatible edge
  358. // @compatible opera
  359. // @compatible safari
  360. // @compatible kiwi
  361. // @compatible qq
  362. // @compatible via
  363. // @compatible brave
  364. // @version 2025.6.3.1
  365. // @run-at document-end
  366. // ==/UserScript==
  367.  
  368. /**
  369. * YouTube Dynamic Video Grid Tampermonkey script.
  370. * Adjusts the YouTube video grid to display 3-12 videos per row based on window width.
  371. * Skips execution on playlist pages to prevent layout overlap.
  372. * Version history:
  373. * - 1.0.2 (2025-05-30): Fixed playlist overlap, improved navigation handling, refactored for maintainability.
  374. * - 1.0.1 (2025-05-13): Added SPA navigation, CSP compliance, optimized polling.
  375. * - 1.0.0 (2024-04-25): Initial release.
  376. */
  377.  
  378. (function () {
  379. 'use strict'
  380.  
  381. // Configuration constants
  382. const CONFIG = {
  383. VIDEO_WIDTH: 340, // Thumbnail width in pixels
  384. MARGIN: 40, // Total left/right margins in pixels
  385. GAP: 10, // Spacing between thumbnails in pixels
  386. MIN_ITEMS: 3, // Minimum items per row
  387. MAX_ITEMS: 12, // Maximum items per row
  388. NAVIGATION_POLL_INTERVAL: 500, // Navigation polling interval in ms
  389. GRID_POLL_INTERVALS: { early: 200, regular: 1000 }, // Polling intervals in ms
  390. POLLING_DURATIONS: { early: 5000, regular: 25000 }, // Polling durations in ms
  391. DEBOUNCE_DELAY: 100, // Debounce delay for navigation and resize in ms
  392. UPDATE_DELAY: 50, // Debounce delay for grid updates in ms
  393. RETRY_ATTEMPTS: 20, // Grid update retry attempts
  394. RETRY_INTERVAL: 100, // Retry interval in ms
  395. STABLE_COUNT: 5 // Number of stable checks to stop polling
  396. }
  397.  
  398. // Utility Functions
  399. /**
  400. * Checks if the current page is a YouTube playlist page.
  401. * @returns {boolean} True if URL starts with /playlist
  402. */
  403. const isPlaylistPage = () => window.location.pathname.startsWith('/playlist')
  404.  
  405. /**
  406. * Logs messages to the console based on debug mode and log level.
  407. * @param {string} message - Message to log
  408. * @param {'info' | 'debug' | 'error'} [level='info'] - Log level
  409. */
  410. const logger = (message, level = 'info') => {
  411. const isDebug = window.location.search.includes('debug=1')
  412. if (
  413. level === 'error' ||
  414. (isDebug && (level === 'info' || level === 'debug'))
  415. ) {
  416. console[level === 'error' ? 'error' : 'log'](
  417. `[YouTube Dynamic Grid][${level}] ${message}`
  418. )
  419. }
  420. }
  421.  
  422. // Grid Management Functions
  423. const GridManager = {
  424. /**
  425. * Calculates the number of items per row based on container width.
  426. * @returns {number} Number of items per row (3-12)
  427. */
  428. calculateItemsPerRow() {
  429. const container = document.querySelector(
  430. '#contents, ytd-two-column-browse-results-renderer, body'
  431. )
  432. if (!container) {
  433. logger('No container found for grid calculation', 'error')
  434. return CONFIG.MIN_ITEMS
  435. }
  436. const width =
  437. container.getBoundingClientRect().width || window.innerWidth
  438. const items = Math.round(
  439. (width - CONFIG.MARGIN) / (CONFIG.VIDEO_WIDTH + CONFIG.GAP)
  440. )
  441. return Math.max(CONFIG.MIN_ITEMS, Math.min(CONFIG.MAX_ITEMS, items))
  442. },
  443.  
  444. /**
  445. * Updates the grid's elements-per-row attribute and CSS styles.
  446. */
  447. updateGrid() {
  448. if (this.updateTimeout) clearTimeout(this.updateTimeout)
  449. this.updateTimeout = setTimeout(() => {
  450. try {
  451. const grid = document.querySelector(
  452. 'ytd-rich-grid-renderer:not([hidden])'
  453. )
  454. if (!grid) {
  455. logger('No visible grid found')
  456. return
  457. }
  458. const itemsPerRow = this.calculateItemsPerRow()
  459. const currentItems = getComputedStyle(grid)
  460. .getPropertyValue('--ytd-rich-grid-items-per-row')
  461. .trim()
  462. const currentAttr =
  463. grid.getAttribute('elements-per-row') || 'unknown'
  464. if (
  465. currentItems !== String(itemsPerRow) ||
  466. currentAttr !== String(itemsPerRow)
  467. ) {
  468. grid.setAttribute('elements-per-row', itemsPerRow)
  469. this.updateCSS(itemsPerRow)
  470. logger(`Updated grid to ${itemsPerRow} items`)
  471. }
  472. } catch (error) {
  473. logger(`Failed to update grid: ${error.message}`, 'error')
  474. }
  475. }, CONFIG.UPDATE_DELAY)
  476. },
  477.  
  478. /**
  479. * Injects or updates the CSS style element for the grid.
  480. */
  481. injectCSS() {
  482. if (isPlaylistPage()) {
  483. logger('Skipping CSS injection on playlist page')
  484. this.removeCSS()
  485. return
  486. }
  487. let style = document.getElementById('dynamic-grid-style')
  488. if (!style) {
  489. style = document.createElement('style')
  490. style.id = 'dynamic-grid-style'
  491. const nonce = document.querySelector('meta[name="csp-nonce"]')?.content
  492. if (nonce) style.nonce = nonce
  493. document.head.appendChild(style)
  494. logger('Injected CSS style element', 'debug')
  495. }
  496. this.updateCSS(this.calculateItemsPerRow())
  497. },
  498.  
  499. /**
  500. * Updates the CSS rule for the specified number of items per row.
  501. * @param {number} itemsPerRow - Number of items per row
  502. */
  503. updateCSS(itemsPerRow) {
  504. const style = document.getElementById('dynamic-grid-style')
  505. if (!style) return
  506. style.textContent = `
  507. #contents, ytd-two-column-browse-results-renderer {
  508. max-width: 100% !important;
  509. width: 100% !important;
  510. padding: 0 !important;
  511. }
  512. ytd-rich-grid-renderer:not([hidden]) {
  513. --ytd-rich-grid-items-per-row: ${itemsPerRow} !important;
  514. --ytd-rich-grid-posts-per-row: ${itemsPerRow} !important;
  515. max-width: 100% !important;
  516. padding: 0 !important;
  517. gap: ${CONFIG.GAP}px !important;
  518. }
  519. ytd-rich-grid-renderer:not([hidden]) [is-in-first-column] {
  520. margin-left: 8px !important;
  521. margin-right: 8px !important;
  522. margin-bottom: 16px !important;
  523. }
  524. ytd-rich-grid-renderer:not([hidden]) ytd-rich-item-renderer {
  525. margin: 0 8px 16px 8px !important;
  526. }
  527. `
  528. },
  529.  
  530. /**
  531. * Removes the CSS style element and resets grid attributes.
  532. */
  533. removeCSS() {
  534. const style = document.getElementById('dynamic-grid-style')
  535. if (style) {
  536. style.remove()
  537. logger('Removed CSS style element', 'debug')
  538. }
  539. const grid = document.querySelector('ytd-rich-grid-renderer')
  540. if (grid) {
  541. grid.removeAttribute('elements-per-row')
  542. grid.style.removeProperty('--ytd-rich-grid-items-per-row')
  543. grid.style.removeProperty('--ytd-rich-grid-posts-per-row')
  544. logger('Reset grid attributes', 'debug')
  545. }
  546. },
  547.  
  548. /**
  549. * Attempts to update the grid with retries.
  550. * @param {number} [attempts=CONFIG.RETRY_ATTEMPTS] - Retry attempts
  551. */
  552. tryUpdate(attempts = CONFIG.RETRY_ATTEMPTS) {
  553. if (isPlaylistPage()) {
  554. logger('Skipping grid update on playlist page')
  555. this.removeCSS()
  556. return
  557. }
  558. this.updateGrid()
  559. if (
  560. attempts > 0 &&
  561. !document.querySelector('ytd-rich-grid-renderer:not([hidden])')
  562. ) {
  563. logger(`Retrying grid update (${attempts} attempts left)`, 'debug')
  564. setTimeout(() => this.tryUpdate(attempts - 1), CONFIG.RETRY_INTERVAL)
  565. }
  566. },
  567.  
  568. /**
  569. * Polls the grid for changes until stable.
  570. * @param {'early' | 'regular'} mode - Polling mode
  571. */
  572. pollGrid(mode = 'early') {
  573. if (isPlaylistPage()) {
  574. logger(`Skipping ${mode} polling on playlist page`)
  575. this.removeCSS()
  576. return
  577. }
  578. if (this.pollInterval) clearInterval(this.pollInterval)
  579. let stableCount = 0
  580. const interval = CONFIG.GRID_POLL_INTERVALS[mode]
  581. const duration = CONFIG.POLLING_DURATIONS[mode]
  582. this.pollInterval = setInterval(() => {
  583. const grid = document.querySelector(
  584. 'ytd-rich-grid-renderer:not([hidden])'
  585. )
  586. if (grid) {
  587. const currentItems = getComputedStyle(grid)
  588. .getPropertyValue('--ytd-rich-grid-items-per-row')
  589. .trim()
  590. const currentAttr =
  591. grid.getAttribute('elements-per-row') || 'unknown'
  592. const itemsPerRow = this.calculateItemsPerRow()
  593. if (
  594. currentItems !== String(itemsPerRow) ||
  595. currentAttr !== String(itemsPerRow)
  596. ) {
  597. this.updateGrid()
  598. stableCount = 0
  599. } else {
  600. stableCount++
  601. if (stableCount >= CONFIG.STABLE_COUNT) {
  602. clearInterval(this.pollInterval)
  603. logger(`Stopped ${mode} polling: grid stable`)
  604. if (mode === 'early') this.pollGrid('regular')
  605. else this.updateGrid()
  606. }
  607. }
  608. }
  609. }, interval)
  610. setTimeout(() => {
  611. clearInterval(this.pollInterval)
  612. logger(`Stopped ${mode} polling`)
  613. if (mode === 'early') this.pollGrid('regular')
  614. else this.updateGrid()
  615. }, duration)
  616. },
  617.  
  618. // Internal state
  619. updateTimeout: null,
  620. pollInterval: null
  621. }
  622.  
  623. // Navigation Management Functions
  624. const NavigationManager = {
  625. /**
  626. * Handles navigation events by reinitializing the grid.
  627. */
  628. handleNavigation() {
  629. if (this.navigationDebounce) clearTimeout(this.navigationDebounce)
  630. this.navigationDebounce = setTimeout(() => {
  631. this.navigationTimeouts.forEach(clearTimeout)
  632. this.navigationTimeouts = []
  633. cleanup()
  634. if (isPlaylistPage()) {
  635. logger('Skipping grid initialization on playlist page')
  636. GridManager.removeCSS()
  637. return
  638. }
  639. logger('Initializing grid for non-playlist page')
  640. GridManager.injectCSS()
  641. GridManager.tryUpdate()
  642. this.startObserver()
  643. GridManager.pollGrid()
  644. this.navigationTimeouts.push(
  645. setTimeout(() => GridManager.updateGrid(), 1000)
  646. )
  647. this.navigationTimeouts.push(
  648. setTimeout(() => GridManager.updateGrid(), 5000)
  649. )
  650. this.navigationTimeouts.push(
  651. setTimeout(() => GridManager.updateGrid(), 10000)
  652. )
  653. if (this.eventListeners) cleanup()
  654. this.eventListeners = this.setupEventListeners()
  655. }, CONFIG.DEBOUNCE_DELAY)
  656. },
  657.  
  658. /**
  659. * Monitors SPA navigation via URL polling.
  660. */
  661. monitorNavigation() {
  662. setInterval(() => {
  663. const currentUrl = location.href
  664. if (currentUrl !== this.lastUrl) {
  665. this.lastUrl = currentUrl
  666. logger(`Navigated to ${currentUrl}`, 'debug')
  667. this.handleNavigation()
  668. }
  669. }, CONFIG.NAVIGATION_POLL_INTERVAL)
  670. logger('Started navigation polling', 'debug')
  671. },
  672.  
  673. /**
  674. * Starts the MutationObserver for grid changes.
  675. */
  676. startObserver() {
  677. if (isPlaylistPage()) {
  678. logger('Skipping observer start on playlist page')
  679. GridManager.removeCSS()
  680. return
  681. }
  682. if (this.observer) {
  683. this.observer.disconnect()
  684. logger('Disconnected previous observer', 'debug')
  685. }
  686. this.observer = new MutationObserver(mutations => {
  687. for (const mutation of mutations) {
  688. if (
  689. mutation.target.matches('ytd-rich-grid-renderer') ||
  690. mutation.target.closest('ytd-rich-grid-renderer') ||
  691. mutation.target.querySelector('ytd-rich-grid-renderer') ||
  692. ['style', 'hidden', 'class', 'elements-per-row'].includes(
  693. mutation.attributeName
  694. ) ||
  695. mutation.addedNodes.length > 0
  696. ) {
  697. GridManager.updateGrid()
  698. break
  699. }
  700. }
  701. })
  702. const target = document.querySelector(
  703. '#contents, ytd-two-column-browse-results-renderer, ytd-app'
  704. )
  705. if (target) {
  706. this.observer.observe(target, {
  707. childList: true,
  708. subtree: true,
  709. attributes: true,
  710. attributeFilter: ['style', 'class', 'hidden', 'elements-per-row']
  711. })
  712. logger('Started observer', 'debug')
  713. } else {
  714. logger('Observer target not found, retrying', 'debug')
  715. setTimeout(() => this.startObserver(), CONFIG.RETRY_INTERVAL)
  716. }
  717. },
  718.  
  719. /**
  720. * Sets up event listeners for resize, load, and popstate.
  721. * @returns {Object} Listener references
  722. */
  723. setupEventListeners() {
  724. if (isPlaylistPage()) {
  725. logger('Skipping event listener setup on playlist page')
  726. return null
  727. }
  728. const resizeHandler = () => {
  729. clearTimeout(this.resizeTimeout)
  730. this.resizeTimeout = setTimeout(() => {
  731. logger('Window resized', 'debug')
  732. if (!isPlaylistPage()) GridManager.updateGrid()
  733. }, CONFIG.DEBOUNCE_DELAY)
  734. }
  735. const loadHandler = () => {
  736. logger('Page loaded', 'debug')
  737. this.handleNavigation()
  738. }
  739. const popstateHandler = () => {
  740. logger('Popstate navigation detected', 'debug')
  741. this.handleNavigation()
  742. }
  743. window.addEventListener('resize', resizeHandler)
  744. window.addEventListener('load', loadHandler)
  745. window.addEventListener('popstate', popstateHandler)
  746. logger('Set up event listeners', 'debug')
  747. return { resizeHandler, loadHandler, popstateHandler }
  748. },
  749.  
  750. // Internal state
  751. lastUrl: location.href,
  752. observer: null,
  753. navigationTimeouts: [],
  754. navigationDebounce: null,
  755. resizeTimeout: null,
  756. eventListeners: null
  757. }
  758.  
  759. /**
  760. * Cleans up all resources (observers, intervals, listeners).
  761. */
  762. function cleanup() {
  763. if (NavigationManager.observer) {
  764. NavigationManager.observer.disconnect()
  765. NavigationManager.observer = null
  766. }
  767. if (GridManager.pollInterval) {
  768. clearInterval(GridManager.pollInterval)
  769. GridManager.pollInterval = null
  770. }
  771. NavigationManager.navigationTimeouts.forEach(clearTimeout)
  772. clearTimeout(NavigationManager.resizeTimeout)
  773. clearTimeout(GridManager.updateTimeout)
  774. clearTimeout(NavigationManager.navigationDebounce)
  775. if (NavigationManager.eventListeners) {
  776. window.removeEventListener(
  777. 'resize',
  778. NavigationManager.eventListeners.resizeHandler
  779. )
  780. window.removeEventListener(
  781. 'load',
  782. NavigationManager.eventListeners.loadHandler
  783. )
  784. window.removeEventListener(
  785. 'popstate',
  786. NavigationManager.eventListeners.popstateHandler
  787. )
  788. NavigationManager.eventListeners = null
  789. }
  790. logger('Cleaned up resources', 'debug')
  791. }
  792.  
  793. /**
  794. * Initializes the script.
  795. */
  796. function init() {
  797. if (isPlaylistPage()) {
  798. logger('Skipping initialization on playlist page', 'info')
  799. GridManager.removeCSS()
  800. NavigationManager.monitorNavigation()
  801. return
  802. }
  803. logger('Initializing script', 'info')
  804. NavigationManager.monitorNavigation()
  805. NavigationManager.handleNavigation()
  806. }
  807.  
  808. // Start the script with a delay to ensure URL evaluation
  809. setTimeout(init, CONFIG.DEBOUNCE_DELAY)
  810. })()