Greasyfork Night Mode

A sleek and modern dark theme for Greasyfork, designed for optimal readability and a visually appealing experience.

Verze ze dne 14. 08. 2024. Zobrazit nejnovější verzi.

// ==UserScript==
// @name           Greasyfork Night Mode
// @name:en        Greasyfork Night Mode
// @name:vi        Chế độ ban đêm Greasyfork
// @name:zh-CN     Greasyfork 夜间模式
// @name:zh-TW     Greasyfork 夜間模式
// @name:ja        Greasyfork ナイトモード
// @name:ko        Greasyfork 야간 모드
// @name:es        Modo Nocturno Greasyfork
// @name:ru        Ночной режим Greasyfork
// @name:id        Mode Malam Greasyfork
// @name:hi        Greasyfork रात्रि मोड
// @namespace      http://tampermonkey.net/
// @version        1.2.5
// @description    A sleek and modern dark theme for Greasyfork, designed for optimal readability and a visually appealing experience.
// @description:en A sleek and modern dark theme for Greasyfork, designed for optimal readability and a visually appealing experience.
// @description:vi Giao diện tối hiện đại cho Greasyfork, được thiết kế để dễ đọc và trải nghiệm đẹp mắt.
// @description:zh-CN 为 Greasyfork 打造的时尚现代暗黑主题,旨在提供最佳可读性和视觉吸引力。
// @description:zh-TW 為 Greasyfork 打造的時尚現代夜間模式,旨在提供最佳可讀性和視覺吸引力。
// @description:ja Greasyfork の洗練されたモダンなダークテーマ。読みやすさと視覚的な魅力を最適化しました。
// @description:ko Greasyfork를 위한 세련되고 현대적인 다크 테마로, 최적의 가독성과 시각적으로 매력적인 경험을 제공하도록 설계되었습니다.
// @description:es Un tema oscuro elegante y moderno para Greasyfork, diseñado para una legibilidad óptima y una experiencia visualmente atractiva.
// @description:ru Изящная и современная темная тема для Greasyfork, разработанная для оптимальной читаемости и визуально привлекательного восприятия.
// @description:id Tema gelap yang ramping dan modern untuk Greasyfork, dirancang untuk keterbacaan optimal dan pengalaman yang menarik secara visual.
// @description:hi Greasyfork के लिए एक आकर्षक और आधुनिक डार्क थीम, जिसे बेहतरीन पठनीयता और एक आकर्षक दृश्य अनुभव के लिए डिज़ाइन किया गया है।
// @author         Jann
// @license        MIT
// @icon           https://greasyfork.org/vite/assets/blacklogo96-CxYTSM_T.png
// @match          *greasyfork.org/*
// @match          *sleazyfork.org/*
// @grant          GM_addStyle
// ==/UserScript==

(function() {
    'use strict';

    // Variables (you can customize these)
    const headerBkg = 'rgb(29, 32, 37)';
    const dark1 = 'rgb(29, 32, 37)';
    const dark2 = 'rgb(40, 44, 52)';
    const dark3 = 'rgb(37, 41, 49)';
    const dark4 = 'rgb(33, 36, 43)';
    const blue1 = 'rgb(82, 139, 255)';
    const blue2 = 'rgb(97, 175, 239)';
    const bluePool = 'rgb(86, 182, 194)';
    const lavender = 'rgb(198, 120, 221)';
    const green = 'rgb(152, 195, 121)';
    const pink = 'rgb(224, 108, 117)';
    const lightBrown = 'rgb(209, 154, 102)';
    const red = 'rgb(190, 80, 70)';
    const yellow = 'rgb(235, 215, 17)';
    const lightYellow = 'rgb(229, 192, 123)';
    const blueIce = 'rgb(171, 178, 191)';
    const lightGray = 'rgb(204, 204, 204)';
    const lightGreen = 'rgba(130, 255, 130, 0.6)';
    const lightRed = 'rgba(255, 130, 130, 0.6)';
    const translucent = 'rgba(255, 255, 255, .3)';
    const black = 'rgba(0, 0, 0, 1)';
    const dBorderRadius = '5px 0 100px 1px';
    const wrapCode = false; // Set to true to wrap code in container
    const modHeaders = true; // Set to true to apply to headers
    const invertBkgHPP = false; // Set to true to invert background color for Greasyfork++ header
    const modScrollbars = true; // Set to true to apply to scrollbars

    // CSS styles
    const css = `
    :root {
      --dark-1: ${dark1} !important;
      --dark-2: ${dark2} !important;
      --dark-3: ${dark3} !important;
      --dark-4: ${dark4} !important;
      --blue-1: ${blue1} !important;
      --blue-2: ${blue2} !important;
      --blue-pool: ${bluePool} !important;
      --lavender: ${lavender} !important;
      --green: ${green} !important;
      --pink:  ${pink} !important;
      --light-brown: ${lightBrown} !important;
      --red: ${red} !important;
      --yellow: ${yellow} !important;
      --light-yellow: ${lightYellow} !important;
      --blue-ice: ${blueIce} !important;
      --light-gray: ${lightGray} !important;
      --light-green: ${lightGreen} !important;
      --light-red: ${lightRed} !important;
      --translucent: ${translucent} !important;
      --black: ${black} !important;
      --default-border-radius: ${dBorderRadius} !important;
    }
    .bradius {
      border-radius: var(--default-border-radius);
    }
    body {
      background-color: var(--dark-3) !important;
      color: var(--light-gray) !important;
    }
    #main-header,
    #main-header a,
    #main-header a:visited,
    #main-header a:active {
      color: var(--light-gray) !important;
    }
    nav nav {
      background-color: var(--dark-3) !important;
      border: 1px solid var(--dark-2) !important;
      box-shadow: 0 0 5px var(--dark-2) !important;
    }
    a:not(.install-link, .install-help-link) {
      color: var(--pink) !important;
    }
    #main-header {
      ${modHeaders ? 'background-image: none !important;' : ''}
      background-color: ${headerBkg} !important;
    }
    .script-list,
    .user-list,
    .text-content,
    .discussion-list,
    .list-option-group ul,
    #script-info,
    .discussion-read,
    #discussion-locale{
      ${modHeaders ? 'background-image: unset !important;' : ''}
      background-color: var(--dark-1) !important;
      box-shadow: 0 0 5px var(--dark-2) !important;
      border: 1px solid var(--dark-2) !important;
      border-radius: var(--default-border-radius) !important;
    }
    .block-button {
      background-color: var(--dark-2) !important;
      border: 1px solid var(--dark-3) !important;
      color: var(--light-gray) !important;
    }
    .user-content,
    #script_version_code {
      background-image: unset !important;
      background-color: var(--dark-1) !important;
      border-color: var(--dark-2) !important;
    }
    .code-container {
      border-color: var(--dark-3) !important;
      border-style: solid !important;
    }
    pre.prettyprint {
      border: none !important;
    }
    #script_version_code {
      color: var(--light-gray) !important;
    }
    .default-input,
    .sidebar-search input[type="search"],
    .home-search input[type="search"],
    .list-option-button,
    input[type="search"],
    #language-selector-locale,
    form.new_user input[type="text"],
    form.new_user input[type="email"],
    form.new_user input[type="password"],
    #favorite-groups {
      background-color: var(--dark-4) !important;
      border: 1px solid var(--dark-2) !important;
      color: var(--blue-ice) !important;
      border-radius: var(--default-border-radius) !important;
    }
    .notice {
      background-color: var(--dark-1);
      border-left: 6px solid var(--blue-pool);
    }
    form.external-login-form,
    form.new_user {
      background-color: var(--dark-3);
      border: 1px solid var(--dark-2);
    }
    form.new_user input[type="submit"] {
      background-color: var(--blue-pool);
      color: #fff;
      background-image: unset;
    }
    .list-option-button:hover,
    .list-option-button:focus {
      background-image: unset !important;
      background-color: var(--dark-2) !important;
    }
    .sidebar-search input[type="search"]:focus-visible,
    .home-search input[type="search"]:focus-visible {
      background-color: var(--dark-3) !important;
      border: 1px solid var(--blue-pool) !important;
      outline: none !important;
    }
    input[type="submit"] {
      background-color: var(--dark-3) !important;
      color: var(--light-gray) !important;
      border: 1px solid var(--dark-2) !important;
    }
    input[type="submit"]:hover {
      background-color: var(--dark-2) !important;
    }
    .sidebar-search input[type="search"] {
      font-size: 14px !important;
    }
    .list-option-group ul {
      background-color: var(--dark-1) !important;
    }
    .list-option-group .list-current,
    .tabs .current {
      border-color: var(--red) !important;
      background-image: unset !important;
      background-color: var(--dark-2) !important;
    }
    .list-option-group a:hover,
    .list-option-group a:focus {
      background-image: unset !important;
      background-color: var(--dark-2) !important;
      box-shadow: unset !important;
    }
    input[type="checkbox"] {
      accent-color: var(--blue-1) !important;
    }
    input[type="radio"] {
      accent-color: var(--blue-1) !important;
    }
    .script-list li:not(.ad-entry) {
      border: 1px solid var(--dark-3)
    }
    .pagination > *,
    .script-list + .pagination > *,
    .user-list + .pagination > * {
      background-color: var(--dark-2) !important;
    }
    .pagination .current,
    .pagination .gap {
      background-color: transparent !important;
    }
    a.next_page,
    .pagination a:not(.current) {
      color: var(--red) !important;
    }
    .previewable textarea,
    #discussion_comments_attributes_0_text {
      background-color: var(--dark-2) !important;
      border: 1px solid var(--dark-3) !important;
      color: var(--light-gray) !important;
    }
    #discussion_comments_attributes_0_text:focus-visible {
      outline: none !important;
      border: 1px solid var(--dark-3) !important;
    }
    .rating-icon {
      background-color: var(--dark-3) !important;
    }
    .rating-icon-bad,
    .bad-rating-count {
      color: var(--red) !important;
      border-color: currentColor !important;
    }
    .rating-icon-ok,
    .ok-rating-count {
      color: var(--yellow) !important;
      border-color: currentColor !important;
    }
    .rating-icon-good,
    .good-rating-count {
      color: var(--green) !important;
      border-color: currentColor !important;
    }
    pre:not(pre.prettyprint),
    code {
      border: 1px solid var(--dark-2) !important;
    }
    code {
      background-color: var(--dark-1) !important;
    }
    li.L1,
    li.L3,
    li.L5,
    li.L7,
    li.L9 {
      background-color: var(--dark-3) !important;
    }
    .diff li.unchanged:nth-child(odd) {
      background-color: var(--dark-3) !important;
    }
    .diff ul {
      background-color: var(--dark-1) !important;
    }
    .diff li.del {
      background: var(--light-red) !important;
      color: rgb(30, 0, 0) !important;
    }
    .diff li.ins {
      background: var(--light-green) !important;
      color: rgb(0, 30, 5) !important;
    }
    .diff li:hover {
      background: unset;
    }
    .com {
      color: var(--lavender) !important;
    }
    .clo,
    .opn,
    .pun {
      color: var(--yellow) !important;
    }
    .kwd {
      color: var(--blue-2) !important;
    }
    .str {
      color: var(--green) !important;
    }
    .pln {
      color: var(--light-yellow) !important;
    }
    .lit {
      color: var(--pink) !important;
    }
    .typ {
      color: var(--blue-pool) !important;
    }
    ol.linenums {
      padding-left: 55px !important
    }
    ${modScrollbars ? `
      .code-container, select {
        &::-webkit-scrollbar {
          width: 8px !important;
          height: 8px !important;
        }
      }
      ::-webkit-scrollbar-track {
        background: alpha(black, .2) !important;
      }
      ::-webkit-scrollbar-thumb {
        background: alpha(var(--translucent), .2) !important;
        border-radius: var(--default-border-radius) !important;
      }
      ::-webkit-scrollbar-thumb:hover {
        background: alpha(var(--translucent), .3) !important;
      }
      ::-webkit-scrollbar-corner {
        background: alpha(black, .2) !important;
      }
      ::-webkit-scrollbar-button {
        display: none !important;
      }
    ` : ''}
    .validation-errors {
      border-color: var(--light-yellow) !important;
      background-color: var(--dark-3) !important;
    }
    html:has(body#greasyfork-plus) {
      background: var(--dark-1) !important;
      body, #greasyfork-plus_wrapper {
        background: var(--dark-1) !important;
      }
      #greasyfork-plus_wrapper {
        border: none !important;
      }
      button[id^="greasyfork-plus"] {
        background: var(--dark-4) !important;
        border: 1px solid var(--dark-2) !important;
        color: var(--blue-ice) !important;
        border-radius: var(--default-border-radius);
      }
      input, textarea {
        margin-block: 5px !important;
        background-color: var(--dark-4) !important;
        border: 1px solid var(--dark-2) !important;
        color: var(--blue-ice) !important;
        border-radius: var(--default-border-radius) !important;
      }
      .section_header.center {
        background-image: unset !important;
        background-color: var(--dark-3) !important;
        border-radius: var(--default-border-radius);
      }
      b {
        color: var(--lavender) !important;
      }
    }
    .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item {
      display: inline-block !important;
      width: 100% !important;
      min-width: 189px !important;
      max-width: 189px !important;
    }
    .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item > relative-time:before {
      content: attr(datetime) !important;
      clip-path: inset(0px 125px 0px 0px) !important;
      position: absolute !important;
      display: inline-block !important;
      height: 100% !important;
      min-height: 20px !important;
      max-height: 20px !important;
      line-height: 20px !important;
      width: 201px !important;
      margin: 1px 0 0 2px !important;
      padding: 0 2px 0 0 !important;
      letter-spacing: 1.4px !important;
      font-size: 12px !important;
      visibility: visible !important;
      opacity: 1 !important;
      text-align: left !important;
      color: red !important;
      background: #111 !important;
    }
    @supports (contain:paint) {
      .post-discussion .script-discussion-list .discussion-list-container .discussion-meta > .discussion-meta-item:first-of-type > relative-time:before,
      .post-discussion .script-discussion-list .discussion-list-container .discussion-meta > .discussion-meta-item:last-of-type .discussion-meta-item> relative-time:before,
      #script-meta dd.script-show-updated-date > span relative-time:before,
      #script-meta dd.script-show-created-date > span relative-time:before,
      .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item + .comment-meta-item > relative-time:before,
      .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item + .comment-meta-item > relative-time:after,
      .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item > relative-time:before {
        display: none !important;
      }
      .comment-meta-item.comment-meta-item-main + .comment-meta-item + .comment-meta-item > relative-time:after {
        content: attr(datetime)!important;
        clip-path: inset(0px 98px 0px 114px) !important;
        display: none !important;
      }
    }
    `;

    // Apply the CSS
    GM_addStyle(css);
   })();