有没有办法将 Stylebot 样式导出为 Chrome 中的 Stylish 格式?

有没有办法将 Stylebot 样式导出为 Chrome 中的 Stylish 格式?

整个故事是这样的:我讨厌 Chrome 的白色背景,当我打开新选项卡或点击链接时,屏幕会变白,让我的眼睛很不舒服。Stylebot 扩展似乎不允许在新选项卡或加载白屏时更改颜色。

当我在 Firefox 上安装完整的深色主题(那些旧主题)时,它不会出现这个问题。所以现在我想抛弃 Chrome,开始使用 Firefox。但众所周知,Stylebot 没有 Firefox 版本。

我还没有找到像 Stylebot 一样好的 Firefox 插件,而且接近 Stylebot 的插件也有缺陷,并且会搞乱网站。

所以我考虑将 Chrome Stylebot 中的预设导出为 Stylish 扩展样式。我不知道这是否可行,而且我真的对任何类型的编码都一无所知。如果这能奏效,那就太好了!

我放弃了尝试更改 Chrome 的白色背景,因为这太麻烦了。有些更改对白色加载屏幕有效,但对新标签页无效。甚至将新标签更改为任何其他 URL 的扩展程序也不起作用。它总是在完成加载之前显示白屏。

那么...有人能帮帮我吗?

答案1

我自己也在研究这个问题。因此,Stylish 导出/导入的格式如下 - 其中包括来自 userstyles.org 的两个示例以及我快速制作的一个示例:

[
  {
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "myjetbrains.com"
        ],
        "regexps": [],
        "code": "body.global { /*etc */}"
      }
    ],
    "url": "http://userstyles.org/styles/133921",
    "updateUrl": "https://userstyles.org/styles/chrome/133921.json",
    "md5Url": "https://update.userstyles.org/133921.md5",
    "originalMd5": "7963f3cfdce94512ebd74a0098a56b38",
    "name": "YouTrack Dark TV Style",
    "method": "saveStyle",
    "enabled": true,
    "id": 1
  },
  {
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [],
        "regexps": [],
        "code": "/* 4chan - Midnight Caek */\r\n@namespace url(http://www.w3.org/1999/xhtml);"
      },
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "4chan.org"
        ],
        "regexps": [],
        "code": "/* hides Captcha table row */\r\n\r\n/* body background and text color */\r\nhtml, body { /*etc */}"
      },
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "dis.4chan.org"
        ],
        "regexps": [],
        "code": "body { /*etc */}"
      }
    ],
    "url": "http://userstyles.org/styles/65821",
    "updateUrl": "https://userstyles.org/styles/chrome/65821.json?ik-passtoggle=ik-No",
    "md5Url": "https://update.userstyles.org/65821.md5",
    "originalMd5": "d34520a7525de8e0c174d466697c50db",
    "name": "4chan - Midnight Caek",
    "method": "saveStyle",
    "enabled": true,
    "id": 2
  },
  {
    "method": "saveStyle",
    "name": "stackoverflow improvement",
    "enabled": true,
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "superuser.com"
        ],
        "regexps": [],
        "code": "body{background:#ddd;}\n"
      }
    ],
    "updateUrl": null,
    "md5Url": null,
    "url": null,
    "originalMd5": null,
    "id": 3
  }
]

Stylebot 允许以以下 JSON 格式备份和导出其样式:

{
  "abcnews.go.com":{
    "_enabled":true,
    "_rules":{
      "div.t_callout":{
        "display":"none"
      }
    }
  },
  "boingboing.net":{
    "_enabled":true,
    "_rules":{
      "#next-post-thumbnails":{
        "display":"none"
      }
    }
  }
}

编写一些代码来循环遍历 Stylebot 返回的 JSON 并以 Stylish 格式为其生成 css 应该非常简单。我实际上会在某个时候解决这个问题,如果我能做到的话,我会发布我的东西。

答案2

警告:

在将转换后的 json 导入到styling/stylus 之前,请务必先备份现有设置。我仅在导出的设置上进行了验证,它可能包含错误!


我刚刚编写了一个脚本,将 stylebot json 转换为 fashion/stylus json。

要使用该脚本,您需要安装 Python 3。假设您已将脚本下载为s2s.py,请使用以下命令运行该脚本:

python3 s2s.py stylebot.json -o stylus.json -e utf-8

-o和参数-e是可选的。

GitHub 要点

我知道这是很丑陋的代码但是谁在乎呢:P

import argparse
import json


def stylebot_to_stylus(source='sb.json', target='stylus.json', encoding='utf-8'):

    with open(source, encoding=encoding) as f:
        data = json.load(f)

    result_list = []
    item_id = 1
    for domain_name in data:
        item_dict = {}
        item_dict["id"] = item_id
        item_id += 1
        item_dict["enabled"] = data[domain_name]['_enabled']
        item_dict["name"] = domain_name

        # only one section for each domain (group)
        sections = []
        section0 = {}
        section0['urls'] = []
        section0['domains'] = []

        # add the domain or the group of domains
        if ',' in domain_name:
            for addr in domain_name.split(sep=','):
                section0['domains'].append(addr.strip())
        else:
            section0['domains'].append(domain_name)

        css_rule = ''

        # construct a css rule for each domain (group)
        for selector in data[domain_name]['_rules']:
            css_rule += selector + '{'
            for attr in data[domain_name]['_rules'][selector]:
                css_rule += attr + ':'
                css_rule += data[domain_name]['_rules'][selector][attr] + ';'
            css_rule += '}'
        section0['code'] = css_rule

        sections.append(section0)
        item_dict['sections'] = sections

        result_list.append(item_dict)

    with open(target, "w", encoding=encoding) as of:
        of.write(json.dumps(result_list))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("source",
                        help="input json file, exported from Stylebot[Lite]")
    parser.add_argument('-o', '--output',
                        help='output json file, can be imported to Stylus')
    parser.add_argument('-e', '--encoding',
                        help='output json file, can be imported to Stylus')

    args = parser.parse_args()
    src = args.source
    out = args.output if args.output else 'stylus_output.json'
    enc = args.encoding if args.encoding else 'utf-8'

    stylebot_to_stylus(src, out, enc)

相关内容