NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Jira Janky Poorman's Dark Mode // @namespace https://jrwarwick.github.io/ // @version 0.3 // @description Jira is sometimes too bright, especially when you have a headache or working late at night in bedroom w/ S.O. trying to get sleep. This helps. Kinda. // @author justin.warwick@gmail.com // @license MIT // @match https://onprem-jira.domain.com/* // @icon https://marketplace.atlassian.com/s/images/favicon.ico // @grant none // ==/UserScript== // Note: targeted to Jira "DataCenter" 8.20-ish, with ServiceDesk. Mostly seems to work on Cloud, too. // Note: you must edit the match special header vairable to appropriately for your jira server, // but some userscript plugins don't like custom port numbers. (function() { 'use strict'; var preserveScreenshots = true; //DataCenter edition (on-prem) //First do basic inversion, and as soon as possible. jQuery("html").css("filter","invert(82%) contrast(112%)"); //Aha, what about screenshots? Maybe don't? or maybe only if they are "bright"? if (preserveScreenshots) { //https://stackoverflow.com/questions/13762864/image-brightness-detection-in-client-side-script jQuery("div.action-body img, #description-val img").css("filter","invert(90%) contrast(115%)"); //, div.sd-activity-comment span.image-wrap>img (already coverd by div.action-body img ?) } //Some items are AJAX loaded after this script fires, race condition style. //We could set a timer to "win" that race. ////setTimeout(function(){jQuery(".aui-avatar-inner > img, .sd-comment-avatar").css("filter","invert(82%) contrast(112%)"); },1200); //Or we can do style rule override at class level (rather than element-level-by-selector) jQuery("head").append('<style id="userscript_style_override" type="text/css"></style>'); jQuery('#userscript_style_override').html(` /* pre-de/re-inversions */ .aui-avatar-inner > img, .sd-comment-avatar, #priority-val > img, #cp-img, ul.aui-list-truncate img.icon { filter:invert(90%) contrast(115%); } #issue_actions_container .action-body a[file-preview-type="image"] > img { filter:invert(90%) contrast(115%) ; } /* some fine-tuning for things looking different when inverted, when its particularly jarring or perhaps semantically nullifying */ a.aui-button { border:1px solid #DDE; } #header>.aui-header.aui-dropdown2-trigger-group { background-color:slategrey; } li.status > .aui-lozenge.jira-issue-status-lozenge-green, .aui-lozenge.jira-issue-status-lozenge-success, #status-val .jira-issue-status-lozenge-green { background-color: #a537aa ; border-color: orange ; color: #fff ; } table[data-testid="issue-table--table"] > tbody > tr > td .aui-lozenge.jira-issue-status-lozenge-green { background-color: #a537aa ; border-color: orange ; color: #fff ; } /* fine tuning for dashboards specifically */ .jira-issue-status-lozenge.aui-lozenge.jira-issue-status-lozenge-green.jira-issue-status-lozenge-done { background-color: #a537aa ; border-color: orange ; color: #fff ; } `); //Cloud Edition// (which, note seems to *require* jQuery object name rather than $). let tmd = setTimeout(function(){ jQuery("button[aria-label!='']>span>span>img").css("filter","invert(90%) contrast(115%)"); jQuery("span[role='img']").css("filter","invert(90%) contrast(115%)"); jQuery("span[style*='background-image']").css("filter","invert(90%) contrast(115%)"); //this one kind of overlaps with some of the previous... jQuery("div[tabindex!=''] img")// },2222); //document.getElementsByTagName("body")[0].style.filter="brightness(66%)"; //document.getElementsByTagName("body")[0].style.filter="contrast(66%)"; })();