您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Companion Script to GitHub Dark
当前为
- // ==UserScript==
- // @name GitHub Dark Script
- // @version 0.1
- // @description Companion Script to GitHub Dark
- // @namespace https://github.com/StylishThemes
- // @include http*github.com*
- // @grant none
- // ==/UserScript==
- "use strict";
- if (/\/issues\/\d/.test(document.location)) {
- var comments = document.querySelectorAll(".js-discussion > .timeline-comment-wrapper > a"), authors = {};
- for (var i = 0, len = comments.length; i < len; i++) {
- var href = comments[i].getAttribute("href");
- if (/^\//.test(href)) {
- var author = href.substring(1);
- if (!authors[author])
- authors[author] = [];
- authors[author].push(comments[i].nextElementSibling);
- }
- }
- // TODO: Determine color for each author and apply the style to the comment box
- }
- var hsl, hslGradient, color,
- colors = '',
- styles = document.createElement('style');
- for (author in authors) {
- if (authors.hasOwnProperty(author)) {
- hsl = colorFromString(author),
- color = (hsl[2] > 50) ? '#000' : '#fff',
- hslGradient = hsl[0] + ',' + hsl[1] + '%,' + (hsl[2] - 10) + '%';
- hsl = hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%';
- authors[author].forEach(function(){
- // this works - but how to change the arrow color (.timeline-comment:before, .timeline-comment:after)?
- // element.setAttribute('style', 'border-color: rgb(' + rgb + ') !important');
- colors += 'a[href^="/' + author + '"] + div.timeline-comment { border-color: hsl(' + hsl + ') !important; }' +
- 'a[href^="/' + author + '"] + div.timeline-comment:before,' +
- 'a[href^="/' + author + '"] + div.timeline-comment:after { border-right-color: hsl(' + hsl + ') !important; }' +
- 'a[href^="/' + author + '"] + div.timeline-comment .timeline-comment-header { ' +
- 'background: linear-gradient(to bottom, hsl(' + hsl + '), hsl(' + hslGradient + ')) !important;' +
- 'border-color: hsl(' + hsl + ') !important;' +
- 'color: ' + color + ' !important; }' +
- 'a[href^="/' + author + '"] + div.timeline-comment .timeline-comment-header a { color: ' + color + ' !important; }'
- });
- }
- }
- styles.innerHTML = colors;
- document.getElementsByTagName('body')[0].appendChild(styles);
- // get RGB color values in the format [red,green,blue] for a given string
- // based on : https://github.com/garycourt/murmurhash-js
- // then convert RGB to HSL
- function colorFromString(string) {
- var remainder, bytes, h1, h1b, c1, c2, k1, i, r, g, b;
- remainder = string.length & 3;
- bytes = string.length - remainder;
- h1 = 0; // Seed value
- c1 = 0xcc9e2d51;
- c2 = 0x1b873593;
- i = 0;
- while (i < bytes) {
- k1 =
- ((string.charCodeAt(i) & 0xff)) |
- ((string.charCodeAt(++i) & 0xff) << 8) |
- ((string.charCodeAt(++i) & 0xff) << 16) |
- ((string.charCodeAt(++i) & 0xff) << 24);
- ++i;
- k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
- k1 = (k1 << 15) | (k1 >>> 17);
- k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
- h1 ^= k1;
- h1 = (h1 << 13) | (h1 >>> 19);
- h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
- h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
- }
- k1 = 0;
- switch (remainder) {
- case 3: k1 ^= (string.charCodeAt(i + 2) & 0xff) << 16;
- case 2: k1 ^= (string.charCodeAt(i + 1) & 0xff) << 8;
- case 1: k1 ^= (string.charCodeAt(i) & 0xff);
- k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
- k1 = (k1 << 15) | (k1 >>> 17);
- k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
- h1 ^= k1;
- }
- h1 ^= string.length;
- h1 ^= h1 >>> 16;
- h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
- h1 ^= h1 >>> 13;
- h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
- h1 ^= h1 >>> 16;
- var integer = h1 >>> 0;
- var colors = [];
- var j = 3;
- while (j) {
- colors[--j] = integer & (255);
- integer = integer >> 8;
- }
- // convert rgb to hsl - from http://stackoverflow.com/a/2348659
- r = colors[0];
- g = colors[1];
- b = colors[2];
- r /= 255, g /= 255, b /= 255;
- var max = Math.max(r, g, b), min = Math.min(r, g, b);
- var h, s, l = (max + min) / 2;
- if(max == min){
- h = s = 0; // achromatic
- } else {
- var d = max - min;
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
- switch(max){
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
- case g: h = (b - r) / d + 2; break;
- case b: h = (r - g) / d + 4; break;
- }
- h /= 6;
- }
- return [Math.floor(h * 360), Math.floor(s * 100), Math.floor(l * 100)];
- }