You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# My Google Chrome Extensions.md# Copyright (c) 2022-2025 Evandro Coan## Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in all# copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE# SOFTWARE.
Open Drive files directly from your browser in compatible applications installed on your computer.
Full Page Screen Capture
Capture a screenshot of your current page in entirety and reliably—without requesting any extra permissions!
GitHub Repository Size
Automatically adds repository size to GitHub's repository summary
BackStop
Stop Backspace returning to previous page
Google Docs Offline
Get things done offline with the Google Docs family of products.
Isometric Contributions
Renders an isometric pixel view of GitHub contribution graphs.
Notifier for GitHub
Displays your GitHub notifications unread count
Open in new tab
Open links in new tab for a list of specified domains. Useful for sites such as hackernews
Mute Tab 1.4
Restores the 'Mute Tab' functionality of versions prior to Chrome 71.
Save to Pocket
Pocket Extension for Chrome - The best way to save articles, videos and more
Shortkeys (Custom Keyboard Shortcuts)
Custom keyboard shortcuts for your browser
Simple Speed Dial
A speed dial functionally similar to the one used in Opera.
Ultra light newtab page with bookmarks on it
Ultra light new tab with bookmark navigator
Web Scrobbler
Scrobble music all around the web!
Session Buddy
Manage Browser Tabs and Bookmarks with Ease
Selection Highlighter
Passively highlights occurrences of selected text. Maintains current text selection.
Disable HTML5 Autoplay (Reloaded)
Disable autoplay and preloading of HTML5 video and audio players.
Notifier for Gmail™
Multiple label and account notifier for Google Mail (Gmail)
Change Timezone (Time Shift)
Easily change your timezone to a desired value and protect your privacy.
Chromium Wheel Smooth Scroller
Make scroll behavior smooth, ease-in-out manner, customizable with dynamically plotted curve. With bouncy edge feature.
Calculadora de jornada - Ahgora
Adiciona uma tabela com informações adicionais e a hora estimada de saída do trabalho na pagina de batidas de ponto do ahgora.
Checker Plus for Google Calendar
See your next events, get meeting notifications and snooze events without opening the Google Calendar page!
jQuery Injector
Inject jQuery into all frames on any page. jQuery Injector allows you to inject jQuery into every frame on a page so that you can use jQuery in the dev console.
Chrome extension source viewer
View source code of Chrome extensions, Firefox addons or Opera extensions (crx/nex/xpi) from the Chrome web store and elsewhere.
OpenList
Utilities to create and open lists of tabs.
TabCopy
Quickly copy tabs to the clipboard
Refined GitHub
Simplifies the GitHub interface and adds useful features
Features to disable, by filename: shorten-links add- move-marketplace-link-to-profile-dropdown set-default-repositories-type-to-sources infinite-scroll hide-useless-comments hide-watch-and-fork-count fit-textareas
Custom CSS
/* fix GitHub Actions console output last line being half-cut */body {
line-height:150%;
}
/* Stop adding scroll bar on quoted blocks/images *//* https://github.com/sindresorhus/refined-github/issues/2491 */
.comment-bodyblockquote,
.comment-bodypre {
max-height: none !important;
overflow-y: visible !important;
}
/* How to remove the sticky issues top bar? *//* https://github.com/sindresorhus/refined-github/issues/3086 */
.Box-header#js-issues-toolbar,
.Box#js-issues-toolbar> .Box-header {
position: relative;
}
// ==UserScript==// @name Auto scroll gitlab ci log// @namespace *// @version 0.1// @description ...// @author Evandro Coan//// @include http*://gitlab*//// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==//// https://gitlab.com/gitlab-org/gitlab/-/issues/37313 - Job Log Page is no longer auto scrolling to the bottom// https://stackoverflow.com/questions/3898130/check-if-a-user-has-scrolled-to-the-bottom/3898152//(function(){'use strict';functiongetDocHeight(){varD=document;returnMath.max(D.body.scrollHeight,D.documentElement.scrollHeight,D.body.offsetHeight,D.documentElement.offsetHeight,D.body.clientHeight,D.documentElement.clientHeight);}setInterval(function(){if($(window).scrollTop()+$(window).height()>getDocHeight()-300){$('button[data-testid="job-controller-scroll-bottom"]').click();}},1000);})();
Fix chatgpt auto-scrooling by always adding 500px at the bottom
// ==UserScript==// @name Fix chatgpt auto-scrolling by always adding 500px at the bottom// @namespace http://tampermonkey.net/// @version 0.1// @description Modify the height of the last HTML element with a data-testid attribute// @author You// @match https://chat.openai.com/*// @grant none// ==/UserScript==(function(){'use strict';functionsetElementHeight(){//let elements = document.querySelectorAll('[data-role="assistant"]'); // use for superpower chatgpt chrome extensionletelements=document.querySelectorAll('[data-testid^="conversation-turn"]');// use for chatgpt vanillaletheightJump=500;letjumpTimeoutInSeconds=30;letlastElement=elements[elements.length-1];if(lastElement){letheight=lastElement.scrollHeight||-1;letsetMinHeight=parseInt(lastElement.style.minHeight,10)||-1;letlastHeight=parseInt(lastElement.getAttribute("data-last-scrool"),10)||height;letlastHeightCount=parseInt(lastElement.getAttribute("data-last-scrool-count"),10)||0;// console.log(`height ${height}, lastHeight ${lastHeight}, setMinHeight ${setMinHeight}, lastHeightCount ${lastHeightCount}.`)if(height>lastHeight){height+=heightJump;lastElement.style.minHeight=`${height}px`;}if(height==lastHeight){if(lastHeightCount>jumpTimeoutInSeconds){// console.log(`Reseting height ${height} ${lastHeightCount}.`)lastElement.style.minHeight=`auto`;}lastHeightCount+=1;}else{lastHeightCount=0;}lastElement.setAttribute("data-last-scrool",height);lastElement.setAttribute("data-last-scrool-count",lastHeightCount);}letpenultiLastElement=elements[elements.length-2];letpenultiLastElement2=elements[elements.length-3];if(penultiLastElement){penultiLastElement.style.minHeight=`auto`;}if(penultiLastElement2){penultiLastElement2.style.minHeight=`auto`;}letchatTypeHeaders=document.querySelectorAll('header.sticky.top-0');if(chatTypeHeaders){chatTypeHeaders.forEach((chatTypeHeader)=>{chatTypeHeader.className="";});}}setInterval(setElementHeight,1000);})();
Fix GitHub snippet edit small size
// ==UserScript==// @name Fix GitHub snippet edit small size// @namespace http://tampermonkey.net/// @version 0.1// @description try to take over the world!// @author You// @match https://gist.github.com/evandrocoan/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('div[class="CodeMirror cm-s-github-light CodeMirror-wrap"]').not('span[data-donot-process-this-again]');// console.log('running');// console.log(viewedbar);if(viewedbar.length){viewedbar.css("height","700px");viewedbar.attr('data-donot-process-this-again',true);}setTimeout(keepclosing,500);}setTimeout(keepclosing,500);})();
Force GMail Archive button to go to back after clicking on it
// ==UserScript==// @name Force GMail Archive button to go to back after clicking on it// @namespace *// @version 0.1// @description Force GMail Archive button to go to back after clicking on it// @author Evandro Coan//// @include https://mail.google.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('div[data-tooltip="Archive"][tabindex="0"]').not('span[data-donot-process-this-again]');// console.log('running');// console.log(viewedbar);if(viewedbar.length){letpreviousItem=function(){// let viewedbar = $('div[data-tooltip][tabindex="0"][role="button"]').filter(function() {// return $(this).attr('data-tooltip').match(/.*Back.*/);// });letviewedbar=$('div[data-tooltip="All Mail"]');if(viewedbar.length){viewedbar.click();}returnfalse;};viewedbar.on('click',previousItem);viewedbar.attr('data-donot-process-this-again',true);}setTimeout(keepclosing,500);}setTimeout(keepclosing,500);letkeepopening=async()=>{letexpandbutton=$('div[data-tooltip="Show trimmed content"][aria-expanded="false"]');setTimeout(keepopening,500);if(expandbutton.length){expandbutton.click();}}setTimeout(keepopening,500);letkeepremovingsearchbar=async()=>{letexpandbutton=$('div[aria-label="search refinement"]');letdivsizetofix=$('div[gh="tm"]');setTimeout(keepremovingsearchbar,500);divsizetofix.css("height","30px");expandbutton.remove();}setTimeout(keepremovingsearchbar,500);})();
Force GMail Archive refresh page every 5 seconds
// ==UserScript==// @name Force GMail Archive refresh page every 5 seconds// @namespace *// @version 0.1// @description This is because on Linux the page some times takes long time to refresh// @author Evandro Coan//// @include https://mail.google.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('div[aria-label="Refresh"]');if(viewedbar.length){console.log('Clicking refresh');viewedbar.click();}else{console.log(viewedbar);}}setInterval(keepclosing,5000);})();
Remove youtube channels main image
// ==UserScript==// @name Remove youtube channels main image// @namespace *// @version 0.1// @description https://stackoverflow.com/questions/60480918/how-to-simulate-click-in-react-app-using-tampermonkey// @author You//// @include https://*youtube.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letmenubuttons=$('tp-yt-paper-tab');if(menubuttons.length){letbackground_div=$('div[id=background]');if(background_div.length){background_div.remove();}lettopbardiv=$('div[class="style-scope tp-yt-app-header"]');if(topbardiv.length){topbardiv.css("padding-top","0px");}lettopbardiv2=$('div[id="contents"]div[class="style-scope ytd-section-list-renderer"]');if(topbardiv2.length){topbardiv2.css("padding-top","50px");// topbardiv2.css("padding-top", "0px");}lettopbardivbanner=$('div[class="banner-visible-area style-scope ytd-c4-tabbed-header-renderer"]');if(topbardivbanner.length){topbardivbanner.remove();}lettopbardivsize=$('div[id=header][class="style-scope ytd-browse"]');if(topbardivsize.length){topbardivsize.css("height","150px");// topbardivsize.css("height", "0px");}lettopbardivjoinbar=$('ytd-recognition-shelf-renderer[class="style-scope ytd-item-section-renderer"]');if(topbardivjoinbar.length){topbardivjoinbar.hide();}lettopghostdiv=$('div[id=contentContainer][class="style-scope tp-yt-app-header-layout"]');if(topghostdiv.length){topghostdiv.hide();}// Unpin the main big bar (by putting it inside the main body)// use 5 seconds to avoid delay to avoid unfocusing the search button type field each second//if( $('div[id="contents"]div[class="style-scope ytd-section-list-renderer"] > div[class="style-scope tp-yt-app-header"]').length < 0 ) {//}}setTimeout(keepclosing,5000);}setTimeout(keepclosing,5000);})();
Remove youtube channels logo and always show all videos
// ==UserScript==// @name Remove youtube channels logo and always show all videos// @namespace *// @version 0.1// @description https://stackoverflow.com/questions/60480918/how-to-simulate-click-in-react-app-using-tampermonkey// @author You//// @include https://*youtube.com/*// @exclude https://*youtube.com/*/TucaLoretti/*// @exclude https://*youtube.com/*/UC1__NTyvkBZElGBK1qmtoMg/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letmenubuttons=$('tp-yt-paper-tab');if(menubuttons.length){// console.log("removing running...");letvideosButton=menubuttons[1];letariaSelected=$(videosButton).attr('aria-selected');// console.log(`ariaSelected ${ariaSelected}`);if(ariaSelected=='false'){menubuttons[1].click();}// delete youtube useless top bar/logolettopbar=$('.style-scope.ytd-c4-tabbed-header-renderer');if(topbar.length){topbar.hide();}}setTimeout(keepclosing,1000);}setTimeout(keepclosing,1000);})();
Remove genius lyrics side bars (to copy lyrics without their text)
// ==UserScript==// @name Remove genius lyrics side bars (to copy lyrics without their text)// @namespace *// @version 0.1// @description https://webapps.stackexchange.com/questions/145612/how-to-stop-the// @author You//// @include https://genius.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('.RightSidebar__Container-pajcl2-0');if(viewedbar.length){// console.log("removing running...");// use hide instead of remove to avoid mass flickering of the pageviewedbar.hide();}// console.log("running");setTimeout(keepclosing,500);}setTimeout(keepclosing,500);})();
Remove youtube viewed videos
// ==UserScript==// @name Remove youtube viewed videos// @namespace *// @version 0.1// @description https://webapps.stackexchange.com/questions/145612/how-to-stop-the// @author You//// @include https://*youtube.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('.style-scope.ytd-thumbnail-overlay-resume-playback-renderer');if(viewedbar.length){// console.log("removing running...");letparent=viewedbar.closest('.style-scope.ytd-rich-grid-renderer');if(parent.length){// use hide instead of remove to avoid mass flickering of the pageparent.hide();}}// console.log("running");setTimeout(keepclosing,500);}setTimeout(keepclosing,500);})();
Remove crunchyroll simulcastcalendar dub videos
// ==UserScript==// @name Remove crunchyroll simulcastcalendar dub videos// @namespace *// @version 0.1// @description https://webapps.stackexchange.com/questions/145612/how-to-stop-the// @author You//// @include https://*crunchyroll*/simulcastcalendar*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('cite:contains(" Dub)")');if(viewedbar.length){// console.log("removing running...");letparent=viewedbar.closest('li');if(parent.length){// use hide instead of remove to avoid mass flickering of the pageparent.hide();}}// console.log("running");// setTimeout(keepclosing, 500);}setTimeout(keepclosing,1500);})();
// ==UserScript==// @name Close Lastfm player bar// @namespace *// @version 0.1// @description https://github.com/sindresorhus/refined-github/issues/3061// @author You// https://meta.stackexchange.com/questions/81379/can-we-have-a-list-of-all// @include https://*last.fm/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==letthings=`// https://stackoverflow.com/questions/7474354/include-jquery-in-the-javascript-consolevar jq = document.createElement('script');jq.src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js";document.getElementsByTagName('head')[0].appendChild(jq);// ... give time for script to load, then type (or see below for non wait option)jQuery.noConflict();`;(function(){'use strict';deleteElement('div[data-more-string="More…"].navlist.navlist--more.masthead-nav.hidden-xs');deleteElement('.masthead-logo');deleteElement('.top-bar');functiondeleteElement(selector){letdelayed=()=>{// Avoid reprocessing when on background/not focusedif(document.hasFocus()){// console.log('Tab is active');}else{// console.log('Tab is not active');setTimeout(delayed,1000);return;}letelement=$(String(selector));if(element.length){console.log(`Deleting element '${element.text().replace(/\s+/g,' ').trim()}' button`);element.remove();}setTimeout(delayed,2000);}setTimeout(delayed,200);}$('#content').css({'padding-top': '0px'});if(String(window.location.href).toLowerCase().includes('ironhead4life')){setTimeout(fixScrobleLink,1000);}functionfixScrobleLink(){// Avoid reprocessing when on background/not focusedif(document.hasFocus()){// console.log('Tab is active');}else{// console.log('Tab is not active');setTimeout(fixScrobleLink,1000);return;}$('.chartlist-name>a').each(function(index,item){// console.log(index)letnewitem=$(item).attr('href');if(!String(newitem).includes('IronHead4Life')){letnewitemsrc=String(newitem).replace('/music/','/user/IronHead4Life/library/music/');// console.log(newitemsrc);$(item).attr('href',newitemsrc);$(item).attr('target','_blank');}});setTimeout(fixScrobleLink,1000);}})();
Force all short videos to open as a normal video!
// ==UserScript==// @name Force all short videos to open as a normal video!// @namespace *// @version 0.1// @description https://stackoverflow.com/questions/60480918/how-to-simulate-click-in-react-app-using-tampermonkey// @author You//// @include https://*youtube.com/*// @require http://code.jquery.com/jquery-3.4.1.min.js// ==/UserScript==(function(){'use strict';letkeepclosing=async()=>{letviewedbar=$('a[href*="/shorts"]');// console.log('running');// console.log(viewedbar);if(viewedbar.length){$(viewedbar).each(function(index,item){// console.log(index)letnewitem=$(item).attr('href');letnewitemsrc=String(newitem).replace('/shorts/','/watch?v=');// console.log(newitemsrc);$(item).attr('rel',`noopener noreferrer`);//$(item).attr('target', `_blank`);$(item).attr('onclick',` if( '${newitemsrc}' != this.getAttribute('href')) return; window.open('${newitemsrc}', ''); setTimeout(function(){ history.back(); }, 500); return false; `);$(item).removeAttr('href');$(item).attr('href',newitemsrc);//$(item).attr('data-saferedirecturl', newitemsrc);})}setTimeout(keepclosing,500);}setTimeout(keepclosing,500);})();
jisho add copy button to meanings-wrapper elements
// ==UserScript==// @name jisho add copy button to meanings-wrapper elements// @namespace your-namespace// @version 1// @description Add a button to all elements with the class "meanings-wrapper"// @match *://jisho.org/*// @grant none// ==/UserScript==(function(){'use strict';functioncopyToClipboard(docCopy){constmeaningTags=docCopy.querySelectorAll('.meaning-tags');for(leti=0;i<meaningTags.length;i++){consttagContent=meaningTags[i].textContent;if(tagContent){constnewTag=document.createElement('span');newTag.style.color='rgb(0, 128, 0)';newTag.innerHTML=tagContent+') ';newTag.classList=meaningTags[i].classList;meaningTags[i].parentNode.insertBefore(newTag,meaningTags[i]);meaningTags[i].parentNode.removeChild(meaningTags[i]);}}constmeaningDefinitions=docCopy.querySelectorAll('.meaning-definition');for(leti=0;i<meaningDefinitions.length;i++){constmeaningDefinition=meaningDefinitions[i];// remove `class="meaning-definition-section_divider"` and its contentsconstsectionDivider=meaningDefinition.querySelector('.meaning-definition-section_divider');if(sectionDivider){sectionDivider.parentNode.removeChild(sectionDivider);}}// before the `class="supplemental_info"` and after `class="meaning-meaning` span tag closes, add `: `constspanElements=docCopy.querySelectorAll('span');for(leti=0;i<spanElements.length;i++){constspanElement=spanElements[i];if(!spanElement.parentNode){continue;}// remove <span class="hit">円</span> but keep the contentsconsthitElement=spanElement.querySelector('.hit');if(hitElement){consttextNode=document.createTextNode(hitElement.textContent);hitElement.parentNode.replaceChild(textNode,hitElement);}if(spanElement.textContent===''){consttextNode=document.createTextNode(': ');spanElement.parentNode.replaceChild(textNode,spanElement);}}// replace `ul class="japanese` and its contents with new formating using `<ruby><rb>kanji</rb><rt>furigana</rt></ruby>`constjapaneseLists=docCopy.querySelectorAll('.japanese');for(leti=0;i<japaneseLists.length;i++){constjapaneseListItems=japaneseLists[i].querySelectorAll('li');for(letj=0;j<japaneseListItems.length;j++){constjapaneseListItem=japaneseListItems[j];constkanji=japaneseListItem.querySelector('.unlinked');constfurigana=japaneseListItem.querySelector('.furigana');if(kanji&&furigana){construby=document.createElement('ruby');constrt=document.createElement('rt');rt.innerHTML=furigana.innerHTML;if(kanji.innerHTML!=kanji.textContent){thrownewError(`${kanji.innerHTML} != ${kanji.textContent}`);}// fix jisho bug where kanji is not separated from kanaletkanaList=[];letkanjiList=[];for(leti=0;i<kanji.textContent.length;i++){constcharacter=kanji.textContent.charAt(i);if(/[\u3040-\u309F\u30A0-\u30FF]/g.test(character)){kanaList.push(character);}else{kanjiList.push(character);}}ruby.insertAdjacentHTML('beforeend',kanjiList.join(''));ruby.appendChild(rt);ruby.insertAdjacentHTML('beforeend',kanaList.join(''));japaneseListItem.innerHTML='';japaneseListItem.appendChild(ruby);}elseif(kanji){construby=document.createElement('ruby');constrt=document.createElement('rt');ruby.insertAdjacentHTML('beforeend',kanji.innerHTML)ruby.appendChild(rt);japaneseListItem.innerHTML='';japaneseListItem.appendChild(ruby);}}}// add `<br/>` after `class="meaning-wrapper"` contents but not if it is the last oneconstmeaningWrappers=docCopy.querySelectorAll('.meaning-wrapper');for(leti=0;i<meaningWrappers.length;i++){constmeaningWrapper=meaningWrappers[i];constcontents=meaningWrapper.innerHTML;if(i<meaningWrappers.length-1){meaningWrapper.insertAdjacentElement('afterEnd',document.createElement('br'));}// remove ul and li but keep its contentsconstsentences=meaningWrapper.querySelector('.sentences');if(!sentences){continue;}constjapanese=sentences.querySelector('.japanese');constjapaneseListItems=japanese.childNodes;constjapaneseListItemContents=[];for(leti=0;i<japaneseListItems.length;i++){constjapaneseListItem=japaneseListItems[i];if(japaneseListItem.nodeType===Node.TEXT_NODE){japaneseListItemContents.push(japaneseListItem.textContent);}else{japaneseListItemContents.push(japaneseListItem.innerHTML);}};constnewHtml=document.createElement('span');newHtml.innerHTML=japaneseListItemContents.join('');newHtml.classList='japanese-chars';japanese.parentElement.replaceChild(newHtml,japanese);}// move `class="english"` contents from inside `class="sentence"` to after itconstsentences=docCopy.querySelectorAll('.sentence');for(leti=0;i<sentences.length;i++){constsentence=sentences[i];constenglish=sentence.querySelector('.english');if(english){constenglishText=english.textContent;sentence.removeChild(english);constnewSpan=document.createElement('span');newSpan.classList.add('japanese-english');newSpan.textContent=englishText;sentence.parentNode.appendChild(newSpan);}}// replace all `div` tags by `span`, except the class="meaning-tags" divletdivs=docCopy.querySelectorAll('div');while(divs.length>0){for(leti=0;i<divs.length;i++){constdiv=divs[i];constspan=document.createElement('span');span.innerHTML=div.innerHTML;div.parentNode.replaceChild(span,div);}divs=docCopy.querySelectorAll('div');}// prefix href=/search with 'https://jisho.org/'constlinks=docCopy.querySelectorAll('[href^="/"]');links.forEach(function(link){consthref=link.getAttribute('href');link.setAttribute('href','https://jisho.org'+href);});constremoveButtons=docCopy.querySelectorAll('.remove-this-button');removeButtons.forEach(button=>{button.remove();});consthtml=docCopy.innerHTML;navigator.clipboard.writeText(html).then(()=>{if(Notification.permission==='granted'){constnotification=newNotification('HTML copied to clipboard',{body: 'The HTML has been copied to the clipboard.',});setTimeout(()=>{notification.close();},3000);}elseif(Notification.permission!=='denied'){Notification.requestPermission().then(permission=>{if(permission==='granted'){constnotification=newNotification('HTML copied to clipboard',{body: 'The HTML has been copied to the clipboard.',});setTimeout(()=>{notification.close();},3000);}else{alert('Clipboard copy notification show denied');}});}}).catch(err=>{alert('Failed to copy HTML: ',err);});}letkeepclosing=async()=>{constmeaningsWrappers=document.querySelectorAll('.meanings-wrapper:not(.remove-this-button)');meaningsWrappers.forEach(meaningsWrapper=>{meaningsWrapper.classList.add('remove-this-button');constbutton=document.createElement('button');button.innerText='Copy';button.classList='remove-this-button';button.addEventListener('click',()=>copyToClipboard(meaningsWrapper.cloneNode(true)));meaningsWrapper.appendChild(button);});setTimeout(keepclosing,500);}setTimeout(keepclosing,500);})();
Move weather.com real feel temperature side-by-side with temperature
// ==UserScript==// @name Move weather.com real feel temperature side-by-side with temperature// @namespace http://tampermonkey.net/// @version 2024-01-10// @description try to take over the world!// @author You// @match https://weather.com/weather/hourbyhour/*// @icon https://www.google.com/s2/favicons?sz=64&domain=weather.com// @require http://code.jquery.com/jquery-3.4.1.min.js// @grant none// ==/UserScript==(function(){'use strict';setInterval(function(){lettemperatures=$('span[data-testid="TemperatureValue"]');if(temperatures.length&&temperatures[0].textContent.includes('/')){temperatures=temperatures.not('span[data-donot-process-this-again]');}for(letindex=0;index<temperatures.length;index+=2){letmain_temperature=$(temperatures[index]);letreal_feel=$(temperatures[index+1]);main_temperature.append(` / ${real_feel.text()}`)real_feel.attr('data-donot-process-this-again',true);main_temperature.attr('data-donot-process-this-again',true);}letpercentages=$('span[data-testid="PercentageValue"]').not('span[data-donot-process-this-again]');for(letindex=0;index<percentages.length;index+=3){letrain_probability=$(percentages[index]);lethumidity_percentage=$(percentages[index+1]);letcloud_clover=$(percentages[index+2]);rain_probability.append(` ${humidity_percentage.text()} ${cloud_clover.text()}`)rain_probability.attr('data-donot-process-this-again',true);humidity_percentage.attr('data-donot-process-this-again',true);cloud_clover.attr('data-donot-process-this-again',true);}},1000);})();
// ==UserScript==// @name Click "Mostrar mais comentários"// @namespace http://tampermonkey.net/// @version 1.0// @description Automatically clicks on the "Mostrar mais comentários" button when it appears.// @author Your Name// @match *://some/page// @grant none// ==/UserScript==(function(){'use strict';functionclickMostrarMaisComentarios(){constbutton=[...document.querySelectorAll('button')].find(btn=>btn.textContent.trim()==="Mostrar mais comentários");if(button){console.log("Found the button! Clicking...");button.click();}}setInterval(clickMostrarMaisComentarios,500);})();
Limit google colab output max height to 300 px
// ==UserScript==// @name Limit google colab output max height to 300 px// @namespace http://tampermonkey.net/// @version 2025-02-03// @description Limit google colab output max height to 300 px// @author You// @match https://colab.research.google.com/drive/**// @grant none// ==/UserScript==(function(){'use strict';functionrunContinually(){constelements=document.querySelectorAll('.output-content:not(.alreadyprocessed)');elements.forEach(element=>{element.style.maxHeight='300px';element.classList.add('alreadyprocessed');});}setInterval(runContinually,500);})();