// ==UserScript== // @name Twitter Tweet Copy // @name:af Twitter Tweet Kopie // @name:am የትዊተር ትዊት ቅጂ // @name:ar نسخ تغريدة تويتر // @name:az Twitter Tweet Kopyası // @name:be Капіяваць твіт з Twitter // @name:bem Kopya Twitter Tweet // @name:bg Копиране на Twitter туит // @name:bn টুইটার টুইট কপি // @name:bo Twitter ཊུའི་ཊར་འདྲ་བཤུས། // @name:bs Kopiraj Twitter Tweet // @name:ca Copia el tuit de Twitter // @name:ceb Kopyaha ang Twitter Tweet // @name:ckb کۆپیکردنی تویتی تویتەر // @name:cs Kopírovat Tweet z Twitteru // @name:cy Copïo Trydariad Twitter // @name:da Kopier Twitter Tweet // @name:de Twitter Tweet Kopieren // @name:dv ޓްވިޓަރ ޓްވީޓް ކޮޕީ // @name:dz Twitter Tweet Copy // @name:el Αντιγραφή Tweet στο Twitter // @name:en Twitter Tweet Copy // @name:en-GB Twitter Tweet Copy // @name:eo Kopii Twitter-Tviton // @name:es Copiar Tweet de Twitter // @name:et Kopeeri Twitteri säuts // @name:eu Kopiatu Twitterreko txioa // @name:fa کپی توییت توییتر // @name:fi Kopioi Twitter-twiitti // @name:fo Kopiera Twitter Tweet // @name:fr Copier le Tweet de Twitter // @name:fr-CA Copier le Tweet de Twitter // @name:gd Dèan lethbhreac de Twitter Tweet // @name:gl Copiar chío de Twitter // @name:gu ટ્વિટર ટ્વીટ કૉપિ // @name:haw Kope i ka Twitter Tweet // @name:he העתק ציוץ בטוויטר // @name:hi ट्विटर ट्वीट कॉपी // @name:hr Kopiraj Twitter Tweet // @name:ht Kopi Twitter Tweet // @name:hu Twitter Tweet Másolása // @name:hy Պատճենել Twitter-ի թվիթը // @name:id Salin Tweet Twitter // @name:is Afrita Twitter tíst // @name:it Copia Tweet di Twitter // @name:ja Twitterのツイートをコピー // @name:ka Twitter-ის ტვიტის კოპირება // @name:kk Twitter твитін көшіру // @name:km ចម្លង Twitter Tweet // @name:kn ಟ್ವಿಟರ್ ಟ್ವೀಟ್ ನಕಲಿಸಿ // @name:ko 트위터 트윗 복사 // @name:ku Twitter Tweet Kopî // @name:ky Twitter Tweet Көчүрүү // @name:la Copy Twitter Tweet // @name:lb Kopie Twitter Tweet // @name:lo ສຳເນົາ Twitter Tweet // @name:lt Kopijuoti Twitter tvitą // @name:lv Kopēt Twitter tvītu // @name:mg Kopia Twitter Tweet // @name:mi Tārua Twitter Tweet // @name:mk Копирај твит на Твитер // @name:ml ട്വിറ്റർ ട്വീറ്റ് പകർപ്പ് // @name:mn Twitter Tweet хуулах // @name:ms Salin Tweet Twitter // @name:mt Ikkopja Twitter Tweet // @name:my Twitter Tweet ကူးယူပါ။ // @name:ne ट्विटर ट्वीट प्रतिलिपि // @name:nl Twitter Tweet Kopiëren // @name:no Kopier Twitter Tweet // @name:ny Lembani Twitter Tweet // @name:pa ਟਵਿੱਟਰ ਟਵੀਟ ਕਾਪੀ // @name:pap Kopia Twitter Tweet // @name:pl Skopiuj Tweet z Twittera // @name:ps د ټویټر ټویټ کاپي // @name:pt Copiar Tweet do Twitter // @name:pt-BR Copiar Tweet do Twitter // @name:ro Copiați Tweetul Twitter // @name:ru Копировать твит Twitter // @name:rw Kopiya Twitter Tweet // @name:sg Kopia Twitter Tweet // @name:si ට්විටර් ට්වීට් පිටපත් // @name:sk Kopírovať Tweet z Twitteru // @name:sl Kopiraj Twitter Tweet // @name:sm Fa'akopi Twitter Tweet // @name:sn Kopa Twitter Tweet // @name:so Koobiyi Twitter Tweet // @name:sr Копирај Твиттер твит // @name:sv Kopiera Twitter Tweet // @name:sw Nakili Tweet ya Twitter // @name:ta ட்விட்டர் ட்வீட் டி நகலெடு // @name:te ట్విట్టర్ ట్వీట్ కాపీ // @name:tg Нусхабардории Twitter Tweet // @name:th คัดลอกทวีตของ Twitter // @name:ti Twitter Tweet ቅዳ // @name:tk Twitter Tweet göçürip alyň // @name:tn Kopisa Twitter Tweet // @name:to Kopi'i 'a e Twitter Tweet // @name:tpi Kopi Twitter Tweet // @name:tr Twitter Tweet Kopyalayıcı // @name:uk Копіювати твіт Twitter // @name:ur ٹویٹر ٹویٹ کاپی // @name:uz Twitter Tweet Nusxasi // @name:vi Sao chép Tweet Twitter // @name:xh Kopa i-Twitter Tweet // @name:yi קאָפּיע טוויטטער טוועעט // @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 Kopisha i-Twitter Tweet // @namespace https://github.com/fr0stb1rd/tampermonkey-tweet-copy // @version 1.2.4 // @description Adds a "Copy" button to each tweet and article that copies the content along with its URL and shows a check mark animation upon success, preserving link URLs and styling. // @description:af Voeg 'n "Kopieer"-knoppie by elke twiet en artikel wat die inhoud saam met die URL-adres kopieer, wat voorsiening maak vir die behoud van skakels en formatering. // @description:am ይዘቱን ከዩአርኤል ጋር የሚቀዳ ለእያንዳንዱ ትዊት እና መጣጥፍ የ"ቅጂ" ቁልፍን ያክላል፣ አገናኞችን እና ቅርጸቶችን ይጠብቃል። // @description:ar يضيف زر "نسخ" إلى كل تغريدة ومقال لنسخ المحتوى مع عنوان URL الخاص به، مع الحفاظ على روابط URL والتنسيق. // @description:az Məzmunu URL ilə birlikdə kopyalayan, link URL-lərini və formatlamanı qoruyan hər tweet və məqaləyə "Kopyala" düyməsini əlavə edir. // @description:be Дадае кнопку «Капіяваць» да кожнага твіта і артыкула, якая капіюе змесціва разам з яго URL-адрасам, захоўваючы URL-адрасы спасылак і фарматаванне. // @description:bem Ikonya ibatani lya "Kopya" kuli cila tweet na article iikopagula content pamo na URL yayo, ukucingilila link URLs na styling. // @description:bg Добавя бутон „Копиране“ към всеки туит и статия, който копира съдържанието заедно с неговия URL адрес, като запазва URL адресите на връзките и стила. // @description:bn প্রতিটি টুইট এবং নিবন্ধে একটি "কপি" বোতাম যোগ করে যা এর ইউআরএল-এর সাথে সামগ্রী অনুলিপি করে, লিঙ্ক ইউআরএল এবং স্টাইলিং সংরক্ষণ করে। // @description:bo ཊུའི་ཊར་དང་རྩོམ་ཡིག་རེ་རེར་ "འདྲ་བཤུས" ཀྱི་མཐེབ་གཅིག་སྣོན་ཏེ་དེའི་ URL དང་མཉམ་དུ་ནང་དོན་འདྲ་བཤུས་བྱེད། སྦྲེལ་མཐུད་ URL དང་བཟོ་བཀོད་ཉահྲུང་བྱེད། // @description:bs Dodaje dugme "Kopiraj" svakom tvitu i članku koje kopira sadržaj zajedno sa njegovim URL-om, čuvajući URL-ove veza i stil. // @description:ca Afegeix un botó "Copia" a cada tuit i article que copia el contingut juntament amb el seu URL, conservant els URL d'enllaç i l'estil. // @description:ceb Nagdugang ug "Kopyaha" nga buton sa matag tweet ug artikulo nga nagkopya sa sulod kauban ang URL niini, nagpreserbar sa mga URL sa link ug pag-istilo. // @description:ckb دوگمەی "کۆپیکردن" زیاد دەکات بۆ هەر تویتێک و بابەتێک کە ناوەڕۆکەکە لەگەڵ URLـەکەیدا کۆپی دەکات، هەروەها URLـەکانی بەستەر و شێواز دەپارێزێت. // @description:cs Přidá tlačítko „Kopírovat“ ke každému tweetu a článku, které zkopíruje obsah spolu s jeho URL, přičemž zachová adresy URL odkazů a formátování. // @description:cy Yn ychwanegu botwm "Copïo" at bob trydariad ac erthygl sy'n copïo'r cynnwys ynghyd â'i URL, gan gadw URLau dolenni a steilio. // @description:da Tilføjer en "Kopier" knap til hvert tweet og artikel, der kopierer indholdet sammen med dets URL, og bevarer link-URL'er og formatering. // @description:de Fügt jedem Tweet und Artikel eine "Kopieren"-Schaltfläche hinzu, die den Inhalt zusammen mit der URL kopiert, wobei die Link-URLs und Formatierungen erhalten bleiben. // @description:dv ކޮންމެ ޓްވީޓަކާއި އާޓިކަލަކަށް "ކޮޕީ" ބަޓަނެއް އިތުރުކޮށްދޭއިރު، އޭގެ ޔޫއާރްއެލް އާއެކު ކޮންޓެންޓް ކޮޕީކޮށް، ލިންކް ޔޫއާރްއެލްތަކާއި ސްޓައިލިންގ ރައްކާތެރިކޮށްދެއެވެ. // @description:dz ཊུའི་ཊར་དང་རྩོམ་ཡིག་རེ་རེར་ "འདྲ་བཤུས" ཀྱི་མཐེབ་གཅིག་སྣོན་ཏེ་དེའི་ URL དང་མཉམ་དུ་ནང་དོན་འདྲ་བཤུས་བྱེད། // @description:el Προσθέτει ένα κουμπί "Αντιγραφή" σε κάθε tweet και άρθρο που αντιγράφει το περιεχόμενο μαζί με το URL του, διατηρώντας τα URL των συνδέσμων και τη μορφοποίηση. // @description:en Adds a "Copy" button to each tweet and article that copies the content along with its URL and shows a check mark animation upon success, preserving link URLs and styling. // @description:en-GB Adds a "Copy" button to each tweet and article that copies the content along with its URL and shows a check mark animation upon success, preserving link URLs and styling. // @description:eo Aldonas "Kopii"-butonon al ĉiu tvito kaj artikolo, kiu kopias la enhavon kune kun sia URL, konservante ligil-URLojn kaj stilon. // @description:es Añade un botón "Copiar" a cada tweet y artículo que copia el contenido junto con su URL, preservando las URL de los enlaces y el formato. // @description:et Lisab igale säutsule ja artiklile nupu "Kopeeri", mis kopeerib sisu koos selle URL-iga, säilitades linkide URL-id ja vorminduse. // @description:eu Gehitu "Kopiatu" botoia txio eta artikulu bakoitzean, edukia bere URLarekin batera kopiatzen duena, esteken URLak eta estiloa mantenduz. // @description:fa یک دکمه "کپی" را به هر توییت و مقاله‌ای اضافه می‌کند که محتوا را به همراه آدرس اینترنتی (URL) آن کپی می‌کند و لینک‌ها و استایل‌ها را حفظ می‌کند. // @description:fi Lisää "Kopioi" -painikkeen jokaiseen twiittiin ja artikkeliin, joka kopioi sisällön ja sen URL-osoitteen säilyttäen linkkien URL-osoitteet ja muotoilun. // @description:fo Leggur afturat ein "Kopiera" knøtt til hvørja tweet og grein sum kopierar innihaldið saman við URL'ini, varðveitir leinkju-URL'ir og stíl. // @description:fr Ajoute un bouton "Copier" à chaque tweet et article qui copie le contenu avec son URL, en préservant les URL des liens et le formatage. // @description:fr-CA Ajoute un bouton "Copier" à chaque tweet et article qui copie le contenu avec son URL, en préservant les URL des liens et le formatage. // @description:gd A 'cur putan "Lethbhreac" ri gach tweet agus artaigil a tha a' dèanamh lethbhreac den t-susbaint còmhla ris an URL aige, a 'gleidheadh URLan ceangail agus stoidhle. // @description:gl Engade un botón "Copiar" a cada chío i artigo que copia o contido xunto co seu URL, conservando os URL de ligazón e o estilo. // @description:gu દરેક ટ્વીટ અને લેખમાં "કૉપિ" બટન ઉમેરે છે જે તેની URL સાથે સામગ્રીની કૉપિ કરે છે, લિંક URL અને સ્ટાઇલની જાળવણી કરે છે. // @description:haw Hoʻohui i kekahi pihi "Kope" i kēlā me kēia tweet a me ka ʻatikala e kope ai i ka ʻike me kāna URL, e mālama ana i nā URL loulou a me ka hoʻonohonoho ʻana. // @description:he מוסיף כפתור "העתק" לכל ציוץ ומאמר שמעתיק את התוכן יחד עם ה-URL שלו, תוך שמירה על קישורי URL ועיצוב. // @description:hi प्रत्येक ट्वीट और लेख में एक "कॉपी" बटन जोड़ता है जो इसके URL के साथ सामग्री की प्रतिलिपि बनाता है, लिंक URL और स्टाइलिंग को संरक्षित करता है। // @description:hr Dodaje gumb "Kopiraj" na svaki tweet i članak koji kopira sadržaj zajedno s njegovim URL-om, čuvajući URL-ove veza i stil. // @description:ht Ajoute yon bouton "Kopi" nan chak tweet ak atik ki kopye kontni an ak URL li yo, konsève URL lyen yo ak fòma. // @description:hu Hozzáad egy "Másolás" gombot minden tweethez és cikkhez, amely lemásolja a tartalmat és annak URL-jét, megőrizve a hivatkozások URL-jeit és a formázást. // @description:hy Ավելացնում է «Պատճենել» կոճակ յուրաքանչյուր թվիթին և հոդվածին, որը պատճենում է բովանդակությունը իր URL-ի հետ միասին՝ պահպանելով հղումների URL-ները և ոճավորումը: // @description:id Menambahkan tombol "Salin" ke setiap tweet dan artikel yang menyalin konten beserta URL-nya, mempertahankan URL tautan dan gaya. // @description:is Bætir "Afrita" hnappi við hvert tíst og grein sem afritar innihaldið ásamt vefslóð þess, heldur tengla vefslóðum og stíl. // @description:it Aggiunge un pulsante "Copia" a ogni tweet e articolo che copia il contenuto insieme al suo URL, preservando gli URL dei link e la formattazione. // @description:ja 各ツイートと記事に「コピー」ボタンを追加し、リンクのURLとスタイルを保持しながら、コンテンツとそのURLをコピーします。 // @description:ka ამატებს ღილაკს "კოპირება" თითოეულ ტვიტსა და სტატიაზე, რომელიც აკოპირებს კონტენტს მის URL-თან ერთად, რჩება ბმულის URL-ებსა და სტილს. // @description:kk Әрбір твиттерге және мақалаға оның URL мекенжайымен бірге мазмұнын көшіретін "Көшіру" түймесін қосады, сілтеме URL мекенжайлары мен пішімдеуді сақтайды. // @description:km បន្ថែមប៊ូតុង "ចម្លង" ទៅការធ្វីតនីមួយៗ និងអត្ថបទដែលចម្លងមាតិកា រួមជាមួយនឹង URL របស់វា ដោយរក្សាទុកតំណ URL និងការកំណត់រចនាប័ទ្ម។ // @description:kn ಪ್ರತಿ ಟ್ವೀಟ್ ಮತ್ತು ಲೇಖನಕ್ಕೆ "ನಕಲಿಸಿ" ಬಟನ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ ಅದು ಅದರ URL ನೊಂದಿಗೆ ವಿಷಯವನ್ನು ನಕಲಿಸುತ್ತದೆ, ಲಿಂಕ್ URL ಗಳು ಮತ್ತು ವಿನ್ಯಾಸವನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ. // @description:ko 각 트윗과 기사에 링크 URL과 스타일을 유지하면서 콘텐츠와 해당 URL을 복사하는 "복사" 버튼을 추가합니다. // @description:ku Bişkokek "Kopî" li her tweet û gotarekê zêde dike ku naverokê li gel URL-ya wê kopî dike, û girêdanên URL û stîlê diparêze. // @description:ky Ар бир твитке жана макалага анын URL дареги менен бирге мазмунун көчүргөн "Көчүрүү" баскычын кошуп, шилтеме URL даректерин жана форматтоону сактайт. // @description:la Adiungit puga "Exemplum" singulis tweetis et articulis, quae contenta simul cum URL eius effingit, servans ligaturas URL et fabricas. // @description:lb Et füügt e "Kopie" Knäppche bäi all Tweet an Artikel, deen den Inhalt zënter senger URL kopéiert, link URLs an d'Formattéierung erhaalt. // @description:lo ເພີ່ມປຸ່ມ "ສຳເນົາ" ເຂົ້າໃນແຕ່ລະ tweet ແລະ ບົດຄວາມ ທີ່ສຳເນົາເນື້ອຫາພ້ອມກັບ URL ຂອງມັນ, ຮັກສາ URL ຂອງລິ້ງ ແລະ ຮູບແບບ. // @description:lt Prie kiekvieno tviterio ir straipsnio prideda mygtuką „Kopijuoti“, kuris nukopijuoja turinį kartu su jo URL, taip išsaugant nuorodų URL ir stilių. // @description:lv Pievieno pogu "Kopēt" katram tvītam un rakstam, kas kopē saturu kopā ar tā URL, saglabājot saišu URL un stilu. // @description:mg Manampy bokotra "Kopia" amin'ny bitsika sy lahatsoratra tsirairay izay maka tahaka ny atiny miaraka amin'ny URL-ny, miaro ireo URL an'ny rohy sy fomba ary stily. // @description:mi Tāpirihia he pātene "Tārua" ki ia tweet rānei tuhinga roa tārua i te kiko me tōna URL, māka i ngā wāhitau ipurangi me te whakakākā. // @description:mk Додава копче „Копирај“ на секој твит и написот што ја копира содржината заедно со неговата URL-адреса, зачувувајќи ги URL-адресите за врски и стилот. // @description:ml ഓരോ ട്വീറ്റിലേക്കും ഒരു "കോപ്പി" ബട്ടൺ ചേർക്കുന്നു, ഒപ്പം അതിൻ്റെ ഉള്ളടക്കം ഒപ്പം URL-ഉം പകർത്തുന്ന ലേഖനങ്ങളിലേക്ക് ലിങ്ക് URL-കളും ശൈലികളും നിലനിർത്തുന്നു. // @description:mn Жиргээ болон нийтлэл бүрт "Хуулах" товч нэмж контентыг URL-тай нь хуулж, холбоос URL болон хэв маягийг хадгална. // @description:ms Menambahkan butang "Salin" pada setiap tweet dan artikel yang menyalin kandungan berserta URLnya, memelihara URL pautan dan gaya. // @description:mt Iżżid buttuna "Ikkopja" ma' kull tweet u artikolu li tikkopja l-kontenut flimkien mal-URL tiegħu, filwaqt li żżomm l-URLs u l-istiljar tal-links. // @description:my Tweet နှင့် ဆောင်းပါးတိုင်းတွင် "ကူးယူမည်" ခလုတ်ကို ပေါင်းထည့်ပြီး URL နှင့် အကြောင်းအရာတို့ကို ကူးယူပေးကာ၊ link များနှင့် ပုံစံချခြင်းများကို ထိန်းသိမ်းပေးပါသည်။ // @description:ne प्रत्येक ट्वीट र लेखमा "प्रतिलिपि बनाउनुहोस्" बटन थप्छ जसले यसको URL को साथ सामग्री प्रतिलिपि गर्दछ, लिङ्क URL हरू र ढाँचा जोगाउँछ। // @description:nl Voegt een knop "Kopiëren" toe aan elke tweet en elk artikel dat de inhoud samen met de URL kopieert, met behoud van de link-URL's en opmaak. // @description:no Legger til en "Kopier"-knapp for hver tweet og artikkel som kopierer innholdet sammen med URL-en, og bevarer lenke-URL-er og formatering. // @description:ny Imawonjezera batani la "Copy" ku tweet yiliyonse ndi nkhani yomwe ikukopera nkhaniyo pamodzi ndi URL yake, kusunga masamba ndi masitaelo. // @description:pa ਹਰੇਕ ਟਵੀਟ ਅਤੇ ਲੇਖ ਵਿੱਚ ਇੱਕ "ਕਾਪੀ" ਬਟਨ ਜੋੜਦਾ ਹੈ ਜੋ ਇਸਦੇ URL ਦੇ ਨਾਲ ਸਮੱਗਰੀ ਦੀ ਕਾਪੀ ਬਣਾਉਂਦਾ ਹੈ, ਲਿੰਕ URL ਅਤੇ ਸਟਾਈਲ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦਾ ਹੈ। // @description:pap Ta agregá un boton "Kopia" na kada tweet i artíkulo ku ta kopia kontenidó huntu ku su URL, i ta preservá link URLs i forma. // @description:pl Dodaje przycisk „Kopiuj” do każdego tweeta i artykułu, który kopiuje treść wraz z jej adresem URL, zachowując adresy URL linków i formatowanie. // @description:ps هر ټویټ او مقالې ته یوه "کاپي" تڼۍ اضافه کوي چې مینځپانګه د هغې URL سره یوځای کوي ، د لینک URLs او سټایل ساتي. // @description:pt Adiciona um botão "Copiar" a cada tweet e artigo que copia o conteúdo junto com seu URL, preservando os URLs dos links e a formatação. // @description:pt-BR Adiciona um botão "Copiar" a cada tweet e artigo que copia o conteúdo junto com seu URL, preservando os URLs dos links e a formatação. // @description:ro Adaugă un buton „Copiază” la fiecare tweet și articol care copiază conținutul împreună cu URL-ul său, păstrând adresele URL și formatarea link-urilor. // @description:ru Добавляет кнопку «Копировать» к каждому твиту и статье, которая копирует содержимое вместе с его URL-адресом, сохраняя URL-адреса ссылок и форматирование. // @description:rw Kongeraho "Kopiya" ahatangirwa kuri buri tweet n'inyandiko ikuramo imbere na URL yayo, urugero rw'injijyambo na misango. // @description:sg Adds a "Copy" téné na kâ ndo ni so a gbu ngo sese na url ni, a gbu links na url na formats ni kue. // @description:si සෑම ට්වීට් එකකටම සහ ලිපියකටම "පිටපත් කරන්න" බොත්තමක් එකතු කරන අතර එහි URL සමඟ අන්තර්ගතය පිටපත් කරන අතර, සබැඳි URL සහ විලාසය පවත්වා ගනී. // @description:sk Pridá tlačidlo „Kopírovať“ ku každému tweetu a článku, ktoré skopíruje obsah spolu s jeho URL, pričom zachová adresy URL odkazov a formátovanie. // @description:sl Vsakemu tvitu in članku doda gumb »Kopiraj«, ki kopira vsebino skupaj z njenim URL-jem, pri čemer ohrani URL-je povezav in stil. // @description:sm Fa'aopoopo le fa'amau "Fa'akopi" i fa'alauiloa tweet uma ma 'tusiga e kopiina ai puka ma lona URL, ina ia totoe ai ulutala URL ma le fa'apitoaina. // @description:sn Inosanganisira bhatani rega rega reTwiti negwaro rinokopa mameseji pamwe ne URL yawo, ichichengetedza mapatya re URL nemagadzirirwo. // @description:so Wuxuu ku darayaa badhanka 'Koobiye' ee qoraal iyo twiiti kasta si loola wadaago maqaalka iyo cinwaankiisa, isagoo dhawraya faylasha iyo qaabayntiisa. // @description:sr Додаје дугме „Копирај“ сваком твиту и чланку који копира садржај заједно са његовим УРЛ-ом, чувајући УРЛ-ове веза и стил. // @description:sv Lägger till en "Kopiera"-knapp i varje tweet och artikel som kopierar innehållet tillsammans med dess URL, med bibehållna länk-URL:er och formatering. // @description:sw Inaongeza kitufe cha "Nakili" kwa kila tweet na nakala ambayo inanakili maudhui pamoja na URL yake, ikihifadhi URL za viungo na uwekaji mtindo. // @description:ta ஒவ்வொரு ட்வீட் மற்றும் அதற்கான கட்டுரைக்கும், அதன் URL உடன் சேர்ந்து, இணைப்புகள் மற்றும் அமைப்பை மீட்காமல் "நகலெடு" பட்டனைச் சேர்க்கிறது. // @description:te ప్రతి ట్వీట్ మరియు వ్యాసానికి "కాపీ చేసుకోండి" బొత్తాన్ని జోడిస్తుంది, దీని URLతో పాటు విషయాన్ని కాపీ చేసి, లింకులు మరియు స్టైల్‌ను కాపాడుతుంది. // @description:tg Метавонад "Нусхабардорӣ" тугмаро барои ҳар як твит ва мақола илова мекунад, ки бо URL-и худ мундариҷаро нусхабардорӣ карда, URL-ҳои пайвандро эмин нигоҳ медорад. // @description:th เพิ่มปุ่ม "คัดลอก" ในแต่ละทวีตและบทความที่คัดลอกเนื้อหาและ URL โดยยังคงรักษา URL ของลิงก์และการจัดรูปแบบไว้ // @description:ti ንነፍሲ ወከፍ ትዊት እና ገጽታን "ቅዳ" ቁንል ይጨምራል፣ የይዘቱን እና የድረገጹን ስም በማቆየት አቅጣጫዎችን እና ድምጾቹን ያካትታል። // @description:tk Her bir tweet we makala üçin URL-i bilen birlikde mazmuny göçürýän "Göçür" düwmesini goşýar, baglanyşyk URL'lerini we häsiýetnamany saklap. // @description:tn Go tsenya konopo ya "Kopisa" go tweet nngwe le nngwe le letlhare tse di gopisa mafoko mmogo le URL ya rona, go tsenya marangrang URL le tlhopho. // @description:to Tānaki 'ae kī "Kopi" ki fakamatala 'i Twitter ke to'o 'ene fakamatala mo'ene URL, pea ke tauhi pē fakakofukofu mo e ngaahi fehokotaki'anga lēnihi. // @description:tpi Adim "Kopi" paten long olgeta twit na atikol we i kopim stori wantem URL blong em, na save kiptimap ol links na stael blong en. // @description:tr Her tweete ve makaleye içeriğini URL'si ile birlikte kopyalayan, bağlantı URL'lerini ve stilini koruyan bir "Kopyala" düğmesi ekler. // @description:uk Додає кнопку «Копіювати» до кожного твіту та статті, яка копіює вміст разом із його URL-адресою, зберігаючи URL-адреси посилань і форматування. // @description:ur ہر ٹویٹ اور مضمون میں ایک "کاپی" بٹن شامل کرتا ہے جو اس کے مواد کو اس کے URL کے ساتھ کاپی کرتا ہے، لنکس اور فارمیٹنگ کو محفوظ رکھتا ہے۔ // @description:uz Har bir tvit va maqolaga o'z tarkibini URL manzili bilan birga nusxalovchi, havolalar URL manzillari va formatlashni saqlaydigan "Nusxalash" tugmasini qo'shadi. // @description:vi Thêm nút "Sao chép" vào mỗi dòng tweet và bài viết để sao chép nội dung cùng với URL của nó, giữ nguyên URL liên kết và định dạng. // @description:xh Faka ihlabathi lakho "Kopa" ukuze kunikwe itemu elibonisa i-URL yabo, efaka isimo sozinso kanye nokuxhunywa kwa-URL. // @description:yi מוסיף אַ קנעפּל "קאָפּיע" צו יעדער טוועעט און אַרטיקל וואָס קאָפּיעס דעם אינהאַלט צוזאַמען מיט זיין URL, בשעת עס פּראַזערווז לינק URL ס און סטיילינג. // @description:zh 为每条推文和文章添加一个“复制”按钮,将内容及其 URL 一并复制,保留链接和样式。 // @description:zh-CN 为每条推文和文章添加一个“复制”按钮,将内容及其 URL 一并复制,保留链接和样式。 // @description:zh-HK 為每條推文和文章添加一個「複製」按鈕,將內容及其 URL 一併複製,保留連結和樣式。 // @description:zh-MO 為每條推文和文章添加一個「複製」按鈕,將內容及其 URL 一併複製,保留連結和樣式。 // @description:zh-MY 为每条推文和文章添加一个“复制”按钮,将内容及其 URL 一并复制,保留链接和样式。 // @description:zh-SG 为每条推文和文章添加一个“复制”按钮,将内容及其 URL 一并复制,保留链接和样式。 // @description:zh-TW 為每條推文和文章添加一個「複製」按鈕,將內容及其 URL 一併複製,保留連結和樣式。 // @description:zu Ngeza inkinobho "Kopisha" kuzo zonke izitatimende nezindaba ze-Twitter eziphinde ziguqule imininingwane ngaphandle kwayo ngokukhulume kanye. // @author fr0stb1rd // @icon https://www.google.com/s2/favicons?sz=64&domain=twitter.com // @homepageURL https://github.com/fr0stb1rd/tampermonkey-tweet-copy // @supportURL https://github.com/fr0stb1rd/tampermonkey-tweet-copy/issues // @downloadURL https://raw.githubusercontent.com/fr0stb1rd/tampermonkey-tweet-copy/refs/heads/main/user.js // @updateURL https://raw.githubusercontent.com/fr0stb1rd/tampermonkey-tweet-copy/refs/heads/main/user.js // @compatible chrome // @compatible firefox // @compatible edge // @compatible opera // @compatible safari // @compatible kiwi // @compatible qq // @compatible via // @compatible brave // @match https://x.com/* // @match https://twitter.com/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @connect t.co // @connect * // @run-at document-end // @license MIT // ==/UserScript== (function () { 'use strict'; // Define SVG constants for the copy icon and the check mark. const ORIGINAL_SVG = ``; const CHECKMARK_SVG = ` `; // Inject CSS styles for the copy button and check mark animation using GM_addStyle. GM_addStyle(` .tm-copy-button { cursor: pointer; color: rgb(113, 118, 123); font-size: 14px; background: transparent; border: none; padding: 4px; margin-left: 8px; } .tm-copy-button svg { fill: currentcolor; width: 1.5em; height: 1.5em; transition: transform 0.3s ease; } .tm-copy-button:hover svg { color: rgb(29, 155, 240); } /* Animation for the check mark */ .tm-copy-checkmark { animation: checkmark-pop 0.5s ease-in-out; } @keyframes checkmark-pop { 0% { transform: scale(0.8); opacity: 0.5; } 50% { transform: scale(1.2); opacity: 1; } 100% { transform: scale(1); opacity: 1; } } `); /** * Asynchronously (in parallel) resolves t.co shorter URLs. * @param {string} text - The input text containing t.co links. * @returns {Promise} The text with resolved full URLs. */ async function resolveTcoLinksAsync(text) { const tcoRegex = /https:\/\/t\.co\/[a-zA-Z0-9]+/g; const urls = text.match(tcoRegex) || []; const uniqueUrls = [...new Set(urls)]; if (uniqueUrls.length === 0) return text; const promises = uniqueUrls.map(url => { return new Promise((resolve) => { if (typeof GM_xmlhttpRequest !== 'undefined') { GM_xmlhttpRequest({ method: 'GET', url: url, headers: { 'User-Agent': navigator.userAgent, 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' }, onload: function (response) { let final = response.finalUrl || url; // Handle 301/302 redirects if Tampermonkey doesn't automatically follow them if ((response.status >= 300 && response.status < 400) && final === url) { const locMatch = response.responseHeaders.match(/location:\s*([^\r\n]+)/i); if (locMatch && locMatch[1]) { final = locMatch[1].trim(); } } // Handle Meta Refresh redirects (rare t.co edge case) else if (response.status === 200 && response.responseText && response.responseText.includes('URL=')) { const metaMatch = response.responseText.match(/URL=['"]?([^'">]+)['"]?/i); if (metaMatch && metaMatch[1]) { final = metaMatch[1].trim(); } } resolve({ url, finalUrl: final }); }, onerror: function (err) { resolve({ url, finalUrl: url }); } }); } else { fetch(url, { redirect: 'follow' }) .then(res => resolve({ url, finalUrl: res.url })) .catch(err => resolve({ url, finalUrl: url })); } }); }); const results = await Promise.all(promises); let resolvedText = text; for (const { url, finalUrl } of results) { if (url !== finalUrl) { resolvedText = resolvedText.split(url).join(finalUrl); } } return resolvedText; } /** * Finds the tweet container (article element with data-testid="tweet") * for the given element. * @param {HTMLElement} element - The element to search from. * @returns {HTMLElement|null} The tweet container or null if not found. */ function findTweetContainer(element) { return element.closest('article[data-testid="tweet"]'); } /** * Checks if the tweet container is actually a long article. * @param {HTMLElement} container - The tweet/article container. * @returns {boolean} True if it's a long article. */ function isArticle(container) { if (!container) return false; // Must have both title and content elements const hasTitle = container.querySelector('[data-testid="twitter-article-title"]') !== null; const hasContent = container.querySelector('[data-testid="longformRichTextComponent"] > [data-contents="true"]') !== null; return hasTitle && hasContent; } /** * Creates and appends a copy button to the button group element. * The button, when clicked, copies the tweet content with styling and tweet URL. * @param {HTMLElement} groupEl - The container for tweet action buttons. */ function addCopyButtonToGroup(groupEl) { if (!groupEl) return; // Retrieve the tweet container for this group. const tweetContainer = findTweetContainer(groupEl); if (!tweetContainer) return; // Check if it's a long article const isLongArticle = isArticle(tweetContainer); // Avoid adding duplicate copy buttons. if (groupEl.querySelector('.tm-copy-button')) return; // Create the copy button. const copyBtn = document.createElement('button'); copyBtn.className = 'tm-copy-button'; copyBtn.innerHTML = ORIGINAL_SVG; copyBtn.addEventListener('click', async (e) => { // Prevent event propagation. e.stopPropagation(); // Handle article content if (isLongArticle) { // Extract title const titleEl = tweetContainer.querySelector('[data-testid="twitter-article-title"]'); const title = titleEl ? titleEl.innerText : ''; // Extract content - traverse child elements to preserve formatting const contentEl = tweetContainer.querySelector('[data-testid="longformRichTextComponent"] > [data-contents="true"]'); if (contentEl) { const contentClone = contentEl.cloneNode(true); // Replace each anchor's visible text with its full URL (only for t.co links to preserve hashtags/mentions) contentClone.querySelectorAll('a').forEach(a => { if (a.href && a.href.includes('t.co/')) { a.textContent = a.href; } }); // Get HTML content as-is const contentHTML = contentClone.innerHTML; // Extract text from each child element to preserve structure const paragraphs = []; contentClone.childNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { const text = node.innerText.trim(); if (text) { paragraphs.push(text); } } else if (node.nodeType === Node.TEXT_NODE) { const text = node.textContent.trim(); if (text) { paragraphs.push(text); } } }); const contentText = paragraphs.join('\n\n'); // Get article URL let articleUrl = ''; const linkEl = tweetContainer.querySelector('a[href*="/status/"]'); if (linkEl && linkEl.href) { articleUrl = linkEl.href; } let copyHTML = `${title}

${contentHTML}


Article URL: ${articleUrl}`; let copyText = `${title}\n\n\`\`\`\n${contentText}\n\`\`\`\n\nArticle URL: ${articleUrl}`; // Asynchronously resolve t.co links in the texts copyBtn.innerHTML = '⏳'; copyHTML = await resolveTcoLinksAsync(copyHTML); copyText = await resolveTcoLinksAsync(copyText); // Create Blob items for HTML and plain text. const blobHTML = new Blob([copyHTML], { type: 'text/html' }); const blobText = new Blob([copyText], { type: 'text/plain' }); // Create a ClipboardItem with both formats. const clipboardItem = new ClipboardItem({ 'text/html': blobHTML, 'text/plain': blobText, }); navigator.clipboard.write([clipboardItem]) .then(() => { copyBtn.innerHTML = CHECKMARK_SVG; copyBtn.classList.add('tm-copy-checkmark'); setTimeout(() => { copyBtn.innerHTML = ORIGINAL_SVG; copyBtn.classList.remove('tm-copy-checkmark'); }, 1500); }) .catch(err => console.error('Failed to copy article text:', err)); return; } } // Handle regular tweet content // Extract tweet text elements. const textElements = tweetContainer.querySelectorAll('[data-testid="tweetText"]'); // Process each tweet text element to preserve styling and update links. const tweetContent = Array.from(textElements).map(el => { const clone = el.cloneNode(true); // Replace each anchor's visible text with its full URL (only for t.co links to preserve hashtags/mentions) clone.querySelectorAll('a').forEach(a => { if (a.href && a.href.includes('t.co/')) { a.textContent = a.href; } }); return { html: clone.innerHTML, text: clone.innerText }; }); // Combine processed content with line breaks. const tweetHTML = tweetContent.map(obj => obj.html).join('

'); const tweetPlainText = tweetContent.map(obj => obj.text).join('\n\n'); // Retrieve the tweet URL. let tweetUrl = ''; const linkEl = tweetContainer.querySelector('a[href*="/status/"]'); if (linkEl && linkEl.href) { tweetUrl = linkEl.href; } // Append tweet URL to the content and wrap in markdown backticks. let copyHTML = `
${tweetHTML}


Tweet URL: ${tweetUrl}`; let copyText = `\`\`\`\n${tweetPlainText}\n\`\`\`\n\nTweet URL: ${tweetUrl}`; // Asynchronously resolve t.co links in the texts copyBtn.innerHTML = '⏳'; copyHTML = await resolveTcoLinksAsync(copyHTML); copyText = await resolveTcoLinksAsync(copyText); // Create Blob items for HTML and plain text. const blobHTML = new Blob([copyHTML], { type: 'text/html' }); const blobText = new Blob([copyText], { type: 'text/plain' }); // Create a ClipboardItem with both formats. const clipboardItem = new ClipboardItem({ 'text/html': blobHTML, 'text/plain': blobText, }); // Write both formats to the clipboard. navigator.clipboard.write([clipboardItem]) .then(() => { // Show check mark animation on successful copy. copyBtn.innerHTML = CHECKMARK_SVG; copyBtn.classList.add('tm-copy-checkmark'); setTimeout(() => { copyBtn.innerHTML = ORIGINAL_SVG; copyBtn.classList.remove('tm-copy-checkmark'); }, 1500); }) .catch(err => console.error('Failed to copy tweet text:', err)); }); // Append the button to the action group. groupEl.appendChild(copyBtn); } /** * Process all existing button group containers on the page. */ function processExistingGroups() { const groups = document.querySelectorAll('div[role="group"]'); groups.forEach(groupEl => addCopyButtonToGroup(groupEl)); } /** * MutationObserver callback to handle dynamically added nodes. * @param {MutationRecord[]} mutations - The list of mutations observed. */ function handleMutations(mutations) { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType !== Node.ELEMENT_NODE) return; // Gather all elements that match the group selector (tweets and articles). let groupEls = node.querySelectorAll('div[role="group"]'); // If the node itself is a group element, include it as well. if (node.matches && node.matches('div[role="group"]')) { groupEls = [node, ...groupEls]; } groupEls.forEach(el => addCopyButtonToGroup(el)); }); }); } // Initialize MutationObserver to monitor dynamic content changes. const observer = new MutationObserver(handleMutations); observer.observe(document.body, { childList: true, subtree: true }); // Process groups present on page load. processExistingGroups(); })();