├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── annotation-setting.yaml
├── build.gradle
├── docs
├── above.png
├── metadata.png
├── renderings.png
├── sponsor.png
└── user.png
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── gulpfile.js
├── package.json
├── settings.gradle
├── settings.yaml
├── src
├── font
│ ├── CircularBody.min.css
│ ├── CircularBody
│ │ ├── CircularBody.ttf
│ │ └── CircularBody.woff
│ ├── HarmonyOS_Regular.min.css
│ └── HarmonyOS_Regular
│ │ ├── HarmonyOS_Regular.a.woff2
│ │ ├── HarmonyOS_Regular.a0.woff2
│ │ ├── HarmonyOS_Regular.a1.woff2
│ │ ├── HarmonyOS_Regular.aa.woff2
│ │ ├── HarmonyOS_Regular.ab.woff2
│ │ ├── HarmonyOS_Regular.ac.woff2
│ │ ├── HarmonyOS_Regular.ad.woff2
│ │ ├── HarmonyOS_Regular.ae.woff2
│ │ ├── HarmonyOS_Regular.af.woff2
│ │ ├── HarmonyOS_Regular.ag.woff2
│ │ ├── HarmonyOS_Regular.ah.woff2
│ │ ├── HarmonyOS_Regular.ai.woff2
│ │ ├── HarmonyOS_Regular.aj.woff2
│ │ ├── HarmonyOS_Regular.ak.woff2
│ │ ├── HarmonyOS_Regular.al.woff2
│ │ ├── HarmonyOS_Regular.am.woff2
│ │ ├── HarmonyOS_Regular.an.woff2
│ │ ├── HarmonyOS_Regular.ao.woff2
│ │ ├── HarmonyOS_Regular.ap.woff2
│ │ ├── HarmonyOS_Regular.aq.woff2
│ │ ├── HarmonyOS_Regular.ar.woff2
│ │ ├── HarmonyOS_Regular.as.woff2
│ │ ├── HarmonyOS_Regular.at.woff2
│ │ ├── HarmonyOS_Regular.au.woff2
│ │ ├── HarmonyOS_Regular.av.woff2
│ │ ├── HarmonyOS_Regular.aw.woff2
│ │ ├── HarmonyOS_Regular.ax.woff2
│ │ ├── HarmonyOS_Regular.ay.woff2
│ │ ├── HarmonyOS_Regular.az.woff2
│ │ ├── HarmonyOS_Regular.b.woff2
│ │ ├── HarmonyOS_Regular.c.woff2
│ │ ├── HarmonyOS_Regular.d.woff2
│ │ ├── HarmonyOS_Regular.e.woff2
│ │ ├── HarmonyOS_Regular.f.woff2
│ │ ├── HarmonyOS_Regular.g.woff2
│ │ ├── HarmonyOS_Regular.h.woff2
│ │ ├── HarmonyOS_Regular.i.woff2
│ │ ├── HarmonyOS_Regular.j.woff2
│ │ ├── HarmonyOS_Regular.k.woff2
│ │ ├── HarmonyOS_Regular.l.woff2
│ │ ├── HarmonyOS_Regular.m.woff2
│ │ ├── HarmonyOS_Regular.n.woff2
│ │ ├── HarmonyOS_Regular.o.woff2
│ │ ├── HarmonyOS_Regular.p.woff2
│ │ ├── HarmonyOS_Regular.q.woff2
│ │ ├── HarmonyOS_Regular.r.woff2
│ │ ├── HarmonyOS_Regular.s.woff2
│ │ ├── HarmonyOS_Regular.t.woff2
│ │ ├── HarmonyOS_Regular.u.woff2
│ │ ├── HarmonyOS_Regular.v.woff2
│ │ ├── HarmonyOS_Regular.w.woff2
│ │ ├── HarmonyOS_Regular.x.woff2
│ │ ├── HarmonyOS_Regular.y.woff2
│ │ └── HarmonyOS_Regular.z.woff2
├── html
│ ├── archives.html
│ ├── categories.html
│ ├── category.html
│ ├── index.html
│ ├── links.html
│ ├── moments.html
│ ├── page.html
│ ├── photos.html
│ ├── post.html
│ ├── tag.html
│ ├── tags.html
│ └── views
│ │ ├── aside.html
│ │ ├── components.html
│ │ ├── config.html
│ │ ├── footer.html
│ │ ├── header.html
│ │ ├── layout.html
│ │ └── nav.html
├── js
│ ├── core
│ │ ├── App.js
│ │ ├── _decorator.js
│ │ ├── _lazyLoad.js
│ │ ├── _message.js
│ │ ├── _universe.js
│ │ ├── _util.js
│ │ ├── common.js
│ │ ├── scroll.js
│ │ └── theme.js
│ ├── modules
│ │ ├── AmplifyImg.js
│ │ ├── CodeBlock.js
│ │ ├── Pagination.js
│ │ └── Render.js
│ └── page
│ │ ├── archives.js
│ │ ├── categories.js
│ │ ├── category.js
│ │ ├── index.js
│ │ ├── links.js
│ │ ├── moments.js
│ │ ├── photos.js
│ │ ├── post.js
│ │ ├── single.js
│ │ ├── tag.js
│ │ └── tags.js
├── plugins
│ ├── cursor
│ │ ├── simple.min.css
│ │ └── simple
│ │ │ ├── default.cur
│ │ │ └── pointer.cur
│ ├── fontawesome
│ │ ├── fontawesome.min.css
│ │ └── webfonts
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-duotone-900.ttf
│ │ │ ├── fa-duotone-900.woff2
│ │ │ ├── fa-light-300.ttf
│ │ │ ├── fa-light-300.woff2
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff2
│ │ │ ├── fa-thin-100.ttf
│ │ │ ├── fa-thin-100.woff2
│ │ │ ├── fa-v4compatibility.ttf
│ │ │ └── fa-v4compatibility.woff2
│ ├── loading
│ │ ├── circle.js
│ │ ├── cross_line.js
│ │ ├── dot.js
│ │ └── hourglass.js
│ └── prism
│ │ ├── prism.min.css
│ │ ├── prism.min.js
│ │ └── themes
│ │ ├── prism-a11y-dark.css
│ │ ├── prism-atom-dark.css
│ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ ├── prism-cb.css
│ │ ├── prism-coldark-cold.css
│ │ ├── prism-coldark-dark.css
│ │ ├── prism-coy-without-shadows.css
│ │ ├── prism-darcula.css
│ │ ├── prism-dracula.css
│ │ ├── prism-duotone-dark.css
│ │ ├── prism-duotone-earth.css
│ │ ├── prism-duotone-forest.css
│ │ ├── prism-duotone-light.css
│ │ ├── prism-duotone-sea.css
│ │ ├── prism-duotone-space.css
│ │ ├── prism-ghcolors.css
│ │ ├── prism-gruvbox-dark.css
│ │ ├── prism-gruvbox-light.css
│ │ ├── prism-holi-theme.css
│ │ ├── prism-hopscotch.css
│ │ ├── prism-lucario.css
│ │ ├── prism-material-dark.css
│ │ ├── prism-material-light.css
│ │ ├── prism-material-oceanic.css
│ │ ├── prism-night-owl.css
│ │ ├── prism-nord.css
│ │ ├── prism-one-dark.css
│ │ ├── prism-one-light.css
│ │ ├── prism-pojoaque.css
│ │ ├── prism-shades-of-purple.css
│ │ ├── prism-solarized-dark-atom.css
│ │ ├── prism-synthwave84.css
│ │ ├── prism-vs.css
│ │ ├── prism-vsc-dark-plus.css
│ │ ├── prism-xonokai.css
│ │ └── prism-z-touch.css
└── scss
│ ├── core
│ ├── _base.scss
│ ├── _button.scss
│ ├── _message.scss
│ ├── _reset.scss
│ ├── _util.scss
│ ├── aside.scss
│ ├── common.scss
│ ├── footer.scss
│ ├── header.scss
│ ├── index.scss
│ ├── main.scss
│ └── nav.scss
│ ├── modules
│ ├── codeBlock.scss
│ ├── components.scss
│ └── render.scss
│ └── page
│ ├── archives.scss
│ ├── categories.scss
│ ├── category.scss
│ ├── index.scss
│ ├── links.scss
│ ├── moments.scss
│ ├── photos.scss
│ ├── post.scss
│ ├── single.scss
│ ├── tag.scss
│ └── tags.scss
└── theme.yaml
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 | # top-most EditorConfig file
3 | root = true
4 |
5 | [*]
6 | indent_style = space
7 | indent_size = 2
8 | end_of_line = lf
9 | charset = utf-8
10 | trim_trailing_whitespace = false
11 | insert_final_newline = false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | theme-butterfly-dist.zip
13 | dist-ssr
14 | *.local
15 |
16 | # Editor directories and files
17 | .vscode/*
18 | !.vscode/extensions.json
19 | .idea
20 | .DS_Store
21 | *.suo
22 | *.ntvs*
23 | *.njsproj
24 | *.sln
25 | *.sw?
26 |
27 | .gradle
28 | build
29 | pnpm-lock.yaml
30 | templates
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Index 主题 Halo 2.0
2 |
3 | > `Index` 是Hexo社区[hexo-theme-Index](https://github.com/jerryc127) 此次移植`pug`模板引擎调整为 `thymeleaf`,
4 | > 希望大家喜欢 ❤️ !同时也要在此感谢原作者 [Jerry](https://github.com/jerryc127)
5 | > 欢迎大家加入 [halo-theme-Index 交流群:916571927](https://jq.qq.com/?_wv=1027&k=LfbGKBVG)
6 |
7 | ## 👀 [预览主题](https://dhjdd.cn)
8 |
9 | **效果图** 👇
10 |
11 | 
12 |
13 | ## 🌈 安装
14 |
15 | - 主题仓库地址 `https://github.com/dhjddcn/halo-theme-butterfly.git`
16 | - 在 [Release](https://github.com/dhjddcn/halo-theme-butterfly/releases) 页面下载最新版本 `zip`
17 | 后,通过 `Halo Console` 安装上传即可。
18 |
19 | ## ⚠️ 注意
20 |
21 | 安装主题后,需要在 `Halo Console - 主题 - 基本 - metadata.name`
22 | 中进行配置,否则主题无法正常使用。此处配置的名称可以在 `Halo Console - 用户 - 用户详情 - 用户名` 中获取。
23 |
24 | 
25 | 
26 |
27 | ## 🌐 免费可用的 npm cdn
28 |
29 | - https://unpkg.com/halo-theme-butterfly/templates/assets/
30 | - https://cdn.jsdelivr.net/npm/halo-theme-butterfly/templates/assets/
31 | - https://jsd.onmicrosoft.cn/npm/halo-theme-butterfly/templates/assets/
32 | - https://fastly.jsdelivr.net/npm/halo-theme-butterfly@latest/templates/assets/
33 |
34 | ## ⭐️ 主题功能
35 |
36 | - [x] 二维码打赏
37 | - [x] 预制主题字体
38 | - [x] 自定义背景图
39 | - [x] 页面顶部自定义图
40 | - [x] 文章列表(列表/平铺)
41 | - [x] 侧边栏 全局/单独控制
42 | - [x] 分类/标签页UI优化
43 | - [x] 社交账号配置
44 | - [x] 代码高亮 + 行号 + 复制 + 折叠
45 | - [x] 随机图片api配置
46 | - [x] 统计页面 总访问量
47 | - [x] 站点运行时间
48 | - [x] 主题模式(深色/浅色)
49 |
50 | ### 📃 TODO
51 |
52 | > 目前仍有部分功能不完善,暂时没时间做,后面继续迭代。
53 |
54 | - 页面元数据控制
55 | 百度收录查询 + 主动推送
56 | - 全站 Pjax
57 | - 相册页开发
58 | - 多种布局切换
59 | - 页面动画效果优化
60 | - 自定义标签
61 | - 数学公式
62 | - 局部优化
63 | - 移动端侧边栏优化
64 |
65 |
66 | ## 💡 如何自定义导航条菜单图标?
67 |
68 | > 主题本次移植使用的是 `fontawesome` 字体图标,你可以在 [fontawesome](https://fontawesome.com/search)
69 | > 上找到你想要的图标,然后复制图标的 `class` 名称,如下所示:
70 | > 如我站点首页图标为 `fa-home fa-solid fa-bolt-auto` ,则在 `菜单-图标` 填入 `fa-home fa-solid fa-bolt-auto` 即可
71 |
72 | ## 🛡️ 许可证
73 |
74 | [](https://github.com/halo-dev/halo/blob/master/LICENSE)
75 |
76 | Halo 使用 GPL-v3.0 协议开源,请遵守开源协议。
77 |
78 | ## 🍹 赞助
79 |
80 | 如果你觉得这个主题不错,你可以帮作者买一杯果汁表示鼓励 🍹。(赞助的时候记得加上备注 😁)
81 |
82 | 
83 |
84 | | 时间 | 小伙伴 | 平台 | 金额 | 备注 |
85 | |:-----------|:-----|:-------|:------|:---|
86 | | 2022-07-25 | 咕咕鸽 | QQ | 50 | 🍹 |
87 | | 2023-03-14 | Cary | Alipay | 10 | 🍹 |
88 | | 2023-03-14 | *哦 | Wechat | 50 | 🍹 |
89 | | 2023-03-22 | 心底. | Wechat | 28.88 | 🍹 |
90 | | 2023-03-22 | xx鹏 | Alipay | 3.33 | 🍹 |
91 | | 2024-06-23 | *! | Wechat | 18.88 | 🍹 |
92 |
--------------------------------------------------------------------------------
/annotation-setting.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1alpha1
2 | kind: AnnotationSetting
3 | metadata:
4 | generateName: annotation-setting-
5 | spec:
6 | targetRef:
7 | group: ""
8 | kind: MenuItem
9 | formSchema:
10 | - $formkit: "text"
11 | name: "icon"
12 | label: "图标"
13 |
14 | ---
15 | apiVersion: v1alpha1
16 | kind: AnnotationSetting
17 | metadata:
18 | generateName: annotation-setting-
19 | spec:
20 | targetRef:
21 | group: content.halo.run
22 | kind: Post
23 | formSchema:
24 | - $formkit: "radio"
25 | name: "enable_code_copy"
26 | label: "启用代码复制"
27 | help: "本篇文章代码块复制按钮"
28 | value: "true"
29 | options:
30 | - label: 启用
31 | value: "true"
32 | - label: 禁用
33 | value: "false"
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java'
3 | }
4 |
5 | group 'run.halo'
6 | version '1.0'
7 |
8 | repositories {
9 | mavenCentral()
10 | }
11 |
12 | dependencies {
13 | implementation('org.thymeleaf:thymeleaf:3.0.12.RELEASE')
14 | }
15 |
--------------------------------------------------------------------------------
/docs/above.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/docs/above.png
--------------------------------------------------------------------------------
/docs/metadata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/docs/metadata.png
--------------------------------------------------------------------------------
/docs/renderings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/docs/renderings.png
--------------------------------------------------------------------------------
/docs/sponsor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/docs/sponsor.png
--------------------------------------------------------------------------------
/docs/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/docs/user.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 |
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 |
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 |
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 |
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 |
89 | :omega
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "halo-theme-butterfly",
3 | "version": "2.0.7",
4 | "description": "一个Halo博客主题,Butterfly",
5 | "scripts": {
6 | "dev": "gulp watch",
7 | "clean": "gulp clean",
8 | "zip": "gulp zip",
9 | "build-css": "gulp css",
10 | "build-js": "gulp js",
11 | "build-html": "gulp html",
12 | "copy-folder": "gulp copy-folder",
13 | "build-zip": "npm run clean && gulp && npm run zip",
14 | "build": "npm run clean && gulp && gulp js-plugins-loading",
15 | "release": "gulp release"
16 | },
17 | "files": [
18 | "templates/assets/",
19 | "docs/"
20 | ],
21 | "keywords": [
22 | "halo",
23 | "halo-theme",
24 | "halo-theme-butterfly"
25 | ],
26 | "homepage": "https://github.com/dhjddcn/halo-theme-butterfly#readme",
27 | "bugs": {
28 | "url": "https://github.com/dhjddcn/halo-theme-butterfly/issues"
29 | },
30 | "author": {
31 | "name": "小红",
32 | "url": "https://github.com/dhjddcn",
33 | "email": "dhjddcn@qq.com"
34 | },
35 | "maintainers": [
36 | {
37 | "name": "小红",
38 | "url": "https://github.com/dhjddcn",
39 | "email": "dhjddcn@qq.com"
40 | }
41 | ],
42 | "license": "GPL-3.0",
43 | "repository": {
44 | "url": "https://github.com/dhjddcn/halo-theme-butterfly",
45 | "type": "git"
46 | },
47 | "devDependencies": {
48 | "@babel/core": "^7.15.5",
49 | "@babel/plugin-proposal-decorators": "^7.24.1",
50 | "@babel/plugin-transform-runtime": "^7.15.0",
51 | "@babel/preset-env": "^7.15.6",
52 | "@babel/runtime": "^7.20.7",
53 | "@fancyapps/ui": "^5.0.35",
54 | "@halo-dev/api-client": "^2.17.0",
55 | "animate.css": "^4.1.1",
56 | "autoprefixer": "^10.4.18",
57 | "axios": "^1.7.2",
58 | "babel-eslint": "^10.1.0",
59 | "babel-loader": "^8.2.3",
60 | "clipboard": "^2.0.11",
61 | "css-loader": "^7.0.0",
62 | "css-mqpacker": "^7.0.0",
63 | "cssnano": "^6.0.3",
64 | "echarts": "^5.3.2",
65 | "gulp": "^4.0.2",
66 | "gulp-autoprefixer": "^8.0.0",
67 | "gulp-babel": "^8.0.0",
68 | "gulp-clean": "^0.4.0",
69 | "gulp-clean-css": "^4.3.0",
70 | "gulp-concat": "^2.6.1",
71 | "gulp-copy": "^4.0.1",
72 | "gulp-cssmin": "^0.2.0",
73 | "gulp-cssnano": "^2.1.3",
74 | "gulp-csso": "^4.0.1",
75 | "gulp-gzip": "^1.4.2",
76 | "gulp-htmlmin": "^5.0.1",
77 | "gulp-minify-css": "^1.2.4",
78 | "gulp-postcss": "^9.1.0",
79 | "gulp-rename": "^2.0.0",
80 | "gulp-sass": "^5.1.0",
81 | "gulp-uglify": "^3.0.2",
82 | "gulp-zip": "^5.1.0",
83 | "inquirer": "^7.3.3",
84 | "jquery": "^3.7.1",
85 | "jszip": "^3.10.1",
86 | "pace-js": "^1.2.4",
87 | "postcss-import": "^16.1.0",
88 | "postcss-merge-media-queries": "^1.0.1",
89 | "postcss-merge-rules": "^6.0.3",
90 | "postcss-nested": "^6.0.1",
91 | "postcss-sass": "^0.5.0",
92 | "prismjs": "^1.29.0",
93 | "sass": "^1.63.6",
94 | "tocbot": "^4.25.0",
95 | "typed.js": "^2.1.0",
96 | "webpack": "^5.68.0",
97 | "webpack-stream": "^7.0.0",
98 | "yamljs": "^0.3.0",
99 | "terser-webpack-plugin": "^5.3.10"
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'halo-theme-butterfly'
2 |
--------------------------------------------------------------------------------
/src/font/CircularBody.min.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:"Butterfly Font";font-style:normal;font-weight:400;font-display:swap;src:url(CircularBody/CircularBody.woff) format('woff')}
--------------------------------------------------------------------------------
/src/font/CircularBody/CircularBody.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/CircularBody/CircularBody.ttf
--------------------------------------------------------------------------------
/src/font/CircularBody/CircularBody.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/CircularBody/CircularBody.woff
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a0.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.a1.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aa.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aa.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ab.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ab.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ac.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ac.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ad.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ad.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ae.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ae.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.af.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.af.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ag.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ag.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ah.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ah.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ai.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ai.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aj.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aj.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ak.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ak.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.al.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.al.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.am.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.am.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.an.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.an.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ao.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ao.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ap.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ap.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aq.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aq.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ar.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ar.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.as.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.as.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.at.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.at.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.au.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.au.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.av.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.av.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.aw.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ax.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ax.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ay.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.ay.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.az.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.az.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.b.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.b.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.c.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.d.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.d.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.e.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.e.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.f.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.f.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.g.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.g.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.h.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.h.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.i.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.i.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.j.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.j.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.k.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.k.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.l.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.l.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.m.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.m.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.n.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.n.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.o.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.o.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.p.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.p.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.q.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.q.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.r.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.r.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.s.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.s.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.t.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.t.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.u.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.u.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.v.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.v.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.w.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.w.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.x.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.x.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.y.woff2
--------------------------------------------------------------------------------
/src/font/HarmonyOS_Regular/HarmonyOS_Regular.z.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/font/HarmonyOS_Regular/HarmonyOS_Regular.z.woff2
--------------------------------------------------------------------------------
/src/html/archives.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | -
60 |
61 |
62 |
63 |
64 | -
66 |
67 |
68 |
69 |
70 |
71 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/src/html/categories.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
17 |
18 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/html/category.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/src/html/index.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/src/html/links.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/src/html/moments.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | -
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/src/html/page.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/html/photos.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
图库分类
43 |
44 |
45 | 全部
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
![]()
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/html/tag.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/html/tags.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/html/views/config.html:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
17 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/src/html/views/footer.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/html/views/header.html:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | -
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | -
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | -
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
74 |
75 |
76 |
81 |
82 |
87 |
88 |
89 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/src/html/views/layout.html:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/html/views/nav.html:
--------------------------------------------------------------------------------
1 |
2 |
68 |
--------------------------------------------------------------------------------
/src/js/core/App.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/3/30
3 | * @author: 小红
4 | * @fileName: App
5 | * @Description: 注册应用
6 | */
7 |
8 | import {useClearPage} from '../core/_util';
9 | import Message from './_message';
10 | import Theme from './theme';
11 | import Scroll from './scroll';
12 | import Common from './common';
13 | /**
14 | * @desc: 注册应用
15 | * @returns function(*): *
16 | * @param modules
17 | */
18 | export default function App(modules = []) {
19 | return function(target) {
20 | Object.assign(window.MainApp, {
21 | useTheme: new Theme(), //主题
22 | useCommon: new Common(), // 公用逻辑
23 | useScroll: new Scroll(), //滚动导航侧边
24 | useMessage: new Message(), //滚动导航侧边
25 | });
26 |
27 | const ins = new target();
28 |
29 | const fns = Reflect.ownKeys(target.prototype);
30 |
31 | for (let i = 0; i < fns.length; i++) fns[i].startsWith('run_') && ins[fns[i]]();
32 |
33 | for (let i = 0; i < modules.length; i++) {
34 | const mods = new modules[i]();
35 | window.MainApp.modules[mods.name] = mods;
36 | }
37 |
38 | useClearPage();
39 |
40 | return ins;
41 | };
42 | }
43 |
--------------------------------------------------------------------------------
/src/js/core/_message.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2023/11/5
3 | * @author: 小红
4 | * @fileName: _message
5 | * @Description: 消息提示
6 | */
7 |
8 | export default class Message {
9 |
10 | #container = null; //消息容器
11 |
12 | //svg 图标
13 | #svgs = {
14 | info: ``,
15 | error: ``,
16 | };
17 |
18 | /**
19 | * @description: 创建消息容器
20 | */
21 | constructor() {
22 |
23 | }
24 |
25 | #createContainer() {
26 | this.#container = document.createElement('div');
27 | this.#container.className = 'message-container';
28 | document.body.appendChild( this.#container);
29 | }
30 |
31 | /**
32 | * @description: 创建消息包装器
33 | * @param type 类型
34 | * @param msg 消息
35 | * @param duration 持续时间
36 | */
37 | #createWrapper(type, msg, duration) {
38 | if(!this.#container) this.#createContainer();
39 | const wrapper = document.createElement('div');
40 | wrapper.className = `message-wrapper ${type} animate__animated animate__fadeInDown animate__faster`;
41 | wrapper.innerHTML = `${this.#svgs[type]}
${msg}
`;
42 | this.#container.appendChild(wrapper);
43 | this.#removeWrapper(wrapper, duration);
44 | }
45 |
46 | /**
47 | * @description 移除消息包装器
48 | * @param wrapper
49 | * @param duration
50 | */
51 | #removeWrapper(wrapper, duration = 3000) {
52 | setTimeout(() => {
53 | wrapper.classList.remove('animate__fadeInDown', 'animate__faster');
54 | wrapper.classList.add('animate__fadeOutUp', 'animate__faster');
55 | setTimeout(() => wrapper.remove(), 800);
56 | }, duration);
57 | }
58 |
59 | /**
60 | * @description: 消息提示
61 | * @param msg
62 | * @param duration
63 | */
64 | info(msg, duration) {
65 | this.#createWrapper('info', msg, duration);
66 | }
67 |
68 | /**
69 | * @description: 错误提示
70 | * @param msg
71 | * @param duration
72 | */
73 | error(msg, duration) {
74 | this.#createWrapper('error', msg, duration);
75 | }
76 | }
77 |
78 |
79 |
--------------------------------------------------------------------------------
/src/js/core/_universe.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/3/26
3 | * @author: 小红
4 | * @fileName: _universe
5 | * @Description: 暗黑宇宙背景
6 | */
7 |
8 | export default class Universe {
9 | #canvas; // canvas
10 |
11 | constructor() {
12 | // this.#createCanvas()
13 | }
14 |
15 | #createCanvas() {
16 | const canvas = document.createElement('canvas');
17 | canvas.style.position = 'fixed';
18 | canvas.style.top = '0';
19 | canvas.style.left = '0';
20 | canvas.style.width = '100%';
21 | canvas.style.height = '100%';
22 | canvas.style.zIndex = '-1';
23 | canvas.style.pointerEvents = 'none';
24 | canvas.style.background = 'red'
25 | this.#canvas = canvas;
26 | document.body.appendChild(this.#canvas);
27 | }
28 |
29 | draw(mode) {
30 | // console.log(mode);
31 | }
32 |
33 |
34 | }
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/js/core/common.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/3/2
3 | * @author: 小红
4 | * @fileName: _aside
5 | * @Description:common
6 | */
7 | import $ from 'jquery';
8 | import {useMask} from './_util';
9 | import LazyLoad from './_lazyLoad';
10 |
11 | export default class Common {
12 |
13 | constructor() {
14 | if(window.MainApp.conf.enable_above && window.MainApp.conf.above_background) this.#loadAboveBackgroundImg(); //第一屏图片预加载
15 |
16 | this.#createSingleAction(); //创建单一行为事件
17 |
18 | if(MainApp.conf.enable_aside && MainApp.conf.enable_webInfo) this.#runDay(); //站点运行时间
19 |
20 | }
21 |
22 | // 站点运行时间
23 | #runDay() {
24 | const dom = $('.main > .aside .aside-webInfo .run-day');
25 |
26 | if(!dom.length) return;
27 |
28 | const siteDate = new Date(dom.attr('data-date'));
29 |
30 | if(siteDate.toString() === 'Invalid Date') return;
31 |
32 | const currentDate = new Date();
33 |
34 | const date = currentDate.getTime() - siteDate.getTime();
35 |
36 | const day = parseInt((date / (1000 * 24 * 60 * 60)).toString());
37 |
38 | dom.html(day + ' 天');
39 | }
40 |
41 | /**
42 | * 创建单一行为事件
43 | */
44 | #createSingleAction() {
45 | //图片懒加载
46 | new LazyLoad({
47 | elements_selector: 'img', threshold: 0, data_src: 'lazy-src',
48 | });
49 |
50 | //移动端侧边栏呼出图标
51 | const sideBar = $('.side-bar');
52 | $('.nav a.bars').click((e) => {
53 | e.preventDefault();
54 | sideBar.addClass('active');
55 | useMask(() => sideBar.removeClass('active'));
56 | });
57 |
58 | //移动端侧边栏侧边菜单
59 | $('menu.bar').on('click', 'li.child', (event) => event.currentTarget.classList.toggle('active'));
60 | }
61 |
62 | //返回顶部
63 | backTop() {
64 | $('html,body').animate({scrollTop: 0}, 300);
65 | }
66 |
67 | //第一屏图片预加载
68 | #loadAboveBackgroundImg() {
69 | const img = new Image();
70 | img.src = window.MainApp.conf.above_background;
71 | img.onload = () => {
72 | const above = document.querySelector('.header > .above');
73 | above.style.backgroundImage = `url(${img.src})`;
74 | };
75 | img.onerror = () => {
76 | console.error('第一屏图片预加载失败');
77 | };
78 | }
79 | }
80 |
81 |
82 |
--------------------------------------------------------------------------------
/src/js/core/scroll.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/23
3 | * @author: 小红
4 | * @fileName: naveScroll
5 | * @Description: 滚动触发导航侧边的一些事件
6 | */
7 | import $ from 'jquery';
8 | import {useThrottle} from './_util';
9 |
10 | export default class Scroll {
11 | #CHANGE_FN = null; // 回调
12 | #sideBtnDom = $('#Butterfly > .side-btn');
13 | #navDom = $('.header > .nav');
14 | #max = 56; // 最大值
15 | #num = 0; // 上一次滚动值
16 |
17 | // 初始化
18 | constructor(config) {
19 | window.addEventListener('scroll', useThrottle(() => {
20 | let scrollTop = window.scrollY || document.documentElement.scrollTop;
21 |
22 | // 激活头部导航栏
23 | this.#activeNav(scrollTop);
24 |
25 | // 激活侧边按钮
26 | this.#activeBtn(scrollTop);
27 |
28 | this.#CHANGE_FN && this.#CHANGE_FN(this.#max, this.#num, scrollTop);
29 | this.#num = scrollTop;
30 | }, 200));
31 | }
32 |
33 | // 激活头部导航栏
34 | #activeNav(scrollTop) {
35 | if(scrollTop > this.#max) {
36 | this.#navDom.addClass('style');
37 | if(this.#num <= scrollTop) {
38 | this.#navDom.removeClass('active');
39 | }
40 | else {
41 | this.#navDom.addClass('active');
42 | }
43 | }
44 | else {
45 | if(scrollTop === 0) this.#navDom.removeClass('active style');
46 | }
47 | }
48 |
49 | // 激活侧边按钮
50 | #activeBtn(scrollTop) {
51 | // 滚动到顶部取消按钮
52 | if(scrollTop < this.#max && scrollTop <= 2) this.#sideBtnDom.removeClass('active');
53 |
54 | // 向下滚动激活侧边按钮
55 | if(scrollTop > this.#max && this.#num <= scrollTop) this.#sideBtnDom.addClass('active');
56 | }
57 |
58 |
59 | /**
60 | * 回调
61 | */
62 | change(fn) {
63 | this.#CHANGE_FN = fn;
64 | }
65 |
66 | }
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/src/js/core/theme.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/23
3 | * @author: 小红
4 | * @fileName: _theme
5 | * @Description: 主题切换
6 | */
7 | import {useIsDaytime} from './_util';
8 |
9 | export default class Theme {
10 | #LOCALSTORAGE_KEY = 'data-color-scheme';
11 | #ATTR_KEY = 'colorScheme'; // 根元素主题属性
12 | #CHANGE_FN = null; // 主题切换回调
13 | mode = 'light'; // 主题模式
14 |
15 | // 初始化主题模式
16 | constructor() {
17 | const mes = {
18 | auto: () => useIsDaytime() ? 'light' : 'dark',
19 | user: () => localStorage.getItem(this.#LOCALSTORAGE_KEY) || 'light',
20 | light: () => 'light',
21 | dark: () => 'dark',
22 | };
23 | this.setMode(mes[MainApp.conf.style_mode]());
24 | }
25 |
26 | // 设置主题模式
27 | setMode(theme) {
28 | this.mode = theme;
29 | document.documentElement.dataset[this.#ATTR_KEY] = theme;
30 | localStorage.setItem(this.#LOCALSTORAGE_KEY, theme);
31 | this.#CHANGE_FN && this.#CHANGE_FN(theme);
32 | }
33 |
34 | // 获取主题模式
35 | getMode() {
36 | const rootTheme = document.documentElement.dataset.theme;
37 | const locDataTheme = localStorage.getItem(this.#LOCALSTORAGE_KEY);
38 | return this.mode || rootTheme || locDataTheme;
39 | }
40 |
41 | // 切换主题模式
42 | toggleMode() {
43 | this.setMode(this.mode === 'light' ? 'dark' : 'light');
44 | }
45 |
46 | // 主题模式切换回调
47 | change(fn) {
48 | this.#CHANGE_FN = fn;
49 | }
50 | }
--------------------------------------------------------------------------------
/src/js/modules/AmplifyImg.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/7/4
3 | * @author: 小红
4 | * @fileName: AmplifyImg
5 | * @Description: 图片放大
6 | */
7 | import {Fancybox} from '@fancyapps/ui';
8 | import $ from 'jquery';
9 | import {useInsertStyle} from '../core/_util';
10 | import fancyBoxCss from '@fancyapps/ui/dist/fancybox/fancybox.css';
11 |
12 | export default class AmplifyImg {
13 | name = 'AmplifyImg';
14 |
15 | constructor() {
16 | this.#addCss();
17 | this.#fBox();
18 | }
19 |
20 | #addCss() {
21 | let cssStr = ``;
22 | cssStr += fancyBoxCss.toString();
23 | useInsertStyle(cssStr);
24 | }
25 |
26 | #fBox() {
27 | const imgs = $('.main >.content img');
28 |
29 | imgs.each(function() {
30 | const $this = $(this);
31 | $this.wrap($(``));
32 | });
33 |
34 | Fancybox.bind(
35 | '[data-fancybox="fancyBoxImg"]',
36 | {
37 | Toolbar: {
38 | display: {
39 | left: ['infobar'],
40 | middle: [
41 | 'zoomIn',
42 | 'zoomOut',
43 | 'toggle1to1',
44 | 'rotateCCW',
45 | 'rotateCW',
46 | 'flipX',
47 | 'flipY',
48 | ],
49 | right: ['slideshow', 'thumbs', 'close'],
50 | },
51 | },
52 | });
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/js/modules/Pagination.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/25
3 | * @author: 小红
4 | * @fileName: pagination
5 | * @Description:页码
6 | */
7 |
8 | import $ from 'jquery';
9 |
10 | export default class Pagination {
11 | name = 'Pagination';
12 |
13 | #conf = MainApp.conf;
14 |
15 | constructor() {
16 | if(!MainApp.conf.total) return;
17 |
18 | if(this.#conf.page > this.#conf.totalPages) return;
19 |
20 | this.#createPage();
21 | }
22 |
23 | // 获取上一页
24 | #getPrevUrl() {
25 | return this.#conf.hasPrevious ? `` : '';
26 | }
27 |
28 | // 获取下一页
29 | #getNextUrl() {
30 | return this.#conf.hasNext ? `` : '';
31 | }
32 |
33 | // 获取路径
34 | #getPath() {
35 | const regex = /.*?(?=\/\d+)\//;
36 |
37 | if(this.#conf.nextUrl.includes('/page/')) return this.#conf.nextUrl.match(regex)?.[0];
38 |
39 | if(this.#conf.prevUrl.includes('/page/')) return this.#conf.prevUrl.match(regex)?.[0];
40 |
41 | return '/';
42 | }
43 |
44 | // 获取页码
45 | #getPage() {
46 | const {totalPages, page} = this.#conf;
47 | const path = this.#getPath();
48 | const maxPagesToShow = 5; // 可见的最大页码数
49 | const halfMaxPagesToShow = Math.floor(maxPagesToShow / 2);
50 | let startPage, endPage;
51 |
52 | if(totalPages <= maxPagesToShow) {
53 | startPage = 1;
54 | endPage = totalPages;
55 | }
56 | else {
57 | if(page <= halfMaxPagesToShow + 1) {
58 | startPage = 1;
59 | endPage = maxPagesToShow;
60 | }
61 | else if(page >= totalPages - halfMaxPagesToShow) {
62 | startPage = totalPages - maxPagesToShow + 1;
63 | endPage = totalPages;
64 | }
65 | else {
66 | startPage = page - halfMaxPagesToShow;
67 | endPage = page + halfMaxPagesToShow;
68 | }
69 | }
70 | let html = '';
71 |
72 | for (let i = startPage; i <= endPage; i++) {
73 | html += `${i}`;
74 | }
75 |
76 | return html;
77 | }
78 |
79 | #createPage() {
80 | $('main.main section.content').append(``);
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/js/modules/Render.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/25
3 | * @author: 小红
4 | * @fileName: Render
5 | * @Description: 渲染html
6 | */
7 | import $ from 'jquery';
8 | import {useDelay} from '../core/_util';
9 | import tocBot from 'tocbot';
10 |
11 | export default class Render {
12 | name = 'Render';
13 |
14 | #renderDom = $('article.render'); // 文章渲染区域
15 |
16 | #tocStickyDom = $('.aside .is-sticky');
17 |
18 | #conf = MainApp.conf;
19 |
20 | constructor() {
21 | this.#h();
22 | this.#domObserver();
23 | this.#tocBotH5();
24 | this.#copyRight();
25 | }
26 |
27 | /**
28 | * h标题
29 | */
30 | #h() {
31 | if(this.#conf.enable_h_icon) this.#renderDom.addClass('enable_h_icon');
32 | }
33 |
34 | #domObserver() {
35 | const renderDom = document.querySelector('article.render');
36 |
37 | const observer = new ResizeObserver(entries => {
38 | for (let entry of entries) {
39 | if(entry.contentRect.height > 0) {
40 | this.#tocBot();
41 | observer.disconnect();
42 | }
43 | }
44 | });
45 | observer.observe(renderDom);
46 | }
47 |
48 | /**
49 | * 设置目录
50 | */
51 | #tocBot() {
52 | tocBot.init({
53 | contentSelector: 'article.render',
54 | tocSelector: '.aside-toc > .toc',
55 | headingSelector: 'h1,h2,h3,h4,h5,h6',
56 | hasInnerContainers: true,
57 | scrollSmooth: true,
58 | includeTitleTags: true,
59 | scrollSmoothDuration: 280,
60 | throttleTimeout: 30,
61 | headingsOffset: 20, // 目录中高亮的偏移值,和scrollSmoothOffset有关联
62 | scrollSmoothOffset: -20, // 屏幕滚动的偏移值(这里和导航条固定也有关联)
63 | fixedSidebarOffset: 'auto',
64 | onClick: (e) => e.preventDefault(),
65 | scrollEndCallback: function(e) {
66 | },
67 | });
68 |
69 | MainApp.useScroll.change((max, num, scrollTop) => {
70 | if(scrollTop < max || window.innerWidth <= 1100) return;
71 | if(num <= scrollTop) {
72 | this.#tocStickyDom.css('top', '');
73 | }
74 | else {
75 | this.#tocStickyDom.css('top', '70px');
76 | }
77 | });
78 |
79 | const toc = $('.aside-toc > .toc');
80 |
81 | if(!toc.html()) toc.html('暂无目录~');
82 |
83 | }
84 |
85 | /**
86 | * h5目录
87 | */
88 | #tocBotH5() {
89 | const adeToc = this.#tocStickyDom.find('.aside-toc');
90 |
91 | const sideBtn = $('.side-btn');
92 |
93 | const tocBtn = $(``);
94 |
95 | sideBtn.prepend(tocBtn);
96 |
97 | tocBtn.on('click', async () => {
98 | adeToc.toggle('fast');
99 |
100 | await useDelay(500);
101 |
102 | adeToc.css('display') === 'none' && adeToc.attr('style', '');
103 | });
104 | }
105 |
106 | /**
107 | * 版权
108 | */
109 | #copyRight() {
110 | const a = $('.copy-right a.permalink');
111 |
112 | a.attr('href', window.location.href);
113 |
114 | a.html(decodeURI(window.location.href));
115 | }
116 |
117 | }
118 |
--------------------------------------------------------------------------------
/src/js/page/archives.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/4/30
3 | * @author: 小红
4 | * @fileName: archives
5 | * @Description:归档
6 | */
7 | import {useChart} from '../core/_util';
8 | import App from '../core/App';
9 | import pagination from '../modules/Pagination';
10 | import * as echarts from 'echarts';
11 | import {LineChart} from 'echarts/charts';
12 | import {TitleComponent, TooltipComponent, GridComponent, DataZoomComponent} from 'echarts/components';
13 | import {CanvasRenderer} from 'echarts/renderers';
14 |
15 | // 注册所需的组件和渲染器
16 | echarts.use([
17 | LineChart,
18 | TitleComponent,
19 | TooltipComponent,
20 | GridComponent,
21 | DataZoomComponent,
22 | CanvasRenderer,
23 | ]);
24 |
25 | @App([pagination])
26 | class Archives {
27 | /***
28 | * @desc: 图表
29 | */
30 | run_chart() {
31 | const chartDom = document.querySelector('.archives .content > .chart');
32 |
33 | if(!chartDom) return;
34 |
35 | useChart( chartDom, () => {
36 | const data = [];
37 |
38 | for (let year of MainApp.data) {
39 | for (let months of year['months']) {
40 | data.push([
41 | `${year['year']}-${months['month']}`,
42 | months['posts'].length,
43 | ]);
44 | }
45 | }
46 |
47 | return {
48 | color: ['#425aef'],
49 | title: {
50 | text: '归档统计📃',
51 | x: 'center',
52 | },
53 | tooltip: {
54 | trigger: 'axis',
55 | axisPointer: {
56 | type: 'shadow',
57 | shadowStyle: {
58 | color: 'rgba(66,90,239,0.3)',
59 | },
60 | },
61 | },
62 | grid: {
63 | left: '5%', // 调整左边距
64 | right: '5%', // 调整右边距
65 | },
66 | xAxis: {
67 | type: 'category',
68 | boundaryGap: false,
69 | },
70 | yAxis: {
71 | name: '篇',
72 | axisLine: {
73 | show: true,
74 | },
75 | },
76 | series: [
77 | {
78 | zlevel: 0,
79 | z: 2,
80 | name: '文章篇数',
81 | type: 'line',
82 | smooth: true,
83 | symbol: 'none',
84 | lineStyle: {
85 | color: '#425aef',
86 | width: 1,
87 | },
88 | areaStyle: {
89 | color: {
90 | type: 'linear',
91 | x: 0,
92 | y: 0,
93 | x2: 0,
94 | y2: 1,
95 | colorStops: [
96 | {
97 | offset: 0,
98 | color: '#425aef', // 0% 处的颜色
99 | },
100 | {
101 | offset: 1,
102 | color: '#FFFFFF', // 100% 处的颜色
103 | },
104 | ],
105 | global: false, // 缺省为 false
106 | },
107 | },
108 | data, // 这里需要填入实际的数据
109 | },
110 | ],
111 | };
112 | });
113 | }
114 | }
--------------------------------------------------------------------------------
/src/js/page/categories.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/19
3 | * @author: 小红
4 | * @fileName: categories
5 | * @Description: 分类
6 | */
7 | import {useChart} from '../core/_util';
8 | import App from '../core/App';
9 | import * as echarts from 'echarts';
10 | import {PieChart} from 'echarts/charts';
11 | import {TitleComponent, TooltipComponent, GridComponent, DataZoomComponent} from 'echarts/components';
12 | import {CanvasRenderer} from 'echarts/renderers';
13 |
14 | // 注册所需的组件和渲染器
15 | echarts.use([
16 | PieChart,
17 | TitleComponent,
18 | TooltipComponent,
19 | GridComponent,
20 | DataZoomComponent,
21 | CanvasRenderer,
22 | ]);
23 |
24 | @App([])
25 | class Categories {
26 |
27 | /**
28 | * 图表
29 | */
30 | run_chart() {
31 |
32 | const data = [];
33 |
34 | for (let i = 0; i < MainApp.data.length; i++) {
35 |
36 | const item = MainApp.data[i];
37 |
38 | data.push({value: item.postCount, name: item.spec.displayName});
39 | }
40 |
41 | const chartDom = document.querySelector('section.content > .chart');
42 |
43 | useChart( chartDom, () => {
44 | return {
45 | backgroundColor: '',
46 | title: {
47 | text: '分类统计 📇',
48 | x: 'center',
49 | },
50 | tooltip: {
51 | formatter: '{a}
{b} : {c} ({d}%)',
52 | },
53 | grid: {
54 | containLabel: true,
55 | bottom: '0%',
56 | left: '5%',
57 | right: '5%',
58 | },
59 | legend: {
60 | icon: 'circle',
61 | y: '95%',
62 | bottom: 'center',
63 | },
64 | series: [
65 | {
66 | name: '分类统计',
67 | type: 'pie',
68 | radius: [40, 150],
69 | center: ['50%', '48%'],
70 | roseType: 'area',
71 | itemStyle: {
72 | borderRadius: 8,
73 | },
74 | label: {
75 | formatter: '{b} : {c} ({d}%)',
76 | },
77 | data,
78 | },
79 | ],
80 | };
81 |
82 | });
83 | }
84 | }
85 |
86 |
87 |
--------------------------------------------------------------------------------
/src/js/page/category.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/20
3 | * @author: 小红
4 | * @fileName: category
5 | * @Description: 分类详情
6 | */
7 |
8 | import App from '../core/App';
9 | import Pagination from '../modules/Pagination';
10 |
11 | @App([Pagination])
12 | class Category {
13 |
14 | }
--------------------------------------------------------------------------------
/src/js/page/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2023/10/8
3 | * @author: 小红
4 | * @fileName: index
5 | * @Description: 首页
6 | */
7 | import $ from 'jquery';
8 | import Typed from 'typed.js';
9 | import App from '../core/App';
10 | import Pagination from '../modules/Pagination';
11 |
12 | @App([Pagination])
13 | class Index {
14 | /**
15 | * 打字机
16 | */
17 | run_typewriter() {
18 | if(!document.querySelector('.above-subtitle--text')) return;
19 |
20 | const {typewriter_custom_text, enable_typewriter_random_text, typewriter_random_api, typewriter_api_value_format} = MainApp.conf;
21 |
22 | // 创建打字鸡
23 | const useTyped = (strings) => {
24 | new Typed('.above-subtitle--text', {
25 | strings,
26 | startDelay: 300,
27 | typeSpeed: 200,
28 | loop: true,
29 | backSpeed: 50,
30 | });
31 | };
32 |
33 |
34 | // 随机文字
35 | if(enable_typewriter_random_text) {
36 | $.ajax({
37 | url: typewriter_random_api,
38 | type: 'get',
39 | success: (response) => {
40 | // 文本情况
41 | if(typeof response === 'string') {
42 | return useTyped([response]);
43 | }
44 |
45 | if(typewriter_api_value_format) {
46 | return useTyped(['随机文案API返回数据格式为JSON,请配置取值格式!']);
47 | }
48 |
49 | //json 情况
50 | const text = typewriter_api_value_format.split('.').reduce((o, i) => o[i], response);
51 | useTyped([text]);
52 | },
53 | error: (err) => {
54 | useTyped(['获取随机文案失败,请检查API是否正常!']);
55 | },
56 | });
57 | return;
58 | }
59 |
60 | // 自定义文字
61 | let text = typewriter_custom_text.replaceAll('\n', '').split('|&|');
62 |
63 | if(!text || text.toString() === '') {
64 | text = ['请填写打字文案或者配置随机文案!'];
65 | }
66 |
67 | // 其他情况
68 | useTyped(text);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/js/page/links.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/5/23
3 | * @author: 小红
4 | * @fileName: Links
5 | * @Description: 链接
6 | */
7 |
8 | import App from '../core/App';
9 |
10 | @App([])
11 | class Links {
12 |
13 | }
--------------------------------------------------------------------------------
/src/js/page/moments.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/21
3 | * @author: moments
4 | * @fileName: single
5 | * @Description: 瞬间
6 | */
7 |
8 | import App from '../core/App';
9 | import AmplifyImg from '../modules/AmplifyImg';
10 |
11 |
12 | @App([AmplifyImg])
13 | class Moments {
14 |
15 |
16 | }
--------------------------------------------------------------------------------
/src/js/page/photos.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/21
3 | * @author: 小红
4 | * @fileName: photos
5 | * @Description: 图库
6 | */
7 |
8 | import {getQueryParams} from '../core/_util';
9 | import AmplifyImg from '../modules/AmplifyImg';
10 | import App from '../core/App';
11 |
12 | @App([AmplifyImg])
13 | class Photos {
14 | run_active_group() {
15 | const params = getQueryParams();
16 |
17 | const items = document.querySelectorAll('.groups-item');
18 |
19 | for (let i = 0; i < items.length; i++) {
20 | const item = items[i];
21 |
22 | if(window.location.search === '') {
23 | items[0].classList.add('active');
24 | break;
25 | }
26 |
27 | if(item.dataset.group === params.group) {
28 | item.classList.add('active');
29 | break;
30 | }
31 | }
32 |
33 | }
34 | }
--------------------------------------------------------------------------------
/src/js/page/post.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/3/17
3 | * @author: 小红
4 | * @fileName: post
5 | * @Description: 文章
6 | */
7 |
8 | import App from '../core/App';
9 | import codeBlock from '../modules/CodeBlock';
10 | import Render from '../modules/Render';
11 | import AmplifyImg from '../modules/AmplifyImg';
12 |
13 | @App([Render, codeBlock, AmplifyImg])
14 | class Post {
15 | run_meta() {
16 | const render = document.querySelector('article.render');
17 | const wordCount = document.querySelector('.wordCount > span');
18 | const clock = document.querySelector('.clock > span');
19 |
20 | wordCount.textContent = `字数总计 ${render.textContent.length} 字`;
21 | clock.textContent = `阅读时间 ${Math.ceil(render.textContent.length / 500)} 分钟`;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/js/page/single.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/21
3 | * @author: 小红
4 | * @fileName: single
5 | * @Description: 自定义页面
6 | */
7 |
8 | import App from '../core/App';
9 | import codeBlock from '../modules/CodeBlock';
10 | import Render from '../modules/Render';
11 | import AmplifyImg from '../modules/AmplifyImg';
12 |
13 | @App([Render, codeBlock, AmplifyImg])
14 | class Single {
15 |
16 | }
--------------------------------------------------------------------------------
/src/js/page/tag.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/5/23
3 | * @author: 小红
4 | * @fileName: tag
5 | * @Description: 标签
6 | */
7 |
8 | import App from '../core/App';
9 | import Pagination from '../modules/Pagination';
10 |
11 | @App([Pagination])
12 | class Tag {
13 |
14 | }
--------------------------------------------------------------------------------
/src/plugins/cursor/simple.min.css:
--------------------------------------------------------------------------------
1 | body {--cursor-default: url(/themes/theme-butterfly/assets/plugins/cursor/simple/default.cur), auto;--cursor-pointer: url(/themes/theme-butterfly/assets/plugins/cursor/simple/pointer.cur), auto;cursor: var(--cursor-default);a, button {cursor: var(--cursor-pointer);}}
--------------------------------------------------------------------------------
/src/plugins/cursor/simple/default.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/cursor/simple/default.cur
--------------------------------------------------------------------------------
/src/plugins/cursor/simple/pointer.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/cursor/simple/pointer.cur
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-duotone-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-duotone-900.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-duotone-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-duotone-900.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-light-300.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-light-300.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-light-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-light-300.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-thin-100.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-thin-100.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-thin-100.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-thin-100.woff2
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-v4compatibility.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-v4compatibility.ttf
--------------------------------------------------------------------------------
/src/plugins/fontawesome/webfonts/fa-v4compatibility.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhjddcn/halo-theme-butterfly/de9046b47a8e04c3db85170e356dde9e68f26d77/src/plugins/fontawesome/webfonts/fa-v4compatibility.woff2
--------------------------------------------------------------------------------
/src/plugins/loading/circle.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/8/6
3 | * @author: 小红
4 | * @fileName: Circle
5 | * @Description: 加载loading
6 | */
7 |
8 | class Circle {
9 | cssText = `
10 | .loading-container {
11 | display: flex;
12 | justify-content: center;
13 | align-items: center;
14 | width:100vw;
15 | height:100vh;
16 | }
17 | .loading-body {
18 | position: relative;
19 | border: 4px solid rgba(0, 0, 0, .3);
20 | border-left-color: transparent;
21 | border-radius: 50%;
22 | width: 36px;
23 | height: 36px;
24 | animation: spin89345 1s linear infinite;
25 | }
26 |
27 | html[data-color-scheme="dark"] .loading-body {
28 | border: 4px solid rgba(118 ,104 ,104 , 0.3);
29 | border-left-color: rgb(225,225,225);
30 | }
31 |
32 | @keyframes spin89345 {
33 | 0% {
34 | transform: rotate(0deg);
35 | }
36 |
37 | 100% {
38 | transform: rotate(360deg);
39 | }
40 | }
41 | `;
42 | style = document.createElement('style');
43 | container = document.createElement('div');
44 |
45 | constructor() {
46 | this.style.textContent = this.cssText;
47 | document.head.appendChild(this.style);
48 | }
49 |
50 | start() {
51 | this.container.className = 'loading-container';
52 | this.container.innerHTML = ``;
53 | document.body.appendChild(this.container);
54 | }
55 |
56 | destroy() {
57 | document.body.classList.remove('loading');
58 | this.container.remove();
59 | this.style.remove();
60 | }
61 | }
62 |
63 | const Loading = new Circle();
64 |
65 | Loading.start();
66 |
67 | window.addEventListener('load', () => Loading.destroy());
68 |
--------------------------------------------------------------------------------
/src/plugins/loading/cross_line.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2023/1/20
3 | * @author: 小红
4 | * @fileName: cross_line
5 | * @Description: 彩色旋转加载loading
6 | */
7 |
8 | class CrossLine {
9 | cssText = `
10 | .loading-container {
11 | display: flex;
12 | justify-content: center;
13 | align-items: center;
14 | width:100vw;
15 | height:100vh;
16 | }
17 | .loading-body {
18 | position: relative;
19 | width: 2.5em;
20 | height: 2.5em;
21 | transform: rotate(165deg);
22 | }
23 |
24 | .loading-body:before, .loading-body:after {
25 | content: "";
26 | position: absolute;
27 | top: 50%;
28 | left: 50%;
29 | display: block;
30 | width: 0.5em;
31 | height: 0.5em;
32 | border-radius: 0.25em;
33 | transform: translate(-50%, -50%);
34 | }
35 |
36 | .loading-body:before {
37 | animation: before8 2s infinite;
38 | }
39 |
40 | .loading-body:after {
41 | animation: after6 2s infinite;
42 | }
43 |
44 | @keyframes before8 {
45 | 0% {
46 | width: 0.5em;
47 | box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
48 | }
49 |
50 | 35% {
51 | width: 2.5em;
52 | box-shadow: 0 -0.5em rgba(225, 20, 98, 0.75), 0 0.5em rgba(111, 202, 220, 0.75);
53 | }
54 |
55 | 70% {
56 | width: 0.5em;
57 | box-shadow: -1em -0.5em rgba(225, 20, 98, 0.75), 1em 0.5em rgba(111, 202, 220, 0.75);
58 | }
59 |
60 | 100% {
61 | box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
62 | }
63 | }
64 |
65 | @keyframes after6 {
66 | 0% {
67 | height: 0.5em;
68 | box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
69 | }
70 |
71 | 35% {
72 | height: 2.5em;
73 | box-shadow: 0.5em 0 rgba(61, 184, 143, 0.75), -0.5em 0 rgba(233, 169, 32, 0.75);
74 | }
75 |
76 | 70% {
77 | height: 0.5em;
78 | box-shadow: 0.5em -1em rgba(61, 184, 143, 0.75), -0.5em 1em rgba(233, 169, 32, 0.75);
79 | }
80 |
81 | 100% {
82 | box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
83 | }
84 | }`;
85 | style = document.createElement('style');
86 | container = document.createElement('div');
87 |
88 | constructor() {
89 | this.style.textContent = this.cssText;
90 | document.head.appendChild(this.style);
91 | }
92 |
93 | start() {
94 | this.container.className = 'loading-container';
95 | this.container.innerHTML = ``;
96 | document.body.appendChild(this.container);
97 | }
98 |
99 | destroy() {
100 | document.body.classList.remove('loading');
101 | this.container.remove();
102 | this.style.remove();
103 | }
104 | }
105 |
106 | const Loading = new CrossLine();
107 |
108 | Loading.start();
109 |
110 | window.addEventListener('load', () => Loading.destroy());
111 |
112 |
--------------------------------------------------------------------------------
/src/plugins/loading/dot.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/7/18
3 | * @author: 小红
4 | * @fileName: dot
5 | * @Description:小圆点
6 | */
7 |
8 | class Dot {
9 | cssText = `
10 | .loading-container {
11 | display: flex;
12 | justify-content: center;
13 | align-items: center;
14 | width:100vw;
15 | height:100vh;
16 | }
17 | .dot {
18 | animation: rotate 1s infinite;
19 | height: 50px;
20 | width: 50px;
21 | }
22 |
23 | .dot:before,
24 | .dot:after {
25 | border-radius: 50%;
26 | content: '';
27 | display: block;
28 | height: 20px;
29 | width: 20px;
30 | }
31 |
32 | .dot:before {
33 | animation: ball1 1s infinite;
34 | background-color: #cb2025;
35 | box-shadow: 30px 0 0 #f8b334;
36 | margin-bottom: 10px;
37 | }
38 |
39 | .dot:after {
40 | animation: ball2 1s infinite;
41 | background-color: #00a096;
42 | box-shadow: 30px 0 0 #97bf0d;
43 | }
44 |
45 | @keyframes rotate {
46 | 0% {
47 | -webkit-transform: rotate(0deg) scale(0.8);
48 | -moz-transform: rotate(0deg) scale(0.8);
49 | }
50 |
51 | 50% {
52 | -webkit-transform: rotate(360deg) scale(1.2);
53 | -moz-transform: rotate(360deg) scale(1.2);
54 | }
55 |
56 | 100% {
57 | -webkit-transform: rotate(720deg) scale(0.8);
58 | -moz-transform: rotate(720deg) scale(0.8);
59 | }
60 | }
61 |
62 | @keyframes ball1 {
63 | 0% {
64 | box-shadow: 30px 0 0 #f8b334;
65 | }
66 |
67 | 50% {
68 | box-shadow: 0 0 0 #f8b334;
69 | margin-bottom: 0;
70 | -webkit-transform: translate(15px,15px);
71 | -moz-transform: translate(15px, 15px);
72 | }
73 |
74 | 100% {
75 | box-shadow: 30px 0 0 #f8b334;
76 | margin-bottom: 10px;
77 | }
78 | }
79 |
80 | @keyframes ball2 {
81 | 0% {
82 | box-shadow: 30px 0 0 #97bf0d;
83 | }
84 |
85 | 50% {
86 | box-shadow: 0 0 0 #97bf0d;
87 | margin-top: -20px;
88 | -webkit-transform: translate(15px,15px);
89 | -moz-transform: translate(15px, 15px);
90 | }
91 |
92 | 100% {
93 | box-shadow: 30px 0 0 #97bf0d;
94 | margin-top: 0;
95 | }
96 | }
97 | `;
98 | style = document.createElement('style');
99 | container = document.createElement('div');
100 |
101 | constructor() {
102 | this.style.textContent = this.cssText;
103 | document.head.appendChild(this.style);
104 | }
105 |
106 | start() {
107 | this.container.className = 'loading-container';
108 | this.container.innerHTML = ``;
109 | document.body.appendChild(this.container);
110 | }
111 |
112 | destroy() {
113 | this.container.remove();
114 | this.style.remove();
115 | document.body.classList.remove('loading');
116 | }
117 | }
118 |
119 | const Loading = new Dot();
120 |
121 | Loading.start();
122 |
123 | window.addEventListener('load', () => Loading.destroy());
124 |
125 |
126 |
--------------------------------------------------------------------------------
/src/plugins/loading/hourglass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/8/6
3 | * @author: 小红
4 | * @fileName: hourglass
5 | * @Description: 沙漏加载loading
6 | */
7 |
8 | class Hourglass {
9 | cssText = `
10 | .loading-container {
11 | display: flex;
12 | justify-content: center;
13 | align-items: center;
14 | width:100vw;
15 | height:100vh;
16 | }
17 |
18 | .loading-body {
19 | position: relative;
20 | --c1: #673b14;
21 | --c2: #f8b13b;
22 | width: 40px;
23 | height: 80px;
24 | border-top: 4px solid var(--c1);
25 | border-bottom: 4px solid var(--c1);
26 | background: linear-gradient(90deg, var(--c1) 2px, var(--c2) 0 5px,var(--c1) 0) 50%/7px 8px no-repeat;
27 | display: grid;
28 | overflow: hidden;
29 | animation: l5-0 2s infinite linear;
30 | }
31 |
32 | .loading-body::before,
33 | .loading-body::after {
34 | content: "";
35 | grid-area: 1/1;
36 | width: 75%;
37 | height: calc(50% - 4px);
38 | margin: 0 auto;
39 | border: 2px solid var(--c1);
40 | border-top: 0;
41 | box-sizing: content-box;
42 | border-radius: 0 0 40% 40%;
43 | -webkit-mask: linear-gradient(#000 0 0) bottom/4px 2px no-repeat,
44 | linear-gradient(#000 0 0);
45 | -webkit-mask-composite: destination-out;
46 | mask-composite: exclude;
47 | background: linear-gradient(var(--d,0deg),var(--c2) 50%,#0000 0) bottom /100% 205%,
48 | linear-gradient(var(--c2) 0 0) center/0 100%;
49 | background-repeat: no-repeat;
50 | animation: inherit;
51 | animation-name: l5-1;
52 | }
53 |
54 | .loading-body::after {
55 | transform-origin: 50% calc(100% + 2px);
56 | transform: scaleY(-1);
57 | --s: 3px;
58 | --d: 180deg;
59 | }
60 |
61 | @keyframes l5-0 {
62 | 80% {
63 | transform: rotate(0)
64 | }
65 |
66 | 100% {
67 | transform: rotate(0.5turn)
68 | }
69 | }
70 |
71 | @keyframes l5-1 {
72 | 10%,70% {
73 | background-size: 100% 205%,var(--s,0) 100%
74 | }
75 |
76 | 70%,100% {
77 | background-position: top,center
78 | }
79 | }
80 | `;
81 | style = document.createElement('style');
82 | container = document.createElement('div');
83 |
84 | constructor() {
85 | this.style.textContent = this.cssText;
86 | document.head.appendChild(this.style);
87 | }
88 |
89 | start() {
90 | this.container.className = 'loading-container';
91 | this.container.innerHTML = ``;
92 | document.body.appendChild(this.container);
93 | }
94 |
95 | destroy() {
96 | document.body.classList.remove('loading');
97 | this.container.remove();
98 | this.style.remove();
99 | }
100 | }
101 |
102 | const Loading = new Hourglass();
103 |
104 | Loading.start();
105 |
106 | window.addEventListener('load', () => Loading.destroy());
107 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-a11y-dark.css:
--------------------------------------------------------------------------------
1 | /**
2 | * a11y-dark theme for JavaScript, CSS, and HTML
3 | * Based on the okaidia theme: https://github.com/PrismJS/prism/blob/gh-pages/themes/prism-okaidia.css
4 | * @author ericwbailey
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #f8f8f2;
10 | background: none;
11 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
12 | text-align: left;
13 | white-space: pre;
14 | word-spacing: normal;
15 | word-break: normal;
16 | word-wrap: normal;
17 | line-height: 1.5;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: 0.5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #2b2b2b;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: 0.1em;
45 | border-radius: 0.3em;
46 | white-space: normal;
47 | }
48 |
49 | .token.comment,
50 | .token.prolog,
51 | .token.doctype,
52 | .token.cdata {
53 | color: #d4d0ab;
54 | }
55 |
56 | .token.punctuation {
57 | color: #fefefe;
58 | }
59 |
60 | .token.property,
61 | .token.tag,
62 | .token.constant,
63 | .token.symbol,
64 | .token.deleted {
65 | color: #ffa07a;
66 | }
67 |
68 | .token.boolean,
69 | .token.number {
70 | color: #00e0e0;
71 | }
72 |
73 | .token.selector,
74 | .token.attr-name,
75 | .token.string,
76 | .token.char,
77 | .token.builtin,
78 | .token.inserted {
79 | color: #abe338;
80 | }
81 |
82 | .token.operator,
83 | .token.entity,
84 | .token.url,
85 | .language-css .token.string,
86 | .style .token.string,
87 | .token.variable {
88 | color: #00e0e0;
89 | }
90 |
91 | .token.atrule,
92 | .token.attr-value,
93 | .token.function {
94 | color: #ffd700;
95 | }
96 |
97 | .token.keyword {
98 | color: #00e0e0;
99 | }
100 |
101 | .token.regex,
102 | .token.important {
103 | color: #ffd700;
104 | }
105 |
106 | .token.important,
107 | .token.bold {
108 | font-weight: bold;
109 | }
110 |
111 | .token.italic {
112 | font-style: italic;
113 | }
114 |
115 | .token.entity {
116 | cursor: help;
117 | }
118 |
119 | @media screen and (-ms-high-contrast: active) {
120 | code[class*="language-"],
121 | pre[class*="language-"] {
122 | color: windowText;
123 | background: window;
124 | }
125 |
126 | :not(pre) > code[class*="language-"],
127 | pre[class*="language-"] {
128 | background: window;
129 | }
130 |
131 | .token.important {
132 | background: highlight;
133 | color: window;
134 | font-weight: normal;
135 | }
136 |
137 | .token.atrule,
138 | .token.attr-value,
139 | .token.function,
140 | .token.keyword,
141 | .token.operator,
142 | .token.selector {
143 | font-weight: bold;
144 | }
145 |
146 | .token.attr-value,
147 | .token.comment,
148 | .token.doctype,
149 | .token.function,
150 | .token.keyword,
151 | .token.operator,
152 | .token.property,
153 | .token.string {
154 | color: highlight;
155 | }
156 |
157 | .token.attr-value,
158 | .token.url {
159 | font-weight: normal;
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-atom-dark.css:
--------------------------------------------------------------------------------
1 | /**
2 | * atom-dark theme for `prism.js`
3 | * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
4 | * @author Joe Gibson (@gibsjose)
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #c5c8c6;
10 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
11 | font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
12 | direction: ltr;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | line-height: 1.5;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: .5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #1d1f21;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | }
47 |
48 | .token.comment,
49 | .token.prolog,
50 | .token.doctype,
51 | .token.cdata {
52 | color: #7C7C7C;
53 | }
54 |
55 | .token.punctuation {
56 | color: #c5c8c6;
57 | }
58 |
59 | .namespace {
60 | opacity: .7;
61 | }
62 |
63 | .token.property,
64 | .token.keyword,
65 | .token.tag {
66 | color: #96CBFE;
67 | }
68 |
69 | .token.class-name {
70 | color: #FFFFB6;
71 | text-decoration: underline;
72 | }
73 |
74 | .token.boolean,
75 | .token.constant {
76 | color: #99CC99;
77 | }
78 |
79 | .token.symbol,
80 | .token.deleted {
81 | color: #f92672;
82 | }
83 |
84 | .token.number {
85 | color: #FF73FD;
86 | }
87 |
88 | .token.selector,
89 | .token.attr-name,
90 | .token.string,
91 | .token.char,
92 | .token.builtin,
93 | .token.inserted {
94 | color: #A8FF60;
95 | }
96 |
97 | .token.variable {
98 | color: #C6C5FE;
99 | }
100 |
101 | .token.operator {
102 | color: #EDEDED;
103 | }
104 |
105 | .token.entity {
106 | color: #FFFFB6;
107 | cursor: help;
108 | }
109 |
110 | .token.url {
111 | color: #96CBFE;
112 | }
113 |
114 | .language-css .token.string,
115 | .style .token.string {
116 | color: #87C38A;
117 | }
118 |
119 | .token.atrule,
120 | .token.attr-value {
121 | color: #F9EE98;
122 | }
123 |
124 | .token.function {
125 | color: #DAD085;
126 | }
127 |
128 | .token.regex {
129 | color: #E9C062;
130 | }
131 |
132 | .token.important {
133 | color: #fd971f;
134 | }
135 |
136 | .token.important,
137 | .token.bold {
138 | font-weight: bold;
139 | }
140 |
141 | .token.italic {
142 | font-style: italic;
143 | }
144 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-base16-ateliersulphurpool.light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Name: Base16 Atelier Sulphurpool Light
4 | Author: Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool)
5 |
6 | Prism template by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/prism/)
7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
8 |
9 | */
10 | code[class*="language-"],
11 | pre[class*="language-"] {
12 | font-family: Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace;
13 | font-size: 14px;
14 | line-height: 1.375;
15 | direction: ltr;
16 | text-align: left;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | background: #f5f7ff;
28 | color: #5e6687;
29 | }
30 |
31 | pre > code[class*="language-"] {
32 | font-size: 1em;
33 | }
34 |
35 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
36 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
37 | text-shadow: none;
38 | background: #dfe2f1;
39 | }
40 |
41 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
42 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
43 | text-shadow: none;
44 | background: #dfe2f1;
45 | }
46 |
47 | /* Code blocks */
48 | pre[class*="language-"] {
49 | padding: 1em;
50 | margin: .5em 0;
51 | overflow: auto;
52 | }
53 |
54 | /* Inline code */
55 | :not(pre) > code[class*="language-"] {
56 | padding: .1em;
57 | border-radius: .3em;
58 | }
59 |
60 | .token.comment,
61 | .token.prolog,
62 | .token.doctype,
63 | .token.cdata {
64 | color: #898ea4;
65 | }
66 |
67 | .token.punctuation {
68 | color: #5e6687;
69 | }
70 |
71 | .token.namespace {
72 | opacity: .7;
73 | }
74 |
75 | .token.operator,
76 | .token.boolean,
77 | .token.number {
78 | color: #c76b29;
79 | }
80 |
81 | .token.property {
82 | color: #c08b30;
83 | }
84 |
85 | .token.tag {
86 | color: #3d8fd1;
87 | }
88 |
89 | .token.string {
90 | color: #22a2c9;
91 | }
92 |
93 | .token.selector {
94 | color: #6679cc;
95 | }
96 |
97 | .token.attr-name {
98 | color: #c76b29;
99 | }
100 |
101 | .token.entity,
102 | .token.url,
103 | .language-css .token.string,
104 | .style .token.string {
105 | color: #22a2c9;
106 | }
107 |
108 | .token.attr-value,
109 | .token.keyword,
110 | .token.control,
111 | .token.directive,
112 | .token.unit {
113 | color: #ac9739;
114 | }
115 |
116 | .token.statement,
117 | .token.regex,
118 | .token.atrule {
119 | color: #22a2c9;
120 | }
121 |
122 | .token.placeholder,
123 | .token.variable {
124 | color: #3d8fd1;
125 | }
126 |
127 | .token.deleted {
128 | text-decoration: line-through;
129 | }
130 |
131 | .token.inserted {
132 | border-bottom: 1px dotted #202746;
133 | text-decoration: none;
134 | }
135 |
136 | .token.italic {
137 | font-style: italic;
138 | }
139 |
140 | .token.important,
141 | .token.bold {
142 | font-weight: bold;
143 | }
144 |
145 | .token.important {
146 | color: #c94922;
147 | }
148 |
149 | .token.entity {
150 | cursor: help;
151 | }
152 |
153 | pre > code.highlight {
154 | outline: 0.4em solid #c94922;
155 | outline-offset: .4em;
156 | }
157 |
158 | /* overrides color-values for the Line Numbers plugin
159 | * http://prismjs.com/plugins/line-numbers/
160 | */
161 | .line-numbers .line-numbers-rows {
162 | border-right-color: #dfe2f1;
163 | }
164 |
165 | .line-numbers-rows > span:before {
166 | color: #979db4;
167 | }
168 |
169 | /* overrides color-values for the Line Highlight plugin
170 | * http://prismjs.com/plugins/line-highlight/
171 | */
172 | .line-highlight {
173 | background: rgba(107, 115, 148, 0.2);
174 | background: -webkit-linear-gradient(left, rgba(107, 115, 148, 0.2) 70%, rgba(107, 115, 148, 0));
175 | background: linear-gradient(to right, rgba(107, 115, 148, 0.2) 70%, rgba(107, 115, 148, 0));
176 | }
177 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-cb.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Based on Plugin: Syntax Highlighter CB
3 | * Plugin URI: http://wp.tutsplus.com/tutorials/plugins/adding-a-syntax-highlighter-shortcode-using-prism-js
4 | * Description: Highlight your code snippets with an easy to use shortcode based on Lea Verou's Prism.js.
5 | * Version: 1.0.0
6 | * Author: c.bavota
7 | * Author URI: http://bavotasan.comhttp://wp.tutsplus.com/tutorials/plugins/adding-a-syntax-highlighter-shortcode-using-prism-js/ */
8 | /* http://cbavota.bitbucket.org/syntax-highlighter/ */
9 |
10 | /* ===== ===== */
11 | code[class*="language-"],
12 | pre[class*="language-"] {
13 | color: #fff;
14 | text-shadow: 0 1px 1px #000;
15 | font-family: Menlo, Monaco, "Courier New", monospace;
16 | direction: ltr;
17 | text-align: left;
18 | word-spacing: normal;
19 | white-space: pre;
20 | word-wrap: normal;
21 | line-height: 1.4;
22 | background: none;
23 | border: 0;
24 |
25 | -moz-tab-size: 4;
26 | -o-tab-size: 4;
27 | tab-size: 4;
28 |
29 | -webkit-hyphens: none;
30 | -moz-hyphens: none;
31 | -ms-hyphens: none;
32 | hyphens: none;
33 | }
34 |
35 | pre[class*="language-"] code {
36 | float: left;
37 | padding: 0 15px 0 0;
38 | }
39 |
40 | pre[class*="language-"],
41 | :not(pre) > code[class*="language-"] {
42 | background: #222;
43 | }
44 |
45 | /* Code blocks */
46 | pre[class*="language-"] {
47 | padding: 15px;
48 | margin: 1em 0;
49 | overflow: auto;
50 | -moz-border-radius: 8px;
51 | -webkit-border-radius: 8px;
52 | border-radius: 8px;
53 | }
54 |
55 | /* Inline code */
56 | :not(pre) > code[class*="language-"] {
57 | padding: 5px 10px;
58 | line-height: 1;
59 | -moz-border-radius: 3px;
60 | -webkit-border-radius: 3px;
61 | border-radius: 3px;
62 | }
63 |
64 | .token.comment,
65 | .token.prolog,
66 | .token.doctype,
67 | .token.cdata {
68 | color: #797979;
69 | }
70 |
71 | .token.selector,
72 | .token.operator,
73 | .token.punctuation {
74 | color: #fff;
75 | }
76 |
77 | .token.namespace {
78 | opacity: .7;
79 | }
80 |
81 | .token.tag,
82 | .token.boolean {
83 | color: #ffd893;
84 | }
85 |
86 | .token.atrule,
87 | .token.attr-value,
88 | .token.hex,
89 | .token.string {
90 | color: #B0C975;
91 | }
92 |
93 | .token.property,
94 | .token.entity,
95 | .token.url,
96 | .token.attr-name,
97 | .token.keyword {
98 | color: #c27628;
99 | }
100 |
101 | .token.regex {
102 | color: #9B71C6;
103 | }
104 |
105 | .token.entity {
106 | cursor: help;
107 | }
108 |
109 | .token.function,
110 | .token.constant {
111 | color: #e5a638;
112 | }
113 |
114 | .token.variable {
115 | color: #fdfba8;
116 | }
117 |
118 | .token.number {
119 | color: #8799B0;
120 | }
121 |
122 | .token.important,
123 | .token.deliminator {
124 | color: #E45734;
125 | }
126 |
127 | /* Line highlight plugin */
128 | pre[data-line] {
129 | position: relative;
130 | padding: 1em 0 1em 3em;
131 | }
132 |
133 | .line-highlight {
134 | position: absolute;
135 | left: 0;
136 | right: 0;
137 | margin-top: 1em; /* Same as .prism's padding-top */
138 | background: rgba(255, 255, 255, .2);
139 | pointer-events: none;
140 | line-height: inherit;
141 | white-space: pre;
142 | }
143 |
144 | .line-highlight:before,
145 | .line-highlight[data-end]:after {
146 | content: attr(data-start);
147 | position: absolute;
148 | top: .3em;
149 | left: .6em;
150 | min-width: 1em;
151 | padding: 0 .5em;
152 | background-color: rgba(255, 255, 255, .3);
153 | color: #fff;
154 | font: bold 65%/1.5 sans-serif;
155 | text-align: center;
156 | -moz-border-radius: 8px;
157 | -webkit-border-radius: 8px;
158 | border-radius: 8px;
159 | text-shadow: none;
160 | }
161 |
162 | .line-highlight[data-end]:after {
163 | content: attr(data-end);
164 | top: auto;
165 | bottom: .4em;
166 | }
167 |
168 | /* for line numbers */
169 | .line-numbers-rows {
170 | margin: 0;
171 | }
172 |
173 | .line-numbers-rows span {
174 | padding-right: 10px;
175 | border-right: 3px #d9d336 solid;
176 | }
177 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-coy-without-shadows.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Coy without shadows
3 | * Based on Tim Shedor's Coy theme for prism.js
4 | * Author: RunDevelopment
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: black;
10 | background: none;
11 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
12 | font-size: 1em;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | word-wrap: normal;
18 | line-height: 1.5;
19 |
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 |
24 | -webkit-hyphens: none;
25 | -moz-hyphens: none;
26 | -ms-hyphens: none;
27 | hyphens: none;
28 | }
29 |
30 | /* Code blocks */
31 | pre[class*="language-"] {
32 | position: relative;
33 | border-left: 10px solid #358ccb;
34 | box-shadow: -1px 0 0 0 #358ccb, 0 0 0 1px #dfdfdf;
35 | background-color: #fdfdfd;
36 | background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
37 | background-size: 3em 3em;
38 | background-origin: content-box;
39 | background-attachment: local;
40 | margin: .5em 0;
41 | padding: 0 1em;
42 | }
43 |
44 | pre[class*="language-"] > code {
45 | display: block;
46 | }
47 |
48 | /* Inline code */
49 | :not(pre) > code[class*="language-"] {
50 | position: relative;
51 | padding: .2em;
52 | border-radius: 0.3em;
53 | color: #c92c2c;
54 | border: 1px solid rgba(0, 0, 0, 0.1);
55 | display: inline;
56 | white-space: normal;
57 | background-color: #fdfdfd;
58 | -webkit-box-sizing: border-box;
59 | -moz-box-sizing: border-box;
60 | box-sizing: border-box;
61 | }
62 |
63 | .token.comment,
64 | .token.block-comment,
65 | .token.prolog,
66 | .token.doctype,
67 | .token.cdata {
68 | color: #7D8B99;
69 | }
70 |
71 | .token.punctuation {
72 | color: #5F6364;
73 | }
74 |
75 | .token.property,
76 | .token.tag,
77 | .token.boolean,
78 | .token.number,
79 | .token.function-name,
80 | .token.constant,
81 | .token.symbol,
82 | .token.deleted {
83 | color: #c92c2c;
84 | }
85 |
86 | .token.selector,
87 | .token.attr-name,
88 | .token.string,
89 | .token.char,
90 | .token.function,
91 | .token.builtin,
92 | .token.inserted {
93 | color: #2f9c0a;
94 | }
95 |
96 | .token.operator,
97 | .token.entity,
98 | .token.url,
99 | .token.variable {
100 | color: #a67f59;
101 | background: rgba(255, 255, 255, 0.5);
102 | }
103 |
104 | .token.atrule,
105 | .token.attr-value,
106 | .token.keyword,
107 | .token.class-name {
108 | color: #1990b8;
109 | }
110 |
111 | .token.regex,
112 | .token.important {
113 | color: #e90;
114 | }
115 |
116 | .language-css .token.string,
117 | .style .token.string {
118 | color: #a67f59;
119 | background: rgba(255, 255, 255, 0.5);
120 | }
121 |
122 | .token.important {
123 | font-weight: normal;
124 | }
125 |
126 | .token.bold {
127 | font-weight: bold;
128 | }
129 |
130 | .token.italic {
131 | font-style: italic;
132 | }
133 |
134 | .token.entity {
135 | cursor: help;
136 | }
137 |
138 | .token.namespace {
139 | opacity: .7;
140 | }
141 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-darcula.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Darcula theme
3 | *
4 | * Adapted from a theme based on:
5 | * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula)
6 | *
7 | * @author Alexandre Paradis
8 | * @version 1.0
9 | */
10 |
11 | code[class*="language-"],
12 | pre[class*="language-"] {
13 | color: #a9b7c6;
14 | font-family: Consolas, Monaco, 'Andale Mono', monospace;
15 | direction: ltr;
16 | text-align: left;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | line-height: 1.5;
21 |
22 | -moz-tab-size: 4;
23 | -o-tab-size: 4;
24 | tab-size: 4;
25 |
26 | -webkit-hyphens: none;
27 | -moz-hyphens: none;
28 | -ms-hyphens: none;
29 | hyphens: none;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
34 | color: inherit;
35 | background: rgba(33, 66, 131, .85);
36 | }
37 |
38 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
39 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
40 | color: inherit;
41 | background: rgba(33, 66, 131, .85);
42 | }
43 |
44 | /* Code blocks */
45 | pre[class*="language-"] {
46 | padding: 1em;
47 | margin: .5em 0;
48 | overflow: auto;
49 | }
50 |
51 | :not(pre) > code[class*="language-"],
52 | pre[class*="language-"] {
53 | background: #2b2b2b;
54 | }
55 |
56 | /* Inline code */
57 | :not(pre) > code[class*="language-"] {
58 | padding: .1em;
59 | border-radius: .3em;
60 | }
61 |
62 | .token.comment,
63 | .token.prolog,
64 | .token.cdata {
65 | color: #808080;
66 | }
67 |
68 | .token.delimiter,
69 | .token.boolean,
70 | .token.keyword,
71 | .token.selector,
72 | .token.important,
73 | .token.atrule {
74 | color: #cc7832;
75 | }
76 |
77 | .token.operator,
78 | .token.punctuation,
79 | .token.attr-name {
80 | color: #a9b7c6;
81 | }
82 |
83 | .token.tag,
84 | .token.tag .punctuation,
85 | .token.doctype,
86 | .token.builtin {
87 | color: #e8bf6a;
88 | }
89 |
90 | .token.entity,
91 | .token.number,
92 | .token.symbol {
93 | color: #6897bb;
94 | }
95 |
96 | .token.property,
97 | .token.constant,
98 | .token.variable {
99 | color: #9876aa;
100 | }
101 |
102 | .token.string,
103 | .token.char {
104 | color: #6a8759;
105 | }
106 |
107 | .token.attr-value,
108 | .token.attr-value .punctuation {
109 | color: #a5c261;
110 | }
111 |
112 | .token.attr-value .punctuation:first-child {
113 | color: #a9b7c6;
114 | }
115 |
116 | .token.url {
117 | color: #287bde;
118 | text-decoration: underline;
119 | }
120 |
121 | .token.function {
122 | color: #ffc66d;
123 | }
124 |
125 | .token.regex {
126 | background: #364135;
127 | }
128 |
129 | .token.bold {
130 | font-weight: bold;
131 | }
132 |
133 | .token.italic {
134 | font-style: italic;
135 | }
136 |
137 | .token.inserted {
138 | background: #294436;
139 | }
140 |
141 | .token.deleted {
142 | background: #484a4a;
143 | }
144 |
145 | code.language-css .token.property,
146 | code.language-css .token.property + .token.punctuation {
147 | color: #a9b7c6;
148 | }
149 |
150 | code.language-css .token.id {
151 | color: #ffc66d;
152 | }
153 |
154 | code.language-css .token.selector > .token.class,
155 | code.language-css .token.selector > .token.attribute,
156 | code.language-css .token.selector > .token.pseudo-class,
157 | code.language-css .token.selector > .token.pseudo-element {
158 | color: #ffc66d;
159 | }
160 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-dracula.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Dracula Theme originally by Zeno Rocha [@zenorocha]
3 | * https://draculatheme.com/
4 | *
5 | * Ported for PrismJS by Albert Vallverdu [@byverdu]
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: #f8f8f2;
11 | background: none;
12 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
13 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | word-wrap: normal;
19 | line-height: 1.5;
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: .5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #282a36;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | white-space: normal;
47 | }
48 |
49 | .token.comment,
50 | .token.prolog,
51 | .token.doctype,
52 | .token.cdata {
53 | color: #6272a4;
54 | }
55 |
56 | .token.punctuation {
57 | color: #f8f8f2;
58 | }
59 |
60 | .namespace {
61 | opacity: .7;
62 | }
63 |
64 | .token.property,
65 | .token.tag,
66 | .token.constant,
67 | .token.symbol,
68 | .token.deleted {
69 | color: #ff79c6;
70 | }
71 |
72 | .token.boolean,
73 | .token.number {
74 | color: #bd93f9;
75 | }
76 |
77 | .token.selector,
78 | .token.attr-name,
79 | .token.string,
80 | .token.char,
81 | .token.builtin,
82 | .token.inserted {
83 | color: #50fa7b;
84 | }
85 |
86 | .token.operator,
87 | .token.entity,
88 | .token.url,
89 | .language-css .token.string,
90 | .style .token.string,
91 | .token.variable {
92 | color: #f8f8f2;
93 | }
94 |
95 | .token.atrule,
96 | .token.attr-value,
97 | .token.function,
98 | .token.class-name {
99 | color: #f1fa8c;
100 | }
101 |
102 | .token.keyword {
103 | color: #8be9fd;
104 | }
105 |
106 | .token.regex,
107 | .token.important {
108 | color: #ffb86c;
109 | }
110 |
111 | .token.important,
112 | .token.bold {
113 | font-weight: bold;
114 | }
115 |
116 | .token.italic {
117 | font-style: italic;
118 | }
119 |
120 | .token.entity {
121 | cursor: help;
122 | }
123 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-ghcolors.css:
--------------------------------------------------------------------------------
1 | /**
2 | * GHColors theme by Avi Aryan (http://aviaryan.in)
3 | * Inspired by Github syntax coloring
4 | */
5 |
6 | code[class*="language-"],
7 | pre[class*="language-"] {
8 | color: #393A34;
9 | font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
10 | direction: ltr;
11 | text-align: left;
12 | white-space: pre;
13 | word-spacing: normal;
14 | word-break: normal;
15 | font-size: .9em;
16 | line-height: 1.2em;
17 |
18 | -moz-tab-size: 4;
19 | -o-tab-size: 4;
20 | tab-size: 4;
21 |
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | pre > code[class*="language-"] {
29 | font-size: 1em;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
34 | background: #b3d4fc;
35 | }
36 |
37 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
39 | background: #b3d4fc;
40 | }
41 |
42 | /* Code blocks */
43 | pre[class*="language-"] {
44 | padding: 1em;
45 | margin: .5em 0;
46 | overflow: auto;
47 | border: 1px solid #dddddd;
48 | background-color: white;
49 | }
50 |
51 | /* Inline code */
52 | :not(pre) > code[class*="language-"] {
53 | padding: .2em;
54 | padding-top: 1px;
55 | padding-bottom: 1px;
56 | background: #f8f8f8;
57 | border: 1px solid #dddddd;
58 | }
59 |
60 | .token.comment,
61 | .token.prolog,
62 | .token.doctype,
63 | .token.cdata {
64 | color: #999988;
65 | font-style: italic;
66 | }
67 |
68 | .token.namespace {
69 | opacity: .7;
70 | }
71 |
72 | .token.string,
73 | .token.attr-value {
74 | color: #e3116c;
75 | }
76 |
77 | .token.punctuation,
78 | .token.operator {
79 | color: #393A34; /* no highlight */
80 | }
81 |
82 | .token.entity,
83 | .token.url,
84 | .token.symbol,
85 | .token.number,
86 | .token.boolean,
87 | .token.variable,
88 | .token.constant,
89 | .token.property,
90 | .token.regex,
91 | .token.inserted {
92 | color: #36acaa;
93 | }
94 |
95 | .token.atrule,
96 | .token.keyword,
97 | .token.attr-name,
98 | .language-autohotkey .token.selector {
99 | color: #00a4db;
100 | }
101 |
102 | .token.function,
103 | .token.deleted,
104 | .language-autohotkey .token.tag {
105 | color: #9a050f;
106 | }
107 |
108 | .token.tag,
109 | .token.selector,
110 | .language-autohotkey .token.keyword {
111 | color: #00009f;
112 | }
113 |
114 | .token.important,
115 | .token.function,
116 | .token.bold {
117 | font-weight: bold;
118 | }
119 |
120 | .token.italic {
121 | font-style: italic;
122 | }
123 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-gruvbox-dark.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Gruvbox dark theme
3 | *
4 | * Adapted from a theme based on:
5 | * Vim Gruvbox dark Theme (https://github.com/morhetz/gruvbox)
6 | *
7 | * @author Azat S.
8 | * @version 1.0
9 | */
10 |
11 | code[class*="language-"],
12 | pre[class*="language-"] {
13 | color: #ebdbb2; /* fg1 / fg */
14 | font-family: Consolas, Monaco, "Andale Mono", monospace;
15 | direction: ltr;
16 | text-align: left;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | line-height: 1.5;
21 |
22 | -moz-tab-size: 4;
23 | -o-tab-size: 4;
24 | tab-size: 4;
25 |
26 | -webkit-hyphens: none;
27 | -moz-hyphens: none;
28 | -ms-hyphens: none;
29 | hyphens: none;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection,
33 | pre[class*="language-"] ::-moz-selection,
34 | code[class*="language-"]::-moz-selection,
35 | code[class*="language-"] ::-moz-selection {
36 | color: #fbf1c7; /* fg0 */
37 | background: #7c6f64; /* bg4 */
38 | }
39 |
40 | pre[class*="language-"]::selection,
41 | pre[class*="language-"] ::selection,
42 | code[class*="language-"]::selection,
43 | code[class*="language-"] ::selection {
44 | color: #fbf1c7; /* fg0 */
45 | background: #7c6f64; /* bg4 */
46 | }
47 |
48 | /* Code blocks */
49 | pre[class*="language-"] {
50 | padding: 1em;
51 | margin: 0.5em 0;
52 | overflow: auto;
53 | }
54 |
55 | :not(pre) > code[class*="language-"],
56 | pre[class*="language-"] {
57 | background: #1d2021; /* bg0_h */
58 | }
59 |
60 | /* Inline code */
61 | :not(pre) > code[class*="language-"] {
62 | padding: 0.1em;
63 | border-radius: 0.3em;
64 | }
65 |
66 | .token.comment,
67 | .token.prolog,
68 | .token.cdata {
69 | color: #a89984; /* fg4 / gray1 */
70 | }
71 |
72 | .token.delimiter,
73 | .token.boolean,
74 | .token.keyword,
75 | .token.selector,
76 | .token.important,
77 | .token.atrule {
78 | color: #fb4934; /* red2 */
79 | }
80 |
81 | .token.operator,
82 | .token.punctuation,
83 | .token.attr-name {
84 | color: #a89984; /* fg4 / gray1 */
85 | }
86 |
87 | .token.tag,
88 | .token.tag .punctuation,
89 | .token.doctype,
90 | .token.builtin {
91 | color: #fabd2f; /* yellow2 */
92 | }
93 |
94 | .token.entity,
95 | .token.number,
96 | .token.symbol {
97 | color: #d3869b; /* purple2 */
98 | }
99 |
100 | .token.property,
101 | .token.constant,
102 | .token.variable {
103 | color: #fb4934; /* red2 */
104 | }
105 |
106 | .token.string,
107 | .token.char {
108 | color: #b8bb26; /* green2 */
109 | }
110 |
111 | .token.attr-value,
112 | .token.attr-value .punctuation {
113 | color: #a89984; /* fg4 / gray1 */
114 | }
115 |
116 | .token.url {
117 | color: #b8bb26; /* green2 */
118 | text-decoration: underline;
119 | }
120 |
121 | .token.function {
122 | color: #fabd2f; /* yellow2 */
123 | }
124 |
125 | .token.regex {
126 | background: #b8bb26; /* green2 */
127 | }
128 |
129 | .token.bold {
130 | font-weight: bold;
131 | }
132 |
133 | .token.italic {
134 | font-style: italic;
135 | }
136 |
137 | .token.inserted {
138 | background: #a89984; /* fg4 / gray1 */
139 | }
140 |
141 | .token.deleted {
142 | background: #fb4934; /* red2 */
143 | }
144 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-gruvbox-light.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Gruvbox light theme
3 | *
4 | * Based on Gruvbox: https://github.com/morhetz/gruvbox
5 | * Adapted from PrismJS gruvbox-dark theme: https://github.com/schnerring/prism-themes/blob/master/themes/prism-gruvbox-dark.css
6 | *
7 | * @author Michael Schnerring (https://schnerring.net)
8 | * @version 1.0
9 | */
10 |
11 | code[class*="language-"],
12 | pre[class*="language-"] {
13 | color: #3c3836; /* fg1 / fg */
14 | font-family: Consolas, Monaco, "Andale Mono", monospace;
15 | direction: ltr;
16 | text-align: left;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | line-height: 1.5;
21 |
22 | -moz-tab-size: 4;
23 | -o-tab-size: 4;
24 | tab-size: 4;
25 |
26 | -webkit-hyphens: none;
27 | -moz-hyphens: none;
28 | -ms-hyphens: none;
29 | hyphens: none;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection,
33 | pre[class*="language-"] ::-moz-selection,
34 | code[class*="language-"]::-moz-selection,
35 | code[class*="language-"] ::-moz-selection {
36 | color: #282828; /* fg0 */
37 | background: #a89984; /* bg4 */
38 | }
39 |
40 | pre[class*="language-"]::selection,
41 | pre[class*="language-"] ::selection,
42 | code[class*="language-"]::selection,
43 | code[class*="language-"] ::selection {
44 | color: #282828; /* fg0 */
45 | background: #a89984; /* bg4 */
46 | }
47 |
48 | /* Code blocks */
49 | pre[class*="language-"] {
50 | padding: 1em;
51 | margin: 0.5em 0;
52 | overflow: auto;
53 | }
54 |
55 | :not(pre) > code[class*="language-"],
56 | pre[class*="language-"] {
57 | background: #f9f5d7; /* bg0_h */
58 | }
59 |
60 | /* Inline code */
61 | :not(pre) > code[class*="language-"] {
62 | padding: 0.1em;
63 | border-radius: 0.3em;
64 | }
65 |
66 | .token.comment,
67 | .token.prolog,
68 | .token.cdata {
69 | color: #7c6f64; /* fg4 / gray1 */
70 | }
71 |
72 | .token.delimiter,
73 | .token.boolean,
74 | .token.keyword,
75 | .token.selector,
76 | .token.important,
77 | .token.atrule {
78 | color: #9d0006; /* red2 */
79 | }
80 |
81 | .token.operator,
82 | .token.punctuation,
83 | .token.attr-name {
84 | color: #7c6f64; /* fg4 / gray1 */
85 | }
86 |
87 | .token.tag,
88 | .token.tag .punctuation,
89 | .token.doctype,
90 | .token.builtin {
91 | color: #b57614; /* yellow2 */
92 | }
93 |
94 | .token.entity,
95 | .token.number,
96 | .token.symbol {
97 | color: #8f3f71; /* purple2 */
98 | }
99 |
100 | .token.property,
101 | .token.constant,
102 | .token.variable {
103 | color: #9d0006; /* red2 */
104 | }
105 |
106 | .token.string,
107 | .token.char {
108 | color: #797403; /* green2 */
109 | }
110 |
111 | .token.attr-value,
112 | .token.attr-value .punctuation {
113 | color: #7c6f64; /* fg4 / gray1 */
114 | }
115 |
116 | .token.url {
117 | color: #797403; /* green2 */
118 | text-decoration: underline;
119 | }
120 |
121 | .token.function {
122 | color: #b57614; /* yellow2 */
123 | }
124 |
125 | .token.regex {
126 | background: #797403; /* green2 */
127 | }
128 |
129 | .token.bold {
130 | font-weight: bold;
131 | }
132 |
133 | .token.italic {
134 | font-style: italic;
135 | }
136 |
137 | .token.inserted {
138 | background: #7c6f64; /* fg4 / gray1 */
139 | }
140 |
141 | .token.deleted {
142 | background: #9d0006; /* red2 */
143 | }
144 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-holi-theme.css:
--------------------------------------------------------------------------------
1 | /**
2 | * MIT License
3 | * Copyright (c) 2021 Ayush Saini
4 | * Holi Theme for prism.js
5 | * @author Ayush Saini <@AyushCodes on Twitter>
6 | */
7 |
8 | code[class*='language-'],
9 | pre[class*='language-'] {
10 | color: #d6e7ff;
11 | background: #030314;
12 | text-shadow: none;
13 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
14 | font-size: 1em;
15 | line-height: 1.5;
16 | letter-spacing: .2px;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | word-wrap: normal;
21 | text-align: left;
22 |
23 | -moz-tab-size: 4;
24 | -o-tab-size: 4;
25 | tab-size: 4;
26 |
27 | -webkit-hyphens: none;
28 | -moz-hyphens: none;
29 | -ms-hyphens: none;
30 | hyphens: none;
31 | }
32 |
33 | pre[class*='language-']::-moz-selection,
34 | pre[class*='language-'] ::-moz-selection,
35 | code[class*='language-']::-moz-selection,
36 | code[class*='language-'] ::-moz-selection,
37 | pre[class*='language-']::selection,
38 | pre[class*='language-'] ::selection,
39 | code[class*='language-']::selection,
40 | code[class*='language-'] ::selection {
41 | color: inherit;
42 | background: #1d3b54;
43 | text-shadow: none;
44 | }
45 |
46 | pre[class*='language-'] {
47 | border: 1px solid #2a4555;
48 | border-radius: 5px;
49 | padding: 1.5em 1em;
50 | margin: 1em 0;
51 | overflow: auto;
52 | }
53 |
54 | :not(pre) > code[class*='language-'] {
55 | color: #f0f6f6;
56 | background: #2a4555;
57 | padding: 0.2em 0.3em;
58 | border-radius: 0.2em;
59 | box-decoration-break: clone;
60 | }
61 |
62 | .token.comment,
63 | .token.prolog,
64 | .token.doctype,
65 | .token.cdata {
66 | color: #446e69;
67 | }
68 |
69 | .token.punctuation {
70 | color: #d6b007;
71 | }
72 |
73 | .token.property,
74 | .token.tag,
75 | .token.boolean,
76 | .token.number,
77 | .token.constant,
78 | .token.symbol,
79 | .token.deleted {
80 | color: #d6e7ff;
81 | }
82 |
83 | .token.selector,
84 | .token.attr-name,
85 | .token.builtin,
86 | .token.inserted {
87 | color: #e60067;
88 | }
89 |
90 | .token.string,
91 | .token.char {
92 | color: #49c6ec;
93 | }
94 |
95 | .token.operator,
96 | .token.entity,
97 | .token.url,
98 | .language-css .token.string,
99 | .style .token.string {
100 | color: #ec8e01;
101 | background: transparent;
102 | }
103 |
104 | .token.atrule,
105 | .token.attr-value,
106 | .token.keyword {
107 | color: #0fe468;
108 | }
109 |
110 | .token.function,
111 | .token.class-name {
112 | color: #78f3e9;
113 | }
114 |
115 | .token.regex,
116 | .token.important,
117 | .token.variable {
118 | color: #d6e7ff;
119 | }
120 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-hopscotch.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Fira+Mono);
2 | /*
3 | * Hopscotch
4 | * by Jan T. Sott
5 | * https://github.com/idleberg/Hopscotch
6 | *
7 | * This work is licensed under the Creative Commons CC0 1.0 Universal License
8 | */
9 |
10 | code[class*="language-"],
11 | pre[class*="language-"] {
12 | font-family: "Fira Mono", Menlo, Monaco, "Lucida Console", "Courier New", Courier, monospace;
13 | font-size: 16px;
14 | line-height: 1.375;
15 | direction: ltr;
16 | text-align: left;
17 | word-spacing: normal;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | white-space: pre;
28 | white-space: pre-wrap;
29 | word-break: break-all;
30 | word-wrap: break-word;
31 | background: #322931;
32 | color: #b9b5b8;
33 | }
34 |
35 | pre > code[class*="language-"] {
36 | font-size: 1em;
37 | }
38 |
39 | /* Code blocks */
40 | pre[class*="language-"] {
41 | padding: 1em;
42 | margin: .5em 0;
43 | overflow: auto;
44 | }
45 |
46 | /* Inline code */
47 | :not(pre) > code[class*="language-"] {
48 | padding: .1em;
49 | border-radius: .3em;
50 | }
51 |
52 | .token.comment,
53 | .token.prolog,
54 | .token.doctype,
55 | .token.cdata {
56 | color: #797379;
57 | }
58 |
59 | .token.punctuation {
60 | color: #b9b5b8;
61 | }
62 |
63 | .namespace {
64 | opacity: .7;
65 | }
66 |
67 | .token.null,
68 | .token.operator,
69 | .token.boolean,
70 | .token.number {
71 | color: #fd8b19;
72 | }
73 |
74 | .token.property {
75 | color: #fdcc59;
76 | }
77 |
78 | .token.tag {
79 | color: #1290bf;
80 | }
81 |
82 | .token.string {
83 | color: #149b93;
84 | }
85 |
86 | .token.selector {
87 | color: #c85e7c;
88 | }
89 |
90 | .token.attr-name {
91 | color: #fd8b19;
92 | }
93 |
94 | .token.entity,
95 | .token.url,
96 | .language-css .token.string,
97 | .style .token.string {
98 | color: #149b93;
99 | }
100 |
101 | .token.attr-value,
102 | .token.keyword,
103 | .token.control,
104 | .token.directive,
105 | .token.unit {
106 | color: #8fc13e;
107 | }
108 |
109 | .token.statement,
110 | .token.regex,
111 | .token.atrule {
112 | color: #149b93;
113 | }
114 |
115 | .token.placeholder,
116 | .token.variable {
117 | color: #1290bf;
118 | }
119 |
120 | .token.important {
121 | color: #dd464c;
122 | font-weight: bold;
123 | }
124 |
125 | .token.entity {
126 | cursor: help;
127 | }
128 |
129 | pre > code.highlight {
130 | outline: .4em solid red;
131 | outline-offset: .4em;
132 | }
133 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-lucario.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Lucario Theme originally by Raphael Amorim [@raphamorim]
3 | * https://github.com/raphamorim/lucario
4 | *
5 | * Ported for PrismJS by Christopher Kapic [@christopher-kapic]
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: #f8f8f2;
11 | background: none;
12 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
13 | font-family: Monaco, Consolas, 'Andale Mono', 'Ubuntu Mono', monospace;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | word-wrap: normal;
19 | line-height: 1.5;
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: .5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #263E52;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | white-space: normal;
47 | }
48 |
49 | .token.comment,
50 | .token.prolog,
51 | .token.doctype,
52 | .token.cdata {
53 | color: #5c98cd;
54 | }
55 |
56 | .token.punctuation {
57 | color: #f8f8f2;
58 | }
59 |
60 | .namespace {
61 | opacity: .7;
62 | }
63 |
64 | .token.property,
65 | .token.tag,
66 | .token.constant,
67 | .token.symbol,
68 | .token.deleted {
69 | color: #F05E5D;
70 | }
71 |
72 | .token.boolean,
73 | .token.number {
74 | color: #BC94F9;
75 | }
76 |
77 | .token.selector,
78 | .token.attr-name,
79 | .token.string,
80 | .token.char,
81 | .token.builtin,
82 | .token.inserted {
83 | color: #FCFCD6;
84 | }
85 |
86 | .token.operator,
87 | .token.entity,
88 | .token.url,
89 | .language-css .token.string,
90 | .style .token.string,
91 | .token.variable {
92 | color: #f8f8f2;
93 | }
94 |
95 | .token.atrule,
96 | .token.attr-value,
97 | .token.function,
98 | .token.class-name {
99 | color: #66D8EF;
100 | }
101 |
102 | .token.keyword {
103 | color: #6EB26E;
104 | }
105 |
106 | .token.regex,
107 | .token.important {
108 | color: #F05E5D;
109 | }
110 |
111 | .token.important,
112 | .token.bold {
113 | font-weight: bold;
114 | }
115 |
116 | .token.italic {
117 | font-style: italic;
118 | }
119 |
120 | .token.entity {
121 | cursor: help;
122 | }
123 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-material-dark.css:
--------------------------------------------------------------------------------
1 | code[class*="language-"],
2 | pre[class*="language-"] {
3 | text-align: left;
4 | white-space: pre;
5 | word-spacing: normal;
6 | word-break: normal;
7 | word-wrap: normal;
8 | color: #eee;
9 | background: #2f2f2f;
10 | font-family: Roboto Mono, monospace;
11 | font-size: 1em;
12 | line-height: 1.5em;
13 |
14 | -moz-tab-size: 4;
15 | -o-tab-size: 4;
16 | tab-size: 4;
17 |
18 | -webkit-hyphens: none;
19 | -moz-hyphens: none;
20 | -ms-hyphens: none;
21 | hyphens: none;
22 | }
23 |
24 | code[class*="language-"]::-moz-selection,
25 | pre[class*="language-"]::-moz-selection,
26 | code[class*="language-"] ::-moz-selection,
27 | pre[class*="language-"] ::-moz-selection {
28 | background: #363636;
29 | }
30 |
31 | code[class*="language-"]::selection,
32 | pre[class*="language-"]::selection,
33 | code[class*="language-"] ::selection,
34 | pre[class*="language-"] ::selection {
35 | background: #363636;
36 | }
37 |
38 | :not(pre) > code[class*="language-"] {
39 | white-space: normal;
40 | border-radius: 0.2em;
41 | padding: 0.1em;
42 | }
43 |
44 | pre[class*="language-"] {
45 | overflow: auto;
46 | position: relative;
47 | margin: 0.5em 0;
48 | padding: 1.25em 1em;
49 | }
50 |
51 | .language-css > code,
52 | .language-sass > code,
53 | .language-scss > code {
54 | color: #fd9170;
55 | }
56 |
57 | [class*="language-"] .namespace {
58 | opacity: 0.7;
59 | }
60 |
61 | .token.atrule {
62 | color: #c792ea;
63 | }
64 |
65 | .token.attr-name {
66 | color: #ffcb6b;
67 | }
68 |
69 | .token.attr-value {
70 | color: #a5e844;
71 | }
72 |
73 | .token.attribute {
74 | color: #a5e844;
75 | }
76 |
77 | .token.boolean {
78 | color: #c792ea;
79 | }
80 |
81 | .token.builtin {
82 | color: #ffcb6b;
83 | }
84 |
85 | .token.cdata {
86 | color: #80cbc4;
87 | }
88 |
89 | .token.char {
90 | color: #80cbc4;
91 | }
92 |
93 | .token.class {
94 | color: #ffcb6b;
95 | }
96 |
97 | .token.class-name {
98 | color: #f2ff00;
99 | }
100 |
101 | .token.comment {
102 | color: #616161;
103 | }
104 |
105 | .token.constant {
106 | color: #c792ea;
107 | }
108 |
109 | .token.deleted {
110 | color: #ff6666;
111 | }
112 |
113 | .token.doctype {
114 | color: #616161;
115 | }
116 |
117 | .token.entity {
118 | color: #ff6666;
119 | }
120 |
121 | .token.function {
122 | color: #c792ea;
123 | }
124 |
125 | .token.hexcode {
126 | color: #f2ff00;
127 | }
128 |
129 | .token.id {
130 | color: #c792ea;
131 | font-weight: bold;
132 | }
133 |
134 | .token.important {
135 | color: #c792ea;
136 | font-weight: bold;
137 | }
138 |
139 | .token.inserted {
140 | color: #80cbc4;
141 | }
142 |
143 | .token.keyword {
144 | color: #c792ea;
145 | }
146 |
147 | .token.number {
148 | color: #fd9170;
149 | }
150 |
151 | .token.operator {
152 | color: #89ddff;
153 | }
154 |
155 | .token.prolog {
156 | color: #616161;
157 | }
158 |
159 | .token.property {
160 | color: #80cbc4;
161 | }
162 |
163 | .token.pseudo-class {
164 | color: #a5e844;
165 | }
166 |
167 | .token.pseudo-element {
168 | color: #a5e844;
169 | }
170 |
171 | .token.punctuation {
172 | color: #89ddff;
173 | }
174 |
175 | .token.regex {
176 | color: #f2ff00;
177 | }
178 |
179 | .token.selector {
180 | color: #ff6666;
181 | }
182 |
183 | .token.string {
184 | color: #a5e844;
185 | }
186 |
187 | .token.symbol {
188 | color: #c792ea;
189 | }
190 |
191 | .token.tag {
192 | color: #ff6666;
193 | }
194 |
195 | .token.unit {
196 | color: #fd9170;
197 | }
198 |
199 | .token.url {
200 | color: #ff6666;
201 | }
202 |
203 | .token.variable {
204 | color: #ff6666;
205 | }
206 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-material-light.css:
--------------------------------------------------------------------------------
1 | code[class*="language-"],
2 | pre[class*="language-"] {
3 | text-align: left;
4 | white-space: pre;
5 | word-spacing: normal;
6 | word-break: normal;
7 | word-wrap: normal;
8 | color: #90a4ae;
9 | background: #fafafa;
10 | font-family: Roboto Mono, monospace;
11 | font-size: 1em;
12 | line-height: 1.5em;
13 |
14 | -moz-tab-size: 4;
15 | -o-tab-size: 4;
16 | tab-size: 4;
17 |
18 | -webkit-hyphens: none;
19 | -moz-hyphens: none;
20 | -ms-hyphens: none;
21 | hyphens: none;
22 | }
23 |
24 | code[class*="language-"]::-moz-selection,
25 | pre[class*="language-"]::-moz-selection,
26 | code[class*="language-"] ::-moz-selection,
27 | pre[class*="language-"] ::-moz-selection {
28 | background: #cceae7;
29 | color: #263238;
30 | }
31 |
32 | code[class*="language-"]::selection,
33 | pre[class*="language-"]::selection,
34 | code[class*="language-"] ::selection,
35 | pre[class*="language-"] ::selection {
36 | background: #cceae7;
37 | color: #263238;
38 | }
39 |
40 | :not(pre) > code[class*="language-"] {
41 | white-space: normal;
42 | border-radius: 0.2em;
43 | padding: 0.1em;
44 | }
45 |
46 | pre[class*="language-"] {
47 | overflow: auto;
48 | position: relative;
49 | margin: 0.5em 0;
50 | padding: 1.25em 1em;
51 | }
52 |
53 | .language-css > code,
54 | .language-sass > code,
55 | .language-scss > code {
56 | color: #f76d47;
57 | }
58 |
59 | [class*="language-"] .namespace {
60 | opacity: 0.7;
61 | }
62 |
63 | .token.atrule {
64 | color: #7c4dff;
65 | }
66 |
67 | .token.attr-name {
68 | color: #39adb5;
69 | }
70 |
71 | .token.attr-value {
72 | color: #f6a434;
73 | }
74 |
75 | .token.attribute {
76 | color: #f6a434;
77 | }
78 |
79 | .token.boolean {
80 | color: #7c4dff;
81 | }
82 |
83 | .token.builtin {
84 | color: #39adb5;
85 | }
86 |
87 | .token.cdata {
88 | color: #39adb5;
89 | }
90 |
91 | .token.char {
92 | color: #39adb5;
93 | }
94 |
95 | .token.class {
96 | color: #39adb5;
97 | }
98 |
99 | .token.class-name {
100 | color: #6182b8;
101 | }
102 |
103 | .token.comment {
104 | color: #aabfc9;
105 | }
106 |
107 | .token.constant {
108 | color: #7c4dff;
109 | }
110 |
111 | .token.deleted {
112 | color: #e53935;
113 | }
114 |
115 | .token.doctype {
116 | color: #aabfc9;
117 | }
118 |
119 | .token.entity {
120 | color: #e53935;
121 | }
122 |
123 | .token.function {
124 | color: #7c4dff;
125 | }
126 |
127 | .token.hexcode {
128 | color: #f76d47;
129 | }
130 |
131 | .token.id {
132 | color: #7c4dff;
133 | font-weight: bold;
134 | }
135 |
136 | .token.important {
137 | color: #7c4dff;
138 | font-weight: bold;
139 | }
140 |
141 | .token.inserted {
142 | color: #39adb5;
143 | }
144 |
145 | .token.keyword {
146 | color: #7c4dff;
147 | }
148 |
149 | .token.number {
150 | color: #f76d47;
151 | }
152 |
153 | .token.operator {
154 | color: #39adb5;
155 | }
156 |
157 | .token.prolog {
158 | color: #aabfc9;
159 | }
160 |
161 | .token.property {
162 | color: #39adb5;
163 | }
164 |
165 | .token.pseudo-class {
166 | color: #f6a434;
167 | }
168 |
169 | .token.pseudo-element {
170 | color: #f6a434;
171 | }
172 |
173 | .token.punctuation {
174 | color: #39adb5;
175 | }
176 |
177 | .token.regex {
178 | color: #6182b8;
179 | }
180 |
181 | .token.selector {
182 | color: #e53935;
183 | }
184 |
185 | .token.string {
186 | color: #f6a434;
187 | }
188 |
189 | .token.symbol {
190 | color: #7c4dff;
191 | }
192 |
193 | .token.tag {
194 | color: #e53935;
195 | }
196 |
197 | .token.unit {
198 | color: #f76d47;
199 | }
200 |
201 | .token.url {
202 | color: #e53935;
203 | }
204 |
205 | .token.variable {
206 | color: #e53935;
207 | }
208 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-material-oceanic.css:
--------------------------------------------------------------------------------
1 | code[class*="language-"],
2 | pre[class*="language-"] {
3 | text-align: left;
4 | white-space: pre;
5 | word-spacing: normal;
6 | word-break: normal;
7 | word-wrap: normal;
8 | color: #c3cee3;
9 | background: #263238;
10 | font-family: Roboto Mono, monospace;
11 | font-size: 1em;
12 | line-height: 1.5em;
13 |
14 | -moz-tab-size: 4;
15 | -o-tab-size: 4;
16 | tab-size: 4;
17 |
18 | -webkit-hyphens: none;
19 | -moz-hyphens: none;
20 | -ms-hyphens: none;
21 | hyphens: none;
22 | }
23 |
24 | code[class*="language-"]::-moz-selection,
25 | pre[class*="language-"]::-moz-selection,
26 | code[class*="language-"] ::-moz-selection,
27 | pre[class*="language-"] ::-moz-selection {
28 | background: #363636;
29 | }
30 |
31 | code[class*="language-"]::selection,
32 | pre[class*="language-"]::selection,
33 | code[class*="language-"] ::selection,
34 | pre[class*="language-"] ::selection {
35 | background: #363636;
36 | }
37 |
38 | :not(pre) > code[class*="language-"] {
39 | white-space: normal;
40 | border-radius: 0.2em;
41 | padding: 0.1em;
42 | }
43 |
44 | pre[class*="language-"] {
45 | overflow: auto;
46 | position: relative;
47 | margin: 0.5em 0;
48 | padding: 1.25em 1em;
49 | }
50 |
51 | .language-css > code,
52 | .language-sass > code,
53 | .language-scss > code {
54 | color: #fd9170;
55 | }
56 |
57 | [class*="language-"] .namespace {
58 | opacity: 0.7;
59 | }
60 |
61 | .token.atrule {
62 | color: #c792ea;
63 | }
64 |
65 | .token.attr-name {
66 | color: #ffcb6b;
67 | }
68 |
69 | .token.attr-value {
70 | color: #c3e88d;
71 | }
72 |
73 | .token.attribute {
74 | color: #c3e88d;
75 | }
76 |
77 | .token.boolean {
78 | color: #c792ea;
79 | }
80 |
81 | .token.builtin {
82 | color: #ffcb6b;
83 | }
84 |
85 | .token.cdata {
86 | color: #80cbc4;
87 | }
88 |
89 | .token.char {
90 | color: #80cbc4;
91 | }
92 |
93 | .token.class {
94 | color: #ffcb6b;
95 | }
96 |
97 | .token.class-name {
98 | color: #f2ff00;
99 | }
100 |
101 | .token.color {
102 | color: #f2ff00;
103 | }
104 |
105 | .token.comment {
106 | color: #546e7a;
107 | }
108 |
109 | .token.constant {
110 | color: #c792ea;
111 | }
112 |
113 | .token.deleted {
114 | color: #f07178;
115 | }
116 |
117 | .token.doctype {
118 | color: #546e7a;
119 | }
120 |
121 | .token.entity {
122 | color: #f07178;
123 | }
124 |
125 | .token.function {
126 | color: #c792ea;
127 | }
128 |
129 | .token.hexcode {
130 | color: #f2ff00;
131 | }
132 |
133 | .token.id {
134 | color: #c792ea;
135 | font-weight: bold;
136 | }
137 |
138 | .token.important {
139 | color: #c792ea;
140 | font-weight: bold;
141 | }
142 |
143 | .token.inserted {
144 | color: #80cbc4;
145 | }
146 |
147 | .token.keyword {
148 | color: #c792ea;
149 | font-style: italic;
150 | }
151 |
152 | .token.number {
153 | color: #fd9170;
154 | }
155 |
156 | .token.operator {
157 | color: #89ddff;
158 | }
159 |
160 | .token.prolog {
161 | color: #546e7a;
162 | }
163 |
164 | .token.property {
165 | color: #80cbc4;
166 | }
167 |
168 | .token.pseudo-class {
169 | color: #c3e88d;
170 | }
171 |
172 | .token.pseudo-element {
173 | color: #c3e88d;
174 | }
175 |
176 | .token.punctuation {
177 | color: #89ddff;
178 | }
179 |
180 | .token.regex {
181 | color: #f2ff00;
182 | }
183 |
184 | .token.selector {
185 | color: #f07178;
186 | }
187 |
188 | .token.string {
189 | color: #c3e88d;
190 | }
191 |
192 | .token.symbol {
193 | color: #c792ea;
194 | }
195 |
196 | .token.tag {
197 | color: #f07178;
198 | }
199 |
200 | .token.unit {
201 | color: #f07178;
202 | }
203 |
204 | .token.url {
205 | color: #fd9170;
206 | }
207 |
208 | .token.variable {
209 | color: #f07178;
210 | }
211 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-night-owl.css:
--------------------------------------------------------------------------------
1 | /**
2 | * MIT License
3 | * Copyright (c) 2018 Sarah Drasner
4 | * Sarah Drasner's[@sdras] Night Owl
5 | * Ported by Sara vieria [@SaraVieira]
6 | * Added by Souvik Mandal [@SimpleIndian]
7 | */
8 |
9 | code[class*="language-"],
10 | pre[class*="language-"] {
11 | color: #d6deeb;
12 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | word-wrap: normal;
18 | line-height: 1.5;
19 | font-size: 1em;
20 |
21 | -moz-tab-size: 4;
22 | -o-tab-size: 4;
23 | tab-size: 4;
24 |
25 | -webkit-hyphens: none;
26 | -moz-hyphens: none;
27 | -ms-hyphens: none;
28 | hyphens: none;
29 | }
30 |
31 | pre[class*="language-"]::-moz-selection,
32 | pre[class*="language-"] ::-moz-selection,
33 | code[class*="language-"]::-moz-selection,
34 | code[class*="language-"] ::-moz-selection {
35 | text-shadow: none;
36 | background: rgba(29, 59, 83, 0.99);
37 | }
38 |
39 | pre[class*="language-"]::selection,
40 | pre[class*="language-"] ::selection,
41 | code[class*="language-"]::selection,
42 | code[class*="language-"] ::selection {
43 | text-shadow: none;
44 | background: rgba(29, 59, 83, 0.99);
45 | }
46 |
47 | @media print {
48 | code[class*="language-"],
49 | pre[class*="language-"] {
50 | text-shadow: none;
51 | }
52 | }
53 |
54 | /* Code blocks */
55 | pre[class*="language-"] {
56 | padding: 1em;
57 | margin: 0.5em 0;
58 | overflow: auto;
59 | }
60 |
61 | :not(pre) > code[class*="language-"],
62 | pre[class*="language-"] {
63 | color: white;
64 | background: #011627;
65 | }
66 |
67 | :not(pre) > code[class*="language-"] {
68 | padding: 0.1em;
69 | border-radius: 0.3em;
70 | white-space: normal;
71 | }
72 |
73 | .token.comment,
74 | .token.prolog,
75 | .token.cdata {
76 | color: rgb(99, 119, 119);
77 | font-style: italic;
78 | }
79 |
80 | .token.punctuation {
81 | color: rgb(199, 146, 234);
82 | }
83 |
84 | .namespace {
85 | color: rgb(178, 204, 214);
86 | }
87 |
88 | .token.deleted {
89 | color: rgba(239, 83, 80, 0.56);
90 | font-style: italic;
91 | }
92 |
93 | .token.symbol,
94 | .token.property {
95 | color: rgb(128, 203, 196);
96 | }
97 |
98 | .token.tag,
99 | .token.operator,
100 | .token.keyword {
101 | color: rgb(127, 219, 202);
102 | }
103 |
104 | .token.boolean {
105 | color: rgb(255, 88, 116);
106 | }
107 |
108 | .token.number {
109 | color: rgb(247, 140, 108);
110 | }
111 |
112 | .token.constant,
113 | .token.function,
114 | .token.builtin,
115 | .token.char {
116 | color: rgb(130, 170, 255);
117 | }
118 |
119 | .token.selector,
120 | .token.doctype {
121 | color: rgb(199, 146, 234);
122 | font-style: italic;
123 | }
124 |
125 | .token.attr-name,
126 | .token.inserted {
127 | color: rgb(173, 219, 103);
128 | font-style: italic;
129 | }
130 |
131 | .token.string,
132 | .token.url,
133 | .token.entity,
134 | .language-css .token.string,
135 | .style .token.string {
136 | color: rgb(173, 219, 103);
137 | }
138 |
139 | .token.class-name,
140 | .token.atrule,
141 | .token.attr-value {
142 | color: rgb(255, 203, 139);
143 | }
144 |
145 | .token.regex,
146 | .token.important,
147 | .token.variable {
148 | color: rgb(214, 222, 235);
149 | }
150 |
151 | .token.important,
152 | .token.bold {
153 | font-weight: bold;
154 | }
155 |
156 | .token.italic {
157 | font-style: italic;
158 | }
159 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-nord.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Nord Theme Originally by Arctic Ice Studio
3 | * https://nordtheme.com
4 | *
5 | * Ported for PrismJS by Zane Hitchcoxc (@zwhitchcox) and Gabriel Ramos (@gabrieluizramos)
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: #f8f8f2;
11 | background: none;
12 | font-family: "Fira Code", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | word-wrap: normal;
18 | line-height: 1.5;
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | /* Code blocks */
29 | pre[class*="language-"] {
30 | padding: 1em;
31 | margin: .5em 0;
32 | overflow: auto;
33 | border-radius: 0.3em;
34 | }
35 |
36 | :not(pre) > code[class*="language-"],
37 | pre[class*="language-"] {
38 | background: #2E3440;
39 | }
40 |
41 | /* Inline code */
42 | :not(pre) > code[class*="language-"] {
43 | padding: .1em;
44 | border-radius: .3em;
45 | white-space: normal;
46 | }
47 |
48 | .token.comment,
49 | .token.prolog,
50 | .token.doctype,
51 | .token.cdata {
52 | color: #636f88;
53 | }
54 |
55 | .token.punctuation {
56 | color: #81A1C1;
57 | }
58 |
59 | .namespace {
60 | opacity: .7;
61 | }
62 |
63 | .token.property,
64 | .token.tag,
65 | .token.constant,
66 | .token.symbol,
67 | .token.deleted {
68 | color: #81A1C1;
69 | }
70 |
71 | .token.number {
72 | color: #B48EAD;
73 | }
74 |
75 | .token.boolean {
76 | color: #81A1C1;
77 | }
78 |
79 | .token.selector,
80 | .token.attr-name,
81 | .token.string,
82 | .token.char,
83 | .token.builtin,
84 | .token.inserted {
85 | color: #A3BE8C;
86 | }
87 |
88 | .token.operator,
89 | .token.entity,
90 | .token.url,
91 | .language-css .token.string,
92 | .style .token.string,
93 | .token.variable {
94 | color: #81A1C1;
95 | }
96 |
97 | .token.atrule,
98 | .token.attr-value,
99 | .token.function,
100 | .token.class-name {
101 | color: #88C0D0;
102 | }
103 |
104 | .token.keyword {
105 | color: #81A1C1;
106 | }
107 |
108 | .token.regex,
109 | .token.important {
110 | color: #EBCB8B;
111 | }
112 |
113 | .token.important,
114 | .token.bold {
115 | font-weight: bold;
116 | }
117 |
118 | .token.italic {
119 | font-style: italic;
120 | }
121 |
122 | .token.entity {
123 | cursor: help;
124 | }
125 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-solarized-dark-atom.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Solarized dark atom theme for `prism.js`
3 | * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
4 | * @author Pranay Chauhan (@PranayChauhan2516)
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #839496;
10 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
11 | font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
12 | direction: ltr;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | line-height: 1.5;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: .5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #002b36;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | }
47 |
48 | .token.comment,
49 | .token.prolog,
50 | .token.doctype,
51 | .token.cdata {
52 | color: #586e75;
53 | }
54 |
55 | .token.punctuation {
56 | color: #93a1a1;
57 | }
58 |
59 | .namespace {
60 | opacity: .7;
61 | }
62 |
63 | .token.property,
64 | .token.keyword,
65 | .token.tag {
66 | color: #268bd2;
67 | }
68 |
69 | .token.class-name {
70 | color: #FFFFB6;
71 | text-decoration: underline;
72 | }
73 |
74 | .token.boolean,
75 | .token.constant {
76 | color: #b58900;
77 | }
78 |
79 | .token.symbol,
80 | .token.deleted {
81 | color: #dc322f;
82 | }
83 |
84 | .token.number {
85 | color: #859900;
86 | }
87 |
88 | .token.selector,
89 | .token.attr-name,
90 | .token.string,
91 | .token.char,
92 | .token.builtin,
93 | .token.inserted {
94 | color: #859900;
95 | }
96 |
97 | .token.variable {
98 | color: #268bd2;
99 | }
100 |
101 | .token.operator {
102 | color: #EDEDED;
103 | }
104 |
105 | .token.function {
106 | color: #268bd2;
107 | }
108 |
109 | .token.regex {
110 | color: #E9C062;
111 | }
112 |
113 | .token.important {
114 | color: #fd971f;
115 | }
116 |
117 | .token.entity {
118 | color: #FFFFB6;
119 | cursor: help;
120 | }
121 |
122 | .token.url {
123 | color: #96CBFE;
124 | }
125 |
126 | .language-css .token.string,
127 | .style .token.string {
128 | color: #87C38A;
129 | }
130 |
131 | .token.important,
132 | .token.bold {
133 | font-weight: bold;
134 | }
135 |
136 | .token.italic {
137 | font-style: italic;
138 | }
139 |
140 | .token.atrule,
141 | .token.attr-value {
142 | color: #F9EE98;
143 | }
144 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-synthwave84.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Synthwave '84 Theme originally by Robb Owen [@Robb0wen] for Visual Studio Code
3 | * Demo: https://marc.dev/demo/prism-synthwave84
4 | *
5 | * Ported for PrismJS by Marc Backes [@themarcba]
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: #f92aad;
11 | text-shadow: 0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3;
12 | background: none;
13 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
14 | font-size: 1em;
15 | text-align: left;
16 | white-space: pre;
17 | word-spacing: normal;
18 | word-break: normal;
19 | word-wrap: normal;
20 | line-height: 1.5;
21 |
22 | -moz-tab-size: 4;
23 | -o-tab-size: 4;
24 | tab-size: 4;
25 |
26 | -webkit-hyphens: none;
27 | -moz-hyphens: none;
28 | -ms-hyphens: none;
29 | hyphens: none;
30 | }
31 |
32 | /* Code blocks */
33 | pre[class*="language-"] {
34 | padding: 1em;
35 | margin: .5em 0;
36 | overflow: auto;
37 | }
38 |
39 | :not(pre) > code[class*="language-"],
40 | pre[class*="language-"] {
41 | background-color: transparent !important;
42 | background-image: linear-gradient(to bottom, #2a2139 75%, #34294f);
43 | }
44 |
45 | /* Inline code */
46 | :not(pre) > code[class*="language-"] {
47 | padding: .1em;
48 | border-radius: .3em;
49 | white-space: normal;
50 | }
51 |
52 | .token.comment,
53 | .token.block-comment,
54 | .token.prolog,
55 | .token.doctype,
56 | .token.cdata {
57 | color: #8e8e8e;
58 | }
59 |
60 | .token.punctuation {
61 | color: #ccc;
62 | }
63 |
64 | .token.tag,
65 | .token.attr-name,
66 | .token.namespace,
67 | .token.number,
68 | .token.unit,
69 | .token.hexcode,
70 | .token.deleted {
71 | color: #e2777a;
72 | }
73 |
74 | .token.property,
75 | .token.selector {
76 | color: #72f1b8;
77 | text-shadow: 0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475;
78 | }
79 |
80 | .token.function-name {
81 | color: #6196cc;
82 | }
83 |
84 | .token.boolean,
85 | .token.selector .token.id,
86 | .token.function {
87 | color: #fdfdfd;
88 | text-shadow: 0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975;
89 | }
90 |
91 | .token.class-name {
92 | color: #fff5f6;
93 | text-shadow: 0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75;
94 | }
95 |
96 | .token.constant,
97 | .token.symbol {
98 | color: #f92aad;
99 | text-shadow: 0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3;
100 | }
101 |
102 | .token.important,
103 | .token.atrule,
104 | .token.keyword,
105 | .token.selector .token.class,
106 | .token.builtin {
107 | color: #f4eee4;
108 | text-shadow: 0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575;
109 | }
110 |
111 | .token.string,
112 | .token.char,
113 | .token.attr-value,
114 | .token.regex,
115 | .token.variable {
116 | color: #f87c32;
117 | }
118 |
119 | .token.operator,
120 | .token.entity,
121 | .token.url {
122 | color: #67cdcc;
123 | }
124 |
125 | .token.important,
126 | .token.bold {
127 | font-weight: bold;
128 | }
129 |
130 | .token.italic {
131 | font-style: italic;
132 | }
133 |
134 | .token.entity {
135 | cursor: help;
136 | }
137 |
138 | .token.inserted {
139 | color: green;
140 | }
141 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-vs.css:
--------------------------------------------------------------------------------
1 | /**
2 | * VS theme by Andrew Lock (https://andrewlock.net)
3 | * Inspired by Visual Studio syntax coloring
4 | */
5 |
6 | code[class*="language-"],
7 | pre[class*="language-"] {
8 | color: #393A34;
9 | font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
10 | direction: ltr;
11 | text-align: left;
12 | white-space: pre;
13 | word-spacing: normal;
14 | word-break: normal;
15 | font-size: .9em;
16 | line-height: 1.2em;
17 |
18 | -moz-tab-size: 4;
19 | -o-tab-size: 4;
20 | tab-size: 4;
21 |
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | pre > code[class*="language-"] {
29 | font-size: 1em;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
34 | background: #C1DEF1;
35 | }
36 |
37 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
39 | background: #C1DEF1;
40 | }
41 |
42 | /* Code blocks */
43 | pre[class*="language-"] {
44 | padding: 1em;
45 | margin: .5em 0;
46 | overflow: auto;
47 | border: 1px solid #dddddd;
48 | background-color: white;
49 | }
50 |
51 | /* Inline code */
52 | :not(pre) > code[class*="language-"] {
53 | padding: .2em;
54 | padding-top: 1px;
55 | padding-bottom: 1px;
56 | background: #f8f8f8;
57 | border: 1px solid #dddddd;
58 | }
59 |
60 | .token.comment,
61 | .token.prolog,
62 | .token.doctype,
63 | .token.cdata {
64 | color: #008000;
65 | font-style: italic;
66 | }
67 |
68 | .token.namespace {
69 | opacity: .7;
70 | }
71 |
72 | .token.string {
73 | color: #A31515;
74 | }
75 |
76 | .token.punctuation,
77 | .token.operator {
78 | color: #393A34; /* no highlight */
79 | }
80 |
81 | .token.url,
82 | .token.symbol,
83 | .token.number,
84 | .token.boolean,
85 | .token.variable,
86 | .token.constant,
87 | .token.inserted {
88 | color: #36acaa;
89 | }
90 |
91 | .token.atrule,
92 | .token.keyword,
93 | .token.attr-value,
94 | .language-autohotkey .token.selector,
95 | .language-json .token.boolean,
96 | .language-json .token.number,
97 | code[class*="language-css"] {
98 | color: #0000ff;
99 | }
100 |
101 | .token.function {
102 | color: #393A34;
103 | }
104 |
105 | .token.deleted,
106 | .language-autohotkey .token.tag {
107 | color: #9a050f;
108 | }
109 |
110 | .token.selector,
111 | .language-autohotkey .token.keyword {
112 | color: #00009f;
113 | }
114 |
115 | .token.important {
116 | color: #e90;
117 | }
118 |
119 | .token.important,
120 | .token.bold {
121 | font-weight: bold;
122 | }
123 |
124 | .token.italic {
125 | font-style: italic;
126 | }
127 |
128 | .token.class-name,
129 | .language-json .token.property {
130 | color: #2B91AF;
131 | }
132 |
133 | .token.tag,
134 | .token.selector {
135 | color: #800000;
136 | }
137 |
138 | .token.attr-name,
139 | .token.property,
140 | .token.regex,
141 | .token.entity {
142 | color: #ff0000;
143 | }
144 |
145 | .token.directive.tag .tag {
146 | background: #ffff00;
147 | color: #393A34;
148 | }
149 |
150 | /* overrides color-values for the Line Numbers plugin
151 | * http://prismjs.com/plugins/line-numbers/
152 | */
153 | .line-numbers .line-numbers-rows {
154 | border-right-color: #a5a5a5;
155 | }
156 |
157 | .line-numbers-rows > span:before {
158 | color: #2B91AF;
159 | }
160 |
161 | /* overrides color-values for the Line Highlight plugin
162 | * http://prismjs.com/plugins/line-highlight/
163 | */
164 | .line-highlight {
165 | background: rgba(193, 222, 241, 0.2);
166 | background: -webkit-linear-gradient(left, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0));
167 | background: linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0));
168 | }
169 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-xonokai.css:
--------------------------------------------------------------------------------
1 | /**
2 | * xonokai theme for JavaScript, CSS and HTML
3 | * based on: https://github.com/MoOx/sass-prism-theme-base by Maxime Thirouin ~ MoOx --> http://moox.fr/ , which is Loosely based on Monokai textmate theme by http://www.monokai.nl/
4 | * license: MIT; http://moox.mit-license.org/
5 | */
6 | code[class*="language-"],
7 | pre[class*="language-"] {
8 | -moz-tab-size: 2;
9 | -o-tab-size: 2;
10 | tab-size: 2;
11 | -webkit-hyphens: none;
12 | -moz-hyphens: none;
13 | -ms-hyphens: none;
14 | hyphens: none;
15 | white-space: pre;
16 | white-space: pre-wrap;
17 | word-wrap: normal;
18 | font-family: Menlo, Monaco, "Courier New", monospace;
19 | font-size: 14px;
20 | color: #76d9e6;
21 | text-shadow: none;
22 | }
23 |
24 | pre > code[class*="language-"] {
25 | font-size: 1em;
26 | }
27 |
28 | pre[class*="language-"],
29 | :not(pre) > code[class*="language-"] {
30 | background: #2a2a2a;
31 | }
32 |
33 | pre[class*="language-"] {
34 | padding: 15px;
35 | border-radius: 4px;
36 | border: 1px solid #e1e1e8;
37 | overflow: auto;
38 | position: relative;
39 | }
40 |
41 | pre[class*="language-"] code {
42 | white-space: pre;
43 | display: block;
44 | }
45 |
46 | :not(pre) > code[class*="language-"] {
47 | padding: 0.15em 0.2em 0.05em;
48 | border-radius: .3em;
49 | border: 0.13em solid #7a6652;
50 | box-shadow: 1px 1px 0.3em -0.1em #000 inset;
51 | }
52 |
53 | .token.namespace {
54 | opacity: .7;
55 | }
56 |
57 | .token.comment,
58 | .token.prolog,
59 | .token.doctype,
60 | .token.cdata {
61 | color: #6f705e;
62 | }
63 |
64 | .token.operator,
65 | .token.boolean,
66 | .token.number {
67 | color: #a77afe;
68 | }
69 |
70 | .token.attr-name,
71 | .token.string {
72 | color: #e6d06c;
73 | }
74 |
75 | .token.entity,
76 | .token.url,
77 | .language-css .token.string,
78 | .style .token.string {
79 | color: #e6d06c;
80 | }
81 |
82 | .token.selector,
83 | .token.inserted {
84 | color: #a6e22d;
85 | }
86 |
87 | .token.atrule,
88 | .token.attr-value,
89 | .token.keyword,
90 | .token.important,
91 | .token.deleted {
92 | color: #ef3b7d;
93 | }
94 |
95 | .token.regex,
96 | .token.statement {
97 | color: #76d9e6;
98 | }
99 |
100 | .token.placeholder,
101 | .token.variable {
102 | color: #fff;
103 | }
104 |
105 | .token.important,
106 | .token.statement,
107 | .token.bold {
108 | font-weight: bold;
109 | }
110 |
111 | .token.punctuation {
112 | color: #bebec5;
113 | }
114 |
115 | .token.entity {
116 | cursor: help;
117 | }
118 |
119 | .token.italic {
120 | font-style: italic;
121 | }
122 |
123 | code.language-markup {
124 | color: #f9f9f9;
125 | }
126 |
127 | code.language-markup .token.tag {
128 | color: #ef3b7d;
129 | }
130 |
131 | code.language-markup .token.attr-name {
132 | color: #a6e22d;
133 | }
134 |
135 | code.language-markup .token.attr-value {
136 | color: #e6d06c;
137 | }
138 |
139 | code.language-markup .token.style,
140 | code.language-markup .token.script {
141 | color: #76d9e6;
142 | }
143 |
144 | code.language-markup .token.script .token.keyword {
145 | color: #76d9e6;
146 | }
147 |
148 | /* Line highlight plugin */
149 | pre[class*="language-"][data-line] {
150 | position: relative;
151 | padding: 1em 0 1em 3em;
152 | }
153 |
154 | pre[data-line] .line-highlight {
155 | position: absolute;
156 | left: 0;
157 | right: 0;
158 | padding: 0;
159 | margin-top: 1em;
160 | background: rgba(255, 255, 255, 0.08);
161 | pointer-events: none;
162 | line-height: inherit;
163 | white-space: pre;
164 | }
165 |
166 | pre[data-line] .line-highlight:before,
167 | pre[data-line] .line-highlight[data-end]:after {
168 | content: attr(data-start);
169 | position: absolute;
170 | top: .4em;
171 | left: .6em;
172 | min-width: 1em;
173 | padding: 0.2em 0.5em;
174 | background-color: rgba(255, 255, 255, 0.4);
175 | color: black;
176 | font: bold 65%/1 sans-serif;
177 | height: 1em;
178 | line-height: 1em;
179 | text-align: center;
180 | border-radius: 999px;
181 | text-shadow: none;
182 | box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
183 | }
184 |
185 | pre[data-line] .line-highlight[data-end]:after {
186 | content: attr(data-end);
187 | top: auto;
188 | bottom: .4em;
189 | }
190 |
--------------------------------------------------------------------------------
/src/plugins/prism/themes/prism-z-touch.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Z-Toch
3 | * by Zeel Codder
4 | * https://github.com/zeel-codder
5 | *
6 | */
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #22da17;
10 | font-family: monospace;
11 | text-align: left;
12 | white-space: pre;
13 | word-spacing: normal;
14 | word-break: normal;
15 | word-wrap: normal;
16 | -moz-tab-size: 4;
17 | -o-tab-size: 4;
18 | tab-size: 4;
19 | -webkit-hyphens: none;
20 | -moz-hyphens: none;
21 | -ms-hyphens: none;
22 | hyphens: none;
23 | line-height: 25px;
24 | font-size: 18px;
25 | margin: 5px 0;
26 | }
27 |
28 | pre[class*="language-"] * {
29 | font-family: monospace;
30 | }
31 |
32 | :not(pre) > code[class*="language-"],
33 | pre[class*="language-"] {
34 | color: white;
35 | background: #0a143c;
36 | padding: 22px;
37 | }
38 |
39 | /* Code blocks */
40 | pre[class*="language-"] {
41 | padding: 1em;
42 | margin: 0.5em 0;
43 | overflow: auto;
44 | }
45 |
46 | pre[class*="language-"]::-moz-selection,
47 | pre[class*="language-"] ::-moz-selection,
48 | code[class*="language-"]::-moz-selection,
49 | code[class*="language-"] ::-moz-selection {
50 | text-shadow: none;
51 | background: rgba(29, 59, 83, 0.99);
52 | }
53 |
54 | pre[class*="language-"]::selection,
55 | pre[class*="language-"] ::selection,
56 | code[class*="language-"]::selection,
57 | code[class*="language-"] ::selection {
58 | text-shadow: none;
59 | background: rgba(29, 59, 83, 0.99);
60 | }
61 |
62 | @media print {
63 | code[class*="language-"],
64 | pre[class*="language-"] {
65 | text-shadow: none;
66 | }
67 | }
68 |
69 | :not(pre) > code[class*="language-"] {
70 | padding: 0.1em;
71 | border-radius: 0.3em;
72 | white-space: normal;
73 | }
74 |
75 | .token.comment,
76 | .token.prolog,
77 | .token.cdata {
78 | color: rgb(99, 119, 119);
79 | font-style: italic;
80 | }
81 |
82 | .token.punctuation {
83 | color: rgb(199, 146, 234);
84 | }
85 |
86 | .namespace {
87 | color: rgb(178, 204, 214);
88 | }
89 |
90 | .token.deleted {
91 | color: rgba(239, 83, 80, 0.56);
92 | font-style: italic;
93 | }
94 |
95 | .token.symbol,
96 | .token.property {
97 | color: rgb(128, 203, 196);
98 | }
99 |
100 | .token.tag,
101 | .token.operator,
102 | .token.keyword {
103 | color: rgb(127, 219, 202);
104 | }
105 |
106 | .token.boolean {
107 | color: rgb(255, 88, 116);
108 | }
109 |
110 | .token.number {
111 | color: rgb(247, 140, 108);
112 | }
113 |
114 | .token.constant,
115 | .token.function,
116 | .token.builtin,
117 | .token.char {
118 | color: rgb(34 183 199);
119 | }
120 |
121 | .token.selector,
122 | .token.doctype {
123 | color: rgb(199, 146, 234);
124 | font-style: italic;
125 | }
126 |
127 | .token.attr-name,
128 | .token.inserted {
129 | color: rgb(173, 219, 103);
130 | font-style: italic;
131 | }
132 |
133 | .token.string,
134 | .token.url,
135 | .token.entity,
136 | .language-css .token.string,
137 | .style .token.string {
138 | color: rgb(173, 219, 103);
139 | }
140 |
141 | .token.class-name,
142 | .token.atrule,
143 | .token.attr-value {
144 | color: rgb(255, 203, 139);
145 | }
146 |
147 | .token.regex,
148 | .token.important,
149 | .token.variable {
150 | color: rgb(214, 222, 235);
151 | }
152 |
153 | .token.important,
154 | .token.bold {
155 | font-weight: bold;
156 | }
157 |
158 | .token.italic {
159 | font-style: italic;
160 | }
161 |
--------------------------------------------------------------------------------
/src/scss/core/_base.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/16
3 | * @author: 小红
4 | * @fileName: body
5 | * @Description: 样式
6 | */
7 | @use "_util";
8 |
9 | body {
10 | @include util.useThemeVar((
11 | text-color:(rgb(76, 73, 72), rgba(255, 255, 255, 0.7)),
12 | mask-color:(rgba(255, 255, 255, 0.6), rgba(0, 0, 0, 0.6)),
13 | ));
14 |
15 | & {
16 | font-family: "Butterfly Font", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
17 | font-size: 14px;
18 | line-height: 2;
19 | -webkit-tap-highlight-color: transparent;
20 | -webkit-text-size-adjust: 100%;
21 | overflow-y: overlay;
22 | scroll-behavior: smooth;
23 | padding-bottom: env(safe-area-inset-bottom);
24 | background: var(--body-background);
25 | color: var(--text-color);
26 | }
27 | }
28 |
29 | #Butterfly {
30 | position: relative;
31 | display: flex;
32 | flex-direction: column;
33 | min-height: 100vh;
34 |
35 |
36 | > .mask {
37 | @keyframes m_show {
38 | 0% {
39 | opacity: 0
40 | }
41 |
42 | 100% {
43 | opacity: 1;
44 | filter: none
45 | }
46 | }
47 |
48 | @keyframes m_hide {
49 | 0% {
50 | opacity: 1;
51 | filter: none
52 | }
53 |
54 | 100% {
55 | opacity: 0;
56 | display: none;
57 | }
58 | }
59 |
60 | & {
61 | position: fixed;
62 | display: none;
63 | z-index: 100;
64 | width: 100%;
65 | height: 100%;
66 | background-color: var(--mask-color);
67 | backdrop-filter: blur(20px) saturate(1.5);
68 | transform: translateZ(0);
69 | -webkit-transform-style: preserve-3d;
70 | }
71 |
72 | &.active {
73 | animation: 0.6s ease 0s 1 normal none running m_show;
74 | }
75 |
76 | &.hide {
77 | animation: 0.6s ease 0s 1 normal none running m_hide;
78 | }
79 |
80 | }
81 |
82 | img[data-lazy-src]:not(.loaded,.error,.loading) {
83 | filter: blur(50px) brightness(1);
84 | }
85 | }
86 |
87 | ::-webkit-scrollbar {
88 | height: 6px;
89 | width: 6px
90 | }
91 |
92 | ::-webkit-scrollbar-thumb {
93 | background: var(--theme);
94 | cursor: var(--cursor-pointer);
95 | }
96 |
97 | ::-webkit-scrollbar-track {
98 | background-color: transparent
99 | }
100 |
101 | ::selection {
102 | color: #fff;
103 | background-color: #00c4b6;
104 | }
105 |
106 |
--------------------------------------------------------------------------------
/src/scss/core/_button.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/23
3 | * @author: 小红
4 | * @fileName: button
5 | * @Description: 按钮
6 | */
7 |
8 | @use "util";
9 |
10 | //定义变量
11 | @include util.useThemeVar((
12 | button-text-color:(
13 | rgba(255, 255, 255, 1),
14 | rgba(255, 255, 255, 0.7)
15 | ),
16 | button-background-color:(
17 | var(--theme),
18 | var(--theme)
19 | ),
20 | button-hover-background-color:(
21 | lighten(#49b1f5, 10%),
22 | #fff
23 | )
24 | ));
25 |
26 |
27 | @mixin button() {
28 | @keyframes slide-in-top {
29 | 0% {
30 | transform: scale(0);
31 | opacity: 0;
32 | }
33 |
34 | 100% {
35 | opacity: 1;
36 | }
37 | }
38 |
39 | .button {
40 | @include util.flex-center;
41 | position: relative;
42 | border-radius: 10px;
43 | background-color: var(--theme);
44 | color: var(--button-text-color);
45 | transition: filter 0.35s, transform 0.35s;
46 |
47 | &:active {
48 | transform: scale(0.96);
49 | }
50 |
51 | &:hover {
52 | filter: hue-rotate(100deg);
53 | }
54 |
55 | }
56 | }
57 |
58 | @include button;
--------------------------------------------------------------------------------
/src/scss/core/_message.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/5/17
3 | * @author: 小红
4 | * @fileName: _message
5 | * @Description: 消息提示
6 | */
7 |
8 | @use "_util";
9 |
10 |
11 | .message {
12 | //@keyframes messageMoveOut {
13 | // 0% {
14 | // opacity: 1
15 | // }
16 | //
17 | // to {
18 | // padding: 0;
19 | // opacity: 0
20 | // }
21 | //}
22 | //
23 | //@keyframes MessageMoveIn {
24 | // 0% {
25 | // transform: translateY(-100%);
26 | // transform-origin: 0 0;
27 | // opacity: 0
28 | // }
29 | //
30 | // to {
31 | // transform: translateY(0);
32 | // transform-origin: 0 0;
33 | // opacity: 1
34 | // }
35 | //}
36 |
37 | &-container {
38 | z-index: 10000;
39 | position: fixed;
40 | height: 0;
41 | overflow: visible;
42 | display: flex;
43 | flex-direction: column;
44 | align-items: center;
45 | top: 12px;
46 | left: 0;
47 | right: 0;
48 | }
49 |
50 |
51 | &-wrapper {
52 | margin: 0 0 8px 0;
53 | z-index: 0;
54 | transform-origin: top center;
55 | display: flex;
56 | }
57 |
58 | &-item {
59 | display: flex;
60 | align-items: center;
61 | padding: .3rem .8rem;
62 | border-radius: 3px;
63 | flex-wrap: nowrap;
64 | overflow: hidden;
65 | max-width: 720px;
66 | color: rgb(51, 54, 57);
67 | background-color: #fff;
68 | flex-shrink: 0;
69 | box-shadow: 0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05);
70 |
71 | svg {
72 | width: 20px;
73 | height: 20px;
74 | margin-right: 8px;
75 | }
76 | }
77 |
78 |
79 | }
--------------------------------------------------------------------------------
/src/scss/core/_reset.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/16
3 | * @author: 小红
4 | * @fileName: reset
5 | * @Description: 重置
6 | */
7 | *, ::after, ::before {
8 | box-sizing: border-box;
9 | cursor: inherit;
10 | }
11 |
12 | h1, h2, h3, h4, h5, h6 {
13 | font-size: inherit;
14 | font-weight: inherit;
15 | }
16 |
17 | a {
18 | color: inherit;
19 | text-decoration: inherit;
20 | overflow-wrap: break-word;
21 | transition: color .3s;
22 | }
23 |
24 | b, strong {
25 | font-weight: bolder
26 | }
27 |
28 | code, kbd, pre, samp {
29 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
30 | font-feature-settings: normal;
31 | font-variation-settings: normal;
32 | font-size: 1em
33 | }
34 |
35 | small {
36 | font-size: 80%
37 | }
38 |
39 | sub, sup {
40 | font-size: 75%;
41 | line-height: 0;
42 | position: relative;
43 | vertical-align: baseline
44 | }
45 |
46 | sub {
47 | bottom: -.25em
48 | }
49 |
50 | sup {
51 | top: -.5em
52 | }
53 |
54 | table {
55 | text-indent: 0;
56 | border-color: inherit;
57 | border-collapse: collapse;
58 | border-spacing: 0
59 | }
60 |
61 | button, input, optgroup, select, textarea {
62 | font-family: inherit;
63 | font-feature-settings: inherit;
64 | font-variation-settings: inherit;
65 | font-size: 100%;
66 | font-weight: inherit;
67 | line-height: inherit;
68 | color: inherit;
69 | margin: 0;
70 | padding: 0;
71 | border: none;
72 | }
73 |
74 | button, select {
75 | text-transform: none
76 | }
77 |
78 | [type=button], [type=reset], [type=submit], button {
79 | -webkit-appearance: button;
80 | background-color: transparent;
81 | background-image: none
82 | }
83 |
84 | progress {
85 | vertical-align: baseline
86 | }
87 |
88 | ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
89 | height: auto
90 | }
91 |
92 | [type=search] {
93 | -webkit-appearance: textfield;
94 | outline-offset: -2px
95 | }
96 |
97 | ::-webkit-search-decoration {
98 | -webkit-appearance: none
99 | }
100 |
101 | ::-webkit-file-upload-button {
102 | -webkit-appearance: button;
103 | font: inherit
104 | }
105 |
106 | summary {
107 | display: list-item
108 | }
109 |
110 | blockquote, dd, dl, figure, h1, h2, h3, h4, h5, h6, hr, p, pre {
111 | margin: 0
112 | }
113 |
114 | fieldset, body {
115 | margin: 0;
116 | padding: 0
117 | }
118 |
119 | dialog, legend {
120 | padding: 0
121 | }
122 |
123 | menu, ol, ul {
124 | list-style: none;
125 | margin: 0;
126 | padding: 0
127 | }
128 |
129 | textarea {
130 | resize: vertical
131 | }
132 |
133 | input::placeholder, textarea::placeholder {
134 | opacity: 1;
135 | color: #9ca3af
136 | }
137 |
138 | [role=button], button {
139 | cursor: pointer
140 | }
141 |
142 | :disabled {
143 | cursor: default
144 | }
145 |
146 | audio, canvas, embed, iframe, img, object, svg, video {
147 | vertical-align: middle
148 | }
149 |
150 | img, video {
151 | max-width: 100%;
152 | height: auto;
153 | transition: transform .25s;
154 | object-fit: cover;
155 | }
156 |
157 | [hidden] {
158 | display: none
159 | }
--------------------------------------------------------------------------------
/src/scss/core/_util.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/16
3 | * @author: 小红
4 | * @fileName: utilities
5 | * @Description: 工具
6 | */
7 |
8 | $w-sm: 640px;
9 | $w-md: 768px;
10 | $w-lg: 1024px;
11 | $w-xl: 1280px;
12 | $w-2xl: 1536px;
13 |
14 | /**
15 | 变量
16 | */
17 | @mixin useThemeVar($vars) {
18 | @at-root html {
19 | &[data-color-scheme='light'] {
20 | @each $key, $value in $vars {
21 | --#{$key}: #{nth($value,1)};
22 | }
23 | }
24 |
25 | &[data-color-scheme='dark'] {
26 | @each $key, $value in $vars {
27 | --#{$key}: #{nth($value,2)};
28 | }
29 | }
30 | }
31 | }
32 |
33 |
34 | //$size 表示最大最小
35 | @mixin useResponsive($width,$level:'&',$size:max) {
36 | $unit: #{$size}-width;
37 |
38 | $maps: (
39 | '&':&, // 子级 不带 #
40 | '#&':#Butterfly#{&}, // 带 #
41 | '# &':#Butterfly &, // 子级 不带 #
42 | );
43 |
44 | $selector: map-get($maps, $level);
45 |
46 | @at-root #{$selector} {
47 | @media ($unit: $width) {
48 | @content;
49 | }
50 | }
51 |
52 | }
53 |
54 |
55 | //居中
56 | @mixin flex-center {
57 | display: flex;
58 | justify-content: center;
59 | align-items: center;
60 | }
61 |
62 | // 1行文字省略号
63 | @mixin text-overflow {
64 | overflow: hidden;
65 | text-overflow: ellipsis;
66 | white-space: nowrap;
67 | }
68 |
69 | @mixin wh100 {
70 | width: 100%;
71 | height: 100%;
72 | }
73 |
74 |
75 | @mixin text-clamp($clamp:1) {
76 | display: -webkit-box;
77 | overflow: hidden;
78 | text-overflow: ellipsis;
79 | -webkit-line-clamp: $clamp;
80 | -webkit-box-orient: vertical;
81 | }
82 |
83 |
--------------------------------------------------------------------------------
/src/scss/core/aside.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/18
3 | * @author: 小红
4 | * @fileName: aside
5 | * @Description: 侧部栏
6 | */
7 |
8 | @use "util";
9 |
10 | .aside {
11 | .card {
12 | padding: 16px 23px;
13 |
14 | &:not(:first-child) {
15 | margin-top: 15px;
16 | }
17 |
18 | > .title {
19 | font-size: 1rem;
20 | font-weight: 600;
21 | margin-bottom: 5px;
22 |
23 | > i {
24 | margin-right: 2px;
25 | font-size: 1.1rem;
26 | }
27 | }
28 | }
29 |
30 | &-user {
31 | text-align: center;
32 |
33 | > .avatar {
34 | width: 110px;
35 | height: 110px;
36 | border-radius: 70px;
37 | transition: transform .3s;
38 | margin: 0 auto;
39 |
40 | &:hover {
41 | filter: brightness(1.2);
42 | transform: rotate(360deg);
43 | cursor: var(--cursor-pointer);
44 | }
45 | }
46 |
47 | > .name {
48 | font-size: 1.5rem;
49 | margin: 6px 0 -5px 0;
50 | }
51 |
52 | > .data {
53 | display: table;
54 | margin: 14px 0 4px;
55 | table-layout: fixed;
56 | width: 100%;
57 |
58 | .item {
59 | display: table-cell;
60 | }
61 |
62 | .headline {
63 | font-size: 1rem;
64 | }
65 |
66 | .num {
67 | font-size: 1.4rem;
68 | color: var(--text-obs-color);
69 | }
70 |
71 | }
72 |
73 | > a > .button {
74 | width: 95%;
75 | margin: 0 auto;
76 | padding: 5px 10px;
77 | }
78 |
79 | .social {
80 | display: flex;
81 | justify-content: center;
82 | line-height: 1;
83 | margin: 15px 0 0;
84 |
85 | > .link {
86 | font-size: 1.35em;
87 | margin: 0 8px;
88 | transition: transform .3s;
89 |
90 | &:hover {
91 | transform: scale(1.1);
92 | }
93 | }
94 | }
95 | }
96 |
97 | &-notice {
98 | > .title > i {
99 | color: rgb(246, 8, 8);
100 | }
101 | }
102 |
103 | &-category {
104 | > .title > i {
105 | color: #108aec;
106 | }
107 |
108 | > .content {
109 | > .link {
110 | display: flex;
111 | position: relative;
112 | flex-direction: row;
113 | padding: 3px 10px 3px 25px;
114 |
115 | &:hover {
116 | filter: hue-rotate(38deg);
117 |
118 | .name {
119 | transform: translateX(5px);
120 | }
121 | }
122 |
123 | &:before {
124 | position: absolute;
125 | top: 8px;
126 | left: 0;
127 | width: 14px;
128 | height: 14px;
129 | border: 4px solid var(--theme);
130 | border-radius: 50%;
131 | background: 0 0;
132 | content: "";
133 | cursor: var(--cursor-pointer);
134 | transition: border-color .3s, box-shadow .25s ease 0s;
135 | }
136 |
137 | > .name {
138 | width: 75%;
139 | margin-right: auto;
140 | transition: transform .3s;
141 | }
142 |
143 | > span {
144 | @include util.text-overflow;
145 | }
146 | }
147 | }
148 | }
149 |
150 | &-tags {
151 | > .title > i {
152 | color: #cf9128;
153 | }
154 |
155 | > .content {
156 | display: flex;
157 | flex-direction: row;
158 | flex-wrap: wrap;
159 |
160 | > .link {
161 | transition: transform .2s;
162 | padding: 0 4px;
163 |
164 | > .num {
165 | font-size: 0.7rem;
166 | }
167 |
168 | &:hover {
169 | transform: translateY(-3px);
170 | }
171 | }
172 | }
173 | }
174 |
175 | &-webInfo {
176 | > .title > i {
177 | color: #30b786;
178 | }
179 |
180 | .content {
181 | > .item {
182 | padding: 5px 0;
183 | display: flex;
184 | align-items: center;
185 | justify-content: space-between;
186 | }
187 | }
188 | }
189 | }
--------------------------------------------------------------------------------
/src/scss/core/footer.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/2/16
3 | * @author: 小红
4 | * @fileName: footer
5 | * @Description: footer
6 | */
7 | .footer {
8 | text-align: center;
9 | padding: 1.5rem 1rem;
10 |
11 | .halo {
12 | color: #2f55d4;
13 | }
14 |
15 | .theme {
16 | color: var(--theme);
17 | }
18 |
19 | .police {
20 | display: flex;
21 | align-items: center;
22 | justify-content: center;
23 |
24 | img {
25 | transition: none;
26 | margin-right: 5px;
27 | top: -2px;
28 | }
29 |
30 | }
31 |
32 | a:hover {
33 | color: var(--theme);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/scss/core/header.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/24
3 | * @author: 小红
4 | * @fileName: header
5 | * @Description: 头部
6 | */
7 | @use "util";
8 |
9 | .header {
10 | @import "nav";
11 |
12 | & {
13 | position: relative;
14 | width: 100%;
15 | min-height: 60px;
16 | }
17 |
18 | @keyframes above-down {
19 | 0% {
20 | opacity: 0;
21 | transform: translate3d(0, -50px, 0)
22 | }
23 |
24 | to {
25 | opacity: 1;
26 | transform: translate3d(0, 0, 0)
27 | }
28 | }
29 |
30 |
31 | .above {
32 | position: relative;
33 | width: 100%;
34 | height: 500px;
35 | background-position: center center;
36 | background-size: cover;
37 | background-repeat: no-repeat;
38 | backface-visibility: hidden;
39 | //animation: above-down .8s;
40 | transition: .35s;
41 | background-blend-mode: multiply;
42 | background-color: var(--above-mask-color);
43 | @include util.flex-center;
44 |
45 | @include util.useThemeVar((
46 | above-mask-color:(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.6)),
47 | ));
48 |
49 | //&::before {
50 | // position: absolute;
51 | // width: 100%;
52 | // height: 100%;
53 | // background-color: var(--above-mask-color);
54 | // content: '';
55 | //}
56 |
57 | &-info {
58 | width: 100%;
59 | position: absolute;
60 | padding: 0 10px;
61 | text-align: center;
62 | }
63 |
64 | &-title {
65 | @keyframes above-title-scale {
66 | 0% {
67 | opacity: 0;
68 | transform: scale(.7)
69 | }
70 |
71 | 100% {
72 | opacity: 1;
73 | transform: scale(1)
74 | }
75 | }
76 |
77 | @include util.useThemeVar((
78 | above-title-color: (rgb(255, 255, 255), rgba(255, 255, 255, 0.9)),
79 | ));
80 |
81 | @include util.useResponsive(util.$w-md) {
82 | font-size: 1.85em;
83 | }
84 |
85 | & {
86 | font-size: 2.3em;
87 | text-shadow: 2px 2px 4px rgba(0, 0, 0, .15);
88 | line-height: 1.5;
89 | font-weight: 700;
90 | color: var(--above-title-color);
91 | animation: above-title-scale 1s;
92 | }
93 | }
94 | }
95 |
96 | &.dp .nav {
97 | background-color: var(--nav-active-background-color);
98 | box-shadow: var(--nav-active-shadow);
99 |
100 | .link {
101 | text-shadow: none;
102 | color: var(--nav-active-font-color);
103 | }
104 | }
105 | }
106 |
107 |
--------------------------------------------------------------------------------
/src/scss/core/index.scss:
--------------------------------------------------------------------------------
1 | @use "_reset";
2 | @use "_base";
3 | @use "_message";
4 | @use "_button";
5 | @use "common";
6 | @use "header";
7 | @use "main";
8 | @use "footer";
9 | @import 'animate.css/animate.min.css';
10 |
--------------------------------------------------------------------------------
/src/scss/core/main.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/18
3 | * @author: 小红
4 | * @fileName: main
5 | * @Description: main
6 | */
7 | @use "util";
8 |
9 | .main {
10 | @import "aside";
11 |
12 | @include util.useThemeVar((
13 | card-background-color: (rgba(255, 255, 255, 1), rgba(40, 47, 62, 0.9)),
14 | ));
15 |
16 |
17 | & {
18 | width: 100%;
19 | display: flex;
20 | margin: 0 auto;
21 | max-width: 1250px;
22 | padding: 28px 15px;
23 | flex-direction: row;
24 | }
25 |
26 | .card {
27 | background-color: var(--card-background-color);
28 | border-radius: var(--card-border-radius);
29 | box-shadow: var(--card-box-shadow);
30 | transition: transform .25s, box-shadow .25s;
31 |
32 | &:hover {
33 | box-shadow: 0 3px 8px 6px rgba(7, 17, 27, 0.09);
34 | }
35 | }
36 |
37 |
38 | > .content {
39 | width: 100%;
40 | align-self: flex-start;
41 | padding: 1.5rem;
42 |
43 | @include util.useResponsive($width: util.$w-md) {
44 | padding: 1.2rem .8rem;
45 | }
46 | }
47 |
48 | > .aside {
49 | width: 25%;
50 | align-self: flex-start;
51 | }
52 |
53 | &.off-aside > .content {
54 | width: 100%;
55 | }
56 |
57 | &.aside-left {
58 | flex-direction: row-reverse;
59 |
60 | > .content {
61 | width: 74%;
62 | }
63 | }
64 |
65 | &.aside-right {
66 | flex-direction: row;
67 |
68 | > .content {
69 | width: 74%;
70 | }
71 | }
72 |
73 | &:is(.aside-left) .aside {
74 | margin-right: 18px;
75 | }
76 |
77 | &:is(.aside-right) .aside {
78 | margin-left: 18px;
79 | }
80 |
81 |
82 | @include util.useResponsive(1100px, '# &') {
83 | flex-direction: column;
84 | > .content {
85 | width: 100%;
86 | }
87 | > .aside {
88 | width: 100%;
89 | margin: 20px 0 0;
90 | }
91 | }
92 |
93 | @include util.useResponsive(util.$w-md) {
94 | padding: 18px 8px;
95 | }
96 |
97 | @include util.useResponsive($width: 2000px, $size: min) {
98 | max-width: 60%;
99 | }
100 |
101 | }
--------------------------------------------------------------------------------
/src/scss/page/archives.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/4/30
3 | * @author: 小红
4 | * @fileName: archives
5 | * @Description: 归档
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 |
12 | .archives {
13 | .chart {
14 | width: 100%;
15 | height: 380px;
16 | }
17 |
18 | .axis {
19 | @include util.useThemeVar((
20 | axis-line-background-color: (#fff, rgba(40, 47, 62, 0.9)),
21 | ));
22 |
23 | &-title {
24 | position: relative;
25 | margin-left: 18px;
26 | padding-bottom: 20px;
27 | padding-left: 18px;
28 | font-size: 1.5rem;
29 |
30 | &:before {
31 | position: absolute;
32 | top: calc(((100% - 48px) / 2));
33 | left: -9px;
34 | z-index: 1;
35 | width: 10px;
36 | height: 10px;
37 | border-radius: 10px;
38 | background-color: var(--axis-line-background-color);
39 | content: '';
40 | line-height: 10px;
41 | transition: color .2s ease-in-out;
42 | border: 5px solid var(--theme);
43 | box-sizing: content-box;
44 | }
45 |
46 |
47 | &:after {
48 | position: absolute;
49 | bottom: 0;
50 | left: 0;
51 | z-index: 0;
52 | width: 2px;
53 | height: 1.8em;
54 | background-color: var(--theme);
55 | content: '';
56 | top: 28px;
57 | }
58 | }
59 |
60 | &-list {
61 | margin-left: 18px;
62 | padding-left: 20px;
63 | border-left: 2px solid var(--theme);
64 |
65 | &--item {
66 | margin: 0 0 20px 10px;
67 | transition: .2s ease-in-out;
68 | position: relative;
69 | display: flex;
70 | align-items: center;
71 |
72 | &:before {
73 | position: absolute;
74 | left: calc(-20px - 17px);
75 | width: 6px;
76 | height: 6px;
77 | border-radius: 6px;
78 | background-color: var(--axis-line-background-color);
79 | content: '';
80 | border: 3px solid var(--theme);
81 | box-sizing: content-box;
82 | margin: auto;
83 | top: 0;
84 | bottom: 0;
85 | }
86 |
87 | &.year {
88 | font-size: 1.43em;
89 |
90 | &:before {
91 | filter: hue-rotate(135deg);
92 | top: 10px;
93 | margin: 0;
94 | }
95 | }
96 |
97 | &:hover {
98 | &:before {
99 | filter: hue-rotate(135deg);
100 | }
101 | }
102 |
103 | .cover {
104 | width: 6rem;
105 | height: 6rem;
106 | border-radius: 8px;
107 | transition: transform .3s;
108 | @include util.text-overflow;
109 | position: relative;
110 |
111 | img {
112 | width: 100%;
113 | height: 100%;
114 | object-fit: cover;
115 |
116 | &:hover {
117 | transform: scale(1.1);
118 | }
119 | }
120 | }
121 |
122 | .info {
123 | padding: 0 16px;
124 | flex: 1;
125 |
126 | time {
127 | color: var(--text-obs-color);
128 | font-size: 95%;
129 | }
130 |
131 | .title {
132 | font-size: 1rem;
133 | transition: transform .3s;
134 | @include util.text-clamp(2);
135 |
136 | &:hover {
137 | color: var(--link-hover-color);
138 | //transform: translateX(10px);
139 | }
140 | }
141 | }
142 | }
143 | }
144 | }
145 |
146 | @include components.pagination;
147 | }
--------------------------------------------------------------------------------
/src/scss/page/categories.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/19
3 | * @author: 小红
4 | * @fileName: categories
5 | * @Description: 分类
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 |
12 | .categories {
13 | .chart {
14 | width: 100%;
15 | height: 450px;
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/src/scss/page/category.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/19
3 | * @author: 小红
4 | * @fileName: categories
5 | * @Description: 分类
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 |
12 | .category {
13 | .main {
14 | > .content {
15 | padding: 0;
16 | }
17 | }
18 |
19 | @include components.essayList;
20 | @include components.pagination;
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/src/scss/page/index.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/1/18
3 | * @author: 小红
4 | * @fileName: index
5 | * @Description: 首页
6 | */
7 | @use '../core';
8 | @use "../core/util";
9 | @use "../modules/components";
10 |
11 |
12 | .index {
13 | .header .above {
14 | height: 100vh;
15 |
16 | @include util.useThemeVar((
17 | above-index-subtitle-color: (#eee, rgba(255, 255, 255, 0.7)),
18 | ));
19 |
20 | &-subtitle {
21 | font-size: 1.5em;
22 | line-height: 1.5;
23 | color: var(--above-index-subtitle-color);
24 | text-shadow: 2px 2px 4px rgba(0, 0, 0, .15);
25 | animation: above-title-scale 1s;
26 |
27 | @include util.useResponsive(util.$w-md) {
28 | font-size: 1.15em;
29 | }
30 | }
31 | }
32 |
33 | .main {
34 | > .content {
35 | padding: 0;
36 | }
37 | }
38 |
39 | @include components.essayList;
40 | @include components.pagination;
41 | }
42 |
43 |
--------------------------------------------------------------------------------
/src/scss/page/links.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/19
3 | * @author: 小红
4 | * @fileName: links
5 | * @Description: 链接
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 |
12 | .links {
13 | .groups {
14 | --w: 60px;
15 |
16 | .item {
17 | .name {
18 | font-size: 1.2rem;
19 | margin: 15px 0;
20 | }
21 |
22 | .logo {
23 | width: var(--w);
24 | height: 60px;
25 | border-radius: 50%;
26 | transition: width .3s;
27 | }
28 |
29 | .list {
30 | display: grid;
31 | grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
32 | gap: 16px;
33 | }
34 |
35 |
36 | .link {
37 | padding: 16px;
38 | display: flex;
39 | align-items: center;
40 | gap: 16px;
41 | text-decoration: none;
42 | transition: .3s;
43 | position: relative;
44 | overflow: hidden;
45 | height: 100px;
46 | border: 3px solid #eef1ef;
47 | border-radius: 15px;
48 |
49 | &:hover {
50 | border-color: var(--theme);
51 | }
52 |
53 | .info {
54 | width: calc(100% - var(--w) - 16px);
55 | display: flex;
56 | flex-direction: column;
57 | justify-content: space-between;
58 | }
59 |
60 | .n {
61 | @include util.text-clamp(1);
62 | font-size: .9rem;
63 | font-weight: 700;
64 | }
65 |
66 | .d {
67 | @include util.text-clamp(2);
68 | line-height: 1.3;
69 | font-size: .8rem;
70 | }
71 | }
72 | }
73 |
74 | }
75 | }
76 |
77 |
78 |
--------------------------------------------------------------------------------
/src/scss/page/moments.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/21
3 | * @author: 小红
4 | * @fileName: moments
5 | * @Description: 瞬间
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 | @use "../modules/render";
12 |
13 | .moments {
14 |
15 | @include util.useThemeVar((
16 | m-color: (#363636, #F7F7FA),
17 | ));
18 |
19 |
20 | .content {
21 | > .list {
22 |
23 | .item {
24 | margin-bottom: 15px;
25 | padding: 10px;
26 | //border-radius: 10px;
27 | //box-shadow: 1px 1px 5px 0 #d8d8d8;
28 | border-bottom: var(--theme) dashed 1px;
29 | }
30 |
31 | .h {
32 | font-weight: 700;
33 | color: var(--m-color);
34 | font-size: .8rem;
35 | }
36 |
37 | .medium {
38 | display: flex;
39 | flex-direction: row;
40 | flex-wrap: wrap;
41 |
42 | img, video, audio {
43 | width: 170px;
44 | height: 110px;
45 | border-radius: 5px;
46 | margin-right: 10px;
47 | }
48 |
49 | video {
50 | object-fit: cover;
51 | object-position: center;
52 | }
53 | }
54 |
55 | .in {
56 |
57 | }
58 | }
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/src/scss/page/post.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/3/16
3 | * @author: 小红
4 | * @fileName: post
5 | * @Description: 文章
6 | */
7 | @use '../core';
8 | @use "../core/util";
9 | @use "../modules/components";
10 | @use "../modules/render";
11 |
12 | .post {
13 | .header .above {
14 | &-info {
15 | padding: 0 8%;
16 | transition: bottom .3s, padding .3s;
17 | text-align: center;
18 |
19 | @include util.useResponsive(900px) {
20 | bottom: 30px;
21 | text-align: left;
22 | }
23 |
24 | @include util.useResponsive(util.$w-md) {
25 | bottom: 22px;
26 | padding: 0 22px;
27 | }
28 | }
29 | }
30 |
31 | //.main > .content {
32 | // padding: 1.5rem 1.8rem;
33 | //}
34 |
35 | @include util.useThemeVar((
36 | post-title-color: (#ffffff, rgba(255, 255, 255, 0.9)),
37 | post-meta-color: (#eeeeee, rgba(255, 255, 255, 0.7)),
38 | ));
39 |
40 | &-title {
41 | font-weight: 400;
42 | margin-bottom: 8px;
43 | color: var(--post-title-color);
44 | font-size: 2.2rem;
45 | line-height: 1.5;
46 | transition: font-size .3s;
47 | @include util.text-clamp(3);
48 |
49 | @include util.useResponsive(util.$w-md) {
50 | font-size: 1.8rem;
51 | }
52 |
53 | @include util.useResponsive(650px) {
54 | font-size: 1.5rem;
55 | }
56 | }
57 |
58 | &-meta {
59 | color: var(--post-meta-color);
60 | font-size: 95%;
61 | user-select: none;
62 |
63 | .row {
64 | .wp:not(:last-child):after {
65 | content: '|';
66 | margin: 0 5px;
67 | }
68 |
69 | .wp.category, .wp.tag {
70 | .lk:not(:last-child):after {
71 | content: '•';
72 | margin: 0 5px;
73 | color: var(--post-meta-color);
74 | }
75 | }
76 |
77 | }
78 | }
79 | }
--------------------------------------------------------------------------------
/src/scss/page/single.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/21
3 | * @author: 小红
4 | * @fileName: single
5 | * @Description: 自定义页面
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 | @use "../modules/render";
12 |
13 | .single {
14 |
15 | }
--------------------------------------------------------------------------------
/src/scss/page/tag.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/6/19
3 | * @author: 小红
4 | * @fileName: tag
5 | * @Description: 标签详情
6 | */
7 |
8 | @use '../core';
9 | @use "../core/util";
10 | @use "../modules/components";
11 |
12 |
13 | .tag {
14 | .main {
15 | > .content {
16 | padding: 0;
17 | }
18 | }
19 |
20 | @include components.essayList;
21 | @include components.pagination;
22 | }
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/scss/page/tags.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * @date: 2024/5/23
3 | * @author: 小红
4 | * @fileName: tags
5 | * @Description: 标签
6 | */
7 | @use '../core';
8 | @use "../core/util";
9 | @use "../modules/components";
10 |
11 | .tags {
12 | .chart {
13 | width: 100%;
14 | height: 360px;
15 | }
16 |
17 | .equinox {
18 | display: flex;
19 | flex-direction: row;
20 | flex-wrap: wrap;
21 | gap: 25px;
22 | justify-content: center;
23 |
24 | .link {
25 | position: relative;
26 | transition: transform .2s ease-in-out;
27 | font-size: 1.5em;
28 |
29 | &:hover {
30 | transform: scale(1.1);
31 | }
32 |
33 | &::before {
34 | position: absolute;
35 | content: attr(data-postCount);
36 | font-size: 75%;
37 | right: -10px;
38 | top: -5px;
39 | }
40 | }
41 | }
42 | }
43 |
44 |
45 |
--------------------------------------------------------------------------------
/theme.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: theme.halo.run/v1alpha1
2 | kind: Theme
3 | metadata:
4 | name: theme-butterfly
5 | spec:
6 | displayName: Butterfly
7 | author:
8 | name: 小红
9 | website: 'https://dhjdd.cn'
10 | description: '一个Halo博客主题,Butterfly 🦋'
11 | logo: 'https://halo.run/logo'
12 | website: 'https://dhjdd.cn'
13 | repo: 'https://github.com/dhjddcn/halo-theme-butterfly.git'
14 | settingName: theme-butterfly-setting
15 | configMapName: theme-butterfly-configMap
16 | version: 2.0.7
17 | require: 2.0.0
18 |
--------------------------------------------------------------------------------