mirror of
https://github.com/hugo-fixit/FixIt.git
synced 2026-08-27 16:58:55 +00:00
Compare commits
509 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5fd4be7aea | |||
| cf61466629 | |||
| 65371a19a4 | |||
| 7c8344ed08 | |||
| 195ccf005d | |||
| 6bb0650597 | |||
| a38599955e | |||
| c956dd1690 | |||
| b9368668e4 | |||
| 31b890b04f | |||
| da9e562fcc | |||
| bcc15163f1 | |||
| 2c9dabe3e8 | |||
| 9de773ecb8 | |||
| 3d602750c6 | |||
| e5f32e91bf | |||
| b731ebfacb | |||
| 23f13f092a | |||
| 5cfbc87b0f | |||
| c380e5fb1a | |||
| 511eed6ef1 | |||
| 3961261011 | |||
| 42f87544cd | |||
| e8a27da175 | |||
| e622dc3cf4 | |||
| 3b5b5b2894 | |||
| 28a46751c7 | |||
| 495e8286bc | |||
| 83baf0b0e0 | |||
| 7ab30e5905 | |||
| 982175b8db | |||
| 50e85ae825 | |||
| 858fbf3eb8 | |||
| 9d72d72d13 | |||
| 521097cec5 | |||
| 3f2df1a588 | |||
| 690ffbb931 | |||
| 26a257b6a4 | |||
| 6c7d872e0a | |||
| 48da281259 | |||
| ff2170d3cf | |||
| 624585267a | |||
| c0346d18a7 | |||
| 53c7d5f301 | |||
| 3ead60489d | |||
| e62e3f1760 | |||
| ca0cac5a92 | |||
| a2293f036c | |||
| 080bea00dd | |||
| 35d54b22cb | |||
| 38314a5d0f | |||
| 46eefcebbc | |||
| 01b1d40d6c | |||
| e47abfde71 | |||
| 37dc7068d9 | |||
| 3ae17a26fe | |||
| 0794b565d2 | |||
| 753fa8f65a | |||
| eea2b4f53f | |||
| 8836574f21 | |||
| 5e9bc5308a | |||
| c58d839df5 | |||
| 4907bde66f | |||
| d58fcf99e7 | |||
| f5e852441e | |||
| 19c4bd4d82 | |||
| c68e44a012 | |||
| 7a654bef02 | |||
| def5f4ec75 | |||
| ef9063febe | |||
| c2e515b457 | |||
| 6cd89fe122 | |||
| 793f350db7 | |||
| 43294b5731 | |||
| 6178bf1553 | |||
| e88b740a06 | |||
| 832629cf84 | |||
| 12e090f405 | |||
| 6bbbc502be | |||
| eb01a90a7b | |||
| d9548a067d | |||
| 77aa10b626 | |||
| 6a8f52e5e2 | |||
| af54d781bb | |||
| c855841130 | |||
| 46a4c235b9 | |||
| 27bceb444f | |||
| d756349248 | |||
| b03ae3222e | |||
| 4fe21af5c3 | |||
| e7b9f7600f | |||
| db70d55217 | |||
| dc7f002260 | |||
| 2a30b02644 | |||
| 07ba13b4b1 | |||
| 7b34985f3a | |||
| 692973e9f5 | |||
| fcf13346af | |||
| 8a90e43eb8 | |||
| 0f16e2b72c | |||
| 0963931d2e | |||
| e82a6549a6 | |||
| a7c305583a | |||
| 179cdbe18a | |||
| a91458eb7f | |||
| e301c2e600 | |||
| 8b977d102f | |||
| 9c7be57f21 | |||
| d95541029c | |||
| a067d7bcd0 | |||
| bb7763b305 | |||
| fd1ebab6f0 | |||
| aa208e20b7 | |||
| 791ff12e70 | |||
| 79587fc756 | |||
| fa61e7878b | |||
| ae3612bdd1 | |||
| c656087d3a | |||
| bb7062aa38 | |||
| db1903862f | |||
| dd7f2c8a65 | |||
| 063f60ff54 | |||
| bc74d149c1 | |||
| ec487d55ab | |||
| 9aad78ae9c | |||
| 006d6f894f | |||
| 99685067f3 | |||
| bc41ae5503 | |||
| 1e20aaedab | |||
| 05dd048b0a | |||
| 272592c89d | |||
| 314fc909cd | |||
| adb8d5737e | |||
| 228f15fd5b | |||
| 74afeda510 | |||
| 6128f3f3dd | |||
| ca9125f4e1 | |||
| fa885576cb | |||
| 9cc53fe54e | |||
| 3d918ae0be | |||
| bde37f4d55 | |||
| 857f689ca3 | |||
| 4cee621fcb | |||
| cac46b0c02 | |||
| 08d95cb578 | |||
| 910fc5f3b0 | |||
| e0dc4415ca | |||
| 96d0fcccb4 | |||
| 66847cf6db | |||
| cae2f87737 | |||
| 781b0b5ab5 | |||
| c9fea85e99 | |||
| a02f3580e9 | |||
| e0bbd7f7b8 | |||
| 6682ceb4a2 | |||
| 81c1cc8c04 | |||
| 090583e437 | |||
| bdc500b14c | |||
| 57f1256811 | |||
| 2e87d5f68a | |||
| 9dfa6ec837 | |||
| ff0f60646e | |||
| b92ef741bf | |||
| 29f8b4fa26 | |||
| 8e43786695 | |||
| 302250b981 | |||
| d6d303ccf5 | |||
| 04a34c5788 | |||
| 4bb72e8f91 | |||
| caae8a74a9 | |||
| 89f0f2c204 | |||
| ea2b8e03d5 | |||
| 010415e586 | |||
| 9f3014b1c2 | |||
| e7a52e2aef | |||
| c3689a50fe | |||
| dfeaefa192 | |||
| 438d086398 | |||
| 2dcb180698 | |||
| 1b775f8ac6 | |||
| 1e03ea7711 | |||
| 052ee6f336 | |||
| f1f6e376a2 | |||
| 5b5aeabd91 | |||
| 10e3ba0bbb | |||
| c113b8195f | |||
| 9f47e608ef | |||
| 8ad74ede2f | |||
| 8115059109 | |||
| b85c2e7d7e | |||
| b7f7d0c6a1 | |||
| 93a6002290 | |||
| 754547f113 | |||
| b85d6aa5d6 | |||
| fe3d983c46 | |||
| cc7d3a5d94 | |||
| 28fe4dd019 | |||
| 22e67a0680 | |||
| 8a634bf562 | |||
| ab7cf6bc59 | |||
| cb4d2ab264 | |||
| e20fff11b7 | |||
| 44211c0c39 | |||
| c86d5da433 | |||
| 87671ce72a | |||
| 52f4527bf8 | |||
| 0d5f8c486e | |||
| 5e670973cc | |||
| 23f142a4b8 | |||
| 3745713738 | |||
| 1ef19d1b87 | |||
| eced169713 | |||
| 855368f30d | |||
| ece8c9ec10 | |||
| 69d42bb808 | |||
| 50e244f9e1 | |||
| 680571d31f | |||
| 7c641c9722 | |||
| fa54d5e471 | |||
| 2269e309af | |||
| c4b65a4c00 | |||
| 626635aaa6 | |||
| 22a615707c | |||
| 66efd4dd06 | |||
| f710921ddb | |||
| 20636fa7ac | |||
| 8f3f22577b | |||
| f697da6d08 | |||
| 93c77a0cbf | |||
| c07f3a63c2 | |||
| dd0fb4c16b | |||
| 61bf1a1f2b | |||
| f7fe83fa39 | |||
| 759402b4a9 | |||
| 737ff5af5a | |||
| 13f00582c3 | |||
| c90577b6b4 | |||
| 09b4443df8 | |||
| f84dd1b8a4 | |||
| 000e0d2359 | |||
| 7b41adb0d4 | |||
| a6f0fb2eea | |||
| 0f80352f07 | |||
| 8e1af2add9 | |||
| 23e53ca26e | |||
| 8b62b5c0b3 | |||
| d056c9b16a | |||
| 715d1cedbe | |||
| 3c45f9914d | |||
| 14df985a2d | |||
| 70e5793bb8 | |||
| 1114136800 | |||
| 2b19b5b016 | |||
| 9742093e80 | |||
| 19a932343f | |||
| aa6d6db424 | |||
| f7844fd0d9 | |||
| 4b23d8c1b8 | |||
| b0825134af | |||
| 07a9d6798c | |||
| db2dc460dd | |||
| b2b6e3b748 | |||
| 8d24ccf0b9 | |||
| ae23c42e7d | |||
| fd65f4fbd9 | |||
| 7ae8fa7104 | |||
| 8cae970b03 | |||
| 0ebfc94c8f | |||
| 4e783b2826 | |||
| a5bf1daca9 | |||
| dddf63daca | |||
| 5fa479c73a | |||
| 64204fd11e | |||
| 4c4398ed5e | |||
| 626b83a16b | |||
| f059fe9c9b | |||
| 35a45e4b6d | |||
| 5436358f3a | |||
| 2bff39f9f9 | |||
| 34f2490792 | |||
| 8a69d995d3 | |||
| 1044abd60a | |||
| 874b45f5a5 | |||
| 5db8fa5266 | |||
| c8580018cb | |||
| 8447e6442b | |||
| b4d3a56809 | |||
| aae810b8ed | |||
| 4eee19340b | |||
| e7e007308d | |||
| 87664f8b64 | |||
| ae28aab4c1 | |||
| 0323e22d83 | |||
| 7859589e4f | |||
| 5d423c308b | |||
| 8c36ed0554 | |||
| 24a2b10ba7 | |||
| 0bf30a50d9 | |||
| 14168640f0 | |||
| 8bcd9af913 | |||
| d879da79d4 | |||
| 5e67406d8c | |||
| a5a05a6a95 | |||
| 5932f1e2f2 | |||
| e369458f09 | |||
| 231cfc31cf | |||
| 5f6b08d383 | |||
| 5bf9fe89b0 | |||
| e7b65c47fa | |||
| 94a37b191b | |||
| 6913be694a | |||
| c4a4faf506 | |||
| 755061746e | |||
| d38f3b65c6 | |||
| 381f26a16d | |||
| a47c006849 | |||
| 12fbab8a29 | |||
| db1c275564 | |||
| cd7155c077 | |||
| c64ebb4005 | |||
| c676b0dac0 | |||
| 7d62af6ad2 | |||
| 862d3130fe | |||
| 01f4009881 | |||
| 88f0990b68 | |||
| 1228a0aaf4 | |||
| 4a2b7102ac | |||
| ce47a18c00 | |||
| ceb2ea8420 | |||
| 0680fcdcfb | |||
| 0e96242730 | |||
| 46568dd85c | |||
| 03e8f5f175 | |||
| 85473b3aa8 | |||
| 6bf6fa1080 | |||
| 16195e4cc7 | |||
| 41d15586b8 | |||
| 4593e81859 | |||
| 2b4e978a2f | |||
| bf446b1e6b | |||
| fbd272ac09 | |||
| d4a593acce | |||
| ce0d1ef130 | |||
| 05bd918cde | |||
| 29a09b5e0a | |||
| 8c7c0e3e44 | |||
| 3fa5f21e80 | |||
| 27163218e5 | |||
| fe9d7882bc | |||
| 9fd6907bd1 | |||
| 78696d2ea5 | |||
| f92721085d | |||
| 12e2768851 | |||
| 47bcdf610c | |||
| 43bc9f376f | |||
| 2d3e5ef0b0 | |||
| 45e19dd3ed | |||
| c90bcb2631 | |||
| c1daaa505d | |||
| 11f7617cbc | |||
| f9c7b8ee22 | |||
| d730e0671b | |||
| f058186530 | |||
| c28cbb4e86 | |||
| e2143869b7 | |||
| b852c461c2 | |||
| ea43c72e47 | |||
| 4e242f1892 | |||
| 12ac525fe2 | |||
| 5780a7de9f | |||
| 6870dc8878 | |||
| 03b246342d | |||
| 01a39691b9 | |||
| 3862822d84 | |||
| ff9b2b558d | |||
| af34ed359f | |||
| 67044075d8 | |||
| 3698ebf281 | |||
| c92c646dba | |||
| d9b2d262d6 | |||
| c16ecebbb0 | |||
| 437478b944 | |||
| 60895d2b27 | |||
| fd411683e1 | |||
| e5e9e51a12 | |||
| a26e2923ba | |||
| 1068f41b38 | |||
| 1c817cd090 | |||
| 5dc1cf85f0 | |||
| dd4ed78cf6 | |||
| 054b9332c8 | |||
| 7e313005ac | |||
| 9cb76d6025 | |||
| 3aa7bb021c | |||
| 152ea41b7c | |||
| 58e4397fbe | |||
| f1fb13c8da | |||
| 7e5047ca07 | |||
| a5962caa2e | |||
| b0413227db | |||
| 1d4e434bfc | |||
| 177487cd91 | |||
| 39ec0606eb | |||
| 85ec338b3d | |||
| e5ab464a60 | |||
| 119b5df83a | |||
| e0d2858c6d | |||
| 9c4f9c0075 | |||
| ff3346ce2d | |||
| f001df4642 | |||
| df735f6249 | |||
| 6a9b2a6a0e | |||
| 4a48a1bbc6 | |||
| e921ab1420 | |||
| 2e54fd70fb | |||
| 9d57dd3bc3 | |||
| 263423594b | |||
| 53408fc5ea | |||
| c78666a87b | |||
| 187262aca8 | |||
| f804e7dc44 | |||
| 8a5777d3fe | |||
| 4a4997a19c | |||
| c7c5ec47ad | |||
| ab078838e4 | |||
| 1a8d4907ef | |||
| ae98fa7bb7 | |||
| 51af32dd7d | |||
| b7d79b5127 | |||
| 3bd47c4eb8 | |||
| 3c4c0da5db | |||
| 646d1d569f | |||
| bf1e93466c | |||
| 96d551ffd3 | |||
| 14bdd6149a | |||
| df364a6d84 | |||
| f9cc4faed4 | |||
| 8cf8c53e2a | |||
| f3ad7dbfb1 | |||
| c03530a115 | |||
| eb0258f9c8 | |||
| 452f9e5402 | |||
| dcd190949c | |||
| 80d63f6892 | |||
| f906bf13f0 | |||
| ba3d68314c | |||
| e05b37e7d2 | |||
| 845e8a4dd3 | |||
| baa0461eb2 | |||
| 2d8bc70378 | |||
| db0c7faf30 | |||
| d594bf475a | |||
| 8fd622d8ed | |||
| 2748fa2a1f | |||
| 5f7d516ab4 | |||
| a4805004d2 | |||
| c2a294aa34 | |||
| b7c6f43269 | |||
| 886abd5c6e | |||
| dc740dce9b | |||
| 67a7c461fd | |||
| b12994f14b | |||
| 6f4cf86c97 | |||
| 5b3bd4380c | |||
| f9d63f0e4b | |||
| 2d08ef89fc | |||
| 64edf084d8 | |||
| e741763f2b | |||
| d873ff8d4d | |||
| 26e2f42298 | |||
| acd7f7117f | |||
| 57c99d1d69 | |||
| 2624753344 | |||
| 8985cbbdde | |||
| e8e432cadf | |||
| ab78efa61d | |||
| 57e08501a5 | |||
| b346679cc7 | |||
| b6bc9ceb65 | |||
| 94e22bffd7 | |||
| 28229c03b8 | |||
| e7470a9fa1 | |||
| 9797ee86fa | |||
| ebc53f6eea | |||
| 222436664e | |||
| 24562f72b9 | |||
| d1fd26e13f | |||
| 36d38599c6 | |||
| 225c12f6eb | |||
| 0903743080 | |||
| a5ed05a611 | |||
| af2f2a5b79 | |||
| b5864abfa8 | |||
| 4223cd4d71 | |||
| 3e34ae8ab5 | |||
| d6430874c2 | |||
| 9f4e1325ee | |||
| c8a0208046 | |||
| a5ecfc11b4 | |||
| 7358bf938d | |||
| a42ba44fa2 | |||
| 62d21f5a90 | |||
| d01e1f06a9 | |||
| 56e224fe0c | |||
| c20ae66361 | |||
| ad0a87a1c2 | |||
| 97edb86dde | |||
| d052443ca2 | |||
| 7945270509 |
@@ -1,17 +0,0 @@
|
||||
version: 2.1
|
||||
jobs:
|
||||
build-check:
|
||||
docker:
|
||||
- image: cibuilds/hugo:0.62
|
||||
working_directory: ~/LoveIt
|
||||
steps:
|
||||
- checkout
|
||||
- run: git submodule sync
|
||||
- run: git submodule update --init
|
||||
- run: hugo --source=exampleSite -v --gc
|
||||
- run: htmlproofer exampleSite/public --check-html --allow-hash-href --empty-alt-ignore --disable-external
|
||||
|
||||
workflows:
|
||||
build-check-exampleSite:
|
||||
jobs:
|
||||
- build-check
|
||||
@@ -1 +0,0 @@
|
||||
custom: https://paypal.me/dillonzq
|
||||
@@ -1,41 +0,0 @@
|
||||
---
|
||||
name: Bug Report 错误报告
|
||||
about: Create a bug report 创建一个错误报告
|
||||
title: "[BUG] Some problem..."
|
||||
labels: bug
|
||||
|
||||
---
|
||||
|
||||
### Describe the bug 描述你遇到的错误
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
一段简短的对于你遇到的错误的描述.
|
||||
|
||||
### Expected behavior 期待的行为
|
||||
|
||||
A clear and concise description of what you expected to happen.
|
||||
一段简短的对于你期待的行为的描述.
|
||||
|
||||
### Screenshots 屏幕截图
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
如果可以的话, 提供屏幕截图对解决问题很有帮助.
|
||||
|
||||
### Build Environment 构建环境
|
||||
|
||||
- OS: [e.g. Windows 10, macOS, Ubuntu]
|
||||
- Theme version/commit [e.g. 0.2.0, 2ccba79]
|
||||
- Hugo version [e.g. 0.69.0]
|
||||
|
||||
Please try to use Hugo **extended** version before opening the issue.
|
||||
请在创建 issue 之前尝试使用 Hugo **extended** 版本.
|
||||
|
||||
### Preview Environment 预览环境
|
||||
|
||||
- OS: [e.g. Windows 10, macOS, Ubuntu, iOS, Android]
|
||||
- Browser [e.g. Chrome, Safari, Firefox]
|
||||
|
||||
### Additional Information 补充信息
|
||||
|
||||
Configuration files or front matter code...
|
||||
配置文件或者前置参数的代码...
|
||||
@@ -0,0 +1,51 @@
|
||||
name: "Bug Report 错误报告"
|
||||
description: "Create a bug report 创建一个错误报告"
|
||||
title: "[BUG] Some problem ..."
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: Describe the bug 描述你遇到的错误
|
||||
description: |
|
||||
A clear and concise description of what the bug is.
|
||||
一段简短的对于你遇到的错误的描述。
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected behavior 期待的行为
|
||||
description: |
|
||||
A clear and concise description of what you expected to happen.
|
||||
一段简短的对于你期待的行为的描述。
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots 屏幕截图
|
||||
description: |
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
如果可以的话,提供屏幕截图对解决问题很有帮助。
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Build Environment 构建环境
|
||||
description: |
|
||||
Please try to use Hugo **extended** version before opening the issue.
|
||||
请在创建 issue 之前尝试使用 Hugo **extended** 版本。
|
||||
placeholder: |
|
||||
- OS: [e.g. Windows 10, macOS, Ubuntu]
|
||||
- Theme version/commit [e.g. 0.2.0, 2ccba79]
|
||||
- Hugo version [e.g. 0.69.0]
|
||||
- type: textarea
|
||||
id: preview
|
||||
attributes:
|
||||
label: Preview Environment 预览环境
|
||||
placeholder: |
|
||||
- OS: [e.g. Windows 10, macOS, Ubuntu, iOS, Android]
|
||||
- Browser [e.g. Chrome, Safari, Firefox]
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional Information 补充信息
|
||||
description: |
|
||||
Configuration files or front matter code ...
|
||||
配置文件或者前置参数的代码 ...
|
||||
@@ -1,5 +1,13 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions 问题讨论
|
||||
url: https://github.com/hugo-fixit/FixIt/discussions/new
|
||||
about: Please ask questions in Discussion. 请在讨论中提问。
|
||||
|
||||
- name: 官方 QQ 群
|
||||
url: https://qm.qq.com/cgi-bin/qm/qr?k=awbwdTtSQ_-H5QGzeJxdWgv6JMbNehNM&jump_from=webapi
|
||||
about: '加入 FixIt 主题交流群: 814031017'
|
||||
|
||||
- name: Theme Documentation 主题文档
|
||||
url: https://hugoloveit.com/categories/documentation/
|
||||
about: Please read the documentation carefully. 请先仔细阅读主题文档.
|
||||
url: https://fixit.lruihao.cn/categories/documentation/
|
||||
about: Please read the documentation carefully. 请先仔细阅读主题文档。
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
name: Feature request 功能请求
|
||||
about: Suggest an idea for this project 为这个项目提供一个建议
|
||||
title: "[FEATURE] Some feature"
|
||||
labels: enhancement
|
||||
|
||||
---
|
||||
|
||||
### Describe the feature you want 描述你的功能需求
|
||||
|
||||
- Feature 1 功能需求 1
|
||||
I want this feature to solve ...
|
||||
我希望这个功能解决 ...
|
||||
- Feature 2 功能需求 2
|
||||
I want this feature to solve ...
|
||||
我希望这个功能解决 ...
|
||||
- ...
|
||||
|
||||
### Useful reference 有价值的参考
|
||||
|
||||
If available, provide useful links to fulfill the feature.
|
||||
如果可以的话, 提供实现这个功能的相关参考链接.
|
||||
@@ -0,0 +1,22 @@
|
||||
name: "Feature request 功能请求"
|
||||
description: "Suggest an idea for this project 为这个项目提供一个建议"
|
||||
title: "[FEATURE] Some feature"
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: Describe the feature you want 描述你的功能需求
|
||||
description: |
|
||||
Please submit new issues for different features.
|
||||
请针对不同的功能建议提交新的 issue。
|
||||
placeholder: |
|
||||
I recommend adding this feature ...
|
||||
我希望添加这样的一个功能 ...
|
||||
- type: textarea
|
||||
id: reference
|
||||
attributes:
|
||||
label: Useful reference 有价值的参考
|
||||
description: |
|
||||
If available, provide useful links to fulfill the feature.
|
||||
如果可以的话,提供实现这个功能的相关参考链接。
|
||||
@@ -0,0 +1,16 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
open-pull-requests-limit: 1000
|
||||
assignees:
|
||||
- "Lruihao"
|
||||
labels:
|
||||
- "dependencies"
|
||||
@@ -0,0 +1,45 @@
|
||||
name: Update Algolia Search Index
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
algolia-atomic:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true # Fetch Hugo themes (true OR recursive)
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: 'latest'
|
||||
extended: true
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
- name: Update Algolia Index (en)
|
||||
env:
|
||||
ALGOLIA_APP_ID: YKOM6PKLUY
|
||||
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
|
||||
ALGOLIA_INDEX_NAME: 'index.en'
|
||||
ALGOLIA_INDEX_FILE: './docs/public/index.json'
|
||||
run: |
|
||||
npm run algolia
|
||||
|
||||
- name: Update Algolia Index (zh-cn)
|
||||
env:
|
||||
ALGOLIA_APP_ID: YKOM6PKLUY
|
||||
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
|
||||
ALGOLIA_INDEX_NAME: 'index.zh-cn'
|
||||
ALGOLIA_INDEX_FILE: './docs/public/zh-cn/index.json'
|
||||
run: |
|
||||
npm run algolia
|
||||
@@ -0,0 +1,21 @@
|
||||
name: Hugo build check
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
Actions-Hugo-Check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive # Fetch Hugo themes (true OR recursive)
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: latest
|
||||
extended: true
|
||||
- name: Build Hugo static files
|
||||
run: hugo -v --source=docs --gc --minify
|
||||
@@ -0,0 +1,65 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '45 0 * * 1'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
@@ -0,0 +1,24 @@
|
||||
name: Generate Contribute List
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
contrib-readme-job:
|
||||
runs-on: ubuntu-latest
|
||||
name: A job to automate contribute list in contributors.md file
|
||||
steps:
|
||||
- name: First Contribution Check
|
||||
id: first-check
|
||||
uses: sukki37/first-contribution-check-action@v1.0.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}
|
||||
- name: Contribute List
|
||||
uses: akhilmhdh/contributors-readme-action@master
|
||||
if: ${{ steps.first-check.outputs.isNewContributor == 'true' }}
|
||||
with:
|
||||
readme_path: "contributors.md"
|
||||
image_size: 100
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}
|
||||
+6
-2
@@ -1,9 +1,9 @@
|
||||
# Hugo default output directory
|
||||
public/
|
||||
/exampleSite/resources/
|
||||
resources/
|
||||
|
||||
# NPM
|
||||
node_modules/
|
||||
build/
|
||||
|
||||
## OS Files
|
||||
# Windows
|
||||
@@ -17,3 +17,7 @@ $RECYCLE.BIN/
|
||||
|
||||
# Linux
|
||||
.directory
|
||||
|
||||
# Hugo
|
||||
.hugo_build.lock
|
||||
jsconfig.json
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "docs"]
|
||||
path = docs
|
||||
url = https://github.com/hugo-fixit/docs.git
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
<!-- Releases see https://github.com/hugo-fixit/FixIt/releases -->
|
||||
|
||||
## v0.2.15
|
||||
## v0.2.15 [2022.8.4]
|
||||
|
||||
> Add content encryption feature(pages, partial), total word count, enhance auto toc, developer options and more.
|
||||
> Snapshot:
|
||||
|
||||
- :truck: Feat: ransfer repository from Lruihao to hugo-fixit
|
||||
- :tada: Feat: add content encryption of pages ([#123](https://github.com/hugo-fixit/FixIt/issues/123))
|
||||
- :tada: Feat: add `fixit-encryptor` shortcode ([#123](https://github.com/hugo-fixit/FixIt/issues/123))
|
||||
- :sparkles: Feat: add total word count feature in section and remove from footer ([#124](https://github.com/hugo-fixit/FixIt/issues/124))
|
||||
- :sparkles: Feat: enhance auto toc feature ([#104](https://github.com/hugo-fixit/FixIt/issues/104) [#136](https://github.com/hugo-fixit/FixIt/issues/136))
|
||||
- :sparkles: Feat: add repost feature ([#156](https://github.com/hugo-fixit/FixIt/issues/156))
|
||||
- :sparkles: Feat: add developer options
|
||||
- Check for updates option
|
||||
- Mobile Devtools config ([#163](https://github.com/hugo-fixit/FixIt/pull/163))
|
||||
- :bug: Fix: unable to show search bar of header at mobile mode ([#143](https://github.com/hugo-fixit/FixIt/issues/143))
|
||||
- :bug: Fix: Giscus comment invalid config `inputPosition`
|
||||
- :bug: Fix: Waline comment invalid config `imageUploader = false` & `highlighter = false` (@yureiita[#161](https://github.com/hugo-fixit/FixIt/pull/161))
|
||||
- :bug: Fix: busuanzi logic error
|
||||
- :bug: Fix: close comment system logic error when the article was expired
|
||||
- :bug: Style: fix typos for rel attribute value noreferrer (@yureiita[#157](https://github.com/hugo-fixit/FixIt/pull/157))
|
||||
- :recycle: Refactor: migrate theme js from src to assets by js.build
|
||||
- :recycle: Refactor: change the post edit url splicing rules
|
||||
- :mag: Feat(SEO): add options to make output `baidu_urls.txt` file ([#138](https://github.com/hugo-fixit/FixIt/issues/138))
|
||||
- :truck: Feat: migrate exampleSite to docs submodule
|
||||
- :art: Style: add theme colors variables and add common color styles
|
||||
- :art: Style: add scroll bar for auto toc ([#136](https://github.com/hugo-fixit/FixIt/issues/136))
|
||||
- :art: Style: change the version badge style form flat-square to flat
|
||||
- :memo: Docs: revise theme documentations
|
||||
- :heavy_plus_sign: Feat: add theme core configuration settings file
|
||||
- :wrench: Feat(cdn): add unpkg cdn support
|
||||
- :wrench: Chore: change the theme minimum supported Hugo versions above **0.84.0**
|
||||
- :arrow_up: Chore(libs): update some third-party libraries
|
||||
- Update Artalk from 2.2.12 to 2.3.4 ([#150](https://github.com/hugo-fixit/FixIt/issues/150))
|
||||
- Update Waline from 1.5.2 to 2.6.1
|
||||
- Update Valine from 1.4.18 to 1.5.0
|
||||
- Update mermaid from 8.13.3 to 9.1.3
|
||||
- :arrow_up: Chore(deps-dev):
|
||||
- Bump babel-preset-minify from 0.5.1 to 0.5.2 ([#145](https://github.com/hugo-fixit/FixIt/pull/145))
|
||||
- Bump core-js from 3.22.0 to 3.24.1 ([#168](https://github.com/hugo-fixit/FixIt/pull/168))
|
||||
- Bump @babel/preset-env from 7.16.11 to 7.18.10 ([#169](https://github.com/hugo-fixit/FixIt/pull/169))
|
||||
- Bump @babel/cli from 7.17.6 to 7.18.10 ([#170](https://github.com/hugo-fixit/FixIt/pull/170))
|
||||
- Bump @babel/core from 7.17.9 to 7.18.10 ([#171](https://github.com/hugo-fixit/FixIt/pull/171))
|
||||
- **Full Changelog:** @Lruihao [`v0.2.14...v0.2.15`](https://github.com/hugo-fixit/FixIt/compare/v0.2.14...v0.2.15)
|
||||
|
||||
## v0.2.14 [2022.5.15]
|
||||
|
||||
> Add hugo new features support.
|
||||
> Snapshot: <https://fixit-p1tg6tsml-lruihao.vercel.app>
|
||||
|
||||
- :recycle: Refactor: header layout
|
||||
- :tada: Feat: add sub menu (nested menu) support ([#31](https://github.com/hugo-fixit/FixIt/issues/31))
|
||||
- :sparkles: Feat: add user-defined content to menu items via the `params` field ([#99](https://github.com/hugo-fixit/FixIt/issues/99))
|
||||
- :sparkles: Feat: modified language selector to submenu (@pandaoh[`eced169`](https://github.com/hugo-fixit/FixIt/commit/eced169713ce4a0208ce70ab556824e47eb671d5), @Lruihao[#31](https://github.com/hugo-fixit/FixIt/issues/31))
|
||||
- :bug: Fix: add "no more translations" judgment logic ([#100](https://github.com/hugo-fixit/FixIt/issues/100))
|
||||
- :bug: Fix: fix some header css bug ([#31](https://github.com/hugo-fixit/FixIt/issues/31))
|
||||
- :sparkles: Feat: enhance link render ([#96](https://github.com/hugo-fixit/FixIt/issues/96))
|
||||
- Add external icon for external links automatically
|
||||
- Add download icon for downloadable links
|
||||
- :sparkles: Feat: add giscus comment system ([#130](https://github.com/hugo-fixit/FixIt/issues/130))
|
||||
- :sparkles: Feat: link shortcode add `external-icon` option ([#96](https://github.com/hugo-fixit/FixIt/issues/96))
|
||||
- :sparkles: Feat: add GitHub Corners support ([#106](https://github.com/hugo-fixit/FixIt/issues/106))
|
||||
- :sparkles: Feat: add local avatar and gravatar support for post author ([#125](https://github.com/hugo-fixit/FixIt/issues/125))
|
||||
- :sparkles: Feat: add ~~total word count support in footer~~ ([#124](https://github.com/hugo-fixit/FixIt/issues/124))
|
||||
- :sparkles: Feat: add "Edit this page" button support ([#103](https://github.com/hugo-fixit/FixIt/issues/103))
|
||||
- :sparkles: Feat: add count badge for taxonomy ([#122](https://github.com/hugo-fixit/FixIt/issues/122))
|
||||
- :zap: Perf: add Gravatar config support
|
||||
- :bug: Fix: invalid front matter `comment: true` ([#108](https://github.com/hugo-fixit/FixIt/issues/108))
|
||||
- :bug: Fix: ibruce and watermark option negative value error ([#114](https://github.com/hugo-fixit/FixIt/issues/114))
|
||||
- :truck: Feat: *migrate ~~`home.profile.gravatarSite`~~ to `gravatar.host`*
|
||||
- :truck: Feat: *migrate ~~`ibruce.siteTime`~~ to `footer.siteTime`*
|
||||
- :lipstick: Style: add some common CSS styles Class ([#101](https://github.com/hugo-fixit/FixIt/issues/101))
|
||||
- :lipstick: Style: add the gap between and icon and text at blending typesetting (@ctj12461, @Lruihao[#118](https://github.com/hugo-fixit/FixIt/pull/118))
|
||||
- :lipstick: Style: modify blockquote CSS
|
||||
- :memo: Docs: revise theme documentations
|
||||
- :zap: Perf: remove third-party library clipboard.js ([#84](https://github.com/hugo-fixit/FixIt/issues/84))
|
||||
- :pencil2: Docs: fix highlight url typo in `theme-documentation-built-in-shortcodes` (@d-baer[#85](https://github.com/hugo-fixit/FixIt/pull/85))
|
||||
- :wrench: Chore(i18n): improve translations for supported languages ([#119](https://github.com/hugo-fixit/FixIt/issues/119))
|
||||
- :wrench: Chore(i18n): add i18n support for console messages
|
||||
- :wrench: Chore: add deprecated parameter detection in cli
|
||||
- :arrow_up: Chore: update some third-party libraries
|
||||
- :wrench: Chore(deps-dev):
|
||||
- Bump minimist from 1.2.5 to 1.2.6 ([#92](https://github.com/hugo-fixit/FixIt/pull/92))
|
||||
- Bump @babel/core from 7.17.5 to 7.17.10 ([#126](https://github.com/hugo-fixit/FixIt/pull/126))
|
||||
- Bump core-js from 3.21.1 to 3.22.5 ([#129](https://github.com/hugo-fixit/FixIt/pull/129))
|
||||
- Bump @babel/cli from 7.17.6 to 7.17.10 ([#127](https://github.com/hugo-fixit/FixIt/pull/127))
|
||||
- Bump @babel/preset-env from 7.16.11 to 7.17.10 ([`bc74d14`](https://github.com/hugo-fixit/FixIt/commit/bc74d149c16b36644fecdd5bef325bf8087f8593))
|
||||
- **Full Changelog:** @Lruihao [`v0.2.13...v0.2.14`](https://github.com/hugo-fixit/FixIt/compare/v0.2.13...v0.2.14)
|
||||
|
||||
## v0.2.13 [2022.3.14]
|
||||
|
||||
> Improve and add some new features.
|
||||
> Snapshot: <https://fixit-bbh5g5x90-lruihao.vercel.app>
|
||||
|
||||
- :recycle: Refactor: page layout ([#65](https://github.com/hugo-fixit/FixIt/issues/65))
|
||||
- :tada: Feat: add Artalk comment support ([#54](https://github.com/hugo-fixit/FixIt/issues/54), @hiifong[#57](https://github.com/hugo-fixit/FixIt/pull/57))
|
||||
- :tada: Feat: add Waline comment support ([#36](https://github.com/hugo-fixit/FixIt/issues/36))
|
||||
- :tada: Feat: add Twikoo comment support ([#64](https://github.com/hugo-fixit/FixIt/issues/64))
|
||||
- :sparkles: Feat: add recently updated section ([#50](https://github.com/hugo-fixit/FixIt/issues/50))
|
||||
- :sparkles: Feat: add article expiration reminder support ([#51](https://github.com/hugo-fixit/FixIt/issues/51))
|
||||
- :sparkles: Feat: add pageStyle option ([#62](https://github.com/hugo-fixit/FixIt/issues/62))
|
||||
- :sparkles: Style: add media style for print view ([#61](https://github.com/hugo-fixit/FixIt/issues/61))
|
||||
- :sparkles: Feat: add Gravatar mirror site support (@ctj12461[#66](https://github.com/hugo-fixit/FixIt/pull/66))
|
||||
- :sparkles: Feat: add archive count display ([#33](https://github.com/hugo-fixit/FixIt/issues/33))
|
||||
- :sparkles: Feat: add `details` shortcode ([#68](https://github.com/hugo-fixit/FixIt/issues/68))
|
||||
- :sparkles: Feat: add `center-quote` shortcode ([#69](https://github.com/hugo-fixit/FixIt/issues/69))
|
||||
- :sparkles: Feat: add markdown support for **title** parameter of the admonition shortcode
|
||||
- :sparkles: Feat: add 9 newly supported social links ([#17](https://github.com/hugo-fixit/FixIt/issues/17))
|
||||
- :zap: Perf: enhance highlight feature (GitHub syntax supported) and fix some css bugs ([#43](https://github.com/hugo-fixit/FixIt/issues/43))
|
||||
- Inline Code
|
||||
- Indented Code
|
||||
- Block Fenced Code
|
||||
- gist shortcode
|
||||
- :sparkles: Feat: add `params.page.code.edit` option support ([#76](https://github.com/hugo-fixit/FixIt/issues/76))
|
||||
- :mag: Feat: add 360 and sougou seo support
|
||||
- :bug: Fix: remove source map of local libraries to avoid 404 error ([#67](https://github.com/hugo-fixit/FixIt/issues/67))
|
||||
- :fire: Feat: remove shortcode cardlink ([#42](https://github.com/hugo-fixit/FixIt/issues/42))
|
||||
- :lipstick: Style: more refined theme style ([#40](https://github.com/hugo-fixit/FixIt/issues/40))
|
||||
- :pencil2: Style: fix typo *discription* should be **description** ([#60](https://github.com/hugo-fixit/FixIt/issues/60))
|
||||
- :wrench: Chore(update-libs):
|
||||
- Update cell-watermark 1.0.3 and CDN support (fontFamily supported)
|
||||
- Update animate.css 3.7.2 -> 4.1.1 ([#74](https://github.com/hugo-fixit/FixIt/issues/74))
|
||||
- :wrench: Chore: add atomic-algolia for exampleSite ([#70](https://github.com/hugo-fixit/FixIt/issues/70))
|
||||
- **Full Changelog:** @Lruihao [`v0.2.12...v0.2.13`](https://github.com/hugo-fixit/FixIt/compare/v0.2.12...v0.2.13)
|
||||
|
||||
## v0.2.12 [2022-1-27]
|
||||
|
||||
> Fix most known bugs and add some new features.
|
||||
> Snapshot: <https://fixit-e9lpwfkbp-lruihao.vercel.app>
|
||||
|
||||
- :tada: Feat: add PWA support
|
||||
- :tada: Feat: add Watermark support ([#16](https://github.com/hugo-fixit/FixIt/issues/16))
|
||||
- :tada: Feat: add "不蒜子" count and site run time ([#18](https://github.com/hugo-fixit/FixIt/issues/18))
|
||||
- :sparkles: Feat: add pangu.js support ([#20](https://github.com/hugo-fixit/FixIt/issues/20))
|
||||
- :sparkles: Feat: add public network security config (only in China) ([#15](https://github.com/hugo-fixit/FixIt/issues/15))
|
||||
- :sparkles: Feat: add CustomJS option ([#24](https://github.com/hugo-fixit/FixIt/issues/24))
|
||||
- :sparkles: Feat: add theme embedded archeTypes
|
||||
- :mag: Feat(SEO): optimize SEO meta ([#30](https://github.com/hugo-fixit/FixIt/issues/30))
|
||||
- :zap: Feat: remove lib smooth-scroll ([#1](https://github.com/hugo-fixit/FixIt/issues/1)) replaced by CSS native properties scroll-margin, scroll-behavior ([#39](https://github.com/hugo-fixit/FixIt/issues/39))
|
||||
- :zap: Perf: merge shortcode cardlink (deprecated v0.2.13) into shortcode link and add 'download' param ([#42](https://github.com/hugo-fixit/FixIt/issues/42))
|
||||
- :zap: Perf: optimize JS loading ([#25](https://github.com/hugo-fixit/FixIt/issues/25))
|
||||
- :recycle: Refactor: header title DOM and add subtitle option ([#26](https://github.com/hugo-fixit/FixIt/issues/26))
|
||||
- :bug: Fix: set mermaid theme as 'default' when initialization ([#38](https://github.com/hugo-fixit/FixIt/issues/38))
|
||||
- :bug: Fix: typeit print code error ([#19](https://github.com/hugo-fixit/FixIt/issues/19))
|
||||
- :bug: Fix: pre element overflow error ([#29](https://github.com/hugo-fixit/FixIt/issues/29))
|
||||
- :bug: Fix: toc display error without content header ([#21](https://github.com/hugo-fixit/FixIt/issues/21))
|
||||
- :lipstick: Style: style detail adjustments, change scroll-behavior to smooth, taxonomy, header, footer, shortcode style etc.
|
||||
- :pencil: Docs: improve demo site documentation ([#37](https://github.com/hugo-fixit/FixIt/issues/37))
|
||||
- :wrench: Chore: add commands `fixit_checker.sh`
|
||||
- :wrench: Chore(i18n): change some translations
|
||||
- :arrow_up: Chore: update all third-party libraries
|
||||
- **Full Changelog:** @Lruihao [`v0.2.11...v0.2.12`](https://github.com/hugo-fixit/FixIt/compare/v0.2.11...v0.2.12)
|
||||
|
||||
## v0.2.11 [2021-12-19]
|
||||
|
||||
> :tada: The beginning of FixIt to fix the theme LoveIt.
|
||||
|
||||
- :sparkles: Feat: add cardlink shortcode ([Lruihao/hugo-blog@`df9eca2`](https://github.com/Lruihao/hugo-blog/commit/df9eca26af43287748fd8d4654014357a8269b0b))
|
||||
- :tada: Feat: add friends layout template
|
||||
- :wrench: Chore(i18n): add translations for Traditional Chinese ([Lruihao/hugo-blog@`df9eca2`](https://github.com/Lruihao/hugo-blog/commit/b86157d8b84830bda415ab2488580afd843acac2))
|
||||
- :bug: Fix: mobile style ([Lruihao/hugo-blog#19](https://github.com/Lruihao/hugo-blog/issues/19))
|
||||
- :bug: Style: fix content h1 style ([Lruihao/hugo-blog#8](https://github.com/Lruihao/hugo-blog/issues/8))
|
||||
- :bug: Fix: `.params.author` should be `$params.author` ([Lruihao/hugo-blog#1](https://github.com/Lruihao/hugo-blog/issues/1))
|
||||
- **Full Changelog:** @Lruihao [`v0.2.10...v0.2.11`](https://github.com/hugo-fixit/FixIt/compare/v0.2.10...v0.2.11)
|
||||
|
||||
## v0.2.10 :arrow_down: [2020-5-29 before]
|
||||
|
||||
Thanks [dillonzq/LoveIt](https://github.com/dillonzq/LoveIt/releases)
|
||||
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
1024@lruihao.cn.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -0,0 +1,81 @@
|
||||
## How to contribute to this project
|
||||
|
||||
First, fork this repository by clicking the fork button.
|
||||
|
||||
Next, clone your forked repo.
|
||||
|
||||
```
|
||||
git clone https://github.com/example/FixIt.git
|
||||
cd FixIt
|
||||
```
|
||||
|
||||
Then, install the dev dependencies.
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
And now you are ready to go!
|
||||
|
||||
Here are some useful commands.
|
||||
|
||||
```bash
|
||||
# build theme.js with babel
|
||||
npm run babel
|
||||
# build theme.js and then build the static site
|
||||
npm run build
|
||||
# run a local debugging server with watch
|
||||
npm run server
|
||||
# run a local debugging server with watch in production environment
|
||||
npm run server:production
|
||||
# build theme.js and then run a local debugging server
|
||||
npm run start
|
||||
# build theme.js and then run a local debugging server in production environment
|
||||
npm run start:production
|
||||
|
||||
```
|
||||
|
||||
Finally, create a new pull request at https://github.com/hugo-fixit/FixIt/pulls to submit your contribution 🎉
|
||||
|
||||
## Git standard for developers
|
||||
|
||||
### Branches
|
||||
|
||||
| Branch | Description |
|
||||
| :-- | :-- |
|
||||
| master | _The branch open to the public and release versions_ |
|
||||
| RC branch | _The development branch of the next version, e.g. v0.2.12-RC_ |
|
||||
| single feature | _The branch to enhancements or fixes_ |
|
||||
|
||||
### Merge events
|
||||
|
||||
| event | merge |
|
||||
| :-- | :-- |
|
||||
| release | **RC branch => master:** `--rebase` |
|
||||
| PR | **others:master => master:** `--rebase` |
|
||||
| single feature| **feature branch => RC branch:** `--merge` |
|
||||
|
||||
### Commit message
|
||||
|
||||
#### Format
|
||||
> {emoji} {type}: {subject within 50 words} (#{issue/pull request})
|
||||
|
||||
#### Emoji
|
||||
- https://gitmoji.dev
|
||||
- [vscode plugin](https://github.com/maixiaojie/git-emoji-zh.git)
|
||||
- utools plugin `GitEmoji`
|
||||
|
||||
#### Message
|
||||
|
||||
| Emoji | Type | Example | Description (No Ambiguous) |
|
||||
| :-------------------------------------------- | :------- | :----------------------------------------------------------- | :----------------------------------------------------------- |
|
||||
| :tada: <br>:sparkles: | Feat | Feat: add {feature} | new feature |
|
||||
| :truck: | | Feat: adjust/migrate {feature name},{change details} | For the adjustment feature, it is necessary to describe the current situation (before) and after adjustment (after) |
|
||||
| :fire: | | Feat: delete {feature name}, {deletion reason} | If the feature is deleted, the reason for deletion must be explained |
|
||||
| :bug: <br>:construction: <br>:rotating_light: | Fix | Fix: fix {bug description} | Fix known bugs |
|
||||
| :art: <br>:lipstick: <br>:pencil2: | Style | Style: Typesetting/CSS style {optimizing content} | Changes that do not affect code operation, such as code layout and style change |
|
||||
| :recycle: | Refactor | Refactor: override {feature name} | It is neither a new function nor a code change to fix a bug. Simply rewriting the code of a function does not affect the function result |
|
||||
| :zap: | Perf | Perf: improve performance {function name}, {improve content} | Optimize code performance |
|
||||
| :rewind: | Revert | Revert: restore version {commit message of restore version} | Restore the version of one commit |
|
||||
| :pencil: <br>:pencil2: | Docs | Docs: revise comments/update documents | Adjustment of documents and notes |
|
||||
| :wrench: | Chore | Chore: update plugin version | Changes in the construction process or auxiliary tools |
|
||||
@@ -1,7 +1,8 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 LIUZHICHAO.COM
|
||||
Copyright (c) 2019 DILLONZQ.COM
|
||||
Copyright (c) 2019-2020 DILLONZQ.COM
|
||||
Copyright (c) 2021-2022 LRUIHAO.CN
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
||||
@@ -1,60 +1,87 @@
|
||||
# LoveIt Theme | Hugo [](https://app.netlify.com/sites/hugo-loveit/deploys)
|
||||
# FixIt Theme | Hugo
|
||||
|
||||
[](https://github.com/dillonzq/LoveIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://github.com/dillonzq/LoveIt/blob/master/LICENSE)
|
||||
[](https://app.circleci.com/pipelines/github/dillonzq/LoveIt)
|
||||
[](https://github.com/hugo-fixit/FixIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://github.com/hugo-fixit/FixIt/blob/master/LICENSE)
|
||||
|
||||
English README | [简体中文说明](https://github.com/dillonzq/LoveIt/blob/master/README.zh-cn.md)
|
||||
English README | [简体中文说明](https://github.com/hugo-fixit/FixIt/blob/master/README.zh-cn.md)
|
||||
|
||||
> **LoveIt** is a **clean**, **elegant** but **advanced** blog theme for [Hugo](https://gohugo.io/).
|
||||
> **FixIt** is a **clean**, **elegant** but **advanced** blog theme for [Hugo](https://gohugo.io/).
|
||||
|
||||
It is based on the original [LeaveIt Theme](https://github.com/liuzc/LeaveIt) and [KeepIt Theme](https://github.com/Fastbyte01/KeepIt).
|
||||
It is based on the original [LoveIt Theme](https://github.com/dillonzq/LoveIt), [LeaveIt Theme](https://github.com/liuzc/LeaveIt) and [KeepIt Theme](https://github.com/Fastbyte01/KeepIt).
|
||||
|
||||
Since the three themes have a similar look, if you have questions about their differences,
|
||||
read [Why choose LoveIt](#why-choose-loveit) so that you can choose the one that works best for you.
|
||||
The FixIt theme inherits the excellent features of these themes, and adds new features and optimizations on those basis. Please read [Why Choose FixIt](#why-choose-fixit) to learn more.
|
||||
|
||||

|
||||

|
||||
|
||||
## [Demo Site](https://hugoloveit.com/)
|
||||
## [Getting started](https://fixit.lruihao.cn/categories/documentation/)
|
||||
|
||||
To see this theme in action, here is a live [demo site](https://hugoloveit.com/) which is rendered with **LoveIt** theme.
|
||||
Head to this [documentation page](https://fixit.lruihao.cn/theme-documentation-basics/) for a complete guidence to get started with the FixIt theme.
|
||||
|
||||
## Why choose LoveIt
|
||||
Or run [Documentation Site](https://fixit.lruihao.cn) locally:
|
||||
|
||||
Compared to the original LeaveIt theme and the KeepIt theme, the LoveIt theme has the following modifications.
|
||||
```bash
|
||||
git clone --recursive https://github.com/hugo-fixit/FixIt.git FixIt
|
||||
cd FixIt
|
||||
hugo server --source=docs
|
||||
```
|
||||
|
||||
* Custom **Header**
|
||||
* Custom **CSS Style**
|
||||
* A new **home page**, compatible with the latest version of Hugo
|
||||
* A lot of **style detail adjustments,** including color, font size, margins, code preview style
|
||||
* More readable **dark mode**
|
||||
* Some beautiful **CSS animations**
|
||||
* Easy-to-use and self-expanding **table of contents**
|
||||
* More **social links**, **share sites** and **comment system**
|
||||
* **Search** supported by [Lunr.js](https://lunrjs.com/) or [algolia](https://www.algolia.com/)
|
||||
* **Copy code** to clipboard with one click
|
||||
* Extended Markdown syntax for **[Font Awesome](https://fontawesome.com/) icons**
|
||||
* Extended Markdown syntax for **ruby annotation**
|
||||
* Extended Markdown syntax for **fraction**
|
||||
* **Mathematical formula** supported by [KaTeX](https://katex.org/)
|
||||
* **Diagram syntax** shortcode supported by [mermaid](https://github.com/knsv/mermaid)
|
||||
* **Interactive data visualization** shortcode supported by [ECharts](https://echarts.apache.org/)
|
||||
* **Mapbox** shortcode supported by [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js)
|
||||
* Embedded **music player** supported by [APlayer](https://github.com/MoePlayer/APlayer) and [MetingJS](https://github.com/metowolf/MetingJS)
|
||||
* **Bilibili** player supported
|
||||
* Kinds of **admonitions** shortcode supported
|
||||
* Custom style shortcodes supported
|
||||
* **CDN** for all third-party libraries supported
|
||||
* ...
|
||||
In addition, there is the [FixIt wiki](https://github.com/hugo-fixit/FixIt/wiki).
|
||||
|
||||
In short,
|
||||
if you prefer the design language and freedom of the LoveIt theme,
|
||||
if you want to use the extended Font Awesome icons conveniently,
|
||||
if you want to embed mathematical formulas, flowcharts, music or Bilibili videos in your posts,
|
||||
the LoveIt theme may be more suitable for you.
|
||||
## Migrate and Update
|
||||
|
||||
I hope you will LoveIt ❤️!
|
||||
If you are currently using the LoveIt theme (or some other themes), it is very easy to migrate to FixIt.
|
||||
|
||||
You can add this repo as a submodule of your site directory.
|
||||
|
||||
```bash
|
||||
git submodule add https://github.com/hugo-fixit/FixIt.git themes/FixIt
|
||||
```
|
||||
|
||||
Next, go to the `config.toml` and change the default theme to `FixIt`.
|
||||
|
||||
```diff
|
||||
- theme = "LoveIt"
|
||||
+ theme = "FixIt"
|
||||
```
|
||||
|
||||
Now the migration is finished and everything is ready 🎉
|
||||
|
||||
---
|
||||
|
||||
And later you can update the submodule in your site directory to the latest commit using this command:
|
||||
|
||||
```bash
|
||||
git submodule update --remote --merge
|
||||
```
|
||||
|
||||
Or this shell command:
|
||||
|
||||
```bash
|
||||
sh themes/FixIt/fixit_checker.sh
|
||||
```
|
||||
|
||||
## Why choose FixIt
|
||||
|
||||
The FixIt theme inherits the excellent features of themes such as LoveIt, and adds new features and optimizations on those basis, as detailed in [Features](#features). In addition, the FixIt theme has the following advantages:
|
||||
|
||||
* Complete Chinese and English official documentations
|
||||
* Community support: Theme official website, Discussions and official QQ group
|
||||
* Continuously and actively update
|
||||
* Constantly incorporate suggestions and ideas from all sides
|
||||
* Highly open theme customizable section
|
||||
|
||||
In short, if you prefer the design language and freedom of the FixIt theme, and if you like to personalize your own themes as I do, the FixIt theme may be more suitable for you.
|
||||
|
||||
## Who used FixIt
|
||||
|
||||
To see this theme in action, here are some live demo sites which are rendered with **FixIt** theme.
|
||||
|
||||
* [FixIt Theme Official Website](https://fixit.lruihao.cn)
|
||||
* [FixIt Theme Official Website - Preview](https://pre.fixit.lruihao.cn)
|
||||
* [Lruihao's note](https://lruihao.cn)
|
||||
* [hiifong's blog](https://52at.ml)
|
||||
* Add a your site by [making a PR](https://github.com/hugo-fixit/FixIt/pulls) (e.g. [#111](https://github.com/hugo-fixit/FixIt/pull/111))
|
||||
|
||||
## Features
|
||||
|
||||
@@ -82,18 +109,26 @@ I hope you will LoveIt ❤️!
|
||||
|
||||
* **Gravatar** supported by [Gravatar](https://gravatar.com)
|
||||
* Local **Avatar** supported
|
||||
* Up to **64** social links supported
|
||||
* Up to **73** social links supported
|
||||
* Up to **28** share sites supported
|
||||
* **Disqus** comment system supported by [Disqus](https://disqus.com)
|
||||
* **Gitalk** comment system supported by [Gitalk](https://github.com/gitalk/gitalk)
|
||||
* **Valine** comment system supported by [Valine](https://valine.js.org/)
|
||||
* **Waline** comment system supported by [Waline](https://waline.js.org/)
|
||||
* **Facebook comments** system supported by [Facebook](https://developers.facebook.com/docs/plugins/comments/)
|
||||
* **Telegram comments** system supported by [Telegram Comments](https://comments.app/)
|
||||
* **Commento** comment system supported by [Commento](https://commento.io/)
|
||||
* **Utterances** comment system supported by [Utterances](https://utteranc.es/)
|
||||
* **Artalk** comment system supported by [Artalk](https://artalk.js.org/)
|
||||
* **Twikoo** comment system supported by [Twikoo](https://twikoo.js.org/)
|
||||
* **giscus** comment system supported by [giscus](https://giscus.app/)
|
||||
|
||||
### Extended Features
|
||||
|
||||
* **PWA (Progressive Web App)** supported
|
||||
* **Sub Menu** supported
|
||||
* **Content Encryption** supported (Pages, Partial)
|
||||
* **Friends** page embedded template
|
||||
* **Search** supported by [Lunr.js](https://lunrjs.com/) or [algolia](https://www.algolia.com/)
|
||||
* **Twemoji** supported
|
||||
* Automatically **highlighting** code
|
||||
@@ -112,24 +147,18 @@ I hope you will LoveIt ❤️!
|
||||
* **Custom style** shortcode
|
||||
* **Custom script** shortcode
|
||||
* **Animated typing** supported by [TypeIt](https://typeitjs.com/)
|
||||
* **Dynamic scroll** supported by [Smooth Scroll](https://github.com/cferdinandi/smooth-scroll)
|
||||
* **Cookie consent banner** supported by [cookieconsent](https://github.com/osano/cookieconsent)
|
||||
* **Web Watermark** supported by [cell-watermark](https://github.com/Lruihao/watermark)
|
||||
* **Chinese typesetting** supported by [pangu.js](https://github.com/vinta/pangu.js)
|
||||
* ...
|
||||
|
||||
## [Documentation](https://hugoloveit.com/categories/documentation/)
|
||||
|
||||
Build Documentation Locally:
|
||||
|
||||
```bash
|
||||
hugo server --source=exampleSite
|
||||
```
|
||||
|
||||
## Multilingual and i18n
|
||||
|
||||
LoveIt supports the following languages:
|
||||
FixIt supports the following languages:
|
||||
|
||||
* English
|
||||
* Simplified Chinese
|
||||
* Traditional Chinese
|
||||
* French
|
||||
* Polish
|
||||
* Brazilian Portuguese
|
||||
@@ -140,27 +169,37 @@ LoveIt supports the following languages:
|
||||
* Russian
|
||||
* Romanian
|
||||
* Vietnamese
|
||||
* [Contribute with a new language](https://github.com/dillonzq/LoveIt/pulls)
|
||||
* [Contribute with a new language](https://github.com/hugo-fixit/FixIt/pulls)
|
||||
|
||||
[Languages Compatibility](https://hugoloveit.com/theme-documentation-basics/#language-compatibility)
|
||||
[Languages Compatibility](https://fixit.lruihao.cn/theme-documentation-basics/#language-compatibility)
|
||||
|
||||
## [Roadmap](https://github.com/dillonzq/LoveIt/projects/1)
|
||||
## [Roadmap](https://github.com/hugo-fixit/FixIt/projects/1)
|
||||
|
||||
## [Changelog](https://github.com/hugo-fixit/FixIt/blob/master/CHANGELOG.md)
|
||||
|
||||
## Questions, ideas, bugs, pull requests
|
||||
|
||||
All feedback is welcome! Head over to the [issue tracker](https://github.com/dillonzq/LoveIt/issues).
|
||||
All feedback is welcome! Head over to the [issues](https://github.com/hugo-fixit/FixIt/issues) or [discussions](https://github.com/hugo-fixit/FixIt/discussions) tracker.
|
||||
|
||||
## License
|
||||
## Contributing
|
||||
|
||||
LoveIt is licensed under the **MIT** license. Check the [LICENSE file](https://github.com/dillonzq/LoveIt/blob/master/LICENSE) for details.
|
||||
Please see [CONTRIBUTING.md](/CONTRIBUTING.md) for getting started with the contribution.
|
||||
|
||||
Thanks to the authors of following resources included in the theme:
|
||||
Make sure that you follow [CODE_OF_CONDUCT.md](/CODE_OF_CONDUCT.md) while contributing and engaging in the discussions.
|
||||
|
||||
**When contributing, please first discuss the change you wish to make via an issue on this repository before making the actual change**.
|
||||
|
||||
## [Contributors](/contributors.md)
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
<details>
|
||||
<summary>Thanks to the authors of following resources included in the theme:</summary>
|
||||
|
||||
* [normalize.css](https://github.com/necolas/normalize.css)
|
||||
* [Font Awesome](https://fontawesome.com/)
|
||||
* [Simple Icons](https://github.com/simple-icons/simple-icons)
|
||||
* [Animate.css](https://daneden.github.io/animate.css/)
|
||||
* [Smooth Scroll](https://github.com/cferdinandi/smooth-scroll)
|
||||
* [autocomplete.js](https://github.com/algolia/autocomplete.js)
|
||||
* [Lunr.js](https://lunrjs.com/)
|
||||
* [algoliasearch](https://github.com/algolia/algoliasearch-client-javascript)
|
||||
@@ -168,7 +207,6 @@ Thanks to the authors of following resources included in the theme:
|
||||
* [object-fit-images](https://github.com/fregante/object-fit-images)
|
||||
* [Twemoji](https://github.com/twitter/twemoji)
|
||||
* [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js)
|
||||
* [clipboard.js](https://github.com/zenorocha/clipboard.js)
|
||||
* [Sharer.js](https://github.com/ellisonleao/sharer.js)
|
||||
* [TypeIt](https://typeitjs.com/)
|
||||
* [KaTeX](https://katex.org/)
|
||||
@@ -180,17 +218,22 @@ Thanks to the authors of following resources included in the theme:
|
||||
* [Gitalk](https://github.com/gitalk/gitalk)
|
||||
* [Valine](https://valine.js.org/)
|
||||
* [cookieconsent](https://github.com/osano/cookieconsent)
|
||||
* [cell-watermark](https://github.com/Lruihao/watermark)
|
||||
* [pangu.js](https://github.com/vinta/pangu.js)
|
||||
* [Artalk](https://artalk.js.org/)
|
||||
* [Waline](https://waline.js.org/)
|
||||
* [Twikoo](https://twikoo.js.org/)
|
||||
* [github-corners](https://github.com/tholman/github-corners)
|
||||
* [giscus](https://giscus.app/)
|
||||
* [crypto-js](https://github.com/brix/crypto-js)
|
||||
* [vConsole](https://github.com/Tencent/vConsole)
|
||||
* [eruda](https://github.com/liriliri/eruda)
|
||||
</details>
|
||||
|
||||
## License
|
||||
|
||||
FixIt is licensed under the **MIT** license. Check the [LICENSE file](https://github.com/hugo-fixit/FixIt/blob/master/LICENSE) for details.
|
||||
|
||||
## Author
|
||||
|
||||
[Dillon](https://dillonzq.com)
|
||||
|
||||
## Sponsor
|
||||
|
||||
If you enjoy the theme, please consider buying me a coffee ☕️.
|
||||
|
||||
* [PayPal](https://paypal.me/dillonzq)
|
||||
* [Alipay](https://github.com/dillonzq/LoveIt/raw/master/images/Alipay.jpg)
|
||||
* [Wechat](https://github.com/dillonzq/LoveIt/raw/master/images/Wechat.jpg)
|
||||
|
||||
Thanks! ❤️
|
||||
[Lruihao](https://lruihao.cn)
|
||||
|
||||
+119
-72
@@ -1,55 +1,86 @@
|
||||
# LoveIt 主题 | Hugo [](https://app.netlify.com/sites/hugo-loveit/deploys)
|
||||
# FixIt 主题 | Hugo
|
||||
|
||||
[](https://github.com/dillonzq/LoveIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://github.com/dillonzq/LoveIt/blob/master/LICENSE)
|
||||
[](https://app.circleci.com/pipelines/github/dillonzq/LoveIt)
|
||||
[](https://github.com/hugo-fixit/FixIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://github.com/hugo-fixit/FixIt/blob/master/LICENSE)
|
||||
|
||||
[English README](https://github.com/dillonzq/LoveIt/blob/master/README.md) | 简体中文说明
|
||||
[English README](https://github.com/hugo-fixit/FixIt/blob/master/README.md) | 简体中文说明
|
||||
|
||||
> [LoveIt](https://github.com/dillonzq/LoveIt) 是一个**简洁**、**优雅**且**高效**的 [Hugo](https://gohugo.io/) 博客主题。
|
||||
> [FixIt](https://github.com/hugo-fixit/FixIt) 是一个**简洁**、**优雅**且**高效**的 [Hugo](https://gohugo.io/) 博客主题。
|
||||
|
||||
它的原型基于 [LeaveIt 主题](https://github.com/liuzc/LeaveIt) 和 [KeepIt 主题](https://github.com/Fastbyte01/KeepIt)。
|
||||
它的原型基于 [LoveIt 主题](https://github.com/dillonzq/LoveIt), [LeaveIt 主题](https://github.com/liuzc/LeaveIt) 和 [KeepIt 主题](https://github.com/Fastbyte01/KeepIt)。
|
||||
|
||||
由于三个主题外观的相似性,如果你对于它们的不同之处有疑问,请阅读 [为什么选择 LoveIt](#为什么选择-LoveIt),以便你能选择最适合你的一个。
|
||||
FixIt 主题继承了这些主题的优秀功能,并在此基础上添加了新的功能与优化,请阅读 [为什么选择 FixIt](#为什么选择-FixIt) 来了解更多。
|
||||
|
||||

|
||||

|
||||
|
||||
## 主题[预览](https://hugoloveit.com/zh-cn/)
|
||||
## [立即开始](https://fixit.lruihao.cn/zh-cn/categories/documentation/)
|
||||
|
||||
为了直观地浏览主题特性,这里有一个基于 **LoveIt** 主题渲染的 [预览网站](https://hugoloveit.com/zh-cn/)。
|
||||
前往这篇 [文档](https://fixit.lruihao.cn/zh-cn/theme-documentation-basics/),阅读关于安装与使用的详细指南。
|
||||
|
||||
## 为什么选择 LoveIt
|
||||
或者,在本地构建 [文档](https://fixit.lruihao.cn/zh-cn/):
|
||||
|
||||
相较于 LeaveIt 主题 和 KeepIt 主题,LoveIt 主题主要有以下修改
|
||||
```bash
|
||||
git clone --recursive https://github.com/hugo-fixit/FixIt.git FixIt
|
||||
cd FixIt
|
||||
hugo server --source=docs
|
||||
```
|
||||
|
||||
* 自定义**标题栏**
|
||||
* 自定义**CSS 样式**
|
||||
* 焕然一新的**主页**,已经兼容最新版 Hugo
|
||||
* 大量的**样式细节调整**,包括颜色、字体大小、边距、代码预览样式
|
||||
* 可读性更强的**深色模式**
|
||||
* 一些美观的 **CSS 动画**
|
||||
* 易用和自动展开的**文章目录**
|
||||
* 支持更多的**社交链接**、**网站分享**和**评论系统**
|
||||
* 支持基于 [Lunr.js](https://lunrjs.com/) 或 [algolia](https://www.algolia.com/) 的**搜索**
|
||||
* 一键**复制代码**到剪贴板
|
||||
* 支持基于 **[Font Awesome](https://fontawesome.com/) 图标**的扩展 Markdown 语法
|
||||
* 支持**上标注释**的扩展 Markdown 语法
|
||||
* 支持**分数**的扩展 Markdown 语法
|
||||
* 支持基于 [KaTeX](https://katex.org/) 的**数学公式**
|
||||
* 支持基于 [mermaid](https://github.com/knsv/mermaid) 的**图表**生成功能
|
||||
* 支持基于 [ECharts](https://echarts.apache.org/) 的**交互式数据可视化**生成功能
|
||||
* 支持基于 [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js) 的 **Mapbox** 地图显示功能
|
||||
* 支持基于 [APlayer](https://github.com/MoePlayer/APlayer) 和 [MetingJS](https://github.com/metowolf/MetingJS) 的内嵌**音乐播放器**
|
||||
* 支持内嵌 **Bilibili** 视频
|
||||
* 支持多种**注释**的 shortcode
|
||||
* 支持自定义样式的 shortcode
|
||||
* 支持所有第三方库的 **CDN**
|
||||
* ...
|
||||
除此之外,还有[FixIt 主题维基](https://github.com/hugo-fixit/FixIt/wiki)。
|
||||
|
||||
所以,如果你更偏好 LoveIt 主题的设计语言和自由度,如果你想便捷地使用扩展的 Font Awesome 图标,如果你想在文章内嵌数学公式、流程图、音乐或是 Bilibili 视频,
|
||||
那么,LoveIt 主题可能是更适合你。
|
||||
希望你会 LoveIt ❤️!
|
||||
## 迁移和升级
|
||||
|
||||
如果你现在正在使用 LoveIt 主题(或者一些其他的主题),你可以很容易地迁移至 FixIt。
|
||||
|
||||
你可以将这个主题仓库添加为你的网站目录的子模块。
|
||||
|
||||
```bash
|
||||
git submodule add https://github.com/hugo-fixit/FixIt.git themes/FixIt
|
||||
```
|
||||
|
||||
接着,前往 `config.toml` 并将默认主题更改为 `FixIt`。
|
||||
|
||||
```diff
|
||||
- theme = "LoveIt"
|
||||
+ theme = "FixIt"
|
||||
```
|
||||
|
||||
这样就完成了迁移工作,现在一切准备就绪 🎉
|
||||
|
||||
---
|
||||
|
||||
之后,你可以在站点目录通过这条命令来将主题更新至最新版本:
|
||||
|
||||
```bash
|
||||
git submodule update --remote --merge
|
||||
```
|
||||
|
||||
或者这条 shell 命令:
|
||||
|
||||
```bash
|
||||
sh themes/FixIt/fixit_checker.sh
|
||||
```
|
||||
|
||||
## 为什么选择 FixIt
|
||||
|
||||
FixIt 主题继承了 LoveIt 等主题的优秀功能,并在它们的基础上添加了新的功能与优化,详见 [特性](#特性)。除此之外,FixIt 主题还有以下优点:
|
||||
|
||||
* 完善的中英文官方文档
|
||||
* 社区支持:主题官网、Discussions 和官方 QQ 群
|
||||
* 持续积极地更新
|
||||
* 不断收纳各方的建议和想法
|
||||
* 高度开放主题可自定义部分
|
||||
|
||||
总之,如果你更偏好 FixIt 主题的设计语言和自由度,如果你和我一样喜欢个性化自定义主题,那么,FixIt 主题可能是更适合你。
|
||||
|
||||
## 谁在用 FixIt
|
||||
为了直观地浏览主题特性,这里有一些基于 **FixIt** 主题渲染的预览网站。
|
||||
|
||||
* [FixIt 主题官网](https://fixit.lruihao.cn/zh-cn/)
|
||||
* [FixIt 主题官网 - 预览](https://pre.fixit.lruihao.cn/zh-cn/)
|
||||
* [李瑞豪的博客](https://lruihao.cn)
|
||||
* [hiifong 的博客](https://52at.ml)
|
||||
* 你可以通过 [提交 PR](https://github.com/hugo-fixit/FixIt/pulls) 添加你的网站(例如:[#111](https://github.com/hugo-fixit/FixIt/pull/111))
|
||||
|
||||
## 特性
|
||||
|
||||
@@ -77,18 +108,26 @@
|
||||
|
||||
* 支持 **[Gravatar](https://gravatar.com)** 头像
|
||||
* 支持本地**头像**
|
||||
* 支持多达 **64** 种社交链接
|
||||
* 支持多达 **73** 种社交链接
|
||||
* 支持多达 **28** 种网站分享
|
||||
* 支持 **[Disqus](https://disqus.com)** 评论系统
|
||||
* 支持 **[Gitalk](https://github.com/gitalk/gitalk)** 评论系统
|
||||
* 支持 **[Valine](https://valine.js.org/)** 评论系统
|
||||
* 支持 **[Waline](https://waline.js.org/)** 评论系统
|
||||
* 支持 **[Facebook](https://developers.facebook.com/docs/plugins/comments/) 评论**系统
|
||||
* 支持 **[Telegram comments](https://comments.app/) 评论**系统
|
||||
* 支持 **[Commento](https://commento.io/)** 评论系统
|
||||
* 支持 **[Utterances](https://utteranc.es/)** 评论系统
|
||||
* 支持 **[Artalk](https://artalk.js.org/)** 评论系统
|
||||
* 支持 **[Twikoo](https://twikoo.js.org/)** 评论系统
|
||||
* 支持 **[giscus](https://giscus.app/zh-CN/)** 评论系统
|
||||
|
||||
### 扩展功能
|
||||
|
||||
* 支持**渐进式网页应用**
|
||||
* 支持**二级菜单**
|
||||
* 支持**内容加密**(页面、局部)
|
||||
* 支持**友情链接**的页面模板
|
||||
* 支持基于 [Lunr.js](https://lunrjs.com/) 或 [algolia](https://www.algolia.com/) 的**搜索**
|
||||
* 支持 **Twemoji**
|
||||
* 支持**代码高亮**
|
||||
@@ -107,24 +146,18 @@
|
||||
* 支持**自定义样式**的 shortcode
|
||||
* 支持**自定义脚本**的 shortcode
|
||||
* 支持基于 [TypeIt](https://typeitjs.com/) 的**打字动画** shortcode
|
||||
* 支持基于 [Smooth Scroll](https://github.com/cferdinandi/smooth-scroll) 的**滚动动画**
|
||||
* 支持基于 [cookieconsent](https://github.com/osano/cookieconsent) 的 **Cookie 许可横幅**
|
||||
* 支持基于 [cell-watermark](https://github.com/Lruihao/watermark) 的**网页水印**
|
||||
* 支持基于 [pangu.js](https://github.com/vinta/pangu.js) 的**中文排版**
|
||||
* ...
|
||||
|
||||
## [文档](https://hugoloveit.com/zh-cn/categories/documentation/)
|
||||
|
||||
在本地构建文档:
|
||||
|
||||
```bash
|
||||
hugo server --source=exampleSite
|
||||
```
|
||||
|
||||
## 多语言和国际化
|
||||
|
||||
LoveIt 支持下列语言:
|
||||
FixIt 支持下列语言:
|
||||
|
||||
* 英语
|
||||
* 简体中文
|
||||
* 繁体中文
|
||||
* 法语
|
||||
* 波兰语
|
||||
* 巴西葡萄牙语
|
||||
@@ -135,27 +168,37 @@ LoveIt 支持下列语言:
|
||||
* 俄语
|
||||
* 罗马尼亚语
|
||||
* 越南语
|
||||
* [贡献一种新的语言](https://github.com/dillonzq/LoveIt/pulls)
|
||||
* [贡献一种新的语言](https://github.com/hugo-fixit/FixIt/pulls)
|
||||
|
||||
[语言兼容性](https://hugoloveit.com/zh-cn/theme-documentation-basics/#language-compatibility)
|
||||
[语言兼容性](https://fixit.lruihao.cn/zh-cn/theme-documentation-basics/#language-compatibility)
|
||||
|
||||
## [路线图](https://github.com/dillonzq/LoveIt/projects/1)
|
||||
## [路线图](https://github.com/hugo-fixit/FixIt/projects/1)
|
||||
|
||||
## 问题、想法、 bugs 和 PRs
|
||||
## [更新日志](https://github.com/hugo-fixit/FixIt/blob/master/CHANGELOG.md)
|
||||
|
||||
所有的反馈都是欢迎的!详见 [issue tracker](https://github.com/dillonzq/LoveIt/issues)。
|
||||
## 问题、想法、bugs 和 PRs
|
||||
|
||||
## 许可协议
|
||||
所有的反馈都是欢迎的!详见 [议题](https://github.com/hugo-fixit/FixIt/issues) 或者 [讨论](https://github.com/hugo-fixit/FixIt/discussions)。
|
||||
|
||||
LoveIt 根据 **MIT** 许可协议授权。 更多信息请查看 [LICENSE 文件](https://github.com/dillonzq/LoveIt/blob/master/LICENSE)。
|
||||
## 参与贡献
|
||||
|
||||
LoveIt 主题中用到了以下项目,感谢它们的作者:
|
||||
请参阅 [CONTRIBUTING.md](/CONTRIBUTING.md) 以了解贡献该项目的基本信息。
|
||||
|
||||
确保在贡献和参与讨论时遵守 [CODE_OF_CONDUCT.md](/CODE_OF_CONDUCT.md)。
|
||||
|
||||
**贡献时,请先通过此存储库上的问题讨论您希望进行的更改,然后再进行实际更改**。
|
||||
|
||||
## [所有贡献者](/contributors.md)
|
||||
|
||||
## 致谢
|
||||
|
||||
<details>
|
||||
<summary>FixIt 主题中用到了以下项目,感谢它们的作者:</summary>
|
||||
|
||||
* [normalize.css](https://github.com/necolas/normalize.css)
|
||||
* [Font Awesome](https://fontawesome.com/)
|
||||
* [Simple Icons](https://github.com/simple-icons/simple-icons)
|
||||
* [Animate.css](https://daneden.github.io/animate.css/)
|
||||
* [Smooth Scroll](https://github.com/cferdinandi/smooth-scroll)
|
||||
* [autocomplete.js](https://github.com/algolia/autocomplete.js)
|
||||
* [Lunr.js](https://lunrjs.com/)
|
||||
* [algoliasearch](https://github.com/algolia/algoliasearch-client-javascript)
|
||||
@@ -163,7 +206,6 @@ LoveIt 主题中用到了以下项目,感谢它们的作者:
|
||||
* [object-fit-images](https://github.com/fregante/object-fit-images)
|
||||
* [Twemoji](https://github.com/twitter/twemoji)
|
||||
* [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js)
|
||||
* [clipboard.js](https://github.com/zenorocha/clipboard.js)
|
||||
* [Sharer.js](https://github.com/ellisonleao/sharer.js)
|
||||
* [TypeIt](https://typeitjs.com/)
|
||||
* [KaTeX](https://katex.org/)
|
||||
@@ -175,17 +217,22 @@ LoveIt 主题中用到了以下项目,感谢它们的作者:
|
||||
* [Gitalk](https://github.com/gitalk/gitalk)
|
||||
* [Valine](https://valine.js.org/)
|
||||
* [cookieconsent](https://github.com/osano/cookieconsent)
|
||||
* [cell-watermark](https://github.com/Lruihao/watermark)
|
||||
* [pangu.js](https://github.com/vinta/pangu.js)
|
||||
* [Artalk](https://artalk.js.org/)
|
||||
* [Waline](https://waline.js.org/)
|
||||
* [Twikoo](https://twikoo.js.org/)
|
||||
* [github-corners](https://github.com/tholman/github-corners)
|
||||
* [giscus](https://giscus.app/zh-CN)
|
||||
* [crypto-js](https://github.com/brix/crypto-js)
|
||||
* [vConsole](https://github.com/Tencent/vConsole)
|
||||
* [eruda](https://github.com/liriliri/eruda)
|
||||
</details>
|
||||
|
||||
## 许可协议
|
||||
|
||||
FixIt 根据 **MIT** 许可协议授权。 更多信息请查看 [LICENSE 文件](https://github.com/hugo-fixit/FixIt/blob/master/LICENSE)。
|
||||
|
||||
## 作者
|
||||
|
||||
[Dillon](https://dillonzq.com)
|
||||
|
||||
## 赞助支持
|
||||
|
||||
如果你喜爱这个主题, 请考虑给我买杯咖啡 ☕️.
|
||||
|
||||
* [PayPal](https://paypal.me/dillonzq)
|
||||
* [支付宝](https://github.com/dillonzq/LoveIt/raw/master/images/Alipay.jpg)
|
||||
* [微信支付](https://github.com/dillonzq/LoveIt/raw/master/images/Wechat.jpg)
|
||||
|
||||
谢谢! ❤️
|
||||
[Lruihao](https://lruihao.cn)
|
||||
|
||||
+2
-22
@@ -2,27 +2,7 @@
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
subtitle: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
author: ""
|
||||
authorLink: ""
|
||||
description: ""
|
||||
|
||||
tags: []
|
||||
categories: []
|
||||
|
||||
hiddenFromHomePage: false
|
||||
hiddenFromSearch: false
|
||||
|
||||
featuredImage: ""
|
||||
featuredImagePreview: ""
|
||||
|
||||
toc:
|
||||
enable: true
|
||||
math:
|
||||
enable: false
|
||||
lightgallery: false
|
||||
license: ""
|
||||
keywords: ""
|
||||
comment: false
|
||||
---
|
||||
|
||||
<!--more-->
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
subtitle: ""
|
||||
type: "friends"
|
||||
date: {{ .Date }}
|
||||
description: "{{ .Site.Author.name }}'s friends"
|
||||
keywords:
|
||||
- Hugo
|
||||
- friends tempalate
|
||||
comment: false
|
||||
---
|
||||
|
||||
<!-- When you set data `friends.yml` in `yourProject/data/` directory, it will be automatically loaded here. -->
|
||||
---
|
||||
<!-- You can define additional content below for this page. -->
|
||||
## Base info
|
||||
|
||||
```yaml
|
||||
- nickname: Lruihao
|
||||
avatar: https://lruihao.cn/images/avatar.jpg
|
||||
url: https://lruihao.cn
|
||||
description: Lruihao's Note
|
||||
```
|
||||
|
||||
## Friendly Reminder
|
||||
|
||||
{{< admonition info "Notice" true >}}
|
||||
1. If you want to exchange link, please leave a comment in the above format. (personal non-commercial blogs / websites only)
|
||||
2. :(fa-solid fa-exclamation-triangle): Website failure, stop maintenance and improper content may be unlinked!
|
||||
3. Those websites that do not respect other people's labor achievements, reprint without source, or malicious acts, please do not come to exchange.
|
||||
{{< /admonition >}}
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
type: "offline"
|
||||
description: "{{ T "offlineTitle" }} - {{ .Site.Title }}"
|
||||
keywords:
|
||||
- PWA
|
||||
- offline
|
||||
- 离线
|
||||
---
|
||||
|
||||
<!-- You need do nothing for this page. -->
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
subtitle: ""
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
author: ""
|
||||
authorLink: ""
|
||||
authorEmail: ""
|
||||
description: ""
|
||||
keywords: ""
|
||||
license: ""
|
||||
comment: false
|
||||
weight: 0
|
||||
|
||||
tags:
|
||||
- draft
|
||||
categories:
|
||||
- draft
|
||||
|
||||
hiddenFromHomePage: false
|
||||
hiddenFromSearch: false
|
||||
|
||||
summary: ""
|
||||
resources:
|
||||
- name: featured-image
|
||||
src: featured-image.jpg
|
||||
- name: featured-image-preview
|
||||
src: featured-image-preview.jpg
|
||||
|
||||
toc:
|
||||
enable: true
|
||||
math:
|
||||
enable: false
|
||||
lightgallery: false
|
||||
seo:
|
||||
images: []
|
||||
|
||||
repost:
|
||||
enable: true
|
||||
url: ""
|
||||
|
||||
# See details front matter: /theme-documentation-content/#front-matter
|
||||
---
|
||||
|
||||
<!--more-->
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
subtitle: ""
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
author: ""
|
||||
authorLink: ""
|
||||
authorEmail: ""
|
||||
description: ""
|
||||
keywords: ""
|
||||
license: ""
|
||||
comment: false
|
||||
weight: 0
|
||||
|
||||
tags:
|
||||
- draft
|
||||
categories:
|
||||
- draft
|
||||
|
||||
hiddenFromHomePage: false
|
||||
hiddenFromSearch: false
|
||||
|
||||
summary: ""
|
||||
resources:
|
||||
- name: featured-image
|
||||
src: featured-image.jpg
|
||||
- name: featured-image-preview
|
||||
src: featured-image-preview.jpg
|
||||
|
||||
toc:
|
||||
enable: true
|
||||
math:
|
||||
enable: false
|
||||
lightgallery: false
|
||||
seo:
|
||||
images: []
|
||||
|
||||
repost:
|
||||
enable: true
|
||||
url: ""
|
||||
|
||||
# See details front matter: /theme-documentation-content/#front-matter
|
||||
---
|
||||
|
||||
<!--more-->
|
||||
@@ -0,0 +1,48 @@
|
||||
// ==============================
|
||||
// Common Styles
|
||||
// 常用样式
|
||||
// ==============================
|
||||
|
||||
.text-truncate {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.text-start {
|
||||
text-align: left !important;
|
||||
}
|
||||
.text-end {
|
||||
text-align: right !important;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.d-none {
|
||||
display: none !important;
|
||||
}
|
||||
.d-none-desktop {
|
||||
display: none;
|
||||
}
|
||||
.d-none-mobile {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ms-1 {
|
||||
margin-left: 0.25rem !important;
|
||||
}
|
||||
.me-1 {
|
||||
margin-right: 0.25rem !important;
|
||||
}
|
||||
.ps-1 {
|
||||
padding-left: 0.25rem !important;
|
||||
}
|
||||
.pe-1 {
|
||||
padding-right: 0.25rem !important;
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.text-#{$color} {
|
||||
color: #{$value} !important;
|
||||
}
|
||||
}
|
||||
+27
-14
@@ -4,17 +4,26 @@ html {
|
||||
font-display: swap;
|
||||
font-size: $global-font-size;
|
||||
line-height: $global-line-height;
|
||||
width:100%;
|
||||
width: 100%;
|
||||
scroll-behavior: smooth;
|
||||
overflow: overlay;
|
||||
}
|
||||
|
||||
@media screen and (prefers-reduced-motion: reduce) {
|
||||
html {
|
||||
scroll-behavior: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/* scrollbar, only support webkit */
|
||||
::-webkit-scrollbar {
|
||||
width: .5rem;
|
||||
height: .5rem;
|
||||
width: 0.5rem;
|
||||
height: 0.5rem;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: $scrollbar-color;
|
||||
@include border-radius($global-border-radius);
|
||||
|
||||
&:hover {
|
||||
background-color: $scrollbar-hover-color;
|
||||
@@ -24,7 +33,7 @@ html {
|
||||
::selection {
|
||||
background-color: $selection-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $selection-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -35,21 +44,25 @@ body {
|
||||
@include overflow-wrap(break-word);
|
||||
scrollbar-color: auto;
|
||||
|
||||
&[theme=dark] {
|
||||
&[theme='dark'] {
|
||||
color: $global-font-color-dark;
|
||||
background-color: $global-background-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
@include object-fit(contain);
|
||||
@include border-radius($global-border-radius/2);
|
||||
}
|
||||
|
||||
iframe {
|
||||
@include border-radius($global-border-radius);
|
||||
}
|
||||
|
||||
@include ms;
|
||||
@include link(true, true);
|
||||
|
||||
@import "../_partial/mask";
|
||||
@import "../_partial/icon";
|
||||
@import "../_partial/details";
|
||||
@import "../_partial/fixed-button";
|
||||
@import "../_partial/cookieconsent";
|
||||
|
||||
img {
|
||||
@include object-fit(contain);
|
||||
}
|
||||
@import '../_partial/mask';
|
||||
@import '../_partial/icon';
|
||||
@import '../_partial/details';
|
||||
@import '../_partial/_widgets';
|
||||
|
||||
@@ -8,8 +8,20 @@
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
|
||||
.container {
|
||||
aside:first-child {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
&.container {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
&.container-reverse {
|
||||
@extend .container;
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+112
-21
@@ -1,12 +1,62 @@
|
||||
@media only screen and (min-width: 1441px) {
|
||||
.page {
|
||||
width: 60%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 64%;
|
||||
}
|
||||
|
||||
[page-style='narrow'] & {
|
||||
max-width: 800px;
|
||||
}
|
||||
}
|
||||
|
||||
aside {
|
||||
width: 20%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 18%;
|
||||
}
|
||||
|
||||
[page-style='narrow'] & {
|
||||
width: calc(50% - 400px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1440px) {
|
||||
.page {
|
||||
width: 56%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 60%;
|
||||
}
|
||||
}
|
||||
|
||||
aside {
|
||||
width: 22%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
.page {
|
||||
width: 52%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 56%;
|
||||
}
|
||||
}
|
||||
|
||||
aside {
|
||||
width: 24%;
|
||||
|
||||
[page-style='wide'] & {
|
||||
width: 22%;
|
||||
}
|
||||
}
|
||||
|
||||
#header-desktop .header-wrapper {
|
||||
@@ -19,8 +69,8 @@
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 960px) {
|
||||
#toc-auto {
|
||||
display: none;
|
||||
aside {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#toc-static {
|
||||
@@ -28,7 +78,7 @@
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 80%;
|
||||
width: 80% !important;
|
||||
}
|
||||
|
||||
#header-desktop .header-wrapper {
|
||||
@@ -41,23 +91,24 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
#header-mobile {
|
||||
#header-mobile,
|
||||
.d-none-desktop {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body.blur {
|
||||
overflow: hidden;
|
||||
.d-none-mobile {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
width: 100% !important;
|
||||
|
||||
[header-mobile] & {
|
||||
padding-top: $header-height;
|
||||
}
|
||||
|
||||
[header-mobile=normal] & {
|
||||
padding-top: 0;
|
||||
.content {
|
||||
[id] {
|
||||
[header-mobile='normal'] & {
|
||||
scroll-margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.categories-card {
|
||||
@@ -67,14 +118,54 @@
|
||||
}
|
||||
}
|
||||
|
||||
.copyright {
|
||||
.copyright-line {
|
||||
.icp-splitter {
|
||||
display: none;
|
||||
}
|
||||
.icp-br {
|
||||
display: block;
|
||||
}
|
||||
footer {
|
||||
.footer-container {
|
||||
font-size: 0.618rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only print {
|
||||
@page {
|
||||
size: A4 portrait;
|
||||
margin: 1.27cm;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100% !important;
|
||||
padding-top: 0 !important;
|
||||
|
||||
.single-title,
|
||||
.single-subtitle,
|
||||
.post-meta {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1:not(.single-title),
|
||||
.page-break-before {
|
||||
page-break-before: always;
|
||||
}
|
||||
|
||||
.page-break-after {
|
||||
page-break-after: always;
|
||||
}
|
||||
}
|
||||
|
||||
.print-d-none,
|
||||
header,
|
||||
footer .footer-line:not(.powered):not(.copyright),
|
||||
#toc-auto,
|
||||
.comment-visitors,
|
||||
.comment-count,
|
||||
.code-header>.ellipses,
|
||||
.code-header>.edit,
|
||||
.code-header>.copy,
|
||||
.post-info-share,
|
||||
.post-info-more section:last-child,
|
||||
.post-nav,
|
||||
#fixed-buttons,
|
||||
#comments,
|
||||
.github-corner {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,19 +47,19 @@
|
||||
}
|
||||
|
||||
@mixin placeholder($color) {
|
||||
input::-webkit-input-placeholder{
|
||||
input::-webkit-input-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
|
||||
input:-moz-placeholder{
|
||||
input:-moz-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
|
||||
input::-moz-placeholder{
|
||||
input::-moz-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
|
||||
input:-ms-input-placeholder{
|
||||
input:-ms-input-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@mixin details-transition-open {
|
||||
@include transition(max-height 0.8s cubic-bezier(0, 1, 0, 1) -0.1s);
|
||||
@include transition(max-height 0.2s cubic-bezier(0, 1, 0, 1) -0.1s);
|
||||
}
|
||||
|
||||
@mixin details-transition-close {
|
||||
@include transition(max-height 0.8s cubic-bezier(0.5, 0, 1, 0) 0s);
|
||||
@include transition(max-height 0.2s cubic-bezier(0.5, 0, 1, 0) 0s);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@import "_compatibility";
|
||||
@import "_link";
|
||||
@import "_blur";
|
||||
@import "_details";
|
||||
@import '_compatibility';
|
||||
@import '_link';
|
||||
@import '_blur';
|
||||
@import '_details';
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
@mixin link($light, $dark) {
|
||||
a, a::before, a::after {
|
||||
a,
|
||||
a::before,
|
||||
a::after {
|
||||
text-decoration: none;
|
||||
|
||||
color: if($light, $global-link-color, $single-link-color);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: if($dark, $global-link-color-dark, $single-link-color-dark);
|
||||
}
|
||||
}
|
||||
@@ -13,7 +15,7 @@
|
||||
a:hover {
|
||||
color: if($light, $global-link-hover-color, $single-link-hover-color);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: if($dark, $global-link-hover-color-dark, $single-link-hover-color-dark);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,28 @@
|
||||
.archive {
|
||||
.single-title {
|
||||
padding: 1rem 0 0.5rem;
|
||||
margin: 0;
|
||||
font-size: 1.6rem;
|
||||
font-weight: bold;
|
||||
line-height: 140%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.single-subtitle {
|
||||
margin: 0.4rem 0;
|
||||
font-size: 1.2rem;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
line-height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.group-title {
|
||||
font-size: 1.2rem;
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
@import "../_partial/_archive/terms";
|
||||
@import "../_partial/_archive/tags";
|
||||
@import '../_partial/_archive/terms';
|
||||
@import '../_partial/_archive/tags';
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* @Description: Style of layout named 'friends'.
|
||||
* @Author: Lruihao <https://lruihao.cn>
|
||||
* @Updated: 2022/3/11 21:36
|
||||
*/
|
||||
|
||||
.friend-links {
|
||||
margin-top: 1rem;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
.friend-links {
|
||||
justify-content: space-around;
|
||||
}
|
||||
}
|
||||
.friend-link {
|
||||
width: 150px;
|
||||
height: 200px;
|
||||
font-size: 1rem;
|
||||
text-align: center;
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
box-sizing: border-box;
|
||||
box-shadow: 3px 3px 5px #aaa;
|
||||
@include border-radius($global-border-radius);
|
||||
border: none;
|
||||
transition-duration: 0.3s;
|
||||
margin-bottom: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.friend-link:hover {
|
||||
background: #fff;
|
||||
transform: scale(1.03);
|
||||
box-shadow: 0 0 3px #aaa;
|
||||
}
|
||||
.friend-avatar {
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
width: 100% !important;
|
||||
height: 150px !important;
|
||||
@include border-radius($global-border-radius);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.friend-nickname {
|
||||
display: block;
|
||||
position: relative;
|
||||
color: #2bbc8a;
|
||||
font-weight: bold;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 18px;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.friend-nickname:hover {
|
||||
color: #d480aa;
|
||||
}
|
||||
+21
-20
@@ -1,11 +1,11 @@
|
||||
.home {
|
||||
.home-profile {
|
||||
@include transform(translateY( 16vh));
|
||||
padding: 0 0 .5rem;
|
||||
@include transform(translateY(16vh));
|
||||
padding: 0 0 0.5rem;
|
||||
text-align: center;
|
||||
|
||||
.home-avatar {
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
|
||||
img {
|
||||
display: inline-block;
|
||||
@@ -13,12 +13,12 @@
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
@include border-radius(100%);
|
||||
@include box-shadow(0 0 0 .3618em rgba(0, 0, 0, .05));
|
||||
@include box-shadow(0 0 0 0.3618em rgba(0, 0, 0, 0.05));
|
||||
@include transition(all 0.4s ease);
|
||||
|
||||
&:hover {
|
||||
position: relative;
|
||||
@include transform(translateY(-.75rem));
|
||||
@include transform(translateY(-0.75rem));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,18 +27,18 @@
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.home-subtitle {
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.links {
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
font-size: 1.5rem;
|
||||
|
||||
a * {
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
img {
|
||||
height: 1.5rem;
|
||||
padding: 0 .25rem;
|
||||
padding: 0 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,10 +56,10 @@
|
||||
line-height: 1.5rem;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -78,11 +78,11 @@
|
||||
|
||||
.summary {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: .8rem;
|
||||
padding-bottom: 0.8rem;
|
||||
color: $global-font-color;
|
||||
border-bottom: 1px dashed $global-border-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-color-dark;
|
||||
border-bottom: 1px dashed $global-border-color-dark;
|
||||
}
|
||||
@@ -121,14 +121,14 @@
|
||||
.content {
|
||||
@include box(vertical);
|
||||
-webkit-line-clamp: 3;
|
||||
margin-top: .3rem;
|
||||
margin-top: 0.3rem;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@include overflow-wrap(break-word);
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
display: inline;
|
||||
|
||||
&::after {
|
||||
content: "\A";
|
||||
content: '\A';
|
||||
white-space: pre;
|
||||
}
|
||||
}
|
||||
@@ -154,21 +154,22 @@
|
||||
|
||||
@include link(false, true);
|
||||
|
||||
b, strong {
|
||||
b,
|
||||
strong {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.post-footer {
|
||||
margin-top: .4rem;
|
||||
margin-top: 0.4rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
|
||||
@include link(false, false);
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
.page {
|
||||
position: relative;
|
||||
max-width: 800px;
|
||||
width: 60%;
|
||||
margin: 0 auto;
|
||||
|
||||
[header-desktop] & {
|
||||
padding-top: $header-height;
|
||||
}
|
||||
.content {
|
||||
[id] {
|
||||
scroll-margin-top: $header-height;
|
||||
|
||||
[header-desktop=normal] & {
|
||||
padding-top: 0;
|
||||
[header-desktop='normal'] & {
|
||||
scroll-margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include blur;
|
||||
}
|
||||
|
||||
@import "_single";
|
||||
@import "_special";
|
||||
@import "_archive";
|
||||
@import "_home";
|
||||
@import "_404";
|
||||
@import '_single';
|
||||
@import '_special';
|
||||
@import '_archive';
|
||||
@import '_home';
|
||||
@import '_404';
|
||||
@import '_offline';
|
||||
@import '_friends';
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#content-offline {
|
||||
@include transform(translateY(30vh));
|
||||
text-align: center;
|
||||
|
||||
.offline-title {
|
||||
font-size: 3.6rem;
|
||||
}
|
||||
.offline-subtitle {
|
||||
margin: 0.4rem 0;
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
line-height: 100%;
|
||||
color: #57606a;
|
||||
}
|
||||
.error-text {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
+107
-53
@@ -1,15 +1,24 @@
|
||||
@import "../_partial/_single/toc";
|
||||
@import '../_partial/_single/toc';
|
||||
@import '../_partial/_single/fixit-decryptor';
|
||||
|
||||
.single {
|
||||
.single-title {
|
||||
margin: 1rem 0 .5rem;
|
||||
padding: 1rem 0 0.5rem;
|
||||
margin: 0;
|
||||
font-size: 1.6rem;
|
||||
font-weight: bold;
|
||||
line-height: 140%;
|
||||
|
||||
.icon-repost {
|
||||
color: var(--#{$prefix}success);
|
||||
display: inline-block;
|
||||
width: max-content;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.single-subtitle {
|
||||
margin: .4rem 0;
|
||||
margin: 0.4rem 0;
|
||||
font-size: 1.2rem;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
@@ -17,14 +26,14 @@
|
||||
}
|
||||
|
||||
.post-meta {
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
@@ -32,11 +41,26 @@
|
||||
|
||||
.author {
|
||||
font-size: 1.05rem;
|
||||
|
||||
img.avatar {
|
||||
width: 1.3rem;
|
||||
height: 1.3rem;
|
||||
border-radius: 50%;
|
||||
vertical-align: text-bottom;
|
||||
border: 0.25px solid $global-border-color;
|
||||
box-sizing: border-box;
|
||||
object-position: center;
|
||||
@include object-fit(cover);
|
||||
|
||||
[theme='dark'] & {
|
||||
border-color: $global-border-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.featured-image {
|
||||
margin: .5rem 0 1rem 0;
|
||||
margin: 0.5rem 0 1rem 0;
|
||||
|
||||
img {
|
||||
display: block;
|
||||
@@ -52,6 +76,7 @@
|
||||
}
|
||||
|
||||
.content {
|
||||
> h1,
|
||||
> h2 {
|
||||
font-size: 1.5rem;
|
||||
|
||||
@@ -92,7 +117,7 @@
|
||||
font-weight: bold;
|
||||
margin: 1.2rem 0;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
font-weight: bolder;
|
||||
}
|
||||
}
|
||||
@@ -103,28 +128,29 @@
|
||||
> h5,
|
||||
> h6 {
|
||||
> .header-mark::before {
|
||||
content: "|";
|
||||
margin-right: .3125rem;
|
||||
content: '|';
|
||||
margin-right: 0.3125rem;
|
||||
color: $single-link-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $single-link-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> h2 > .header-mark::before {
|
||||
content: "#";
|
||||
content: '#';
|
||||
}
|
||||
|
||||
p {
|
||||
margin: .5rem 0;
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
b, strong {
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: #ddd;
|
||||
}
|
||||
}
|
||||
@@ -132,19 +158,23 @@
|
||||
@include link(false, false);
|
||||
|
||||
a {
|
||||
white-space: normal;
|
||||
@include overflow-wrap(break-word);
|
||||
|
||||
[theme=dark] & b, [theme=dark] & strong {
|
||||
[theme='dark'] & b,
|
||||
[theme='dark'] & strong {
|
||||
color: $single-link-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
[theme=dark] a:hover b, [theme=dark] a:hover strong {
|
||||
[theme='dark'] a:hover b,
|
||||
[theme='dark'] a:hover strong {
|
||||
color: $single-link-hover-color-dark;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin: .5rem 0;
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5rem 0;
|
||||
padding-left: 2.5rem;
|
||||
}
|
||||
|
||||
@@ -159,7 +189,7 @@
|
||||
color: $global-font-secondary-color;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: $code-background-color-dark;
|
||||
|
||||
rt {
|
||||
@@ -174,7 +204,7 @@
|
||||
&::-webkit-scrollbar {
|
||||
background-color: $table-background-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $table-background-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -182,28 +212,47 @@
|
||||
> table {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
margin: .625rem 0;
|
||||
margin: 0.625rem 0;
|
||||
border-spacing: 0;
|
||||
background: $table-background-color;
|
||||
border-collapse: collapse;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: $table-background-color-dark;
|
||||
}
|
||||
|
||||
thead {
|
||||
background: $table-thead-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $table-thead-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: .3rem 1rem;
|
||||
&:not([class]) tbody {
|
||||
& tr:nth-child(odd) {
|
||||
background: darken($table-background-color, 2.25%);
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: lighten($table-background-color-dark, 2.75%);
|
||||
}
|
||||
}
|
||||
|
||||
& tr:hover {
|
||||
background: darken($table-background-color, 4.5%);
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: lighten($table-background-color-dark, 5.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
padding: 0.3rem 1rem;
|
||||
border: 1px solid darken($table-thead-color, 2%);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
border-color: darken($table-thead-color-dark, 2%);
|
||||
}
|
||||
}
|
||||
@@ -214,18 +263,21 @@
|
||||
max-width: 100%;
|
||||
min-height: 1em;
|
||||
}
|
||||
svg {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: .5rem;
|
||||
margin: 0.5rem;
|
||||
text-align: center;
|
||||
|
||||
.image-caption:not(:empty) {
|
||||
min-width: 20%;
|
||||
max-width: 80%;
|
||||
display: inline-block;
|
||||
padding: .5rem;
|
||||
padding: 0.5rem;
|
||||
margin: 0 auto;
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
color: #969696;
|
||||
}
|
||||
|
||||
@@ -243,36 +295,38 @@
|
||||
|
||||
blockquote {
|
||||
display: block;
|
||||
border-left: .5rem solid $blockquote-color;
|
||||
background-color: rgba($blockquote-color, .2);
|
||||
padding: .25rem .75rem;
|
||||
border-left: 0.25em solid $global-border-color;
|
||||
color: $blockquote-color;
|
||||
padding: 0 1em;
|
||||
margin: 1rem 0;
|
||||
|
||||
[theme=dark] & {
|
||||
border-left-color: $blockquote-color-dark;
|
||||
background-color: rgba($blockquote-color-dark, .2);
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $blockquote-color-dark;
|
||||
border-left-color: $global-border-color-dark;
|
||||
}
|
||||
|
||||
@include link(false, true);
|
||||
}
|
||||
|
||||
.footnotes {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: .25rem 0;
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
@import "../_partial/_single/code";
|
||||
@import "../_partial/_single/instagram";
|
||||
@import "../_partial/_single/admonition";
|
||||
@import "../_partial/_single/echarts";
|
||||
@import "../_partial/_single/mapbox";
|
||||
@import "../_partial/_single/music";
|
||||
@import "../_partial/_single/bilibili";
|
||||
@import '../_partial/_single/code';
|
||||
@import '../_shortcodes/index';
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
@@ -280,24 +334,24 @@
|
||||
border-top: 1px dashed $global-border-color;
|
||||
border-bottom: none;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
border-top: 1px dashed $global-border-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
kbd {
|
||||
display: inline-block;
|
||||
padding: .25rem;
|
||||
padding: 0 0.25rem;
|
||||
background-color: $global-background-color;
|
||||
border: 1px solid $global-border-color;
|
||||
border-bottom-color: $global-border-color;
|
||||
@include border-radius(3px);
|
||||
@include border-radius($global-border-radius);
|
||||
@include box-shadow(inset 0 -1px 0 $global-border-color);
|
||||
font-size: .8rem;
|
||||
font-size: 0.8rem;
|
||||
font-family: $code-font-family;
|
||||
color: $code-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $global-background-color-dark;
|
||||
border: 1px solid $global-border-color-dark;
|
||||
border-bottom-color: $global-border-color-dark;
|
||||
@@ -308,8 +362,8 @@
|
||||
|
||||
.typeit {
|
||||
.code {
|
||||
padding: .375rem;
|
||||
font-size: .875rem;
|
||||
padding: 0.375rem;
|
||||
font-size: 0.875rem;
|
||||
font-family: $code-font-family;
|
||||
font-weight: bold;
|
||||
word-break: break-all;
|
||||
@@ -322,8 +376,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
@import "../_partial/_single/footer";
|
||||
@import "../_partial/_single/comment";
|
||||
@import '../_partial/_single/footer';
|
||||
@import '../_partial/_single/comment';
|
||||
}
|
||||
|
||||
.lg-toolbar .lg-icon::after {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
.special {
|
||||
.single-title, .single-subtitle {
|
||||
.single-title,
|
||||
.single-subtitle {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
sup {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,26 @@
|
||||
.categories-card {
|
||||
margin: 0 auto;
|
||||
margin-top: 3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
line-height: 1.6rem;
|
||||
|
||||
.card-item {
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
text-align: left;
|
||||
width: 45%;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-top: 2rem;
|
||||
min-height: 10rem;
|
||||
padding: 0 2%;
|
||||
position: relative;
|
||||
|
||||
&:nth-child(n+3){
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.card-item-wrapper {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
@@ -28,7 +30,7 @@
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: .75rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
span {
|
||||
@@ -44,7 +46,7 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
margin: .25rem 0 .25rem 1.5rem;
|
||||
margin: 0.25rem 0 0.25rem 1.5rem;
|
||||
}
|
||||
|
||||
.archive-item-link {
|
||||
@@ -58,7 +60,7 @@
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-link-color-dark;
|
||||
|
||||
&:hover {
|
||||
@@ -68,11 +70,12 @@
|
||||
}
|
||||
|
||||
.archive-item-date {
|
||||
width: 4em;
|
||||
text-align: right;
|
||||
color: $global-font-secondary-color;
|
||||
white-space: nowrap;
|
||||
font-variant-numeric: tabular-nums lining-nums;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
.details {
|
||||
.details-summary {
|
||||
@include border-radius($global-border-radius);
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -9,7 +11,7 @@
|
||||
color: $global-font-secondary-color;
|
||||
@include transition(transform 0.2s ease);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -21,12 +23,17 @@
|
||||
}
|
||||
|
||||
&.open {
|
||||
.details-summary {
|
||||
@include border-radius($global-border-radius $global-border-radius 0 0);
|
||||
}
|
||||
|
||||
i.details-icon {
|
||||
@include transform(rotate(90deg));
|
||||
}
|
||||
|
||||
.details-content {
|
||||
max-height: $MAX_LENGTH;
|
||||
max-height: 100%;
|
||||
@include border-radius(0 0 $global-border-radius $global-border-radius);
|
||||
@include details-transition-close;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,60 @@
|
||||
footer {
|
||||
height: 2rem;
|
||||
height: auto;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.25rem;
|
||||
padding: 1rem 0;
|
||||
|
||||
.footer-container {
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
|
||||
.footer-line {
|
||||
width: 100%;
|
||||
|
||||
.icp-br {
|
||||
display: none;
|
||||
.footer-divider:not(:first-child)::before {
|
||||
content: '|';
|
||||
margin-left: 0.25rem;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
.fixit-icon {
|
||||
top: 0.25em;
|
||||
}
|
||||
|
||||
.animate-icon {
|
||||
color: #dc143c;
|
||||
animation: icon-animate 1.33s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.run-times {
|
||||
font-variant-numeric: tabular-nums lining-nums;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include blur;
|
||||
}
|
||||
|
||||
@keyframes icon-animate {
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
10%,
|
||||
30% {
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80% {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
50%,
|
||||
70% {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,26 +4,12 @@ header {
|
||||
background-color: $header-background-color;
|
||||
@include transition(box-shadow 0.3s ease);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $header-background-color-dark;
|
||||
}
|
||||
|
||||
.logo {
|
||||
min-height: 1.5em;
|
||||
height: 1.5em;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.logo, .header-title-pre {
|
||||
padding-right: .25rem;
|
||||
}
|
||||
|
||||
.header-title-post {
|
||||
padding-left: .25rem;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
@include box-shadow(0 0 1.5rem 0 rgba(0, 0, 0, .1));
|
||||
@include box-shadow(0 0 1.5rem 0 rgba(0, 0, 0, 0.1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,28 +24,62 @@ header {
|
||||
.header-title {
|
||||
font-family: $header-title-font-family;
|
||||
font-weight: bold;
|
||||
margin-right: .5rem;
|
||||
margin-right: 0.5rem;
|
||||
min-width: 10%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
@include flex(10);
|
||||
|
||||
.logo {
|
||||
min-height: 1.5em;
|
||||
height: 1.5em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.header-title-text {
|
||||
margin-left: 0.25rem;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
.header-subtitle {
|
||||
margin-left: 0.25rem;
|
||||
font-size: 0.6em;
|
||||
}
|
||||
}
|
||||
|
||||
.menu .menu-item {
|
||||
position: relative;
|
||||
}
|
||||
.menu {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
.language-select {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.menu-item {
|
||||
list-style: none;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
& .dropdown-icon {
|
||||
margin-left: 0.25rem;
|
||||
font-size: .875em;
|
||||
color: $global-font-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $global-font-color-dark;
|
||||
}
|
||||
|
||||
&.open::before {
|
||||
content: "\f078";
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
>.menu-link,
|
||||
>.nested-item>.menu-link {
|
||||
font-weight: bold;
|
||||
color: $menu-active-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $menu-active-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,17 +90,13 @@ header {
|
||||
color: transparent;
|
||||
box-sizing: border-box;
|
||||
height: 2.5rem;
|
||||
width: 2.5rem;
|
||||
@include border-radius(.5rem);
|
||||
width: 1.25rem;
|
||||
@include border-radius(0.5rem);
|
||||
border: none;
|
||||
outline: none;
|
||||
background-color: $header-background-color;
|
||||
background-color: transparent;
|
||||
vertical-align: baseline !important;
|
||||
@include transition(width 0.3s ease);
|
||||
|
||||
[theme=dark] & {
|
||||
background-color: $header-background-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
@include placeholder(transparent);
|
||||
@@ -93,8 +109,12 @@ header {
|
||||
}
|
||||
|
||||
.search-toggle {
|
||||
left: .5rem;
|
||||
left: 0.5rem;
|
||||
right: auto;
|
||||
|
||||
#header-desktop.open & {
|
||||
left: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.search-loading {
|
||||
@@ -105,14 +125,15 @@ header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.open &, &.mobile {
|
||||
.open &,
|
||||
&.mobile {
|
||||
input {
|
||||
color: $global-font-color;
|
||||
background-color: $search-background-color;
|
||||
padding: 0 2rem 0 2rem;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
input {
|
||||
color: $global-font-color-dark;
|
||||
background-color: $search-background-color-dark;
|
||||
@@ -126,7 +147,7 @@ header {
|
||||
.search-button {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -147,63 +168,98 @@ header {
|
||||
|
||||
#header-desktop {
|
||||
display: block;
|
||||
position: fixed;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
height: $header-height;
|
||||
line-height: $header-height;
|
||||
box-sizing: border-box;
|
||||
|
||||
[header-desktop=normal] & {
|
||||
[header-desktop='normal'] & {
|
||||
position: static;
|
||||
}
|
||||
|
||||
nav {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.header-wrapper {
|
||||
padding: 0 2rem 0 10vh;
|
||||
// use css native function to calculate max value
|
||||
padding: 0 2rem 0 MAX(10vh, $header-height);
|
||||
height: 100%;
|
||||
|
||||
&[github-corner='right'] {
|
||||
padding-right: $header-height;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
font-size: $header-title-font-size;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.menu {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: nowrap;
|
||||
float: right;
|
||||
|
||||
.menu-inner {
|
||||
float: right;
|
||||
>.menu-item:hover {
|
||||
& .sub-menu {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
margin: 0 .5rem;
|
||||
padding: 0 0.5rem;
|
||||
|
||||
&.delimiter {
|
||||
border-left: 1.5px solid $global-font-color;
|
||||
width: 0;
|
||||
margin: 0.125rem 0.25rem;
|
||||
padding: 0;
|
||||
border-left: 1px dashed lighten($global-font-secondary-color, 20%);
|
||||
|
||||
[theme=dark] & {
|
||||
border-left-color: $global-border-color-dark;
|
||||
[theme='dark'] & {
|
||||
border-left-color: darken($global-font-secondary-color-dark, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
&.language {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
&.search {
|
||||
margin: 0 -.5rem 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
a.active {
|
||||
font-weight: 900;
|
||||
color: $header-hover-color;
|
||||
.sub-menu {
|
||||
z-index: 160;
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
padding: 0.25rem 0;
|
||||
display: none;
|
||||
top: calc(#{$header-height} - 0.75rem);
|
||||
border-radius: $global-border-radius;
|
||||
border: 1px solid $global-border-color;
|
||||
background-color: $header-background-color;
|
||||
@include transition(box-shadow 0.3s ease);
|
||||
|
||||
[theme=dark] & {
|
||||
color: $header-hover-color-dark;
|
||||
[theme='dark'] & {
|
||||
background-color: $header-background-color-dark;
|
||||
border-color: $global-border-color-dark;
|
||||
}
|
||||
|
||||
@include box-shadow(0 0 1.5rem 0 rgba(0, 0, 0, 0.1));
|
||||
|
||||
.menu-item {
|
||||
height: $header-height*0.5;
|
||||
line-height: $header-height*0.5;
|
||||
max-width: 15rem;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.open .header-wrapper .menu .menu-item.search {
|
||||
margin: 0 .25rem 0 .5rem;
|
||||
|
||||
input {
|
||||
width: 24rem;
|
||||
}
|
||||
@@ -212,11 +268,12 @@ header {
|
||||
|
||||
#header-mobile {
|
||||
display: none;
|
||||
position: fixed;
|
||||
height: $header-height;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
min-height: $header-height;
|
||||
line-height: $header-height;
|
||||
|
||||
[header-mobile=normal] & {
|
||||
[header-mobile='normal'] & {
|
||||
position: static;
|
||||
}
|
||||
|
||||
@@ -247,42 +304,41 @@ header {
|
||||
@include border-radius(3px);
|
||||
@include transition(all 0.3s ease-in-out);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: $global-font-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
span:nth-child(1) {
|
||||
margin-bottom: .5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
span:nth-child(3) {
|
||||
margin-top: .5rem;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
&.active {
|
||||
span:nth-child(1) {
|
||||
@include transform(rotate(45deg) translate(.4rem, .5rem));
|
||||
@include transform(rotate(45deg) translate(0.4rem, 0.5rem));
|
||||
}
|
||||
|
||||
span:nth-child(2) {
|
||||
opacity: 0
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
span:nth-child(3) {
|
||||
@include transform(rotate(-45deg) translate(.4rem, -.5rem));
|
||||
@include transform(rotate(-45deg) translate(0.4rem, -0.5rem));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
text-align: center;
|
||||
background: $header-background-color;
|
||||
border-top: 2px solid $global-border-color;
|
||||
display: none;
|
||||
padding-top: .5rem;
|
||||
@include box-shadow(0 .125rem .25rem rgba(0, 0, 0, .1));
|
||||
padding: 0.5rem 0 0;
|
||||
@include box-shadow(0 0.125rem 0.25rem rgba(0, 0, 0, 0.1));
|
||||
|
||||
.search-wrapper {
|
||||
display: flex;
|
||||
@@ -296,30 +352,95 @@ header {
|
||||
.search {
|
||||
flex-grow: 10;
|
||||
|
||||
.algolia-autocomplete, input {
|
||||
.algolia-autocomplete,
|
||||
input {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.search-loading,
|
||||
.search-clear {
|
||||
right: 0.5rem;
|
||||
}
|
||||
|
||||
.search-button {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.search-cancel {
|
||||
display: none;
|
||||
margin-left: .75rem;
|
||||
margin-left: 0.75rem;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
display: block;
|
||||
position: relative;
|
||||
line-height: 2.5rem;
|
||||
padding: 0 1rem;
|
||||
|
||||
&:hover {
|
||||
background-color: lighten($global-font-secondary-color, 24%);
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: darken($global-font-secondary-color-dark, 24%);
|
||||
}
|
||||
}
|
||||
|
||||
.menu-link {
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow-x: hidden;
|
||||
@include flex(4);
|
||||
}
|
||||
|
||||
& .nested-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.menu-link {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
&.theme-switch,
|
||||
&.language {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.language-select {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.sub-menu {
|
||||
padding-left: 0;
|
||||
display: none;
|
||||
|
||||
&.open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.menu-item:hover {
|
||||
background-color: lighten($global-font-secondary-color, 20%);
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: darken($global-font-secondary-color-dark, 20%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: $header-background-color-dark;
|
||||
border-top-color: $global-border-color-dark;
|
||||
}
|
||||
@@ -350,7 +471,7 @@ header {
|
||||
position: fixed;
|
||||
z-index: 200;
|
||||
top: $header-height;
|
||||
@include box-shadow(0 .125rem .25rem rgba(0, 0, 0, .1));
|
||||
@include box-shadow(0 0.125rem 0.25rem rgba(0, 0, 0, 0.1));
|
||||
|
||||
&.desktop {
|
||||
right: 2rem;
|
||||
@@ -366,7 +487,7 @@ header {
|
||||
right: 0 !important;
|
||||
background-color: $global-background-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $global-background-color-dark;
|
||||
}
|
||||
|
||||
@@ -375,7 +496,7 @@ header {
|
||||
max-height: calc(100vh - #{$header-height});
|
||||
|
||||
.suggestion {
|
||||
padding: .75rem 1rem;
|
||||
padding: 0.75rem 1rem;
|
||||
|
||||
.suggestion-title {
|
||||
display: inline-block;
|
||||
@@ -388,12 +509,12 @@ header {
|
||||
}
|
||||
|
||||
.suggestion-date {
|
||||
font-size: .875rem;
|
||||
font-size: 0.875rem;
|
||||
float: right;
|
||||
text-align: right;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -407,7 +528,7 @@ header {
|
||||
@include overflow-wrap(break-word);
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -416,7 +537,7 @@ header {
|
||||
font-style: normal;
|
||||
background-color: $selection-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $selection-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -424,7 +545,7 @@ header {
|
||||
&.cursor {
|
||||
background: darken($code-background-color, 5%);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: lighten($code-background-color-dark, 5%);
|
||||
}
|
||||
}
|
||||
@@ -442,19 +563,19 @@ header {
|
||||
.search-query {
|
||||
font-weight: bold;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: #ddd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-footer {
|
||||
padding: .5rem 1rem;
|
||||
padding: 0.5rem 1rem;
|
||||
float: right;
|
||||
font-size: .8rem;
|
||||
font-size: 0.8rem;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] {
|
||||
[theme='dark'] {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,15 @@ svg.icon {
|
||||
img.emoji {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
margin: 0 .05em 0 .1em;
|
||||
vertical-align: -.1em;
|
||||
margin: 0 0.05em 0 0.1em;
|
||||
vertical-align: -0.1em;
|
||||
}
|
||||
|
||||
.fixit-icon {
|
||||
display: inline-block;
|
||||
height: 1.5em;
|
||||
width: 1.5em;
|
||||
line-height: 1.5em;
|
||||
position: relative;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,6 @@
|
||||
|
||||
.blur & {
|
||||
z-index: 100;
|
||||
background-color: rgba(0, 0, 0, .25);
|
||||
background-color: rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,17 @@
|
||||
padding: 1rem 0 0;
|
||||
|
||||
a {
|
||||
font-size: .8rem;
|
||||
color: #bfbfbf;
|
||||
letter-spacing: .1rem;
|
||||
font-size: 0.8rem;
|
||||
color: $pagination-link-color;
|
||||
letter-spacing: 0.1rem;
|
||||
font-weight: 700;
|
||||
padding: 5px 5px;
|
||||
text-decoration: none;
|
||||
@include transition(0.3s);
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $pagination-link-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
@@ -32,14 +36,14 @@
|
||||
color: $pagination-link-hover-color;
|
||||
}
|
||||
|
||||
[theme=dark] &:hover a {
|
||||
[theme='dark'] &:hover a {
|
||||
color: $pagination-link-hover-color-dark;
|
||||
}
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
position: absolute;
|
||||
content: "";
|
||||
content: '';
|
||||
width: 0;
|
||||
height: 3px;
|
||||
background: $pagination-link-hover-color;
|
||||
@@ -47,8 +51,8 @@
|
||||
bottom: 0px;
|
||||
}
|
||||
|
||||
[theme=dark] &:before,
|
||||
[theme=dark] &:after {
|
||||
[theme='dark'] &:before,
|
||||
[theme='dark'] &:after {
|
||||
background: $pagination-link-hover-color-dark;
|
||||
}
|
||||
|
||||
@@ -66,7 +70,6 @@
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
width: 50%;
|
||||
@@ -78,7 +81,7 @@
|
||||
color: $pagination-link-hover-color;
|
||||
}
|
||||
|
||||
[theme=dark] & a {
|
||||
[theme='dark'] & a {
|
||||
color: $pagination-link-hover-color-dark;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,48 @@
|
||||
// inline code
|
||||
code {
|
||||
display:inline-block;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
padding: 0 .4rem;
|
||||
@include overflow-wrap(break-word);
|
||||
@include line-break(anywhere);
|
||||
padding: 0 0.25rem;
|
||||
font-size: $code-font-size;
|
||||
font-family: $code-font-family;
|
||||
color: $code-color;
|
||||
background-color: rgba(175, 184, 193, 0.2);
|
||||
@include border-radius($global-border-radius);
|
||||
@include overflow-wrap(break-word);
|
||||
@include line-break(anywhere);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $code-color-dark;
|
||||
background-color: rgba(99, 110, 123, 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
// indented code
|
||||
pre {
|
||||
margin: 0;
|
||||
padding: .25rem 0 .25rem .5rem;
|
||||
line-height: 1.45em;
|
||||
padding: 0.5rem;
|
||||
overflow: auto;
|
||||
font-size: $code-font-size;
|
||||
font-family: $code-font-family;
|
||||
@include border-radius($global-border-radius);
|
||||
@include tab-size(4);
|
||||
|
||||
background-color: $code-background-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: $code-background-color-dark;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
@include border-radius(0);
|
||||
@include max-content(min-width);
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
@@ -29,17 +52,10 @@ pre {
|
||||
}
|
||||
}
|
||||
|
||||
code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
background: $code-background-color;
|
||||
|
||||
[theme=dark] & {
|
||||
background: $code-background-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
.highlight, .gist {
|
||||
font-family: $code-font-family;
|
||||
.highlight,
|
||||
.gist {
|
||||
font-size: $code-font-size;
|
||||
font-family: $code-font-family;
|
||||
|
||||
.table-wrapper {
|
||||
> table,
|
||||
@@ -54,9 +70,9 @@ code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
}
|
||||
}
|
||||
|
||||
// block fenced code
|
||||
.highlight {
|
||||
line-height: 1.4em;
|
||||
margin: .5rem 0;
|
||||
margin: 0.5rem 0;
|
||||
|
||||
> .chroma {
|
||||
position: relative;
|
||||
@@ -69,12 +85,15 @@ code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
width: 100%;
|
||||
font-family: $global-font-family;
|
||||
font-weight: bold;
|
||||
line-height: 1.4em;
|
||||
color: $code-info-color;
|
||||
background: darken($code-background-color, 8%);
|
||||
background-color: darken($code-background-color, 3%);
|
||||
@include border-radius($global-border-radius);
|
||||
@include transition(border-radius 0.2s ease);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $code-info-color-dark;
|
||||
background: darken($code-background-color-dark, 6%);
|
||||
background-color: darken($code-background-color-dark, 6%);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
@@ -83,14 +102,38 @@ code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
|
||||
.code-title {
|
||||
width: 100%;
|
||||
padding: .4rem;
|
||||
padding: 0.4rem;
|
||||
|
||||
.arrow {
|
||||
padding: 0 0.2rem;
|
||||
@include transition(transform 0.2s ease);
|
||||
}
|
||||
}
|
||||
|
||||
.code-title::after {
|
||||
padding-left: .2rem;
|
||||
padding-left: 0.2rem;
|
||||
content: 'Code';
|
||||
}
|
||||
|
||||
.ellipses {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
.edit,
|
||||
.copy {
|
||||
display: none;
|
||||
padding: 0.4rem;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
color: $global-link-hover-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $global-link-hover-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@each $type, $text in $code-type-map {
|
||||
&.#{$type} .code-title::after {
|
||||
content: $text;
|
||||
@@ -98,80 +141,78 @@ code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
}
|
||||
}
|
||||
|
||||
.lntd:first-child {
|
||||
min-width: 1.6rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.lntd:last-child {
|
||||
width: 100%;
|
||||
|
||||
pre {
|
||||
@include max-content(min-width);
|
||||
}
|
||||
}
|
||||
|
||||
.ln {
|
||||
padding-right: .75rem;
|
||||
}
|
||||
|
||||
.hl {
|
||||
display: block;
|
||||
background-color: darken($code-background-color, 10%);
|
||||
|
||||
[theme=dark] & {
|
||||
background-color: darken($code-background-color-dark, 5%);
|
||||
}
|
||||
}
|
||||
|
||||
.ln, .lnt {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
.arrow {
|
||||
padding: 0 .2rem;
|
||||
@include transition(transform 0.2s ease);
|
||||
}
|
||||
|
||||
.ellipses {
|
||||
padding: .4rem;
|
||||
}
|
||||
|
||||
.copy {
|
||||
display: none;
|
||||
padding: .4rem;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
color: $global-link-hover-color;
|
||||
|
||||
[theme=dark] & {
|
||||
color: $global-link-hover-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delayed loading table-wrapper
|
||||
.table-wrapper {
|
||||
max-height: 0;
|
||||
overflow-y: hidden;
|
||||
overflow: hidden;
|
||||
@include border-radius(0 0 $global-border-radius $global-border-radius);
|
||||
@include details-transition-open;
|
||||
}
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
width: auto;
|
||||
overflow: auto;
|
||||
display: block;
|
||||
background-color: $code-background-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: $code-background-color-dark;
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align: top;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 0.25rem;
|
||||
outline-offset: -1px;
|
||||
@include border-radius(0);
|
||||
}
|
||||
|
||||
/* lineNumbersInTable=false */
|
||||
.ln {
|
||||
min-width: 1.25rem;
|
||||
}
|
||||
|
||||
// ========== lineNumbersInTable ========== //
|
||||
// line numbers
|
||||
.lntd:first-child {
|
||||
min-width: 1.6rem;
|
||||
text-align: right;
|
||||
|
||||
pre {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
// code content
|
||||
.lntd:last-child {
|
||||
width: 100%;
|
||||
|
||||
pre {
|
||||
padding-left: 0.5rem;
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
code {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
// ========== lineNumbersInTable ========== //
|
||||
}
|
||||
|
||||
&.open {
|
||||
.code-header {
|
||||
background: darken($code-background-color, 3%);
|
||||
background-color: darken($code-background-color, 6%);
|
||||
@include border-radius($global-border-radius $global-border-radius 0 0);
|
||||
|
||||
[theme=dark] & {
|
||||
background: darken($code-background-color-dark, 3%);
|
||||
[theme='dark'] & {
|
||||
background-color: darken($code-background-color-dark, 3%);
|
||||
}
|
||||
}
|
||||
|
||||
.table-wrapper {
|
||||
max-height: $MAX_LENGTH;
|
||||
max-height: 100%;
|
||||
@include details-transition-close;
|
||||
}
|
||||
|
||||
@@ -183,203 +224,127 @@ code, pre, .highlight table, .highlight tr, .highlight td {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.edit,
|
||||
.copy {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Comment */ .c,
|
||||
/* CommentHashbang */ .ch,
|
||||
/* CommentMultiline */ .cm,
|
||||
/* CommentSingle */ .c1,
|
||||
/* CommentSpecial */ .cs,
|
||||
/* CommentPreproc */ .cp,
|
||||
/* CommentPreprocFile */ .cpf { font-style: italic }
|
||||
/* GenericUnderline */ .gl { text-decoration: underline }
|
||||
/* LineHighlight */
|
||||
.hl {
|
||||
display: block;
|
||||
background-color: $code-hightlight-color;
|
||||
box-shadow: -0.5rem 0 0 $code-hightlight-color, 0.5rem 0 0 $code-hightlight-color;
|
||||
|
||||
@each $class, $color in $code-highlight-color-map {
|
||||
.#{$class} { color: $color; }
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
@each $class, $color in $code-highlight-color-map-dark {
|
||||
.#{$class} { color: $color; }
|
||||
[theme='dark'] & {
|
||||
background-color: $code-hightlight-color-dark;
|
||||
box-shadow: -0.5rem 0 0 $code-hightlight-color-dark, 0.5rem 0 0 $code-hightlight-color-dark;
|
||||
}
|
||||
}
|
||||
/* GenericUnderline */
|
||||
.gl {
|
||||
text-decoration: underline;
|
||||
}
|
||||
/* GenericStrong */
|
||||
.gs {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* GenericEmph */
|
||||
.ge {
|
||||
font-style: italic;
|
||||
}
|
||||
/* lineNumbersInTable=false */
|
||||
.ln {
|
||||
padding-right: 0.5rem;
|
||||
display: inline-block;
|
||||
min-width: 1.1rem;
|
||||
text-align: right;
|
||||
}
|
||||
/* LineNumbers */
|
||||
.lnt,
|
||||
.ln {
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
// ========== Higtlight Color ========== //
|
||||
|
||||
/* Error */
|
||||
.err {
|
||||
font-style: italic;
|
||||
border-bottom: 1px dotted $code-error-color;
|
||||
}
|
||||
/* GenericDeleted */
|
||||
.gd {
|
||||
background-color: #ffebe9;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: #78191b;
|
||||
}
|
||||
}
|
||||
/* GenericInserted */
|
||||
.gi {
|
||||
background-color: #dafbe1;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: #1b4721;
|
||||
}
|
||||
}
|
||||
|
||||
@each $class, $color in $code-highlight-color-map {
|
||||
.#{$class} {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
[theme='dark'] & {
|
||||
@each $class, $color in $code-highlight-color-map-dark {
|
||||
.#{$class} {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
// ========== Higtlight Color ========== //
|
||||
}
|
||||
|
||||
// gist shortcode
|
||||
.gist {
|
||||
.gist-file, .gist-data, .gist-meta {
|
||||
.gist-file,
|
||||
.gist-data,
|
||||
.gist-meta {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.gist-data {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.gist-meta {
|
||||
padding: .4rem .8rem;
|
||||
padding: 0.4rem 0.8rem;
|
||||
@include link(false, false);
|
||||
background-color: darken($code-background-color, 5%);
|
||||
|
||||
@include link(false, false);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: darken($code-background-color-dark, 5%);
|
||||
}
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
// imported from https://github.com/lonekorean/gist-syntax-themes/blob/master/stylesheets/one-dark.css
|
||||
.highlight {
|
||||
background: #141414;
|
||||
}
|
||||
.blob-num,
|
||||
.blob-code-inner,
|
||||
.table-wrapper {
|
||||
.highlight,
|
||||
.pl-enm,
|
||||
.pl-ko,
|
||||
.pl-mo,
|
||||
.pl-mp1 .pl-sf,
|
||||
.pl-ms,
|
||||
.pl-pdc1,
|
||||
.pl-scp,
|
||||
.pl-smc,
|
||||
.pl-som,
|
||||
.pl-va,
|
||||
.pl-vpf,
|
||||
.pl-vpu,
|
||||
.pl-mdr {
|
||||
color: #aab1bf;
|
||||
}
|
||||
.pl-mb,
|
||||
.pl-pdb {
|
||||
font-weight: 700;
|
||||
}
|
||||
.pl-c,
|
||||
.pl-c span,
|
||||
.pl-pdc {
|
||||
color: #5b6270;
|
||||
font-style: italic;
|
||||
}
|
||||
.pl-sr .pl-cce {
|
||||
color: #56b5c2;
|
||||
font-weight: 400;
|
||||
}
|
||||
.pl-ef,
|
||||
.pl-en,
|
||||
.pl-enf,
|
||||
.pl-eoai,
|
||||
.pl-kos,
|
||||
.pl-mh .pl-pdh,
|
||||
.pl-mr {
|
||||
color: #61afef;
|
||||
}
|
||||
.pl-ens,
|
||||
.pl-vi {
|
||||
color: #be5046;
|
||||
}
|
||||
.pl-enti,
|
||||
.pl-mai .pl-sf,
|
||||
.pl-ml,
|
||||
.pl-sf,
|
||||
.pl-sr,
|
||||
.pl-sr .pl-sra,
|
||||
.pl-src,
|
||||
.pl-st,
|
||||
.pl-vo {
|
||||
color: #56b5c2;
|
||||
}
|
||||
.pl-eoi,
|
||||
.pl-mri,
|
||||
.pl-pds,
|
||||
.pl-pse .pl-s1,
|
||||
.pl-s,
|
||||
.pl-s1 {
|
||||
color: #97c279;
|
||||
}
|
||||
.pl-k,
|
||||
.pl-kolp,
|
||||
.pl-mc,
|
||||
.pl-pde {
|
||||
color: #c578dd;
|
||||
}
|
||||
.pl-mi,
|
||||
.pl-pdi {
|
||||
color: #c578dd;
|
||||
font-style: italic;
|
||||
}
|
||||
.pl-mp,
|
||||
.pl-stp {
|
||||
color: #818896;
|
||||
}
|
||||
.pl-mdh,
|
||||
.pl-mdi,
|
||||
.pl-mdr {
|
||||
font-weight: 400;
|
||||
}
|
||||
.pl-mdht,
|
||||
.pl-mi1 {
|
||||
color: #97c279;
|
||||
background: #020;
|
||||
}
|
||||
.pl-md,
|
||||
.pl-mdhf {
|
||||
color: #df6b75;
|
||||
background: #200;
|
||||
}
|
||||
.pl-corl {
|
||||
color: #df6b75;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.pl-ib {
|
||||
background: #df6b75;
|
||||
}
|
||||
.pl-ii {
|
||||
background: #e0c184;
|
||||
color: #fff;
|
||||
}
|
||||
.pl-iu {
|
||||
background: #e05151;
|
||||
}
|
||||
.pl-ms1 {
|
||||
color: #aab1bf;
|
||||
background: #373b41;
|
||||
}
|
||||
.pl-c1,
|
||||
.pl-cn,
|
||||
.pl-e,
|
||||
.pl-eoa,
|
||||
.pl-eoac,
|
||||
.pl-eoac .pl-pde,
|
||||
.pl-kou,
|
||||
.pl-mm,
|
||||
.pl-mp .pl-s3,
|
||||
.pl-mq,
|
||||
.pl-s3,
|
||||
.pl-sok,
|
||||
.pl-sv,
|
||||
.pl-mb {
|
||||
color: #d19965;
|
||||
}
|
||||
.pl-enc,
|
||||
.pl-entc,
|
||||
.pl-pse .pl-s2,
|
||||
.pl-s2,
|
||||
.pl-sc,
|
||||
.pl-smp,
|
||||
.pl-sr .pl-sre,
|
||||
.pl-stj,
|
||||
.pl-v,
|
||||
.pl-pdb {
|
||||
color: #e4bf7a;
|
||||
}
|
||||
.pl-ent,
|
||||
.pl-entl,
|
||||
.pl-entm,
|
||||
.pl-mh,
|
||||
.pl-pdv,
|
||||
.pl-smi,
|
||||
.pl-sol,
|
||||
.pl-mdh,
|
||||
.pl-mdi {
|
||||
color: #df6b75;
|
||||
&::-webkit-scrollbar {
|
||||
background-color: #f6f8fa;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: #2d333b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[theme='dark'] & {
|
||||
@import './github-dark-dimmed';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
.fixit-decryptor-container {
|
||||
font-family: $global-font-family;
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
|
||||
.fixit-encryptor-shortcode & {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
#fixit-decryptor-input,
|
||||
.fixit-decryptor-input,
|
||||
.fixit-encryptor-btn {
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
color: $global-font-color;
|
||||
border: 1px solid darken($global-border-color, 15%);
|
||||
border-radius: $global-border-radius;
|
||||
transition: 0.1s;
|
||||
box-shadow: 0px 0px 5px 0px darken($global-border-color, 15%);
|
||||
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
color: darken($global-link-hover-color, 6%);
|
||||
border-color: $global-link-hover-color;
|
||||
box-shadow: 0px 0px 5px 0px lighten($global-link-hover-color, 20%);
|
||||
|
||||
[theme='dark'] & {
|
||||
color: lighten($global-link-hover-color-dark, 6%);
|
||||
border-color: $global-link-hover-color-dark;
|
||||
box-shadow: 0px 0px 5px 0px darken($global-link-hover-color-dark, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $global-font-color-dark;
|
||||
border-color: lighten($global-border-color-dark, 15%);
|
||||
box-shadow: 0px 0px 5px 0px lighten($global-border-color-dark, 15%);
|
||||
}
|
||||
}
|
||||
|
||||
#fixit-decryptor-input,
|
||||
.fixit-decryptor-input {
|
||||
width: clamp(50%, 400px, 100%);
|
||||
height: 3rem;
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
background-color: $global-background-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: $global-background-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
.fixit-encryptor-btn {
|
||||
cursor: pointer;
|
||||
transition: 0.1s;
|
||||
padding: 0.6rem 1rem;
|
||||
|
||||
background-color: $header-background-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
background-color: $header-background-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
border-bottom: 1px solid $global-border-color;
|
||||
padding: 1rem 0 0.3rem;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
border-bottom: 1px solid $global-border-color-dark;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
font-size: 0.8em;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
font-size: 0.8em;
|
||||
color: $global-font-secondary-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
|
||||
@@ -37,9 +37,15 @@
|
||||
|
||||
.post-info-md {
|
||||
font-size: 0.8rem;
|
||||
width: 8rem;
|
||||
width: fit-content;
|
||||
|
||||
@include link(false, false);
|
||||
|
||||
>span:not(:first-child)::before {
|
||||
content: '|';
|
||||
margin-left: 0.25rem;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.post-info-share {
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
/**
|
||||
* Theme: GitHub Dark Dimmed
|
||||
* Description: Dark Dimmed theme as seen on github.com
|
||||
* Author: github.com
|
||||
* Maintainer: https://github.com/hugo-fixit/FixIt
|
||||
* Updated: 2022-03-01
|
||||
*/
|
||||
& {
|
||||
--color-fg-default: #adbac7;
|
||||
--color-prettylights-syntax-comment: #768390;
|
||||
--color-prettylights-syntax-constant: #6cb6ff;
|
||||
--color-prettylights-syntax-entity: #dcbdfb;
|
||||
--color-prettylights-syntax-storage-modifier-import: #adbac7;
|
||||
--color-prettylights-syntax-entity-tag: #8ddb8c;
|
||||
--color-prettylights-syntax-keyword: #f47067;
|
||||
--color-prettylights-syntax-string: #96d0ff;
|
||||
--color-prettylights-syntax-variable: #f69d50;
|
||||
--color-prettylights-syntax-brackethighlighter-unmatched: #e5534b;
|
||||
--color-prettylights-syntax-invalid-illegal-text: #cdd9e5;
|
||||
--color-prettylights-syntax-invalid-illegal-bg: #922323;
|
||||
--color-prettylights-syntax-carriage-return-text: #cdd9e5;
|
||||
--color-prettylights-syntax-carriage-return-bg: #ad2e2c;
|
||||
--color-prettylights-syntax-string-regexp: #8ddb8c;
|
||||
--color-prettylights-syntax-markup-list: #eac55f;
|
||||
--color-prettylights-syntax-markup-heading: #316dca;
|
||||
--color-prettylights-syntax-markup-italic: #adbac7;
|
||||
--color-prettylights-syntax-markup-bold: #adbac7;
|
||||
--color-prettylights-syntax-markup-deleted-text: #ffd8d3;
|
||||
--color-prettylights-syntax-markup-deleted-bg: #78191b;
|
||||
--color-prettylights-syntax-markup-inserted-text: #b4f1b4;
|
||||
--color-prettylights-syntax-markup-inserted-bg: #1b4721;
|
||||
--color-prettylights-syntax-markup-changed-text: #ffddb0;
|
||||
--color-prettylights-syntax-markup-changed-bg: #682d0f;
|
||||
--color-prettylights-syntax-markup-ignored-text: #adbac7;
|
||||
--color-prettylights-syntax-markup-ignored-bg: #255ab2;
|
||||
--color-prettylights-syntax-meta-diff-range: #dcbdfb;
|
||||
--color-prettylights-syntax-brackethighlighter-angle: #768390;
|
||||
--color-prettylights-syntax-sublimelinter-gutter-mark: #545d68;
|
||||
--color-prettylights-syntax-constant-other-reference-link: #96d0ff;
|
||||
|
||||
.blob-num,
|
||||
.blob-code-inner {
|
||||
color: val(--color-fg-default);
|
||||
}
|
||||
|
||||
.pl-c /* comment, punctuation.definition.comment, string.comment */ {
|
||||
color: var(--color-prettylights-syntax-comment);
|
||||
}
|
||||
|
||||
.pl-c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */,
|
||||
.pl-s .pl-v /* string variable */ {
|
||||
color: var(--color-prettylights-syntax-constant);
|
||||
}
|
||||
|
||||
.pl-e /* entity */,
|
||||
.pl-en /* entity.name */ {
|
||||
color: var(--color-prettylights-syntax-entity);
|
||||
}
|
||||
|
||||
.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
|
||||
.pl-s .pl-s1 /* string source */ {
|
||||
color: var(--color-prettylights-syntax-storage-modifier-import);
|
||||
}
|
||||
|
||||
.pl-ent /* entity.name.tag, markup.quote */ {
|
||||
color: var(--color-prettylights-syntax-entity-tag);
|
||||
}
|
||||
|
||||
.pl-k /* keyword, storage, storage.type */ {
|
||||
color: var(--color-prettylights-syntax-keyword);
|
||||
}
|
||||
|
||||
.pl-s /* string */,
|
||||
.pl-pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */,
|
||||
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
|
||||
.pl-sr /* string.regexp */,
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
|
||||
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
|
||||
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
|
||||
color: var(--color-prettylights-syntax-string);
|
||||
}
|
||||
|
||||
.pl-v /* variable */,
|
||||
.pl-smw /* sublimelinter.mark.warning */ {
|
||||
color: var(--color-prettylights-syntax-variable);
|
||||
}
|
||||
|
||||
.pl-bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ {
|
||||
color: var(--color-prettylights-syntax-brackethighlighter-unmatched);
|
||||
}
|
||||
|
||||
.pl-ii /* invalid.illegal */ {
|
||||
color: var(--color-prettylights-syntax-invalid-illegal-text);
|
||||
background-color: var(--color-prettylights-syntax-invalid-illegal-bg);
|
||||
}
|
||||
|
||||
.pl-c2 /* carriage-return */ {
|
||||
color: var(--color-prettylights-syntax-carriage-return-text);
|
||||
background-color: var(--color-prettylights-syntax-carriage-return-bg);
|
||||
}
|
||||
|
||||
.pl-c2::before /* carriage-return */ {
|
||||
content: '^M';
|
||||
}
|
||||
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
|
||||
font-weight: bold;
|
||||
color: var(--color-prettylights-syntax-string-regexp);
|
||||
}
|
||||
|
||||
.pl-ml /* markup.list */ {
|
||||
color: var(--color-prettylights-syntax-markup-list);
|
||||
}
|
||||
|
||||
.pl-mh /* markup.heading */,
|
||||
.pl-mh .pl-en /* markup.heading entity.name */,
|
||||
.pl-ms /* meta.separator */ {
|
||||
font-weight: bold;
|
||||
color: var(--color-prettylights-syntax-markup-heading);
|
||||
}
|
||||
|
||||
.pl-mi /* markup.italic */ {
|
||||
font-style: italic;
|
||||
color: var(--color-prettylights-syntax-markup-italic);
|
||||
}
|
||||
|
||||
.pl-mb /* markup.bold */ {
|
||||
font-weight: bold;
|
||||
color: var(--color-prettylights-syntax-markup-bold);
|
||||
}
|
||||
|
||||
.pl-md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ {
|
||||
color: var(--color-prettylights-syntax-markup-deleted-text);
|
||||
background-color: var(--color-prettylights-syntax-markup-deleted-bg);
|
||||
}
|
||||
|
||||
.pl-mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ {
|
||||
color: var(--color-prettylights-syntax-markup-inserted-text);
|
||||
background-color: var(--color-prettylights-syntax-markup-inserted-bg);
|
||||
}
|
||||
|
||||
.pl-mc /* markup.changed, punctuation.definition.changed */ {
|
||||
color: var(--color-prettylights-syntax-markup-changed-text);
|
||||
background-color: var(--color-prettylights-syntax-markup-changed-bg);
|
||||
}
|
||||
|
||||
.pl-mi2 /* markup.ignored, markup.untracked */ {
|
||||
color: var(--color-prettylights-syntax-markup-ignored-text);
|
||||
background-color: var(--color-prettylights-syntax-markup-ignored-bg);
|
||||
}
|
||||
|
||||
.pl-mdr /* meta.diff.range */ {
|
||||
font-weight: bold;
|
||||
color: var(--color-prettylights-syntax-meta-diff-range);
|
||||
}
|
||||
|
||||
.pl-ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ {
|
||||
color: var(--color-prettylights-syntax-brackethighlighter-angle);
|
||||
}
|
||||
|
||||
.pl-sg /* sublimelinter.gutter-mark */ {
|
||||
color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);
|
||||
}
|
||||
|
||||
.pl-corl /* constant.other.reference.link, string.other.link */ {
|
||||
text-decoration: underline;
|
||||
color: var(--color-prettylights-syntax-constant-other-reference-link);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
.mapbox {
|
||||
margin: .5rem 0;
|
||||
padding: .5rem 0;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
meting-js {
|
||||
margin: .5rem 0;
|
||||
}
|
||||
@@ -9,17 +9,17 @@
|
||||
font-size: $toc-content-font-size;
|
||||
|
||||
ul {
|
||||
text-indent: -0.85rem;
|
||||
padding-left: .8rem;
|
||||
text-indent: -0.8rem;
|
||||
padding-left: 0.8rem;
|
||||
list-style: none;
|
||||
|
||||
a:first-child::before {
|
||||
content: "|";
|
||||
content: '|';
|
||||
font-weight: bolder;
|
||||
margin-right: .5rem;
|
||||
margin-right: 0.5rem;
|
||||
color: $single-link-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $single-link-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@
|
||||
color: $global-font-secondary-color;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: $code-background-color-dark;
|
||||
|
||||
rt {
|
||||
@@ -49,38 +49,51 @@
|
||||
|
||||
#toc-auto {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: $MAX_LENGTH;
|
||||
max-width: 0;
|
||||
padding: 0 .8rem;
|
||||
border-left: 4px solid $global-border-color;
|
||||
position: sticky;
|
||||
top: $header-height + 0.5rem;
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
@include overflow-wrap(break-word);
|
||||
box-sizing: border-box;
|
||||
top: 10rem;
|
||||
left: 0;
|
||||
visibility: hidden;
|
||||
|
||||
[header-desktop=normal] & {
|
||||
top: 5rem;
|
||||
}
|
||||
|
||||
@include blur;
|
||||
|
||||
[theme=dark] & {
|
||||
border-left-color: $global-border-color-dark;
|
||||
.toc-title {
|
||||
margin: 0.5rem 0;
|
||||
cursor: pointer;
|
||||
|
||||
&::before {
|
||||
content: '|';
|
||||
font-weight: bolder;
|
||||
margin-right: 0.5rem;
|
||||
color: $global-border-color;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $global-border-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
i.toc-icon {
|
||||
@include transition(transform 0.2s ease);
|
||||
}
|
||||
}
|
||||
|
||||
.toc-title {
|
||||
margin: .8rem 0;
|
||||
&.toc-hidden i.toc-icon {
|
||||
@include transform(rotate(-90deg));
|
||||
@include transition(transform 0.2s ease);
|
||||
}
|
||||
|
||||
.toc-content {
|
||||
overflow-y: scroll;
|
||||
max-height: calc(100vh - #{2*$header-height});
|
||||
|
||||
&.always-active ul {
|
||||
display: block;
|
||||
}
|
||||
|
||||
> nav > ul {
|
||||
margin: .625rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
@@ -97,14 +110,14 @@
|
||||
font-weight: bold;
|
||||
color: $single-link-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $single-link-color-dark;
|
||||
}
|
||||
|
||||
&::before {
|
||||
color: $single-link-hover-color;
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $single-link-hover-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -114,9 +127,9 @@
|
||||
|
||||
#toc-static {
|
||||
display: none;
|
||||
margin: .8rem 0;
|
||||
margin: 0.8rem 0;
|
||||
|
||||
&[kept=true] {
|
||||
&[kept='true'] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@@ -124,10 +137,10 @@
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
line-height: 2em;
|
||||
padding: 0 .75rem;
|
||||
background: darken($code-background-color, 6%);
|
||||
padding: 0 0.75rem;
|
||||
background: darken($code-background-color, 3%);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: darken($code-background-color-dark, 6%);
|
||||
}
|
||||
}
|
||||
@@ -137,19 +150,19 @@
|
||||
|
||||
> nav > ul {
|
||||
margin: 0;
|
||||
padding: .4rem 1rem .4rem 1.8rem;
|
||||
padding: 0.4rem 1rem 0.4rem 1.8rem;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background-color: $code-background-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
&.open {
|
||||
.toc-title {
|
||||
background: darken($code-background-color, 3%);
|
||||
background: darken($code-background-color, 6%);
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
background: darken($code-background-color-dark, 3%);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -2,14 +2,16 @@
|
||||
.cc-btn {
|
||||
color: $global-font-color;
|
||||
|
||||
&:hover, &:focus {
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-color;
|
||||
|
||||
&:hover, &:focus {
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
+9
-5
@@ -9,7 +9,7 @@
|
||||
right: 1.5rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.3rem;
|
||||
padding: .6rem .6rem;
|
||||
padding: 0.6rem 0.6rem;
|
||||
color: $global-font-secondary-color;
|
||||
background: $header-background-color;
|
||||
@include border-radius(2rem);
|
||||
@@ -17,20 +17,24 @@
|
||||
|
||||
@include blur;
|
||||
|
||||
&:hover, &:active {
|
||||
&:hover,
|
||||
&:active {
|
||||
color: $global-font-color;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&:active, &:focus, &:hover {
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
color: $global-font-secondary-color-dark;
|
||||
background: $header-background-color-dark;
|
||||
|
||||
&:hover, &:active {
|
||||
&:hover,
|
||||
&:active {
|
||||
color: $global-font-color-dark;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
@keyframes octocat-wave {
|
||||
0%,
|
||||
100% {
|
||||
transform: rotate(0);
|
||||
}
|
||||
20%,
|
||||
60% {
|
||||
transform: rotate(-25deg);
|
||||
}
|
||||
40%,
|
||||
80% {
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
}
|
||||
|
||||
.github-corner {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
z-index: 150;
|
||||
|
||||
:hover .octo-arm {
|
||||
animation: octocat-wave 560ms ease-in-out;
|
||||
}
|
||||
svg {
|
||||
width: $header-height;
|
||||
height: $header-height;
|
||||
border: 0;
|
||||
color: $github-corner-color;
|
||||
fill: $github-corner-fill;
|
||||
|
||||
[theme='dark'] & {
|
||||
color: $github-corner-color-dark;
|
||||
fill: $github-corner-fill-dark;
|
||||
}
|
||||
}
|
||||
&.left {
|
||||
left: 0;
|
||||
|
||||
svg {
|
||||
transform: scale(-1, 1);
|
||||
}
|
||||
}
|
||||
&.right {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
@import '_cookieconsent';
|
||||
@import '_fixed-button';
|
||||
@import '_github-corner';
|
||||
@@ -0,0 +1,7 @@
|
||||
:root {
|
||||
// Note: Custom variable values only support SassScript inside `#{}`.
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
--#{$prefix}#{$color}: #{$value};
|
||||
}
|
||||
}
|
||||
+11
-9
@@ -1,17 +1,19 @@
|
||||
.admonition {
|
||||
position: relative;
|
||||
margin: 1rem 0;
|
||||
padding: 0 .75rem;
|
||||
padding: 0 0.75rem;
|
||||
background-color: map-get($admonition-background-color-map, 'note');
|
||||
border-left: .25rem solid map-get($admonition-color-map, 'note');
|
||||
border-left: 0.25rem solid map-get($admonition-color-map, 'note');
|
||||
overflow: auto;
|
||||
@include border-radius($global-border-radius);
|
||||
|
||||
.admonition-title {
|
||||
font-weight: bold;
|
||||
margin: 0 -0.75rem;
|
||||
padding: .25rem 1.8rem;
|
||||
padding: 0.25rem 1.8rem;
|
||||
border-bottom: 1px solid map-get($admonition-background-color-map, 'note');
|
||||
background-color: opacify(map-get($admonition-background-color-map, 'note'), 0.15);
|
||||
@include border-radius(0);
|
||||
}
|
||||
|
||||
&.open .admonition-title {
|
||||
@@ -19,21 +21,21 @@
|
||||
}
|
||||
|
||||
.admonition-content {
|
||||
padding: .5rem 0;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
|
||||
i.icon {
|
||||
font-size: 0.85rem;
|
||||
color: map-get($admonition-color-map, 'note');
|
||||
position: absolute;
|
||||
top: .6rem;
|
||||
left: .4rem;
|
||||
top: 0.6rem;
|
||||
left: 0.4rem;
|
||||
}
|
||||
|
||||
i.details-icon {
|
||||
position: absolute;
|
||||
top: .6rem;
|
||||
right: .3rem;
|
||||
top: 0.6rem;
|
||||
right: 0.3rem;
|
||||
}
|
||||
|
||||
@each $type, $color in $admonition-color-map {
|
||||
@@ -62,6 +64,6 @@
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: .75rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Card link style
|
||||
* @author @Lruihao https://lruihao.cn
|
||||
*/
|
||||
|
||||
.card-link {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin: 0.5rem auto;
|
||||
box-sizing: border-box;
|
||||
width: clamp(50%, 400px, 100%);
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
text-decoration: none;
|
||||
border: none;
|
||||
@include border-radius(0.75rem);
|
||||
}
|
||||
|
||||
.cl- {
|
||||
&backdrop {
|
||||
position: absolute;
|
||||
top: 0.75rem;
|
||||
bottom: 0.75rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background-image: url('/images/fixit.svg');
|
||||
background-repeat: no-repeat;
|
||||
filter: blur(0.5rem);
|
||||
opacity: 0.5;
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
&content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.75rem;
|
||||
background-color: rgba(245, 245, 245, 0.88);
|
||||
}
|
||||
|
||||
&text {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&title {
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
max-height: calc(1rem * 1.25 * 2);
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.25;
|
||||
color: $global-font-color;
|
||||
}
|
||||
|
||||
&meta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 0.25rem;
|
||||
font-size: 0.825rem;
|
||||
color: $global-font-secondary-color;
|
||||
}
|
||||
|
||||
&icon-link {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
flex-shrink: 0;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
&url {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
&icon-globe {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
flex-shrink: 0;
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
|
||||
[theme='dark'] & {
|
||||
&content {
|
||||
background-color: rgba(61, 62, 65, 0.88);
|
||||
}
|
||||
|
||||
&title {
|
||||
color: $global-font-color-dark;
|
||||
}
|
||||
|
||||
&meta {
|
||||
color: $global-font-secondary-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
.blockquote-center {
|
||||
border-left: none;
|
||||
margin: 40px 0;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
color: initial;
|
||||
|
||||
&::after,
|
||||
&::before {
|
||||
left: 0;
|
||||
line-height: 1;
|
||||
opacity: 0.6;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&::before {
|
||||
border-top: 1px solid $global-border-color;
|
||||
text-align: left;
|
||||
top: -20px;
|
||||
content: '\f10d';
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-weight: 900;
|
||||
|
||||
[theme='dark'] & {
|
||||
border-top-color: $global-border-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
&::after {
|
||||
border-bottom: 1px solid $global-border-color;
|
||||
bottom: -20px;
|
||||
text-align: right;
|
||||
content: '\f10e';
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-weight: 900;
|
||||
|
||||
[theme='dark'] & {
|
||||
border-bottom-color: $global-border-color-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
.echarts {
|
||||
margin: .5rem 0;
|
||||
margin: 0.5rem 0;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@import '_admonition';
|
||||
@import '_bilibili';
|
||||
@import '_cardlink';
|
||||
@import '_center-quote';
|
||||
@import '_echarts';
|
||||
@import '_instagram';
|
||||
@import '_mapbox';
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
iframe.instagram-media {
|
||||
[theme=dark] & {
|
||||
[theme='dark'] & {
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
.mapbox {
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.5rem 0;
|
||||
@include border-radius($global-border-radius);
|
||||
}
|
||||
+218
-174
@@ -3,35 +3,59 @@
|
||||
// ==============================
|
||||
|
||||
// ========== Global ========== //
|
||||
// Prefix for :root CSS variables.
|
||||
$prefix: fi- !default;
|
||||
|
||||
// Font and Line Height
|
||||
$global-font-family: system-ui, -apple-system, BlinkMacSystemFont, PingFang SC, Microsoft YaHei UI, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial, sans-serif !default;
|
||||
$global-font-size: 16px;
|
||||
$global-font-weight: 400;
|
||||
$global-line-height: 1.5rem;
|
||||
|
||||
// Radius of the border
|
||||
$global-border-radius: 5px !default;
|
||||
|
||||
// Color of the background
|
||||
$global-background-color: #fff !default;
|
||||
$global-background-color-dark: #292a2d !default;
|
||||
$global-background-color: #ffffff !default;
|
||||
$global-background-color-dark: #292a2e !default;
|
||||
|
||||
// Color of the text
|
||||
$global-font-color: #161209 !default;
|
||||
$global-font-color-dark: #a9a9b3 !default;
|
||||
$global-font-color-dark: #b1b1ba !default;
|
||||
|
||||
// Color of the secondary text
|
||||
$global-font-secondary-color: #a9a9b3 !default;
|
||||
$global-font-secondary-color-dark: #5d5d5f !default;
|
||||
$global-font-secondary-color: #b1b1ba !default;
|
||||
$global-font-secondary-color-dark: #909092 !default;
|
||||
|
||||
// Color of the link
|
||||
$global-link-color: #161209 !default;
|
||||
$global-link-color-dark: #a9a9b3 !default;
|
||||
$global-link-color-dark: #b1b1ba !default;
|
||||
|
||||
// Color of the hover link
|
||||
$global-link-hover-color: #2d96bd !default;
|
||||
$global-link-hover-color: #2983bb !default; // 潮蓝
|
||||
$global-link-hover-color-dark: #fff !default;
|
||||
|
||||
// Color of the border
|
||||
$global-border-color: #f0f0f0 !default;
|
||||
$global-border-color-dark: #363636 !default;
|
||||
|
||||
// Theme colors
|
||||
$primary: #1772ee !default;
|
||||
$secondary: #919191 !default;
|
||||
$success: #13ce66 !default;
|
||||
$info: #0dcaf0 !default;
|
||||
$warning: #ffba00 !default;
|
||||
$danger: #ff4949 !default;
|
||||
|
||||
// Theme colors map
|
||||
$theme-colors: (
|
||||
'primary': $primary,
|
||||
'secondary': $secondary,
|
||||
'success': $success,
|
||||
'info': $info,
|
||||
'warning': $warning,
|
||||
'danger': $danger
|
||||
) !default;
|
||||
// ========== Global ========== //
|
||||
|
||||
// ========== Scrollbar ========== //
|
||||
@@ -39,7 +63,7 @@ $global-border-color-dark: #363636 !default;
|
||||
$scrollbar-color: #87878d !default;
|
||||
|
||||
// Color of the hover scrollbar
|
||||
$scrollbar-hover-color: #a9a9b3 !default;
|
||||
$scrollbar-hover-color: #b1b1ba !default;
|
||||
// ========== Scrollbar ========== //
|
||||
|
||||
// ========== Selection ========== //
|
||||
@@ -60,9 +84,9 @@ $header-background-color-dark: #252627 !default;
|
||||
$header-title-font-family: $global-font-family !default;
|
||||
$header-title-font-size: 1.5rem !default;
|
||||
|
||||
// Color of the hover header item
|
||||
$header-hover-color: #161209 !default;
|
||||
$header-hover-color-dark: #fff !default;
|
||||
// Color of the active menu item
|
||||
$menu-active-color: #161209 !default;
|
||||
$menu-active-color-dark: #fff !default;
|
||||
|
||||
// Color of the search background
|
||||
$search-background-color: #e9e9e9 !default;
|
||||
@@ -75,12 +99,12 @@ $toc-title-font-size: 1.2rem !default;
|
||||
$toc-content-font-size: 1rem !default;
|
||||
|
||||
// Color of the single link
|
||||
$single-link-color: #2d96bd !default;
|
||||
$single-link-color-dark: #55bde2 !default;
|
||||
$single-link-color: #2376b7 !default; // 花青
|
||||
$single-link-color-dark: #1781b5 !default; // 釉蓝
|
||||
|
||||
// Color of the hover single link
|
||||
$single-link-hover-color: #ef3982 !default;
|
||||
$single-link-hover-color-dark: #bdebfc !default;
|
||||
$single-link-hover-color: #ea517f !default; // 莲瓣红
|
||||
$single-link-hover-color-dark: #619ac3 !default; // 羽扇豆蓝
|
||||
|
||||
// Color of the table background
|
||||
$table-background-color: #fff !default;
|
||||
@@ -91,14 +115,14 @@ $table-thead-color: #ededed !default;
|
||||
$table-thead-color-dark: #20252b !default;
|
||||
|
||||
// Color of the blockquote
|
||||
$blockquote-color: #6bd6fd !default;
|
||||
$blockquote-color-dark: #59c5ec !default;
|
||||
$blockquote-color: #697681 !default;
|
||||
$blockquote-color-dark: #9ba3aa !default;
|
||||
// ========== Single Content ========== //
|
||||
|
||||
// ========== Pagination ========== //
|
||||
// Color of the link in pagination
|
||||
$pagination-link-color: #2d96bd !default;
|
||||
$pagination-link-color-dark: #a9a9b3 !default;
|
||||
$pagination-link-color: #bfbfbf !default;
|
||||
$pagination-link-color-dark: #b1b1ba !default;
|
||||
|
||||
// Color of the hover link in pagination
|
||||
$pagination-link-hover-color: #000 !default;
|
||||
@@ -107,18 +131,24 @@ $pagination-link-hover-color-dark: #fff !default;
|
||||
|
||||
// ========== Code ========== //
|
||||
// Color of the code
|
||||
$code-color: #E74C3C !default;
|
||||
$code-color-dark: #E5BF78 !default;
|
||||
$code-color: #24292f !default;
|
||||
$code-color-dark: #adbac7 !default;
|
||||
|
||||
// Color of the code background
|
||||
$code-background-color: #f5f5f5 !default;
|
||||
$code-background-color-dark: #272C34 !default;
|
||||
$code-background-color: #f6f8fa !default;
|
||||
$code-background-color-dark: #2d333b !default;
|
||||
|
||||
$code-error-color: #dc3545 !default;
|
||||
|
||||
// Color of the hightlight code
|
||||
$code-hightlight-color: #fff8c5 !default;
|
||||
$code-hightlight-color-dark: rgba(174, 124, 20, 0.15) !default;
|
||||
|
||||
$code-info-color: #9c9c9c !default;
|
||||
$code-info-color-dark: #b1b0b0 !default;
|
||||
|
||||
// Font size of the code
|
||||
$code-font-size: .875rem !default;
|
||||
$code-font-size: 0.875rem !default;
|
||||
|
||||
// Font family of the code
|
||||
$code-font-family: Source Code Pro, Menlo, Consolas, Monaco, monospace, $global-font-family !default;
|
||||
@@ -173,159 +203,165 @@ $code-type-map: (
|
||||
language-typescript: 'TypeScript',
|
||||
language-vue: 'Vue',
|
||||
language-yml: 'YAML',
|
||||
language-yaml: 'YAML',
|
||||
language-yaml: 'YAML'
|
||||
) !default;
|
||||
|
||||
// Color map of the code highlight
|
||||
$code-highlight-color-map: (
|
||||
/* Parentheses */ 'p': #a9a9b3,
|
||||
/* Keyword */ 'k': #b501a9,
|
||||
/* KeywordConstant */ 'kc': #b501a9,
|
||||
/* KeywordDeclaration */ 'kd': #b501a9,
|
||||
/* KeywordNamespace */ 'kn': #b501a9,
|
||||
/* KeywordPseudo */ 'kp': #b501a9,
|
||||
/* KeywordReserved */ 'kr': #b501a9,
|
||||
/* KeywordType */ 'kt': #b501a9,
|
||||
/* Name */ 'n': #333333,
|
||||
/* NameAttribute */ 'na': #2b77fa,
|
||||
/* NameBuiltin */ 'nb': #f74840,
|
||||
/* NameBuiltinPseudo */ 'bp': #f74840,
|
||||
/* NameClass */ 'nc': #cb8100,
|
||||
/* NameConstant */ 'no': #2b77fa,
|
||||
/* NameDecorator */ 'nd': #0086c1,
|
||||
/* NameEntity */ 'ni': #2b77fa,
|
||||
/* NameException */ 'ne': #2b77fa,
|
||||
/* NameFunction */ 'nf': #2b77fa,
|
||||
/* NameFunctionMagic */ 'fm': #1ccad6,
|
||||
/* NameLabel */ 'nl': #2b77fa,
|
||||
/* NameNamespace */ 'nn': #2b77fa,
|
||||
/* NameOther */ 'nx': #333333,
|
||||
/* NameProperty */ 'py': #2b77fa,
|
||||
/* NameTag */ 'nt': #2b77fa,
|
||||
/* NameVariable */ 'nv': #2b77fa,
|
||||
/* NameVariableClass */ 'vc': #2b77fa,
|
||||
/* NameVariableGlobal */ 'vg': #2b77fa,
|
||||
/* NameVariableInstance */ 'vi': #2b77fa,
|
||||
/* NameVariableMagic */ 'vm': #2b77fa,
|
||||
/* Literal */ 'l': #2aa198,
|
||||
/* LiteralDate */ 'ld': #2aa198,
|
||||
/* LiteralString */ 's': #24a443,
|
||||
/* LiteralStringAffix */ 'sa': #24a443,
|
||||
/* LiteralStringBacktick */ 'sb': #24a443,
|
||||
/* LiteralStringChar */ 'sc': #24a443,
|
||||
/* LiteralStringDelimiter */ 'dl': #24a443,
|
||||
/* LiteralStringDoc */ 'sd': #24a443,
|
||||
/* LiteralStringDouble */ 's2': #24a443,
|
||||
/* LiteralStringEscape */ 'se': #24a443,
|
||||
/* LiteralStringHeredoc */ 'sh': #24a443,
|
||||
/* LiteralStringInterpol */ 'si': #24a443,
|
||||
/* LiteralStringOther */ 'sx': #24a443,
|
||||
/* LiteralStringRegex */ 'sr': #24a443,
|
||||
/* LiteralStringSingle */ 's1': #24a443,
|
||||
/* LiteralStringSymbol */ 'ss': #24a443,
|
||||
/* LiteralNumber */ 'm': #e2893c,
|
||||
/* LiteralNumberBin */ 'mb': #e2893c,
|
||||
/* LiteralNumberFloat */ 'mf': #e2893c,
|
||||
/* LiteralNumberHex */ 'mh': #e2893c,
|
||||
/* LiteralNumberInteger */ 'mi': #e2893c,
|
||||
/* LiteralNumberIntegerLong */ 'il': #e2893c,
|
||||
/* LiteralNumberOct */ 'mo': #e2893c,
|
||||
/* Operator */ 'o': #f19b04,
|
||||
/* OperatorWord */ 'ow': #b501a9,
|
||||
/* Comment */ 'c': #a0a1a8,
|
||||
/* CommentHashbang */ 'ch': #a0a1a8,
|
||||
/* CommentMultiline */ 'cm': #a0a1a8,
|
||||
/* CommentSingle */ 'c1': #a0a1a8,
|
||||
/* CommentSpecial */ 'cs': #a0a1a8,
|
||||
/* CommentPreproc */ 'cp': #a0a1a8,
|
||||
/* CommentPreprocFile */ 'cpf': #a0a1a8,
|
||||
/* Generic */ 'g': #e72d40,
|
||||
/* GenericDeleted */ 'gd': #e72d40,
|
||||
/* GenericEmph */ 'ge': #e72d40,
|
||||
/* GenericError */ 'gr': #e72d40,
|
||||
/* GenericHeading */ 'gh': #e72d40,
|
||||
/* GenericInserted */ 'gi': #e72d40,
|
||||
/* GenericOutput */ 'go': #e72d40,
|
||||
/* GenericPrompt */ 'gp': #e72d40,
|
||||
/* GenericStrong */ 'gs': #e72d40,
|
||||
/* GenericSubheading */ 'gu': #e72d40,
|
||||
/* GenericTraceback */ 'gt': #e72d40,
|
||||
/* TextWhitespace */ 'w': #bbbbbb,
|
||||
/* Error */ 'err': $code-error-color,
|
||||
/* Keyword */ 'k': #cf222e,
|
||||
/* KeywordConstant */ 'kc': #0550ae,
|
||||
/* KeywordDeclaration */ 'kd': #cf222e,
|
||||
/* KeywordNamespace */ 'kn': #cf222e,
|
||||
/* KeywordPseudo */ 'kp': #cf222e,
|
||||
/* KeywordReserved */ 'kr': #cf222e,
|
||||
/* KeywordType */ 'kt': #cf222e,
|
||||
/* Name */ 'n': $code-color,
|
||||
/* NameAttribute */ 'na': #0550ae,
|
||||
/* NameBuiltin */ 'nb': #0550ae,
|
||||
/* NameBuiltinPseudo */ 'bp': $code-color,
|
||||
/* NameClass */ 'nc': #8250df,
|
||||
/* NameConstant */ 'no': #cf222e,
|
||||
/* NameDecorator */ 'nd': #8250df,
|
||||
/* NameEntity */ 'ni': #0550ae,
|
||||
/* NameException */ 'ne': #0550ae,
|
||||
/* NameFunction */ 'nf': #0550ae,
|
||||
/* NameFunctionMagic */ 'fm': #0550ae,
|
||||
/* NameLabel */ 'nl': #0550ae,
|
||||
/* NameNamespace */ 'nn': #8250df,
|
||||
/* NameOther */ 'nx': #0550ae,
|
||||
/* NameProperty */ 'py': #0550ae,
|
||||
/* NameTag */ 'nt': #116329,
|
||||
/* NameVariable */ 'nv': #953800,
|
||||
/* NameVariableClass */ 'vc': #0550ae,
|
||||
/* NameVariableGlobal */ 'vg': #0550ae,
|
||||
/* NameVariableInstance */ 'vi': #0550ae,
|
||||
/* NameVariableMagic */ 'vm': #0550ae,
|
||||
/* Literal */ 'l': #0550ae,
|
||||
/* LiteralDate */ 'ld': #0a3069,
|
||||
/* LiteralString */ 's': #0a3069,
|
||||
/* LiteralStringAffix */ 'sa': #0a3069,
|
||||
/* LiteralStringBacktick */ 'sb': #0a3069,
|
||||
/* LiteralStringChar */ 'sc': #0a3069,
|
||||
/* LiteralStringDelimiter */ 'dl': #0a3069,
|
||||
/* LiteralStringDoc */ 'sd': #0a3069,
|
||||
/* LiteralStringDouble */ 's2': #0a3069,
|
||||
/* LiteralStringEscape */ 'se': #0a3069,
|
||||
/* LiteralStringHeredoc */ 'sh': #0a3069,
|
||||
/* LiteralStringInterpol */ 'si': #0a3069,
|
||||
/* LiteralStringOther */ 'sx': #0a3069,
|
||||
/* LiteralStringRegex */ 'sr': #0a3069,
|
||||
/* LiteralStringSingle */ 's1': #0a3069,
|
||||
/* LiteralStringSymbol */ 'ss': #0a3069,
|
||||
/* LiteralNumber */ 'm': #0550ae,
|
||||
/* LiteralNumberBin */ 'mb': #0550ae,
|
||||
/* LiteralNumberFloat */ 'mf': #0550ae,
|
||||
/* LiteralNumberHex */ 'mh': #0550ae,
|
||||
/* LiteralNumberInteger */ 'mi': #0550ae,
|
||||
/* LiteralNumberIntegerLong */ 'il': #0550ae,
|
||||
/* LiteralNumberOct */ 'mo': #0550ae,
|
||||
/* Operator */ 'o': #cf222e,
|
||||
/* OperatorWord */ 'ow': #cf222e,
|
||||
/* Punctuation */ 'p': $code-color,
|
||||
/* Comment */ 'c': #6e7781,
|
||||
/* CommentHashbang */ 'ch': #6e7781,
|
||||
/* CommentMultiline */ 'cm': #6e7781,
|
||||
/* CommentSingle */ 'c1': #6e7781,
|
||||
/* CommentSpecial */ 'cs': #6e7781,
|
||||
/* CommentPreproc */ 'cp': #0550ae,
|
||||
/* CommentPreprocFile */ 'cpf': #6e7781,
|
||||
/* Generic */ 'g': $code-color,
|
||||
/* GenericDeleted */ 'gd': #82071e,
|
||||
/* GenericEmph */ 'ge': $code-color,
|
||||
/* GenericError */ 'gr': $code-error-color,
|
||||
/* GenericHeading */ 'gh': $code-color,
|
||||
/* GenericInserted */ 'gi': #116329,
|
||||
/* GenericOutput */ 'go': $code-color,
|
||||
/* GenericPrompt */ 'gp': $code-color,
|
||||
/* GenericStrong */ 'gs': $code-color,
|
||||
/* GenericSubheading */ 'gu': $code-color,
|
||||
/* GenericTraceback */ 'gt': $code-error-color,
|
||||
/* GenericUnderline */ 'gl': $code-color,
|
||||
/* TextWhitespace */ 'w': $code-color,
|
||||
/* Other */ 'x': $code-color
|
||||
) !default;
|
||||
$code-highlight-color-map-dark: (
|
||||
/* Parentheses */ 'p': #a9a9b3,
|
||||
/* Keyword */ 'k': #d371e3,
|
||||
/* KeywordConstant */ 'kc': #d371e3,
|
||||
/* KeywordDeclaration */ 'kd': #d371e3,
|
||||
/* KeywordNamespace */ 'kn': #d371e3,
|
||||
/* KeywordPseudo */ 'kp': #d371e3,
|
||||
/* KeywordReserved */ 'kr': #d371e3,
|
||||
/* KeywordType */ 'kt': #d371e3,
|
||||
/* Name */ 'n': #a9b2c0,
|
||||
/* NameAttribute */ 'na': #41b0f5,
|
||||
/* NameBuiltin */ 'nb': #19b9c4,
|
||||
/* NameBuiltinPseudo */ 'bp': #ecbf6f,
|
||||
/* NameClass */ 'nc': #ecbf6f,
|
||||
/* NameConstant */ 'no': #41b0f5,
|
||||
/* NameDecorator */ 'nd': #ecbf6f,
|
||||
/* NameEntity */ 'ni': #41b0f5,
|
||||
/* NameException */ 'ne': #41b0f5,
|
||||
/* NameFunction */ 'nf': #41b0f5,
|
||||
/* NameFunctionMagic */ 'fm': #19b9c4,
|
||||
/* NameLabel */ 'nl': #41b0f5,
|
||||
/* NameNamespace */ 'nn': #41b0f5,
|
||||
/* NameOther */ 'nx': #a9a9b3,
|
||||
/* NameProperty */ 'py': #41b0f5,
|
||||
/* NameTag */ 'nt': #41b0f5,
|
||||
/* NameVariable */ 'nv': #41b0f5,
|
||||
/* NameVariableClass */ 'vc': #41b0f5,
|
||||
/* NameVariableGlobal */ 'vg': #41b0f5,
|
||||
/* NameVariableInstance */ 'vi': #41b0f5,
|
||||
/* NameVariableMagic */ 'vm': #41b0f5,
|
||||
/* Literal */ 'l': #2aa198,
|
||||
/* LiteralDate */ 'ld': #2aa198,
|
||||
/* LiteralString */ 's': #8cc570,
|
||||
/* LiteralStringAffix */ 'sa': #8cc570,
|
||||
/* LiteralStringBacktick */ 'sb': #8cc570,
|
||||
/* LiteralStringChar */ 'sc': #8cc570,
|
||||
/* LiteralStringDelimiter */ 'dl': #8cc570,
|
||||
/* LiteralStringDoc */ 'sd': #8cc570,
|
||||
/* LiteralStringDouble */ 's2': #8cc570,
|
||||
/* LiteralStringEscape */ 'se': #8cc570,
|
||||
/* LiteralStringHeredoc */ 'sh': #8cc570,
|
||||
/* LiteralStringInterpol */ 'si': #8cc570,
|
||||
/* LiteralStringOther */ 'sx': #8cc570,
|
||||
/* LiteralStringRegex */ 'sr': #8cc570,
|
||||
/* LiteralStringSingle */ 's1': #8cc570,
|
||||
/* LiteralStringSymbol */ 'ss': #8cc570,
|
||||
/* LiteralNumber */ 'm': #db985c,
|
||||
/* LiteralNumberBin */ 'mb': #db985c,
|
||||
/* LiteralNumberFloat */ 'mf': #db985c,
|
||||
/* LiteralNumberHex */ 'mh': #db985c,
|
||||
/* LiteralNumberInteger */ 'mi': #db985c,
|
||||
/* LiteralNumberIntegerLong */ 'il': #db985c,
|
||||
/* LiteralNumberOct */ 'mo': #db985c,
|
||||
/* Operator */ 'o': #ecbf6f,
|
||||
/* OperatorWord */ 'ow': #d371e3,
|
||||
/* Comment */ 'c': #7e848f,
|
||||
/* CommentHashbang */ 'ch': #7e848f,
|
||||
/* CommentMultiline */ 'cm': #7e848f,
|
||||
/* CommentSingle */ 'c1': #7e848f,
|
||||
/* CommentSpecial */ 'cs': #7e848f,
|
||||
/* CommentPreproc */ 'cp': #7e848f,
|
||||
/* CommentPreprocFile */ 'cpf': #7e848f,
|
||||
/* Generic */ 'g': #f16372,
|
||||
/* GenericDeleted */ 'gd': #f16372,
|
||||
/* GenericEmph */ 'ge': #f16372,
|
||||
/* GenericError */ 'gr': #f16372,
|
||||
/* GenericHeading */ 'gh': #f16372,
|
||||
/* GenericInserted */ 'gi': #f16372,
|
||||
/* GenericOutput */ 'go': #f16372,
|
||||
/* GenericPrompt */ 'gp': #f16372,
|
||||
/* GenericStrong */ 'gs': #f16372,
|
||||
/* GenericSubheading */ 'gu': #f16372,
|
||||
/* GenericTraceback */ 'gt': #f16372,
|
||||
/* TextWhitespace */ 'w': #bbbbbb,
|
||||
/* Error */ 'err': $code-error-color,
|
||||
/* Keyword */ 'k': #f47067,
|
||||
/* KeywordConstant */ 'kc': #6cb6ff,
|
||||
/* KeywordDeclaration */ 'kd': #f47067,
|
||||
/* KeywordNamespace */ 'kn': #f47067,
|
||||
/* KeywordPseudo */ 'kp': #f47067,
|
||||
/* KeywordReserved */ 'kr': #f47067,
|
||||
/* KeywordType */ 'kt': #f47067,
|
||||
/* Name */ 'n': $code-color-dark,
|
||||
/* NameAttribute */ 'na': #6cb6ff,
|
||||
/* NameBuiltin */ 'nb': #dcbdfb,
|
||||
/* NameBuiltinPseudo */ 'bp': $code-color-dark,
|
||||
/* NameClass */ 'nc': #dcbdfb,
|
||||
/* NameConstant */ 'no': #6cb6ff,
|
||||
/* NameDecorator */ 'nd': #dcbdfb,
|
||||
/* NameEntity */ 'ni': #6cb6ff,
|
||||
/* NameException */ 'ne': #6cb6ff,
|
||||
/* NameFunction */ 'nf': #dcbdfb,
|
||||
/* NameFunctionMagic */ 'fm': #6cb6ff,
|
||||
/* NameLabel */ 'nl': #6cb6ff,
|
||||
/* NameNamespace */ 'nn': #f47067,
|
||||
/* NameOther */ 'nx': #dcbdfb,
|
||||
/* NameProperty */ 'py': #6cb6ff,
|
||||
/* NameTag */ 'nt': #8ddb8c,
|
||||
/* NameVariable */ 'nv': #f69d50,
|
||||
/* NameVariableClass */ 'vc': #6cb6ff,
|
||||
/* NameVariableGlobal */ 'vg': #6cb6ff,
|
||||
/* NameVariableInstance */ 'vi': #6cb6ff,
|
||||
/* NameVariableMagic */ 'vm': #6cb6ff,
|
||||
/* Literal */ 'l': #6cb6ff,
|
||||
/* LiteralDate */ 'ld': #96d0ff,
|
||||
/* LiteralString */ 's': #96d0ff,
|
||||
/* LiteralStringAffix */ 'sa': #96d0ff,
|
||||
/* LiteralStringBacktick */ 'sb': #96d0ff,
|
||||
/* LiteralStringChar */ 'sc': #96d0ff,
|
||||
/* LiteralStringDelimiter */ 'dl': #96d0ff,
|
||||
/* LiteralStringDoc */ 'sd': #96d0ff,
|
||||
/* LiteralStringDouble */ 's2': #96d0ff,
|
||||
/* LiteralStringEscape */ 'se': #96d0ff,
|
||||
/* LiteralStringHeredoc */ 'sh': #96d0ff,
|
||||
/* LiteralStringInterpol */ 'si': #96d0ff,
|
||||
/* LiteralStringOther */ 'sx': #96d0ff,
|
||||
/* LiteralStringRegex */ 'sr': #96d0ff,
|
||||
/* LiteralStringSingle */ 's1': #96d0ff,
|
||||
/* LiteralStringSymbol */ 'ss': #96d0ff,
|
||||
/* LiteralNumber */ 'm': #6cb6ff,
|
||||
/* LiteralNumberBin */ 'mb': #6cb6ff,
|
||||
/* LiteralNumberFloat */ 'mf': #6cb6ff,
|
||||
/* LiteralNumberHex */ 'mh': #6cb6ff,
|
||||
/* LiteralNumberInteger */ 'mi': #6cb6ff,
|
||||
/* LiteralNumberIntegerLong */ 'il': #6cb6ff,
|
||||
/* LiteralNumberOct */ 'mo': #6cb6ff,
|
||||
/* Operator */ 'o': #f47067,
|
||||
/* OperatorWord */ 'ow': #f47067,
|
||||
/* Punctuation */ 'p': $code-color-dark,
|
||||
/* Comment */ 'c': #768390,
|
||||
/* CommentHashbang */ 'ch': #768390,
|
||||
/* CommentMultiline */ 'cm': #768390,
|
||||
/* CommentSingle */ 'c1': #768390,
|
||||
/* CommentSpecial */ 'cs': #768390,
|
||||
/* CommentPreproc */ 'cp': #6cb6ff,
|
||||
/* CommentPreprocFile */ 'cpf': #768390,
|
||||
/* Generic */ 'g': $code-color-dark,
|
||||
/* GenericDeleted */ 'gd': #ffd8d3,
|
||||
/* GenericEmph */ 'ge': $code-color-dark,
|
||||
/* GenericError */ 'gr': $code-error-color,
|
||||
/* GenericHeading */ 'gh': $code-color-dark,
|
||||
/* GenericInserted */ 'gi': #b4f1b4,
|
||||
/* GenericOutput */ 'go': $code-color-dark,
|
||||
/* GenericPrompt */ 'gp': $code-color-dark,
|
||||
/* GenericStrong */ 'gs': $code-color-dark,
|
||||
/* GenericSubheading */ 'gu': $code-color-dark,
|
||||
/* GenericTraceback */ 'gt': $code-error-color,
|
||||
/* GenericUnderline */ 'gl': $code-color-dark,
|
||||
/* TextWhitespace */ 'w': $code-color-dark,
|
||||
/* Other */ 'x': $code-color-dark
|
||||
) !default;
|
||||
// ========== Code ========== //
|
||||
|
||||
@@ -343,7 +379,7 @@ $admonition-color-map: (
|
||||
'danger': #ff1744,
|
||||
'bug': #f50057,
|
||||
'example': #651fff,
|
||||
'quote': #9e9e9e,
|
||||
'quote': #9e9e9e
|
||||
) !default;
|
||||
|
||||
// Color map of the admonition background
|
||||
@@ -359,8 +395,16 @@ $admonition-background-color-map: (
|
||||
'danger': rgba(255, 23, 68, 0.1),
|
||||
'bug': rgba(245, 0, 87, 0.1),
|
||||
'example': rgba(101, 31, 255, 0.1),
|
||||
'quote': rgba(159, 159, 159, 0.1),
|
||||
'quote': rgba(159, 159, 159, 0.1)
|
||||
) !default;
|
||||
// ========== Admonition ========== //
|
||||
|
||||
$MAX_LENGTH: 12000px;
|
||||
// ========== GitHub Corners ========== //
|
||||
// Color of the GitHub Corners
|
||||
$github-corner-color: white !default;
|
||||
$github-corner-color-dark: black !default;
|
||||
|
||||
// Color of the GitHub Corners background
|
||||
$github-corner-fill: $header-background-color-dark !default;
|
||||
$github-corner-fill-dark: $header-background-color !default;
|
||||
// ========== GitHub Corners ========== //
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
@import "_mixin/index";
|
||||
|
||||
@import "_root";
|
||||
@import "_core/base";
|
||||
@import "_core/layout";
|
||||
|
||||
@@ -16,4 +17,5 @@
|
||||
|
||||
@import "_core/media";
|
||||
|
||||
@import "_common";
|
||||
@import "_custom";
|
||||
|
||||
@@ -1,66 +1,84 @@
|
||||
# Tips: remove sourceMappingURL of local libraries to avoid source map 404 error.
|
||||
# See https://github.com/hugo-fixit/FixIt/issues/67
|
||||
|
||||
prefix:
|
||||
libFiles: https://cdn.jsdelivr.net/npm/
|
||||
# simple-icons@2.14.0 https://github.com/simple-icons/simple-icons
|
||||
simpleIcons: https://cdn.jsdelivr.net/npm/simple-icons@2.14.0/icons/
|
||||
# simple-icons@6.3.0 https://github.com/simple-icons/simple-icons
|
||||
simpleIcons: https://cdn.jsdelivr.net/npm/simple-icons@6.3.0/icons/
|
||||
libFiles:
|
||||
# normalize.css@8.0.1 https://github.com/necolas/normalize.css
|
||||
normalizeCSS: normalize.css@8.0.1/normalize.min.css
|
||||
# fontawesome-free@5.13.0 https://fontawesome.com/
|
||||
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@5.13.0/css/all.min.css'
|
||||
# animate.css@3.7.2 https://github.com/daneden/animate.css
|
||||
animateCSS: animate.css@3.7.2/animate.min.css
|
||||
# smooth-scroll@16.1.3 https://github.com/cferdinandi/smooth-scroll
|
||||
smoothScrollJS: smooth-scroll@16.1.3/dist/smooth-scroll.min.js
|
||||
# autocomplete.js@0.37.1 https://github.com/algolia/autocomplete.js
|
||||
autocompleteJS: autocomplete.js@0.37.1/dist/autocomplete.min.js
|
||||
# lunr.js@2.3.8 https://lunrjs.com/
|
||||
lunrJS: lunr@2.3.8/lunr.min.js
|
||||
# algoliasearch@4.2.0 https://github.com/algolia/algoliasearch-client-javascript
|
||||
algoliasearchJS: algoliasearch@4.2.0/dist/algoliasearch-lite.umd.min.js
|
||||
# lazysizes@5.2.2 https://github.com/aFarkas/lazysizes
|
||||
lazysizesJS: lazysizes@5.2.2/lazysizes.min.js
|
||||
# object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
|
||||
objectFitImagesJS: object-fit-images@3.2.4/dist/ofi.min.js
|
||||
# twemoji@13.0.0 https://github.com/twitter/twemoji
|
||||
twemojiJS: twemoji@13.0.0/dist/twemoji.min.js
|
||||
# lightgallery.js@1.2.0 https://github.com/sachinchoolur/lightgallery.js
|
||||
# lg-thumbnail.js@1.2.0 https://github.com/sachinchoolur/lg-thumbnail.js
|
||||
# lg-zoom.js@1.2.0 https://github.com/sachinchoolur/lg-zoom.js
|
||||
lightgalleryCSS: lightgallery.js@1.2.0/dist/css/lightgallery.min.css
|
||||
lightgalleryJS: lightgallery.js@1.2.0/dist/js/lightgallery.min.js
|
||||
lightgalleryThumbnailJS: lg-thumbnail.js@1.2.0/dist/lg-thumbnail.min.js
|
||||
lightgalleryZoomJS: lg-zoom.js@1.2.0/dist/lg-zoom.min.js
|
||||
# clipboard.js@2.0.6 https://github.com/zenorocha/clipboard.js
|
||||
clipboardJS: clipboard@2.0.6/dist/clipboard.min.js
|
||||
# sharer.js@0.4.0 https://github.com/ellisonleao/sharer.js
|
||||
sharerJS: sharer.js@0.4.0/sharer.min.js
|
||||
# typeit@7.0.4 https://github.com/alexmacarthur/typeit
|
||||
typeitJS: typeit@7.0.4/dist/typeit.min.js
|
||||
# katex@0.11.1 https://katex.org/
|
||||
katexCSS: katex@0.11.1/dist/katex.min.css
|
||||
katexJS: katex@0.11.1/dist/katex.min.js
|
||||
katexAutoRenderJS: katex@0.11.1/dist/contrib/auto-render.min.js
|
||||
katexCopyTexCSS: katex@0.11.1/dist/contrib/copy-tex.min.css
|
||||
katexCopyTexJS: katex@0.11.1/dist/contrib/copy-tex.min.js
|
||||
katexMhchemJS: katex@0.11.1/dist/contrib/mhchem.min.js
|
||||
# mermaid@8.5.1 https://github.com/knsv/mermaid
|
||||
mermaidJS: mermaid@8.5.1/dist/mermaid.min.js
|
||||
# echarts@4.8.0 https://echarts.apache.org/
|
||||
echartsJS: echarts@4.8.0/dist/echarts.min.js
|
||||
echartsMacaronsJS: echarts@4.8.0/theme/macarons.min.js
|
||||
# mapbox-gl@1.10.1 https://docs.mapbox.com/mapbox-gl-js
|
||||
mapboxGLCSS: mapbox-gl@1.10.1/dist/mapbox-gl.min.css
|
||||
mapboxGLJS: mapbox-gl@1.10.1/dist/mapbox-gl.min.js
|
||||
# algoliasearch@4.13.0 https://github.com/algolia/algoliasearch-client-javascript
|
||||
algoliasearchJS: algoliasearch@4.13.0/dist/algoliasearch-lite.umd.min.js
|
||||
# animate.css@4.1.1 https://github.com/daneden/animate.css
|
||||
animateCSS: animate.css@4.1.1/animate.min.css
|
||||
# aplayer@1.10.1 https://github.com/MoePlayer/APlayer
|
||||
aplayerCSS: aplayer@1.10.1/dist/APlayer.min.css
|
||||
aplayerJS: aplayer@1.10.1/dist/APlayer.min.js
|
||||
# meting@2.0.1 https://github.com/metowolf/MetingJS
|
||||
metingJS: meting@2.0.1/dist/Meting.min.js
|
||||
# gitalk@1.6.2 https://github.com/gitalk/gitalk
|
||||
gitalkCSS: gitalk@1.6.2/dist/gitalk.min.css
|
||||
gitalkJS: gitalk@1.6.2/dist/gitalk.min.js
|
||||
# valine@1.4.14 https://valine.js.org/
|
||||
valineJS: valine@1.4.14/dist/Valine.min.js
|
||||
# artalk@2.3.4 https://github.com/ArtalkJS/Artalk
|
||||
artalkCSS: artalk@2.3.4/dist/Artalk.min.css
|
||||
artalkJS: artalk@2.3.4/dist/Artalk.min.js
|
||||
# autocomplete.js@0.38.1 https://github.com/algolia/autocomplete.js
|
||||
autocompleteJS: autocomplete.js@0.38.1/dist/autocomplete.min.js
|
||||
# cell-watermark@1.0.3 https://github.com/Lruihao/watermark
|
||||
cellWatermarkJS: cell-watermark@1.0.3/src/watermark.min.js
|
||||
# cookieconsent@3.1.1 https://github.com/osano/cookieconsent
|
||||
cookieconsentCSS: cookieconsent@3.1.1/build/cookieconsent.min.css
|
||||
cookieconsentJS: cookieconsent@3.1.1/build/cookieconsent.min.js
|
||||
# crypto-js@4.1.1 https://github.com/brix/crypto-js
|
||||
cryptoCoreJS: crypto-js@4.1.1/core.js
|
||||
cryptoEncBase64JS: crypto-js@4.1.1/enc-base64.js
|
||||
cryptoMd5JS: crypto-js@4.1.1/md5.js
|
||||
cryptoSha256JS: crypto-js@4.1.1/sha256.js
|
||||
# echarts@5.2.2 https://github.com/apache/echarts
|
||||
echartsJS: echarts@5.3.2/dist/echarts.min.js
|
||||
echartsMacaronsJS: echarts@5.3.2/theme/macarons.min.js
|
||||
# eruda@2.5.0 https://github.com/liriliri/eruda
|
||||
erudaJS: eruda@2.5.0/eruda.js
|
||||
# fontawesome-free@6.1.1 https://github.com/FortAwesome/Font-Awesome
|
||||
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.1.1/css/all.min.css'
|
||||
# gitalk@1.7.2 https://github.com/gitalk/gitalk
|
||||
gitalkCSS: gitalk@1.7.2/dist/gitalk.min.css
|
||||
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
|
||||
# katex@0.15.1 https://github.com/KaTeX/KaTeX
|
||||
katexAutoRenderJS: katex@0.15.3/dist/contrib/auto-render.min.js
|
||||
katexCopyTexCSS: katex@0.15.3/dist/contrib/copy-tex.min.css
|
||||
katexCopyTexJS: katex@0.15.3/dist/contrib/copy-tex.min.js
|
||||
katexCSS: katex@0.15.3/dist/katex.min.css
|
||||
katexJS: katex@0.15.3/dist/katex.min.js
|
||||
katexMhchemJS: katex@0.15.3/dist/contrib/mhchem.min.js
|
||||
# lazysizes@5.3.2 https://github.com/aFarkas/lazysizes
|
||||
lazysizesJS: lazysizes@5.3.2/lazysizes.min.js
|
||||
# lightgallery.js@1.4.0 https://github.com/sachinchoolur/lightgallery.js
|
||||
# lg-thumbnail.js@1.4.0 https://github.com/sachinchoolur/lg-thumbnail.js
|
||||
# lg-zoom.js@1.3.0 https://github.com/sachinchoolur/lg-zoom.js
|
||||
lightgalleryCSS: lightgallery.js@1.4.0/dist/css/lightgallery.min.css
|
||||
lightgalleryJS: lightgallery.js@1.4.0/dist/js/lightgallery.min.js
|
||||
lightgalleryThumbnailJS: lg-thumbnail.js@1.2.0/dist/lg-thumbnail.min.js
|
||||
lightgalleryZoomJS: lg-zoom.js@1.3.0/dist/lg-zoom.min.js
|
||||
# lunr.js@2.3.9 https://github.com/olivernn/lunr.js
|
||||
lunrJS: lunr@2.3.9/lunr.min.js
|
||||
# mapbox-gl@2.8.2 https://docs.mapbox.com/mapbox-gl-js
|
||||
mapboxGLCSS: mapbox-gl@2.8.2/dist/mapbox-gl.min.css
|
||||
mapboxGLJS: mapbox-gl@2.8.2/dist/mapbox-gl.min.js
|
||||
# mermaid@9.1.3 https://github.com/knsv/mermaid
|
||||
mermaidJS: mermaid@9.1.3/dist/mermaid.min.js
|
||||
# meting@2.0.1 https://github.com/metowolf/MetingJS
|
||||
metingJS: meting@2.0.1/dist/Meting.min.js
|
||||
# normalize.css@8.0.1 https://github.com/necolas/normalize.css
|
||||
normalizeCSS: normalize.css@8.0.1/normalize.min.css
|
||||
# object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
|
||||
objectFitImagesJS: object-fit-images@3.2.4/dist/ofi.min.js
|
||||
# pangu.js@4.0.7 https://github.com/vinta/pangu.js
|
||||
panguJS: pangu@4.0.7/dist/browser/pangu.min.js
|
||||
# sharer.js@0.4.2 https://github.com/ellisonleao/sharer.js
|
||||
sharerJS: sharer.js@0.5.1/sharer.min.js
|
||||
# twemoji@13.1.0 https://github.com/twitter/twemoji
|
||||
twemojiJS: twemoji@14.0.2/dist/twemoji.min.js
|
||||
# typeit@7.0.4 https://github.com/alexmacarthur/typeit
|
||||
typeitJS: typeit@7.0.4/dist/typeit.min.js
|
||||
# valine@1.5.0 https://github.com/xCss/Valine
|
||||
valineJS: valine@1.5.0/dist/Valine.min.js
|
||||
# vconsole@3.14.6 https://github.com/Tencent/vConsole
|
||||
vconsoleJS: vconsole@3.14.6/dist/vconsole.min.js
|
||||
# waline@2.6.1 https://github.com/walinejs/waline
|
||||
walineCSS: '@waline/client@2.6.1/dist/waline.css'
|
||||
walineJS: '@waline/client@2.6.1/dist/waline.js'
|
||||
@@ -0,0 +1,84 @@
|
||||
# Tips: remove sourceMappingURL of local libraries to avoid source map 404 error.
|
||||
# See https://github.com/hugo-fixit/FixIt/issues/67
|
||||
|
||||
prefix:
|
||||
libFiles: https://unpkg.com/
|
||||
# simple-icons@6.3.0 https://github.com/simple-icons/simple-icons
|
||||
simpleIcons: https://unpkg.com/simple-icons@6.3.0/icons/
|
||||
libFiles:
|
||||
# algoliasearch@4.13.0 https://github.com/algolia/algoliasearch-client-javascript
|
||||
algoliasearchJS: algoliasearch@4.13.0/dist/algoliasearch-lite.umd.min.js
|
||||
# animate.css@4.1.1 https://github.com/daneden/animate.css
|
||||
animateCSS: animate.css@4.1.1/animate.min.css
|
||||
# aplayer@1.10.1 https://github.com/MoePlayer/APlayer
|
||||
aplayerCSS: aplayer@1.10.1/dist/APlayer.min.css
|
||||
aplayerJS: aplayer@1.10.1/dist/APlayer.min.js
|
||||
# artalk@2.3.4 https://github.com/ArtalkJS/Artalk
|
||||
artalkCSS: artalk@2.3.4/dist/Artalk.css
|
||||
artalkJS: artalk@2.3.4/dist/Artalk.js
|
||||
# autocomplete.js@0.38.1 https://github.com/algolia/autocomplete.js
|
||||
autocompleteJS: autocomplete.js@0.38.1/dist/autocomplete.min.js
|
||||
# cell-watermark@1.0.3 https://github.com/Lruihao/watermark
|
||||
cellWatermarkJS: cell-watermark@1.0.3/src/watermark.min.js
|
||||
# cookieconsent@3.1.1 https://github.com/osano/cookieconsent
|
||||
cookieconsentCSS: cookieconsent@3.1.1/build/cookieconsent.min.css
|
||||
cookieconsentJS: cookieconsent@3.1.1/build/cookieconsent.min.js
|
||||
# crypto-js@4.1.1 https://github.com/brix/crypto-js
|
||||
cryptoCoreJS: crypto-js@4.1.1/core.js
|
||||
cryptoEncBase64JS: crypto-js@4.1.1/enc-base64.js
|
||||
cryptoMd5JS: crypto-js@4.1.1/md5.js
|
||||
cryptoSha256JS: crypto-js@4.1.1/sha256.js
|
||||
# echarts@5.2.2 https://github.com/apache/echarts
|
||||
echartsJS: echarts@5.3.2/dist/echarts.min.js
|
||||
echartsMacaronsJS: echarts@5.3.2/theme/macarons.min.js
|
||||
# eruda@2.5.0 https://github.com/liriliri/eruda
|
||||
erudaJS: eruda@2.5.0/eruda.js
|
||||
# fontawesome-free@6.1.1 https://github.com/FortAwesome/Font-Awesome
|
||||
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.1.1/css/all.min.css'
|
||||
# gitalk@1.7.2 https://github.com/gitalk/gitalk
|
||||
gitalkCSS: gitalk@1.7.2/dist/gitalk.min.css
|
||||
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
|
||||
# katex@0.15.1 https://github.com/KaTeX/KaTeX
|
||||
katexAutoRenderJS: katex@0.15.3/dist/contrib/auto-render.min.js
|
||||
katexCopyTexCSS: katex@0.15.3/dist/contrib/copy-tex.min.css
|
||||
katexCopyTexJS: katex@0.15.3/dist/contrib/copy-tex.min.js
|
||||
katexCSS: katex@0.15.3/dist/katex.min.css
|
||||
katexJS: katex@0.15.3/dist/katex.min.js
|
||||
katexMhchemJS: katex@0.15.3/dist/contrib/mhchem.min.js
|
||||
# lazysizes@5.3.2 https://github.com/aFarkas/lazysizes
|
||||
lazysizesJS: lazysizes@5.3.2/lazysizes.min.js
|
||||
# lightgallery.js@1.4.0 https://github.com/sachinchoolur/lightgallery.js
|
||||
# lg-thumbnail.js@1.4.0 https://github.com/sachinchoolur/lg-thumbnail.js
|
||||
# lg-zoom.js@1.3.0 https://github.com/sachinchoolur/lg-zoom.js
|
||||
lightgalleryCSS: lightgallery.js@1.4.0/dist/css/lightgallery.min.css
|
||||
lightgalleryJS: lightgallery.js@1.4.0/dist/js/lightgallery.min.js
|
||||
lightgalleryThumbnailJS: lg-thumbnail.js@1.2.0/dist/lg-thumbnail.min.js
|
||||
lightgalleryZoomJS: lg-zoom.js@1.3.0/dist/lg-zoom.min.js
|
||||
# lunr.js@2.3.9 https://github.com/olivernn/lunr.js
|
||||
lunrJS: lunr@2.3.9/lunr.min.js
|
||||
# mapbox-gl@2.8.2 https://docs.mapbox.com/mapbox-gl-js
|
||||
mapboxGLCSS: mapbox-gl@2.8.2/dist/mapbox-gl.min.css
|
||||
mapboxGLJS: mapbox-gl@2.8.2/dist/mapbox-gl.min.js
|
||||
# mermaid@9.1.3 https://github.com/knsv/mermaid
|
||||
mermaidJS: mermaid@9.1.3/dist/mermaid.min.js
|
||||
# meting@2.0.1 https://github.com/metowolf/MetingJS
|
||||
metingJS: meting@2.0.1/dist/Meting.min.js
|
||||
# normalize.css@8.0.1 https://github.com/necolas/normalize.css
|
||||
normalizeCSS: normalize.css@8.0.1/normalize.min.css
|
||||
# object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
|
||||
objectFitImagesJS: object-fit-images@3.2.4/dist/ofi.min.js
|
||||
# pangu.js@4.0.7 https://github.com/vinta/pangu.js
|
||||
panguJS: pangu@4.0.7/dist/browser/pangu.min.js
|
||||
# sharer.js@0.4.2 https://github.com/ellisonleao/sharer.js
|
||||
sharerJS: sharer.js@0.5.1/sharer.min.js
|
||||
# twemoji@13.1.0 https://github.com/twitter/twemoji
|
||||
twemojiJS: twemoji@14.0.2/dist/twemoji.min.js
|
||||
# typeit@7.0.4 https://github.com/alexmacarthur/typeit
|
||||
typeitJS: typeit@7.0.4/dist/typeit.min.js
|
||||
# valine@1.5.0 https://github.com/xCss/Valine
|
||||
valineJS: valine@1.5.0/dist/Valine.min.js
|
||||
# vconsole@3.14.6 https://github.com/Tencent/vConsole
|
||||
vconsoleJS: vconsole@3.14.6/dist/vconsole.min.js
|
||||
# waline@2.6.1 https://github.com/walinejs/waline
|
||||
walineCSS: '@waline/client@2.6.1/dist/waline.css'
|
||||
walineJS: '@waline/client@2.6.1/dist/waline.js'
|
||||
@@ -4,10 +4,6 @@ theme:
|
||||
- Promise
|
||||
- fetch
|
||||
- Element.prototype.after
|
||||
smooth-scroll:
|
||||
- Element.prototype.closest
|
||||
- requestAnimationFrame
|
||||
- CustomEvent
|
||||
algoliasearch:
|
||||
- Promise
|
||||
- Object.entries
|
||||
|
||||
+132
-61
@@ -4,7 +4,7 @@ github:
|
||||
Prefix: https://github.com/
|
||||
Title: GitHub
|
||||
Icon:
|
||||
Class: fab fa-github-alt fa-fw
|
||||
Class: fa-brands fa-github-alt fa-fw
|
||||
|
||||
# 002: LinkedIn
|
||||
linkedin:
|
||||
@@ -12,7 +12,7 @@ linkedin:
|
||||
Prefix: https://linkedin.com/in/
|
||||
Title: LinkedIn
|
||||
Icon:
|
||||
Class: fab fa-linkedin fa-fw
|
||||
Class: fa-brands fa-linkedin fa-fw
|
||||
|
||||
# 003: Twitter
|
||||
twitter:
|
||||
@@ -20,7 +20,7 @@ twitter:
|
||||
Prefix: https://twitter.com/
|
||||
Title: Twitter
|
||||
Icon:
|
||||
Class: fab fa-twitter fa-fw
|
||||
Class: fa-brands fa-twitter fa-fw
|
||||
|
||||
# 004: Instagram
|
||||
instagram:
|
||||
@@ -28,7 +28,7 @@ instagram:
|
||||
Prefix: https://www.instagram.com/
|
||||
Title: Instagram
|
||||
Icon:
|
||||
Class: fab fa-instagram fa-fw
|
||||
Class: fa-brands fa-instagram fa-fw
|
||||
|
||||
# 005: facebook
|
||||
facebook:
|
||||
@@ -36,7 +36,7 @@ facebook:
|
||||
Prefix: https://facebook.com/
|
||||
Title: facebook
|
||||
Icon:
|
||||
Class: fab fa-facebook fa-fw
|
||||
Class: fa-brands fa-facebook fa-fw
|
||||
|
||||
# 006: Telegram
|
||||
telegram:
|
||||
@@ -44,7 +44,7 @@ telegram:
|
||||
Prefix: https://t.me/
|
||||
Title: Telegram
|
||||
Icon:
|
||||
Class: fab fa-telegram-plane fa-fw
|
||||
Class: fa-brands fa-telegram-plane fa-fw
|
||||
|
||||
# 007: Medium
|
||||
medium:
|
||||
@@ -52,7 +52,7 @@ medium:
|
||||
Prefix: https://medium.com/
|
||||
Title: Medium
|
||||
Icon:
|
||||
Class: fab fa-medium fa-fw
|
||||
Class: fa-brands fa-medium fa-fw
|
||||
|
||||
# 008: GitLab
|
||||
gitlab:
|
||||
@@ -60,7 +60,7 @@ gitlab:
|
||||
Prefix: https://gitlab.com/
|
||||
Title: GitLab
|
||||
Icon:
|
||||
Class: fab fa-gitlab fa-fw
|
||||
Class: fa-brands fa-gitlab fa-fw
|
||||
|
||||
# 009: YouTube Legacy
|
||||
youtubelegacy:
|
||||
@@ -68,7 +68,7 @@ youtubelegacy:
|
||||
Prefix: https://www.youtube.com/user/
|
||||
Title: YouTube
|
||||
Icon:
|
||||
Class: fab fa-youtube fa-fw
|
||||
Class: fa-brands fa-youtube fa-fw
|
||||
|
||||
# 010: YouTube Custom
|
||||
youtubecustom:
|
||||
@@ -76,7 +76,7 @@ youtubecustom:
|
||||
Prefix: https://www.youtube.com/c/
|
||||
Title: YouTube
|
||||
Icon:
|
||||
Class: fab fa-youtube fa-fw
|
||||
Class: fa-brands fa-youtube fa-fw
|
||||
|
||||
# 011: YouTube Channel
|
||||
youtubechannel:
|
||||
@@ -84,7 +84,7 @@ youtubechannel:
|
||||
Prefix: https://www.youtube.com/channel/
|
||||
Title: YouTube
|
||||
Icon:
|
||||
Class: fab fa-youtube fa-fw
|
||||
Class: fa-brands fa-youtube fa-fw
|
||||
|
||||
# 012: Tumblr
|
||||
tumblr:
|
||||
@@ -92,7 +92,7 @@ tumblr:
|
||||
Template: https://%v.tumblr.com/
|
||||
Title: Tumblr
|
||||
Icon:
|
||||
Class: fab fa-tumblr fa-fw
|
||||
Class: fa-brands fa-tumblr fa-fw
|
||||
|
||||
# 013: Quora
|
||||
quora:
|
||||
@@ -100,7 +100,7 @@ quora:
|
||||
Prefix: https://www.quora.com/profile/
|
||||
Title: Quora
|
||||
Icon:
|
||||
Class: fab fa-quora fa-fw
|
||||
Class: fa-brands fa-quora fa-fw
|
||||
|
||||
# 014: Keybase
|
||||
keybase:
|
||||
@@ -108,7 +108,7 @@ keybase:
|
||||
Prefix: https://keybase.io/
|
||||
Title: Keybase
|
||||
Icon:
|
||||
Class: fab fa-keybase fa-fw
|
||||
Class: fa-brands fa-keybase fa-fw
|
||||
|
||||
# 015: Pinterest
|
||||
pinterest:
|
||||
@@ -116,7 +116,7 @@ pinterest:
|
||||
Prefix: https://www.pinterest.com/
|
||||
Title: Pinterest
|
||||
Icon:
|
||||
Class: fab fa-pinterest fa-fw
|
||||
Class: fa-brands fa-pinterest fa-fw
|
||||
|
||||
# 016: Reddit
|
||||
reddit:
|
||||
@@ -124,7 +124,7 @@ reddit:
|
||||
Prefix: https://www.reddit.com/user/
|
||||
Title: Reddit
|
||||
Icon:
|
||||
Class: fab fa-reddit fa-fw
|
||||
Class: fa-brands fa-reddit fa-fw
|
||||
|
||||
# 017: CodePen
|
||||
codepen:
|
||||
@@ -132,7 +132,7 @@ codepen:
|
||||
Prefix: https://codepen.io/
|
||||
Title: CodePen
|
||||
Icon:
|
||||
Class: fab fa-codepen fa-fw
|
||||
Class: fa-brands fa-codepen fa-fw
|
||||
|
||||
# 018: freeCodeCamp
|
||||
freecodecamp:
|
||||
@@ -140,7 +140,7 @@ freecodecamp:
|
||||
Prefix: https://freecodecamp.org/
|
||||
Title: freeCodeCamp
|
||||
Icon:
|
||||
Class: fab fa-free-code-camp fa-fw
|
||||
Class: fa-brands fa-free-code-camp fa-fw
|
||||
|
||||
# 019: Bitbucket
|
||||
bitbucket:
|
||||
@@ -148,7 +148,7 @@ bitbucket:
|
||||
Prefix: https://bitbucket.org/
|
||||
Title: Bitbucket
|
||||
Icon:
|
||||
Class: fab fa-bitbucket fa-fw
|
||||
Class: fa-brands fa-bitbucket fa-fw
|
||||
|
||||
# 020: Stack Overflow
|
||||
stackoverflow:
|
||||
@@ -156,7 +156,7 @@ stackoverflow:
|
||||
Prefix: https://stackoverflow.com/users/
|
||||
Title: Stack Overflow
|
||||
Icon:
|
||||
Class: fab fa-codepen fa-fw
|
||||
Class: fa-brands fa-codepen fa-fw
|
||||
|
||||
# 021: 微博
|
||||
weibo:
|
||||
@@ -164,7 +164,7 @@ weibo:
|
||||
Prefix: https://weibo.com/
|
||||
Title: 微博
|
||||
Icon:
|
||||
Class: fab fa-weibo fa-fw
|
||||
Class: fa-brands fa-weibo fa-fw
|
||||
|
||||
# 022: OK.RU
|
||||
odnoklassniki:
|
||||
@@ -172,7 +172,7 @@ odnoklassniki:
|
||||
Prefix: https://ok.ru/
|
||||
Title: OK.RU
|
||||
Icon:
|
||||
Class: fab fa-odnoklassniki fa-fw
|
||||
Class: fa-brands fa-odnoklassniki fa-fw
|
||||
|
||||
# 023: VK
|
||||
vk:
|
||||
@@ -180,7 +180,7 @@ vk:
|
||||
Prefix: https://vk.com/
|
||||
Title: VK
|
||||
Icon:
|
||||
Class: fab fa-vk fa-fw
|
||||
Class: fa-brands fa-vk fa-fw
|
||||
|
||||
# 024: Flickr
|
||||
flickr:
|
||||
@@ -188,7 +188,7 @@ flickr:
|
||||
Prefix: https://www.flickr.com/photos/
|
||||
Title: Flickr
|
||||
Icon:
|
||||
Class: fab fa-flickr fa-fw
|
||||
Class: fa-brands fa-flickr fa-fw
|
||||
|
||||
# 025: Xing
|
||||
xing:
|
||||
@@ -196,7 +196,7 @@ xing:
|
||||
Prefix: https://www.xing.com/profile/
|
||||
Title: Xing
|
||||
Icon:
|
||||
Class: fab fa-xing fa-fw
|
||||
Class: fa-brands fa-xing fa-fw
|
||||
|
||||
# 026: Snapchat
|
||||
snapchat:
|
||||
@@ -204,7 +204,7 @@ snapchat:
|
||||
Prefix: https://www.snapchat.com/add/
|
||||
Title: Snapchat
|
||||
Icon:
|
||||
Class: fab fa-snapchat fa-fw
|
||||
Class: fa-brands fa-snapchat fa-fw
|
||||
|
||||
# 027: SoundCloud
|
||||
soundcloud:
|
||||
@@ -212,7 +212,7 @@ soundcloud:
|
||||
Prefix: https://soundcloud.com/
|
||||
Title: SoundCloud
|
||||
Icon:
|
||||
Class: fab fa-soundcloud fa-fw
|
||||
Class: fa-brands fa-soundcloud fa-fw
|
||||
|
||||
# 028: Spotify
|
||||
spotify:
|
||||
@@ -220,7 +220,7 @@ spotify:
|
||||
Prefix: https://open.spotify.com/user/
|
||||
Title: Spotify
|
||||
Icon:
|
||||
Class: fab fa-spotify fa-fw
|
||||
Class: fa-brands fa-spotify fa-fw
|
||||
|
||||
# 029: Bandcamp
|
||||
bandcamp:
|
||||
@@ -228,7 +228,7 @@ bandcamp:
|
||||
Template: https://%v.bandcamp.com/
|
||||
Title: Bandcamp
|
||||
Icon:
|
||||
Class: fab fa-bandcamp fa-fw
|
||||
Class: fa-brands fa-bandcamp fa-fw
|
||||
|
||||
# 030: PayPal
|
||||
paypal:
|
||||
@@ -236,7 +236,7 @@ paypal:
|
||||
Prefix: https://paypal.me/
|
||||
Title: PayPal
|
||||
Icon:
|
||||
Class: fab fa-paypal fa-fw
|
||||
Class: fa-brands fa-paypal fa-fw
|
||||
|
||||
# 031: 500px
|
||||
fivehundredpx:
|
||||
@@ -244,7 +244,7 @@ fivehundredpx:
|
||||
Prefix: https://500px.com/
|
||||
Title: 500px
|
||||
Icon:
|
||||
Class: fab fa-500px fa-fw
|
||||
Class: fa-brands fa-500px fa-fw
|
||||
|
||||
# 032: Mix
|
||||
mix:
|
||||
@@ -252,7 +252,7 @@ mix:
|
||||
Prefix: https://mix.com/
|
||||
Title: Mix
|
||||
Icon:
|
||||
Class: fab fa-mix fa-fw
|
||||
Class: fa-brands fa-mix fa-fw
|
||||
|
||||
# 033: Goodreads
|
||||
goodreads:
|
||||
@@ -260,7 +260,7 @@ goodreads:
|
||||
Prefix: https://www.goodreads.com/user/show/
|
||||
Title: Goodreads
|
||||
Icon:
|
||||
Class: fab fa-goodreads fa-fw
|
||||
Class: fa-brands fa-goodreads fa-fw
|
||||
|
||||
# 034: Last.fm
|
||||
lastfm:
|
||||
@@ -268,7 +268,7 @@ lastfm:
|
||||
Prefix: https://www.last.fm/user/
|
||||
Title: Last.fm
|
||||
Icon:
|
||||
Class: fab fa-lastfm fa-fw
|
||||
Class: fa-brands fa-lastfm fa-fw
|
||||
|
||||
# 035: Foursquare
|
||||
foursquare:
|
||||
@@ -276,7 +276,7 @@ foursquare:
|
||||
Prefix: https://foursquare.com/
|
||||
Title: Foursquare
|
||||
Icon:
|
||||
Class: fab fa-foursquare fa-fw
|
||||
Class: fa-brands fa-foursquare fa-fw
|
||||
|
||||
# 036: Hacker News
|
||||
hackernews:
|
||||
@@ -284,7 +284,7 @@ hackernews:
|
||||
Template: https://news.ycombinator.com/user?id=%v
|
||||
Title: Hacker News
|
||||
Icon:
|
||||
Class: fab fa-hacker-news fa-fw
|
||||
Class: fa-brands fa-hacker-news fa-fw
|
||||
|
||||
# 037: Kickstarter
|
||||
kickstarter:
|
||||
@@ -292,7 +292,7 @@ kickstarter:
|
||||
Prefix: https://kickstarter.com/profile/
|
||||
Title: Kickstarter
|
||||
Icon:
|
||||
Class: fab fa-kickstarter fa-fw
|
||||
Class: fa-brands fa-kickstarter fa-fw
|
||||
|
||||
# 038: Patreon
|
||||
patreon:
|
||||
@@ -300,7 +300,7 @@ patreon:
|
||||
Prefix: https://patreon.com/
|
||||
Title: Patreon
|
||||
Icon:
|
||||
Class: fab fa-patreon fa-fw
|
||||
Class: fa-brands fa-patreon fa-fw
|
||||
|
||||
# 039: Steam
|
||||
steam:
|
||||
@@ -308,7 +308,7 @@ steam:
|
||||
Prefix: https://steamcommunity.com/id/
|
||||
Title: Steam
|
||||
Icon:
|
||||
Class: fab fa-steam fa-fw
|
||||
Class: fa-brands fa-steam fa-fw
|
||||
|
||||
# 040: Twitch
|
||||
twitch:
|
||||
@@ -316,7 +316,7 @@ twitch:
|
||||
Prefix: https://www.twitch.tv/
|
||||
Title: Twitch
|
||||
Icon:
|
||||
Class: fab fa-twitch fa-fw
|
||||
Class: fa-brands fa-twitch fa-fw
|
||||
|
||||
# 041: Strava
|
||||
strava:
|
||||
@@ -324,7 +324,7 @@ strava:
|
||||
Prefix: https://www.strava.com/athletes/
|
||||
Title: Strava
|
||||
Icon:
|
||||
Class: fab fa-strava fa-fw
|
||||
Class: fa-brands fa-strava fa-fw
|
||||
|
||||
# 042: Skype
|
||||
skype:
|
||||
@@ -332,7 +332,7 @@ skype:
|
||||
Template: "skype:"
|
||||
Title: Skype
|
||||
Icon:
|
||||
Class: fab fa-skype fa-fw
|
||||
Class: fa-brands fa-skype fa-fw
|
||||
|
||||
# 043: WhatsApp
|
||||
whatsapp:
|
||||
@@ -340,7 +340,7 @@ whatsapp:
|
||||
Prefix: https://wa.me/
|
||||
Title: WhatsApp
|
||||
Icon:
|
||||
Class: fab fa-whatsapp fa-fw
|
||||
Class: fa-brands fa-whatsapp fa-fw
|
||||
|
||||
# 044: 知乎
|
||||
zhihu:
|
||||
@@ -364,7 +364,7 @@ angellist:
|
||||
Prefix: https://angel.co/
|
||||
Title: Angellist
|
||||
Icon:
|
||||
Class: fab fa-angellist fa-fw
|
||||
Class: fa-brands fa-angellist fa-fw
|
||||
|
||||
# 047: SlideShare
|
||||
slideshare:
|
||||
@@ -372,7 +372,7 @@ slideshare:
|
||||
Prefix: https://slideshare.com/
|
||||
Title: SlideShare
|
||||
Icon:
|
||||
Class: fab fa-slideshare fa-fw
|
||||
Class: fa-brands fa-slideshare fa-fw
|
||||
|
||||
# 048: JSFiddle
|
||||
jsfiddle:
|
||||
@@ -380,7 +380,7 @@ jsfiddle:
|
||||
Prefix: https://jsfiddle.com/
|
||||
Title: JSFiddle
|
||||
Icon:
|
||||
Class: fab fa-jsfiddle fa-fw
|
||||
Class: fa-brands fa-jsfiddle fa-fw
|
||||
|
||||
# 049: DeviantArt
|
||||
deviantart:
|
||||
@@ -388,7 +388,7 @@ deviantart:
|
||||
Template: https://%v.deviantart.com/
|
||||
Title: DeviantArt
|
||||
Icon:
|
||||
Class: fab fa-deviantart fa-fw
|
||||
Class: fa-brands fa-deviantart fa-fw
|
||||
|
||||
# 050: Behance
|
||||
behance:
|
||||
@@ -396,7 +396,7 @@ behance:
|
||||
Prefix: https://behance.net/
|
||||
Title: Behance
|
||||
Icon:
|
||||
Class: fab fa-behance fa-fw
|
||||
Class: fa-brands fa-behance fa-fw
|
||||
|
||||
# 051: Dribbble
|
||||
dribbble:
|
||||
@@ -404,7 +404,7 @@ dribbble:
|
||||
Prefix: https://dribbble.com/
|
||||
Title: Dribbble
|
||||
Icon:
|
||||
Class: fab fa-dribbble fa-fw
|
||||
Class: fa-brands fa-dribbble fa-fw
|
||||
|
||||
# 052: WordPress
|
||||
wordpress:
|
||||
@@ -412,7 +412,7 @@ wordpress:
|
||||
Template: https://%v.wordpress.com/
|
||||
Title: WordPress
|
||||
Icon:
|
||||
Class: fab fa-wordpress fa-fw
|
||||
Class: fa-brands fa-wordpress fa-fw
|
||||
|
||||
# 053: Vine
|
||||
vine:
|
||||
@@ -420,7 +420,7 @@ vine:
|
||||
Prefix: https://vine.co/
|
||||
Title: Vine
|
||||
Icon:
|
||||
Class: fab fa-vine fa-fw
|
||||
Class: fa-brands fa-vine fa-fw
|
||||
|
||||
# 054: Google Scholar
|
||||
googlescholar:
|
||||
@@ -436,7 +436,7 @@ researchgate:
|
||||
Prefix: https://www.researchgate.net/profile/
|
||||
Title: ResearchGate
|
||||
Icon:
|
||||
Class: fab fa-researchgate fa-fw
|
||||
Class: fa-brands fa-researchgate fa-fw
|
||||
|
||||
# 056: Mastodon
|
||||
mastodon:
|
||||
@@ -444,7 +444,7 @@ mastodon:
|
||||
Prefix: https://mastodon.social/
|
||||
Title: Mastodon
|
||||
Icon:
|
||||
Class: fab fa-mastodon fa-fw
|
||||
Class: fa-brands fa-mastodon fa-fw
|
||||
|
||||
# 057: Thingiverse
|
||||
thingiverse:
|
||||
@@ -460,7 +460,7 @@ devto:
|
||||
Prefix: https://dev.to/
|
||||
Title: Dev.To
|
||||
Icon:
|
||||
Class: fab fa-dev fa-fw
|
||||
Class: fa-brands fa-dev fa-fw
|
||||
|
||||
# 059: Gitea
|
||||
gitea:
|
||||
@@ -491,21 +491,92 @@ bilibili:
|
||||
Prefix: https://space.bilibili.com/
|
||||
Title: bilibili
|
||||
Icon:
|
||||
Src: svg/icons/bilibili.svg
|
||||
Class: fa-brands fa-bilibili
|
||||
|
||||
# 063: Email
|
||||
email:
|
||||
# 063: ORCID
|
||||
orcid:
|
||||
Weight: 63
|
||||
Prefix: https://orcid.org/
|
||||
Title: ORCID
|
||||
Icon:
|
||||
Class: fa-brands fa-orcid fa-fw
|
||||
|
||||
# 064 Liberapay
|
||||
liberapay:
|
||||
Weight: 64
|
||||
Prefix: https://liberapay.com/
|
||||
Title: Liberapay
|
||||
Icon:
|
||||
Simpleicons: liberapay
|
||||
|
||||
# 065 Ko-Fi
|
||||
ko-fi:
|
||||
Weight: 65
|
||||
Prefix: https://ko-fi.com/
|
||||
Title: Ko-Fi
|
||||
Icon:
|
||||
Simpleicons: kofi
|
||||
|
||||
# 066: BuyMeaCoffee
|
||||
buymeacoffee:
|
||||
Weight: 66
|
||||
Prefix: https://www.buymeacoffee.com/
|
||||
Title: BuyMeaCoffee
|
||||
Icon:
|
||||
Simpleicons: buymeacoffee
|
||||
|
||||
# 067: Linktree
|
||||
linktree:
|
||||
Weight: 67
|
||||
Prefix: https://linktr.ee/
|
||||
Title: Linktree
|
||||
Icon:
|
||||
Simpleicons: linktree
|
||||
|
||||
# 068: QQ
|
||||
qq:
|
||||
Weight: 68
|
||||
Template: https://wpa.qq.com/msgrd?v=3&uin=%v&site=qq&menu=yes
|
||||
Title: QQ
|
||||
Icon:
|
||||
Simpleicons: tencentqq
|
||||
|
||||
# 069: QQ Group
|
||||
qqgroup:
|
||||
Weight: 69
|
||||
Template: https://qm.qq.com/cgi-bin/qm/qr?k=%v&jump_from=webapi
|
||||
Title: QQ Group
|
||||
Icon:
|
||||
Class: fa-solid fa-users
|
||||
|
||||
# 070: Diaspora
|
||||
diaspora:
|
||||
Weight: 70
|
||||
Title: diaspora*
|
||||
Icon:
|
||||
Simpleicons: diaspora
|
||||
|
||||
# 071: CSDN
|
||||
csdn:
|
||||
Weight: 71
|
||||
Prefix: https://blog.csdn.net/
|
||||
Title: CSDN
|
||||
Icon:
|
||||
Src: svg/icons/csdn.svg
|
||||
|
||||
# 072: Email
|
||||
email:
|
||||
Weight: 72
|
||||
Template: mailto:%v
|
||||
Title: Email
|
||||
Icon:
|
||||
Class: far fa-envelope fa-fw
|
||||
Class: fa-regular fa-envelope fa-fw
|
||||
|
||||
# 064: RSS
|
||||
# 073: RSS
|
||||
rss:
|
||||
Weight: 64
|
||||
Weight: 73
|
||||
Url: /index.xml
|
||||
Title: RSS
|
||||
Newtab: true
|
||||
Icon:
|
||||
Class: fas fa-rss fa-fw
|
||||
Class: fa-solid fa-rss fa-fw
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* @author @Lruihao https://lruihao.cn
|
||||
* @description Custom javascript for the hugo theme FixIt.
|
||||
*/
|
||||
const CustomJS = new (function () {
|
||||
/**
|
||||
* Hello World
|
||||
* You can define your own functions below.
|
||||
* @returns {CustomJS}
|
||||
*/
|
||||
this.hello = () => {
|
||||
// console.log('Hello CustomJS!');
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Initialize.
|
||||
* @returns {CustomJS}
|
||||
*/
|
||||
this.init = () => {
|
||||
// Custom infos.
|
||||
this.hello();
|
||||
return this;
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* Immediate.
|
||||
*/
|
||||
(() => {
|
||||
CustomJS.init();
|
||||
// It will be executed when the DOM tree is built.
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// console.log('DOM content loaded!')
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,223 @@
|
||||
/**
|
||||
* FixIt decryptor for encrypted pages and fixit-encryptor shortcode
|
||||
* @param {Object} options
|
||||
* @param {Function} [options.decrypted] [Lifecycle Hooks] handler after decrypting
|
||||
* @param {Function} [options.reset] [Lifecycle Hooks] handler after encrypting again
|
||||
* @param {Number} [options.duration=86400] number of seconds to cache decryption statistics. unit: s
|
||||
* @author @Lruihao https://lruihao.cn
|
||||
* @since v0.2.15
|
||||
*/
|
||||
FixItDecryptor = function (options = {}) {
|
||||
var _proto = FixItDecryptor.prototype;
|
||||
this.options = options || {};
|
||||
this.options.duration = this.options.duration || 24 * 60 * 60; // default cache one day
|
||||
this.decryptedEventSet = new Set();
|
||||
this.resetEventSet = new Set();
|
||||
this.$el = document.querySelector('.fixit-decryptor-container');
|
||||
|
||||
/**
|
||||
* decrypt content
|
||||
* @param {String} base64EncodeContent encrypted content
|
||||
*/
|
||||
var _decryptContent = (base64EncodeContent) => {
|
||||
try {
|
||||
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
|
||||
this.$el.querySelector('#fixit-decryptor-input').classList.add('d-none');
|
||||
this.$el.querySelector('.fixit-encryptor-btn').classList.remove('d-none');
|
||||
document.querySelector('#content').insertAdjacentHTML(
|
||||
'afterbegin',
|
||||
CryptoJS.enc.Base64.parse(base64EncodeContent).toString(CryptoJS.enc.Utf8)
|
||||
);
|
||||
} catch (err) {
|
||||
return console.error(err);
|
||||
}
|
||||
// decrypted hook
|
||||
console.log(this.decryptedEventSet)
|
||||
for (const event of this.decryptedEventSet) {
|
||||
event();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* initialize FixIt decryptor
|
||||
*/
|
||||
_proto.init = () => {
|
||||
this.addEventListener('decrypted', this.options?.decrypted);
|
||||
this.addEventListener('reset', this.options?.reset);
|
||||
this.validateCache();
|
||||
|
||||
const _decryptor = this;
|
||||
this.$el.querySelector('#fixit-decryptor-input')?.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
const $content = document.querySelector('#content');
|
||||
const password = $content.getAttribute('data-password');
|
||||
const input = this.value.trim();
|
||||
const saltLen = input.length % 2 ? input.length : input.length + 1;
|
||||
const inputMd5 = CryptoJS.MD5(input).toString();
|
||||
const inputSha256 = CryptoJS.SHA256(input).toString();
|
||||
|
||||
this.value = '';
|
||||
this.blur();
|
||||
if (!input) {
|
||||
alert('Please enter the correct password!');
|
||||
return console.warn('Please enter the correct password!');
|
||||
}
|
||||
if (inputMd5 !== password) {
|
||||
alert(`Password error: ${input} not the correct password!`);
|
||||
return console.warn(`Password error: ${input} not the correct password!`);
|
||||
}
|
||||
// cache decryption statistics
|
||||
window.localStorage.setItem(
|
||||
`fixit-decryptor/#${location.pathname}`,
|
||||
JSON.stringify({
|
||||
expiration: Math.ceil(Date.now() / 1000) + _decryptor.options.duration,
|
||||
md5: inputMd5,
|
||||
sha256: inputSha256.slice(saltLen)
|
||||
})
|
||||
);
|
||||
_decryptContent($content.getAttribute('data-content').replace(inputSha256.slice(saltLen), ''));
|
||||
}
|
||||
});
|
||||
|
||||
this.$el.querySelector('.fixit-encryptor-btn')?.addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
this.classList.add('d-none')
|
||||
_decryptor.$el.querySelector('#fixit-decryptor-input').classList.remove('d-none');
|
||||
document.querySelector('#content').innerHTML = '';
|
||||
document.querySelector('#content').insertAdjacentElement(
|
||||
'afterbegin',
|
||||
_decryptor.$el
|
||||
);
|
||||
window.localStorage.removeItem(`fixit-decryptor/#${location.pathname}`);
|
||||
// reset hook
|
||||
for (const event of _decryptor.resetEventSet) {
|
||||
event();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* initialize fixit-encryptor shortcodes
|
||||
*/
|
||||
_proto.initShortcodes = () => {
|
||||
// TODO TODO shortcode decrypted event
|
||||
// this.addEventListener('decrypted', this.options?.decrypted);
|
||||
const _decryptor = this;
|
||||
const $shortcodes = document.querySelectorAll('fixit-encryptor:not(.decrypted)');
|
||||
|
||||
$shortcodes.forEach($shortcode => {
|
||||
$shortcode.querySelector('.fixit-decryptor-input')?.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
const $decryptor = this.parentElement.parentElement;
|
||||
const $content = $decryptor.nextElementSibling;
|
||||
const password = $content.getAttribute('data-password');
|
||||
const input = this.value.trim();
|
||||
const saltLen = input.length % 2 ? input.length : input.length + 1;
|
||||
const inputMd5 = CryptoJS.MD5(input).toString();
|
||||
const inputSha256 = CryptoJS.SHA256(input).toString();
|
||||
|
||||
this.value = '';
|
||||
this.blur();
|
||||
if (!input) {
|
||||
alert('Please enter the correct password!');
|
||||
return console.warn('Please enter the correct password!');
|
||||
}
|
||||
if (inputMd5 !== password) {
|
||||
alert(`Password error: ${input} not the correct password!`);
|
||||
return console.warn(`Password error: ${input} not the correct password!`);
|
||||
}
|
||||
try {
|
||||
const base64EncodeContent = $content.getAttribute('data-content').replace(inputSha256.slice(saltLen), '');
|
||||
$decryptor.querySelector('.fixit-decryptor-input').classList.add('d-none');
|
||||
$content.insertAdjacentHTML(
|
||||
'afterbegin',
|
||||
CryptoJS.enc.Base64.parse(base64EncodeContent).toString(CryptoJS.enc.Utf8)
|
||||
);
|
||||
$decryptor.parentElement.classList.add('decrypted');
|
||||
} catch (err) {
|
||||
return console.error(err);
|
||||
}
|
||||
// TODO shortcode decrypted hook
|
||||
// for (const event of _decryptor.decryptedEventSet) {
|
||||
// event();
|
||||
// }
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* validate the cached decryption statistics in localStorage
|
||||
* @returns {FixItDecryptor}
|
||||
*/
|
||||
_proto.validateCache = () => {
|
||||
const $content = document.querySelector('#content');
|
||||
const password = $content.getAttribute('data-password');
|
||||
const cachedStat = JSON.parse(window.localStorage.getItem(`fixit-decryptor/#${location.pathname}`));
|
||||
|
||||
if (!cachedStat) {
|
||||
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
|
||||
this.$el.querySelector('#fixit-decryptor-input').classList.remove('d-none');
|
||||
return this;
|
||||
}
|
||||
if (cachedStat?.md5 !== password || Number(cachedStat?.expiration) < Math.ceil(Date.now() / 1000)) {
|
||||
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
|
||||
this.$el.querySelector('#fixit-decryptor-input').classList.remove('d-none');
|
||||
window.localStorage.removeItem(`fixit-decryptor/#${location.pathname}`);
|
||||
console.warn('The password has expired, please re-enter!');
|
||||
return this;
|
||||
}
|
||||
_decryptContent($content.getAttribute('data-content').replace(cachedStat.sha256, ''));
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* add event listener for FixIt Decryptor
|
||||
* @param {String} event event name
|
||||
* @param {Function} listener event handler
|
||||
* @returns {FixItDecryptor}
|
||||
*/
|
||||
_proto.addEventListener = (event, listener) => {
|
||||
if (typeof listener !== 'function') {
|
||||
return this;
|
||||
}
|
||||
switch (event) {
|
||||
case 'decrypted':
|
||||
this.decryptedEventSet.add(listener);
|
||||
break;
|
||||
case 'reset':
|
||||
this.resetEventSet.add(listener);
|
||||
break;
|
||||
default:
|
||||
console.warn(`Event ${event} not found in FixIt Decryptor!`);
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* remove event listener for FixIt Decryptor
|
||||
* @param {String} event event name
|
||||
* @param {Function} listener event handler
|
||||
* @returns {FixItDecryptor}
|
||||
*/
|
||||
_proto.removeEventListener = (event, listener) => {
|
||||
if (typeof listener !== 'function') {
|
||||
return this;
|
||||
}
|
||||
switch (event) {
|
||||
case 'decrypted':
|
||||
this.decryptedEventSet.delete(listener);
|
||||
break;
|
||||
case 'reset':
|
||||
this.resetEventSet.delete(listener);
|
||||
break;
|
||||
default:
|
||||
console.warn(`Event ${event} not found in FixIt Decryptor!`);
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,265 @@
|
||||
const CACHE_VERSION = 1;
|
||||
|
||||
const BASE_CACHE_FILES = [
|
||||
'/css/style.min.css',
|
||||
'/js/theme.min.js',
|
||||
'/site.webmanifest',
|
||||
'/images/fixit.svg'
|
||||
];
|
||||
|
||||
const OFFLINE_CACHE_FILES = [
|
||||
'/css/style.min.css',
|
||||
'/js/theme.min.js',
|
||||
'/site.webmanifest',
|
||||
'/images/fixit.svg',
|
||||
'/offline/'
|
||||
];
|
||||
|
||||
const NOT_FOUND_CACHE_FILES = [
|
||||
'/css/style.min.css',
|
||||
'/js/theme.min.js',
|
||||
'/site.webmanifest',
|
||||
'/images/fixit.svg',
|
||||
'/404.html'
|
||||
];
|
||||
|
||||
const OFFLINE_PAGE = '/offline/';
|
||||
const NOT_FOUND_PAGE = '/404.html';
|
||||
|
||||
const CACHE_VERSIONS = {
|
||||
assets: 'assets-v' + CACHE_VERSION,
|
||||
content: 'content-v' + CACHE_VERSION,
|
||||
offline: 'offline-v' + CACHE_VERSION,
|
||||
notFound: '404-v' + CACHE_VERSION
|
||||
};
|
||||
|
||||
// Define MAX_TTL's in SECONDS for specific file extensions
|
||||
const MAX_TTL = {
|
||||
'/': 3600,
|
||||
html: 3600,
|
||||
json: 86400,
|
||||
js: 86400,
|
||||
css: 86400
|
||||
};
|
||||
|
||||
const CACHE_BLACKLIST = [
|
||||
(str) => {
|
||||
return !str.startsWith('http://localhost');
|
||||
}
|
||||
];
|
||||
|
||||
const SUPPORTED_METHODS = ['GET'];
|
||||
|
||||
/**
|
||||
* isBlackListed
|
||||
* @param {string} url
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isBlacklisted(url) {
|
||||
return CACHE_BLACKLIST.length > 0
|
||||
? !CACHE_BLACKLIST.filter((rule) => {
|
||||
if (typeof rule === 'function') {
|
||||
return !rule(url);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}).length
|
||||
: false;
|
||||
}
|
||||
|
||||
/**
|
||||
* getFileExtension
|
||||
* @param {string} url
|
||||
* @returns {string}
|
||||
*/
|
||||
function getFileExtension(url) {
|
||||
const extension = url.split('.').reverse()[0].split('?')[0];
|
||||
return extension.endsWith('/') ? '/' : extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* getTTL
|
||||
* @param {string} url
|
||||
*/
|
||||
function getTTL(url) {
|
||||
if (typeof url === 'string') {
|
||||
const extension = getFileExtension(url);
|
||||
if (typeof MAX_TTL[extension] === 'number') {
|
||||
return MAX_TTL[extension];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* installServiceWorker
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function installServiceWorker() {
|
||||
return Promise.all([
|
||||
caches.open(CACHE_VERSIONS.assets).then((cache) => {
|
||||
return cache.addAll(BASE_CACHE_FILES);
|
||||
}),
|
||||
caches.open(CACHE_VERSIONS.offline).then((cache) => {
|
||||
return cache.addAll(OFFLINE_CACHE_FILES);
|
||||
}),
|
||||
caches.open(CACHE_VERSIONS.notFound).then((cache) => {
|
||||
return cache.addAll(NOT_FOUND_CACHE_FILES);
|
||||
})
|
||||
]).then(() => {
|
||||
return self.skipWaiting();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* cleanupLegacyCache
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function cleanupLegacyCache() {
|
||||
const currentCaches = Object.keys(CACHE_VERSIONS).map((key) => {
|
||||
return CACHE_VERSIONS[key];
|
||||
});
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
caches
|
||||
.keys()
|
||||
.then((keys) => {
|
||||
return keys.filter((key) => {
|
||||
return !~currentCaches.indexOf(key);
|
||||
});
|
||||
})
|
||||
.then((legacy) => {
|
||||
if (legacy.length) {
|
||||
Promise.all(
|
||||
legacy.map((legacyKey) => {
|
||||
return caches.delete(legacyKey);
|
||||
})
|
||||
)
|
||||
.then(() => {
|
||||
resolve();
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
self.addEventListener('install', (event) => {
|
||||
event.waitUntil(Promise.all([installServiceWorker(), self.skipWaiting()]));
|
||||
});
|
||||
|
||||
// The activate handler takes care of cleaning up old caches.
|
||||
self.addEventListener('activate', (event) => {
|
||||
event.waitUntil(
|
||||
Promise.all([
|
||||
cleanupLegacyCache(),
|
||||
self.clients.claim(),
|
||||
self.skipWaiting()
|
||||
]).catch((err) => {
|
||||
console.log(err);
|
||||
self.skipWaiting();
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', (event) => {
|
||||
event.respondWith(
|
||||
caches.open(CACHE_VERSIONS.content).then((cache) => {
|
||||
return cache
|
||||
.match(event.request)
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
const headers = response.headers.entries();
|
||||
let date = null;
|
||||
|
||||
for (const pair of headers) {
|
||||
if (pair[0] === 'date') {
|
||||
date = new Date(pair[1]);
|
||||
}
|
||||
}
|
||||
if (date) {
|
||||
const age = parseInt(
|
||||
(new Date().getTime() - date.getTime()) / 1000
|
||||
);
|
||||
const ttl = getTTL(event.request.url);
|
||||
|
||||
if (ttl && age > ttl) {
|
||||
return new Promise((resolve) => {
|
||||
return fetch(event.request.clone())
|
||||
.then((updatedResponse) => {
|
||||
if (updatedResponse) {
|
||||
cache.put(event.request, updatedResponse.clone());
|
||||
resolve(updatedResponse);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
resolve(response);
|
||||
});
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
return response;
|
||||
});
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
return response;
|
||||
} else {
|
||||
return fetch(event.request.clone())
|
||||
.then((response) => {
|
||||
if (response.status < 400) {
|
||||
if (
|
||||
~SUPPORTED_METHODS.indexOf(event.request.method) &&
|
||||
!isBlacklisted(event.request.url) &&
|
||||
event.request.url.slice(0, 4) === 'http'
|
||||
) {
|
||||
cache.put(event.request, response.clone());
|
||||
}
|
||||
return response;
|
||||
} else {
|
||||
return caches.open(CACHE_VERSIONS.notFound).then((cache) => {
|
||||
return cache.match(NOT_FOUND_PAGE);
|
||||
});
|
||||
}
|
||||
})
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
return response;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
return caches
|
||||
.open(CACHE_VERSIONS.offline)
|
||||
.then((offlineCache) => {
|
||||
return offlineCache.match(OFFLINE_PAGE);
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(' Error in fetch handler:', error);
|
||||
throw error;
|
||||
});
|
||||
})
|
||||
);
|
||||
});
|
||||
+1493
File diff suppressed because it is too large
Load Diff
Vendored
-3
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+29
-24
@@ -1,26 +1,31 @@
|
||||
normalize.css@8.0.1 https://github.com/necolas/normalize.css
|
||||
fontawesome-free@5.13.0 https://fontawesome.com/
|
||||
simple-icons@2.14.0 https://github.com/simple-icons/simple-icons
|
||||
animate.css@3.7.2 https://github.com/daneden/animate.css
|
||||
smooth-scroll@16.1.3 https://github.com/cferdinandi/smooth-scroll
|
||||
autocomplete.js@0.37.1 https://github.com/algolia/autocomplete.js
|
||||
lunr.js@2.3.8 https://lunrjs.com/
|
||||
algoliasearch@4.2.0 https://github.com/algolia/algoliasearch-client-javascript
|
||||
lazysizes@5.2.2 https://github.com/aFarkas/lazysizes
|
||||
object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
|
||||
twemoji@13.0.0 https://github.com/twitter/twemoji
|
||||
lightgallery.js@1.2.0 https://github.com/sachinchoolur/lightgallery.js
|
||||
lg-thumbnail.js@1.2.0 https://github.com/sachinchoolur/lg-thumbnail.js
|
||||
lg-zoom.js@1.2.0 https://github.com/sachinchoolur/lg-zoom.js
|
||||
clipboard.js@2.0.6 https://github.com/zenorocha/clipboard.js
|
||||
sharer.js@0.4.0 https://github.com/ellisonleao/sharer.js
|
||||
typeit@7.0.4 https://github.com/alexmacarthur/typeit
|
||||
katex@0.11.1 https://katex.org/
|
||||
mermaid@8.5.1 https://github.com/knsv/mermaid
|
||||
echarts@4.8.0 https://echarts.apache.org/
|
||||
mapbox-gl@1.10.1 https://github.com/mapbox/mapbox-gl-js
|
||||
algoliasearch@4.13.0 https://github.com/algolia/algoliasearch-client-javascript
|
||||
animate.css@4.1.1 https://github.com/daneden/animate.css
|
||||
aplayer@1.10.1 https://github.com/MoePlayer/APlayer
|
||||
meting@2.0.1 https://github.com/metowolf/MetingJS
|
||||
gitalk@1.6.2 https://github.com/gitalk/gitalk
|
||||
valine@1.4.14 https://valine.js.org/
|
||||
artalk@2.3.4 https://github.com/ArtalkJS/Artalk
|
||||
autocomplete.js@0.38.1 https://github.com/algolia/autocomplete.js
|
||||
cell-watermark@1.0.3 https://github.com/Lruihao/watermark
|
||||
cookieconsent@3.1.1 https://github.com/osano/cookieconsent
|
||||
crypto-js@4.1.1 https://github.com/brix/crypto-js
|
||||
echarts@5.3.2 https://github.com/apache/echarts
|
||||
eruda@2.5.0 https://github.com/liriliri/eruda
|
||||
fontawesome-free@6.1.1 https://github.com/FortAwesome/Font-Awesome
|
||||
gitalk@1.7.2 https://github.com/gitalk/gitalk
|
||||
katex@0.15.3 https://github.com/KaTeX/KaTeX
|
||||
lazysizes@5.3.2 https://github.com/aFarkas/lazysizes
|
||||
lg-thumbnail.js@1.2.0 https://github.com/sachinchoolur/lg-thumbnail.js
|
||||
lg-zoom.js@1.3.0 https://github.com/sachinchoolur/lg-zoom.js
|
||||
lightgallery.js@1.4.0 https://github.com/sachinchoolur/lightgallery.js
|
||||
lunr.js@2.3.9 https://github.com/olivernn/lunr.js
|
||||
mapbox-gl@2.8.2 https://github.com/mapbox/mapbox-gl-js
|
||||
mermaid@8.13.3 https://github.com/knsv/mermaid
|
||||
meting@2.0.1 https://github.com/metowolf/MetingJS
|
||||
normalize.css@8.0.1 https://github.com/necolas/normalize.css
|
||||
object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
|
||||
pangu.js@4.0.7 https://github.com/vinta/pangu.js
|
||||
sharer.js@0.5.1 https://github.com/ellisonleao/sharer.js
|
||||
simple-icons@5.21.1 https://github.com/simple-icons/simple-icons
|
||||
twemoji@14.0.2 https://github.com/twitter/twemoji
|
||||
typeit@7.0.4 https://github.com/alexmacarthur/typeit
|
||||
valine@1.5.0 https://github.com/xCss/Valine
|
||||
vconsole@3.14.6 https://github.com/Tencent/vConsole
|
||||
waline@2.6.1 https://github.com/walinejs/waline
|
||||
|
||||
+4
-2
File diff suppressed because one or more lines are too long
Vendored
+5
-9
File diff suppressed because one or more lines are too long
Vendored
-2
File diff suppressed because one or more lines are too long
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
+7
File diff suppressed because one or more lines are too long
Vendored
+7
File diff suppressed because one or more lines are too long
+3
-3
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
(function(e,t){"function"==typeof define&&define.amd?define([],t()):"object"==typeof module&&module.exports?module.exports=t():e.Watermark=t()})(this,function(){function e(t={}){var n=e.prototype;this.options=t,s(this),d(this,this.options),h(this),p(this),n.upload=function(e){if(e){o.disconnect(),i.disconnect(),this.options.content=e;for(const t of this._container.querySelectorAll(".cell-watermark"))t.innerHTML=e;o.observe(this._container.parentNode,{childList:!0,subtree:!0}),i.observe(this._container,{attributes:!0,childList:!0,characterData:!0,subtree:!0})}},n.render=function(e={}){l(this,Object.assign(this.options,e))},n.destroy=function(){i.disconnect(),o.disconnect(),window.removeEventListener("resize",r),this._container.parentNode.removeChild(this._container)}}var t,n,i,o,r,c=window.outerWidth,a=window.outerHeight,s=function(e){e._container=document.createElement("div"),e._container.classList.add("cell-watermark-container"),e._container.style.cssText="display: block; pointer-events: none;",e._container.setAttribute("aria-hidden",!0),t=document.querySelector(e.options.appendTo)||document.body,t.appendChild(e._container)},d=function(e,t){t.rowSpacing=t.rowSpacing||60,t.colSpacing=t.colSpacing||30,t.width=t.width||150,t.height=t.height||20;let i=parseInt(a/(t.height+t.rowSpacing)),o=parseInt(c/(t.width+t.colSpacing)),r=(c-t.width*o-t.colSpacing*(o-1))/2,s=(a-t.height*i-t.rowSpacing*(i-1))/2,d=document.createElement("div");d.classList.add("cell-watermark"),d.style.cssText="transform: rotate(15deg); opacity: 0.1; font-size: 0.85rem; text-align: center;position: fixed; user-select: none; word-break: break-all; overflow: hidden; z-index: 999999;";for(let n=0;n<i;n++){let i=s+(t.rowSpacing+t.height)*n,c=o;n%2!=0&&c++;for(let n=0;n<c;n++){let a=r+(t.colSpacing+t.width)*n;c!==o&&(a-=(t.colSpacing+t.width)/2);let s=d.cloneNode();s.style.cssText+=`left: ${a}px; top: ${i}px; width: ${t.width}px; height: ${t.height}px`,s.style.transform=`rotate(${t.rotate}deg)`,s.style.opacity=t.opacity,s.style.fontSize=`${t.fontSize}rem`,s.style.fontFamily=t.fontFamily,s.innerHTML=t.content,e._container.appendChild(s)}}n=e._container},l=function(e,t){i.disconnect(),e._container.innerHTML="",d(e,t),i.observe(e._container,{attributes:!0,childList:!0,characterData:!0,subtree:!0})},h=function(e){i=new MutationObserver(function(t,n){l(e,e.options)}),i.observe(e._container,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),o=new MutationObserver(function(e){for(let i of e)"childList"===i.type&&i.removedNodes.length>0&&0===document.querySelectorAll(".cell-watermark-container").length&&t.appendChild(n)}),o.observe(e._container.parentNode,{childList:!0,subtree:!0})},p=function(e){r=function(){window.outerHeight===a&&window.outerWidth===c||(a=window.outerHeight,c=window.outerWidth,l(e,e.options))},window.addEventListener("resize",r)};return e});
|
||||
-7
File diff suppressed because one or more lines are too long
@@ -0,0 +1,807 @@
|
||||
;(function (root, factory) {
|
||||
if (typeof exports === "object") {
|
||||
// CommonJS
|
||||
module.exports = exports = factory();
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
// AMD
|
||||
define([], factory);
|
||||
}
|
||||
else {
|
||||
// Global (browser)
|
||||
root.CryptoJS = factory();
|
||||
}
|
||||
}(this, function () {
|
||||
|
||||
/*globals window, global, require*/
|
||||
|
||||
/**
|
||||
* CryptoJS core components.
|
||||
*/
|
||||
var CryptoJS = CryptoJS || (function (Math, undefined) {
|
||||
|
||||
var crypto;
|
||||
|
||||
// Native crypto from window (Browser)
|
||||
if (typeof window !== 'undefined' && window.crypto) {
|
||||
crypto = window.crypto;
|
||||
}
|
||||
|
||||
// Native crypto in web worker (Browser)
|
||||
if (typeof self !== 'undefined' && self.crypto) {
|
||||
crypto = self.crypto;
|
||||
}
|
||||
|
||||
// Native crypto from worker
|
||||
if (typeof globalThis !== 'undefined' && globalThis.crypto) {
|
||||
crypto = globalThis.crypto;
|
||||
}
|
||||
|
||||
// Native (experimental IE 11) crypto from window (Browser)
|
||||
if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
|
||||
crypto = window.msCrypto;
|
||||
}
|
||||
|
||||
// Native crypto from global (NodeJS)
|
||||
if (!crypto && typeof global !== 'undefined' && global.crypto) {
|
||||
crypto = global.crypto;
|
||||
}
|
||||
|
||||
// Native crypto import via require (NodeJS)
|
||||
if (!crypto && typeof require === 'function') {
|
||||
try {
|
||||
crypto = require('crypto');
|
||||
} catch (err) {}
|
||||
}
|
||||
|
||||
/*
|
||||
* Cryptographically secure pseudorandom number generator
|
||||
*
|
||||
* As Math.random() is cryptographically not safe to use
|
||||
*/
|
||||
var cryptoSecureRandomInt = function () {
|
||||
if (crypto) {
|
||||
// Use getRandomValues method (Browser)
|
||||
if (typeof crypto.getRandomValues === 'function') {
|
||||
try {
|
||||
return crypto.getRandomValues(new Uint32Array(1))[0];
|
||||
} catch (err) {}
|
||||
}
|
||||
|
||||
// Use randomBytes method (NodeJS)
|
||||
if (typeof crypto.randomBytes === 'function') {
|
||||
try {
|
||||
return crypto.randomBytes(4).readInt32LE();
|
||||
} catch (err) {}
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error('Native crypto module could not be used to get secure random number.');
|
||||
};
|
||||
|
||||
/*
|
||||
* Local polyfill of Object.create
|
||||
|
||||
*/
|
||||
var create = Object.create || (function () {
|
||||
function F() {}
|
||||
|
||||
return function (obj) {
|
||||
var subtype;
|
||||
|
||||
F.prototype = obj;
|
||||
|
||||
subtype = new F();
|
||||
|
||||
F.prototype = null;
|
||||
|
||||
return subtype;
|
||||
};
|
||||
}());
|
||||
|
||||
/**
|
||||
* CryptoJS namespace.
|
||||
*/
|
||||
var C = {};
|
||||
|
||||
/**
|
||||
* Library namespace.
|
||||
*/
|
||||
var C_lib = C.lib = {};
|
||||
|
||||
/**
|
||||
* Base object for prototypal inheritance.
|
||||
*/
|
||||
var Base = C_lib.Base = (function () {
|
||||
|
||||
|
||||
return {
|
||||
/**
|
||||
* Creates a new object that inherits from this object.
|
||||
*
|
||||
* @param {Object} overrides Properties to copy into the new object.
|
||||
*
|
||||
* @return {Object} The new object.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var MyType = CryptoJS.lib.Base.extend({
|
||||
* field: 'value',
|
||||
*
|
||||
* method: function () {
|
||||
* }
|
||||
* });
|
||||
*/
|
||||
extend: function (overrides) {
|
||||
// Spawn
|
||||
var subtype = create(this);
|
||||
|
||||
// Augment
|
||||
if (overrides) {
|
||||
subtype.mixIn(overrides);
|
||||
}
|
||||
|
||||
// Create default initializer
|
||||
if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
|
||||
subtype.init = function () {
|
||||
subtype.$super.init.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
// Initializer's prototype is the subtype object
|
||||
subtype.init.prototype = subtype;
|
||||
|
||||
// Reference supertype
|
||||
subtype.$super = this;
|
||||
|
||||
return subtype;
|
||||
},
|
||||
|
||||
/**
|
||||
* Extends this object and runs the init method.
|
||||
* Arguments to create() will be passed to init().
|
||||
*
|
||||
* @return {Object} The new object.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var instance = MyType.create();
|
||||
*/
|
||||
create: function () {
|
||||
var instance = this.extend();
|
||||
instance.init.apply(instance, arguments);
|
||||
|
||||
return instance;
|
||||
},
|
||||
|
||||
/**
|
||||
* Initializes a newly created object.
|
||||
* Override this method to add some logic when your objects are created.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var MyType = CryptoJS.lib.Base.extend({
|
||||
* init: function () {
|
||||
* // ...
|
||||
* }
|
||||
* });
|
||||
*/
|
||||
init: function () {
|
||||
},
|
||||
|
||||
/**
|
||||
* Copies properties into this object.
|
||||
*
|
||||
* @param {Object} properties The properties to mix in.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* MyType.mixIn({
|
||||
* field: 'value'
|
||||
* });
|
||||
*/
|
||||
mixIn: function (properties) {
|
||||
for (var propertyName in properties) {
|
||||
if (properties.hasOwnProperty(propertyName)) {
|
||||
this[propertyName] = properties[propertyName];
|
||||
}
|
||||
}
|
||||
|
||||
// IE won't copy toString using the loop above
|
||||
if (properties.hasOwnProperty('toString')) {
|
||||
this.toString = properties.toString;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a copy of this object.
|
||||
*
|
||||
* @return {Object} The clone.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var clone = instance.clone();
|
||||
*/
|
||||
clone: function () {
|
||||
return this.init.prototype.extend(this);
|
||||
}
|
||||
};
|
||||
}());
|
||||
|
||||
/**
|
||||
* An array of 32-bit words.
|
||||
*
|
||||
* @property {Array} words The array of 32-bit words.
|
||||
* @property {number} sigBytes The number of significant bytes in this word array.
|
||||
*/
|
||||
var WordArray = C_lib.WordArray = Base.extend({
|
||||
/**
|
||||
* Initializes a newly created word array.
|
||||
*
|
||||
* @param {Array} words (Optional) An array of 32-bit words.
|
||||
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.lib.WordArray.create();
|
||||
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
|
||||
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
|
||||
*/
|
||||
init: function (words, sigBytes) {
|
||||
words = this.words = words || [];
|
||||
|
||||
if (sigBytes != undefined) {
|
||||
this.sigBytes = sigBytes;
|
||||
} else {
|
||||
this.sigBytes = words.length * 4;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts this word array to a string.
|
||||
*
|
||||
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
|
||||
*
|
||||
* @return {string} The stringified word array.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var string = wordArray + '';
|
||||
* var string = wordArray.toString();
|
||||
* var string = wordArray.toString(CryptoJS.enc.Utf8);
|
||||
*/
|
||||
toString: function (encoder) {
|
||||
return (encoder || Hex).stringify(this);
|
||||
},
|
||||
|
||||
/**
|
||||
* Concatenates a word array to this word array.
|
||||
*
|
||||
* @param {WordArray} wordArray The word array to append.
|
||||
*
|
||||
* @return {WordArray} This word array.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* wordArray1.concat(wordArray2);
|
||||
*/
|
||||
concat: function (wordArray) {
|
||||
// Shortcuts
|
||||
var thisWords = this.words;
|
||||
var thatWords = wordArray.words;
|
||||
var thisSigBytes = this.sigBytes;
|
||||
var thatSigBytes = wordArray.sigBytes;
|
||||
|
||||
// Clamp excess bits
|
||||
this.clamp();
|
||||
|
||||
// Concat
|
||||
if (thisSigBytes % 4) {
|
||||
// Copy one byte at a time
|
||||
for (var i = 0; i < thatSigBytes; i++) {
|
||||
var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||
thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
|
||||
}
|
||||
} else {
|
||||
// Copy one word at a time
|
||||
for (var j = 0; j < thatSigBytes; j += 4) {
|
||||
thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
|
||||
}
|
||||
}
|
||||
this.sigBytes += thatSigBytes;
|
||||
|
||||
// Chainable
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes insignificant bits.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* wordArray.clamp();
|
||||
*/
|
||||
clamp: function () {
|
||||
// Shortcuts
|
||||
var words = this.words;
|
||||
var sigBytes = this.sigBytes;
|
||||
|
||||
// Clamp
|
||||
words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
|
||||
words.length = Math.ceil(sigBytes / 4);
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a copy of this word array.
|
||||
*
|
||||
* @return {WordArray} The clone.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var clone = wordArray.clone();
|
||||
*/
|
||||
clone: function () {
|
||||
var clone = Base.clone.call(this);
|
||||
clone.words = this.words.slice(0);
|
||||
|
||||
return clone;
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a word array filled with random bytes.
|
||||
*
|
||||
* @param {number} nBytes The number of random bytes to generate.
|
||||
*
|
||||
* @return {WordArray} The random word array.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.lib.WordArray.random(16);
|
||||
*/
|
||||
random: function (nBytes) {
|
||||
var words = [];
|
||||
|
||||
for (var i = 0; i < nBytes; i += 4) {
|
||||
words.push(cryptoSecureRandomInt());
|
||||
}
|
||||
|
||||
return new WordArray.init(words, nBytes);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Encoder namespace.
|
||||
*/
|
||||
var C_enc = C.enc = {};
|
||||
|
||||
/**
|
||||
* Hex encoding strategy.
|
||||
*/
|
||||
var Hex = C_enc.Hex = {
|
||||
/**
|
||||
* Converts a word array to a hex string.
|
||||
*
|
||||
* @param {WordArray} wordArray The word array.
|
||||
*
|
||||
* @return {string} The hex string.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hexString = CryptoJS.enc.Hex.stringify(wordArray);
|
||||
*/
|
||||
stringify: function (wordArray) {
|
||||
// Shortcuts
|
||||
var words = wordArray.words;
|
||||
var sigBytes = wordArray.sigBytes;
|
||||
|
||||
// Convert
|
||||
var hexChars = [];
|
||||
for (var i = 0; i < sigBytes; i++) {
|
||||
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||
hexChars.push((bite >>> 4).toString(16));
|
||||
hexChars.push((bite & 0x0f).toString(16));
|
||||
}
|
||||
|
||||
return hexChars.join('');
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts a hex string to a word array.
|
||||
*
|
||||
* @param {string} hexStr The hex string.
|
||||
*
|
||||
* @return {WordArray} The word array.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.enc.Hex.parse(hexString);
|
||||
*/
|
||||
parse: function (hexStr) {
|
||||
// Shortcut
|
||||
var hexStrLength = hexStr.length;
|
||||
|
||||
// Convert
|
||||
var words = [];
|
||||
for (var i = 0; i < hexStrLength; i += 2) {
|
||||
words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
|
||||
}
|
||||
|
||||
return new WordArray.init(words, hexStrLength / 2);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Latin1 encoding strategy.
|
||||
*/
|
||||
var Latin1 = C_enc.Latin1 = {
|
||||
/**
|
||||
* Converts a word array to a Latin1 string.
|
||||
*
|
||||
* @param {WordArray} wordArray The word array.
|
||||
*
|
||||
* @return {string} The Latin1 string.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
|
||||
*/
|
||||
stringify: function (wordArray) {
|
||||
// Shortcuts
|
||||
var words = wordArray.words;
|
||||
var sigBytes = wordArray.sigBytes;
|
||||
|
||||
// Convert
|
||||
var latin1Chars = [];
|
||||
for (var i = 0; i < sigBytes; i++) {
|
||||
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||
latin1Chars.push(String.fromCharCode(bite));
|
||||
}
|
||||
|
||||
return latin1Chars.join('');
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts a Latin1 string to a word array.
|
||||
*
|
||||
* @param {string} latin1Str The Latin1 string.
|
||||
*
|
||||
* @return {WordArray} The word array.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
|
||||
*/
|
||||
parse: function (latin1Str) {
|
||||
// Shortcut
|
||||
var latin1StrLength = latin1Str.length;
|
||||
|
||||
// Convert
|
||||
var words = [];
|
||||
for (var i = 0; i < latin1StrLength; i++) {
|
||||
words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
|
||||
}
|
||||
|
||||
return new WordArray.init(words, latin1StrLength);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* UTF-8 encoding strategy.
|
||||
*/
|
||||
var Utf8 = C_enc.Utf8 = {
|
||||
/**
|
||||
* Converts a word array to a UTF-8 string.
|
||||
*
|
||||
* @param {WordArray} wordArray The word array.
|
||||
*
|
||||
* @return {string} The UTF-8 string.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
|
||||
*/
|
||||
stringify: function (wordArray) {
|
||||
try {
|
||||
return decodeURIComponent(escape(Latin1.stringify(wordArray)));
|
||||
} catch (e) {
|
||||
throw new Error('Malformed UTF-8 data');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts a UTF-8 string to a word array.
|
||||
*
|
||||
* @param {string} utf8Str The UTF-8 string.
|
||||
*
|
||||
* @return {WordArray} The word array.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
|
||||
*/
|
||||
parse: function (utf8Str) {
|
||||
return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Abstract buffered block algorithm template.
|
||||
*
|
||||
* The property blockSize must be implemented in a concrete subtype.
|
||||
*
|
||||
* @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
|
||||
*/
|
||||
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
|
||||
/**
|
||||
* Resets this block algorithm's data buffer to its initial state.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* bufferedBlockAlgorithm.reset();
|
||||
*/
|
||||
reset: function () {
|
||||
// Initial values
|
||||
this._data = new WordArray.init();
|
||||
this._nDataBytes = 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds new data to this block algorithm's buffer.
|
||||
*
|
||||
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* bufferedBlockAlgorithm._append('data');
|
||||
* bufferedBlockAlgorithm._append(wordArray);
|
||||
*/
|
||||
_append: function (data) {
|
||||
// Convert string to WordArray, else assume WordArray already
|
||||
if (typeof data == 'string') {
|
||||
data = Utf8.parse(data);
|
||||
}
|
||||
|
||||
// Append
|
||||
this._data.concat(data);
|
||||
this._nDataBytes += data.sigBytes;
|
||||
},
|
||||
|
||||
/**
|
||||
* Processes available data blocks.
|
||||
*
|
||||
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
|
||||
*
|
||||
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
|
||||
*
|
||||
* @return {WordArray} The processed data.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var processedData = bufferedBlockAlgorithm._process();
|
||||
* var processedData = bufferedBlockAlgorithm._process(!!'flush');
|
||||
*/
|
||||
_process: function (doFlush) {
|
||||
var processedWords;
|
||||
|
||||
// Shortcuts
|
||||
var data = this._data;
|
||||
var dataWords = data.words;
|
||||
var dataSigBytes = data.sigBytes;
|
||||
var blockSize = this.blockSize;
|
||||
var blockSizeBytes = blockSize * 4;
|
||||
|
||||
// Count blocks ready
|
||||
var nBlocksReady = dataSigBytes / blockSizeBytes;
|
||||
if (doFlush) {
|
||||
// Round up to include partial blocks
|
||||
nBlocksReady = Math.ceil(nBlocksReady);
|
||||
} else {
|
||||
// Round down to include only full blocks,
|
||||
// less the number of blocks that must remain in the buffer
|
||||
nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
|
||||
}
|
||||
|
||||
// Count words ready
|
||||
var nWordsReady = nBlocksReady * blockSize;
|
||||
|
||||
// Count bytes ready
|
||||
var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
|
||||
|
||||
// Process blocks
|
||||
if (nWordsReady) {
|
||||
for (var offset = 0; offset < nWordsReady; offset += blockSize) {
|
||||
// Perform concrete-algorithm logic
|
||||
this._doProcessBlock(dataWords, offset);
|
||||
}
|
||||
|
||||
// Remove processed words
|
||||
processedWords = dataWords.splice(0, nWordsReady);
|
||||
data.sigBytes -= nBytesReady;
|
||||
}
|
||||
|
||||
// Return processed words
|
||||
return new WordArray.init(processedWords, nBytesReady);
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a copy of this object.
|
||||
*
|
||||
* @return {Object} The clone.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var clone = bufferedBlockAlgorithm.clone();
|
||||
*/
|
||||
clone: function () {
|
||||
var clone = Base.clone.call(this);
|
||||
clone._data = this._data.clone();
|
||||
|
||||
return clone;
|
||||
},
|
||||
|
||||
_minBufferSize: 0
|
||||
});
|
||||
|
||||
/**
|
||||
* Abstract hasher template.
|
||||
*
|
||||
* @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
|
||||
*/
|
||||
var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
|
||||
/**
|
||||
* Configuration options.
|
||||
*/
|
||||
cfg: Base.extend(),
|
||||
|
||||
/**
|
||||
* Initializes a newly created hasher.
|
||||
*
|
||||
* @param {Object} cfg (Optional) The configuration options to use for this hash computation.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hasher = CryptoJS.algo.SHA256.create();
|
||||
*/
|
||||
init: function (cfg) {
|
||||
// Apply config defaults
|
||||
this.cfg = this.cfg.extend(cfg);
|
||||
|
||||
// Set initial values
|
||||
this.reset();
|
||||
},
|
||||
|
||||
/**
|
||||
* Resets this hasher to its initial state.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* hasher.reset();
|
||||
*/
|
||||
reset: function () {
|
||||
// Reset data buffer
|
||||
BufferedBlockAlgorithm.reset.call(this);
|
||||
|
||||
// Perform concrete-hasher logic
|
||||
this._doReset();
|
||||
},
|
||||
|
||||
/**
|
||||
* Updates this hasher with a message.
|
||||
*
|
||||
* @param {WordArray|string} messageUpdate The message to append.
|
||||
*
|
||||
* @return {Hasher} This hasher.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* hasher.update('message');
|
||||
* hasher.update(wordArray);
|
||||
*/
|
||||
update: function (messageUpdate) {
|
||||
// Append
|
||||
this._append(messageUpdate);
|
||||
|
||||
// Update the hash
|
||||
this._process();
|
||||
|
||||
// Chainable
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Finalizes the hash computation.
|
||||
* Note that the finalize operation is effectively a destructive, read-once operation.
|
||||
*
|
||||
* @param {WordArray|string} messageUpdate (Optional) A final message update.
|
||||
*
|
||||
* @return {WordArray} The hash.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hash = hasher.finalize();
|
||||
* var hash = hasher.finalize('message');
|
||||
* var hash = hasher.finalize(wordArray);
|
||||
*/
|
||||
finalize: function (messageUpdate) {
|
||||
// Final message update
|
||||
if (messageUpdate) {
|
||||
this._append(messageUpdate);
|
||||
}
|
||||
|
||||
// Perform concrete-hasher logic
|
||||
var hash = this._doFinalize();
|
||||
|
||||
return hash;
|
||||
},
|
||||
|
||||
blockSize: 512/32,
|
||||
|
||||
/**
|
||||
* Creates a shortcut function to a hasher's object interface.
|
||||
*
|
||||
* @param {Hasher} hasher The hasher to create a helper for.
|
||||
*
|
||||
* @return {Function} The shortcut function.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
|
||||
*/
|
||||
_createHelper: function (hasher) {
|
||||
return function (message, cfg) {
|
||||
return new hasher.init(cfg).finalize(message);
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a shortcut function to the HMAC's object interface.
|
||||
*
|
||||
* @param {Hasher} hasher The hasher to use in this HMAC helper.
|
||||
*
|
||||
* @return {Function} The shortcut function.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
|
||||
*/
|
||||
_createHmacHelper: function (hasher) {
|
||||
return function (message, key) {
|
||||
return new C_algo.HMAC.init(hasher, key).finalize(message);
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Algorithm namespace.
|
||||
*/
|
||||
var C_algo = C.algo = {};
|
||||
|
||||
return C;
|
||||
}(Math));
|
||||
|
||||
|
||||
return CryptoJS;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,136 @@
|
||||
;(function (root, factory) {
|
||||
if (typeof exports === "object") {
|
||||
// CommonJS
|
||||
module.exports = exports = factory(require("./core"));
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
// AMD
|
||||
define(["./core"], factory);
|
||||
}
|
||||
else {
|
||||
// Global (browser)
|
||||
factory(root.CryptoJS);
|
||||
}
|
||||
}(this, function (CryptoJS) {
|
||||
|
||||
(function () {
|
||||
// Shortcuts
|
||||
var C = CryptoJS;
|
||||
var C_lib = C.lib;
|
||||
var WordArray = C_lib.WordArray;
|
||||
var C_enc = C.enc;
|
||||
|
||||
/**
|
||||
* Base64 encoding strategy.
|
||||
*/
|
||||
var Base64 = C_enc.Base64 = {
|
||||
/**
|
||||
* Converts a word array to a Base64 string.
|
||||
*
|
||||
* @param {WordArray} wordArray The word array.
|
||||
*
|
||||
* @return {string} The Base64 string.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var base64String = CryptoJS.enc.Base64.stringify(wordArray);
|
||||
*/
|
||||
stringify: function (wordArray) {
|
||||
// Shortcuts
|
||||
var words = wordArray.words;
|
||||
var sigBytes = wordArray.sigBytes;
|
||||
var map = this._map;
|
||||
|
||||
// Clamp excess bits
|
||||
wordArray.clamp();
|
||||
|
||||
// Convert
|
||||
var base64Chars = [];
|
||||
for (var i = 0; i < sigBytes; i += 3) {
|
||||
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
|
||||
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
|
||||
|
||||
var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
|
||||
|
||||
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
|
||||
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
|
||||
}
|
||||
}
|
||||
|
||||
// Add padding
|
||||
var paddingChar = map.charAt(64);
|
||||
if (paddingChar) {
|
||||
while (base64Chars.length % 4) {
|
||||
base64Chars.push(paddingChar);
|
||||
}
|
||||
}
|
||||
|
||||
return base64Chars.join('');
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts a Base64 string to a word array.
|
||||
*
|
||||
* @param {string} base64Str The Base64 string.
|
||||
*
|
||||
* @return {WordArray} The word array.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var wordArray = CryptoJS.enc.Base64.parse(base64String);
|
||||
*/
|
||||
parse: function (base64Str) {
|
||||
// Shortcuts
|
||||
var base64StrLength = base64Str.length;
|
||||
var map = this._map;
|
||||
var reverseMap = this._reverseMap;
|
||||
|
||||
if (!reverseMap) {
|
||||
reverseMap = this._reverseMap = [];
|
||||
for (var j = 0; j < map.length; j++) {
|
||||
reverseMap[map.charCodeAt(j)] = j;
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore padding
|
||||
var paddingChar = map.charAt(64);
|
||||
if (paddingChar) {
|
||||
var paddingIndex = base64Str.indexOf(paddingChar);
|
||||
if (paddingIndex !== -1) {
|
||||
base64StrLength = paddingIndex;
|
||||
}
|
||||
}
|
||||
|
||||
// Convert
|
||||
return parseLoop(base64Str, base64StrLength, reverseMap);
|
||||
|
||||
},
|
||||
|
||||
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
|
||||
};
|
||||
|
||||
function parseLoop(base64Str, base64StrLength, reverseMap) {
|
||||
var words = [];
|
||||
var nBytes = 0;
|
||||
for (var i = 0; i < base64StrLength; i++) {
|
||||
if (i % 4) {
|
||||
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
|
||||
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
|
||||
var bitsCombined = bits1 | bits2;
|
||||
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
|
||||
nBytes++;
|
||||
}
|
||||
}
|
||||
return WordArray.create(words, nBytes);
|
||||
}
|
||||
}());
|
||||
|
||||
|
||||
return CryptoJS.enc.Base64;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,268 @@
|
||||
;(function (root, factory) {
|
||||
if (typeof exports === "object") {
|
||||
// CommonJS
|
||||
module.exports = exports = factory(require("./core"));
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
// AMD
|
||||
define(["./core"], factory);
|
||||
}
|
||||
else {
|
||||
// Global (browser)
|
||||
factory(root.CryptoJS);
|
||||
}
|
||||
}(this, function (CryptoJS) {
|
||||
|
||||
(function (Math) {
|
||||
// Shortcuts
|
||||
var C = CryptoJS;
|
||||
var C_lib = C.lib;
|
||||
var WordArray = C_lib.WordArray;
|
||||
var Hasher = C_lib.Hasher;
|
||||
var C_algo = C.algo;
|
||||
|
||||
// Constants table
|
||||
var T = [];
|
||||
|
||||
// Compute constants
|
||||
(function () {
|
||||
for (var i = 0; i < 64; i++) {
|
||||
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
|
||||
}
|
||||
}());
|
||||
|
||||
/**
|
||||
* MD5 hash algorithm.
|
||||
*/
|
||||
var MD5 = C_algo.MD5 = Hasher.extend({
|
||||
_doReset: function () {
|
||||
this._hash = new WordArray.init([
|
||||
0x67452301, 0xefcdab89,
|
||||
0x98badcfe, 0x10325476
|
||||
]);
|
||||
},
|
||||
|
||||
_doProcessBlock: function (M, offset) {
|
||||
// Swap endian
|
||||
for (var i = 0; i < 16; i++) {
|
||||
// Shortcuts
|
||||
var offset_i = offset + i;
|
||||
var M_offset_i = M[offset_i];
|
||||
|
||||
M[offset_i] = (
|
||||
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
|
||||
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
|
||||
);
|
||||
}
|
||||
|
||||
// Shortcuts
|
||||
var H = this._hash.words;
|
||||
|
||||
var M_offset_0 = M[offset + 0];
|
||||
var M_offset_1 = M[offset + 1];
|
||||
var M_offset_2 = M[offset + 2];
|
||||
var M_offset_3 = M[offset + 3];
|
||||
var M_offset_4 = M[offset + 4];
|
||||
var M_offset_5 = M[offset + 5];
|
||||
var M_offset_6 = M[offset + 6];
|
||||
var M_offset_7 = M[offset + 7];
|
||||
var M_offset_8 = M[offset + 8];
|
||||
var M_offset_9 = M[offset + 9];
|
||||
var M_offset_10 = M[offset + 10];
|
||||
var M_offset_11 = M[offset + 11];
|
||||
var M_offset_12 = M[offset + 12];
|
||||
var M_offset_13 = M[offset + 13];
|
||||
var M_offset_14 = M[offset + 14];
|
||||
var M_offset_15 = M[offset + 15];
|
||||
|
||||
// Working varialbes
|
||||
var a = H[0];
|
||||
var b = H[1];
|
||||
var c = H[2];
|
||||
var d = H[3];
|
||||
|
||||
// Computation
|
||||
a = FF(a, b, c, d, M_offset_0, 7, T[0]);
|
||||
d = FF(d, a, b, c, M_offset_1, 12, T[1]);
|
||||
c = FF(c, d, a, b, M_offset_2, 17, T[2]);
|
||||
b = FF(b, c, d, a, M_offset_3, 22, T[3]);
|
||||
a = FF(a, b, c, d, M_offset_4, 7, T[4]);
|
||||
d = FF(d, a, b, c, M_offset_5, 12, T[5]);
|
||||
c = FF(c, d, a, b, M_offset_6, 17, T[6]);
|
||||
b = FF(b, c, d, a, M_offset_7, 22, T[7]);
|
||||
a = FF(a, b, c, d, M_offset_8, 7, T[8]);
|
||||
d = FF(d, a, b, c, M_offset_9, 12, T[9]);
|
||||
c = FF(c, d, a, b, M_offset_10, 17, T[10]);
|
||||
b = FF(b, c, d, a, M_offset_11, 22, T[11]);
|
||||
a = FF(a, b, c, d, M_offset_12, 7, T[12]);
|
||||
d = FF(d, a, b, c, M_offset_13, 12, T[13]);
|
||||
c = FF(c, d, a, b, M_offset_14, 17, T[14]);
|
||||
b = FF(b, c, d, a, M_offset_15, 22, T[15]);
|
||||
|
||||
a = GG(a, b, c, d, M_offset_1, 5, T[16]);
|
||||
d = GG(d, a, b, c, M_offset_6, 9, T[17]);
|
||||
c = GG(c, d, a, b, M_offset_11, 14, T[18]);
|
||||
b = GG(b, c, d, a, M_offset_0, 20, T[19]);
|
||||
a = GG(a, b, c, d, M_offset_5, 5, T[20]);
|
||||
d = GG(d, a, b, c, M_offset_10, 9, T[21]);
|
||||
c = GG(c, d, a, b, M_offset_15, 14, T[22]);
|
||||
b = GG(b, c, d, a, M_offset_4, 20, T[23]);
|
||||
a = GG(a, b, c, d, M_offset_9, 5, T[24]);
|
||||
d = GG(d, a, b, c, M_offset_14, 9, T[25]);
|
||||
c = GG(c, d, a, b, M_offset_3, 14, T[26]);
|
||||
b = GG(b, c, d, a, M_offset_8, 20, T[27]);
|
||||
a = GG(a, b, c, d, M_offset_13, 5, T[28]);
|
||||
d = GG(d, a, b, c, M_offset_2, 9, T[29]);
|
||||
c = GG(c, d, a, b, M_offset_7, 14, T[30]);
|
||||
b = GG(b, c, d, a, M_offset_12, 20, T[31]);
|
||||
|
||||
a = HH(a, b, c, d, M_offset_5, 4, T[32]);
|
||||
d = HH(d, a, b, c, M_offset_8, 11, T[33]);
|
||||
c = HH(c, d, a, b, M_offset_11, 16, T[34]);
|
||||
b = HH(b, c, d, a, M_offset_14, 23, T[35]);
|
||||
a = HH(a, b, c, d, M_offset_1, 4, T[36]);
|
||||
d = HH(d, a, b, c, M_offset_4, 11, T[37]);
|
||||
c = HH(c, d, a, b, M_offset_7, 16, T[38]);
|
||||
b = HH(b, c, d, a, M_offset_10, 23, T[39]);
|
||||
a = HH(a, b, c, d, M_offset_13, 4, T[40]);
|
||||
d = HH(d, a, b, c, M_offset_0, 11, T[41]);
|
||||
c = HH(c, d, a, b, M_offset_3, 16, T[42]);
|
||||
b = HH(b, c, d, a, M_offset_6, 23, T[43]);
|
||||
a = HH(a, b, c, d, M_offset_9, 4, T[44]);
|
||||
d = HH(d, a, b, c, M_offset_12, 11, T[45]);
|
||||
c = HH(c, d, a, b, M_offset_15, 16, T[46]);
|
||||
b = HH(b, c, d, a, M_offset_2, 23, T[47]);
|
||||
|
||||
a = II(a, b, c, d, M_offset_0, 6, T[48]);
|
||||
d = II(d, a, b, c, M_offset_7, 10, T[49]);
|
||||
c = II(c, d, a, b, M_offset_14, 15, T[50]);
|
||||
b = II(b, c, d, a, M_offset_5, 21, T[51]);
|
||||
a = II(a, b, c, d, M_offset_12, 6, T[52]);
|
||||
d = II(d, a, b, c, M_offset_3, 10, T[53]);
|
||||
c = II(c, d, a, b, M_offset_10, 15, T[54]);
|
||||
b = II(b, c, d, a, M_offset_1, 21, T[55]);
|
||||
a = II(a, b, c, d, M_offset_8, 6, T[56]);
|
||||
d = II(d, a, b, c, M_offset_15, 10, T[57]);
|
||||
c = II(c, d, a, b, M_offset_6, 15, T[58]);
|
||||
b = II(b, c, d, a, M_offset_13, 21, T[59]);
|
||||
a = II(a, b, c, d, M_offset_4, 6, T[60]);
|
||||
d = II(d, a, b, c, M_offset_11, 10, T[61]);
|
||||
c = II(c, d, a, b, M_offset_2, 15, T[62]);
|
||||
b = II(b, c, d, a, M_offset_9, 21, T[63]);
|
||||
|
||||
// Intermediate hash value
|
||||
H[0] = (H[0] + a) | 0;
|
||||
H[1] = (H[1] + b) | 0;
|
||||
H[2] = (H[2] + c) | 0;
|
||||
H[3] = (H[3] + d) | 0;
|
||||
},
|
||||
|
||||
_doFinalize: function () {
|
||||
// Shortcuts
|
||||
var data = this._data;
|
||||
var dataWords = data.words;
|
||||
|
||||
var nBitsTotal = this._nDataBytes * 8;
|
||||
var nBitsLeft = data.sigBytes * 8;
|
||||
|
||||
// Add padding
|
||||
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||
|
||||
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
|
||||
var nBitsTotalL = nBitsTotal;
|
||||
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
|
||||
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
|
||||
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
|
||||
);
|
||||
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
|
||||
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
|
||||
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
|
||||
);
|
||||
|
||||
data.sigBytes = (dataWords.length + 1) * 4;
|
||||
|
||||
// Hash final blocks
|
||||
this._process();
|
||||
|
||||
// Shortcuts
|
||||
var hash = this._hash;
|
||||
var H = hash.words;
|
||||
|
||||
// Swap endian
|
||||
for (var i = 0; i < 4; i++) {
|
||||
// Shortcut
|
||||
var H_i = H[i];
|
||||
|
||||
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
|
||||
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
|
||||
}
|
||||
|
||||
// Return final computed hash
|
||||
return hash;
|
||||
},
|
||||
|
||||
clone: function () {
|
||||
var clone = Hasher.clone.call(this);
|
||||
clone._hash = this._hash.clone();
|
||||
|
||||
return clone;
|
||||
}
|
||||
});
|
||||
|
||||
function FF(a, b, c, d, x, s, t) {
|
||||
var n = a + ((b & c) | (~b & d)) + x + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
}
|
||||
|
||||
function GG(a, b, c, d, x, s, t) {
|
||||
var n = a + ((b & d) | (c & ~d)) + x + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
}
|
||||
|
||||
function HH(a, b, c, d, x, s, t) {
|
||||
var n = a + (b ^ c ^ d) + x + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
}
|
||||
|
||||
function II(a, b, c, d, x, s, t) {
|
||||
var n = a + (c ^ (b | ~d)) + x + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut function to the hasher's object interface.
|
||||
*
|
||||
* @param {WordArray|string} message The message to hash.
|
||||
*
|
||||
* @return {WordArray} The hash.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hash = CryptoJS.MD5('message');
|
||||
* var hash = CryptoJS.MD5(wordArray);
|
||||
*/
|
||||
C.MD5 = Hasher._createHelper(MD5);
|
||||
|
||||
/**
|
||||
* Shortcut function to the HMAC's object interface.
|
||||
*
|
||||
* @param {WordArray|string} message The message to hash.
|
||||
* @param {WordArray|string} key The secret key.
|
||||
*
|
||||
* @return {WordArray} The HMAC.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hmac = CryptoJS.HmacMD5(message, key);
|
||||
*/
|
||||
C.HmacMD5 = Hasher._createHmacHelper(MD5);
|
||||
}(Math));
|
||||
|
||||
|
||||
return CryptoJS.MD5;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,199 @@
|
||||
;(function (root, factory) {
|
||||
if (typeof exports === "object") {
|
||||
// CommonJS
|
||||
module.exports = exports = factory(require("./core"));
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
// AMD
|
||||
define(["./core"], factory);
|
||||
}
|
||||
else {
|
||||
// Global (browser)
|
||||
factory(root.CryptoJS);
|
||||
}
|
||||
}(this, function (CryptoJS) {
|
||||
|
||||
(function (Math) {
|
||||
// Shortcuts
|
||||
var C = CryptoJS;
|
||||
var C_lib = C.lib;
|
||||
var WordArray = C_lib.WordArray;
|
||||
var Hasher = C_lib.Hasher;
|
||||
var C_algo = C.algo;
|
||||
|
||||
// Initialization and round constants tables
|
||||
var H = [];
|
||||
var K = [];
|
||||
|
||||
// Compute constants
|
||||
(function () {
|
||||
function isPrime(n) {
|
||||
var sqrtN = Math.sqrt(n);
|
||||
for (var factor = 2; factor <= sqrtN; factor++) {
|
||||
if (!(n % factor)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function getFractionalBits(n) {
|
||||
return ((n - (n | 0)) * 0x100000000) | 0;
|
||||
}
|
||||
|
||||
var n = 2;
|
||||
var nPrime = 0;
|
||||
while (nPrime < 64) {
|
||||
if (isPrime(n)) {
|
||||
if (nPrime < 8) {
|
||||
H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
|
||||
}
|
||||
K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
|
||||
|
||||
nPrime++;
|
||||
}
|
||||
|
||||
n++;
|
||||
}
|
||||
}());
|
||||
|
||||
// Reusable object
|
||||
var W = [];
|
||||
|
||||
/**
|
||||
* SHA-256 hash algorithm.
|
||||
*/
|
||||
var SHA256 = C_algo.SHA256 = Hasher.extend({
|
||||
_doReset: function () {
|
||||
this._hash = new WordArray.init(H.slice(0));
|
||||
},
|
||||
|
||||
_doProcessBlock: function (M, offset) {
|
||||
// Shortcut
|
||||
var H = this._hash.words;
|
||||
|
||||
// Working variables
|
||||
var a = H[0];
|
||||
var b = H[1];
|
||||
var c = H[2];
|
||||
var d = H[3];
|
||||
var e = H[4];
|
||||
var f = H[5];
|
||||
var g = H[6];
|
||||
var h = H[7];
|
||||
|
||||
// Computation
|
||||
for (var i = 0; i < 64; i++) {
|
||||
if (i < 16) {
|
||||
W[i] = M[offset + i] | 0;
|
||||
} else {
|
||||
var gamma0x = W[i - 15];
|
||||
var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
|
||||
((gamma0x << 14) | (gamma0x >>> 18)) ^
|
||||
(gamma0x >>> 3);
|
||||
|
||||
var gamma1x = W[i - 2];
|
||||
var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
|
||||
((gamma1x << 13) | (gamma1x >>> 19)) ^
|
||||
(gamma1x >>> 10);
|
||||
|
||||
W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
|
||||
}
|
||||
|
||||
var ch = (e & f) ^ (~e & g);
|
||||
var maj = (a & b) ^ (a & c) ^ (b & c);
|
||||
|
||||
var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
|
||||
var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
|
||||
|
||||
var t1 = h + sigma1 + ch + K[i] + W[i];
|
||||
var t2 = sigma0 + maj;
|
||||
|
||||
h = g;
|
||||
g = f;
|
||||
f = e;
|
||||
e = (d + t1) | 0;
|
||||
d = c;
|
||||
c = b;
|
||||
b = a;
|
||||
a = (t1 + t2) | 0;
|
||||
}
|
||||
|
||||
// Intermediate hash value
|
||||
H[0] = (H[0] + a) | 0;
|
||||
H[1] = (H[1] + b) | 0;
|
||||
H[2] = (H[2] + c) | 0;
|
||||
H[3] = (H[3] + d) | 0;
|
||||
H[4] = (H[4] + e) | 0;
|
||||
H[5] = (H[5] + f) | 0;
|
||||
H[6] = (H[6] + g) | 0;
|
||||
H[7] = (H[7] + h) | 0;
|
||||
},
|
||||
|
||||
_doFinalize: function () {
|
||||
// Shortcuts
|
||||
var data = this._data;
|
||||
var dataWords = data.words;
|
||||
|
||||
var nBitsTotal = this._nDataBytes * 8;
|
||||
var nBitsLeft = data.sigBytes * 8;
|
||||
|
||||
// Add padding
|
||||
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
|
||||
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
|
||||
data.sigBytes = dataWords.length * 4;
|
||||
|
||||
// Hash final blocks
|
||||
this._process();
|
||||
|
||||
// Return final computed hash
|
||||
return this._hash;
|
||||
},
|
||||
|
||||
clone: function () {
|
||||
var clone = Hasher.clone.call(this);
|
||||
clone._hash = this._hash.clone();
|
||||
|
||||
return clone;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Shortcut function to the hasher's object interface.
|
||||
*
|
||||
* @param {WordArray|string} message The message to hash.
|
||||
*
|
||||
* @return {WordArray} The hash.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hash = CryptoJS.SHA256('message');
|
||||
* var hash = CryptoJS.SHA256(wordArray);
|
||||
*/
|
||||
C.SHA256 = Hasher._createHelper(SHA256);
|
||||
|
||||
/**
|
||||
* Shortcut function to the HMAC's object interface.
|
||||
*
|
||||
* @param {WordArray|string} message The message to hash.
|
||||
* @param {WordArray|string} key The secret key.
|
||||
*
|
||||
* @return {WordArray} The HMAC.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var hmac = CryptoJS.HmacSHA256(message, key);
|
||||
*/
|
||||
C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
|
||||
}(Math));
|
||||
|
||||
|
||||
return CryptoJS.SHA256;
|
||||
|
||||
}));
|
||||
Vendored
+45
-22
File diff suppressed because one or more lines are too long
@@ -1,240 +0,0 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
var log = function(msg) {
|
||||
if (typeof console !== 'undefined') {
|
||||
console && console.error && console.error(msg);
|
||||
}
|
||||
};
|
||||
if (!echarts) {
|
||||
log('ECharts is not Loaded');
|
||||
return;
|
||||
}
|
||||
|
||||
var colorPalette = [
|
||||
'#2ec7c9',
|
||||
'#b6a2de',
|
||||
'#5ab1ef',
|
||||
'#ffb980',
|
||||
'#d87a80',
|
||||
'#8d98b3',
|
||||
'#e5cf0d',
|
||||
'#97b552',
|
||||
'#95706d',
|
||||
'#dc69aa',
|
||||
'#07a2a4',
|
||||
'#9a7fd1',
|
||||
'#588dd5',
|
||||
'#f5994e',
|
||||
'#c05050',
|
||||
'#59678c',
|
||||
'#c9ab00',
|
||||
'#7eb00a',
|
||||
'#6f5553',
|
||||
'#c14089'
|
||||
];
|
||||
|
||||
var theme = {
|
||||
color: colorPalette,
|
||||
|
||||
title: {
|
||||
textStyle: {
|
||||
fontWeight: 'normal',
|
||||
color: '#008acd'
|
||||
}
|
||||
},
|
||||
|
||||
visualMap: {
|
||||
itemWidth: 15,
|
||||
color: ['#5ab1ef', '#e0ffff']
|
||||
},
|
||||
|
||||
toolbox: {
|
||||
iconStyle: {
|
||||
normal: {
|
||||
borderColor: colorPalette[0]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
tooltip: {
|
||||
backgroundColor: 'rgba(50,50,50,0.5)',
|
||||
axisPointer: {
|
||||
type: 'line',
|
||||
lineStyle: {
|
||||
color: '#008acd'
|
||||
},
|
||||
crossStyle: {
|
||||
color: '#008acd'
|
||||
},
|
||||
shadowStyle: {
|
||||
color: 'rgba(200,200,200,0.2)'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
dataZoom: {
|
||||
dataBackgroundColor: '#efefff',
|
||||
fillerColor: 'rgba(182,162,222,0.2)',
|
||||
handleColor: '#008acd'
|
||||
},
|
||||
|
||||
grid: {
|
||||
borderColor: '#eee'
|
||||
},
|
||||
|
||||
categoryAxis: {
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#008acd'
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: ['#eee']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
valueAxis: {
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#008acd'
|
||||
}
|
||||
},
|
||||
splitArea: {
|
||||
show: true,
|
||||
areaStyle: {
|
||||
color: ['rgba(250,250,250,0.1)', 'rgba(200,200,200,0.1)']
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: ['#eee']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
timeline: {
|
||||
lineStyle: {
|
||||
color: '#008acd'
|
||||
},
|
||||
controlStyle: {
|
||||
color: '#008acd',
|
||||
borderColor: '#008acd'
|
||||
},
|
||||
symbol: 'emptyCircle',
|
||||
symbolSize: 3
|
||||
},
|
||||
|
||||
line: {
|
||||
smooth: true,
|
||||
symbol: 'emptyCircle',
|
||||
symbolSize: 3
|
||||
},
|
||||
|
||||
candlestick: {
|
||||
itemStyle: {
|
||||
color: '#d87a80',
|
||||
color0: '#2ec7c9'
|
||||
},
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
color: '#d87a80',
|
||||
color0: '#2ec7c9'
|
||||
},
|
||||
areaStyle: {
|
||||
color: '#2ec7c9',
|
||||
color0: '#b6a2de'
|
||||
}
|
||||
},
|
||||
|
||||
scatter: {
|
||||
symbol: 'circle',
|
||||
symbolSize: 4
|
||||
},
|
||||
|
||||
map: {
|
||||
itemStyle: {
|
||||
color: '#ddd'
|
||||
},
|
||||
areaStyle: {
|
||||
color: '#fe994e'
|
||||
},
|
||||
label: {
|
||||
color: '#d87a80'
|
||||
}
|
||||
},
|
||||
|
||||
graph: {
|
||||
itemStyle: {
|
||||
color: '#d87a80'
|
||||
},
|
||||
linkStyle: {
|
||||
color: '#2ec7c9'
|
||||
}
|
||||
},
|
||||
|
||||
gauge: {
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: [
|
||||
[0.2, '#2ec7c9'],
|
||||
[0.8, '#5ab1ef'],
|
||||
[1, '#d87a80']
|
||||
],
|
||||
width: 10
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
splitNumber: 10,
|
||||
length: 15,
|
||||
lineStyle: {
|
||||
color: 'auto'
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
length: 22,
|
||||
lineStyle: {
|
||||
color: 'auto'
|
||||
}
|
||||
},
|
||||
pointer: {
|
||||
width: 5
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerTheme('macarons', theme);
|
||||
});
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* Minified by jsDelivr using Terser v5.10.0.
|
||||
* Original file: /npm/echarts@5.3.2/theme/macarons.js
|
||||
*
|
||||
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
|
||||
*/
|
||||
!function(e,o){"function"==typeof define&&define.amd?define(["exports","echarts"],o):"object"==typeof exports&&"string"!=typeof exports.nodeName?o(exports,require("echarts/lib/echarts")):o({},e.echarts)}(this,(function(e,o){var l;if(!o)return l="ECharts is not Loaded",void("undefined"!=typeof console&&console&&console.error&&console.error(l));var r=["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],t={color:r,title:{textStyle:{fontWeight:"normal",color:"#008acd"}},visualMap:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{iconStyle:{normal:{borderColor:r[0]}}},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{color:"#008acd",borderColor:"#008acd"},symbol:"emptyCircle",symbolSize:3},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},candlestick:{itemStyle:{color:"#d87a80",color0:"#2ec7c9"},lineStyle:{width:1,color:"#d87a80",color0:"#2ec7c9"},areaStyle:{color:"#2ec7c9",color0:"#b6a2de"}},scatter:{symbol:"circle",symbolSize:4},map:{itemStyle:{color:"#ddd"},areaStyle:{color:"#fe994e"},label:{color:"#d87a80"}},graph:{itemStyle:{color:"#d87a80"},linkStyle:{color:"#2ec7c9"}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}}};o.registerTheme("macarons",t)}));
|
||||
File diff suppressed because one or more lines are too long
+3
-2
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user