Closed trimechee closed 6 days ago
@trimechee Yes. I use this exact extension all the time!! It works fine for me. I have downloaded videos many gigabytes in size, and it doesnt use alot of RAM.
Interesting, thank you very much :)
the small problem is that this extension seems not to be open source and I would like to use open source extension, so I hesitate to install this extension even if it seems famous and in good standing, on the other hand I found open source extension to download HLS streams but there seems to be a blacklist where people are asking the dev to ignore their website's streams, and i see the code and youtube seems to be blacklisted, may be Mr Alex can take a look at the code and see if there is a way to remove the blacklist.....
https://github.com/chandler-stimson/live-stream-downloader/
I also found this extension from hls downloader but it seems it is not open source
@trimechee Technically every extension is open source, since you can download the .crx and have a look inside.
I could make a github repo for the HLS extension if you would really like to see inside it.
Wow it will be wonderful that you examine and inspect the code , thank you so much !
extension videodownload helper seems to be not open source, the only open source github extension to download video that I found is stream detector:
https://github.com/rowrawer/stream-detector
and live-stream-downloader by chandler-stimson,
github extensions to download videos seem very rare, and the press even talked about open source software on github that have malware and viruses :( that's why I'm a little anxious even when I test open source github software lol
@Alex313031 and it will be amazing please if you have a look and inspect in this awesome open source extension, the extension in chrome store of the famous FDM free download manager seems to have censoship beacause many users have said they can't download youtube video anymore, so a developer has make a new open source extension to integrate yt-dlp in FDM extension and so it is possible to donwload youtube video , fdm manager has added recently a new fantastic revolutionary feature Remote access (connect to FDM running on desktop PC) so wa can use fdm desktop to send downloaded video to our smartphone ! this software become very exciting !
@Alex313031 i scan FDM with virus total website and in community section, i see this report, i don't know if the report made by Joe Sandbox Analysis says if this software is a malware virus or not, i didn't understand these technical information, that's says
:"Data Obfuscation Boot Survival
Joe Sandbox Signatures Obfuscated command line found Uses schtasks.exe or at.exe to add and modify task schedules"
i am a liitle bit scared, what does mean ?! virustotal says it is safe, but Joe Sandbox Signatures seems to say this sooftware is dangerous ?!!! please help us to understand this report !
Verdict: SUS Score: 24/100 Classification: sus24.winEXE@6/26@3/0 Domains: accounts.google.com www.freedownloadmanager.org clients.l.google.com clients2.google.com
HTML Report: https://www.joesandbox.com/analysis/690704/0/html PDF Report: https://www.joesandbox.com/analysis/690704/0/pdf Executive Report: https://www.joesandbox.com/analysis/690704/0/executive Incident Report: https://www.joesandbox.com/analysis/690704/0/irxml IOCs: https://www.joesandbox.com/analysis/690704?idtype=analysisid
@Alex313031 Excuse me, i have other request please, i consider that this is the best website to download or watch youtube video and this site propose a bookmarklet and i have heard bookmarklet could be malicious, so please we will be very greatful if you inspect the code of this bookmarkelet , thank you very much !
bookarklet :
javascript:(function(){ if (window.location.hostname == 'getvideo.at') { alert('Open a page containing a video and then click this button again'); } else { open('https://getvideo.at/?url=%27 + encodeURIComponent(window.location.href) + %27&utm_source=bookmarklet&utm_medium=redirect%27); } })();
@trimechee That doesn't look malicious, and the site is good. If you are worried, I recommend using https://yt5s.io/ without a bookmarklet, just paste your youtube link in it.
that's reassuring, thank you very much :) and thank you for sharing this wonderful site 🥇
and for fdm manager please ? I gave up installing it after the alarming report from Deep Malware Analysis of Joe Sandbox Technology !
I just discover this incredible download extension t : cliget but i don't know if it can download HLS streams :
https://github.com/zaidka/cliget
Download login-protected files from the command line using curl, wget or aria2.
This addon will generate commands that emulate the request as though it was coming from your browser by sending the same cookies, user agent string and referrer. With this addon you can download email attachments, purchased software/media, source code from a private repository to a remote server without having to download the files locally first. If come across a website where cliget doesn't work, please open an issue providing details to help reproduce the problem.
Windows users: Enable the "Escape with double-quotes" option because Windows doesn't support single quotes. If you use cygwin, however, you don't need to enable this option.
Please be aware of potential security and privacy implications from cookies being exposed in the download command.
@Alex313031 Hello, i find these very interestiing bookmarklet, can you inspect them please if there is something suspect ?
https://deturl.com/bookmarklet-to-directly-download-videos-from-youtube.html
Hello, i knwo it is diffcult but we know you are so generous Mr @Alex313031, i disable always translation in web browsers to make browsers faster, but i read often articles in foreign language so i nedd sometimes to translate web site, i made a research and i found this bookmarklet to translate pages with one click, please it will be so awesome and we wil be greatful if you have a look in these translation bookmarlket if there maware virus or something suspect, thank you very much :)
javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/?text=%27+t+%27&hl=auto&langpair=auto|auto&tbb=1&ie=%27+e;}else{location.href=%27http://translate.google.com/translate?u=%27+encodeURIComponent(location.href)+%27&hl=fr&langpair=auto|auto&tbb=1&ie=%27+e;};
javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/?text='+t+'&hl=auto&langpair=auto|auto&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+encodeURIComponent(location.href)+'&hl=auto&langpair=auto|auto&tbb=1&ie='+e;};
https://zingmp3-vn.translate.goog/?_x_tr_sl=vi&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc
javascript:(function(){var%20a=window.getSelection(),b='';if(a!=''){a='text='+encodeURIComponent(a)}else{a='u='+encodeURIComponent(location.href);b='translate'};window.open('https://translate.google.com/'+b+'?sl=auto&tl=en&'+a,'_blank','height=800,width=600,noreferrer,noopener')})();
javascript:(function(){var%20a=window.getSelection(),b='';if(a!=''){a='text='+encodeURIComponent(a)}else{a='u='+encodeURIComponent(location.href);b='translate'};window.open('https://translate.google.com/'+b+'?sl=auto&tl=en&'+a,'_blank','noreferrer,noopener')})();
translate to french francais
javascript:%28function %28%29 %7B var console %3D %28function %28%29 %7B var iframe %3D document.getElementById%28%27xxxJanConsole%27%29%3B if %28%21iframe%29 %7B iframe %3D document.createElementNS%28%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%27%2C %27iframe%27%29%3B iframe.id %3D %27xxxJanConsole%27%3B iframe.style.display %3D %27none%27%3B %28document.body %7C%7C document.documentElement%29.appendChild%28iframe%29%3B %7D return iframe %26%26 iframe.contentWindow %26%26 iframe.contentWindow.console %7C%7C %7B log%3A function %28%29 %7B%7D %7D%3B %7D%29%28%29%3B var s %3D %28function %28%29 %7B %2F%2A%s%2A%2F%3B %7D%29.toString%28%29 .replace%28%2F%5Efunction%5Cs%2A%5C%28%5Cs%2A%5C%29%5Cs%2A%5C%7B%5Cs%2A%5C%2F%5C%2A%2F%2C %27%27%29 .replace%28%2F%5C%2A%5C%2F%5Cs%2A%5C%3B%3F%5Cs%2A%5C%7D%5Cs%2A%24%2F%2C %27%27%29 .replace%28%2F%5Cu0025s%2F%2C %27%27%29%3B if %28s %3D%3D%3D %27%27%29 %7B function getActiveSelection%28doc%29 %7B if %28arguments.length %3D%3D%3D 0%29 %7B doc %3D document%3B %7D if %28%21doc %7C%7C typeof doc.getSelection %21%3D%3D %27function%27%29 %7B return %27%27%3B %7D if %28%21doc.activeElement%29 %7B return doc.getSelection%28%29 %2B %27%27%3B %7D var activeElement %3D doc.activeElement%3B try %7B if %28 typeof activeElement.contentDocument %3D%3D%3D %27object%27 %26%26 activeElement.contentDocument %21%3D%3D null %29 %7B return getActiveSelection%28activeElement.contentDocument%29%3B %7D %7D catch %28e%29 %7B return doc.getSelection%28%29 %2B %27%27%3B %7D if %28typeof activeElement.value %3D%3D%3D %27string%27%29 %7B if %28activeElement.selectionStart %21%3D%3D activeElement.selectionEnd%29 %7B return activeElement.value.substring%28activeElement.selectionStart%2C activeElement.selectionEnd%29%3B %7D return activeElement.value%3B %7D return doc.getSelection%28%29 %2B %27%27%3B %7D s %3D getActiveSelection%28%29%3B if %28%21s%29 %7B var interLanguageSelectors %3D %5B %27.interlanguage-link a%5Bhref%5D%5Bhreflang%3D"fr"%5D%27%2C %27%23language a%5Bhref%5D%5Bhreflang%3D"fr"%5D%27%2C %27link%5Brel%3D"alternate"%5D%5Bhreflang%3D"fr"%5D%27%2C %27link%5Brel%3D"alternate"%5D%5Bhreflang%5E%3D"fr-"%5D%27%2C %27%5Bid%2A%3D"lang"%5D%5Bid%2A%3D"elect"%5D a%5Bhreflang%3D"fr"%5D%27%2C %27%5Bid%2A%3D"lang"%5D%5Bid%2A%3D"elect"%5D a%5Bhreflang%5E%3D"fr-"%5D%27%2C %27%5Bclass%2A%3D"lang"%5D%5Bclass%2A%3D"elect"%5D a%5Bhreflang%3D"fr"%5D%27%2C %27%5Bclass%2A%3D"lang"%5D%5Bclass%2A%3D"elect"%5D a%5Bhreflang%5E%3D"fr-"%5D%27%2C %27a.language%5Bhref%2A%3D"%2Ffr%2F"%5D%27%2C %27a%5Bhref%5D%5Btitle%24%3D"this page in French"%5D%27%2C %27a%5Bhref%5D%5Btitle%24%3D"cette page en français"%5D%27 %5D%3B for %28var link%2C i %3D 0%3B i < interLanguageSelectors.length%3B i%2B%2B%29 %7B link %3D document.querySelector%28interLanguageSelectors%5Bi%5D%29%3B if %28link%29 %7B console.log%28%27Translate to French%3A found link for selector %27%2C interLanguageSelectors%5Bi%5D%2C %27%3A %27%2C link%29%3B location %3D link.href%3B return%3B %7D %7D var interLanguageXPathSelectors %3D %5B %27%2F%2Fa%5B%40href%5D%5Btranslate%28.%2C "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZРУСКИЙ"%2C "abcçdefghijklmnñopqrstuvwxyzруский"%29 %3D "fr"%5D%27%2C %27%2F%2Fa%5B%40href%5D%5Btranslate%28.%2C "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZРУСКИЙ"%2C "abcçdefghijklmnñopqrstuvwxyzруский"%29 %3D "français"%5D%27%2C %27%2F%2Fa%5B%40href%5D%5Bcontains%28.%2C "page in French"%29%5D%27%2C %5D%3B for %28i %3D 0%3B i < interLanguageXPathSelectors.length%3B i%2B%2B%29 %7B var xPathResult %3D document.evaluate%28interLanguageXPathSelectors%5Bi%5D%2C document%2C null%2C XPathResult.ORDERED_NODE_SNAPSHOT_TYPE%2C null%29%3B if %28xPathResult.snapshotLength%29 %7B console.log%28%27Translate to French%3A found link for selector %27%2C interLanguageXPathSelectors%5Bi%5D%2C %27%3A %27%2C xPathResult.snapshotItem%280%29%29%3B location %3D xPathResult.snapshotItem%280%29.href%3B return%3B %7D %7D const wikimediaDomains %3D %5B %27wikipedia.org%27%2C %27wiktionary.org%27%2C %27wikibooks.org%27%2C %27wikinews.org%27%2C %27wikiquote.org%27%2C %27wikisource.org%27%2C %27wikiversity.org%27%2C %27wikivoyage.org%27%2C %5D%3B const possibleWikimediaDomainMatches %3D location.host.match%28%2F.%2A%3F%5C.%28m%5C.%29%3F%28%5B%5E.%5D%2B%5C.%5B%5E.%5D%2B%24%29%2F%29%3B if %28possibleWikimediaDomainMatches%29 %7B const possibleWikimediaDomain %3D possibleWikimediaDomainMatches%5B2%5D%3B if %28wikimediaDomains.indexOf%28possibleWikimediaDomain%29 > -1 %26%26 %21document.querySelector%28%27%23ca-view%27%29%29 %7B const mobileSubdomain %3D possibleWikimediaDomainMatches%5B1%5D%3B const languageSubdomain %3D %27fr%27.replace%28%2F-.%2A%2F%2C %27%27%29%3B const targetLanguageDomain %3D %60%24%7BlanguageSubdomain%7D.%24%7BmobileSubdomain %3F%3F %27%27%7D%24%7BpossibleWikimediaDomain%7D%60%3B console.log%28%60Translate to French%3A Wikimedia special case%3A going to the corresponding page on the French domain %24%7BtargetLanguageDomain%7D%60%29%3B location.host %3D targetLanguageDomain%3B return%3B %7D %7D s %3D %28location.protocol %2B %27%27%29.match%28%2F%5Ehttp%2F%29 %3F location %2B %27%27 %3A %27%27%3B if %28%21s%29 %7B s %3D prompt%28%27Please enter your text to translate to French%3A%27%29%3B %7D %7D %7D else %7B s %3D s.replace%28%2F%28%5E%7C%5Cs%7C"%29~%28"%7C%5Cs%7C%24%29%2Fg%2C %27%241%27 %2B getSelection%28%29 %2B %27%242%27%29%3B %7D if %28s%29 %7B if %28s.match%28%2F%5E%28https%3F%3A%5C%2F%5C%2F%29%28%5B%5E%5Cs.%5D%2B%5C.%29%2B%5B%5E%5Cs.%5D%2B%5C.%3F%28%5C%2F%5CS%2A%29%3F%24%2F%29%29 %7B const googleTranslateUrl %3D new URL%28s%29%3B const isHttp %3D googleTranslateUrl.protocol %3D%3D%3D %27http%3A%27%3B googleTranslateUrl.protocol %3D %27https%27%3B googleTranslateUrl.host %3D googleTranslateUrl.host.replaceAll%28%27-%27%2C %27--%27%29.replaceAll%28%27.%27%2C %27-%27%29 %2B %27.translate.goog%27%3B if %28isHttp%29 %7B googleTranslateUrl.searchParams.set%28%27_x_tr_sch%27%2C %27http%27%29%3B %7D googleTranslateUrl.searchParams.set%28%27_x_tr_sl%27%2C %27auto%27%29%3B googleTranslateUrl.searchParams.set%28%27_x_tr_tl%27%2C %27fr%27%29%3B location %3D googleTranslateUrl%3B %7D else %7B location %3D %27https%3A%2F%2Ftranslate.google.com%2F%3Fop%3Dtranslate%26sl%3Dauto%26tl%3Dfr%26text%3D%27 %2B encodeURIComponent%28s%29%3B %7D %7D %7D%29%28%29%3B
traduire translate to english anglais
javascript:%28function %28%29 %7B var console %3D %28function %28%29 %7B var iframe %3D document.getElementById%28%27xxxJanConsole%27%29%3B if %28%21iframe%29 %7B iframe %3D document.createElementNS%28%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%27%2C %27iframe%27%29%3B iframe.id %3D %27xxxJanConsole%27%3B iframe.style.display %3D %27none%27%3B %28document.body %7C%7C document.documentElement%29.appendChild%28iframe%29%3B %7D return iframe %26%26 iframe.contentWindow %26%26 iframe.contentWindow.console %7C%7C %7B log%3A function %28%29 %7B%7D %7D%3B %7D%29%28%29%3B var s %3D %28function %28%29 %7B %2F%2A%s%2A%2F%3B %7D%29.toString%28%29 .replace%28%2F%5Efunction%5Cs%2A%5C%28%5Cs%2A%5C%29%5Cs%2A%5C%7B%5Cs%2A%5C%2F%5C%2A%2F%2C %27%27%29 .replace%28%2F%5C%2A%5C%2F%5Cs%2A%5C%3B%3F%5Cs%2A%5C%7D%5Cs%2A%24%2F%2C %27%27%29 .replace%28%2F%5Cu0025s%2F%2C %27%27%29%3B if %28s %3D%3D%3D %27%27%29 %7B function getActiveSelection%28doc%29 %7B if %28arguments.length %3D%3D%3D 0%29 %7B doc %3D document%3B %7D if %28%21doc %7C%7C typeof doc.getSelection %21%3D%3D %27function%27%29 %7B return %27%27%3B %7D if %28%21doc.activeElement%29 %7B return doc.getSelection%28%29 %2B %27%27%3B %7D var activeElement %3D doc.activeElement%3B try %7B if %28 typeof activeElement.contentDocument %3D%3D%3D %27object%27 %26%26 activeElement.contentDocument %21%3D%3D null %29 %7B return getActiveSelection%28activeElement.contentDocument%29%3B %7D %7D catch %28e%29 %7B return doc.getSelection%28%29 %2B %27%27%3B %7D if %28typeof activeElement.value %3D%3D%3D %27string%27%29 %7B if %28activeElement.selectionStart %21%3D%3D activeElement.selectionEnd%29 %7B return activeElement.value.substring%28activeElement.selectionStart%2C activeElement.selectionEnd%29%3B %7D return activeElement.value%3B %7D return doc.getSelection%28%29 %2B %27%27%3B %7D s %3D getActiveSelection%28%29%3B if %28%21s%29 %7B var interLanguageSelectors %3D %5B %27.interlanguage-link a%5Bhref%5D%5Bhreflang%3D"en"%5D%27%2C %27%23language a%5Bhref%5D%5Bhreflang%3D"en"%5D%27%2C %27link%5Brel%3D"alternate"%5D%5Bhreflang%3D"en"%5D%27%2C %27link%5Brel%3D"alternate"%5D%5Bhreflang%5E%3D"en-"%5D%27%2C %27%5Bid%2A%3D"lang"%5D%5Bid%2A%3D"elect"%5D a%5Bhreflang%3D"en"%5D%27%2C %27%5Bid%2A%3D"lang"%5D%5Bid%2A%3D"elect"%5D a%5Bhreflang%5E%3D"en-"%5D%27%2C %27%5Bclass%2A%3D"lang"%5D%5Bclass%2A%3D"elect"%5D a%5Bhreflang%3D"en"%5D%27%2C %27%5Bclass%2A%3D"lang"%5D%5Bclass%2A%3D"elect"%5D a%5Bhreflang%5E%3D"en-"%5D%27%2C %27a.language%5Bhref%2A%3D"%2Fen%2F"%5D%27%2C %27a%5Bhref%5D%5Btitle%24%3D"this page in English"%5D%27%2C %27a%5Bhref%5D%5Btitle%24%3D"current page in English"%5D%27 %5D%3B for %28var link%2C i %3D 0%3B i < interLanguageSelectors.length%3B i%2B%2B%29 %7B link %3D document.querySelector%28interLanguageSelectors%5Bi%5D%29%3B if %28link%29 %7B console.log%28%27Translate to English%3A found link for selector %27%2C interLanguageSelectors%5Bi%5D%2C %27%3A %27%2C link%29%3B location %3D link.href%3B return%3B %7D %7D var interLanguageXPathSelectors %3D %5B %27%2F%2Fa%5B%40href%5D%5Btranslate%28.%2C "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZРУСКИЙ"%2C "abcçdefghijklmnñopqrstuvwxyzруский"%29 %3D "en"%5D%27%2C %27%2F%2Fa%5B%40href%5D%5Btranslate%28.%2C "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZРУСКИЙ"%2C "abcçdefghijklmnñopqrstuvwxyzруский"%29 %3D "english"%5D%27%2C %27%2F%2Fa%5B%40href%5D%5Bcontains%28.%2C "page in English"%29%5D%27%2C %5D%3B for %28i %3D 0%3B i < interLanguageXPathSelectors.length%3B i%2B%2B%29 %7B var xPathResult %3D document.evaluate%28interLanguageXPathSelectors%5Bi%5D%2C document%2C null%2C XPathResult.ORDERED_NODE_SNAPSHOT_TYPE%2C null%29%3B if %28xPathResult.snapshotLength%29 %7B console.log%28%27Translate to English%3A found link for selector %27%2C interLanguageXPathSelectors%5Bi%5D%2C %27%3A %27%2C xPathResult.snapshotItem%280%29%29%3B location %3D xPathResult.snapshotItem%280%29.href%3B return%3B %7D %7D const wikimediaDomains %3D %5B %27wikipedia.org%27%2C %27wiktionary.org%27%2C %27wikibooks.org%27%2C %27wikinews.org%27%2C %27wikiquote.org%27%2C %27wikisource.org%27%2C %27wikiversity.org%27%2C %27wikivoyage.org%27%2C %5D%3B const possibleWikimediaDomainMatches %3D location.host.match%28%2F.%2A%3F%5C.%28m%5C.%29%3F%28%5B%5E.%5D%2B%5C.%5B%5E.%5D%2B%24%29%2F%29%3B if %28possibleWikimediaDomainMatches%29 %7B const possibleWikimediaDomain %3D possibleWikimediaDomainMatches%5B2%5D%3B if %28wikimediaDomains.indexOf%28possibleWikimediaDomain%29 > -1 %26%26 %21document.querySelector%28%27%23ca-view%27%29%29 %7B const mobileSubdomain %3D possibleWikimediaDomainMatches%5B1%5D%3B const languageSubdomain %3D %27en%27.replace%28%2F-.%2A%2F%2C %27%27%29%3B const targetLanguageDomain %3D %60%24%7BlanguageSubdomain%7D.%24%7BmobileSubdomain %3F%3F %27%27%7D%24%7BpossibleWikimediaDomain%7D%60%3B console.log%28%60Translate to English%3A Wikimedia special case%3A going to the corresponding page on the English domain %24%7BtargetLanguageDomain%7D%60%29%3B location.host %3D targetLanguageDomain%3B return%3B %7D %7D s %3D %28location.protocol %2B %27%27%29.match%28%2F%5Ehttp%2F%29 %3F location %2B %27%27 %3A %27%27%3B if %28%21s%29 %7B s %3D prompt%28%27Please enter your text to translate to English%3A%27%29%3B %7D %7D %7D else %7B s %3D s.replace%28%2F%28%5E%7C%5Cs%7C"%29~%28"%7C%5Cs%7C%24%29%2Fg%2C %27%241%27 %2B getSelection%28%29 %2B %27%242%27%29%3B %7D if %28s%29 %7B if %28s.match%28%2F%5E%28https%3F%3A%5C%2F%5C%2F%29%28%5B%5E%5Cs.%5D%2B%5C.%29%2B%5B%5E%5Cs.%5D%2B%5C.%3F%28%5C%2F%5CS%2A%29%3F%24%2F%29%29 %7B const googleTranslateUrl %3D new URL%28s%29%3B const isHttp %3D googleTranslateUrl.protocol %3D%3D%3D %27http%3A%27%3B googleTranslateUrl.protocol %3D %27https%27%3B googleTranslateUrl.host %3D googleTranslateUrl.host.replaceAll%28%27-%27%2C %27--%27%29.replaceAll%28%27.%27%2C %27-%27%29 %2B %27.translate.goog%27%3B if %28isHttp%29 %7B googleTranslateUrl.searchParams.set%28%27_x_tr_sch%27%2C %27http%27%29%3B %7D googleTranslateUrl.searchParams.set%28%27_x_tr_sl%27%2C %27auto%27%29%3B googleTranslateUrl.searchParams.set%28%27_x_tr_tl%27%2C %27en%27%29%3B location %3D googleTranslateUrl%3B %7D else %7B location %3D %27https%3A%2F%2Ftranslate.google.com%2F%3Fop%3Dtranslate%26sl%3Dauto%26tl%3Den%26text%3D%27 %2B encodeURIComponent%28s%29%3B %7D %7D %7D%29%28%29%3B
javascript:location.href='http://translate.google.com/translate?u='+encodeURIComponent(location.href)+'&langpair=%s&hl=EN&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools'
andykant/mass_google_translate_bookmarklet.js Created 12 years ago • Report abuse 1 0 Code Revisions 6
A mass Google Translate bookmarklet mass_google_translate_bookmarklet.js /*
// compressed javascript:(function(){var $=function(el){return document.getElementById(el)},chomp=function(str){return str.replace(/^[\s\n\r]/,'').replace(/[\s\n\r]$/,'')},source=$('source'),messages=chomp(source.value).split(/[\r\n]/),delimiter='=',data=[],text=[],message,i;for(i=0;(message=messages[i]);i++){message=messages[i]=chomp(message).split(delimiter);message[1]=messages[i][1]=message.slice(1).join(delimiter);data.push(message[1])}source.value=data.join('\n');window.location.hash='#'+$('old_sl').value+'|'+$('old_tl').value+'|'+encodeURIComponent(data.join('\n'));setTimeout(function parse(){var translations=$('result_box').childNodes,results=[];if(translations.length>messages.length){alert('Found too many translated messages, please try a smaller subset')}else if(translations.length!==messages.length){setTimeout(parse,100);return}for(i=0;(message=messages[i]);i++){results.push(message[0]+'='+(translations[i]?translations[i].firstChild.textContent:''))}source.value=results.join('\n');source.focus();source.setSelectionRange(0,source.value.length)},100)})()
// expanded javascript:(function() { var $ = function(el) { return document.getElementById(el); }, chomp = function(str) { return str.replace(/^[\s\n\r]/,'').replace(/[\s\n\r]$/,''); }, source = $('source'), messages = chomp(source.value).split(/[\r\n]/), delimiter = '=', data = [], text = [], message, i;
for (i = 0; (message = messages[i]); i++) {
message = messages[i] = chomp(message).split(delimiter);
message[1] = messages[i][1] = message.slice(1).join(delimiter);
data.push(message[1]);
}
source.value = data.join('\n');
window.location.hash = '#' + $('old_sl').value + '|' + $('old_tl').value + '|' + encodeURIComponent(data.join('\n'));
setTimeout(function parse() {
var translations = $('result_box').childNodes,
results = [];
if (translations.length > messages.length) {
alert('Found too many translated messages, please try a smaller subset');
}
else if (translations.length !== messages.length) {
setTimeout(parse, 100);
return;
}
for (i = 0; (message = messages[i]); i++) {
results.push(message[0] + '=' + (translations[i] ? translations[i].firstChild.textContent : ''));
}
source.value = results.join('\n');
source.focus();
source.setSelectionRange(0, source.value.length);
}, 100);
})()
About HLS streams downloader, i think i discover the best of the best, the absolutely revolutionary incredible downloader open source to downlaod almost any type of videos, but we have to use Tampermonkey :
I found another hls dowloader extension, we wll be greatful if you could inspect it :
Hello, this a famous extension to download HLS streams, bit in the website of extension, thay say : " This extension is not available for Firefox / Edge at this time as it consumes as much memory as the file size. We are waiting for this problem on the browser side to be resolved."
https://www.hlsloader.com/
https://chrome.google.com/webstore/detail/stream-recorder-download/iogidnfllpdhagebkblkgbfijkbkjdmm
can we download HLS streams via Thorium? does Thorium browser have this bug?
it will be great to add a TTS text to speech to read news articles with natural voices like firefox and edge browser, thank you very much :)