Giter VIP home page Giter VIP logo

darkreader's Introduction

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some website is already dark (has all pages dark by default), you can add it to dark-sites.config file (please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Please note, that merged changes to these files are automatically delivered to all users within 15 minutes. Config syncing was disabled, cause GitHub team doesn't allow using GitHub as a CDN. Storing these files and making requests to other resources will be expensive and look suspicious.

Using Dev Tools

Dev Tools should be used to fix minor issues on a web page (like dark icon on dark background, removing bright background, adding white background to transparent image etc.). If page looks partially dark and bright in Dynamic mode, it should be considered as a bug. For Filter mode it is a common practice to invert already dark page parts.

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
dynamic-theme-fixes.config
================================

example.com

INVERT
.icon

CSS
.wrong-element-colors {
    background-color: ${white} !important;
    color: ${black} !important;
}

  • INVERT rule inverts specified elements. For Dynamic mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements).
  • CSS rule adds custom CSS to a web page. !important keyword should be specified for each CSS property to prevent overrides by other stylesheets. Dynamic mode supports ${COLOR} template, where COLOR is a color value before the inversion (white will become black in dark mode).
  • Special notice for Filter and Filter+ config. It works by inverting the whole web page and reverting necessary parts (images, videos etc.) back, listed in INVERT section. If inverted element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element and forces black background.
inversion-fixes.config
================================

example.com

INVERT
.icon
.button
#player

NO INVERT
#player *

REMOVE BG
.bg-photo

CSS
.overlay {
    background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • Check how it looks both in Light and Dark mode.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the Node.js LTS. Install development dependencies by running npm install in project root folder. Then execute npm run debug.

Chrome

Open the chrome://extensions page. Disable the official Dark Reader version. Enable the Developer mode. Click Load unpacked extension button, navigate to project's debug/ folder.

Firefox

Open about:addons page. Disable the official Dark Reader version. Open about:debugging#addons page. Click Load Temporary Add-on button, open debug-firefox/manifest.json file.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded manually on the extensions page.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Run tests by executing npm test.

Submit a pull request, wait for review.

Building for use

You can install the extension from a file. Install Node.js LTS. Download the source code (or checkout from git). Open terminal in root folder and run:

  • npm install
  • npm run release

This will generate build.zip for use in Chromium browsers and build-firefox.xpi for use in Firefox.

Using for a website

You can use Dark Reader to enable dark mode on your website. Install the package from NPM (npm install darkreader) or download from CDN like https://unpkg.com/darkreader. Then use the following API

DarkReader.enable({
    brightness: 100,
    contrast: 90,
    sepia: 10
});

DarkReader.disable();

... or if you are using ES modules

import {
    enable as enableDarkMode,
    disable as disableDarkMode,
} from 'darkreader';

enableDarkMode({
    brightness: 100,
    contrast: 90,
    sepia: 10,
});

disableDarkMode();

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

darkreader's People

Contributors

alexalekseyenko avatar alexanderby avatar andrew-j-larson avatar banonotit avatar bgiesing avatar chilledfrogs avatar dotiful avatar eddex avatar highom avatar joaocv3 avatar joelbalmer avatar jordanpurinton avatar jtraub avatar jwjung avatar locofocos avatar lucasfernog avatar nikolay avatar odcat avatar ondrejsika avatar opssemnik avatar patontheback avatar progaros avatar prstorero avatar rixinsc avatar senpl avatar sicu avatar svemal avatar thinhhb avatar yochananmarqos avatar zsergua avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.