From e68ddb6b8ecbce5889ecea6ea3934351ee4466d6 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 30 Jan 2023 16:19:16 +0800 Subject: [PATCH] Modify move to new documentation --- CONTRIBUTING.md | 67 -- README.md | 87 +- docs/index.html | 211 ++++ docs/resources/css/github-markdown-dark.css | 941 ++++++++++++++++ docs/resources/css/github-markdown-light.css | 940 ++++++++++++++++ docs/resources/css/github-markdown.css | 1036 ++++++++++++++++++ docs/resources/css/render.css | 51 + docs/resources/js/markdown-contents.js | 31 + docs/resources/js/markdown-page-contents.js | 98 ++ docs/resources/js/render.js | 226 ++++ 10 files changed, 3538 insertions(+), 150 deletions(-) delete mode 100644 CONTRIBUTING.md create mode 100644 docs/index.html create mode 100644 docs/resources/css/github-markdown-dark.css create mode 100644 docs/resources/css/github-markdown-light.css create mode 100644 docs/resources/css/github-markdown.css create mode 100644 docs/resources/css/render.css create mode 100644 docs/resources/js/markdown-contents.js create mode 100644 docs/resources/js/markdown-page-contents.js create mode 100644 docs/resources/js/render.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 371f107..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,67 +0,0 @@ -# 开始贡献 - -欢迎为通知图标优化名单贡献宝贵资源!
- -## 分支规定 - -不管是直接 Push 代码还是提交 Pull Request,都必须使 `commit` 指向 `main` 分支。 - -## 代码格式规范 - -- 全部提交代码必须进行格式化,未经格式化的代码将二次审查进行修改,格式混乱的将拒绝合并提交请求 -- 提交请求请在 `commit` 中标明修改、增加的 APP 名称以及图标用途,否则不予合并代码 -- 贡献者昵称如有多个请使用**顿号**分隔 - -## 贡献方法 - -- 在下方的 JSON 文件中添加新的 APP 通知图标适配条目 -- APP 对应了每个定制系统共同使用的图标,OS 中的图标只会分发到指定的定制系统生效 -- [进入 APP 适配文件](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/APP/NotifyIconsSupportConfig.json) -- [进入 OS 适配目录](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/OS) -- 使用灰度位图转 Base64 来得到 Base64 的位图数据字符串 -- [BitmapToBase64](https://github.com/fankes/BitmapToBase64) -- 你也可以使用在线工具来完成,注意删除后方生成的 `data:image/png;base64,` -- [Base64 图片在线转换](https://tool.chinaz.com/tools/imgtobase) -- 新增条目的模板如下所示 - -```json -{ - "appName": "", // APP 名称 - "packageName": "", // APP 包名 - "iconBitmap": "", // 位图数据 Base64 字符串 - "iconColor": "#ff232323", // 通知栏中显示的图标颜色 - 不设置使用系统默认颜色 (不设置颜色可删除此项) - "contributorName": "", // 贡献者昵称 - "isEnabled": true, // 是否默认启用替换彩色图标 - 关闭后将全部停止替换 - "isEnabledAll": false // 是否默认启用替换全部图标 -} -``` - -> 特别注意 - -- 如果开启了默认启用替换全部图标,APP 的所有通知图标都将被强制替换为当前设置的图标,这是很危险的行为,我们默认只应该替换彩色的通知图标,如果一定有此需求(例如不启用此选项通知图标是黑白块情况)请**务必在 PR 中注明**,否则将不与合并代码或会被管理员重新设置为 **false** - -> 其它要求 - -- `iconColor` 中的颜色代码一律使用小写字母且格式必须为 #ff······ (· 为数值) **不要对颜色设置透明度** -- 图标大小建议保持在 50x50,最高不得超过 72x72 -- 提交前建议优化图标文件体积,Windows 平台可以使用 [pinga](https://css-ig.net/pinga) -- 图标必须可被调试工具识别为灰度图标并检查通过,否则不予合并代码,详情请见下方 -- 提交时请将后方的注释删除,否则不予合并代码 - -> 审查要求 - -- PR 时请注明 PR 标题,标题为 Update XXX 的会被当做 `spam` 处理直接 close -- PR 内容不能只有文字描述,请一并附上 **通知图标调试工具** 的检查结果截图,详见下方的测试图标说明 - -## 测试图标 - -- [点击这里下载](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyIconDebugging_1.1.apk) 通知图标调试工具 v1.1 并安装在 Android 设备上进行调试,建议使用 AVD 模拟器,Android 版本 11 及以上 -- 请确保通知图标能够正常展示,不会出现黑白块的情况,否则不予合并代码,示例如下

- image
-- 友情赞助:可尝试在 [完美图标补全计划](https://github.com/pzcn/Perfect-Icons-Completion-Project/tree/main/icons) 内找到已制作好的 APP 分层图标,在此基础上进行修改适配 - -## 同步列表地址 - -- APP [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json) -- MIUI [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/MIUI/NotifyIconsSupportConfig.json) -- ColorOS [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/ColorOS/NotifyIconsSupportConfig.json) diff --git a/README.md b/README.md index 19035b1..f33410f 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,13 @@ # Android 通知图标规范适配计划 -![Eclipse Marketplace](https://img.shields.io/badge/license-AGPL3.0-blue) +![Blank](https://img.shields.io/badge/license-AGPL3.0-blue) [![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet) 这是一个在线规则平台,为国内 Android 不规范的 APP 和厂商适配原生通知图标与规范图标修复。 -## Developers +## 开始使用 -- 发起人 [酷安 @星夜不荟](http://www.coolapk.com/u/876977) - -- 合作方 [酷安 @PedroZ](http://www.coolapk.com/u/1157881) - -## 已支持的 OS 模块 - -- MIUI 系统 请参阅 [MIUI 原生通知图标](https://github.com/fankes/MIUINativeNotifyIcon) - -- ColorOS、RealmeUI、OxygenOS(≥12) 系统 请参阅 [ColorOS 通知图标增强](https://github.com/fankes/ColorOSNotifyIcon) - -- Flyme 或许可能,敬请期待。有需求可提交 `issues` - -- 类原生、Pixel 的国内用户 [可在这里留言请求适配](https://github.com/fankes/AndroidNotifyIconAdapt/issues/102) - -## 需求适配 - -国内 OS 的适配按需求人数决定,小众、无法 Root 的设备不会适配,如有需求可提交至 `issues` 共同讨论。 - -## 项目起源 - -构建这个项目的初衷就是想规范国内乱七八糟的 APP 生态,让国内用户也能体验到原生 Android 通知图标的规范美。 - -这一切的原因归根结底都是 MIUI 的不规范推送图标导致我忍无可忍而起之,其它厂商也不能解决彩色 APP 作为图标的欺骗意义的“解决方案”。 - -相信与我有同样想法的人存在,那么这个项目就可以帮助你完善这个愿望,顺便,你也可以帮助这个项目贡献图标资源。 - -有人说,用类原生系统不就好了,但是在国内的环境,类原生系统真的已经不合适了,毛坯房终究还是要自己去补全,在这个吃快餐的时代,显得有些狼狈了。 - -## 不规范收录 - -(不规范)允许 API 19 以上 APP 使用彩色图标但保留原生单色图标 - -甚至自己的系统 APP 都在用彩色通知图标 - -- EMUI(≤3 ≥5)、HarmonyOS(Android 9、10)、MagicUI -- ColorOS、RealmeUI -- OxygenOS(≤12) -- MyOS -- RogUI - -(破坏)完全破坏原生单色图标全部强制使用 APP 彩色图标 - -方法 `setSmallIcon` 失效 - -- EMUI(4.0 、4.0.1、4.1) -- MIUI(≤9 ≥12.5)、JoyUI -- ZUI -- NubiaUI、RedMagicOS -- 360OS -- CoolOS -- WaterOS - -(破坏)只能强制通过系统预制的 APP 白名单设置通知图标 - -方法 `setSmallIcon` 失效 - -- Flyme - -(勉强合格)通过系统预制的 APP 设置图标但保留原生单色图标 - -- MIUI(10、11、12) -- OriginOS、FuntouchOS -- SmartisanOS - -## 开始贡献 - -由于国内厂商 APP 的不规范彩色通知图标影响整体图标的美观,现在开放第三方 APP 以及定制 OS 的通知图标适配。
-这是一个公开在线规则平台,欢迎为通知图标优化名单贡献宝贵资源!
- -- [CONTRIBUTING](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/CONTRIBUTING.md) - -## 通知测试 - -你可以 [点击这里](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyTester.apk) 下载工具测试通知图标是否符合原生规范。 - -## 授权说明 - -在线规则平台的全部数据所有权属于 [@fankes](https://github.com/fankes) 与本仓库的所有贡献者所有,目前仅限于我正在开发的通知图标相关模块与项目合作者使用,**未经许可不允许私自引用本仓库的任何数据到自己的项目直接使用或删掉副本上的信息进行传播 (个人使用除外)**,使用本仓库的资源需要经过我的明确同意且需要根据 [AGPL-3.0](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/LICENSE) 协议,**在显著的地方声明引用和复制来源**,如有合作需求,请查看顶部的 **Telegram** 联系链接。 - -注意:除合作方外本仓库所有者有权在不通知的情况下根据自己的项目需求随时动态调整本仓库的所有资源包括但不限于修改格式、移动目录。 +- [点击这里](https://fankes.github.io/AndroidNotifyIconAdapt) 打开在线规则平台查看项目介绍、通知图标优化名单的全部内容以及调试、生成、贡献通知图标规则。 ## 许可证 @@ -109,4 +30,4 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ``` -版权所有 © 2017-2023 Fankes Studio(qzmmcn@163.com) +版权所有 © 2017-2023 Fankes Studio(qzmmcn@163.com) \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..5b62a16 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + Android 通知图标规范适配计划 + + + +
+
+ menu + + +
+ + + + + +
+
+ +
+
+
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/resources/css/github-markdown-dark.css b/docs/resources/css/github-markdown-dark.css new file mode 100644 index 0000000..43dedc0 --- /dev/null +++ b/docs/resources/css/github-markdown-dark.css @@ -0,0 +1,941 @@ +.markdown-body { + color-scheme: dark; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: #c9d1d9; + background-color: #0d1117; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: #58a6ff; + text-decoration: none; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: 600; +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: .67em 0; + font-weight: 600; + padding-bottom: .3em; + font-size: 2em; + border-bottom: 1px solid #21262d; +} + +.markdown-body mark { + background-color: rgba(187,128,9,0.15); + color: #c9d1d9; +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: #0d1117; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace,monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid #21262d; + height: .25em; + padding: 0; + margin: 24px 0; + background-color: #30363d; + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type=button], +.markdown-body [type=reset], +.markdown-body [type=submit] { + -webkit-appearance: button; +} + +.markdown-body [type=button]::-moz-focus-inner, +.markdown-body [type=reset]::-moz-focus-inner, +.markdown-body [type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +.markdown-body [type=button]:-moz-focusring, +.markdown-body [type=reset]:-moz-focusring, +.markdown-body [type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +.markdown-body [type=checkbox], +.markdown-body [type=radio] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type=number]::-webkit-inner-spin-button, +.markdown-body [type=number]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +.markdown-body [type=search]::-webkit-search-cancel-button, +.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: .54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open])>*:not(summary) { + display: none !important; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height: 10px; + color: #c9d1d9; + vertical-align: middle; + background-color: #161b22; + border: solid 1px rgba(110,118,129,0.4); + border-bottom-color: rgba(110,118,129,0.4); + border-radius: 6px; + box-shadow: inset 0 -1px 0 rgba(110,118,129,0.4); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: 600; + padding-bottom: .3em; + font-size: 1.5em; + border-bottom: 1px solid #21262d; +} + +.markdown-body h3 { + font-weight: 600; + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: 600; + font-size: 1em; +} + +.markdown-body h5 { + font-weight: 600; + font-size: .875em; +} + +.markdown-body h6 { + font-weight: 600; + font-size: .85em; + color: #8b949e; +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: #8b949e; + border-left: .25em solid #30363d; +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code { + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body ::placeholder { + color: #484f58; + opacity: 1; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body .pl-c { + color: #8b949e; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #79c0ff; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #d2a8ff; +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: #c9d1d9; +} + +.markdown-body .pl-ent { + color: #7ee787; +} + +.markdown-body .pl-k { + color: #ff7b72; +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: #a5d6ff; +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: #ffa657; +} + +.markdown-body .pl-bu { + color: #f85149; +} + +.markdown-body .pl-ii { + color: #f0f6fc; + background-color: #8e1519; +} + +.markdown-body .pl-c2 { + color: #f0f6fc; + background-color: #b62324; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #7ee787; +} + +.markdown-body .pl-ml { + color: #f2cc60; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: #1f6feb; +} + +.markdown-body .pl-mi { + font-style: italic; + color: #c9d1d9; +} + +.markdown-body .pl-mb { + font-weight: bold; + color: #c9d1d9; +} + +.markdown-body .pl-md { + color: #ffdcd7; + background-color: #67060c; +} + +.markdown-body .pl-mi1 { + color: #aff5b4; + background-color: #033a16; +} + +.markdown-body .pl-mc { + color: #ffdfb6; + background-color: #5a1e02; +} + +.markdown-body .pl-mi2 { + color: #c9d1d9; + background-color: #1158c7; +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: #d2a8ff; +} + +.markdown-body .pl-ba { + color: #8b949e; +} + +.markdown-body .pl-sg { + color: #484f58; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #a5d6ff; +} + +.markdown-body [data-catalyst] { + display: block; +} + +.markdown-body g-emoji { + font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: 400; + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: #f85149; +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body sup>a::before { + content: "["; +} + +.markdown-body sup>a::after { + content: "]"; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #c9d1d9; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 .2em; + font-size: inherit; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body ol[type=a] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type=i] { + list-style-type: lower-roman; +} + +.markdown-body div>ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: .25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #30363d; +} + +.markdown-body table tr { + background-color: #0d1117; + border-top: 1px solid #21262d; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #161b22; +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame>span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid #30363d; +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: #c9d1d9; +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right>span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: .2em .4em; + margin: 0; + font-size: 85%; + background-color: rgba(110,118,129,0.4); + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #161b22; + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: #0d1117; + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: 600; + background: #161b22; + border-top: 0; +} + +.markdown-body .footnotes { + font-size: 12px; + color: #8b949e; + border-top: 1px solid #30363d; +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid #1f6feb; + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: #c9d1d9; +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: 400; +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 .2em .25em -1.6em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em .25em .2em; +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} diff --git a/docs/resources/css/github-markdown-light.css b/docs/resources/css/github-markdown-light.css new file mode 100644 index 0000000..15e3530 --- /dev/null +++ b/docs/resources/css/github-markdown-light.css @@ -0,0 +1,940 @@ +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: #24292f; + background-color: #ffffff; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: #0969da; + text-decoration: none; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: 600; +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: .67em 0; + font-weight: 600; + padding-bottom: .3em; + font-size: 2em; + border-bottom: 1px solid hsla(210,18%,87%,1); +} + +.markdown-body mark { + background-color: #fff8c5; + color: #24292f; +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: #ffffff; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace,monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid hsla(210,18%,87%,1); + height: .25em; + padding: 0; + margin: 24px 0; + background-color: #d0d7de; + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type=button], +.markdown-body [type=reset], +.markdown-body [type=submit] { + -webkit-appearance: button; +} + +.markdown-body [type=button]::-moz-focus-inner, +.markdown-body [type=reset]::-moz-focus-inner, +.markdown-body [type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +.markdown-body [type=button]:-moz-focusring, +.markdown-body [type=reset]:-moz-focusring, +.markdown-body [type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +.markdown-body [type=checkbox], +.markdown-body [type=radio] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type=number]::-webkit-inner-spin-button, +.markdown-body [type=number]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +.markdown-body [type=search]::-webkit-search-cancel-button, +.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: .54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open])>*:not(summary) { + display: none !important; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height: 10px; + color: #24292f; + vertical-align: middle; + background-color: #f6f8fa; + border: solid 1px rgba(175,184,193,0.2); + border-bottom-color: rgba(175,184,193,0.2); + border-radius: 6px; + box-shadow: inset 0 -1px 0 rgba(175,184,193,0.2); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: 600; + padding-bottom: .3em; + font-size: 1.5em; + border-bottom: 1px solid hsla(210,18%,87%,1); +} + +.markdown-body h3 { + font-weight: 600; + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: 600; + font-size: 1em; +} + +.markdown-body h5 { + font-weight: 600; + font-size: .875em; +} + +.markdown-body h6 { + font-weight: 600; + font-size: .85em; + color: #57606a; +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: #57606a; + border-left: .25em solid #d0d7de; +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code { + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body ::placeholder { + color: #6e7781; + opacity: 1; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body .pl-c { + color: #6e7781; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #0550ae; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #8250df; +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: #24292f; +} + +.markdown-body .pl-ent { + color: #116329; +} + +.markdown-body .pl-k { + color: #cf222e; +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: #0a3069; +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: #953800; +} + +.markdown-body .pl-bu { + color: #82071e; +} + +.markdown-body .pl-ii { + color: #f6f8fa; + background-color: #82071e; +} + +.markdown-body .pl-c2 { + color: #f6f8fa; + background-color: #cf222e; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #116329; +} + +.markdown-body .pl-ml { + color: #3b2300; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: #0550ae; +} + +.markdown-body .pl-mi { + font-style: italic; + color: #24292f; +} + +.markdown-body .pl-mb { + font-weight: bold; + color: #24292f; +} + +.markdown-body .pl-md { + color: #82071e; + background-color: #FFEBE9; +} + +.markdown-body .pl-mi1 { + color: #116329; + background-color: #dafbe1; +} + +.markdown-body .pl-mc { + color: #953800; + background-color: #ffd8b5; +} + +.markdown-body .pl-mi2 { + color: #eaeef2; + background-color: #0550ae; +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: #8250df; +} + +.markdown-body .pl-ba { + color: #57606a; +} + +.markdown-body .pl-sg { + color: #8c959f; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #0a3069; +} + +.markdown-body [data-catalyst] { + display: block; +} + +.markdown-body g-emoji { + font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: 400; + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: #cf222e; +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body sup>a::before { + content: "["; +} + +.markdown-body sup>a::after { + content: "]"; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #24292f; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 .2em; + font-size: inherit; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body ol[type=a] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type=i] { + list-style-type: lower-roman; +} + +.markdown-body div>ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: .25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #d0d7de; +} + +.markdown-body table tr { + background-color: #ffffff; + border-top: 1px solid hsla(210,18%,87%,1); +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f6f8fa; +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame>span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid #d0d7de; +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: #24292f; +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right>span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: .2em .4em; + margin: 0; + font-size: 85%; + background-color: rgba(175,184,193,0.2); + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f6f8fa; + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: #ffffff; + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: 600; + background: #f6f8fa; + border-top: 0; +} + +.markdown-body .footnotes { + font-size: 12px; + color: #57606a; + border-top: 1px solid #d0d7de; +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid #0969da; + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: #24292f; +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: 400; +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 .2em .25em -1.6em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em .25em .2em; +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} diff --git a/docs/resources/css/github-markdown.css b/docs/resources/css/github-markdown.css new file mode 100644 index 0000000..c4bf145 --- /dev/null +++ b/docs/resources/css/github-markdown.css @@ -0,0 +1,1036 @@ +@media (prefers-color-scheme: dark) { + .markdown-body { + color-scheme: dark; + --color-prettylights-syntax-comment: #8b949e; + --color-prettylights-syntax-constant: #79c0ff; + --color-prettylights-syntax-entity: #d2a8ff; + --color-prettylights-syntax-storage-modifier-import: #c9d1d9; + --color-prettylights-syntax-entity-tag: #7ee787; + --color-prettylights-syntax-keyword: #ff7b72; + --color-prettylights-syntax-string: #a5d6ff; + --color-prettylights-syntax-variable: #ffa657; + --color-prettylights-syntax-brackethighlighter-unmatched: #f85149; + --color-prettylights-syntax-invalid-illegal-text: #f0f6fc; + --color-prettylights-syntax-invalid-illegal-bg: #8e1519; + --color-prettylights-syntax-carriage-return-text: #f0f6fc; + --color-prettylights-syntax-carriage-return-bg: #b62324; + --color-prettylights-syntax-string-regexp: #7ee787; + --color-prettylights-syntax-markup-list: #f2cc60; + --color-prettylights-syntax-markup-heading: #1f6feb; + --color-prettylights-syntax-markup-italic: #c9d1d9; + --color-prettylights-syntax-markup-bold: #c9d1d9; + --color-prettylights-syntax-markup-deleted-text: #ffdcd7; + --color-prettylights-syntax-markup-deleted-bg: #67060c; + --color-prettylights-syntax-markup-inserted-text: #aff5b4; + --color-prettylights-syntax-markup-inserted-bg: #033a16; + --color-prettylights-syntax-markup-changed-text: #ffdfb6; + --color-prettylights-syntax-markup-changed-bg: #5a1e02; + --color-prettylights-syntax-markup-ignored-text: #c9d1d9; + --color-prettylights-syntax-markup-ignored-bg: #1158c7; + --color-prettylights-syntax-meta-diff-range: #d2a8ff; + --color-prettylights-syntax-brackethighlighter-angle: #8b949e; + --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58; + --color-prettylights-syntax-constant-other-reference-link: #a5d6ff; + --color-fg-default: #c9d1d9; + --color-fg-muted: #8b949e; + --color-fg-subtle: #484f58; + --color-canvas-default: #0d1117; + --color-canvas-subtle: #161b22; + --color-border-default: #30363d; + --color-border-muted: #21262d; + --color-neutral-muted: rgba(110,118,129,0.4); + --color-accent-fg: #58a6ff; + --color-accent-emphasis: #1f6feb; + --color-attention-subtle: rgba(187,128,9,0.15); + --color-danger-fg: #f85149; + } +} + +@media (prefers-color-scheme: light) { + .markdown-body { + color-scheme: light; + --color-prettylights-syntax-comment: #6e7781; + --color-prettylights-syntax-constant: #0550ae; + --color-prettylights-syntax-entity: #8250df; + --color-prettylights-syntax-storage-modifier-import: #24292f; + --color-prettylights-syntax-entity-tag: #116329; + --color-prettylights-syntax-keyword: #cf222e; + --color-prettylights-syntax-string: #0a3069; + --color-prettylights-syntax-variable: #953800; + --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; + --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; + --color-prettylights-syntax-invalid-illegal-bg: #82071e; + --color-prettylights-syntax-carriage-return-text: #f6f8fa; + --color-prettylights-syntax-carriage-return-bg: #cf222e; + --color-prettylights-syntax-string-regexp: #116329; + --color-prettylights-syntax-markup-list: #3b2300; + --color-prettylights-syntax-markup-heading: #0550ae; + --color-prettylights-syntax-markup-italic: #24292f; + --color-prettylights-syntax-markup-bold: #24292f; + --color-prettylights-syntax-markup-deleted-text: #82071e; + --color-prettylights-syntax-markup-deleted-bg: #FFEBE9; + --color-prettylights-syntax-markup-inserted-text: #116329; + --color-prettylights-syntax-markup-inserted-bg: #dafbe1; + --color-prettylights-syntax-markup-changed-text: #953800; + --color-prettylights-syntax-markup-changed-bg: #ffd8b5; + --color-prettylights-syntax-markup-ignored-text: #eaeef2; + --color-prettylights-syntax-markup-ignored-bg: #0550ae; + --color-prettylights-syntax-meta-diff-range: #8250df; + --color-prettylights-syntax-brackethighlighter-angle: #57606a; + --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; + --color-prettylights-syntax-constant-other-reference-link: #0a3069; + --color-fg-default: #24292f; + --color-fg-muted: #57606a; + --color-fg-subtle: #6e7781; + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210,18%,87%,1); + --color-neutral-muted: rgba(175,184,193,0.2); + --color-accent-fg: #0969da; + --color-accent-emphasis: #0969da; + --color-attention-subtle: #fff8c5; + --color-danger-fg: #cf222e; + } +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: var(--color-fg-default); + background-color: var(--color-canvas-default); + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: var(--color-accent-fg); + text-decoration: none; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: 600; +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: .67em 0; + font-weight: 600; + padding-bottom: .3em; + font-size: 2em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body mark { + background-color: var(--color-attention-subtle); + color: var(--color-text-primary); +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: var(--color-canvas-default); +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace,monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid var(--color-border-muted); + height: .25em; + padding: 0; + margin: 24px 0; + background-color: var(--color-border-default); + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type=button], +.markdown-body [type=reset], +.markdown-body [type=submit] { + -webkit-appearance: button; +} + +.markdown-body [type=button]::-moz-focus-inner, +.markdown-body [type=reset]::-moz-focus-inner, +.markdown-body [type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +.markdown-body [type=button]:-moz-focusring, +.markdown-body [type=reset]:-moz-focusring, +.markdown-body [type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +.markdown-body [type=checkbox], +.markdown-body [type=radio] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type=number]::-webkit-inner-spin-button, +.markdown-body [type=number]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +.markdown-body [type=search]::-webkit-search-cancel-button, +.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: .54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open])>*:not(summary) { + display: none !important; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height: 10px; + color: var(--color-fg-default); + vertical-align: middle; + background-color: var(--color-canvas-subtle); + border: solid 1px var(--color-neutral-muted); + border-bottom-color: var(--color-neutral-muted); + border-radius: 6px; + box-shadow: inset 0 -1px 0 var(--color-neutral-muted); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: 600; + padding-bottom: .3em; + font-size: 1.5em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body h3 { + font-weight: 600; + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: 600; + font-size: 1em; +} + +.markdown-body h5 { + font-weight: 600; + font-size: .875em; +} + +.markdown-body h6 { + font-weight: 600; + font-size: .85em; + color: var(--color-fg-muted); +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: var(--color-fg-muted); + border-left: .25em solid var(--color-border-default); +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code { + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body ::placeholder { + color: var(--color-fg-subtle); + opacity: 1; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body .pl-c { + color: var(--color-prettylights-syntax-comment); +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: var(--color-prettylights-syntax-constant); +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: var(--color-prettylights-syntax-entity); +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: var(--color-prettylights-syntax-storage-modifier-import); +} + +.markdown-body .pl-ent { + color: var(--color-prettylights-syntax-entity-tag); +} + +.markdown-body .pl-k { + color: var(--color-prettylights-syntax-keyword); +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: var(--color-prettylights-syntax-string); +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: var(--color-prettylights-syntax-variable); +} + +.markdown-body .pl-bu { + color: var(--color-prettylights-syntax-brackethighlighter-unmatched); +} + +.markdown-body .pl-ii { + color: var(--color-prettylights-syntax-invalid-illegal-text); + background-color: var(--color-prettylights-syntax-invalid-illegal-bg); +} + +.markdown-body .pl-c2 { + color: var(--color-prettylights-syntax-carriage-return-text); + background-color: var(--color-prettylights-syntax-carriage-return-bg); +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: var(--color-prettylights-syntax-string-regexp); +} + +.markdown-body .pl-ml { + color: var(--color-prettylights-syntax-markup-list); +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-heading); +} + +.markdown-body .pl-mi { + font-style: italic; + color: var(--color-prettylights-syntax-markup-italic); +} + +.markdown-body .pl-mb { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-bold); +} + +.markdown-body .pl-md { + color: var(--color-prettylights-syntax-markup-deleted-text); + background-color: var(--color-prettylights-syntax-markup-deleted-bg); +} + +.markdown-body .pl-mi1 { + color: var(--color-prettylights-syntax-markup-inserted-text); + background-color: var(--color-prettylights-syntax-markup-inserted-bg); +} + +.markdown-body .pl-mc { + color: var(--color-prettylights-syntax-markup-changed-text); + background-color: var(--color-prettylights-syntax-markup-changed-bg); +} + +.markdown-body .pl-mi2 { + color: var(--color-prettylights-syntax-markup-ignored-text); + background-color: var(--color-prettylights-syntax-markup-ignored-bg); +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: var(--color-prettylights-syntax-meta-diff-range); +} + +.markdown-body .pl-ba { + color: var(--color-prettylights-syntax-brackethighlighter-angle); +} + +.markdown-body .pl-sg { + color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: var(--color-prettylights-syntax-constant-other-reference-link); +} + +.markdown-body [data-catalyst] { + display: block; +} + +.markdown-body g-emoji { + font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: 400; + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: var(--color-danger-fg); +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body sup>a::before { + content: "["; +} + +.markdown-body sup>a::after { + content: "]"; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: var(--color-fg-default); + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 .2em; + font-size: inherit; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body ol[type=a] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type=i] { + list-style-type: lower-roman; +} + +.markdown-body div>ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: .25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid var(--color-border-default); +} + +.markdown-body table tr { + background-color: var(--color-canvas-default); + border-top: 1px solid var(--color-border-muted); +} + +.markdown-body table tr:nth-child(2n) { + background-color: var(--color-canvas-subtle); +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame>span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid var(--color-border-default); +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: var(--color-fg-default); +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right>span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: .2em .4em; + margin: 0; + font-size: 85%; + background-color: var(--color-neutral-muted); + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: var(--color-canvas-subtle); + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: var(--color-canvas-default); + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: 600; + background: var(--color-canvas-subtle); + border-top: 0; +} + +.markdown-body .footnotes { + font-size: 12px; + color: var(--color-fg-muted); + border-top: 1px solid var(--color-border-default); +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid var(--color-accent-emphasis); + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: var(--color-fg-default); +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: 400; +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 .2em .25em -1.6em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em .25em .2em; +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} diff --git a/docs/resources/css/render.css b/docs/resources/css/render.css new file mode 100644 index 0000000..51856a9 --- /dev/null +++ b/docs/resources/css/render.css @@ -0,0 +1,51 @@ +div { + color: #303d4e; +} + +.markdown-body-box { + box-sizing: border-box; + min-width: 200px; + max-width: 980px; + margin: 0 auto; + padding-left: 45px; + padding-right: 45px; + padding-bottom: 45px; +} + +.markdown-body { + box-sizing: border-box; +} + +@media (max-width: 767px) { + .markdown-body { + padding: 15px; + } +} + +.mdui-snackbar-text { + color: white; +} + +.mdui-dialog { + border-radius: 15px; +} + +.mdui-appbar { + background-color: white; +} + +.round-left-icon-box { + margin-right: 15px; + border-radius: 50%; + padding: 10px; + width: 25px; + height: 25px; +} + +.round-icon { + width: 25px; + height: 25px; + object-fit: contain; + filter: drop-shadow(100px 0 white); + transform: translate(-100px); +} \ No newline at end of file diff --git a/docs/resources/js/markdown-contents.js b/docs/resources/js/markdown-contents.js new file mode 100644 index 0000000..a33a1a8 --- /dev/null +++ b/docs/resources/js/markdown-contents.js @@ -0,0 +1,31 @@ +const markdownContents = { + syncNotice: + '目前通知图标规则仅限使用于我 (@fankes) 开发的通知图标修复与增强 Xposed 模块以及部分经过授权的合作方项目。\n\n' + + '如果你想手动获取在线规则平台的所有数据,你可以点击侧边栏的“贡献通知图标规则”前往页面底部的同步列表地址进行查看。', + authorize: + '在线规则平台的全部数据所有权属于 @fankes 与本仓库的所有贡献者所有,' + + '目前仅限于我正在开发的通知图标相关模块与项目合作者使用,' + + '未经许可不允许私自引用本仓库的任何数据到自己的项目直接使用或删掉副本上的信息进行传播 (个人使用除外),' + + '使用本仓库的资源需要经过我的明确同意且需要根据 AGPL-3.0 协议,在显著的地方声明引用和复制来源。\n' + + '如有合作需求,你可以点击侧边栏的“联系我们”。\n\n' + + '目前经过授权合作的项目如下:\n\n' + + '- [MIUI 原生通知图标](https://github.com/fankes/MIUINativeNotifyIcon)\n' + + '- [ColorOS 通知图标增强](https://github.com/fankes/ColorOSNotifyIcon)\n' + + '- [HMS Push](https://github.com/fei-ke/HMSPush)\n\n' + + '注意:除合作方外本仓库所有者有权在不通知的情况下根据自己的项目需求随时动态调整本仓库的所有资源包括但不限于修改格式、移动目录。', + license: + '- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)\n\n' + + '```\n' + + 'Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)\n\n' + + 'This program is free software: you can redistribute it and/or modify\n' + + 'it under the terms of the GNU Affero General Public License as\n' + + 'published by the Free Software Foundation, either version 3 of the\n' + + 'License, or (at your option) any later version.\n\n' + + 'This program is distributed in the hope that it will be useful,\n' + + 'but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + + 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + + 'GNU Affero General Public License for more details.\n\n' + + 'You should have received a copy of the GNU Affero General Public License\n' + + 'along with this program. If not, see <http://www.gnu.org/licenses/>.\n' + + '```' +}; \ No newline at end of file diff --git a/docs/resources/js/markdown-page-contents.js b/docs/resources/js/markdown-page-contents.js new file mode 100644 index 0000000..83cb12b --- /dev/null +++ b/docs/resources/js/markdown-page-contents.js @@ -0,0 +1,98 @@ +const markdownPageContents = { + home: + '# Android 通知图标规范适配计划\n\n' + + '![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)\n' + + '[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet)\n\n' + + '这是一个在线规则平台,为国内 Android 不规范的 APP 和厂商适配原生通知图标与规范图标修复。\n\n' + + '## Developers\n\n' + + '- 发起人 [酷安 @星夜不荟](http://www.coolapk.com/u/876977)\n\n' + + '- 合作方 [酷安 @PedroZ](http://www.coolapk.com/u/1157881)\n\n' + + '## 已支持的 OS 模块\n\n' + + '- MIUI 系统 请参阅 [MIUI 原生通知图标](https://github.com/fankes/MIUINativeNotifyIcon)\n\n' + + '- ColorOS、RealmeUI、OxygenOS(≥12) 系统 请参阅 [ColorOS 通知图标增强](https://github.com/fankes/ColorOSNotifyIcon)\n\n' + + '- Flyme 或许可能,敬请期待。有需求可提交 `issues`\n\n' + + '- 类原生、Pixel 的国内用户 [可在这里留言请求适配](https://github.com/fankes/AndroidNotifyIconAdapt/issues/102)\n\n' + + '## 需求适配\n\n' + + '国内 OS 的适配按需求人数决定,小众、无法 Root 的设备不会适配,如有需求可提交至 `issues` 共同讨论。\n\n' + + '## 项目起源\n\n' + + '构建这个项目的初衷就是想规范国内乱七八糟的 APP 生态,让国内用户也能体验到原生 Android 通知图标的规范美。\n\n' + + '这一切的原因归根结底都是 MIUI 的不规范推送图标导致我忍无可忍而起之,其它厂商也不能解决彩色 APP 作为图标的欺骗意义的“解决方案”。\n\n' + + '相信与我有同样想法的人存在,那么这个项目就可以帮助你完善这个愿望,顺便,你也可以帮助这个项目贡献图标资源。\n\n' + + '有人说,用类原生系统不就好了,但是在国内的环境,类原生系统真的已经不合适了,毛坯房终究还是要自己去补全,在这个吃快餐的时代,显得有些狼狈了。\n\n' + + '## 不规范收录\n\n' + + '(不规范)允许 API 19 以上 APP 使用彩色图标但保留原生单色图标\n\n' + + '甚至自己的系统 APP 都在用彩色通知图标\n\n' + + '- EMUI(≤3 ≥5)、HarmonyOS(Android 9、10)、MagicUI\n' + + '- ColorOS、RealmeUI\n' + + '- OxygenOS(≤12)\n' + + '- MyOS\n' + + '- RogUI\n\n' + + '(破坏)完全破坏原生单色图标全部强制使用 APP 彩色图标\n\n' + + '方法 `setSmallIcon` 失效\n\n' + + '- EMUI(4.0 、4.0.1、4.1)\n' + + '- MIUI(≤9 ≥12.5)、JoyUI\n' + + '- ZUI\n' + + '- NubiaUI、RedMagicOS\n' + + '- 360OS\n' + + '- CoolOS\n' + + '- WaterOS\n\n' + + '(破坏)只能强制通过系统预制的 APP 白名单设置通知图标\n\n' + + '方法 `setSmallIcon` 失效\n\n' + + '- Flyme\n\n' + + '(勉强合格)通过系统预制的 APP 设置图标但保留原生单色图标\n\n' + + '- MIUI(10、11、12)\n' + + '- OriginOS、FuntouchOS\n' + + '- SmartisanOS\n\n' + + '## 通知测试\n\n' + + '你可以 [点击这里](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyTester.apk) 下载工具测试通知图标是否符合原生规范。', + contributing: + '# 开始贡献\n\n' + + '欢迎为通知图标优化名单贡献宝贵资源!\n\n' + + '## 分支规定\n\n' + + '不管是直接 Push 代码还是提交 Pull Request,都必须使 `commit` 指向 `main` 分支。\n\n' + + '## 代码格式规范\n\n' + + '- 全部提交代码必须进行格式化,未经格式化的代码将二次审查进行修改,格式混乱的将拒绝合并提交请求\n' + + '- 提交请求请在 `commit` 中标明修改、增加的 APP 名称以及图标用途,否则不予合并代码\n' + + '- 贡献者昵称如有多个请使用**顿号**分隔\n\n' + + '## 贡献方法\n\n' + + '- 在下方的 JSON 文件中添加新的 APP 通知图标适配条目\n' + + '- APP 对应了每个定制系统共同使用的图标,OS 中的图标只会分发到指定的定制系统生效 \n' + + '- [进入 APP 适配文件](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/APP/NotifyIconsSupportConfig.json)\n' + + '- [进入 OS 适配目录](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/OS)\n' + + '- 使用灰度位图转 Base64 来得到 Base64 的位图数据字符串\n' + + '- [BitmapToBase64](https://github.com/fankes/BitmapToBase64)\n' + + '- 你也可以使用在线工具来完成,注意删除后方生成的 `data:image/png;base64,`\n' + + '- [Base64 图片在线转换](https://tool.chinaz.com/tools/imgtobase)\n' + + '- 新增条目的模板如下所示\n\n' + + '```json\n' + + '{\n' + + ' "appName": "", // APP 名称\n' + + ' "packageName": "", // APP 包名\n' + + ' "iconBitmap": "", // 位图数据 Base64 字符串\n' + + ' "iconColor": "#ff232323", // 通知栏中显示的图标颜色 - 不设置使用系统默认颜色 (不设置颜色可删除此项)\n' + + ' "contributorName": "", // 贡献者昵称\n' + + ' "isEnabled": true, // 是否默认启用替换彩色图标 - 关闭后将全部停止替换\n' + + ' "isEnabledAll": false // 是否默认启用替换全部图标\n' + + '}\n' + + '```\n\n' + + '> 特别注意\n\n' + + '- 如果开启了默认启用替换全部图标,APP 的所有通知图标都将被强制替换为当前设置的图标,这是很危险的行为,我们默认只应该替换彩色的通知图标,如果一定有此需求(例如不启用此选项通知图标是黑白块情况)请**务必在 PR 中注明**,否则将不与合并代码或会被管理员重新设置为 **false**\n\n' + + '> 其它要求\n\n' + + '- `iconColor` 中的颜色代码一律使用小写字母且格式必须为 #ff······ (· 为数值) **不要对颜色设置透明度**\n' + + '- 图标大小建议保持在 50x50,最高不得超过 72x72\n' + + '- 提交前建议优化图标文件体积,Windows 平台可以使用 [pinga](https://css-ig.net/pinga)\n' + + '- 图标必须可被调试工具识别为灰度图标并检查通过,否则不予合并代码,详情请见下方\n' + + '- 提交时请将后方的注释删除,否则不予合并代码\n\n' + + '> 审查要求\n\n' + + '- PR 时请注明 PR 标题,标题为 Update XXX 的会被当做 `spam` 处理直接 close\n' + + '- PR 内容不能只有文字描述,请一并附上 **通知图标调试工具** 的检查结果截图,详见下方的测试图标说明\n\n' + + '## 测试图标\n\n' + + '- [点击这里下载](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyIconDebugging_1.1.apk) 通知图标调试工具 v1.1 并安装在 Android 设备上进行调试,建议使用 AVD 模拟器,Android 版本 11 及以上\n' + + '- 请确保通知图标能够正常展示,不会出现黑白块的情况,否则不予合并代码,示例如下

\n' + + ' image
\n' + + '- 友情赞助:可尝试在 [完美图标补全计划](https://github.com/pzcn/Perfect-Icons-Completion-Project/tree/main/icons) 内找到已制作好的 APP 分层图标,在此基础上进行修改适配\n\n' + + '## 同步列表地址\n\n' + + '- 第三方 APP [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json)\n' + + '- 系统 APP · MIUI [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/MIUI/NotifyIconsSupportConfig.json)\n' + + '- 系统 APP · ColorOS [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/ColorOS/NotifyIconsSupportConfig.json)' +}; \ No newline at end of file diff --git a/docs/resources/js/render.js b/docs/resources/js/render.js new file mode 100644 index 0000000..3b4158c --- /dev/null +++ b/docs/resources/js/render.js @@ -0,0 +1,226 @@ +const constValues = { + tooSmallScreenMinWidth: 600, + defaultNotifyIconColor: '#555555', + telegramContactLink: 'https://t.me/XiaofangInternet', + repoSourceUrl: 'https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/', + feedbackNewNotifyRulesUrl: 'https://github.com/fankes/AndroidNotifyIconAdapt/issues/new?assignees=&labels=To+be+adapted&template=request_notify_icon_adaption.yml' +}; + +function onPageLoad() { + pageFunctions.entryArea0.showMainPage(); + pageFunctions.entryArea3.showAuthorize(true); +} + +const renderController = { + generateMarkdownContent: (content) => marked.parse(content), + setMarkdownContent: (id, content) => { + $('#' + id).html(renderController.generateMarkdownContent(content)); + $('.markdown-body').find('a').attr({ rel: 'noopener', target: '_blank' }); + }, + setMarkdownStyleDialog: () => { + $('.mdui-dialog-content').addClass('markdown-body'); + }, + copyToClipboard: (content) => { + if (typeof navigator == 'undefined' || typeof navigator.clipboard == 'undefined' || navigator.permissions == 'undefined') { + let placeholder = document.createElement('input'); + placeholder.setAttribute('value', content); + document.body.appendChild(placeholder); + placeholder.select(); + document.execCommand('copy'); + document.body.removeChild(placeholder); + } else navigator.clipboard.writeText(content); + mdui.snackbar({ message: '已复制' }); + }, + setCookie: (cname, cvalue, exdays) => { + let d = new Date(); + let expires = 'expires=' + d.toGMTString(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + document.cookie = cname + '=' + cvalue + '; ' + expires; + }, + getCookie: (cname) => { + let name = cname + '='; + let ca = document.cookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i].trim(); + if (c.indexOf(name) == 0) return c.substring(name.length, c.length); + } + return ''; + } +}; + +const pageController = { + pageTitles: ['首页', '通知图标优化名单', '贡献通知图标规则'], + isPageBlocked: false, + switchToPage: (title, pageId, itemId) => { + $('#item-main-main').removeClass('mdui-list-item-active'); + $('#item-nfrules-app').removeClass('mdui-list-item-active'); + $('#item-nfrules-miui').removeClass('mdui-list-item-active'); + $('#item-nfrules-coloros').removeClass('mdui-list-item-active'); + $('#item-nfdebug-debug').removeClass('mdui-list-item-active'); + $('#item-contribute-contribute').removeClass('mdui-list-item-active'); + $('#page-main').hide(); + $('#page-notify-rules').hide(); + $('#page-contribute').hide(); + $('#' + pageId).show(); + $('#' + itemId).addClass('mdui-list-item-active'); + pageController.changePageTitle(title); + }, + changePageTitle: (title) => { + $('#page-title-text').html(title); + }, + showOrHideSyncNoticeIcon: (isShow) => { + if (isShow) $('#sync-notice-icon').show(); + else $('#sync-notice-icon').hide(); + }, + showOrHideProjectAddressIcon: (isShow) => { + if (isShow) $('#project-address-icon').show(); + else $('#project-address-icon').hide(); + } +}; + +const pageFunctions = { + headerArea0: { + showSyncNotice: () => { + mdui.dialog({ + title: '获取通知图标规则', + content: renderController.generateMarkdownContent(markdownContents.syncNotice), + buttons: [{ text: '我知道了' }] + }); + renderController.setMarkdownStyleDialog(); + } + }, + entryArea0: { + showMainPage: () => { + if (pageController.isPageBlocked) return; + pageController.switchToPage(pageController.pageTitles[0], 'page-main', 'item-main-main'); + pageController.showOrHideSyncNoticeIcon(false); + pageController.showOrHideProjectAddressIcon(true); + renderController.setMarkdownContent('page-main-markdown-content', markdownPageContents.home); + } + }, + entryArea1: { + requestDataForApp: () => { + if (pageController.isPageBlocked) return; + pageController.switchToPage(pageController.pageTitles[1], 'page-notify-rules', 'item-nfrules-app'); + pageController.showOrHideSyncNoticeIcon(true); + pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); + nfDataRequestController.requestData('APP'); + }, + requestDataForSystem: () => { + if (pageController.isPageBlocked) return; + mdui.snackbar({ message: '暂未开放,敬请期待' }); + }, + requestDataForMiui: () => { + if (pageController.isPageBlocked) return; + pageController.switchToPage(pageController.pageTitles[1], 'page-notify-rules', 'item-nfrules-miui'); + pageController.showOrHideSyncNoticeIcon(true); + pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); + nfDataRequestController.requestData('OS/MIUI'); + }, + requestDataForColorOs: () => { + if (pageController.isPageBlocked) return; + pageController.switchToPage(pageController.pageTitles[1], 'page-notify-rules', 'item-nfrules-coloros'); + pageController.showOrHideSyncNoticeIcon(true); + pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); + nfDataRequestController.requestData('OS/ColorOS'); + } + }, + entryArea2: { + feedbackNewNotifyRules: () => { + window.open(constValues.feedbackNewNotifyRulesUrl, '_blank'); + }, + contributeNotifyRules: () => { + if (pageController.isPageBlocked) return; + pageController.switchToPage(pageController.pageTitles[2], 'page-contribute', 'item-contribute-contribute'); + pageController.showOrHideSyncNoticeIcon(false); + pageController.showOrHideProjectAddressIcon(true); + renderController.setMarkdownContent('page-contribute-markdown-content', markdownPageContents.contributing); + }, + debugNotifyRules: () => { + if (pageController.isPageBlocked) return; + mdui.snackbar({ message: '暂未开放,敬请期待' }); + } + }, + entryArea3: { + contactUs: () => { + window.open(constValues.telegramContactLink, '_blank'); + }, + showAuthorize: (isShowNolonger) => { + if (isShowNolonger && renderController.getCookie('auth-show-nolonger')) return; + mdui.dialog({ + title: '授权说明', + content: renderController.generateMarkdownContent(markdownContents.authorize), + buttons: isShowNolonger ? [{ + text: '今日内不再提示', onClick: () => { + renderController.setCookie('auth-show-nolonger', true, 1); + } + }, { text: '我知道了' }] : [{ text: '我知道了' }] + }); + renderController.setMarkdownStyleDialog(); + }, + showLicense: () => { + mdui.dialog({ + title: '开放源代码许可', + content: renderController.generateMarkdownContent(markdownContents.license), + buttons: [{ text: '我知道了' }] + }); + renderController.setMarkdownStyleDialog(); + } + } +}; + +const nfDataRequestController = { + requestData: (name) => { + pageController.isPageBlocked = true; + $('#loading-icon').show(); + $('#load-fail-text-box').hide(); + $('#data-list').html(''); + $.ajax({ + url: constValues.repoSourceUrl + name + '/NotifyIconsSupportConfig.json', + method: 'GET', + dataType: 'json', + success: (result) => { + $('#loading-icon').hide(); + pageController.changePageTitle(pageController.pageTitles[1] + ' (' + result.length + ')'); + result.forEach((element, index) => { + let jsonString = encodeURI(JSON.stringify(element, null, 2)); + $('#data-list').append('
  • ' + + '
    ' + + '' + + '
    ' + + '
    ' + + '
    ' + element.appName + '
    ' + + '
    ' + + '' + element.packageName + '' + + '
    ' + + '贡献者:' + element.contributorName + '' + + '
    ' + + '
    ' + + '' + (element.isEnabled ? (element.isEnabledAll ? 'done_all' : 'done') : 'close') + '' + + (window.innerWidth > constValues.tooSmallScreenMinWidth ? + ('' + (element.isEnabled ? (element.isEnabledAll ? '全部替换' : '启用替换') : '禁用替换') + '') : '') + + '
  • '); + if (index < result.length - 1) $('#data-list').append('
  • '); + }); + pageController.isPageBlocked = false; + }, + error: () => { + $('#loading-icon').hide(); + $('#load-fail-text-box').show(); + } + }); + }, + showJsonData: (title, jsonUrlS) => { + let jsonString = decodeURI(jsonUrlS); + mdui.dialog({ + title: title, + content: renderController.generateMarkdownContent('```json\n' + jsonString + '\n```'), + buttons: [{ + text: '复制规则', onClick: () => { renderController.copyToClipboard(jsonString); } + }, { text: '关闭' }] + }); + renderController.setMarkdownStyleDialog(); + } +}; \ No newline at end of file