1. // ==UserScript==
    2. // @name 语雀夜间模式
    3. // @namespace https://greasyfork.org/users/670174
    4. // @version 0.2.5
    5. // @description 让语雀的编辑模式显示成夜间模式的配色,保护眼睛。阅读模式因为是编译出来的样式表,有失效的可能。
    6. // @author CWBeta
    7. // @icon https://www.google.com/s2/favicons?domain=yuque.com
    8. // @include *yuque.com*
    9. // @grant none
    10. // @license MIT
    11. // ==/UserScript==
    12. (function() {
    13. 'use strict';
    14. console.log("【语雀夜间模式】运行中!")
    15. // 可以用户自定义的颜色
    16. var MAIN_BG_COLOR = "#333333"; //背景色
    17. var TOOLBAR_BG_COLOR = "#242424"; //顶部工具栏背景色
    18. var TOOLBAR_BORDER_COLOR = "#000000"; //顶部工具栏描边色
    19. var FONT_DEFAULT_COLOR = "#ffffff"; //默认正文颜色
    20. var LINK_COLOR = "#39C5BB"; // 正文链接颜色
    21. var LIST_COLOR = "#66CCFF"; // 列表记号颜色
    22. var FONT_SIDEBAR_COLOR = "#727272"; //侧面大纲正文颜色
    23. var FONT_SIDEBAR_HOVER_COLOR = "#999999"; //侧面大纲鼠标悬停颜色
    24. var SCROLLBAR_BG_COLOR = "#262626"; //大纲滚动条背景色
    25. /**
    26. * 16进制色值获取反色设置方法
    27. * @param {String} oldColor 为16进制色值的字符串(例:'#000000')
    28. * @return {String} 返回反色的色值(例:'#ffffff')
    29. */
    30. function ReverseColor(oldColor)
    31. {
    32. oldColor = '0x' + oldColor.replace(/#/g, '');
    33. let str = '000000' + (0xFFFFFF - oldColor).toString(16);
    34. return '#'+ str.substring(str.length - 6, str.length);
    35. }
    36. function Awake()
    37. {
    38. var style = document.createElement("style");
    39. style.type = "text/css";
    40. var cssString = ".main-wrapper #main, .ne-editor-body,.ne-editor-extra-box,.ne-editor-wrap-box,.ant-input {background-color: "+MAIN_BG_COLOR+" !important;}"+
    41. ".main-wrapper #article-title, ne-text{color:"+FONT_DEFAULT_COLOR+";}"+
    42. ".ant-input{color:"+FONT_DEFAULT_COLOR+" !important;}"+
    43. ".ne-ui{filter: invert(100%); background-color: "+ReverseColor(TOOLBAR_BG_COLOR)+" !important;}"+
    44. ".ne-ui .ne-ui-random-tip{color:"+ReverseColor(FONT_DEFAULT_COLOR)+" !important;}"+
    45. ".ne-ui .ne-ui-toolbar-insert-card,.ne-ui .ant-dropdown,.ne-embed-icon-t-font-color #矩形,.ne-embed-icon-t-bg-color path[fill], .lark-editor-collab-users, #lake-doc-publish-button{filter: invert(100%);}"+
    46. ".lark-editor-header{filter: invert(100%);background-color: "+ReverseColor(TOOLBAR_BG_COLOR)+";border-color:"+ReverseColor(TOOLBAR_BORDER_COLOR)+" !important;}"+
    47. ".lark-editor-header .lark-editor-header-back{border-color: "+ReverseColor(TOOLBAR_BORDER_COLOR)+" !important;}"+
    48. ".ne-viewer-toc-sidebar,.ne-toc-sidebar{background-color: "+MAIN_BG_COLOR+" !important;}"+
    49. ".ne-toc-normal-view .ne-toc-content:after{background: "+SCROLLBAR_BG_COLOR+" !important;}"+
    50. ".ne-toc-normal-view .ne-toc-item a{color: "+FONT_SIDEBAR_COLOR+" !important;}"+
    51. ".ne-toc-sidebar-hover .ne-toc-view .ne-toc-item a{color: "+FONT_SIDEBAR_HOVER_COLOR+" !important;}"+
    52. ".ne-toc-view-inner::-webkit-scrollbar{display:none !important;}"+
    53. ".ne-viewer .ne-viewer-body,.ne-engine{--link-color:"+LINK_COLOR+" !important;}"+
    54. "ne-oli-i, ne-uli-i{color:"+LIST_COLOR+" !important;}"+
    55. ".header{filter: invert(100%); background-color: "+ReverseColor(TOOLBAR_BG_COLOR)+";}"+
    56. ".header .ant-btn-primary,.header img,.header .HeadNewButton-module_header-add-btn_nJ9ub, .header .ant-popover{filter: invert(100%);}"+
    57. ".ReaderLayout-module_asidePinned_owRmW .ReaderLayout-module_crumb_wF-5C{filter: invert(100%); background-color: "+ReverseColor(TOOLBAR_BG_COLOR)+";}"+
    58. ".ReaderLayout-module_asidePinned_owRmW .ReaderLayout-module_crumb_wF-5C img{filter: invert(100%);}"+
    59. ".lake-board-canvas{background-color: "+MAIN_BG_COLOR+";}"+
    60. ".LakeBoardEditor-module_wrap_zK70p{border-color: "+TOOLBAR_BORDER_COLOR+" !important;}"+
    61. "foreignObject div{color:"+FONT_DEFAULT_COLOR+" !important;}"+
    62. ".ne-engine [data-placeholder]::before {color:"+FONT_SIDEBAR_COLOR+" !important;}"+
    63. "}";
    64. try
    65. {
    66. style.appendChild(document.createTextNode(cssString));
    67. }
    68. catch(ex)
    69. {
    70. style.styleSheet.cssText = cssString;//针对IE
    71. }
    72. var head = document.getElementsByTagName("head")[0];
    73. head.appendChild(style);
    74. }
    75. Awake();
    76. })();