// ==UserScript==
// @name Show date normally on Twitter
// @name:aa Tiwiteril qaadik tan ayro kee wakti yaybulle
// @name:ab Твиттер иаанарԥшуеит иаабац арыцхәи аамҭеи
// @name:af Twitter vertoon normale datum en tyd
// @name:ak Twitter kyerɛ da ne bere a ɛfata .
// @name:am ትዊተር የተለመደው ቀን እና ሰዓት ያሳያል
// @name:ar يعرض Twitter التاريخ والوقت العاديين
// @name:as টুইটাৰে সাধাৰণ তাৰিখ আৰু সময় প্ৰদৰ্শন কৰে
// @name:av Твиттералда бихьулеб букӀуна гӀадатияб тарих ва заман
// @name:ay Twitter ukax normal uru ukat pacha uñacht’ayi .
// @name:az Twitter normal tarix və vaxt göstərir
// @name:ba Twitter ғәҙәти дата һәм ваҡыт күрһәтә
// @name:be Twitter адлюстроўвае звычайную дату і час
// @name:bg Twitter показва нормална дата и час
// @name:bh ट्विटर सामान्य तारीख आ समय के देखावेला
// @name:bm Twitter bɛ don ni waati nɔrɔlen jira .
// @name:bn টুইটার স্বাভাবিক তারিখ এবং সময় প্রদর্শন করে
// @name:bo ཊུ་ཊར་གྱིས་ཚེས་གྲངས་དང་དུས་ཚོད་སྟོན་གྱི་ཡོད།
// @name:br Diskouez a ra Twitter deiziad ha eur normal
// @name:bs Twitter prikazuje normalan datum i vrijeme
// @name:ca Twitter mostra la data i l’hora normals
// @name:ce Твиттерехь гойту нийса хан а, хан а .
// @name:ceb Ang Twitter nagpakita sa normal nga petsa ug oras
// @name:ch I Twitter ha dispåtta i fechan-ña yan .
// @name:ckb تویتەر بەروار و کاتی ئاسایی پیشان دەدات
// @name:co Twitter mostra a data è u tempu nurmale
// @name:cs Twitter zobrazuje normální datum a čas
// @name:cv Твиттер йĕркеллĕ кунпа вăхăта кăтартать
// @name:cy Mae Twitter yn arddangos dyddiad ac amser arferol
// @name:da Twitter viser normal dato og tid
// @name:de Twitter zeigt das normale Datum und die normale Uhrzeit an
// @name:dv ޓްވިޓަރ އިން އާދައިގެ ތާރީޚާއި ގަޑި ދައްކާ
// @name:dz ཊུ་ཊར་གྱིས་ སྤྱིར་བཏང་ཚེས་གྲངས་དང་དུས་ཚོད་བཀྲམ་སྟོན་འབདཝ་ཨིན།
// @name:ee Twitter ɖea ŋkeke kple gaƒoƒo si sɔ fiana .
// @name:el Το Twitter εμφανίζει κανονική ημερομηνία και ώρα
// @name:en Twitter displays normal date and time
// @name:en-GB Twitter displays normal date and time
// @name:eo Twitter montras normalan daton kaj horon
// @name:es Twitter muestra fecha y hora normales
// @name:et Twitter kuvab tavalise kuupäeva ja kellaaja
// @name:eu Twitterrek data eta ordu normala erakusten du
// @name:fa توییتر تاریخ و زمان عادی را نشان می دهد
// @name:ff Twitter ina hollira ñalngu e waktu no woorunoo
// @name:fi Twitter näyttää normaalin päivämäärän ja ajan
// @name:fil Ipinapakita ng Twitter ang normal na petsa at oras
// @name:fj Tuvanaka na tiki ni siga kei na gauna .
// @name:fo Twitter vísir vanliga dagfesting og tíð
// @name:fr Twitter affiche la date et l’heure normales
// @name:fr-CA Twitter affiche la date et l’heure normales
// @name:fy Twitter Toant normale datum en tiid
// @name:ga Taispeánann Twitter gnáth -dháta agus am
// @name:gd Bidh Twitter a ’taisbeanadh ceann-latha agus àm àbhaisteach
// @name:gl Twitter mostra a data e hora normais
// @name:gn Twitter ohechauka ára ha aravo normal .
// @name:gsw-berne Twitter displays normal date and time
// @name:gu ટ્વિટર સામાન્ય તારીખ અને સમય દર્શાવે છે
// @name:gv Twitter t’eh soilshaghey date as traa arryltagh
// @name:ha Twitter nuni na al’ada da lokaci
// @name:he טוויטר מציג תאריך ושעה רגילים
// @name:hi ट्विटर सामान्य तारीख और समय प्रदर्शित करता है
// @name:hmn TWITTER qhia txog hnub qub thiab sijhawm
// @name:hr Twitter prikazuje normalan datum i vrijeme
// @name:ht Twitter montre dat ak lè nòmal
// @name:hu A Twitter megjeleníti a normál dátumot és időt
// @name:hy Twitter- ը ցուցադրում է նորմալ ամսաթիվը եւ ժամանակը
// @name:id Twitter menampilkan tanggal dan waktu normal
// @name:ig Twitter na-egosiputa ụbọchị na oge
// @name:is Twitter sýnir venjulegan dag og tíma
// @name:it Twitter visualizza la data e l’ora normali
// @name:iu Twitter ᑕᑯᒃᓴᐅᑎᑦᑎᕗᖅ ᐅᓪᓗᕆᔭᐅᔪᒥᒃ ᐊᒻᒪ ᐱᕕᒃᓴᒥᒃ
// @name:ja Twitterには通常の日付と時刻が表示されます
// @name:jv Twitter nampilake tanggal lan wektu normal
// @name:ka Twitter აჩვენებს ნორმალურ თარიღს და დროს
// @name:kg Twitter ke monisa kilumbu mpi ntangu ya mbote
// @name:kk Twitter қалыпты күн мен уақытты көрсетеді
// @name:kl Twitterip ulloq piffissarlu nalinginnaasoq takutinneqartarpoq
// @name:km Twitter បង្ហាញកាលបរិច្ឆេទនិងពេលវេលាធម្មតា
// @name:kn ಟ್ವಿಟರ್ ಸಾಮಾನ್ಯ ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ
// @name:ko 트위터에는 일반 날짜와 시간이 표시됩니다
// @name:kr Twitter lan loktu-a yim-a kalkal fəlejin
// @name:ku Twitter tarîx û wextê normal nîşan dide
// @name:kv Твиттерын петкӧдлӧма нормальнӧй кад да кад .
// @name:ky Twitter кадимки күндү жана убакытты көрсөтөт
// @name:la Twitter Displays Normal Date et Tempus
// @name:lb Twitter weist normal Datum an Zäit
// @name:lg Twitter eraga olunaku n’essaawa ebya bulijjo .
// @name:ln Twitter elakisaka mokolo mpe ngonga ya momesano .
// @name:lo Twitter ສະແດງວັນທີແລະເວລາທໍາມະດາ
// @name:lt „Twitter“ rodo įprastą datą ir laiką
// @name:lv Twitter parāda normālu datumu un laiku
// @name:mg Ny Twitter dia mampiseho daty sy fotoana mahazatra
// @name:mh Twitter ej kwaļo̧k raan im iien .
// @name:mi Ka whakaatu a Twitter i te waa me te waa
// @name:mk Твитер прикажува нормален датум и време
// @name:ml ട്വിറ്റർ സാധാരണ തീയതിയും സമയവും പ്രദർശിപ്പിക്കുന്നു
// @name:mn Твиттер нь хэвийн огноо, цагийг харуулдаг
// @name:mo Twitter afișează data și ora normale
// @name:mr ट्विटर सामान्य तारीख आणि वेळ प्रदर्शित करते
// @name:ms Twitter memaparkan tarikh dan masa biasa
// @name:mt Twitter juri data u ħin normali
// @name:my Twitter သည်ပုံမှန်နေ့စွဲနှင့်အချိန်ကိုပြသသည်
// @name:nb Twitter viser normal dato og tid
// @name:ne ट्विटरले सामान्य मिति र समय प्रदर्शन गर्दछ
// @name:nl Twitter toont normale datum en tijd
// @name:nr Fala i-orasssssss.
// @name:ny Twitter ikuwonetsa tsiku labwinobwino komanso nthawi
// @name:oc Twitter aficha la data e l’ora normalas
// @name:om Twitter guyyaa fi sa’aatii idilee agarsiisa .
// @name:or ଟ୍ୱିଟର ସାଧାରଣ ତାରିଖ ଏବଂ ସମୟ ପ୍ରଦର୍ଶନ କରେ |
// @name:os Твиттер æвдисы нормалон датæ æмæ рæстæг
// @name:pa ਟਵਿੱਟਰ ਆਮ ਮਿਤੀ ਅਤੇ ਸਮਾਂ ਦਰਸਾਉਂਦਾ ਹੈ
// @name:pl Twitter wyświetla normalną datę i godzinę
// @name:ps ټویټر نورمال نیټه او وخت ښیې
// @name:pt Twitter exibe data e hora normais
// @name:pt-BR Twitter exibe data e hora normais
// @name:pt-PT Twitter exibe data e hora normais
// @name:qu Twitter normal p’unchawta, pachata rikuchin .
// @name:rn Twitter yerekana itariki n’isaha isanzwe
// @name:ro Twitter afișează data și ora normale
// @name:ru Твиттер отображает обычную дату и время
// @name:rw Twitter yerekana itariki nigihe gisanzwe
// @name:sa ट्विटर सामान्य तिथि एवं समय प्रदर्शित करता है।
// @name:sd Twitter عام تاريخ ۽ وقت ڏيکاري ٿو
// @name:se Twitter čájeha dábálaš beaivvi ja áiggi
// @name:sg Twitter afa lango na l’heure .
// @name:sh Твиттер приказује нормалан датум и време
// @name:si ට්විටර් සාමාන්ය දිනය සහ වේලාව පෙන්වයි
// @name:sk Twitter zobrazuje normálny dátum a čas
// @name:sl Twitter prikazuje normalen datum in čas
// @name:sm Twitter faʻaalia le taimi masani aso ma le taimi
// @name:sn Twitter inoratidza yakajairika zuva uye nguva
// @name:so Twitter wuxuu soo bandhigayaa taariikhda iyo waqtiga caadiga ah
// @name:sq Twitter shfaq datën dhe kohën normale
// @name:sr Твиттер приказује нормалан датум и време
// @name:ss I-Twitter ikhombisa lusuku nesikhatsi lesivamile
// @name:st Twitter e bontša letsatsi le tloaelehileng le nako
// @name:su Twitter ningalikeun tanggal sareng waktos anu normal
// @name:sv Twitter visar normalt datum och tid
// @name:sw Twitter inaonyesha tarehe ya kawaida na wakati
// @name:ta ட்விட்டர் சாதாரண தேதி மற்றும் நேரத்தைக் காட்டுகிறது
// @name:te ట్విట్టర్ సాధారణ తేదీ మరియు సమయాన్ని ప్రదర్శిస్తుంది
// @name:tg Twitter санаи муқаррарӣ ва вақтро нишон медиҳад
// @name:th Twitter แสดงวันที่และเวลาปกติ
// @name:ti ትዊተር ንቡር ዕለትን ሰዓትን
// @name:tk Twitter adaty senesini we wagty görkezýär
// @name:tl Ipinapakita ng Twitter ang normal na petsa at oras
// @name:tn Twitter e bontsha letlha le nako e e tlwaelegileng
// @name:to ’Oku fakahaa’i ’e he Twitter ’a e ’aho mo e taimi angamaheni .
// @name:tr Twitter normal tarih ve saati görüntüler
// @name:ts Twitter yi kombisa siku na nkarhi lowu tolovelekeke .
// @name:tt Твиттер гадәти датаны һәм вакытны күрсәтә
// @name:tw Twitter kyerɛ da ne bere a ɛfata .
// @name:ty E faaite te Twitter i te mahana e te taime matauhia
// @name:ug Twitter نورمال ۋاقىت ۋە ۋاقىتنى كۆرسىتىدۇ
// @name:uk Twitter відображає звичайну дату та час
// @name:ur ٹویٹر عام تاریخ اور وقت دکھاتا ہے
// @name:uz Twitter normal sana va vaqtni namoyish etadi
// @name:ve Twitter i sumbedza ḓuvha na tshifhinga tsho ḓoweleaho
// @name:vi Twitter hiển thị ngày và giờ bình thường
// @name:wo Twitter dafay wane bis ak waxtu
// @name:xh I-Twitter ibonisa umhla oqhelekileyo kunye nexesha
// @name:yi טוויטטער דיספּלייז נאָרמאַל דאַטע און צייט
// @name:yo Twitter ṣafihan ọjọ deede ati akoko
// @name:zh Twitter 显示正常的日期和时间
// @name:zh-CN Twitter 显示正常的日期和时间
// @name:zh-HK Twitter 顯示正常的日期和時間
// @name:zh-MO Twitter 顯示正常的日期和時間
// @name:zh-MY Twitter 显示正常的日期和时间
// @name:zh-SG Twitter 显示正常的日期和时间
// @name:zh-TW Twitter 顯示正常的日期和時間
// @name:zu I-Twitter ibonisa usuku olujwayelekile nesikhathi
// @name:es-419 Twitter muestra fecha y hora normales
// @description Like this, 70/12/31(Th) 23:59:59.
// @description:aa Tah celta. 70/12/31(Th) 23:59:59.
// @description:ab Абри еиԥш ауп ишыҟоу. 70/12/31(Th) 23:59:59.
// @description:af Dit lyk so. 70/12/31 (Th) 23:59:59.
// @description:ak Ɛte sɛ eyi. 70/12/31(th) 23:59:59.
// @description:am ይህ ይመስላል. 70/12/31 (te) 23:59:59.
// @description:ar يبدو هكذا. 70/12/31 (TH) 23:59:59.
// @description:as দেখাত এনেকুৱাই। ৭০/১২/৩১(তম) ২৩:৫৯:৫৯।
// @description:av Гьеб гьадинаб буго. 70/12/31(Тх) 23:59:59.
// @description:ay Ukhamaw ukham uñtasi. 70/12/31(th) 23:59:59.
// @description:az Bu kimi görünür. 70/12/31 (TH) 23:59:59.
// @description:ba Ул былай күренә. 70/12/31(Th) 23:59:59.
// @description:be Падобна так. 70/12/31 (TH) 23:59:59.
// @description:bg Изглежда така. 70/12/31 (TH) 23:59:59.
// @description:bh अईसन लागता। 70/12/31(वें) 23:59:59 के बा।
// @description:bm A bɛ iko nin. 70/12/31(nan) 23:59:59.
// @description:bn দেখে মনে হচ্ছে এটি। 70/12/31 (TH) 23:59:59।
// @description:bo འདི་འདྲ་འདུག ༧༠/༡༢/༣༡(Th) ༢༣:༥༩:༥༩།
// @description:br Seblantout a ra evel-se. 70/12/31(Th) 23:59:59.
// @description:bs Izgleda ovako. 70/12/31 (th) 23:59:59.
// @description:ca Sembla així. 70/12/31 (Th) 23:59:59.
// @description:ce Иштта хетало. 70/12/31(Th) 23:59:59.
// @description:ceb Ingon kini. 70/12/31 (Th) 23:59:59.
// @description:ch Parehu este yan este. 70/12/1211 (Th) 23:59:59.
// @description:ckb بەم شێوەیە دەردەکەوێت. 70/12/31(th) 23:59:59.
// @description:co Sembra cusì. 70/12/31 (u) 23:59:59.
// @description:cs Vypadá to takto. 70/12/31 (th) 23:59:59.
// @description:cv Кун пек курăнать. 70/12/31 (Тх) 23:59:59.
// @description:cy Mae’n edrych fel hyn. 70/12/31 (TH) 23:59:59.
// @description:da Det ser ud som dette. 70/12/31 (th) 23:59:59.
// @description:de Es sieht so aus. 70/12/31 (Th) 23:59:59.
// @description:dv މިހެން ހީވަނީ. 70/12/31(th) 23:59:59.
// @description:dz འདི་བཟུམ་མཐོངམ་ཨིན། ༧༠/༡༢/༣༡(ཐ) ༢༣:༥༩:༥༩.
// @description:ee Edze abe esia ene. 70/12/31 (th) 23:59:59.
// @description:el Μοιάζει με αυτό. 70/12/31 (Th) 23:59:59.
// @description:en It looks like this. 70/12/31(Th) 23:59:59.
// @description:en-GB It looks like this. 70/12/31(Th) 23:59:59.
// @description:eo Ĝi aspektas tiel. 70/12/31 (TH) 23:59:59.
// @description:es Se parece a esto. 70/12/31 (Th) 23:59:59.
// @description:es-419 Se parece a esto. 70/12/31 (Th) 23:59:59.
// @description:et See näeb välja selline. 70/12/31 (Th) 23:59:59.
// @description:eu Horren antza du. 70/12/31 (th) 23:59:59.
// @description:fa به نظر می رسد مانند این 70/12/31 (TH) 23:59:59.
// @description:ff Ina wayi no nii. 70/12/31(Th) 23:59:59.
// @description:fi Se näyttää tältä. 70/12/31 (Th) 23:59:59.
// @description:fil Mukhang ganito. 70/12/31 (TH) 23:59:59.
// @description:fj E vaka oqo na ka oqo. 70/12/31(The The) 23:59:59.
// @description:fo Tað sær soleiðis út. 70/12/31(H) 23:59:59.
// @description:fr Cela ressemble à ça. 70/12/31 (TH) 23:59:59.
// @description:fr-CA Cela ressemble à ça. 70/12/31 (TH) 23:59:59.
// @description:fy It liket derop. 70/12/31 (TH) 23:59:59.
// @description:ga Tá an chuma air seo. 70/12/31 (TH) 23:59:59.
// @description:gd Tha e coltach ri seo. 70/12/31 (th) 23:59:59.
// @description:gl Parece así. 70/12/31 (TH) 23:59:59.
// @description:gn Péicha ojehecha. 70/12/31(TH) 23:59:59.
// @description:gsw-berne It looks like this. 70/12/31(Th) 23:59:59.
// @description:gu તે આના જેવું લાગે છે. 70/12/31 (મી) 23:59:59.
// @description:gv Ta’n red shoh myr shoh. 70/12/31(Th) 23:59:59.
// @description:ha Yayi kama da wannan. 70/12/31 (th) 23:59:59.
// @description:he זה נראה כך. 70/12/31 (TH) 23:59:59.
// @description:hi यह इस तरह दिख रहा है। 70/12/31 (Th) 23:59:59।
// @description:hmn Nws zoo li no. 70/12/31 (th) 23:59:59.
// @description:hr Izgleda ovako. 70/12/31 (TH) 23:59:59.
// @description:ht Li sanble tankou sa a. 70/12/31 (th) 23:59:59.
// @description:hu Így néz ki. 70/12/31 (TH) 23:59:59.
// @description:hy Կարծես սա է: 70/12/31 (րդ) 23:59:59:
// @description:id Sepertinya ini. 70/12/31 (TH) 23:59:59.
// @description:ig Ọ dị ka nke a. 70/12/31 (TH) 23:59:59.
// @description:is Það lítur svona út. 70/12/31 (TH) 23:59:59.
// @description:it Sembra questo. 70/12/31 (Th) 23:59:59.
// @description:iu ᐃᒪᐃᑦᑐᔭᕐᒪᑦ. 70/12/31(Th) 23:59:59.
// @description:ja このように見えます。 70/12/31(th)23:59:59。
// @description:jv Katon kaya ngono. 70/12/31 (th) 23:59:59.
// @description:ka ასე გამოიყურება. 70/12/31 (TH) 23:59:59.
// @description:kg Yo ke monana mutindu yai. 70/12/31(Th) 23:59:59.
// @description:kk Бұл сияқты. 70/12/31 (мың) 23:59:59.
// @description:kl Taamatut isikkoqarpoq. 70/12/31(Th) 23:59:59.
// @description:km វាមើលទៅដូចនេះ។ 70/12/31 (ទី) 23:59:59 ។
// @description:kn ಇದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ. 70/12/31 (ನೇ) 23:59:59.
// @description:ko 이렇게 보인다. 70/12/31 (th) 23:59:59.
// @description:kr Alama adəgai. 70/12/31(Th) 23:59:59.
// @description:ku Wusa dixuye. 70/12/31 (th) 23:59:59.
// @description:kv Сійӧ татшӧм. 70/12/31(Тх) 23:59:59.
// @description:ky Бул окшойт. 70/12/31 (th) 23:59:59.
// @description:la Is vultus amo is. 70/12/31 (Th) 23:59:59.
// @description:lb IT gesäit esou aus. 70/12/31 (Th) 23:59:59.
// @description:lg Kirabika bwe kiti. 70/12/31(th) 23:59:59.
// @description:ln Ezali komonana lokola oyo. 70/12/31(th) 23:59:59.
// @description:lo ມັນເບິ່ງຄືວ່ານີ້. 70/12/31 (ທ) ເວລາ 23:59:59.
// @description:lt Panašu, kad taip. 70/12/31 (Th) 23:59:59.
// @description:lv Tas izskatās šādi. 70/12/31 (Th) 23:59:59.
// @description:mg Toa izany. 70/12/31 (th) 23:59:59.
// @description:mh Ej āinwōt in. 70/12/31( Tht) 23:59:59.
// @description:mi Te ahua nei. 70/12/31 (TH) 23:59:59.
// @description:mk Изгледа вака. 70/12/31 (TH) 23:59:59.
// @description:ml ഇത് ഇതുപോലെ തോന്നുന്നു. 70/12/31 (TH) 23:59:59.
// @description:mn Энэ нь иймэрхүү харагдаж байна. 70/12/31 (th) 23:59:59.
// @description:mo Pare așa. 70/12/31 (TH) 23:59:59.
// @description:mr हे असे दिसते. 70/12/31 (व्या) 23:59:59.
// @description:ms Nampaknya ini. 70/12/31 (Th) 23:59:59.
// @description:mt Jidher bħal dan. 70/12/31 (Th) 23:59:59.
// @description:my ဒါနဲ့တူတယ် 70/12/31 (ကြိမ်မြောက်) 23:59:59 ။
// @description:nb Det ser slik ut. 70/12/31 (TH) 23:59:59.
// @description:ne यो यस्तो देखिन्छ। 70/12/31 (th) 23 :: 59:59।
// @description:nl Het ziet er zo uit. 70/12/31 (TH) 23:59:59.
// @description:nr Bazama ukududuza. ( 1 10:10 ) U-Israyeli u-10:1.
// @description:ny Zikuwoneka ngati izi. 70/12/31 (th) 23:59:59.
// @description:oc Sembla aquò. 70/12/31(La) 23:59:59.
// @description:om Akkas fakkaata. 70/12/31(th) 23:59:59.
// @description:or ଏହା ଏହିପରି ଦେଖାଯାଏ | 70/12/31 (ଥ) 23:59।
// @description:os Афтæ зыны ахæм. 70/12/31(Th) 23:59:59.
// @description:pa ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਲੱਗਦਾ ਹੈ. 70/12/31 (ਧੂਹ) 23:59:59.
// @description:pl Wygląda na to. 70/12/31 (th) 23:59:59.
// @description:ps دا ورته ښکاري. 70/12/31 (TH) 23:59:59.
// @description:pt Parece isso. 70/12/31 (TH) 23:59:59.
// @description:pt-BR Parece isso. 70/12/31 (TH) 23:59:59.
// @description:pt-PT Parece isso. 70/12/31 (TH) 23:59:59.
// @description:qu Kaymanmi rikchakun. 70/12/31(H) 23:59:59.
// @description:rn Bimeze gutya. 70/12/31(Th) 23:59:59.
// @description:ro Pare așa. 70/12/31 (TH) 23:59:59.
// @description:ru Похоже, это. 70/12/31 (TH) 23:59:59.
// @description:rw Birasa nkibi. 70/12/31 (TH) 23:59:59.
// @description:sa एवं दृश्यते। 70/12/31(थ) 23:59:59।
// @description:sd اهو ڏسجي ٿو. 70/12/31 (ٿ) 23:59:59.
// @description:se Dat lea ná. 70/12/31(Th) 23:59:59.
// @description:sg A yeke mo bâ mo tene a yeke tongaso. 70/12/12 (Th) 23:59:59.
// @description:sh Изгледа овако. 70/12/31 (ТХ) 23:59:59.
// @description:si ඒක මේ වගේ. 70/12/31 (TH) 23:59:59.
// @description:sk Vyzerá to takto. 70/12/31 (Th) 23:59:59.
// @description:sl Videti je tako. 70/12/31 (TH) 23:59:59.
// @description:sm E pei o lenei. 70/12/31 (th) 23:59:59.
// @description:sn Zvinotaridzika seizvi. 70/12/31 (th) 23:59:59.
// @description:so Waxay u egtahay sidan oo kale. 70/12/31 (th) 23:59:59.
// @description:sq Duket kështu. 70/12/31 (TH) 23:59:59.
// @description:sr Изгледа овако. 70/12/31 (ТХ) 23:59:59.
// @description:ss Kubukeka kanje. 70/12/31(Th) 23:59:59.
// @description:st E shebahala tjena. 70/12/31 (th) 23:59:59.
// @description:su Sigana mah ieu. 70/12/31 (th) 23:59:59.
// @description:sv Det ser ut så här. 70/12/31 (Th) 23:59:59.
// @description:sw Inaonekana kama hii. 70/12/31 (TH) 23:59:59.
// @description:ta இது போல் தெரிகிறது. 70/12/31 (வது) 23:59:59.
// @description:te ఇది ఇలా ఉంది. 70/12/31 (వ) 23:59:59.
// @description:tg Чунин ба назар мерасад. 70/12/31 (TH) 23:59:59.
// @description:th ดูเหมือนว่า 70/12/31 (Th) 23:59:59
// @description:ti ከምዚ ይመስል። 70/12/31(th) 23:59:59።
// @description:tk Şuňa meňzeýär. 70/12/3/31 (tra) 23:59:59.
// @description:tl Mukhang ganito. 70/12/31 (TH) 23:59:59.
// @description:tn Go lebega jaana. 70/12/31(Th) 23:59:59.
// @description:to ʻOku hangē ʻení. 70/12/31(T) 23:59:59.
// @description:tr Öyle görünüyor. 70/12/31 (TH) 23:59:59.
// @description:ts Swi languteka hi ndlela leyi. 70/12/31(TH) 23:59:59.
// @description:tt Бу шундый. 70/12/31 (th) 23:59:59.
// @description:tw Ɛte sɛ eyi. 70/12/31(th) 23:59:59.
// @description:ty E au te reira i te reira. 70/12/31(Th) 23:59:59.
// @description:ug ئۇ ئوخشايدۇ. 70/12/31 (th) 23:59:59.
// @description:uk Це виглядає так. 70/12/31 (Th) 23:59:59.
// @description:ur ایسا لگتا ہے۔ 70/12/31 (ویں) 23:59:59۔
// @description:uz Bu shunday ko’rinadi. 70/12/31 (Th) 23:59:59.
// @description:ve Zwi vhonala zwo ralo. 70/12/31(Th) 23:59:59.
// @description:vi Nó trông như thế này. 70/12/31 (th) 23:59:59.
// @description:wo Dafa mel nii. 70/12/31(Th) 23:59:59.
// @description:xh Ijongeka ngoluhlobo. 70/12/31 (th) 23:59:59.
// @description:yi עס קוקט ווי דאָס. 70/12/31 (טה) 23:59:59.
// @description:yo O dabi eyi. 70/12/31 (TH) 23:59:59.
// @description:zh 看起来是这样的。70/12/31(Th) 23:59:59.
// @description:zh-CN 看起来是这样的。70/12/31(Th) 23:59:59.
// @description:zh-HK 看起來是這樣的。 70/12/31(Th) 23:59:59.
// @description:zh-MO 看起來是這樣的。 70/12/31(Th) 23:59:59.
// @description:zh-MY 看起来是这样的。70/12/31(Th) 23:59:59.
// @description:zh-SG 看起来是这样的。70/12/31(Th) 23:59:59.
// @description:zh-TW 看起來是這樣的。 70/12/31(Th) 23:59:59.
// @description:zu Kubukeka kanjena. 70/12/31 (th) 23:59:59.
// @author AeamaN
// @namespace https://github.com/ChinaGodMan/UserScripts
// @supportURL https://github.com/ChinaGodMan/UserScripts/issues
// @homepageURL https://github.com/ChinaGodMan/UserScripts
// @homepage https://github.com/ChinaGodMan/UserScripts
// @license MIT
// @match https://twitter.com/*
// @match https://mobile.twitter.com/*
// @match https://mobile.twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion/*
// @match https://x.com/*
// @match https://mobile.x.com/*
// @require https://update.greasyfork.org/scripts/538254/1601105/PNG.js
// @grant GM_getValue
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @run-at document-body
// @icon https://raw.githubusercontent.com/ChinaGodMan/UserScriptsHistory/main/scriptsIcon/x.svg
// @compatible chrome
// @compatible firefox
// @compatible edge
// @compatible opera
// @compatible safari
// @compatible kiwi
// @compatible qq
// @compatible via
// @compatible brave
// @version 2025.6.4.1
// ==/UserScript==
// And more. See Default valuse below.
// It's based on "https://qiita.com/libraplanet/items/0bdd7ef1a13e7af8f48f".
//
// 他にも機能があります。以下の Default valuse を確認して下さい。
// "https://qiita.com/libraplanet/items/0bdd7ef1a13e7af8f48f" を参考にしています。
(function () { /* START */
'use strict'
// //////////// Settings //////////// //
// No GUI Settings
// Default values are used
const NOGUI = false
// ////////////////////////////////// //
// ///////// Default valuse ///////// //
// Blue bird returns
const BBR = false
// Replace with orig images(wasted traffic occurs)
const ORIGI = false
// Slightly wider TL
const WTL = false
// Eye Care Mode at default background
const ECMODE = true
// Hide promotions
const HPP = true
// Hide Who to follow
const HWTF = true
// Hide DM drawer
const HDMD = true
// Hide Get Verified
const HGV = true
// Fine engagement
// 1. Live
// 2. Normal
// 0. Do nothing
const FEGM = 0
// Fix videos quality
// 1. Maximum
// 2. Minimum
// 0. Do nothing
const FVQ = 1
// Date formats
// 1. 31.12.70 23:59
// 2. 31.12.70 23:59:59
// 3. 31.12.70(Th) 23:59
// 4. 31.12.70(Th) 23:59:59
//
// 5. 70/12/31 23:59
// 6. 70/12/31 23:59:59
// 7. 70/12/31(Th) 23:59
// 8. 70/12/31(Th) 23:59:59 [ye/mo/da(we) ho:mi:se]
//
// 9. 70-12/31 23:59
// 10. 70-12/31 23:59'59
// 11. 70-12/31(Th) 23:59
// 12. 70-12/31(Th) 23:59'59
//
// 13. M59-12-31 23:59
// 14. M59-12-31 23:59:59
// 15. M59-12-31(Th) 23:59
// 16. M59-12-31(Th) 23:59:59
//
// 0. Do nothing
const FMT = 7
// Loop interval(ms)
const INTL = 800
// ////////////////////////////////// //
const MYNAME = 'sdnt1200'
const LANG = document.documentElement.getAttribute('lang')
let time_r = Date.now()
let s_mutations = true
let observer = new MutationObserver(function (mutations) {
s_mutations = mutations
})
let originalXHROPEN
let bbr, origi, wtl, ecmode, hpp, hwtf, hdmd, hgv, fegm, fvq, fmt, intl
function makeDialog() {
let dalg = document.createElement('div')
dalg.className = 'us-' + MYNAME
dalg.style.all = 'initial'
dalg.style.backgroundColor = 'rgb(235, 235, 235)'
dalg.style.border = '3px outset'
dalg.style.borderRadius = '1%'
dalg.style.display = 'none'
dalg.style.fontFamily = 'monospace'
dalg.style.fontSize = '12px'
dalg.style.height = '440px'
dalg.style.width = '480px'
dalg.style.paddingLeft = '2px'
dalg.style.paddingRight = '2px'
dalg.style.position = 'fixed'
dalg.style.right = '8px'
dalg.style.top = '8px'
dalg.style.zIndex = '2147483647'
dalg.style.overflow = 'auto'
let html =
'<span style="all: initial; font-size: 120%; line-height: 210%">' +
GM_info.script.name + ' ' + GM_info.script.version + ' ' + 'Settings' +
'</span><br />\n' +
'<input type="radio" name="fmt" value="1" class="top_r" />31.12.70 23:59' +
' ' +
' ' +
'<input type="radio" name="fmt" value="2" class="top_r" />31.12.70 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="3" class="mid_r" />31.12.70(Th) 23:59' +
' ' +
'<input type="radio" name="fmt" value="4" class="mid_r" />31.12.70(Th) 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="5" class="mid_r" />70/12/31 23:59' +
' ' +
'<input type="radio" name="fmt" value="6" class="mid_r" />70/12/31 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="7" class="mid_r" />70/12/31(Th) 23:59' +
' ' +
'<input type="radio" name="fmt" value="8" class="mid_r" />70/12/31(Th) 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="9" class="mid_r" />70-12/31 23:59' +
' ' +
'<input type="radio" name="fmt" value="10" class="mid_r" />70-12/31 23:59\'59<br />\n' +
'<input type="radio" name="fmt" value="11" class="mid_r" />70-12/31(Th) 23:59' +
' ' +
'<input type="radio" name="fmt" value="12" class="mid_r" />70-12/31(Th) 23:59\'59<br />\n' +
'<input type="radio" name="fmt" value="13" class="mid_r" />M59-12-31 23:59' +
' ' +
'<input type="radio" name="fmt" value="14" class="mid_r" />M59-12-31 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="15" class="mid_r" />M59-12-31(Th) 23:59' +
' ' +
'<input type="radio" name="fmt" value="16" class="mid_r" />M59-12-31(Th) 23:59:59<br />\n' +
'<input type="radio" name="fmt" value="0" class="btm_r" />Do nothing<br />\n' +
'<input type="checkbox" name="bbr" class="top_c" />BB returns' +
' ' +
'<input type="checkbox" name="origi" class="mid_c" />Replace with orig images*<br />\n' +
'<input type="checkbox" name="wtl" class="mid_c" />Widen slightly TL' +
' ' +
'<input type="checkbox" name="ecmode" class="btm_c" />Eye Care Mode at default BG<br />\n' +
'<input type="checkbox" name="hpp" class="top_c" />Hide promotions' +
' ' +
'<input type="checkbox" name="hwtf" class="mid_c" />Hide Who to follow<br />\n' +
'<input type="checkbox" name="hdmd" class="mid_c" />Hide DM drawer' +
' ' +
'<input type="checkbox" name="hgv" class="btm_c" />Hide Get Verified<br />\n' +
'<input type="radio" name="fegm" value="1" class="top_r" />Fine engagement(live)' +
' ' +
'<input type="radio" name="fegm" value="2" class="top_r" />Fine engagement(normal)<br />\n' +
'<input type="radio" name="fegm" value="0" class="btm_r" />Do nothing<br />\n' +
'<input type="radio" name="fvq" value="1" class="top_r" />at maximum video quality**' +
' ' +
'<input type="radio" name="fvq" value="2" class="top_r" />at minimum video quality<br />\n' +
'<input type="radio" name="fvq" value="0" class="btm_r" />Do nothing<br />\n' +
'<span style="all: initial; font-size: 100%">' +
'Loop interval(ms)** ' +
'</span><input type="text" name="intl" size="10" class="top_t" /><br />\n' +
'<span style="all: initial; font-size: 100%; line-height: 200%">' +
'*wasted traffic occurs **Restart required' +
'</span><br />\n' +
'<input type="button" class="top_b" value="Cancel" />\n' +
'<input type="button" class="top_b" value="Set default" />\n' +
'<input type="button" class="top_b" value="Save & Close" /><br /><br />\n'
dalg.innerHTML = html
for (let e of dalg.querySelectorAll('input.top_r, input.mid_r, input.btm_r')) {
e.style.all = 'initial'
e.style.appearance = 'auto'
e.style.marginRight = '1px'
e.style.marginTop = '1px'
}
for (let e of dalg.querySelectorAll('input.top_c, input.mid_c, input.btm_c')) {
e.style.all = 'initial'
e.style.appearance = 'auto'
e.style.marginRight = '1px'
e.style.marginTop = '1px'
}
for (let e of dalg.querySelectorAll('input.top_t')) {
e.style.all = 'initial'
e.style.backgroundColor = 'rgb(255, 255, 255)'
e.style.fontFamily = 'monospace'
e.style.fontSize = '100%'
e.style.marginLeft = '1px'
e.style.marginRight = '1px'
e.style.marginTop = '8px'
e.style.marginBottom = '0px'
e.style.paddingLeft = '1px'
e.style.paddingRight = '1px'
e.style.paddingTop = '1px'
e.style.paddingBottom = '1px'
}
for (let e of dalg.querySelectorAll('input.top_b')) {
e.style.all = 'initial'
e.style.backgroundColor = 'rgb(190, 190, 190)'
e.style.borderRadius = '10%'
e.style.cursor = 'default'
e.style.fontSize = '110%'
e.style.marginTop = '10px'
e.style.marginBottom = '0px'
e.style.paddingTop = '6px'
e.style.paddingBottom = '6px'
e.style.textAlign = 'center'
e.style.width = '90px'
}
return dalg
}
function makeFunc(dalg) {
dalg.addEventListener(
'click',
function (event) { event.stopPropagation() },
false
)
dalg.querySelector('input[value="Cancel"]').addEventListener(
'click',
function () { dalg.style.display = 'none' },
false
)
dalg.querySelector('input[value="Cancel"]').addEventListener(
'mouseenter',
function (event) { event.target.style.backgroundColor = 'rgb(170, 170, 170)' },
false
)
dalg.querySelector('input[value="Cancel"]').addEventListener(
'mouseleave',
function (event) { event.target.style.backgroundColor = 'rgb(190, 190, 190)' },
false
)
dalg.querySelector('input[value="Set default"]').addEventListener(
'click',
function () {
dalg.querySelector('input[name="bbr"]').checked = BBR
dalg.querySelector('input[name="origi"]').checked = ORIGI
dalg.querySelector('input[name="fmt"][value="' + FMT + '"]').checked = true
dalg.querySelector('input[name="wtl"]').checked = WTL
dalg.querySelector('input[name="ecmode"]').checked = ECMODE
dalg.querySelector('input[name="hpp"]').checked = HPP
dalg.querySelector('input[name="hwtf"]').checked = HWTF
dalg.querySelector('input[name="hdmd"]').checked = HDMD
dalg.querySelector('input[name="hgv"]').checked = HGV
dalg.querySelector('input[name="fegm"][value="' + FEGM + '"]').checked = true
dalg.querySelector('input[name="fvq"][value="' + FVQ + '"]').checked = true
dalg.querySelector('input[name="intl"]').value = INTL
},
false
)
dalg.querySelector('input[value="Set default"]').addEventListener(
'mouseenter',
function (event) { event.target.style.backgroundColor = 'rgb(170, 170, 170)' },
false
)
dalg.querySelector('input[value="Set default"]').addEventListener(
'mouseleave',
function (event) { event.target.style.backgroundColor = 'rgb(190, 190, 190)' },
false
)
dalg.querySelector('input[value="Save & Close"]').addEventListener(
'click',
function () {
bbr = dalg.querySelector('input[name="bbr"]').checked
origi = dalg.querySelector('input[name="origi"]').checked
for (let e of dalg.querySelectorAll('input[name="fmt"]')) {
if (e.checked) {
fmt = +e.value
break
}
}
wtl = dalg.querySelector('input[name="wtl"]').checked
ecmode = dalg.querySelector('input[name="ecmode"]').checked
hpp = dalg.querySelector('input[name="hpp"]').checked
hwtf = dalg.querySelector('input[name="hwtf"]').checked
hdmd = dalg.querySelector('input[name="hdmd"]').checked
hgv = dalg.querySelector('input[name="hgv"]').checked
for (let e of dalg.querySelectorAll('input[name="fegm"]')) {
if (e.checked) {
fegm = +e.value
break
}
}
for (let e of dalg.querySelectorAll('input[name="fvq"]')) {
if (e.checked) {
fvq = +e.value
break
}
}
intl = +dalg.querySelector('input[name="intl"]').value
GM_setValue('bbr', bbr)
GM_setValue('origi', origi)
GM_setValue('fmt', fmt)
GM_setValue('wtl', wtl)
GM_setValue('ecmode', ecmode)
GM_setValue('hpp', hpp)
GM_setValue('hwtf', hwtf)
GM_setValue('hdmd', hdmd)
GM_setValue('hgv', hgv)
GM_setValue('fegm', fegm)
GM_setValue('fvq', fvq)
GM_setValue('intl', intl)
dalg.style.display = 'none'
},
false
)
dalg.querySelector('input[value="Save & Close"]').addEventListener(
'mouseenter',
function (event) { event.target.style.backgroundColor = 'rgb(170, 170, 170)' },
false
)
dalg.querySelector('input[value="Save & Close"]').addEventListener(
'mouseleave',
function (event) { event.target.style.backgroundColor = 'rgb(190, 190, 190)' },
false
)
}
function initgui() {
if (GM_getValue('bbr') === undefined) {
GM_setValue('bbr', BBR)
} else {
bbr = GM_getValue('bbr')
}
if (GM_getValue('origi') === undefined) {
GM_setValue('origi', ORIGI)
} else {
origi = GM_getValue('origi')
}
if (GM_getValue('fmt') === undefined) {
GM_setValue('fmt', FMT)
} else {
fmt = GM_getValue('fmt')
}
if (GM_getValue('wtl') === undefined) {
GM_setValue('wtl', WTL)
} else {
wtl = GM_getValue('wtl')
}
if (GM_getValue('ecmode') === undefined) {
GM_setValue('ecmode', ECMODE)
} else {
ecmode = GM_getValue('ecmode')
}
if (GM_getValue('hpp') === undefined) {
GM_setValue('hpp', HPP)
} else {
hpp = GM_getValue('hpp')
}
if (GM_getValue('hwtf') === undefined) {
GM_setValue('hwtf', HWTF)
} else {
hwtf = GM_getValue('hwtf')
}
if (GM_getValue('hdmd') === undefined) {
GM_setValue('hdmd', HDMD)
} else {
hdmd = GM_getValue('hdmd')
}
if (GM_getValue('hgv') === undefined) {
GM_setValue('hgv', HGV)
} else {
hgv = GM_getValue('hgv')
}
if (GM_getValue('fegm') === undefined) {
GM_setValue('fegm', FEGM)
} else {
fegm = GM_getValue('fegm')
}
if (GM_getValue('fvq') === undefined) {
GM_setValue('fvq', FVQ)
} else {
fvq = GM_getValue('fvq')
}
if (GM_getValue('intl') === undefined) {
GM_setValue('intl', INTL)
} else {
intl = GM_getValue('intl')
}
let dalg = makeDialog()
makeFunc(dalg)
document.body.appendChild(dalg)
GM_registerMenuCommand('Settings', function () {
if (dalg.style.display == 'none') {
dalg.querySelector('input[name="bbr"]').checked = bbr
dalg.querySelector('input[name="origi"]').checked = origi
dalg.querySelector('input[name="fmt"][value="' + fmt + '"]').checked = true
dalg.querySelector('input[name="wtl"]').checked = wtl
dalg.querySelector('input[name="ecmode"]').checked = ecmode
dalg.querySelector('input[name="hpp"]').checked = hpp
dalg.querySelector('input[name="hwtf"]').checked = hwtf
dalg.querySelector('input[name="hdmd"]').checked = hdmd
dalg.querySelector('input[name="hgv"]').checked = hgv
dalg.querySelector('input[name="fegm"][value="' + fegm + '"]').checked = true
dalg.querySelector('input[name="fvq"][value="' + fvq + '"]').checked = true
dalg.querySelector('input[name="intl"]').value = intl
dalg.style.display = 'block'
}
})
}
function datef(date, f) {
const WEEK = {
'ja': ['日', '月', '火', '水', '木', '金', '土'],
'ko': ['일', '월', '화', '수', '목', '금', '토'],
'zh-Hant': ['日', '一', '二', '三', '四', '五', '六'],
'zh': ['日', '一', '二', '三', '四', '五', '六'],
'ru': ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'],
'de': ['Son', 'Mon', 'Die', 'Mit', 'Don', 'Fre', 'Sam'],
'it': ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
'fr': ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
'pt': ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
'en': ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'] // Add your language
}
const WEEK_L = WEEK[LANG] ?? WEEK['en']
const YE = date.getFullYear().toString().slice(-2)
const YM = date.getFullYear() - 1911
const MO = ('0' + (date.getMonth() + 1)).slice(-2)
const DA = ('0' + date.getDate()).slice(-2)
const WE = WEEK_L[date.getDay()]
const HO = ('0' + date.getHours()).slice(-2)
const MI = ('0' + date.getMinutes()).slice(-2)
const SE = ('0' + date.getSeconds()).slice(-2)
const F = [
DA + '.' + MO + '.' + YE + ' ' + HO + ':' + MI, // 0=1
DA + '.' + MO + '.' + YE + ' ' + HO + ':' + MI + ':' + SE,
DA + '.' + MO + '.' + YE + '(' + WE + ') ' + HO + ':' + MI,
DA + '.' + MO + '.' + YE + '(' + WE + ') ' + HO + ':' + MI + ':' + SE,
YE + '/' + MO + '/' + DA + ' ' + HO + ':' + MI,
YE + '/' + MO + '/' + DA + ' ' + HO + ':' + MI + ':' + SE,
YE + '/' + MO + '/' + DA + '(' + WE + ') ' + HO + ':' + MI,
YE + '/' + MO + '/' + DA + '(' + WE + ') ' + HO + ':' + MI + ':' + SE,
YE + '-' + MO + '/' + DA + ' ' + HO + ':' + MI,
YE + '-' + MO + '/' + DA + ' ' + HO + ':' + MI + '\'' + SE,
YE + '-' + MO + '/' + DA + '(' + WE + ') ' + HO + ':' + MI,
YE + '-' + MO + '/' + DA + '(' + WE + ') ' + HO + ':' + MI + '\'' + SE,
'M' + YM + '-' + MO + '-' + DA + ' ' + HO + ':' + MI,
'M' + YM + '-' + MO + '-' + DA + ' ' + HO + ':' + MI + ':' + SE,
'M' + YM + '-' + MO + '-' + DA + '(' + WE + ') ' + HO + ':' + MI,
'M' + YM + '-' + MO + '-' + DA + '(' + WE + ') ' + HO + ':' + MI + ':' + SE,
YE + '/' + MO + '/' + DA + '(' + WE + ') ' + HO + ':' + MI + ':' + SE
]
return F[f - 1] ?? F[16]
}
function bbreturn() {
const SEL_ID =
'div#placeholder[aria-label="Loading…"] g path, ' +
'svg#loading-x-anim-0 g path, svg#loading-x-anim-1 g path, ' +
'svg#loading-x-anim-2 g path, svg#loading-x-anim-3 g path'
const SEL_H = 'header[role="banner"] h1[role="heading"] g path' // ホーム
const SEL_M = 'div[data-testid="Dropdown"] a[href="/i/premium_sign_up"] g path' // もっと見る
const SEL_V = 'header[role="banner"] nav g path' // 認証済み
const SEL_L = 'div[role="dialog"] div[aria-labelledby="modal-header"] svg.r-lrvibr path' // ログイン
const SEL_T = 'div#react-root main svg.r-lrvibr path' // トップ
let elms = document.querySelectorAll(
SEL_ID + ', ' + SEL_H + ', ' + SEL_M + ', ' + SEL_V + ', ' + SEL_L + ', ' + SEL_T
)
let ss // Temp.
for (let e of elms) {
const D_X = 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99'
const D_BB =
'M23.643 4.937c-.835.37-1.732.62-2.675.733.962-.576 1.7-1.49 2.048-2.578-.9.534-1' +
'.897.922-2.958 1.13-.85-.904-2.06-1.47-3.4-1.47-2.572 0-4.658 2.086-4.658 4.66 0' +
' .364.042.718.12 1.06-3.873-.195-7.304-2.05-9.602-4.868-.4.69-.63 1.49-.63 2.342' +
' 0 1.616.823 3.043 2.072 3.878-.764-.025-1.482-.234-2.11-.583v.06c0 2.257 1.605 ' +
'4.14 3.737 4.568-.392.106-.803.162-1.227.162-.3 0-.593-.028-.877-.082.593 1.85 2' +
'.313 3.198 4.352 3.234-1.595 1.25-3.604 1.995-5.786 1.995-.376 0-.747-.022-1.112' +
'-.065 2.062 1.323 4.51 2.093 7.14 2.093 8.57 0 13.255-7.098 13.255-13.254 0-.2-.' +
'005-.402-.014-.602.91-.658 1.7-1.477 2.323-2.41z'
const D_FILL_N = 'none'
const D_FILL_LB = '#1da1f2ff'
const D_FILL_DB = '#1d9bf0ff'
const D_S = 'currentColor'
const D_SW = '2'
if (e.getAttribute('d').startsWith(D_X)) {
if (e.closest('header[role="banner"] nav, div[data-testid="Dropdown"] a[href="/i/premium_sign_up"]')) {
ss = s_mutations
e.setAttribute('d', D_BB)
e.setAttribute('fill', D_FILL_N)
e.setAttribute('stroke', D_S)
e.setAttribute('stroke-width', D_SW)
s_mutations = ss
} else if (e.closest('div#placeholder[aria-label="Loading…"]') ||
e.closest('svg[id^="loading-x-anim-"]')) {
ss = s_mutations
e.setAttribute('d', D_BB)
e.setAttribute('fill', D_FILL_LB)
s_mutations = ss
} else {
ss = s_mutations
e.setAttribute('d', D_BB)
e.setAttribute('fill', D_FILL_DB)
s_mutations = ss
}
}
}
const TITLE = document.title
let elm = document.querySelector('head link[rel="shortcut icon"]')
let elm_2 = document.querySelector('head link[rel="apple-touch-icon"]')
ss = s_mutations
if (
elm &&
!/favicons\/twitter\.2\.ico$/.test(elm.getAttribute('href')) &&
!/^\(\d+\) /.test(document.title)
) {
elm.setAttribute('href', '//abs.twimg.com/favicons/twitter.2.ico')
} else if (
elm &&
!/favicons\/twitter-pip\.2\.ico$/.test(elm.getAttribute('href')) &&
/^\(\d+\) /.test(document.title)
) {
elm.setAttribute('href', '//abs.twimg.com/favicons/twitter-pip.2.ico')
}
if (
elm_2 &&
/responsive-web\/client-web[-a-z]*\/icon-ios\.77d25eba\.png$/.test(elm_2.getAttribute('href'))
) {
elm_2.setAttribute('href', 'data:image/png;base64,' + PNG_BB)
alert('afaf')
}
let rt = TITLE.replace(/ \/ X$/, ' / Twitter')
if (TITLE != rt) document.title = rt
s_mutations = ss
}
function origimg() {
const SEL_D = 'div[style*="background-image:"]'
const SEL_I = 'img'
let elms = document.querySelectorAll(SEL_D + ', ' + SEL_I)
for (let e of elms) {
let regex = /^(.+pbs\.twimg\.com\/[^?]+\?format=\w+)(&|&)(name=)(\w+)([")]*)$/
let ss // Temp.
if (/div/i.test(e.tagName)) {
let r = regex.exec(e.style.backgroundImage)
if (r && r[4] != 'orig') {
ss = s_mutations
e.style.backgroundImage = r[1] + r[2] + r[3] + 'orig' + r[5]
s_mutations = ss
continue
}
continue
}
let r = regex.exec(e.getAttribute('src'))
if (r && r[4] != 'orig') {
ss = s_mutations
e.setAttribute('src', r[1] + r[2] + r[3] + 'orig' + r[5])
s_mutations = ss
continue
}
}
}
function widetl() {
let elms = document.querySelectorAll('div.css-175oi2r.r-aqfbo4[data-testid="sidebarColumn"]')
let ss // Temp.
if (!document.querySelector('head style.' + 'us-' + MYNAME + '-' + 'c')) {
let style_a = document.createElement('style')
style_a.className = 'us-' + MYNAME + '-' + 'a'
style_a.textContent =
'div.css-175oi2r.r-f8sm7e.r-13qz1uu.r-1ye8kvj' +
'{max-width: 660px;}'
let style_b = document.createElement('style')
style_b.className = 'us-' + MYNAME + '-' + 'b'
style_b.textContent =
'div[role="dialog"] div.css-175oi2r.r-f8sm7e.r-13qz1uu.r-1ye8kvj' +
'{max-width: 600px;}'
let style_c = document.createElement('style')
style_c.className = 'us-' + MYNAME + '-' + 'c'
style_c.textContent =
'section div.css-175oi2r.r-f8sm7e.r-13qz1uu.r-1ye8kvj' +
'{max-width: 600px;}'
ss = s_mutations
document.head.appendChild(style_a)
document.head.appendChild(style_b)
document.head.appendChild(style_c)
s_mutations = ss
}
for (let e of elms) {
let d, dd, dg, dgi, spdgi, da, ds
d = e.querySelector(':scope>div>div.r-1hycxz', ':scope>div>div.r-1jocfgc')
if (d != null) {
dd = d.querySelector('div.r-aqfbo4.r-6gpygo.r-15ysp7h') // null対策
dg = d.querySelector('div[data-testid="google_sign_in_container"]')
dgi = d.querySelector('div[data-testid="google_sign_in_container"] iframe[id^="gsi"]')
da = d.querySelector('button[data-testid="apple_sign_in_button"]')
ds = d.querySelector('a[href="/i/flow/signup"]')
}
if (dgi) spdgi = dgi.parentNode.parentNode
ss = s_mutations
if (dd) dd.style.width = '290px'
if (dg) dg.style.width = '260px'
if (dgi) dgi.style.left = '-20px'
if (spdgi) spdgi.style.setProperty('clip-path', 'inset(0 round 20px)')
if (da) da.style.width = '260px'
if (ds) ds.style.width = '260px'
if (d != null) d.style.width = '290px'
e.style.width = '290px' // 350px
s_mutations = ss
}
}
function chgbgc() {
let body = document.getElementsByTagName('body')[0]
if (/\(2\d{2},\s*2\d{2},\s*2\d{2}/i.test(body.style.backgroundColor)) {
let tl, fb, sb
tl = document.querySelector('main div.r-f8sm7e.r-1ye8kvj')
fb = document.querySelector('main div.r-1e5uvyk.r-6026j')
sb = document.querySelector('main div.r-aqfbo4.r-15ysp7h.r-1xcajam')
let ss = s_mutations
body.style.backgroundColor = 'rgb(253, 253, 245)'
if (tl != null) tl.style.backgroundColor = 'rgb(253, 253, 245)'
if (fb != null) fb.style.backgroundColor = 'rgba(253, 253, 245, 0.85)'
if (sb != null) sb.style.backgroundColor = 'rgb(253, 253, 245)'
s_mutations = ss
}
}
function hidepromo() {
const SEL = 'path[d^="M19.498 3h-15c-1.381 0-2.5 1.12-2.5 2.5v13c0 1.38 1.119 2.5"]'
const SEL_2 = 'main div[data-testid="sidebarColumn"] section div[data-testid="trend"] div.r-14gqq1x ' +
'span.css-1qaijid.r-bcqeeo.r-qvutc0' // def-ja, def-en, ble-ja, ble-en
const SEL_3 = 'main div[data-testid="primaryColumn"] section article ' +
'span.css-1jxf684.r-bcqeeo.r-qvutc0.r-poiln3'
const SEL_4 =
'main div[data-testid="primaryColumn"] section ' +
'span.css-901oao.css-16my406.r-bcqeeo.r-qvutc0'
// Lone label def-ja, def-en, ble-ja, ble-en
let elms = document.querySelectorAll(SEL)
let elms_2 = document.querySelectorAll(SEL_2)
let elms_3 = document.querySelectorAll(SEL_3)
let elms_4 = document.querySelectorAll(SEL_4)
const PROMO = {
'ja': 'によるプロモーション$',
'ko': ' 님이 프로모션함$',
'zh-Hant': '^由 .+ 推廣$',
'zh': '^由 .+ 推广$',
'ru': '^Реклама от ',
'de': '^Gesponsert von ',
'it': '^Sponsorizzato da ',
'fr': '^Sponsorisé par ',
'pt': '^Promovido por ',
'en': '^Promoted by ' // Add your language
}
const PROMO_L = PROMO[LANG] ?? PROMO['en']
const PROMO_2 = {
'ja': 'プロモポスト',
'ko': 'Promoted Post',
'zh-Hant': '推廣貼文',
'zh': 'Promoted Post',
'ru': 'Promoted Post',
'de': 'Gesponserter Post',
'it': 'Promoted Post',
'fr': 'Promoted Post',
'pt': 'Post promovido',
'en': 'Promoted Post' // Add your language
}
const PROMO_L_2 = PROMO_2[LANG] ?? PROMO_2['en']
let ss // Temp.
for (let e of elms) {
let xpe = e.closest('div[data-testid="cellInnerDiv"]')
if (!xpe) xpe = e.closest('div.css-175oi2r.r-1adg3ll.r-1ny4l3l') // def-ja, def-en, ble-ja, ble-en
if (!xpe) xpe = e.closest('div.css-175oi2r.r-1ny4l3l[data-testid="UserCell"]') // def-ja, def-en, ?, ble-en
ss = s_mutations
if (xpe) xpe.style.setProperty('display', 'none') // Right column のおすすめユーザー'
s_mutations = ss
}
for (let e of elms_2) {
const REGEX = new RegExp(PROMO_L, 'i')
if (!REGEX.test(e.textContent)) continue
let xpe = e.closest('div.css-175oi2r.r-1adg3ll.r-1ny4l3l')
ss = s_mutations
xpe.style.setProperty('display', 'none')
s_mutations = ss
}
for (let e of elms_3) {
if (e.textContent != 'Ad') continue
let xpe = e.closest('div[data-testid="cellInnerDiv"]')
ss = s_mutations
xpe.style.setProperty('display', 'none')
s_mutations = ss
}
for (let e of elms_4) {
if (e.textContent != PROMO_2['en'] && e.textContent != PROMO_L_2) continue
let xpe = e.closest('div[data-testid="cellInnerDiv"]')
ss = s_mutations
xpe.style.setProperty('display', 'none')
s_mutations = ss
}
}
function hidewtf() {
let ss // Temp.
let r =
'^[^:]+://[^/]+/$|' +
'^[^:]+://[^/]+/(' +
'compose|' + // pop up
'search-advanced|' + // pop up
'home|' + // 除外?
'search|' +
'i/display|' + // pop up
'i/flow|' + // pop up
'i/keyboard_shortcuts|' + // pop up
'i/verified-orgs-signup|' + // pop up、追加
'i/verified-choose|' + // pop up、追加
'i/premium_sign_up|' + // pop up、追加
'i/connect_people|' +
'i/topics|' +
'i/spaces/start|' + // pop up、追加
'i/verified-application|' + // pop up、追加
'i/verified-get-verified|' + // pop up、追加
'[^/]+/followers|' +
'[^/]+/following|' +
'[^/]+/lists|' +
'[^/]+/status/|' + // 両方、WTFのみ除外
'[^/]+/topics|' +
'[^/]+/creator-subscriptions|' + // 追加
'[^/]+/superfollows|' + // 追加
'[^/]+/verified_followers' + // 追加
')'
if (new RegExp(r, 'i').test(document.URL)) {
for (let i = 1; i < 4; i++) {
let e = document.querySelector('head style.' + 'us-' + MYNAME + '-' + i)
if (e) document.head.removeChild(e)
}
return
}
if (!document.querySelector('head style.' + 'us-' + MYNAME + '-' + 1)) {
ss = s_mutations
let style = document.createElement('style')
style.className = 'us-' + MYNAME + '-' + 1
style.textContent =
'main div[data-testid="primaryColumn"] section div[data-testid="cellInnerDiv"]' +
':has(button.css-175oi2r.r-1mmae3n.r-3pj75a.r-1ny4l3l.r-o7ynqc.r-6416eg[data-testid="UserCell"]) ' +
'{display: none;}'
// フォロー, def-ja, def-en, ble-ja, ble-en
document.head.appendChild(style)
s_mutations = ss
}
if (!document.querySelector('head style.' + 'us-' + MYNAME + '-' + 2)) {
ss = s_mutations
let style = document.createElement('style')
style.className = 'us-' + MYNAME + '-' + 2
style.textContent =
'main div[data-testid="primaryColumn"] section div[data-testid="cellInnerDiv"]' +
':has(h2[aria-level="2"][role="heading"]>div>span.css-1jxf684.r-bcqeeo.r-qvutc0) {display: none;}'
// Who to follow, def-ja, def-en, ble-ja, ble-en
document.head.appendChild(style)
s_mutations = ss
}
if (!document.querySelector('head style.' + 'us-' + MYNAME + '-' + 3)) {
ss = s_mutations
let style = document.createElement('style')
style.className = 'us-' + MYNAME + '-' + 3
style.textContent =
'main div[data-testid="primaryColumn"] section div[data-testid="cellInnerDiv"]' +
':has(a[href*="/connect_people?user_id="]) {display: none;}' // さらに表示
document.head.appendChild(style)
s_mutations = ss
}
}
function hidedmd() {
const SEL = 'div[data-testid="DMDrawer"]'
let elm = document.querySelector(SEL)
let ss = s_mutations
if (elm != null) elm.style.setProperty('display', 'none')
s_mutations = ss
}
function hidegv() {
const SEL = 'aside.css-175oi2r.r-1habvwh.r-eqz5dr.r-uaa2di.r-1mmae3n.r-3pj75a'
const SEL_2 = 'main section div[data-testid="cellInnerDiv"] h1[role="heading"] span.css-1jxf684.r-bcqeeo.r-qvutc0'
// def-ja, def-en, ble-ja, ble-en
let elms = document.querySelectorAll(SEL)
let elms_2 = document.querySelectorAll(SEL_2)
const TC = {
'gv': {
'ja': '認証を受ける',
'ko': '인증 받기',
'zh-Hant': '獲得認證',
'zh': '获得认证',
'ru': 'Подтвердить подлинность',
'de': 'Lass dich verifizieren',
'it': 'Ottieni la verifica',
'fr': 'Obtenez la certification',
'pt': 'Obter verificação',
'en': 'Get Verified' // Add your language
},
'sp': {
'ja': 'プレミアムにサブスクライブ',
'ko': 'Subscribe to Premium',
'zh-Hant': '訂閱 Premium',
'zh': 'Subscribe to Premium',
'ru': 'Subscribe to Premium',
'de': 'Premium abonnieren',
'it': 'Subscribe to Premium',
'fr': 'Subscribe to Premium',
'pt': 'Assine o Premium',
'en': 'Subscribe to Premium' // Add your language
},
'spylp': {
'ja': '長いポストを作成するには、プレミアムにサブスクライブしてください',
'ko': 'Premium을 구독하고 나만의 긴 게시물을 작성해 보세요',
'zh-Hant': '訂閱 Premium 以撰寫你自己的更長貼文',
'zh': '订阅 Premium,撰写自己的长帖',
'ru': 'Подпишитесь на Premium, чтобы писать собственные длинные посты',
'de': 'Abonniere Premium, wenn du deine eigenen längeren Posts schreiben möchtest',
'it': 'Per scrivere post più lunghi, abbonati a Premium',
'fr': 'Abonnez-vous à Premium pour écrire vos propres posts plus longs.',
'pt': 'Assine o Premium para escrever posts mais longos',
'en': 'Subscribe to Premium to write your own longer posts' // Add your language
},
'gafp': {
'ja': 'プレミアムプラスで広告をなくす',
'ko': 'Go ad-free with Premium+',
'zh-Hant': 'Go ad-free with Premium+',
'zh': 'Go ad-free with Premium+',
'ru': 'Go ad-free with Premium+',
'de': 'Go ad-free with Premium+',
'it': 'Go ad-free with Premium+',
'fr': 'Go ad-free with Premium+',
'pt': 'Go ad-free with Premium+',
'en': 'Go ad-free with Premium+' // Add your language
},
'gaf': {
'ja': '広告をなくす',
'ko': 'Go ad free',
'zh-Hant': 'Go ad free',
'zh': 'Go ad free',
'ru': 'Go ad free',
'de': 'Go ad free',
'it': 'Go ad free',
'fr': 'Go ad free',
'pt': 'Go ad free',
'en': 'Go ad free' // Add your language
},
'txp': {
'ja': 'TweetDeckはX Proになりました',
'ko': 'TweetDeck is now X Pro',
'zh-Hant': 'TweetDeck is now X Pro',
'zh': 'TweetDeck is now X Pro',
'ru': 'TweetDeck is now X Pro',
'de': 'TweetDeck is now X Pro',
'it': 'TweetDeck is now X Pro',
'fr': 'TweetDeck is now X Pro',
'pt': 'TweetDeck is now X Pro',
'en': 'TweetDeck is now X Pro' // Add your language
}
}
const GV_L = TC.gv[LANG] ?? TC.gv['en']
const SP_L = TC.sp[LANG] ?? TC.sp['en']
const SPYLP_L = TC.spylp[LANG] ?? TC.spylp['en']
const GAFP_L = TC.gafp[LANG] ?? TC.gafp['en']
const GAF_L = TC.gaf[LANG] ?? TC.gaf['en']
const TXP_L = TC.txp[LANG] ?? TC.txp['en']
for (let e of elms) {
if (
e.getAttribute('aria-label') == GV_L ||
e.getAttribute('aria-label') == SP_L ||
e.getAttribute('aria-label') == SPYLP_L ||
e.getAttribute('aria-label') == GAFP_L
) {
let ss = s_mutations
e.parentNode.parentNode.style.setProperty('display', 'none')
s_mutations = ss
}
}
for (let e of elms_2) {
if (e.textContent == GAF_L || e.textContent == TXP_L) {
let xpe = e.closest('div[data-testid="cellInnerDiv"]')
let ss = s_mutations
xpe.style.setProperty('display', 'none')
s_mutations = ss
}
}
}
function fineegm() {
const SEL_R =
'main div[data-testid="primaryColumn"] section article ' +
'button.css-175oi2r.r-1777fci.r-bt1l66.r-bztko3.r-lrvibr.r-1loqt21.r-1ny4l3l[data-testid*="reply"] ' +
'div>span[data-testid="app-text-transition-container"]>span' // 一つ上
const SEL_T =
'main div[data-testid="primaryColumn"] section article ' +
'button.css-175oi2r.r-1777fci.r-bt1l66.r-bztko3.r-lrvibr.r-1loqt21.r-1ny4l3l[data-testid*="retweet"] ' +
'div>span[data-testid="app-text-transition-container"]>span'
const SEL_L =
'main div[data-testid="primaryColumn"] section article ' +
'button.css-175oi2r.r-1777fci.r-bt1l66.r-bztko3.r-lrvibr.r-1loqt21.r-1ny4l3l[data-testid*="like"] ' +
'div>span[data-testid="app-text-transition-container"]>span'
const SEL_B =
'main div[data-testid="primaryColumn"] section article ' +
'button.css-175oi2r.r-1777fci.r-bt1l66.r-bztko3.r-lrvibr.r-1loqt21.r-1ny4l3l[data-testid*="bookmark"] ' +
'div>span[data-testid="app-text-transition-container"]>span'
document.
querySelectorAll(SEL_R + ', ' + SEL_T + ', ' + SEL_L + ', ' + SEL_B).
forEach(function (e) {
const SEL_ADD = 'span.us-' + MYNAME
let ce = e.querySelector('span:not(.us-' + MYNAME + ')')
let xpe = e.closest('button')
let n = +xpe.getAttribute('aria-label').split(' ')[0]
let ls = ''
if (n) ls = n.toLocaleString('en-US')
let old = e.querySelector(SEL_ADD)
let ss // Temp.
ss = s_mutations
if (ce && ce.style.display != 'none') { // 0の時も無い
ce.style.setProperty('display', 'none')
}
if (!old) {
let span = document.createElement('span')
span.className = 'us-' + MYNAME
span.textContent = ls
if (ce) span.style = ce.style
e.appendChild(span)
} else if (old.textContent != ls) {
old.textContent = ls
if (ce) old.style = ce.style
}
s_mutations = ss
})
}
function fineegm_v_d() {
const SEL =
'main div[data-testid="primaryColumn"] section article ' +
'div.css-175oi2r.r-1d09ksm.r-1471scf.r-18u37iz.r-1wbh5a2>' +
'div>span>div>span[data-testid="app-text-transition-container"]>span>span:not(.us-' + MYNAME + ')'
// 表示回数は減らない、0の時は無い
const SEL_2 =
'button.css-175oi2r.r-1777fci.r-bt1l66.r-bztko3.r-lrvibr.r-1loqt21.r-1ny4l3l[data-testid*="retweet"] ' +
'div>span[data-testid="app-text-transition-container"]>span' // 一つ上
const SEL_ADD = 'span.us-' + MYNAME
let elm = document.querySelector(SEL)
if (!elm) return
let elm_2 = document.querySelector(SEL_2)
if (!elm_2) return
let pelm = elm.parentNode
let xpelm_2 = elm_2.closest('div.r-1kbdv8c[aria-label][role="group"]') // fineegm()のさらに上
let n = +/(\d+)\D+$/.exec(xpelm_2.getAttribute('aria-label'))[1]
let ls = n.toLocaleString('en-US')
let old = pelm.querySelector(SEL_ADD)
let ss // Temp.
ss = s_mutations
if (!old) {
let span = document.createElement('span')
span.className = 'us-' + MYNAME
span.textContent = ls
span.style = elm.style
elm.style.setProperty('display', 'none')
pelm.appendChild(span)
} else if (old.textContent != ls) {
old.textContent = ls
old.style = elm.style
}
s_mutations = ss
}
function fineegm_v_t() {
const SEL =
'main div[data-testid="primaryColumn"] section article ' +
'a[href$="/analytics"][aria-label][role="link"]>div>div>span[data-testid="app-text-transition-container"]>' +
'span>span:not(.us-' + MYNAME + ')' // 二つ下から消える
document.querySelectorAll(SEL).forEach(function (e) {
const SEL_ADD = 'span.us-' + MYNAME
let pe = e.parentNode
let xpe = e.closest('a')
let n = +xpe.getAttribute('aria-label').split(' ')[0]
let ls = n.toLocaleString('en-US')
let old = pe.querySelector(SEL_ADD)
let ss // Temp.
ss = s_mutations
if (!old) {
let span = document.createElement('span')
span.className = 'us-' + MYNAME
span.textContent = ls
span.style = e.style
e.style.setProperty('display', 'none')
pe.appendChild(span)
} else if (old.textContent != ls) {
old.textContent = ls
old.style = e.style
}
s_mutations = ss
})
}
function fineegm_t() {
const SEL =
'main div[data-testid="primaryColumn"] div[aria-label] ' +
'h2[role="heading"]~div.css-146c3p1.r-n6v787.r-1cwl3u0'
const SEL_2 =
'script[data-testid="UserProfileSchema-test"]'
const SEL_ADD = 'div.us-' + MYNAME
let elm = document.querySelector(SEL)
if (!elm) return
let elm_2 = document.querySelector(SEL_2)
if (!elm_2) return
let pelm = elm.parentNode
let n = JSON.parse(elm_2.textContent).author.interactionStatistic[2].userInteractionCount
let ls = n.toLocaleString('en-US')
let old = pelm.querySelector(SEL_ADD)
let ss = s_mutations // Temp.
if (!old) {
let div = document.createElement('div')
div.className = 'us-' + MYNAME
div.textContent = ls + ' ' + elm.textContent.split(' ')[1]
div.style = elm.style
elm.style.setProperty('display', 'none')
pelm.appendChild(div)
} else if (old.textContent.split(' ')[0] != ls) {
old.textContent = ls + ' ' + elm.textContent.split(' ')[1]
old.style = elm.style
}
s_mutations = ss
}
function isHLSURL(url) {
return (
/^https?:\/\/video\.twimg\.com\/[^?]+\.m3u8?/i.test(url) ||
/^https?:\/\/[^.]+\.video\.pscp\.tv\/[^?]+\.m3u8?/i.test(url)
)
}
function isHLSMaster(text) {
return (
text &&
text.includes('#EXT-X-STREAM-INF') &&
!text.includes('#EXT-X-TARGETDURATION')
)
}
function pickone(reg, text) {
let matches = []
const HEAD = text.replace(reg, function (m, p1) {
matches.push([m, p1])
return ''
})
const L = matches.length
if (L < 2) return text
let select = matches[0]
for (let i = 1; i < L; i++) { // 2番目から
select =
(fvq != 2 && +select[1] < +matches[i][1]) ||
(fvq == 2 && +select[1] > +matches[i][1]) ? matches[i] :
select
}
return (HEAD + '\n' + select[0]).trim().replace(/(\r?\n)+/g, '\n') + '\n'
}
function twXHRStateHandler({ target: xhr }) {
if (xhr.readyState === 4) {
const rawTEXT = xhr.responseText
if (isHLSMaster(rawTEXT)) {
// eslint-disable-next-line regexp/optimal-quantifier-concatenation
const REG = /#EXT-X-STREAM-INF.*[^-]BANDWIDTH=(\d+).*\r?\n\/.+$/gm
const modTEXT = pickone(REG, rawTEXT)
Object.defineProperties(xhr, {
response: { writable: true },
responseText: { writable: true }
})
xhr.response = xhr.responseText = modTEXT
}
}
}
function overrideXHROpen() {
originalXHROPEN = XMLHttpRequest.prototype.open
XMLHttpRequest.prototype.open = function () {
if (isHLSURL(arguments[1])) {
this.addEventListener('readystatechange', twXHRStateHandler)
}
return originalXHROPEN.apply(this, arguments)
}
console.log(MYNAME + ': XMLHttpRequest.open overriden.')
}
function repldatetime() {
const SEL =
'main div[data-testid="primaryColumn"] section article time[datetime*=":"]'
const SEL_2 =
'div[aria-labelledby="modal-header"] div[data-testid^="User-Name"] time[datetime]'
const SEL_3 =
'div[aria-labelledby="modal-header"] div[aria-label] time[datetime]'
const SEL_4 =
'main section[aria-labelledby="detail-header"] article div[data-testid^="User-Name"] time[datetime]'
const SEL_5 =
'main section div[data-testid="conversation"] div[aria-label] time[datetime]' // DM list
document.
querySelectorAll(SEL + ', ' + SEL_2 + ', ' + SEL_3 + ', ' + SEL_4 + ', ' + SEL_5).
forEach(function (e) {
const SEL_ADD = 'span.us-' + MYNAME
let d = e.getAttribute('datetime')
let df = datef(new Date(d), fmt)
let pe = e.parentNode
let old = pe.querySelectorAll(SEL_ADD)
let ss // Temp.
ss = s_mutations
if (!old.length) {
let span = document.createElement('span')
span.className = 'us-' + MYNAME
span.setAttribute('datetime', d)
span.setAttribute('local-datetime', df)
span.textContent = df
span.style = e.style
e.style.setProperty('display', 'none')
pe.appendChild(span)
} else if (old[0].getAttribute('local-datetime') != df) { // TZ change
old[0].setAttribute('local-datetime', df)
old[0].textContent = df
old[0].style = e.style
}
s_mutations = ss
})
}
function loop() {
setTimeout(() => {
if (s_mutations) {
s_mutations = null // 初期値がtrue、変更もしない
if (bbr) bbreturn()
if (origi) origimg()
if (wtl) widetl()
if (ecmode) chgbgc()
if (hpp) hidepromo()
if (hwtf) hidewtf()
if (hdmd) hidedmd()
if (hgv) hidegv()
if (fmt) repldatetime()
if (fegm) {
fineegm()
fineegm_v_d()
fineegm_v_t()
fineegm_t()
time_r = Date.now()
}
} else if (fegm == 1 && Date.now() - time_r > 4000) {
fineegm()
fineegm_v_d()
fineegm_v_t()
fineegm_t()
time_r = Date.now()
}
loop()
}, intl)
}
bbr = BBR
origi = ORIGI
wtl = WTL
ecmode = ECMODE
hpp = HPP
hwtf = HWTF
hdmd = HDMD
hgv = HGV
fegm = FEGM
fvq = FVQ
fmt = FMT
intl = INTL
if (!NOGUI) initgui()
if (fvq) overrideXHROpen()
observer.observe(document, { childList: true, subtree: true })
loop()
})() /* END */