├── .eslintrc ├── .travis.yml ├── images ├── customization.png ├── dashboard-after.png └── dashboard-before.png ├── AUTHORS ├── .mailmap ├── .gitignore ├── .editorconfig ├── tools ├── authors ├── usercss-template.css ├── fix-perfectionist.js ├── bump-version.js ├── utils.js └── update-usercss.js ├── .gitattributes ├── .stylelintrc ├── package.json ├── defaults.json ├── README.md ├── .github └── CONTRIBUTING.md └── github-feed-icons.user.css /.eslintrc: -------------------------------------------------------------------------------- 1 | root: true 2 | extends: eslint-config-silverwind 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | -------------------------------------------------------------------------------- /images/customization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/GitHub-Feed-Icons/HEAD/images/customization.png -------------------------------------------------------------------------------- /images/dashboard-after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/GitHub-Feed-Icons/HEAD/images/dashboard-after.png -------------------------------------------------------------------------------- /images/dashboard-before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/GitHub-Feed-Icons/HEAD/images/dashboard-before.png -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # Authors ordered by first contribution. 2 | 3 | Rob Garrison 4 | 5 | # Generated by tools/authors.sh 6 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Rob Garrison Mottie 2 | Rob Garrison Rob G 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # lockfiles 2 | package-lock.json 3 | yarn.lock 4 | 5 | # temp stuff 6 | tmp/ 7 | *.tmp 8 | *.bak 9 | 10 | # logs 11 | *.stackdump 12 | *.log 13 | 14 | # Build 15 | node_modules/ 16 | build.json 17 | *.build.css 18 | 19 | # Windows crap 20 | Thumbs.db 21 | Desktop.ini 22 | 23 | # Mac crap 24 | .DS_Store 25 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | trim_trailing_whitespace = true 8 | end_of_line = lf 9 | charset = utf-8 10 | insert_final_newline = true 11 | 12 | [*.css] 13 | block_comment_start = /* 14 | block_comment = * 15 | block_comment_end = */ 16 | -------------------------------------------------------------------------------- /tools/authors: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # generate AUTHORS, modify .mailmap in case of duplicates 4 | git log --reverse --format='%aN <%aE>' | perl -we ' 5 | BEGIN { 6 | %seen = (), @authors = (); 7 | } 8 | while (<>) { 9 | next if $seen{$_}; 10 | $seen{$_} = push @authors, $_; 11 | } 12 | END { 13 | print "# Authors ordered by first contribution.\n"; 14 | print "\n", @authors, "\n"; 15 | print "# Generated by tools/authors.sh\n"; 16 | } 17 | ' > "${BASH_SOURCE%/*}/../AUTHORS" 18 | -------------------------------------------------------------------------------- /tools/usercss-template.css: -------------------------------------------------------------------------------- 1 | /* ==UserStyle== 2 | @name {{title}} 3 | @version {{version}} 4 | @description {{description}} 5 | @namespace StylishThemes 6 | @author StylishThemes 7 | @homepageURL https://github.com/{{repository}} 8 | @supportURL https://github.com/{{repository}}/issues 9 | @updateURL https://raw.githubusercontent.com/{{repository}}/master/{{main}} 10 | @license CC-BY-SA-4.0 11 | {{variables}} 12 | @preprocessor {{preprocessor}} 13 | ==/UserStyle== */ 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /tools/fix-perfectionist.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | const fs = require("fs").promises; 5 | const path = require("path"); 6 | const pkg = require("../package.json"); 7 | 8 | const fileName = path.join(__dirname, "..", pkg.main); 9 | 10 | function cleanup(css) { 11 | return css 12 | // Perfectionist adds comments to the end of the previous line... 13 | // }/* comment */ => }\n\n /* comment */ 14 | .replace(/}\/\*(([\s\S])+?)\*\/\s*/g, "}\n\n /*$1*/\n ") 15 | .replace(/,\s\/\*/g, ",\n /*") 16 | // Remove extra carriage returns between definitions 17 | .replace(/\n+/g, "\n"); 18 | } 19 | 20 | async function postPerfectionist() { 21 | const css = await fs.readFile(fileName, "utf8"); 22 | await fs.writeFile(fileName, cleanup(css)); 23 | console.log("\x1b[32m%s\x1b[0m", `${pkg.title} usercss cleanup completed`); 24 | } 25 | 26 | postPerfectionist(); 27 | -------------------------------------------------------------------------------- /tools/bump-version.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | const fs = require("fs").promises; 5 | const path = require("path"); 6 | const semver = require("semver"); 7 | 8 | const pkg = require("../package.json"); 9 | 10 | const file = path.join(__dirname, "..", pkg.main); 11 | 12 | (async () => { 13 | // level = patch, minor or major 14 | const level = process.argv.pop(); 15 | const newVersion = semver.inc(pkg.version, level); 16 | 17 | fs.readFile(file, "utf8") 18 | .then(css => css.replace(pkg.version, newVersion)) 19 | .then((css) => { 20 | if (css.indexOf(newVersion) < 0) { 21 | throw new Error("*** VERSION MISMATCH!! ***"); 22 | } 23 | return css; 24 | }) 25 | .then(css => fs.writeFile(file, css)) 26 | .then(() => console.log("\x1b[32m%s\x1b[0m", `${pkg.title} usercss updated`)) 27 | .catch(exit); 28 | })(); 29 | 30 | function exit(err) { 31 | if (err) { 32 | console.error(err); 33 | } 34 | process.exit(err ? 1 : 0); 35 | } 36 | -------------------------------------------------------------------------------- /tools/utils.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | // Replace placeholders in template 5 | function replaceHolders(pkg, css) { 6 | const placeholders = css.match(/\{\{\S+?\}\}/g); 7 | const domain = "https://github.com/"; 8 | if (placeholders) { 9 | new Set(placeholders).forEach((name) => { 10 | let val = (pkg[name.replace(/[{}]/g, "")] || name); 11 | if (val.indexOf(domain) > -1) { 12 | val = val.substring(domain.length, val.length); 13 | } 14 | css = css.replace(new RegExp(escapeRegex(name), "gi"), val); 15 | }); 16 | } 17 | return css; 18 | } 19 | 20 | function escapeRegex(str) { 21 | return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); 22 | } 23 | 24 | function maxSize(array) { 25 | return array.reduce((acc, item) => Math.max(acc, item.length), 0); 26 | } 27 | 28 | function pad(len, str) { 29 | return (str || "").padEnd(len); 30 | } 31 | 32 | module.exports = { 33 | replaceHolders, 34 | escapeRegex, 35 | maxSize, 36 | pad, 37 | }; 38 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | # https://github.com/stylelint/stylelint/blob/master/docs/user-guide/rules.md 2 | # https://github.com/stylelint/stylelint-config-standard/blob/master/index.js 3 | 4 | extends: stylelint-config-standard 5 | 6 | rules: 7 | at-rule-empty-line-before: null 8 | block-no-empty: null 9 | block-opening-brace-space-before: null 10 | color-hex-case: null 11 | color-named: null 12 | comment-empty-line-before: null 13 | comment-no-empty: null 14 | comment-whitespace-inside: null 15 | declaration-bang-space-before: null 16 | declaration-block-no-duplicate-properties: null 17 | declaration-block-single-line-max-declarations: null 18 | declaration-colon-newline-after: null 19 | font-family-name-quotes: always-where-recommended 20 | font-family-no-duplicate-names: true 21 | function-url-quotes: always 22 | indentation: null 23 | max-empty-lines: 0 24 | no-descending-specificity: null 25 | no-duplicate-selectors: null 26 | number-leading-zero: never 27 | number-max-precision: 3 28 | number-no-trailing-zeros: true 29 | rule-empty-line-before: null 30 | selector-combinator-space-after: null 31 | selector-combinator-space-before: null 32 | selector-list-comma-newline-after: null 33 | selector-pseudo-element-colon-notation: single 34 | selector-type-no-unknown: null 35 | string-quotes: double 36 | value-list-comma-newline-after: null 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-feed-icons", 3 | "title": "GitHub Feed Icons", 4 | "version": "1.0.6", 5 | "description": "Add icons to the GitHub news feed", 6 | "license": "CC-BY-SA-4.0", 7 | "repository": "https://github.com/StylishThemes/GitHub-Feed-Icons", 8 | "homepage": "https://github.com/StylishThemes/GitHub-Feed-Icons", 9 | "main": "github-feed-icons.user.css", 10 | "engines": { 11 | "node": ">=10" 12 | }, 13 | "devDependencies": { 14 | "eslint": "^5.16.0", 15 | "eslint-config-silverwind": "^3.0.2", 16 | "perfectionist": "^2.4.0", 17 | "semver": "^6.1.1", 18 | "stylelint": "^10.0.1", 19 | "stylelint-config-standard": "^18.3.0", 20 | "updates": "^8.0.3" 21 | }, 22 | "scripts": { 23 | "authors": "bash tools/authors", 24 | "clean": "npm run perfectionist && node tools/fix-perfectionist.js", 25 | "eslint": "eslint --quiet --color tools/*.js", 26 | "lint": "npm run eslint && npm run stylelint", 27 | "major": "node tools/bump-version.js major && git add . && npm version -f major", 28 | "minor": "node tools/bump-version.js minor && git add . && npm version -f minor", 29 | "patch": "node tools/bump-version.js patch && git add . && npm version -f patch", 30 | "perfectionist": "perfectionist github-feed-icons.user.css github-feed-icons.user.css --indentSize 2 --maxAtRuleLength 250", 31 | "stylelint": "stylelint --color -- github-feed-icons.user.css", 32 | "test": "npm run eslint && npm run stylelint", 33 | "update": "updates -cu && npm install", 34 | "usercss": "node tools/update-usercss.js" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "variables": { 3 | "Icon background": { 4 | "type": "color", 5 | "label": "background", 6 | "value": "#181818" 7 | }, 8 | "Branch icon": { 9 | "type": "color", 10 | "label": "branch-color", 11 | "value": "#fff" 12 | }, 13 | "Closed issue/PR icon": { 14 | "type": "color", 15 | "label": "closed-color", 16 | "value": "#f44" 17 | }, 18 | "Comment icon": { 19 | "type": "color", 20 | "label": "comment-color", 21 | "value": "#fff" 22 | }, 23 | "Following icon": { 24 | "type": "color", 25 | "label": "follow-color", 26 | "value": "#fff" 27 | }, 28 | "Forked repo icon": { 29 | "type": "color", 30 | "label": "fork-color", 31 | "value": "#fff" 32 | }, 33 | "Opened issue/PR icon": { 34 | "type": "color", 35 | "label": "opened-color", 36 | "value": "#6cc64" 37 | }, 38 | "Reopen issue/PR icon": { 39 | "type": "color", 40 | "label": "reopened-color", 41 | "value": "#6cc64" 42 | }, 43 | "Repo (new/public) icon": { 44 | "type": "color", 45 | "label": "repo-color", 46 | "value": "#6cc644" 47 | }, 48 | "Push icon": { 49 | "type": "color", 50 | "label": "push-color", 51 | "value": "#fff" 52 | }, 53 | "Starred icon": { 54 | "type": "color", 55 | "label": "star-color", 56 | "value": "#fbca04" 57 | }, 58 | "Tag icon": { 59 | "type": "color", 60 | "label": "tag-color", 61 | "value": "#fff" 62 | }, 63 | "Wiki icon": { 64 | "type": "color", 65 | "label": "wiki-color", 66 | "value": "#fff" 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /tools/update-usercss.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | const fs = require("fs").promises; 5 | const path = require("path"); 6 | 7 | const {replaceHolders, maxSize, pad} = require("./utils"); 8 | const pkg = require("../package.json"); 9 | 10 | const files = { 11 | defaults: path.join(__dirname, "..", "defaults.json"), 12 | usercss: path.join(__dirname, "..", pkg.main), 13 | template: path.join(__dirname, "usercss-template.css"), 14 | }; 15 | 16 | const defaults = require(files.defaults); 17 | 18 | function addVars(template, usercss) { 19 | const vars = defaults.variables; 20 | const keys = Object.keys(vars); 21 | const typeLen = maxSize(keys.map(key => vars[key].type)); 22 | const labelLen = maxSize(keys.map(key => vars[key].label)); 23 | const keyLen = maxSize(keys.map(key => key)); 24 | const variables = keys.map((key) => { 25 | const e = vars[key]; 26 | const v = e.type !== "dropdown" ? 27 | e.value : 28 | `{\n ${Object.keys(e.value) 29 | .map(o => `${o} "${o}" << 50 | fs 51 | .readFile(files.usercss, "utf8") 52 | .then(usercss => addVars(template, usercss)) 53 | ) 54 | .then(css => fs.writeFile(files.usercss, css)) 55 | .then(() => console.log("\x1b[32m%s\x1b[0m", `${pkg.title} usercss update complete`)) 56 | .catch(exit); 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub Feed Icons [![tag](https://img.shields.io/github/tag/StylishThemes/GitHub-Feed-Icons.svg)](https://github.com/StylishThemes/GitHub-Feed-Icons/tags) 2 | 3 | A simple userstyle that adds icons to the news feed. 4 | 5 | Please be aware that most feed entries have a generic class name applied: 6 | * An open pull request will show an issue opened icon. 7 | * A closed pull request, either merged or unmerged, will show an issue closed icon. 8 | * A reopened issue or pull request will show an issue reopened icon. 9 | * Issue and commit (review) comments will both show a comment icon. 10 | * Wiki edit and creation will show a book icon. 11 | * Repo creation and a repo made public will show the same repo icon. 12 | 13 | ## Preview 14 | 15 | This userstyle works great along side our [compact feed style](https://github.com/StylishThemes/GitHub-Compact-Feed), as seen in these screenshots. 16 | 17 | | Before | After | 18 | |:------:|:-----:| 19 | | ![](./images/dashboard-before.png) | ![](./images/dashboard-after.png) | 20 | 21 | ## Customizing 22 | 23 | The overall feed icon background and individual icon colors may be customized. 24 | 25 | ![](./images/customization.png) 26 | 27 | ## Installation 28 | 29 | A userstyle extension is required, common ones include: 30 | 31 | 🎨 Stylus for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/styl-us/), [Chrome](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne) or [Opera](https://addons.opera.com/en-gb/extensions/details/stylus/).
32 | 🎨 xStyle for [Firefox](https://addons.mozilla.org/firefox/addon/xstyle/) or [Chrome](https://chrome.google.com/webstore/detail/xstyle/hncgkmhphmncjohllpoleelnibpmccpj). 33 | 34 | Then: 35 | 36 | 📦 [Install the usercss](https://github.com/StylishThemes/GitHub-Feed-Icons/raw/master/github-feed-icons.user.css) with Stylus or xStyle. Supports automatic updates. 37 | 38 | ## Contributions 39 | 40 | If you would like to contribute to this repository, please... 41 | 42 | 1. 👓 Read the [contribution guidelines](CONTRIBUTING.md). 43 | 2. ![repo-forked](https://user-images.githubusercontent.com/136959/42383736-c4cb0db8-80fd-11e8-91ca-12bae108bccc.png) [fork](https://github.com/StylishThemes/GitHub-Feed-Icons/fork) or ![cloud-download](https://user-images.githubusercontent.com/136959/42401932-9ee9cae0-813d-11e8-8691-16e29a85d3b9.png) 44 | [Download](https://github.com/StylishThemes/GitHub-Feed-Icons/archive/master.zip), 45 | 3. 👌 Create a pull request! 46 | 47 | Thanks to all that have [contributed](AUTHORS) so far! 48 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | 1. [Getting Involved](#getting-involved) 4 | 2. [How To Report style issues](#how-to-report-style-issues) 5 | 3. [Core Style Guide](#style-guide) 6 | 4. [Getting Started](#getting-started) 7 | 8 | ## Getting Involved 9 | 10 | There are a number of ways to get involved with the development of this theme. Even if you've never contributed to an Open Source project before, we're always looking for help identifying missing styles or other issues. 11 | 12 | ## How to Report Style issues 13 | 14 | ### I don't know CSS 15 | 16 | If you don't know CSS very well and have found a missing style, please include as much as possible of following information when opening an issue: 17 | 18 | * Screenshot of the problem; include the element(s) in the console if at all possible 19 | * To select an element, target it with your mouse then right-click and choose "Inspect Element" 20 | * Please include both the HTML view and the element with the problem in the screenshot (see [issue #119](https://github.com/StylishThemes/GitHub-Dark/issues/119) for an example) 21 | * A URL to the page (if public). 22 | 23 | ### I rock at CSS & GitHub! 24 | 25 | * Follow the style guide below 26 | * Make any needed changes, then send us a pull request 27 | * Please include a url to the page (if public) 28 | 29 | ## Style Guide 30 | 31 | * Use the provided `.editorconfig` file with your code editor. Don't know what that is? Then check out http://editorconfig.org/. 32 | * Limit to the [K&R Style](https://en.wikipedia.org/wiki/Indentation_style#K.26R), and **2 SPACE INDENTATION** (no tabs, and not more, and not less than 2 spaces). 33 | 34 | * K&R Example: 35 | ```css 36 | element[attr='value'] { 37 | ··property: value; 38 | } 39 | ``` 40 | 41 | * **Not Allman** 42 | ```css 43 | element[property='value'] 44 | { 45 | ··property: value; 46 | } 47 | ``` 48 | 49 | * Strict space between the `selector` and the `{`: 50 | ```css 51 | /* good */ 52 | element[attr='value'] { } 53 | 54 | /* bad */ 55 | element[attr='value']{ } 56 | ``` 57 | 58 | * 2 Space indentation 59 | ```css 60 | /* good */ 61 | ··property: value; 62 | 63 | /* bad */ 64 | ····property: value; 65 | ----property: value; 66 | ·property: value; 67 | ``` 68 | 69 | * Try to wrap lines at around 80 characters. 70 | * Try to limit the style size: 71 | * Don't add any image URI's to the css; instead add the image into the `/images` directory; then point to using the following url: `http://stylishthemes.github.io/GitHub-Feed-Icons/images/`{my-image.png}. 72 | * If possible, reduce any added selectors. Remember that Stylus requires an `!important` flag to override default styling, so a selector starting from the body isn't always necessary. 73 | * Don't add any inline comments. If you want to make a comment, add it as a note in the commit. 74 | * If your css definition already exists within the style, do not add it again! Add your selector to the existing definition. 75 | * Insert any new css selectors in the available slot immediately before the style definition, or on a new line as needed. 76 | * If you want to add a new userstyle or usercss variable, please open an issue and discuss it with us first. 77 | 78 | ## Getting Started 79 | 80 | * [Download](https://github.com/StylishThemes/GitHub-Feed-Icons/archive/master.zip), [fork](https://github.com/StylishThemes/GitHub-Feed-Icons/fork) or clone this repository. 81 | * Use [node.js](http://nodejs.org/) to run `npm install`. 82 | * Make any changes to the `github-feed-icons.user.css` file and save. 83 | 84 | ### Build & test 85 | 86 | * Create & change into a new branch of your local GitHub-Feed-Icons repository. 87 | * Open the style in the Stylus editor, and make sure to have "live preview" checked for testing. 88 | * Once you are satisfied with the changes, select all the css (Ctrl + a), copy (Ctrl + c) then paste (Ctrl + v) it into your editor. 89 | * Run `npm test` to test the css changes. 90 | * Now you can add and commit the changes of the `github-feed-icons.user.css` file to your fork's branch. 91 | * If you haven't already contributed, then run `npm run authors` to add your name to our list of contributors :smile: 92 | * Push the changes to your branch, then submit a pull request. 93 | * And thanks again for contributing! 94 | 95 | ### Development Scripts 96 | 97 | * `npm run authors`: Runs a batch file to rebuild the `AUTHORS` file. Update the `.mailmap` file for any duplicate entries. 98 | * `npm run clean`: Runs the perfectionist script & cleans up after it. 99 | * `npm run eslint`: Lint the JavaScript code in the `tools` directory. 100 | * `npm run lint`: Run eslint & stylelint scripts. 101 | * `npm run major`: Creates a semantic major release. 102 | * `npm run minor`: Creates a semantic minor release. 103 | * `npm run patch`: Creates a semantic patch release. 104 | * `npm run perfectionist`: Runs perfectionist only. CSS is not cleaned! 105 | * `npm run stylelint`: Run stylelint on the css file. 106 | * `npm run test`: Same as `npm run lint`. 107 | * `npm run update`: Update development dependencies. 108 | * `npm run usercss`: Update usercss variables using usercss template; variable data obtained from `defaults.json`. 109 | -------------------------------------------------------------------------------- /github-feed-icons.user.css: -------------------------------------------------------------------------------- 1 | /* ==UserStyle== 2 | @name GitHub Feed Icons 3 | @version 1.0.6 4 | @description Add icons to the GitHub news feed 5 | @namespace StylishThemes 6 | @author StylishThemes 7 | @homepageURL https://github.com/StylishThemes/GitHub-Feed-Icons 8 | @supportURL https://github.com/StylishThemes/GitHub-Feed-Icons/issues 9 | @updateURL https://raw.githubusercontent.com/StylishThemes/GitHub-Feed-Icons/master/github-feed-icons.user.css 10 | @license CC-BY-SA-4.0 11 | @advanced color background "Icon background" #181818 12 | @advanced color branch-color "Branch icon" #fff 13 | @advanced color closed-color "Closed issue/PR icon" #f44 14 | @advanced color comment-color "Comment icon" #fff 15 | @advanced color follow-color "Following icon" #fff 16 | @advanced color fork-color "Forked repo icon" #fff 17 | @advanced color opened-color "Opened issue/PR icon" #6cc644 18 | @advanced color reopened-color "Reopen issue/PR icon" #6cc644 19 | @advanced color repo-color "Repo (new/public) icon" #6cc644 20 | @advanced color push-color "Push icon" #fff 21 | @advanced color star-color "Starred icon" #fbca04 22 | @advanced color tag-color "Tag icon" #fff 23 | @advanced color wiki-color "Wiki icon" #fff 24 | @preprocessor uso 25 | ==/UserStyle== */ 26 | @-moz-document regexp("^https?:\\/\\/github\\.com(\\/)?$"), regexp("^https?:\\/\\/github\\.com\\/(orgs\\/.*\\/)?dashboard(\\/)?$") { 27 | .news .commit_comment, .news .follow, .news .fork, .news .git-branch, 28 | .news .gollum, .news .issues_closed, .news .issues_comment, 29 | .news .issues_opened, .news .issues_reopened, .news .public, .news .push, 30 | .news .repo, .news .tag, .news .watch_started { 31 | position: relative; 32 | } 33 | .news .body div { 34 | position: static; 35 | } 36 | .news .commit_comment:after, .news .follow:after, .news .fork:after, 37 | .news .git-branch:after, .news .gollum:after, .news .issues_closed:after, 38 | .news .issues_comment:after, .news .issues_opened:after, 39 | .news .issues_reopened:after, .news .public:after, .news .push:after, 40 | .news .repo:after, .news .tag:after, .news .watch_started:after { 41 | content: ""; 42 | background-size: contain; 43 | background-repeat: no-repeat; 44 | background-position: center center; 45 | width: 20px; 46 | height: 20px; 47 | position: absolute; 48 | left: -27px; 49 | top: 21px; 50 | z-index: 1; 51 | } 52 | .news .commit_comment:before, .news .follow:before, .news .fork:before, 53 | .news .git-branch:before, .news .gollum:before, .news .issues_closed:before, 54 | .news .issues_comment:before, .news .issues_opened:before, 55 | .news .issues_reopened:before, .news .public:before, .news .push:before, 56 | .news .repo:before, .news .tag:before, .news .watch_started:before { 57 | content: ""; 58 | background-color: /*[[background]]*/; 59 | width: 22px; 60 | height: 22px; 61 | position: absolute; 62 | left: -30px; 63 | top: 18px; 64 | padding: 2px; 65 | border-radius: 4px; 66 | } 67 | /* Icons from https://www.figma.com/file/FP7lqd1V00LUaT5zvdklkkZr/Octicons */ 68 | .news .commit_comment:after, .news .issues_comment:after { 69 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13 0H1C0.45 0 0 0.45 0 1V9C0 9.55 0.45 10 1 10H3V13.5L6.5 10H13C13.55 10 14 9.55 14 9V1C14 0.45 13.55 0 13 0ZM13 9H6L4 11V9H1V1H13V9Z' transform='translate(1 1)' fill='/*[[comment-color]]*/'/%3E%3C/svg%3E"); 70 | } 71 | .news .follow:after { 72 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 16' width='12' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 13.002C12 13.553 11.553 14 11.002 14H1.001C0.448 14 0 13.552 0 12.999V12C0 9.367 4 8 4 8C4 8 4.229 7.591 4 7C3.159 6.38 3.056 5.41 3 3C3.173 0.587 4.867 0 6 0C7.133 0 8.827 0.586 9 3C8.944 5.41 8.841 6.38 8 7C7.771 7.59 8 8 8 8C8 8 12 9.367 12 12V13.002Z' transform='translate(0 1)' fill='/*[[follow-color]]*/'/%3E%3C/svg%3E"); 73 | } 74 | .news .fork:after { 75 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 16' width='10' height='16'%3E%3Cpath fill-rule='evenodd' d='M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z' fill='/*[[fork-color]]*/'%3E%3C/path%3E%3C/svg%3E"); 76 | } 77 | .news .git-branch:after { 78 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 16' width='10' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10 5a2 2 0 0 0-2-2 2 2 0 0 0-1 3.7V7c0 .5-.2 1-.6 1.4A2 2 0 0 1 5 9c-.8 0-1.5.2-2 .5V4.7A2 2 0 0 0 2 1a2 2 0 0 0-2 2 2 2 0 0 0 1 1.7v6.6c-.6.3-1 1-1 1.7 0 1.1.9 2 2 2a2 2 0 0 0 1.5-3.4l.6-.4.9-.2c1 0 2-.4 2.8-1.3.8-.7 1.1-2 1.2-3 .6-.3 1-1 1-1.7zM2 1.8c.7 0 1.2.6 1.2 1.2S2.6 4.2 2 4.2.8 3.6.8 3 1.4 1.8 2 1.8zm0 12.4c-.7 0-1.2-.5-1.2-1.2 0-.6.6-1.2 1.2-1.2s1.2.6 1.2 1.2c0 .7-.6 1.2-1.2 1.2zm6-8c-.7 0-1.2-.5-1.2-1.2 0-.6.5-1.2 1.2-1.2s1.2.6 1.2 1.2c0 .7-.5 1.2-1.2 1.2z' fill='/*[[branch-color]]*/'/%3E%3C/svg%3E"); 79 | } 80 | .news .gollum:after { 81 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M2 3H6V4H2V3ZM2 6H6V5H2V6ZM2 8H6V7H2V8ZM13 3H9V4H13V3ZM13 5H9V6H13V5ZM13 7H9V8H13V7ZM15 1V10C15 10.55 14.55 11 14 11H8.5L7.5 12L6.5 11H1C0.45 11 0 10.55 0 10V1C0 0.45 0.45 0 1 0H6.5L7.5 1L8.5 0H14C14.55 0 15 0.45 15 1ZM7 1.5L6.5 1H1V10H7V1.5ZM14 1H8.5L8 1.5V10H14V1Z' transform='translate(1 2)' fill='/*[[wiki-color]]*/'/%3E%3C/svg%3E"); 82 | } 83 | .news .issues_closed:after { 84 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 9H8V11H6V9ZM8 3H6V8H8V3ZM9.5 4.5L8.5 5.5L11 8L15 3.5L14 2.5L11 6L9.5 4.5ZM7 12.7C3.86 12.7 1.3 10.14 1.3 7C1.3 3.86 3.86 1.3 7 1.3C8.83 1.3 10.45 2.18 11.5 3.5L12.42 2.58C11.14 1 9.19 0 7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7L12.48 8.52C11.82 10.93 9.62 12.71 7 12.71V12.7Z' transform='translate(1 1)' fill='/*[[closed-color]]*/'/%3E%3C/svg%3E"); 85 | } 86 | .news .issues_opened:after { 87 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 16' width='14' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 10.14 10.14 12.7 7 12.7C3.86 12.7 1.3 10.14 1.3 7C1.3 3.86 3.86 1.3 7 1.3ZM7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7C14 3.14 10.86 0 7 0ZM8 3H6V8H8V3ZM8 9H6V11H8V9Z' transform='translate(0 1)' fill='/*[[opened-color]]*/'/%3E%3C/svg%3E"); 88 | } 89 | .news .issues_reopened:after { 90 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 16' width='14' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8 8H6V3H8V8ZM6 11H8V9H6V11ZM12.33 9H10L11.5 10.5C10.45 11.83 8.83 12.7 7 12.7C3.86 12.7 1.3 10.14 1.3 7C1.3 6.66 1.33 6.33 1.39 6H0.08C0.03 6.33 0 6.66 0 7C0 10.86 3.14 14 7 14C9.19 14 11.13 12.98 12.41 11.41L14 13V9H12.33ZM1.67 5H4L2.5 3.5C3.55 2.17 5.17 1.3 7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 7.34 12.67 7.67 12.61 8H13.92C13.97 7.67 14 7.34 14 7C14 3.14 10.86 0 7 0C4.81 0 2.87 1.02 1.59 2.59L0 1V5H1.67Z' transform='translate(0 1)' fill='/*[[reopened-color]]*/'/%3E%3C/svg%3E"); 91 | } 92 | .news .public:after, .news .repo:after { 93 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 16' width='12' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4 9H3V8H4V9ZM4 6H3V7H4V6ZM4 4H3V5H4V4ZM4 2H3V3H4V2ZM12 1V13C12 13.55 11.55 14 11 14H6V16L4.5 14.5L3 16V14H1C0.45 14 0 13.55 0 13V1C0 0.45 0.45 0 1 0H11C11.55 0 12 0.45 12 1ZM11 11H1V13H3V12H6V13H11V11ZM11 1H2V10H11V1Z' fill='/*[[repo-color]]*/'/%3E%3C/svg%3E"); 94 | } 95 | .news .push:after { 96 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 16' width='12' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4 3H3V2H4V3ZM3 5H4V4H3V5ZM7 5L4 9H6V16H8V9H10L7 5ZM11 0H1C0.45 0 0 0.45 0 1V13C0 13.55 0.45 14 1 14H5V13H1V11H5V10H2V1H11.02L11 10H9V11H11V13H9V14H11C11.55 14 12 13.55 12 13V1C12 0.45 11.55 0 11 0Z' fill='/*[[push-color]]*/'/%3E%3C/svg%3E"); 97 | } 98 | .news .tag:after { 99 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 16' width='15' height='16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6.73 0.73C6.26 0.26 5.62 0 4.96 0H2.5C1.13 0 0 1.13 0 2.5V4.97C0 5.63 0.27 6.27 0.73 6.74L6.79 12.8C7.18 13.19 7.81 13.19 8.2 12.8L12.79 8.21C13.18 7.82 13.18 7.19 12.79 6.8L6.73 0.73ZM1.38 6.09C1.07 5.79 0.910004 5.39 0.910004 4.96V2.5C0.910004 1.62 1.63 0.910004 2.5 0.910004H4.97C5.39 0.910004 5.8 1.07 6.1 1.38L12.24 7.51L7.51 12.24L1.38 6.09ZM2.01 2H4.01V4H2V2H2.01Z' transform='translate(1 1)' fill='/*[[tag-color]]*/'/%3E%3C/svg%3E"); 100 | } 101 | .news .watch_started:after { 102 | background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 16' width='14' height='16' fill='/*[[star-color]]*/'%3E%3Cpath fill-rule='evenodd' d='M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z'%3E%3C/path%3E%3C/svg%3E"); 103 | } 104 | } 105 | --------------------------------------------------------------------------------