// ==UserScript==
// @name Colorful Public/Private Labels for GitHub
// @namespace https://foooomio.net/
// @version 0.3
// @description Adds color to Public/Private labels of repositories on GitHub
// @author foooomio
// @license MIT License
// @match https://github.com/*
// @run-at document-end
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @require https://gf.qytechs.cn/scripts/7212-gm-config-eight-s-version/code/GM_config%20(eight's%20version).js?version=156587
// ==/UserScript==
(() => {
/* global GM_config */
'use strict';
function addStyle() {
GM_addStyle(`
.public:not(.archived) .Label {
display: var(--colorful-labels-display-public-labels, none);
color: var(--colorful-labels-public-text);
border-color: var(--colorful-labels-public-border);
}
.private:not(.archived) .Label {
color: var(--colorful-labels-private-text);
border-color: var(--colorful-labels-private-border);
}
.public.archived .Label {
color: var(--colorful-labels-public-archived-text);
border-color: var(--colorful-labels-public-archived-border);
}
.private.archived .Label {
color: var(--colorful-labels-private-archived-text);
border-color: var(--colorful-labels-private-archived-border);
}
`);
}
function setCSSVar() {
const { display_public_labels, ...settings } = GM_config.get();
document.documentElement.style.setProperty(
'--colorful-labels-display-public-labels',
display_public_labels ? 'inline-block' : 'none'
);
for (const [key, value] of Object.entries(settings)) {
const prop = '--colorful-labels-' + key.replaceAll('_', '-');
document.documentElement.style.setProperty(prop, value);
}
}
function setupConfig() {
GM_config.init('Colorful Public/Private Labels settings', {
public_text: {
label: 'Text of public repository',
type: 'text',
default: 'var(--color-scale-green-5)',
},
public_border: {
label: 'Border of public repository',
type: 'text',
default: 'var(--color-scale-green-4)',
},
private_text: {
label: 'Text of private repository',
type: 'text',
default: 'var(--color-scale-yellow-5)',
},
private_border: {
label: 'Border of private repository',
type: 'text',
default: 'var(--color-scale-yellow-4)',
},
public_archived_text: {
label: 'Text of public archived repository',
type: 'text',
default: 'var(--color-scale-purple-5)',
},
public_archived_border: {
label: 'Border of public archived repository',
type: 'text',
default: 'var(--color-scale-purple-4)',
},
private_archived_text: {
label: 'Text of private archived repository',
type: 'text',
default: 'var(--color-scale-orange-5)',
},
private_archived_border: {
label: 'Border of private archived repository',
type: 'text',
default: 'var(--color-scale-orange-4)',
},
display_public_labels: {
label: 'Display the label of public repository',
type: 'checkbox',
default: true,
},
});
GM_registerMenuCommand('Settings...', GM_config.open);
GM_config.onload = () => {
setCSSVar();
};
}
function setupRepoPage() {
const header = document.getElementById('repository-container-header');
if (!header) return;
const label = header.querySelector('h1 .Label');
if (!label) return;
const text = label.textContent.trim();
header.className += ' ' + text.toLowerCase().replace('archive', 'archived');
}
document.addEventListener('pjax:end', setupRepoPage);
setupRepoPage();
setupConfig();
setCSSVar();
addStyle();
})();