添加忽略文件
This commit is contained in:
parent
7d523d7955
commit
eb7501de6b
|
@ -0,0 +1,22 @@
|
||||||
|
## 本地环境搭建
|
||||||
|
|
||||||
|
### 部署 Halo2.0
|
||||||
|
|
||||||
|
[使用 Docker 部署](https://docs.halo.run/2.0.0-SNAPSHOT/getting-started/install/docker)
|
||||||
|
|
||||||
|
参考相关文档,在本地部署 Halo2.0,主题目录在 `~/halo-next` 下。
|
||||||
|
|
||||||
|
本地启动需要添加配置 `-e SPRING_THYMELEAF_CACHE=FALSE` 这样可以关闭缓存,就可以实时刷新主题了。
|
||||||
|
|
||||||
|
`-e SPRING_PROFILES_ACTIVE=dev` 则可以打开 swagger-ui。
|
||||||
|
|
||||||
|
### 下载主题
|
||||||
|
|
||||||
|
下载[halo-theme-hao](https://github.com/liuzhihang/halo-theme-hao)主题,并压缩为 zip 包,然后在 halo console 控制台上传主题,此时可以在
|
||||||
|
halo 的主题路径下看到刚才上传的主题。
|
||||||
|
|
||||||
|
> 路径为
|
||||||
|
> ~/halo-next/theme
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Halo Theme Ha
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> 如果大家喜欢这个主题,请多多 star 和 fork。你的 star 和支持就是我的动力
|
||||||
|
> If you like this theme. Please star or fork.
|
||||||
|
> Halo-Theme-Ha 移植于 Hexo 社区 [Hexo-Theme-Butterfly](https://github.com/jerryc127/hexo-theme-butterfly)
|
||||||
|
> ,同时参考了 [Heo](https://blog.zhheo.com/) 的魔改
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
## 预览
|
||||||
|
|
||||||
|
## 支持的功能
|
||||||
|
|
||||||
|
- [x] 适配 Halo 最新 2.0 版本
|
||||||
|
|
||||||
|
## 更新日志
|
||||||
|
|
||||||
|
- 2022-10-05 发布
|
||||||
|
|
||||||
|
## 安装
|
||||||
|
|
||||||
|
## 支持
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
### 全站
|
||||||
|
|
||||||
|
- [ ] 自定义字体
|
||||||
|
- [ ] 自定义背景图
|
||||||
|
- [ ] 响应式主题
|
||||||
|
- [ ] 自定义社交渠道
|
||||||
|
- [ ] 页面加载条
|
||||||
|
- [ ] RSS 订阅
|
||||||
|
- [ ] 页面元数据控制 百度收录查询 + 主动推送
|
||||||
|
- [ ] 谷歌分析收录
|
||||||
|
- [ ] 全站 Pjax
|
||||||
|
- [ ] 多主题风格设置 (支持夜间模式)
|
||||||
|
- [ ] 开发者模式提示
|
||||||
|
- [ ] 复制等操作提示
|
||||||
|
|
||||||
|
### 菜单栏
|
||||||
|
|
||||||
|
- [ ] 相关链接
|
||||||
|
- [ ] Home 主页
|
||||||
|
- [ ] 多级菜单
|
||||||
|
- [ ] 随机文章
|
||||||
|
- [ ] 随机友链
|
||||||
|
- [ ] 文章搜索
|
||||||
|
- [ ] 控制台
|
||||||
|
- [ ] 滚动条百分比
|
||||||
|
|
||||||
|
### 首页
|
||||||
|
|
||||||
|
- [ ] 随机文章(背景图设置)
|
||||||
|
- [ ] 固定文章
|
||||||
|
- [ ] 推荐文章
|
||||||
|
|
||||||
|
### 导航栏
|
||||||
|
|
||||||
|
- [ ] 自定义导航目录
|
||||||
|
|
||||||
|
### 文章列表
|
||||||
|
|
||||||
|
- [ ] 自定义单栏、双栏、三栏
|
||||||
|
- [ ] 封面图缺省随机
|
||||||
|
- [ ] 文章简介控制
|
||||||
|
- [ ] 自定义分页
|
||||||
|
|
||||||
|
### 侧边栏
|
||||||
|
|
||||||
|
- [ ] 侧栏控制,左右及隐藏
|
||||||
|
|
||||||
|
#### 自我介绍
|
||||||
|
|
||||||
|
- [ ] 自定义欢迎标题
|
||||||
|
- [ ] 自定义名称
|
||||||
|
- [ ] 自定义介绍内容
|
||||||
|
- [ ] 自定义跳转
|
||||||
|
- [ ] 自定义社交渠道 < 2
|
||||||
|
|
||||||
|
#### 推广
|
||||||
|
|
||||||
|
- [ ] 公众号图配置
|
||||||
|
|
||||||
|
#### 标签
|
||||||
|
|
||||||
|
- [ ] 标签列表
|
||||||
|
- [ ] 自定义标签突出
|
||||||
|
|
||||||
|
#### 归档
|
||||||
|
|
||||||
|
- [ ] 自定义归档 (列表、日历)
|
||||||
|
|
||||||
|
#### 最近评论
|
||||||
|
|
||||||
|
#### 分类
|
||||||
|
|
||||||
|
#### 广告
|
||||||
|
|
||||||
|
#### 站点信息
|
||||||
|
|
||||||
|
- [ ] 文章总数
|
||||||
|
- [ ] 建站天数
|
||||||
|
- [ ] 全站字数
|
||||||
|
- [ ] 访问统计
|
||||||
|
|
||||||
|
#### 目录
|
||||||
|
|
||||||
|
- [ ] 目录跳转 (仅文章页面)
|
||||||
|
- [ ] 多级目录
|
||||||
|
|
||||||
|
#### 最近文章
|
||||||
|
|
||||||
|
- [ ] 自定义最近文章
|
||||||
|
|
||||||
|
### 底部
|
||||||
|
|
||||||
|
- [ ] 社交链接展示
|
||||||
|
- [ ] 自定义相关链接
|
||||||
|
- [ ] 版权信息设置
|
||||||
|
- [ ] 随机友链
|
||||||
|
|
||||||
|
### 文章页面
|
||||||
|
|
||||||
|
- [ ] 字数、阅读时长、时间、访问量、留言数等信息展示
|
||||||
|
- [ ] 标签、目录展示
|
||||||
|
- [ ] 自定义过期提示
|
||||||
|
- [ ] 自定义代码高亮
|
||||||
|
- [ ] 代码高亮 + 行号 + 复制 + 折叠
|
||||||
|
- [ ] 文章分享 (AddThis/Sharejs/Addtoany)
|
||||||
|
- [ ] 二维码打赏
|
||||||
|
- [ ] 文章页复制版权
|
||||||
|
- [ ] 阅读模式
|
||||||
|
- [ ] Mathjax 和 Katex
|
||||||
|
- [ ] 自定义文章开头、结尾
|
||||||
|
- [ ] 自定义相关文章推荐
|
||||||
|
- [ ] 上一篇下一篇文章展示
|
||||||
|
|
||||||
|
### 评论模块
|
||||||
|
|
||||||
|
- [ ] UI 设置
|
||||||
|
|
||||||
|
### 右键菜单
|
||||||
|
|
||||||
|
- [ ] 自定义右键菜单
|
||||||
|
|
||||||
|
### 页面
|
||||||
|
|
||||||
|
- [ ] 隐私协议
|
||||||
|
- [ ] 版权协议
|
||||||
|
- [ ] Cookies
|
||||||
|
- [ ] 友链
|
||||||
|
- [ ] 日志
|
||||||
|
- [ ] 相册
|
||||||
|
- [ ] 标签页
|
||||||
|
- [ ] 分类页
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"name": "halo-theme-hao",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.7.4</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.liuzhihang</groupId>
|
||||||
|
<artifactId>halo-theme-hao</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>halo-theme-hao</name>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,239 @@
|
||||||
|
apiVersion: v1alpha1
|
||||||
|
kind: Setting
|
||||||
|
metadata:
|
||||||
|
name: theme-hao-setting
|
||||||
|
spec:
|
||||||
|
forms:
|
||||||
|
- group: layout
|
||||||
|
label: 布局
|
||||||
|
formSchema:
|
||||||
|
- $formkit: select
|
||||||
|
name: post_list_layout
|
||||||
|
label: 文章列表布局
|
||||||
|
value: grid_3
|
||||||
|
options:
|
||||||
|
- label: 网格(一行三列)
|
||||||
|
value: grid_3
|
||||||
|
- label: 网格(一行两列)
|
||||||
|
value: grid_2
|
||||||
|
- label: 单条
|
||||||
|
value: single
|
||||||
|
help: "选择单条时,文章卡片的图片将位于左侧"
|
||||||
|
- $formkit: select
|
||||||
|
name: header_widget
|
||||||
|
label: 首页顶部模块
|
||||||
|
value: none
|
||||||
|
options:
|
||||||
|
- label: 无
|
||||||
|
value: none
|
||||||
|
- label: 最新一篇文章
|
||||||
|
value: latest_post
|
||||||
|
- label: 文章网格(最新五篇文章)
|
||||||
|
value: latest_post_grid
|
||||||
|
- label: 轮播图
|
||||||
|
value: carousel
|
||||||
|
- label: 站点标题
|
||||||
|
value: site_title
|
||||||
|
- $formkit: select
|
||||||
|
name: header_background_type
|
||||||
|
label: 首页顶部背景
|
||||||
|
value: manual
|
||||||
|
options:
|
||||||
|
- label: 手动设置
|
||||||
|
value: manual
|
||||||
|
- label: 图片
|
||||||
|
value: image
|
||||||
|
- $formkit: text
|
||||||
|
name: header_background
|
||||||
|
label: 首页顶部背景
|
||||||
|
- $formkit: text
|
||||||
|
name: header_background_image
|
||||||
|
label: 首页顶部背景图片
|
||||||
|
- $formkit: radio
|
||||||
|
name: content_header
|
||||||
|
label: 文章页顶部
|
||||||
|
value: true
|
||||||
|
options:
|
||||||
|
- label: 显示
|
||||||
|
value: true
|
||||||
|
- label: 隐藏
|
||||||
|
value: false
|
||||||
|
|
||||||
|
- group: sidebar
|
||||||
|
label: 侧边栏
|
||||||
|
formSchema:
|
||||||
|
- $formkit: textarea
|
||||||
|
name: widgets
|
||||||
|
label: 小部件
|
||||||
|
value: "profile,popular-posts,latest-comments,categories,tags"
|
||||||
|
help: "目前提供的小部件有:profile(站点资料), popular-posts(热门文章), latest-comments(最新评论), categories(文章分类), tags(文章标签)。你可以随意组合或排序,以逗号隔开。"
|
||||||
|
- group: content
|
||||||
|
label: 内容设置
|
||||||
|
formSchema:
|
||||||
|
- $formkit: radio
|
||||||
|
name: enable_lightgallery
|
||||||
|
label: 图片放大
|
||||||
|
value: false
|
||||||
|
options:
|
||||||
|
- label: 开启
|
||||||
|
value: true
|
||||||
|
- label: 关闭
|
||||||
|
value: false
|
||||||
|
- $formkit: radio
|
||||||
|
name: enable_code_highlight
|
||||||
|
label: 代码块高亮
|
||||||
|
value: false
|
||||||
|
options:
|
||||||
|
- label: 开启
|
||||||
|
value: true
|
||||||
|
- label: 关闭
|
||||||
|
value: false
|
||||||
|
- $formkit: textarea
|
||||||
|
name: code_highlight_extra_languages
|
||||||
|
label: 代码块额外高亮语言
|
||||||
|
help: "默认已经包含:php,diff,java,css,bash,json,perl,swift,plaintext,ruby,yaml,sql,vbnet,ini,scss,less,cpp,typescript,csharp,rust,python,python-repl,objectivec,r,shell,makefile,go,xml,markdown,lua,javascript,php-template,kotlin,c 如果需要添加其他语言,请按照相同格式添加。"
|
||||||
|
- $formkit: select
|
||||||
|
name: code_highlight_style
|
||||||
|
label: 代码块高亮主题
|
||||||
|
value: "default.min.css"
|
||||||
|
options:
|
||||||
|
- value: "a11y-dark.min.css"
|
||||||
|
label: "a11y-dark.min.css"
|
||||||
|
- value: "a11y-light.min.css"
|
||||||
|
label: "a11y-light.min.css"
|
||||||
|
- value: "agate.min.css"
|
||||||
|
label: "agate.min.css"
|
||||||
|
- value: "an-old-hope.min.css"
|
||||||
|
label: "an-old-hope.min.css"
|
||||||
|
- value: "androidstudio.min.css"
|
||||||
|
label: "androidstudio.min.css"
|
||||||
|
- value: "arduino-light.min.css"
|
||||||
|
label: "arduino-light.min.css"
|
||||||
|
- value: "arta.min.css"
|
||||||
|
label: "arta.min.css"
|
||||||
|
- value: "ascetic.min.css"
|
||||||
|
label: "ascetic.min.css"
|
||||||
|
- value: "atom-one-dark-reasonable.min.css"
|
||||||
|
label: "atom-one-dark-reasonable.min.css"
|
||||||
|
- value: "atom-one-dark.min.css"
|
||||||
|
label: "atom-one-dark.min.css"
|
||||||
|
- value: "atom-one-light.min.css"
|
||||||
|
label: "atom-one-light.min.css"
|
||||||
|
- value: "brown-paper.min.css"
|
||||||
|
label: "brown-paper.min.css"
|
||||||
|
- value: "codepen-embed.min.css"
|
||||||
|
label: "codepen-embed.min.css"
|
||||||
|
- value: "color-brewer.min.css"
|
||||||
|
label: "color-brewer.min.css"
|
||||||
|
- value: "dark.min.css"
|
||||||
|
label: "dark.min.css"
|
||||||
|
- value: "default.min.css"
|
||||||
|
label: "default.min.css"
|
||||||
|
- value: "devibeans.min.css"
|
||||||
|
label: "devibeans.min.css"
|
||||||
|
- value: "docco.min.css"
|
||||||
|
label: "docco.min.css"
|
||||||
|
- value: "far.min.css"
|
||||||
|
label: "far.min.css"
|
||||||
|
- value: "felipec.min.css"
|
||||||
|
label: "felipec.min.css"
|
||||||
|
- value: "foundation.min.css"
|
||||||
|
label: "foundation.min.css"
|
||||||
|
- value: "github-dark-dimmed.min.css"
|
||||||
|
label: "github-dark-dimmed.min.css"
|
||||||
|
- value: "github-dark.min.css"
|
||||||
|
label: "github-dark.min.css"
|
||||||
|
- value: "github.min.css"
|
||||||
|
label: "github.min.css"
|
||||||
|
- value: "gml.min.css"
|
||||||
|
label: "gml.min.css"
|
||||||
|
- value: "googlecode.min.css"
|
||||||
|
label: "googlecode.min.css"
|
||||||
|
- value: "gradient-dark.min.css"
|
||||||
|
label: "gradient-dark.min.css"
|
||||||
|
- value: "gradient-light.min.css"
|
||||||
|
label: "gradient-light.min.css"
|
||||||
|
- value: "grayscale.min.css"
|
||||||
|
label: "grayscale.min.css"
|
||||||
|
- value: "hybrid.min.css"
|
||||||
|
label: "hybrid.min.css"
|
||||||
|
- value: "idea.min.css"
|
||||||
|
label: "idea.min.css"
|
||||||
|
- value: "intellij-light.min.css"
|
||||||
|
label: "intellij-light.min.css"
|
||||||
|
- value: "ir-black.min.css"
|
||||||
|
label: "ir-black.min.css"
|
||||||
|
- value: "isbl-editor-dark.min.css"
|
||||||
|
label: "isbl-editor-dark.min.css"
|
||||||
|
- value: "isbl-editor-light.min.css"
|
||||||
|
label: "isbl-editor-light.min.css"
|
||||||
|
- value: "kimbie-dark.min.css"
|
||||||
|
label: "kimbie-dark.min.css"
|
||||||
|
- value: "kimbie-light.min.css"
|
||||||
|
label: "kimbie-light.min.css"
|
||||||
|
- value: "lightfair.min.css"
|
||||||
|
label: "lightfair.min.css"
|
||||||
|
- value: "lioshi.min.css"
|
||||||
|
label: "lioshi.min.css"
|
||||||
|
- value: "magula.min.css"
|
||||||
|
label: "magula.min.css"
|
||||||
|
- value: "mono-blue.min.css"
|
||||||
|
label: "mono-blue.min.css"
|
||||||
|
- value: "monokai-sublime.min.css"
|
||||||
|
label: "monokai-sublime.min.css"
|
||||||
|
- value: "monokai.min.css"
|
||||||
|
label: "monokai.min.css"
|
||||||
|
- value: "night-owl.min.css"
|
||||||
|
label: "night-owl.min.css"
|
||||||
|
- value: "nnfx-dark.min.css"
|
||||||
|
label: "nnfx-dark.min.css"
|
||||||
|
- value: "nnfx-light.min.css"
|
||||||
|
label: "nnfx-light.min.css"
|
||||||
|
- value: "nord.min.css"
|
||||||
|
label: "nord.min.css"
|
||||||
|
- value: "obsidian.min.css"
|
||||||
|
label: "obsidian.min.css"
|
||||||
|
- value: "paraiso-dark.min.css"
|
||||||
|
label: "paraiso-dark.min.css"
|
||||||
|
- value: "paraiso-light.min.css"
|
||||||
|
label: "paraiso-light.min.css"
|
||||||
|
- value: "pojoaque.min.css"
|
||||||
|
label: "pojoaque.min.css"
|
||||||
|
- value: "purebasic.min.css"
|
||||||
|
label: "purebasic.min.css"
|
||||||
|
- value: "qtcreator-dark.min.css"
|
||||||
|
label: "qtcreator-dark.min.css"
|
||||||
|
- value: "qtcreator-light.min.css"
|
||||||
|
label: "qtcreator-light.min.css"
|
||||||
|
- value: "rainbow.min.css"
|
||||||
|
label: "rainbow.min.css"
|
||||||
|
- value: "routeros.min.css"
|
||||||
|
label: "routeros.min.css"
|
||||||
|
- value: "school-book.min.css"
|
||||||
|
label: "school-book.min.css"
|
||||||
|
- value: "shades-of-purple.min.css"
|
||||||
|
label: "shades-of-purple.min.css"
|
||||||
|
- value: "srcery.min.css"
|
||||||
|
label: "srcery.min.css"
|
||||||
|
- value: "stackoverflow-dark.min.css"
|
||||||
|
label: "stackoverflow-dark.min.css"
|
||||||
|
- value: "stackoverflow-light.min.css"
|
||||||
|
label: "stackoverflow-light.min.css"
|
||||||
|
- value: "sunburst.min.css"
|
||||||
|
label: "sunburst.min.css"
|
||||||
|
- value: "tokyo-night-dark.min.css"
|
||||||
|
label: "tokyo-night-dark.min.css"
|
||||||
|
- value: "tokyo-night-light.min.css"
|
||||||
|
label: "tokyo-night-light.min.css"
|
||||||
|
- value: "tomorrow-night-blue.min.css"
|
||||||
|
label: "tomorrow-night-blue.min.css"
|
||||||
|
- value: "tomorrow-night-bright.min.css"
|
||||||
|
label: "tomorrow-night-bright.min.css"
|
||||||
|
- value: "vs.min.css"
|
||||||
|
label: "vs.min.css"
|
||||||
|
- value: "vs2015.min.css"
|
||||||
|
label: "vs2015.min.css"
|
||||||
|
- value: "xcode.min.css"
|
||||||
|
label: "xcode.min.css"
|
||||||
|
- value: "xt256.min.css"
|
||||||
|
label: "xt256.min.css"
|
File diff suppressed because one or more lines are too long
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
After Width: | Height: | Size: 512 B |
|
@ -0,0 +1,125 @@
|
||||||
|
"use strict";
|
||||||
|
var heo_cookiesTime = null, heo_musicPlaying = !1, heo_keyboard = !0, heo = {
|
||||||
|
darkModeStatus: function () {
|
||||||
|
"light" == ("dark" === document.documentElement.getAttribute("data-theme") ? "dark" : "light") ? $(".menu-darkmode-text").text("深色模式") : $(".menu-darkmode-text").text("浅色模式")
|
||||||
|
}, changeTimeInEssay: function () {
|
||||||
|
document.querySelector("#bber") && document.querySelectorAll("#bber time").forEach(function (e) {
|
||||||
|
var t = e, o = t.getAttribute("datetime");
|
||||||
|
t.innerText = btf.diffDate(o, !0), t.style.display = "inline"
|
||||||
|
})
|
||||||
|
}, initIndexEssay: function () {
|
||||||
|
document.querySelector("#bber-talk") && new Swiper(".swiper-container", {
|
||||||
|
direction: "vertical", loop: !0, autoplay: {delay: 3e3, pauseOnMouseEnter: !0}
|
||||||
|
})
|
||||||
|
}, onlyHome: function () {
|
||||||
|
var e = window.location.pathname;
|
||||||
|
"/" == (e = decodeURIComponent(e)) ? $(".only-home").attr("style", "display: flex") : $(".only-home").attr("style", "display: none")
|
||||||
|
}, is_Post: function () {
|
||||||
|
return 0 <= window.location.href.indexOf("/p/")
|
||||||
|
}, addNavBackgroundInit: function () {
|
||||||
|
var e, t = 0, o = 0;
|
||||||
|
document.body && (t = document.body.scrollTop), document.documentElement && (o = document.documentElement.scrollTop), e = 0 < t - o ? t : o, console.log("滚动高度" + e), 0 != e && (document.getElementById("page-header").classList.add("nav-fixed"), document.getElementById("page-header").classList.add("nav-visible"), $("#cookies-window").hide(), console.log("已添加class"))
|
||||||
|
}, tagPageActive: function () {
|
||||||
|
var e = window.location.pathname, e = decodeURIComponent(e);
|
||||||
|
console.log(e);
|
||||||
|
var t, o, n = /\/tags\/.*?\//.test(e);
|
||||||
|
console.log(n), n && (t = e.split("/"), console.log(t[2]), o = t[2], document.querySelector("#tag-page-tags") && document.getElementById(o).classList.add("select"))
|
||||||
|
}, categoriesBarActive: function () {
|
||||||
|
document.querySelector("#category-bar") && $(".category-bar-item").removeClass("select");
|
||||||
|
var e, t = window.location.pathname, t = decodeURIComponent(t);
|
||||||
|
console.log(t), "/" == t ? document.querySelector("#category-bar") && document.getElementById("category-bar-home").classList.add("select") : /\/categories\/.*?\//.test(t) && (e = t.split("/")[2], document.querySelector("#category-bar") && document.getElementById(e).classList.add("select"))
|
||||||
|
}, addFriendLinksInFooter: function () {
|
||||||
|
fetch("https://moments.zhheo.com/randomfriend?num=3").then(function (e) {
|
||||||
|
return e.json()
|
||||||
|
}).then(function (e) {
|
||||||
|
for (var t = getArrayItems(e, 3), o = "", n = 0; n < t.length; ++n) {
|
||||||
|
var a = t[n];
|
||||||
|
o += "<a class='footer-item' href='".concat(a.link, '\' target="_blank" rel="noopener nofollow">').concat(a.name, "</a>")
|
||||||
|
}
|
||||||
|
o += "<a class='footer-item' href='/link/'>更多</a>", document.getElementById("friend-links-in-footer").innerHTML = o
|
||||||
|
})
|
||||||
|
}, stopImgRightDrag: function () {
|
||||||
|
$("img").on("dragstart", function () {
|
||||||
|
return !1
|
||||||
|
})
|
||||||
|
}, topPostScroll: function () {
|
||||||
|
var o;
|
||||||
|
document.getElementById("recent-post-top") && (o = document.getElementById("recent-post-top")).addEventListener("mousewheel", function (e) {
|
||||||
|
var t = -e.wheelDelta / 2;
|
||||||
|
o.scrollLeft += t, document.body.clientWidth < 1300 && e.preventDefault()
|
||||||
|
}, !1)
|
||||||
|
}, topCategoriesBarScroll: function () {
|
||||||
|
var o;
|
||||||
|
document.getElementById("category-bar-items") && (o = document.getElementById("category-bar-items")).addEventListener("mousewheel", function (e) {
|
||||||
|
var t = -e.wheelDelta / 2;
|
||||||
|
o.scrollLeft += t, e.preventDefault()
|
||||||
|
}, !1)
|
||||||
|
}, sayhi: function () {
|
||||||
|
document.querySelector("#author-info__sayhi") && (document.getElementById("author-info__sayhi").innerHTML = getTimeState() + "!我是")
|
||||||
|
}, addTag: function () {
|
||||||
|
document.querySelector(".heo-tag-new") && $(".heo-tag-new").append('<sup class="heo-tag heo-tag-new-view">N</sup>'), document.querySelector(".heo-tag-hot") && $(".heo-tag-hot").append('<sup class="heo-tag heo-tag-hot-view">H</sup>')
|
||||||
|
}, qrcodeCreate: function () {
|
||||||
|
document.getElementById("qrcode") && new QRCode(document.getElementById("qrcode"), {
|
||||||
|
text: window.location.href,
|
||||||
|
width: 250,
|
||||||
|
height: 250,
|
||||||
|
colorDark: "#000",
|
||||||
|
colorLight: "#ffffff",
|
||||||
|
correctLevel: QRCode.CorrectLevel.H
|
||||||
|
})
|
||||||
|
}, reflashEssayWaterFall: function () {
|
||||||
|
document.querySelector("#waterfall") && setTimeout(function () {
|
||||||
|
waterfall("#waterfall"), document.getElementById("waterfall").classList.add("show")
|
||||||
|
}, 500)
|
||||||
|
}, addMediumInEssay: function () {
|
||||||
|
document.querySelector("#waterfall") && mediumZoom(document.querySelectorAll("[data-zoomable]"))
|
||||||
|
}, downloadImage: function (e, c) {
|
||||||
|
rm.hideRightMenu(), 0 == rm.downloadimging ? (rm.downloadimging = !0, btf.snackbarShow("正在下载中,请稍后", !1, 1e4), setTimeout(function () {
|
||||||
|
var a = new Image;
|
||||||
|
a.setAttribute("crossOrigin", "anonymous"), a.onload = function () {
|
||||||
|
var e = document.createElement("canvas");
|
||||||
|
e.width = a.width, e.height = a.height, e.getContext("2d").drawImage(a, 0, 0, a.width, a.height);
|
||||||
|
var t = e.toDataURL("image/png"), o = document.createElement("a"), n = new MouseEvent("click");
|
||||||
|
o.download = c || "photo", o.href = t, o.dispatchEvent(n)
|
||||||
|
}, a.src = e, btf.snackbarShow("图片已添加盲水印,请遵守版权协议"), rm.downloadimging = !1
|
||||||
|
}, "10000")) : btf.snackbarShow("有正在进行中的下载,请稍后再试")
|
||||||
|
}, switchCommentBarrage: function () {
|
||||||
|
document.querySelector(".comment-barrage") && ($(".comment-barrage").is(":visible") ? ($(".comment-barrage").hide(), $(".menu-commentBarrage-text").text("显示热评"), document.querySelector("#consoleCommentBarrage").classList.remove("on"), localStorage.setItem("commentBarrageSwitch", "false")) : $(".comment-barrage").is(":hidden") && ($(".comment-barrage").show(), $(".menu-commentBarrage-text").text("关闭热评"), document.querySelector("#consoleCommentBarrage").classList.add("on"), localStorage.removeItem("commentBarrageSwitch"))), rm.hideRightMenu()
|
||||||
|
}, hidecookie: function () {
|
||||||
|
heo_cookiesTime = setTimeout(function () {
|
||||||
|
document.getElementById("cookies-window").classList.add("cw-hide"), setTimeout(function () {
|
||||||
|
$("#cookies-window").hide()
|
||||||
|
}, 1e3)
|
||||||
|
}, 3e3)
|
||||||
|
}, hideTodayCard: function () {
|
||||||
|
document.getElementById("todayCard") && document.getElementById("todayCard").classList.add("hide")
|
||||||
|
}, changeThemeColor: function (e) {
|
||||||
|
null !== document.querySelector('meta[name="theme-color"]') && document.querySelector('meta[name="theme-color"]').setAttribute("content", e)
|
||||||
|
}, initThemeColor: function () {
|
||||||
|
var e, t, o;
|
||||||
|
heo.is_Post() ? 0 === (window.scrollY || document.documentElement.scrollTop) ? (e = getComputedStyle(document.documentElement).getPropertyValue("--heo-main"), heo.changeThemeColor(e)) : (t = getComputedStyle(document.documentElement).getPropertyValue("--heo-background"), heo.changeThemeColor(t)) : (o = getComputedStyle(document.documentElement).getPropertyValue("--heo-background"), heo.changeThemeColor(o))
|
||||||
|
}, jumpTo: function (e) {
|
||||||
|
$(document).ready(function () {
|
||||||
|
$("html,body").animate({scrollTop: $(e).eq(i).offset().top}, 500)
|
||||||
|
})
|
||||||
|
}, showLoading: function () {
|
||||||
|
document.querySelector("#loading-box").classList.remove("loaded")
|
||||||
|
}, hideLoading: function () {
|
||||||
|
document.querySelector("#loading-box").classList.add("loaded")
|
||||||
|
}, musicToggle: function () {
|
||||||
|
heo_musicPlaying = heo_musicPlaying ? (document.querySelector("#nav-music").classList.remove("playing"), document.getElementById("menu-music-toggle").innerHTML = '<i class="fa-solid fa-play"></i><span>播放音乐</span>', document.getElementById("nav-music-hoverTips").innerHTML = "音乐已暂停", document.querySelector("#consoleMusic").classList.remove("on"), !1) : (document.querySelector("#nav-music").classList.add("playing"), document.getElementById("menu-music-toggle").innerHTML = '<i class="fa-solid fa-pause"></i><span>暂停音乐</span>', document.querySelector("#consoleMusic").classList.add("on"), !0), document.querySelector("meting-js").aplayer.toggle(), rm.hideRightMenu()
|
||||||
|
}, musicSkipBack: function () {
|
||||||
|
document.querySelector("meting-js").aplayer.skipBack(), rm.hideRightMenu()
|
||||||
|
}, musicSkipForward: function () {
|
||||||
|
document.querySelector("meting-js").aplayer.skipForward(), rm.hideRightMenu()
|
||||||
|
}, musicGetName: function () {
|
||||||
|
for (var e = $(".aplayer-title"), t = [], o = e.length - 1; 0 <= o; o--) t[o] = e[o].innerText;
|
||||||
|
return t[0]
|
||||||
|
}, showConsole: function () {
|
||||||
|
document.querySelector("#console").classList.add("show")
|
||||||
|
}, hideConsole: function () {
|
||||||
|
document.querySelector("#console").classList.remove("show")
|
||||||
|
}, keyboardToggle: function () {
|
||||||
|
heo_keyboard ? (heo_keyboard = !1, document.querySelector("#consoleKeyboard").classList.remove("on"), localStorage.setItem("keyboardToggle", "false")) : (heo_keyboard = !0, document.querySelector("#consoleKeyboard").classList.add("on"), localStorage.setItem("keyboardToggle", "true"))
|
||||||
|
}
|
||||||
|
};
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
"use strict";function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(e,t):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var btf={debounce:function(r,o,i){var a;return function(){var e=this,t=arguments,n=i&&!a;clearTimeout(a),a=setTimeout(function(){a=null,i||r.apply(e,t)},o),n&&r.apply(e,t)}},throttle:function(n,r,o){var i,a,s,u=0;o=o||{};function l(){u=!1===o.leading?0:(new Date).getTime(),i=null,n.apply(a,s),i||(a=s=null)}return function(){var e=(new Date).getTime();u||!1!==o.leading||(u=e);var t=r-(e-u);a=this,s=arguments,t<=0||r<t?(i&&(clearTimeout(i),i=null),u=e,n.apply(a,s),i||(a=s=null)):i||!1===o.trailing||(i=setTimeout(l,t))}},sidebarPaddingR:function(){var e=window.innerWidth,t=document.body.clientWidth,n=e-t;e!==t&&(document.body.style.paddingRight=n+"px")},snackbarShow:function(e,t,n){var r=void 0!==t&&t,o=void 0!==n?n:5e3,i=GLOBAL_CONFIG.Snackbar.position,a="light"===document.documentElement.getAttribute("data-theme")?GLOBAL_CONFIG.Snackbar.bgLight:GLOBAL_CONFIG.Snackbar.bgDark;document.styleSheets[0].addRule(":root","--heo-snackbar-time:"+o+"ms!important"),Snackbar.show({text:e,backgroundColor:a,showAction:r,duration:o,pos:i})},initJustifiedGallery:function(e){e instanceof jQuery||(e=$(e)),e.each(function(e,t){$(this).is(":visible")&&$(this).justifiedGallery({rowHeight:220,margins:4})})},diffDate:function(e,t){var n,r,o,i=1<arguments.length&&void 0!==t&&t,a=new Date,s=new Date(e),u=a.getTime()-s.getTime();return i?(n=u/864e5,r=u/36e5,o=u/6e4,12<u/2592e6?s.toLocaleDateString():7<=n?s.toLocaleDateString().substr(5):1<=n?parseInt(n)+""+GLOBAL_CONFIG.date_suffix.day:1<=r||1<=o?"最近":GLOBAL_CONFIG.date_suffix.just):parseInt(u/864e5)},loadComment:function(e,t){var n;"IntersectionObserver"in window?(n=new IntersectionObserver(function(e){e[0].isIntersecting&&(t(),n.disconnect())},{threshold:[0]})).observe(e):t()},scrollToDest:function(o,i){var a,s;o<0||i<0||(a=window.scrollY||window.screenTop,o-=70,"CSS"in window&&CSS.supports("scroll-behavior","smooth")?window.scrollTo({top:o,behavior:"smooth"}):(s=null,i=i||500,window.requestAnimationFrame(function e(t){var n,r;s=s||t,a<o?(n=t-s,window.scrollTo(0,(o-a)*n/i+a),n<i?window.requestAnimationFrame(e):window.scrollTo(0,o)):(r=t-s,window.scrollTo(0,a-(a-o)*r/i),r<i?window.requestAnimationFrame(e):window.scrollTo(0,o))})))},fadeIn:function(e,t){e.style.cssText="display:block;animation: to_show ".concat(t,"s")},fadeOut:function(t,e){t.addEventListener("animationend",function e(){t.style.cssText="display: none; animation: '' ",t.removeEventListener("animationend",e)}),t.style.animation="to_hide ".concat(e,"s")},getParents:function(e,t){for(;e&&e!==document;e=e.parentNode)if(e.matches(t))return e;return null},siblings:function(t,n){return _toConsumableArray(t.parentNode.children).filter(function(e){return n?e!==t&&e.matches(n):e!==t})},wrap:function(e,t,n,r){var o=2<arguments.length&&void 0!==n?n:"",i=3<arguments.length&&void 0!==r?r:"",a=document.createElement(t);o&&(a.id=o),i&&(a.className=i),e.parentNode.insertBefore(a,e),a.appendChild(e)},unwrap:function(e){var t=e.parentNode;t!==document.body&&(t.parentNode.insertBefore(e,t),t.parentNode.removeChild(t))},isJqueryLoad:function(e){"undefined"==typeof jQuery?getScript(GLOBAL_CONFIG.source.jQuery).then(e):e()},isHidden:function(e){return 0===e.offsetHeight&&0===e.offsetWidth},getEleTop:function(e){for(var t=e.offsetTop,n=e.offsetParent;null!==n;)t+=n.offsetTop,n=n.offsetParent;return t}};
|
|
@ -0,0 +1,95 @@
|
||||||
|
.snackbar-container {
|
||||||
|
transition: all 500ms ease;
|
||||||
|
transition-property: top, right, bottom, left, opacity;
|
||||||
|
font-family: Roboto, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 14px;
|
||||||
|
background-color: #070b0e;
|
||||||
|
position: fixed;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
color: white;
|
||||||
|
line-height: 22px;
|
||||||
|
padding: 18px 24px;
|
||||||
|
bottom: -100px;
|
||||||
|
top: -100px;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-container .action {
|
||||||
|
background: inherit;
|
||||||
|
display: inline-block;
|
||||||
|
border: none;
|
||||||
|
font-size: inherit;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #4caf50;
|
||||||
|
margin: 0 0 0 24px;
|
||||||
|
padding: 0;
|
||||||
|
min-width: min-content;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 640px) {
|
||||||
|
.snackbar-container {
|
||||||
|
min-width: 288px;
|
||||||
|
max-width: 568px;
|
||||||
|
display: inline-flex;
|
||||||
|
border-radius: 2px;
|
||||||
|
margin: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.snackbar-container {
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.bottom-center {
|
||||||
|
top: auto !important;
|
||||||
|
bottom: 0;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.bottom-left {
|
||||||
|
top: auto !important;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.bottom-right {
|
||||||
|
top: auto !important;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.top-left {
|
||||||
|
bottom: auto !important;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.top-center {
|
||||||
|
bottom: auto !important;
|
||||||
|
top: 0;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.snackbar-pos.top-right {
|
||||||
|
bottom: auto !important;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.snackbar-pos.bottom-center, .snackbar-pos.top-center {
|
||||||
|
left: 0;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"mappings": "AAAA,mBAAmB;EACjB,UAAU,EAAE,cAAc;EAC1B,mBAAmB,EAAE,iCAAiC;EACtD,WAAW,EAAE,kBAAkB;EAC/B,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAoB;EACtC,QAAQ,EAAE,KAAK;EACf,OAAO,EAAE,KAAK;EACd,eAAe,EAAE,aAAa;EAC9B,WAAW,EAAE,MAAM;EACnB,KAAK,EAAE,KAAK;EACZ,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,SAAS;EAClB,MAAM,EAAE,CAAC;EACT,GAAG,EAAE,CAAC;EACN,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,IAAI;;AACb,2BAAO;EACL,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,SAAS;EACzB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,CAAC;EACV,SAAS,EAAE,WAAW;EACtB,MAAM,EAAE,OAAO;;;AAEnB,yBAAyB;EACvB,mBAAmB;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,WAAW;IACpB,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,MAAM;;;AAElB,yBAAyB;EACvB,mBAAmB;IACjB,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;;;AAGV,2BAAe;EACb,GAAG,EAAE,eAAe;EACpB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,GAAG;EACT,SAAS,EAAE,qBAAqB;;AAClC,yBAAa;EACX,GAAG,EAAE,eAAe;EACpB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;;AACT,0BAAc;EACZ,GAAG,EAAE,eAAe;EACpB,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;;AACV,sBAAU;EACR,MAAM,EAAE,eAAe;EACvB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;;AACT,wBAAY;EACV,MAAM,EAAE,eAAe;EACvB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,GAAG;EACT,SAAS,EAAE,qBAAqB;;AAClC,uBAAW;EACT,MAAM,EAAE,eAAe;EACvB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,CAAC",
|
||||||
|
"sources": ["../src/sass/snackbar.sass"],
|
||||||
|
"names": [],
|
||||||
|
"file": "snackbar.css"
|
||||||
|
}
|
|
@ -0,0 +1,189 @@
|
||||||
|
/*!
|
||||||
|
* Snackbar v0.1.14
|
||||||
|
* http://polonel.com/Snackbar
|
||||||
|
*
|
||||||
|
* Copyright 2018 Chris Brame and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/polonel/Snackbar/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (root, factory) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define([], function () {
|
||||||
|
return (root.Snackbar = factory());
|
||||||
|
});
|
||||||
|
} else if (typeof module === 'object' && module.exports) {
|
||||||
|
module.exports = root.Snackbar = factory();
|
||||||
|
} else {
|
||||||
|
root.Snackbar = factory();
|
||||||
|
}
|
||||||
|
})(this, function () {
|
||||||
|
var Snackbar = {};
|
||||||
|
|
||||||
|
Snackbar.current = null;
|
||||||
|
var $defaults = {
|
||||||
|
text: 'Default Text',
|
||||||
|
textColor: '#FFFFFF',
|
||||||
|
width: 'auto',
|
||||||
|
showAction: true,
|
||||||
|
actionText: 'Dismiss',
|
||||||
|
actionTextAria: 'Dismiss, Description for Screen Readers',
|
||||||
|
alertScreenReader: false,
|
||||||
|
actionTextColor: '#4CAF50',
|
||||||
|
showSecondButton: false,
|
||||||
|
secondButtonText: '',
|
||||||
|
secondButtonAria: 'Description for Screen Readers',
|
||||||
|
secondButtonTextColor: '#4CAF50',
|
||||||
|
backgroundColor: '#323232',
|
||||||
|
pos: 'bottom-left',
|
||||||
|
duration: 5000,
|
||||||
|
customClass: '',
|
||||||
|
onActionClick: function (element) {
|
||||||
|
element.style.opacity = 0;
|
||||||
|
},
|
||||||
|
onSecondButtonClick: function (element) {
|
||||||
|
},
|
||||||
|
onClose: function (element) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Snackbar.show = function ($options) {
|
||||||
|
var options = Extend(true, $defaults, $options);
|
||||||
|
|
||||||
|
if (Snackbar.current) {
|
||||||
|
Snackbar.current.style.opacity = 0;
|
||||||
|
setTimeout(
|
||||||
|
function () {
|
||||||
|
var $parent = this.parentElement;
|
||||||
|
if ($parent)
|
||||||
|
// possible null if too many/fast Snackbars
|
||||||
|
$parent.removeChild(this);
|
||||||
|
}.bind(Snackbar.current),
|
||||||
|
500
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Snackbar.snackbar = document.createElement('div');
|
||||||
|
Snackbar.snackbar.className = 'snackbar-container ' + options.customClass;
|
||||||
|
Snackbar.snackbar.style.width = options.width;
|
||||||
|
var $p = document.createElement('p');
|
||||||
|
$p.style.margin = 0;
|
||||||
|
$p.style.padding = 0;
|
||||||
|
$p.style.color = options.textColor;
|
||||||
|
$p.style.fontSize = '14px';
|
||||||
|
$p.style.fontWeight = 300;
|
||||||
|
$p.style.lineHeight = '1em';
|
||||||
|
$p.innerHTML = options.text;
|
||||||
|
Snackbar.snackbar.appendChild($p);
|
||||||
|
Snackbar.snackbar.style.background = options.backgroundColor;
|
||||||
|
|
||||||
|
if (options.showSecondButton) {
|
||||||
|
var secondButton = document.createElement('button');
|
||||||
|
secondButton.className = 'action';
|
||||||
|
secondButton.innerHTML = options.secondButtonText;
|
||||||
|
secondButton.setAttribute('aria-label', options.secondButtonAria);
|
||||||
|
secondButton.style.color = options.secondButtonTextColor;
|
||||||
|
secondButton.addEventListener('click', function () {
|
||||||
|
options.onSecondButtonClick(Snackbar.snackbar);
|
||||||
|
});
|
||||||
|
Snackbar.snackbar.appendChild(secondButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.showAction) {
|
||||||
|
var actionButton = document.createElement('button');
|
||||||
|
actionButton.className = 'action';
|
||||||
|
actionButton.innerHTML = options.actionText;
|
||||||
|
actionButton.setAttribute('aria-label', options.actionTextAria);
|
||||||
|
actionButton.style.color = options.actionTextColor;
|
||||||
|
actionButton.addEventListener('click', function () {
|
||||||
|
options.onActionClick(Snackbar.snackbar);
|
||||||
|
});
|
||||||
|
Snackbar.snackbar.appendChild(actionButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.duration) {
|
||||||
|
setTimeout(
|
||||||
|
function () {
|
||||||
|
if (Snackbar.current === this) {
|
||||||
|
Snackbar.current.style.opacity = 0;
|
||||||
|
// When natural remove event occurs let's move the snackbar to its origins
|
||||||
|
Snackbar.current.style.top = '-100px';
|
||||||
|
Snackbar.current.style.bottom = '-100px';
|
||||||
|
}
|
||||||
|
}.bind(Snackbar.snackbar),
|
||||||
|
options.duration
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.alertScreenReader) {
|
||||||
|
Snackbar.snackbar.setAttribute('role', 'alert');
|
||||||
|
}
|
||||||
|
|
||||||
|
Snackbar.snackbar.addEventListener(
|
||||||
|
'transitionend',
|
||||||
|
function (event, elapsed) {
|
||||||
|
if (event.propertyName === 'opacity' && this.style.opacity === '0') {
|
||||||
|
if (typeof (options.onClose) === 'function')
|
||||||
|
options.onClose(this);
|
||||||
|
|
||||||
|
this.parentElement.removeChild(this);
|
||||||
|
if (Snackbar.current === this) {
|
||||||
|
Snackbar.current = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bind(Snackbar.snackbar)
|
||||||
|
);
|
||||||
|
|
||||||
|
Snackbar.current = Snackbar.snackbar;
|
||||||
|
|
||||||
|
document.body.appendChild(Snackbar.snackbar);
|
||||||
|
var $bottom = getComputedStyle(Snackbar.snackbar).bottom;
|
||||||
|
var $top = getComputedStyle(Snackbar.snackbar).top;
|
||||||
|
Snackbar.snackbar.style.opacity = 1;
|
||||||
|
Snackbar.snackbar.className =
|
||||||
|
'snackbar-container ' + options.customClass + ' snackbar-pos ' + options.pos;
|
||||||
|
};
|
||||||
|
|
||||||
|
Snackbar.close = function () {
|
||||||
|
if (Snackbar.current) {
|
||||||
|
Snackbar.current.style.opacity = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Pure JS Extend
|
||||||
|
// http://gomakethings.com/vanilla-javascript-version-of-jquery-extend/
|
||||||
|
var Extend = function () {
|
||||||
|
var extended = {};
|
||||||
|
var deep = false;
|
||||||
|
var i = 0;
|
||||||
|
var length = arguments.length;
|
||||||
|
|
||||||
|
if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {
|
||||||
|
deep = arguments[0];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
var merge = function (obj) {
|
||||||
|
for (var prop in obj) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
|
||||||
|
if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
|
||||||
|
extended[prop] = Extend(true, extended[prop], obj[prop]);
|
||||||
|
} else {
|
||||||
|
extended[prop] = obj[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (; i < length; i++) {
|
||||||
|
var obj = arguments[i];
|
||||||
|
merge(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return extended;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Snackbar;
|
||||||
|
});
|
|
@ -0,0 +1 @@
|
||||||
|
.snackbar-container{transition:all .5s ease;transition-property:top,right,bottom,left,opacity;font-family:Roboto,sans-serif;font-size:14px;min-height:14px;background-color:#070b0e;position:fixed;display:flex;justify-content:space-between;align-items:center;color:#fff;line-height:22px;padding:18px 24px;bottom:-100px;top:-100px;opacity:0;z-index:9999}.snackbar-container .action{background:inherit;display:inline-block;border:none;font-size:inherit;text-transform:uppercase;color:#4caf50;margin:0 0 0 24px;padding:0;min-width:min-content;cursor:pointer}@media (min-width:640px){.snackbar-container{min-width:288px;max-width:568px;display:inline-flex;border-radius:2px;margin:24px}}@media (max-width:640px){.snackbar-container{left:0;right:0;width:100%}}.snackbar-pos.bottom-center{top:auto!important;bottom:0;left:50%;transform:translate(-50%,0)}.snackbar-pos.bottom-left{top:auto!important;bottom:0;left:0}.snackbar-pos.bottom-right{top:auto!important;bottom:0;right:0}.snackbar-pos.top-left{bottom:auto!important;top:0;left:0}.snackbar-pos.top-center{bottom:auto!important;top:0;left:50%;transform:translate(-50%,0)}.snackbar-pos.top-right{bottom:auto!important;top:0;right:0}@media (max-width:640px){.snackbar-pos.bottom-center,.snackbar-pos.top-center{left:0;transform:none}}
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*!
|
||||||
|
* Snackbar v0.1.14
|
||||||
|
* http://polonel.com/Snackbar
|
||||||
|
*
|
||||||
|
* Copyright 2018 Chris Brame and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/polonel/Snackbar/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
!function(a,b){"use strict";"function"==typeof define&&define.amd?define([],function(){return a.Snackbar=b()}):"object"==typeof module&&module.exports?module.exports=a.Snackbar=b():a.Snackbar=b()}(this,function(){var a={};a.current=null;var b={text:"Default Text",textColor:"#FFFFFF",width:"auto",showAction:!0,actionText:"Dismiss",actionTextAria:"Dismiss, Description for Screen Readers",alertScreenReader:!1,actionTextColor:"#4CAF50",showSecondButton:!1,secondButtonText:"",secondButtonAria:"Description for Screen Readers",secondButtonTextColor:"#4CAF50",backgroundColor:"#323232",pos:"bottom-left",duration:5e3,customClass:"",onActionClick:function(a){a.style.opacity=0},onSecondButtonClick:function(a){},onClose:function(a){}};a.show=function(d){var e=c(!0,b,d);a.current&&(a.current.style.opacity=0,setTimeout(function(){var a=this.parentElement;a&&
|
||||||
|
// possible null if too many/fast Snackbars
|
||||||
|
a.removeChild(this)}.bind(a.current),500)),a.snackbar=document.createElement("div"),a.snackbar.className="snackbar-container "+e.customClass,a.snackbar.style.width=e.width;var f=document.createElement("p");if(f.style.margin=0,f.style.padding=0,f.style.color=e.textColor,f.style.fontSize="14px",f.style.fontWeight=300,f.style.lineHeight="1em",f.innerHTML=e.text,a.snackbar.appendChild(f),a.snackbar.style.background=e.backgroundColor,e.showSecondButton){var g=document.createElement("button");g.className="action",g.innerHTML=e.secondButtonText,g.setAttribute("aria-label",e.secondButtonAria),g.style.color=e.secondButtonTextColor,g.addEventListener("click",function(){e.onSecondButtonClick(a.snackbar)}),a.snackbar.appendChild(g)}if(e.showAction){var h=document.createElement("button");h.className="action",h.innerHTML=e.actionText,h.setAttribute("aria-label",e.actionTextAria),h.style.color=e.actionTextColor,h.addEventListener("click",function(){e.onActionClick(a.snackbar)}),a.snackbar.appendChild(h)}e.duration&&setTimeout(function(){a.current===this&&(a.current.style.opacity=0,
|
||||||
|
// When natural remove event occurs let's move the snackbar to its origins
|
||||||
|
a.current.style.top="-100px",a.current.style.bottom="-100px")}.bind(a.snackbar),e.duration),e.alertScreenReader&&a.snackbar.setAttribute("role","alert"),a.snackbar.addEventListener("transitionend",function(b,c){"opacity"===b.propertyName&&"0"===this.style.opacity&&("function"==typeof e.onClose&&e.onClose(this),this.parentElement.removeChild(this),a.current===this&&(a.current=null))}.bind(a.snackbar)),a.current=a.snackbar,document.body.appendChild(a.snackbar);getComputedStyle(a.snackbar).bottom,getComputedStyle(a.snackbar).top;a.snackbar.style.opacity=1,a.snackbar.className="snackbar-container "+e.customClass+" snackbar-pos "+e.pos},a.close=function(){a.current&&(a.current.style.opacity=0)};
|
||||||
|
// Pure JS Extend
|
||||||
|
// http://gomakethings.com/vanilla-javascript-version-of-jquery-extend/
|
||||||
|
var c=function(){var a={},b=!1,d=0,e=arguments.length;"[object Boolean]"===Object.prototype.toString.call(arguments[0])&&(b=arguments[0],d++);for(var f=function(d){for(var e in d)Object.prototype.hasOwnProperty.call(d,e)&&(b&&"[object Object]"===Object.prototype.toString.call(d[e])?a[e]=c(!0,a[e],d[e]):a[e]=d[e])};d<e;d++){var g=arguments[d];f(g)}return a};return a});
|
||||||
|
//# sourceMappingURL=snackbar.min.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":["../src/js/snackbar.js"],"names":["root","factory","define","amd","Snackbar","module","exports","this","current","$defaults","text","textColor","width","showAction","actionText","actionTextAria","alertScreenReader","actionTextColor","showSecondButton","secondButtonText","secondButtonAria","secondButtonTextColor","backgroundColor","pos","duration","customClass","onActionClick","element","style","opacity","onSecondButtonClick","onClose","show","$options","options","Extend","setTimeout","$parent","parentElement","removeChild","bind","snackbar","document","createElement","className","$p","margin","padding","color","fontSize","fontWeight","lineHeight","innerHTML","appendChild","background","secondButton","setAttribute","addEventListener","actionButton","top","bottom","event","elapsed","propertyName","body","getComputedStyle","close","extended","deep","i","length","arguments","Object","prototype","toString","call","merge","obj","prop","hasOwnProperty"],"mappings":";;;;;;;;CASA,SAAUA,EAAMC,GACZ,YAEsB,mBAAXC,SAAyBA,OAAOC,IACvCD,UAAW,WACP,MAAQF,GAAKI,SAAWH,MAEH,gBAAXI,SAAuBA,OAAOC,QAC5CD,OAAOC,QAAUN,EAAKI,SAAWH,IAEjCD,EAAKI,SAAWH,KAErBM,KAAM,WACL,GAAIH,KAEJA,GAASI,QAAU,IACnB,IAAIC,IACAC,KAAM,eACNC,UAAW,UACXC,MAAO,OACPC,YAAY,EACZC,WAAY,UACZC,eAAgB,0CAChBC,mBAAmB,EACnBC,gBAAiB,UACjBC,kBAAkB,EAClBC,iBAAkB,GAClBC,iBAAkB,iCAClBC,sBAAuB,UACvBC,gBAAiB,UACjBC,IAAK,cACLC,SAAU,IACVC,YAAa,GACbC,cAAe,SAASC,GACpBA,EAAQC,MAAMC,QAAU,GAE5BC,oBAAqB,SAASH,KAC9BI,QAAS,SAASJ,KAGtBvB,GAAS4B,KAAO,SAASC,GACrB,GAAIC,GAAUC,GAAO,EAAM1B,EAAWwB,EAElC7B,GAASI,UACTJ,EAASI,QAAQoB,MAAMC,QAAU,EACjCO,WACI,WACI,GAAIC,GAAU9B,KAAK+B,aACfD;;AAEAA,EAAQE,YAAYhC,OAC1BiC,KAAKpC,EAASI,SAChB,MAIRJ,EAASqC,SAAWC,SAASC,cAAc,OAC3CvC,EAASqC,SAASG,UAAY,sBAAwBV,EAAQT,YAC9DrB,EAASqC,SAASb,MAAMhB,MAAQsB,EAAQtB,KACxC,IAAIiC,GAAKH,SAASC,cAAc,IAWhC,IAVAE,EAAGjB,MAAMkB,OAAS,EAClBD,EAAGjB,MAAMmB,QAAU,EACnBF,EAAGjB,MAAMoB,MAAQd,EAAQvB,UACzBkC,EAAGjB,MAAMqB,SAAW,OACpBJ,EAAGjB,MAAMsB,WAAa,IACtBL,EAAGjB,MAAMuB,WAAa,MACtBN,EAAGO,UAAYlB,EAAQxB,KACvBN,EAASqC,SAASY,YAAYR,GAC9BzC,EAASqC,SAASb,MAAM0B,WAAapB,EAAQZ,gBAEzCY,EAAQhB,iBAAkB,CAC1B,GAAIqC,GAAeb,SAASC,cAAc,SAC1CY,GAAaX,UAAY,SACzBW,EAAaH,UAAYlB,EAAQf,iBACjCoC,EAAaC,aAAa,aAActB,EAAQd,kBAChDmC,EAAa3B,MAAMoB,MAAQd,EAAQb,sBACnCkC,EAAaE,iBAAiB,QAAS,WACnCvB,EAAQJ,oBAAoB1B,EAASqC,YAEzCrC,EAASqC,SAASY,YAAYE,GAGlC,GAAIrB,EAAQrB,WAAY,CACpB,GAAI6C,GAAehB,SAASC,cAAc,SAC1Ce,GAAad,UAAY,SACzBc,EAAaN,UAAYlB,EAAQpB,WACjC4C,EAAaF,aAAa,aAActB,EAAQnB,gBAChD2C,EAAa9B,MAAMoB,MAAQd,EAAQjB,gBACnCyC,EAAaD,iBAAiB,QAAS,WACnCvB,EAAQR,cAActB,EAASqC,YAEnCrC,EAASqC,SAASY,YAAYK,GAG9BxB,EAAQV,UACRY,WACI,WACQhC,EAASI,UAAYD,OACrBH,EAASI,QAAQoB,MAAMC,QAAU;;AAEjCzB,EAASI,QAAQoB,MAAM+B,IAAM,SAC7BvD,EAASI,QAAQoB,MAAMgC,OAAS,WAEtCpB,KAAKpC,EAASqC,UAChBP,EAAQV,UAIZU,EAAQlB,mBACTZ,EAASqC,SAASe,aAAa,OAAQ,SAG1CpD,EAASqC,SAASgB,iBACd,gBACA,SAASI,EAAOC,GACe,YAAvBD,EAAME,cAAqD,MAAvBxD,KAAKqB,MAAMC,UACf,kBAArBK,GAAe,SACtBA,EAAQH,QAAQxB,MAEpBA,KAAK+B,cAAcC,YAAYhC,MAC3BH,EAASI,UAAYD,OACrBH,EAASI,QAAU,QAG7BgC,KAAKpC,EAASqC,WAGpBrC,EAASI,QAAUJ,EAASqC,SAE5BC,SAASsB,KAAKX,YAAYjD,EAASqC,SACrBwB,kBAAiB7D,EAASqC,UAAUmB,OACvCK,iBAAiB7D,EAASqC,UAAUkB,GAC/CvD,GAASqC,SAASb,MAAMC,QAAU,EAClCzB,EAASqC,SAASG,UACd,sBAAwBV,EAAQT,YAAc,iBAAmBS,EAAQX,KAGjFnB,EAAS8D,MAAQ,WACT9D,EAASI,UACTJ,EAASI,QAAQoB,MAAMC,QAAU;;;AAMzC,GAAIM,GAAS,WACT,GAAIgC,MACAC,GAAO,EACPC,EAAI,EACJC,EAASC,UAAUD,MAE8B,sBAAjDE,OAAOC,UAAUC,SAASC,KAAKJ,UAAU,MACzCH,EAAOG,UAAU,GACjBF,IAeJ,KAZA,GAAIO,GAAQ,SAASC,GACjB,IAAK,GAAIC,KAAQD,GACTL,OAAOC,UAAUM,eAAeJ,KAAKE,EAAKC,KACtCV,GAAsD,oBAA9CI,OAAOC,UAAUC,SAASC,KAAKE,EAAIC,IAC3CX,EAASW,GAAQ3C,GAAO,EAAMgC,EAASW,GAAOD,EAAIC,IAElDX,EAASW,GAAQD,EAAIC,KAM9BT,EAAIC,EAAQD,IAAK,CACpB,GAAIQ,GAAMN,UAAUF,EACpBO,GAAMC,GAGV,MAAOV,GAGX,OAAO/D","file":"snackbar.min.js"}
|
|
@ -0,0 +1,306 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function _createForOfIteratorHelper(e, t) {
|
||||||
|
var o = "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
|
||||||
|
if (!o) {
|
||||||
|
if (Array.isArray(e) || (o = _unsupportedIterableToArray(e)) || t && e && "number" == typeof e.length) {
|
||||||
|
o && (e = o);
|
||||||
|
var n = 0, r = function () {
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
s: r, n: function () {
|
||||||
|
return n >= e.length ? {done: !0} : {done: !1, value: e[n++]}
|
||||||
|
}, e: function (e) {
|
||||||
|
throw e
|
||||||
|
}, f: r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
|
||||||
|
}
|
||||||
|
var a, i = !0, c = !1;
|
||||||
|
return {
|
||||||
|
s: function () {
|
||||||
|
o = o.call(e)
|
||||||
|
}, n: function () {
|
||||||
|
var e = o.next();
|
||||||
|
return i = e.done, e
|
||||||
|
}, e: function (e) {
|
||||||
|
c = !0, a = e
|
||||||
|
}, f: function () {
|
||||||
|
try {
|
||||||
|
i || null == o.return || o.return()
|
||||||
|
} finally {
|
||||||
|
if (c) throw a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _unsupportedIterableToArray(e, t) {
|
||||||
|
if (e) {
|
||||||
|
if ("string" == typeof e) return _arrayLikeToArray(e, t);
|
||||||
|
var o = Object.prototype.toString.call(e).slice(8, -1);
|
||||||
|
return "Object" === o && e.constructor && (o = e.constructor.name), "Map" === o || "Set" === o ? Array.from(e) : "Arguments" === o || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o) ? _arrayLikeToArray(e, t) : void 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _arrayLikeToArray(e, t) {
|
||||||
|
(null == t || t > e.length) && (t = e.length);
|
||||||
|
for (var o = 0, n = new Array(t); o < t; o++) n[o] = e[o];
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
function _typeof(e) {
|
||||||
|
return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
||||||
|
return typeof e
|
||||||
|
} : function (e) {
|
||||||
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
||||||
|
})(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkOpen() {
|
||||||
|
}
|
||||||
|
|
||||||
|
function coverColor() {
|
||||||
|
var _document$getElementB,
|
||||||
|
path = null === (_document$getElementB = document.getElementById("post-cover")) || void 0 === _document$getElementB ? void 0 : _document$getElementB.src,
|
||||||
|
httpRequest;
|
||||||
|
void 0 !== path ? (httpRequest = new XMLHttpRequest, httpRequest.open("GET", path + "?imageAve", !0), httpRequest.send(), httpRequest.onreadystatechange = function () {
|
||||||
|
var json, obj, value, value;
|
||||||
|
4 == httpRequest.readyState && 200 == httpRequest.status && (json = httpRequest.responseText, obj = eval("(" + json + ")"), value = obj.RGB, value = "#" + value.slice(2), "light" == getContrastYIQ(value) && (value = LightenDarkenColor(colorHex(value), -40)), document.styleSheets[0].addRule(":root", "--heo-main:" + value + "!important"), document.styleSheets[0].addRule(":root", "--heo-main-op:" + value + "23!important"), document.styleSheets[0].addRule(":root", "--heo-main-none:" + value + "00!important"), heo.initThemeColor(), document.getElementById("coverdiv").classList.add("loaded"))
|
||||||
|
}) : (document.styleSheets[0].addRule(":root", "--heo-main: var(--heo-theme)!important"), document.styleSheets[0].addRule(":root", "--heo-main-op: var(--heo-theme-op)!important"), document.styleSheets[0].addRule(":root", "--heo-main-none: var(--heo-theme-none)!important"), heo.initThemeColor())
|
||||||
|
}
|
||||||
|
|
||||||
|
function colorHex(e) {
|
||||||
|
var t = e;
|
||||||
|
if (/^(rgb|RGB)/.test(t)) {
|
||||||
|
for (var o = t.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","), n = "#", r = 0; r < o.length; r++) {
|
||||||
|
var a = Number(o[r]).toString(16);
|
||||||
|
"0" === a && (a += a), n += a
|
||||||
|
}
|
||||||
|
return 7 !== n.length && (n = t), n
|
||||||
|
}
|
||||||
|
if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)) return t;
|
||||||
|
var i = t.replace(/#/, "").split("");
|
||||||
|
if (6 === i.length) return t;
|
||||||
|
if (3 === i.length) {
|
||||||
|
for (var c = "#", r = 0; r < i.length; r += 1) c += i[r] + i[r];
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function colorRgb(e) {
|
||||||
|
var t = e.toLowerCase();
|
||||||
|
if (t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)) {
|
||||||
|
if (4 === t.length) {
|
||||||
|
for (var o = "#", n = 1; n < 4; n += 1) o += t.slice(n, n + 1).concat(t.slice(n, n + 1));
|
||||||
|
t = o
|
||||||
|
}
|
||||||
|
for (var r = [], n = 1; n < 7; n += 2) r.push(parseInt("0x" + t.slice(n, n + 2)));
|
||||||
|
return "rgb(" + r.join(",") + ")"
|
||||||
|
}
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function LightenDarkenColor(e, t) {
|
||||||
|
var o = !1;
|
||||||
|
"#" == e[0] && (e = e.slice(1), o = !0);
|
||||||
|
var n = parseInt(e, 16), r = (n >> 16) + t;
|
||||||
|
255 < r ? r = 255 : r < 0 && (r = 0);
|
||||||
|
var a = (n >> 8 & 255) + t;
|
||||||
|
255 < a ? a = 255 : a < 0 && (a = 0);
|
||||||
|
var i = (255 & n) + t;
|
||||||
|
return 255 < i ? i = 255 : i < 0 && (i = 0), (o ? "#" : "") + String("000000" + (i | a << 8 | r << 16).toString(16)).slice(-6)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getContrastYIQ(e) {
|
||||||
|
var t = colorRgb(e).match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/), o = 299 * t[1] + 587 * t[2] + 114 * t[3];
|
||||||
|
return .5 <= (o /= 255e3) ? "light" : "dark"
|
||||||
|
}
|
||||||
|
|
||||||
|
function navTitle() {
|
||||||
|
var e = document.title.replace(" | 张洪Heo", "");
|
||||||
|
document.getElementById("page-name-text").innerHTML = e
|
||||||
|
}
|
||||||
|
|
||||||
|
function showcopy() {
|
||||||
|
var e;
|
||||||
|
void 0 !== GLOBAL_CONFIG.Snackbar ? btf.snackbarShow(GLOBAL_CONFIG.copy.success) : ((e = ctx.previousElementSibling).innerText = GLOBAL_CONFIG.copy.success, e.style.opacity = 1, setTimeout(function () {
|
||||||
|
e.style.opacity = 0
|
||||||
|
}, 700))
|
||||||
|
}
|
||||||
|
|
||||||
|
checkOpen.toString = function () {
|
||||||
|
this.opened = !0
|
||||||
|
}, window.onload = function () {
|
||||||
|
for (var e = document.getElementsByClassName("copybtn"), t = 0; t < e.length; t++) document.getElementsByClassName("copybtn")[t].addEventListener("click", function () {
|
||||||
|
showcopy()
|
||||||
|
});
|
||||||
|
heo.initThemeColor()
|
||||||
|
};
|
||||||
|
var getTimeState = function () {
|
||||||
|
var e = (new Date).getHours(), t = "";
|
||||||
|
return 0 <= e && e <= 5 ? t = "晚安" : 5 < e && e <= 10 ? t = "早上好" : 10 < e && e <= 14 ? t = "中午好" : 14 < e && e <= 18 ? t = "下午好" : 18 < e && e <= 24 && (t = "晚上好"), t
|
||||||
|
};
|
||||||
|
|
||||||
|
function fly_to_top() {
|
||||||
|
document.getElementById("guli_top").classList.add("open_wing"), setTimeout(function () {
|
||||||
|
document.getElementById("guli_top").classList.add("flying"), btf.scrollToDest(0, 300)
|
||||||
|
}, 300), setTimeout(function () {
|
||||||
|
document.getElementById("guli_top").classList.remove("flying"), document.getElementById("guli_top").classList.remove("open_wing"), document.getElementById("guli_top").style.cssText = "opacity: ''; transform: ''"
|
||||||
|
}, 600)
|
||||||
|
}
|
||||||
|
|
||||||
|
var navFn = {
|
||||||
|
switchDarkMode: function () {
|
||||||
|
"light" == ("dark" === document.documentElement.getAttribute("data-theme") ? "dark" : "light") ? (activateDarkMode(), saveToLocal.set("theme", "dark", 2), void 0 !== GLOBAL_CONFIG.Snackbar && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night, !1, 2e3)) : (activateLightMode(), saveToLocal.set("theme", "light", 2), void 0 !== GLOBAL_CONFIG.Snackbar && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day, !1, 2e3)), "function" == typeof utterancesTheme && utterancesTheme(), "object" === ("undefined" == typeof FB ? "undefined" : _typeof(FB)) && window.loadFBComment(), window.DISQUS && document.getElementById("disqus_thread").children.length && setTimeout(function () {
|
||||||
|
return window.disqusReset()
|
||||||
|
}, 200);
|
||||||
|
var e, t, o, n = "light" === document.documentElement.getAttribute("data-theme") ? "#363636" : "#F7F7FA";
|
||||||
|
document.getElementById("posts-chart") && ((e = postsOption).textStyle.color = n, e.title.textStyle.color = n, e.xAxis.axisLine.lineStyle.color = n, e.yAxis.axisLine.lineStyle.color = n, postsChart.setOption(e)), document.getElementById("tags-chart") && ((t = tagsOption).textStyle.color = n, t.title.textStyle.color = n, t.xAxis.axisLine.lineStyle.color = n, t.yAxis.axisLine.lineStyle.color = n, tagsChart.setOption(t)), document.getElementById("categories-chart") && ((o = categoriesOption).textStyle.color = n, o.title.textStyle.color = n, o.legend.textStyle.color = n, categoriesChart.setOption(o))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function RemoveRewardMask() {
|
||||||
|
$(".reward-main").attr("style", "display: none"), $("#quit-box").attr("style", "display: none")
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddRewardMask() {
|
||||||
|
$(".reward-main").attr("style", "display: flex")
|
||||||
|
}
|
||||||
|
|
||||||
|
function travelling() {
|
||||||
|
fetch("https://moments.zhheo.com/randomfriend").then(function (e) {
|
||||||
|
return e.json()
|
||||||
|
}).then(function (e) {
|
||||||
|
var t = e.name, o = e.link,
|
||||||
|
n = "点击前往按钮进入随机一个友链,不保证跳转网站的安全性和可用性。本次随机到的是本站友链:「" + t + "」";
|
||||||
|
document.styleSheets[0].addRule(":root", "--heo-snackbar-time:8000ms!important"), Snackbar.show({
|
||||||
|
text: n,
|
||||||
|
duration: 1e4,
|
||||||
|
pos: "top-center",
|
||||||
|
actionText: "前往",
|
||||||
|
onActionClick: function (e) {
|
||||||
|
$(e).css("opacity", 0), window.open(o, "_blank")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function toforeverblog() {
|
||||||
|
Snackbar.show({
|
||||||
|
text: "点击前往按钮进入「十年之约」项目中的成员博客,不保证跳转网站的安全性和可用性",
|
||||||
|
duration: 8e3,
|
||||||
|
pos: "top-center",
|
||||||
|
actionText: "前往",
|
||||||
|
onActionClick: function (e) {
|
||||||
|
$(e).css("opacity", 0), window.open(link, "https://www.foreverblog.cn/go.html")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function totraveling() {
|
||||||
|
btf.snackbarShow("即将跳转到「开往」项目的成员博客,不保证跳转网站的安全性和可用性", !1, 5e3), setTimeout(function () {
|
||||||
|
window.open("https://travellings.link/")
|
||||||
|
}, "5000")
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeLoading() {
|
||||||
|
setTimeout(function () {
|
||||||
|
preloader.endLoading()
|
||||||
|
}, 3e3)
|
||||||
|
}
|
||||||
|
|
||||||
|
function addFriendLink() {
|
||||||
|
var e = document.getElementsByClassName("el-textarea__inner")[0], t = document.createEvent("HTMLEvents");
|
||||||
|
t.initEvent("input", !0, !0), e.value = "昵称:\n网站地址:\n头像图片url:\n描述:\n", e.dispatchEvent(t);
|
||||||
|
var o = document.querySelector("#post-comment").offsetTop;
|
||||||
|
window.scrollTo(0, o - 80), e.focus(), e.setSelectionRange(-1, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getArrayItems(e, t) {
|
||||||
|
var o = new Array;
|
||||||
|
for (var n in e) o.push(e[n]);
|
||||||
|
for (var r = new Array, a = 0; a < t && 0 < o.length; a++) {
|
||||||
|
var i = Math.floor(Math.random() * o.length);
|
||||||
|
r[a] = o[i], o.splice(i, 1)
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
function owoBig() {
|
||||||
|
document.getElementById("post-comment").addEventListener("DOMNodeInserted", function (e) {
|
||||||
|
var t, o, n, a;
|
||||||
|
!e.target.classList || "OwO-body" != e.target.classList.value || (t = e.target) && (n = !(o = ""), (a = document.createElement("div")).id = "owo-big", document.querySelector("body").appendChild(a), t.addEventListener("contextmenu", function (e) {
|
||||||
|
return e.preventDefault()
|
||||||
|
}), t.addEventListener("mouseover", function (r) {
|
||||||
|
"LI" == r.target.tagName && n && (n = !1, o = setTimeout(function () {
|
||||||
|
var e = 3 * r.path[0].clientHeight, t = 3 * r.path[0].clientWidth,
|
||||||
|
o = r.x - r.offsetX - (t - r.path[0].clientWidth) / 2, n = r.y - r.offsetY;
|
||||||
|
a.style.height = e + "px", a.style.width = t + "px", a.style.left = o + "px", a.style.top = n + "px", a.style.display = "flex", a.innerHTML = '<img src="'.concat(r.target.querySelector("img").src, '">')
|
||||||
|
}, 300))
|
||||||
|
}), t.addEventListener("mouseout", function (e) {
|
||||||
|
a.style.display = "none", n = !0, clearTimeout(o)
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function percent() {
|
||||||
|
var e = document.documentElement.scrollTop || window.pageYOffset,
|
||||||
|
t = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight) - document.documentElement.clientHeight,
|
||||||
|
o = Math.round(e / t * 100), n = document.querySelector("#percent"),
|
||||||
|
r = window.scrollY + document.documentElement.clientHeight,
|
||||||
|
a = document.getElementById("post-tools") || document.getElementById("footer");
|
||||||
|
a.offsetTop + a.offsetHeight / 2 < r || 90 < o ? (document.querySelector("#nav-totop").classList.add("long"), n.innerHTML = "返回顶部") : (document.querySelector("#nav-totop").classList.remove("long"), n.innerHTML = o)
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("touchstart", function (e) {
|
||||||
|
RemoveRewardMask()
|
||||||
|
}, !1), $(document).unbind("keydown").bind("keydown", function (e) {
|
||||||
|
if ((e.ctrlKey || e.metaKey) && 67 == e.keyCode && "" != selectTextNow) return btf.snackbarShow("复制成功,复制和转载请标注本文地址"), rm.rightmenuCopyText(selectTextNow), !1
|
||||||
|
}), document.addEventListener("scroll", btf.throttle(function () {
|
||||||
|
heo.initThemeColor()
|
||||||
|
}, 200)), navigator.serviceWorker.getRegistrations().then(function (e) {
|
||||||
|
var t, o = _createForOfIteratorHelper(e);
|
||||||
|
try {
|
||||||
|
for (o.s(); !(t = o.n()).done;) {
|
||||||
|
t.value.unregister()
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
o.e(e)
|
||||||
|
} finally {
|
||||||
|
o.f()
|
||||||
|
}
|
||||||
|
}), window.onkeydown = function (e) {
|
||||||
|
123 === e.keyCode && btf.snackbarShow("开发者模式已打开,请遵循GPL协议", !1, 3e3)
|
||||||
|
}, document.querySelector("#algolia-search").addEventListener("wheel", function (e) {
|
||||||
|
e.preventDefault()
|
||||||
|
}), document.querySelector("#console").addEventListener("wheel", function (e) {
|
||||||
|
e.preventDefault()
|
||||||
|
}), window.addEventListener("resize", function () {
|
||||||
|
document.querySelector("#waterfall") && heo.reflashEssayWaterFall()
|
||||||
|
}), $(".topGroup").hover(function () {
|
||||||
|
console.log("卡片悬浮")
|
||||||
|
}, function () {
|
||||||
|
hoverOnCommentBarrage = !1, document.getElementById("todayCard").classList.remove("hide"), document.getElementById("todayCard").style.zIndex = 1, console.log("卡片停止悬浮")
|
||||||
|
}), document.getElementById("post-comment") && owoBig(), document.addEventListener("scroll", btf.throttle(function () {
|
||||||
|
var e, t = window.scrollY + document.documentElement.clientHeight,
|
||||||
|
o = (window.scrollY, document.getElementById("pagination")), n = document.getElementById("post-tools");
|
||||||
|
n && o && (e = n.offsetTop + n.offsetHeight / 2, 1300 < document.body.clientWidth && (e < t ? o.classList.add("show-window") : o.classList.remove("show-window")))
|
||||||
|
}, 200)), "false" !== localStorage.getItem("keyboardToggle") ? document.querySelector("#consoleKeyboard").classList.add("on") : document.querySelector("#consoleKeyboard").classList.remove("on"), $(window).on("keydown", function (e) {
|
||||||
|
if (27 == e.keyCode && (heo.hideLoading(), heo.hideConsole(), rm.hideRightMenu()), heo_keyboard && e.shiftKey) {
|
||||||
|
if (16 == e.keyCode && document.querySelector("#keyboard-tips").classList.add("show"), 75 == e.keyCode) return heo.keyboardToggle(), !1;
|
||||||
|
if (65 == e.keyCode) return heo.showConsole(), !1;
|
||||||
|
if (77 == e.keyCode) return heo.musicToggle(), !1;
|
||||||
|
if (82 == e.keyCode) return toRandomPost(), !1;
|
||||||
|
if (66 == e.keyCode) return pjax.loadUrl("/"), !1;
|
||||||
|
if (68 == e.keyCode) return rm.switchDarkMode(), !1;
|
||||||
|
if (70 == e.keyCode) return pjax.loadUrl("/moments/"), !1
|
||||||
|
}
|
||||||
|
}), $(window).on("keyup", function (e) {
|
||||||
|
16 == e.keyCode && document.querySelector("#keyboard-tips").classList.remove("show")
|
||||||
|
}), document.addEventListener("pjax:send", function () {
|
||||||
|
heo.showLoading()
|
||||||
|
}), document.addEventListener("pjax:complete", function () {
|
||||||
|
heo.categoriesBarActive(), heo.tagPageActive(), heo.onlyHome(), heo.addNavBackgroundInit(), heo.initIndexEssay(), heo.changeTimeInEssay(), heo.reflashEssayWaterFall(), heo.darkModeStatus(), heo.initThemeColor(), percent(), window.onscroll = percent, heo.hideLoading()
|
||||||
|
}), heo.initThemeColor(), percent(), window.onscroll = percent;
|
|
@ -0,0 +1 @@
|
||||||
|
.comment-barrage{position:fixed;bottom:0;right:20px;padding:0 0 20px 10px;z-index:100;display:flex;flex-direction:column;justify-content:end;align-items:flex-end;z-index:999;transition:.3s}@media screen and (max-width:768px){.comment-barrage{display:none!important}}.comment-barrage-item{min-width:300px;max-width:300px;width:fit-content;min-height:80px;max-height:150px;margin:4px;padding:8px 14px;background:var(--heo-maskbgdeep);border-radius:8px;color:var(--heo-fontcolor);animation:barrageIn .6s cubic-bezier(.42,0,.3,1.11);transition:.3s;display:flex;flex-direction:column;border:var(--style-border);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:blur(20px);position:fixed;box-shadow:var(--heo-shadow-border)}.comment-barrage-item:hover{border:var(--style-border-hover);box-shadow:var(--heo-shadow-main)}.comment-barrage-item.out{opacity:0;animation:barrageOut .6s cubic-bezier(.42,0,.3,1.11)}.comment-barrage-item.hovered{opacity:0}.comment-barrage-item .comment-barrage-close{color:var(--heo-secondtext);cursor:pointer;line-height:1;padding:4px}.comment-barrage-item .comment-barrage-close:hover{color:var(--heo-main)}.comment-barrage-item pre{display:none}.comment-barrage-item p img:not(.tk-owo-emotion){display:none}.comment-barrage-item blockquote{display:none}.comment-barrage-item .barrageHead{height:30px;padding:0;line-height:30px;font-size:12px;border-bottom:var(--style-border);display:flex;justify-content:space-between;align-items:center;font-weight:700;padding-bottom:6px}.comment-barrage-item .barrageHead .barrageTitle{color:var(--heo-card-bg);margin-right:8px;background:var(--heo-fontcolor);line-height:1;padding:4px;border-radius:4px}.comment-barrage-item .barrageAvatar{width:16px;height:16px;margin:0;margin-left:auto;margin-right:8px;border-radius:50%;background:var(--heo-secondbg)}.comment-barrage-item .barrageContent{font-size:14px!important;font-weight:400!important;height:calc(100% - 30px);overflow:scroll}.comment-barrage-item .barrageContent::-webkit-scrollbar{height:0;width:4px}.comment-barrage-item .barrageContent::-webkit-scrollbar-button{display:none}.comment-barrage-item .barrageContent p{margin:8px 0;line-height:1.3;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical}.comment-barrage-item .barrageContent h1,.comment-barrage-item .barrageContent h2,.comment-barrage-item .barrageContent h3,.comment-barrage-item .barrageContent h4{font-size:14px!important;font-weight:400!important;margin:8px 0!important}
|
|
@ -0,0 +1 @@
|
||||||
|
"use strict";function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(e,r):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=new Array(r);a<r;a++)t[a]=e[a];return t}var commentBarrageConfig={maxBarrage:1,barrageTime:4e3,twikooUrl:"https://twikoo.zhheo.com/",accessToken:"ad44f65c5bda8a966a13f8a5326960b7",pageUrl:window.location.pathname,barrageTimer:[],barrageList:[],barrageIndex:0,dom:document.querySelector(".comment-barrage")},commentInterval=null,hoverOnCommentBarrage=!1;function initCommentBarrage(){var e=JSON.stringify({event:"COMMENT_GET","commentBarrageConfig.accessToken":commentBarrageConfig.accessToken,url:commentBarrageConfig.pageUrl}),r=new XMLHttpRequest;r.withCredentials=!0,r.addEventListener("readystatechange",function(){4===this.readyState&&(commentBarrageConfig.barrageList=commentLinkFilter(JSON.parse(this.responseText).data),commentBarrageConfig.dom.innerHTML="")}),r.open("POST",commentBarrageConfig.twikooUrl),r.setRequestHeader("Content-Type","application/json"),r.send(e),clearInterval(commentInterval),commentInterval=null,commentInterval=setInterval(function(){commentBarrageConfig.barrageList.length&&!hoverOnCommentBarrage&&(popCommentBarrage(commentBarrageConfig.barrageList[commentBarrageConfig.barrageIndex]),commentBarrageConfig.barrageIndex+=1,commentBarrageConfig.barrageIndex%=commentBarrageConfig.barrageList.length),commentBarrageConfig.barrageTimer.length>(commentBarrageConfig.barrageList.length>commentBarrageConfig.maxBarrage?commentBarrageConfig.maxBarrage:commentBarrageConfig.barrageList.length)&&!hoverOnCommentBarrage&&removeCommentBarrage(commentBarrageConfig.barrageTimer.shift())},commentBarrageConfig.barrageTime)}function commentLinkFilter(e){e.sort(function(e,r){return e.created-r.created});var r=[];return e.forEach(function(e){r.push.apply(r,_toConsumableArray(getCommentReplies(e)))}),r}function getCommentReplies(e){if(e.replies){var r=[e];return e.replies.forEach(function(e){r.push.apply(r,_toConsumableArray(getCommentReplies(e)))}),r}return[]}function popCommentBarrage(e){var r=document.createElement("div");commentBarrageConfig.dom.clientWidth,commentBarrageConfig.dom.clientHeight;r.className="comment-barrage-item",r.innerHTML='\n\t\t<div class="barrageHead">\n <div class="barrageTitle">热评</div>\n\t\t\t<div class="barrageNick">'.concat(e.nick,'</div>\n\t\t\t<img class="barrageAvatar" src="https://cravatar.cn/avatar/').concat(e.mailMd5,'"/>\n\t\t\t<a class="comment-barrage-close" href="javascript:heo.switchCommentBarrage()"><i class="fa-solid fa-xmark"></i></a>\n\t\t</div>\n\t\t<div class="barrageContent">').concat(e.comment,"</div>\n\t"),commentBarrageConfig.barrageTimer.push(r),commentBarrageConfig.dom.append(r)}function removeCommentBarrage(e){e.className="comment-barrage-item out",setTimeout(function(){commentBarrageConfig.dom.removeChild(e)},1e3)}$(".comment-barrage").hover(function(){hoverOnCommentBarrage=!0,console.log("热评悬浮")},function(){hoverOnCommentBarrage=!1,console.log("停止悬浮")}),document.addEventListener("scroll",btf.throttle(function(){var e,r=window.scrollY+document.documentElement.clientHeight,a=(window.scrollY,document.querySelector(".comment-barrage")),t=document.getElementById("post-tools");t&&a&&(e=t.offsetTop+t.offsetHeight/2,768<document.body.clientWidth&&(a.style.bottom=r<e?"0":"-200px"))},200)),initCommentBarrage(),"false"!==localStorage.getItem("commentBarrageSwitch")?($(".comment-barrage").show(),$(".menu-commentBarrage-text").text("关闭热评"),document.querySelector("#consoleCommentBarrage").classList.add("on")):($(".comment-barrage").hide(),$(".menu-commentBarrage-text").text("显示热评"),document.querySelector("#consoleCommentBarrage").classList.remove("on")),document.addEventListener("pjax:send",function(){clearInterval(commentInterval)});
|
|
@ -0,0 +1 @@
|
||||||
|
"use strict";function getIpInfo(){fetch("https://api.ooomn.com/api/ip").then(function(e){return e.json()}).then(function(e){var n=e.country,t=e.ip,r=e.province,i=e.city,o=e.isp;document.getElementById("userAgentIp").innerHTML=t,document.getElementById("userAgentCountry").innerHTML=n,document.getElementById("userAgentRegion").innerHTML=r,document.getElementById("userAgentCity").innerHTML=i,document.getElementById("userAgentIsp").innerHTML=o;var u=navigator.userAgent;document.getElementById("userAgentDevice").innerHTML=u})}getIpInfo();
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html th:replace="modules/layouts/layout :: layout (header,content,head,footer,contentClass)"
|
||||||
|
xmlns:th="https://www.thymeleaf.org">
|
||||||
|
</html>
|
|
@ -0,0 +1,88 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<div class="aside-content" id="aside-content" th:fragment="aside">
|
||||||
|
<div class="card-widget card-info">
|
||||||
|
<!-- 描述信息 -->
|
||||||
|
<!--<div class="card-content">-->
|
||||||
|
<!-- <div class="card-info-avatar is-center">-->
|
||||||
|
<!-- <div class="author-info__sayhi" id="author-info__sayhi" th:text="${theme.config.aside.subtitle}">-->
|
||||||
|
<!-- 你好啊!我是-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div class="author-info__name" th:text="${theme.config.aside.title}">Liu ZhiHang</div>-->
|
||||||
|
<!-- <div class="author-info__description" th:utext="${theme.config.aside.description}">-->
|
||||||
|
<!-- 这里可以写一些<b>公告信息</b>或者<b>个人介绍</b>。-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
|
||||||
|
<!-- 跳转信息 -->
|
||||||
|
<!--<div class="banner-button-group">-->
|
||||||
|
<!-- <a class="banner-button" th:href="${theme.config.aside.button_link}">-->
|
||||||
|
<!-- <i class="fas fa-circle-arrow-up-right"></i>-->
|
||||||
|
<!-- <span class="banner-button-text" th:text="${theme.config.aside.button_text}">了解更多</span>-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!--</div>-->
|
||||||
|
|
||||||
|
<!--<div class="card-info-social-icons is-center">-->
|
||||||
|
<!-- <a class="social-icon" th:href="${theme.config.aside.github}" rel="external nofollow" target="_blank"-->
|
||||||
|
<!-- title="Github">-->
|
||||||
|
<!-- <i class="ri-github-line"></i>-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!-- <a class="social-icon" th:href="${theme.config.aside.mail}" rel="external nofollow" target="_blank"-->
|
||||||
|
<!-- title="Mail">-->
|
||||||
|
<!-- <i class="ri-mail-line"></i>-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!--</div>-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 微信公众号 -->
|
||||||
|
<div class="card-widget heo-right-widget" id="card-wechat" onclick='window.open("/wechat/")'>
|
||||||
|
<div id="flip-wrapper">
|
||||||
|
<div id="flip-content">
|
||||||
|
<div class="face"></div>
|
||||||
|
<div class="back face"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sticky_layout">
|
||||||
|
<div class="card-widget card-tags card-archives card-webinfo card-allinfo">
|
||||||
|
<div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div>
|
||||||
|
<div class="card-tag-cloud">
|
||||||
|
<a href="tags/AfterEffects/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">AfterEffects<sup>11</sup></a> <a
|
||||||
|
href="tags/Chrome/index.html" style="font-size:1em;color:#d3d3d3">Chrome<sup>10</sup></a> <a
|
||||||
|
href="tags/Docker/index.html" style="font-size:1em;color:#d3d3d3">Docker<sup>1</sup></a> <a
|
||||||
|
href="tags/Dribbble/index.html" style="font-size:1em;color:#d3d3d3">Dribbble<sup>9</sup></a>
|
||||||
|
<a href="tags/FinalCutPro/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">FinalCutPro<sup>5</sup></a> <a
|
||||||
|
href="tags/Heocan/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">Heocan<sup>21</sup></a> <a
|
||||||
|
href="tags/Heomagic/index.html" style="font-size:1em;color:#d3d3d3">Heomagic<sup>5</sup></a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="item-headline"><i class="fas fa-chart-line"></i><span>统计</span></div>
|
||||||
|
<div class="webinfo">
|
||||||
|
<div class="webinfo-item">
|
||||||
|
<div class="webinfo-item-title"><i class="item-icon fas fa-file-alt"></i>
|
||||||
|
<div class="item-name">文章总数 :</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-count">649</div>
|
||||||
|
</div>
|
||||||
|
<div class="webinfo-item">
|
||||||
|
<div class="webinfo-item-title"><i class="item-icon fas fa-stopwatch"></i>
|
||||||
|
<div class="item-name">建站天数 :</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-count" data-publishdate="2019-10-27T16:00:00.000Z" id="runtimeshow"></div>
|
||||||
|
</div>
|
||||||
|
<div class="webinfo-item">
|
||||||
|
<div class="webinfo-item-title"><i class="item-icon fas fa-font"></i>
|
||||||
|
<div class="item-name">全站字数 :</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-count">606.7k</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<div id="category-bar" th:fragment="category-bar">
|
||||||
|
<div class="category-bar-items" id="category-bar-items">
|
||||||
|
<div class="category-bar-item select" id="category-bar-home"><a href="index.html">首页</a></div>
|
||||||
|
<div class="category-bar-item" id="我的项目"><a
|
||||||
|
href="categories/%E6%88%91%E7%9A%84%E9%A1%B9%E7%9B%AE/index.html">我的项目</a></div>
|
||||||
|
</div>
|
||||||
|
<a class="category-bar-more" href="categories/index.html">更多</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,118 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<!-- 页脚模块 -->
|
||||||
|
<footer id="footer" th:fragment="foot">
|
||||||
|
<div id="footer_deal"><a class="deal_link" href="mailto:zh@zhheo.com" rel="external nofollow" title="mail"><i
|
||||||
|
class="fa-regular fa-envelope"></i></a><a class="deal_link" target="_blank"
|
||||||
|
href="https://weibo.com/zhheo" title="微博"
|
||||||
|
rel="noopener external nofollow noreferrer noopener"><i
|
||||||
|
class="ri-weibo-line" style="font-size:1.1rem"></i></a><a class="deal_link" target="_blank"
|
||||||
|
href="https://www.facebook.com/zhheo/"
|
||||||
|
rel="noopener external nofollow noreferrer noopener"
|
||||||
|
title="facebook"><i
|
||||||
|
class="ri-facebook-circle-line" style="font-size:1.2rem"></i></a><a class="deal_link" target="_blank"
|
||||||
|
href="https://dribbble.com/zhheo/"
|
||||||
|
rel="noopener external nofollow noreferrer noopener"
|
||||||
|
title="dribbble"><i
|
||||||
|
class="ri-dribbble-line" style="font-size:1.2rem"></i></a><img class="footer_mini_logo"
|
||||||
|
src="../img.zhheo.com/i/2022/08/31/630ef3b505ef5.webp"
|
||||||
|
title="返回顶部"
|
||||||
|
onclick="btf.scrollToDest(0,500)"><a
|
||||||
|
class="deal_link" target="_blank" href="https://github.com/zhheo/"
|
||||||
|
rel="noopener external nofollow noreferrer noopener" title="github"><i class="ri-github-line"
|
||||||
|
style="font-size:1.1rem"></i></a><a
|
||||||
|
class="deal_link" target="_blank" href="https://www.pinterest.com/zhheocom/_created/" title="pinterest"
|
||||||
|
rel="noopener external nofollow noreferrer noopener"><i class="ri-pinterest-line"
|
||||||
|
style="font-size:1.2rem"></i></a><a
|
||||||
|
class="deal_link" target="_blank" href="https://space.bilibili.com/4218173/"
|
||||||
|
rel="noopener external nofollow noreferrer noopener" title="bilibili"><i class="ri-bilibili-fill"
|
||||||
|
style="font-size:1.1rem"></i></a><a
|
||||||
|
class="deal_link" target="_blank" href="https://v.douyin.com/6SMbLRQ/"
|
||||||
|
rel="noopener external nofollow noreferrer noopener" title="Tiktok"><i class="fa-brands fa-tiktok"></i></a>
|
||||||
|
</div>
|
||||||
|
<div id="heo-footer">
|
||||||
|
<div class="footer-group"><h3 class="footer-title">软件</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="p/4db484b3.html">轻节食</a><a class="footer-item"
|
||||||
|
href="p/a170ac02.html">DelSpace3</a><a
|
||||||
|
class="footer-item" href="p/9df485ea.html">比例计</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">产品</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item"
|
||||||
|
href="tags/%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/index.html">设计报告</a><a
|
||||||
|
class="footer-item" href="tags/%E4%BA%A7%E5%93%81/index.html">优质报告</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">设计</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="tags/Heocan/index.html">Heocan</a><a
|
||||||
|
class="footer-item" href="tags/Sketch/index.html">Sketch</a><a class="footer-item"
|
||||||
|
href="tags/%E4%BC%98%E8%B4%A8%E6%8A%A5%E5%91%8A/index.html">设计报告</a><a
|
||||||
|
class="footer-item" href="tags/Photoshop/index.html">Photoshop</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">开发</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="tags/Hexo/index.html">Hexo魔改</a><a
|
||||||
|
class="footer-item" href="tags/Swift/index.html">Swift开发</a><a class="footer-item"
|
||||||
|
href="tags/%E7%BD%91%E9%A1%B5%E5%89%8D%E7%AB%AF/index.html">网页前端</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">生活</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="musiclist/index.html">音乐榜单</a><a
|
||||||
|
class="footer-item" href="movies/index.html">我的电影</a><a class="footer-item"
|
||||||
|
href="tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/index.html">读书笔记</a><a
|
||||||
|
class="footer-item" href="tags/%E6%B7%B7%E5%89%AA/index.html">视频剪辑</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">导航</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="essay/index.html">即刻短文</a><a
|
||||||
|
class="footer-item" href="tlink/index.html">在线工具</a><a class="footer-item"
|
||||||
|
href="link/index.html#%E5%8F%8B%E9%93%BE%E6%96%87%E7%AB%A0">友链文章</a><a
|
||||||
|
class="footer-item" href="moments/index.html">鱼塘</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">服务</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="https://invite.51.la/1NzKqTeb?target=V6"
|
||||||
|
target="_blank" rel="noopener nofollow">51la统计</a><a class="footer-item"
|
||||||
|
href="https://bf.zzxworld.com/s/612"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener nofollow">BlogFinder</a><a
|
||||||
|
class="footer-item" href="https://www.foreverblog.cn/blog/2050.html" target="_blank"
|
||||||
|
rel="noopener nofollow">十年之约</a><a class="footer-item" href="https://wangzhan.qianxin.com/"
|
||||||
|
target="_blank" rel="noopener nofollow">奇安信</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">协议</h3>
|
||||||
|
<div class="footer-links"><a class="footer-item" href="privacy/index.html">隐私协议</a><a
|
||||||
|
class="footer-item" href="cookies/index.html">Cookies</a><a class="footer-item"
|
||||||
|
href="cc/index.html">版权协议</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-group"><h3 class="footer-title">友链</h3>
|
||||||
|
<div class="footer-links" id="friend-links-in-footer"><a class="footer-item"
|
||||||
|
href="link/index.html">随机生成中..</a><a
|
||||||
|
class="footer-item" href="link/index.html">随机生成中..</a><a class="footer-item"
|
||||||
|
href="link/index.html">随机生成中..</a><a
|
||||||
|
class="footer-item" href="link/index.html">随机生成中..</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="footer-banner">
|
||||||
|
<div class="footer-banner-links">
|
||||||
|
<div class="footer-banner-left">
|
||||||
|
<div id="footer-banner-tips">
|
||||||
|
<div class="copyright">©2019 - 2022 By 张洪Heo</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-banner-right"><a class="footer-banner-link" href="/rss/">订阅</a><a
|
||||||
|
class="footer-banner-link" href="/update/">主题</a><a class="footer-banner-link"
|
||||||
|
href="/about/">关于</a><a
|
||||||
|
class="footer-banner-link" target="_blank" href="https://beian.miit.gov.cn/#/Integrated/index"
|
||||||
|
rel="noopener external nofollow noreferrer noopener">京ICP备19051325号</a><a
|
||||||
|
class="footer-banner-link cc" href="/cc/" title="cc协议"><i class="iconfont icon-occ"></i><i
|
||||||
|
class="iconfont icon-occ-by"></i><i class="iconfont icon-onc"></i><i
|
||||||
|
class="iconfont icon-ond"></i></a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="cookies-window">
|
||||||
|
<div class="cookies-window-title">协议提醒助手</div>
|
||||||
|
<div class="cookies-window-content"><span class="cookies-tip">查看本站为你的个人隐私做出的努力</span><a
|
||||||
|
class="cookies-link" href="privacy/index.html" title="本站如何保护你的隐私"><i
|
||||||
|
class="fas fa-arrow-circle-right"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<div id="quit-box" onclick="RemoveRewardMask()"></div>
|
||||||
|
<div class="comment-barrage"></div>
|
||||||
|
</footer>
|
||||||
|
</html>
|
|
@ -0,0 +1,117 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<header class="not-top-img" id="page-header" th:fragment="header">
|
||||||
|
<nav id="nav">
|
||||||
|
<div id="nav-group">
|
||||||
|
<div id="blog_name">
|
||||||
|
<div class="back-home-button" tabindex="-1">
|
||||||
|
<i class="back-home-button-icon fas fa-grip-vertical"></i>
|
||||||
|
<div class="back-menu-list-groups">
|
||||||
|
<div class="back-menu-list-group">
|
||||||
|
<div class="back-menu-list-title">标题</div>
|
||||||
|
<div class="back-menu-list">
|
||||||
|
<a class="back-menu-item" href="https://zhheo.com/"
|
||||||
|
rel="external nofollow" target="_blank"
|
||||||
|
title="这是标题">
|
||||||
|
<img class="back-menu-item-icon"
|
||||||
|
src="https://cdn.zhheo.com/Guli/img/www-mini.png"><span
|
||||||
|
class="back-menu-item-text">主页</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 返回主页 -->
|
||||||
|
<a href="index.html" id="site-name" title="返回博客主页">
|
||||||
|
<!-- 返回主页的 icon 可以使用文字代替-->
|
||||||
|
<i class="iconfont icon-heo"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div id="page-name-mask">
|
||||||
|
<div id="page-name"><a id="page-name-text" onclick="btf.scrollToDest(0,500)"></a></div>
|
||||||
|
</div>
|
||||||
|
<!-- 菜单 -->
|
||||||
|
<div id="menus">
|
||||||
|
<div class="menus_items">
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>文库</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="archives/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-list-timeline"></i> <span>文章列表</span></a></li>
|
||||||
|
<li><a class="site-page child" href="categories/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-list-tree"></i> <span>全部分类</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-tags"></i> <span>全部标签</span></a></li>
|
||||||
|
<li><a class="site-page child" href="essay/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-rectangles-mixed"></i> <span>即刻短文</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>专栏</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child"
|
||||||
|
href="tags/%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-swatchbook"></i> <span>设计报告</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/Heocan/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-pen-paintbrush"></i> <span>设计分享</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/Sketch/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-palette"></i> <span>设计工具</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/%E6%B7%B7%E5%89%AA/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-scissors"></i> <span>视频混剪</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>友链</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="moments/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-fish-fins"></i> <span>友链鱼塘</span></a></li>
|
||||||
|
<li><a class="site-page child" href="link/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-user-group"></i> <span>友情链接</span></a></li>
|
||||||
|
<li><a class="site-page child" href="javascript:travelling()" rel="external nofollow"><i
|
||||||
|
class="fa-fw fa-duotone fa-treasure-chest"></i> <span>宝藏博主</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>我的</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="tlink/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-screwdriver-wrench"></i> <span>在线工具</span></a>
|
||||||
|
</li>
|
||||||
|
<li><a class="site-page child" href="movies/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-film-simple"></i> <span>电影推荐</span></a></li>
|
||||||
|
<li><a class="site-page child" href="about/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-face-awesome"></i> <span>关于本站</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="nav-right">
|
||||||
|
<div class="nav-button only-home" id="travellings_button"><a class="site-page"
|
||||||
|
href="javascript:void(0);"
|
||||||
|
onclick="totraveling()"
|
||||||
|
rel="external nofollow"
|
||||||
|
title="随机前往一个开往项目网站"><i
|
||||||
|
class="fa-duotone fa-train-subway" style="font-size:1rem"></i></a></div>
|
||||||
|
<div class="nav-button" id="randomPost_button"><a class="site-page" onclick="toRandomPost()"
|
||||||
|
title="随机前往一个文章"><i
|
||||||
|
class="fa-duotone fa-dice" style="font-size:1rem"></i></a></div>
|
||||||
|
<div class="nav-button" id="search-button"><a class="site-page social-icon search"
|
||||||
|
href="javascript:void(0);"
|
||||||
|
rel="external nofollow" title="站内搜索"><i
|
||||||
|
class="fas fa-magnifying-glass" style="font-size:1rem"></i></a></div>
|
||||||
|
<div class="nav-button"><a class="console_switchbutton" href="javascript:void(0);"
|
||||||
|
onclick="heo.showConsole()" rel="external nofollow" title="显示中控台"><i
|
||||||
|
class="fa-duotone fa-gear" style="font-size:1rem"></i></a></div>
|
||||||
|
<div class="nav-button" id="nav-totop" onclick="btf.scrollToDest(0,500)"><a class="totopbtn"><i
|
||||||
|
class="fas fa-arrow-up"></i><span id="percent">0</span></a></div>
|
||||||
|
<div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,773 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" th:fragment="layout (header,content,head,footer,contentClass)" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
||||||
|
<meta content="width=device-width,initial-scale=1" name="viewport">
|
||||||
|
<title th:text="${site.title}"></title>
|
||||||
|
<meta content="telephone=no" name="format-detection">
|
||||||
|
<meta content="var(--heo-card-bg)" name="theme-color">
|
||||||
|
<script th:src="@{/assets/js/heo.js}"></script>
|
||||||
|
|
||||||
|
<meta name="format-detection" content="telephone=no"/>
|
||||||
|
<meta name="theme-color" content="var(--heo-card-bg)"/>
|
||||||
|
|
||||||
|
<link rel="stylesheet" th:href="@{/assets/zhheo/zhheoblog.css}">
|
||||||
|
<!-- fontawesome-pro https://github.com/duyplus/fontawesome-pro -->
|
||||||
|
<link href="https://cdn.jsdelivr.net/gh/duyplus/fontawesome-pro/css/all.min.css"
|
||||||
|
media="print"
|
||||||
|
onload='this.media="all"'
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 右下角通知 -->
|
||||||
|
<link href="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/node-snackbar/0.1.16/snackbar.min.css"
|
||||||
|
media="print"
|
||||||
|
onload='this.media="all"'
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<!-- 全局配置 -->
|
||||||
|
<script>var GLOBAL_CONFIG = {
|
||||||
|
root: "/",
|
||||||
|
localSearch: void 0,
|
||||||
|
translate: {defaultEncoding: 2, translateDelay: 0, msgToTraditionalChinese: "简", msgToSimplifiedChinese: "繁"},
|
||||||
|
noticeOutdate: void 0,
|
||||||
|
highlight: {plugin: "highlighjs", highlightCopy: !0, highlightLang: !0, highlightHeightLimit: 400},
|
||||||
|
copy: {success: "复制成功", error: "复制错误", noSupport: "浏览器不支持"},
|
||||||
|
relativeDate: {homepage: !0, post: !1},
|
||||||
|
runtime: "天",
|
||||||
|
date_suffix: {just: "刚刚", min: "分钟前", hour: "小时前", day: "天前", month: "个月前"},
|
||||||
|
copyright: void 0,
|
||||||
|
lightbox: "fancybox",
|
||||||
|
Snackbar: {
|
||||||
|
chs_to_cht: "你已切换为繁体",
|
||||||
|
cht_to_chs: "你已切换为简体",
|
||||||
|
day_to_night: "你已切换为深色模式",
|
||||||
|
night_to_day: "你已切换为浅色模式",
|
||||||
|
bgLight: "#49b1f5",
|
||||||
|
bgDark: "#121212",
|
||||||
|
position: "top-center"
|
||||||
|
},
|
||||||
|
source: {
|
||||||
|
jQuery: "https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js",
|
||||||
|
justifiedGallery: {
|
||||||
|
js: "https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js",
|
||||||
|
css: "https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/justifiedGallery/3.8.1/css/justifiedGallery.min.css"
|
||||||
|
},
|
||||||
|
fancybox: {
|
||||||
|
js: "https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.js",
|
||||||
|
css: "https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.css"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isPhotoFigcaption: !0,
|
||||||
|
islazyload: !0,
|
||||||
|
isanchor: !1
|
||||||
|
}</script>
|
||||||
|
<!-- 站点配置 -->
|
||||||
|
<script id="config-diff">var GLOBAL_CONFIG_SITE = {
|
||||||
|
title: "张洪Heo",
|
||||||
|
isPost: !1,
|
||||||
|
isHome: !0,
|
||||||
|
isHighlightShrink: !1,
|
||||||
|
isToc: !1,
|
||||||
|
postUpdate: "2022-09-30 12:24:38"
|
||||||
|
}</script>
|
||||||
|
<noscript>
|
||||||
|
<style>#nav {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
.justified-gallery img {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#post-meta time, #recent-posts time {
|
||||||
|
display: inline !important
|
||||||
|
}</style>
|
||||||
|
</noscript>
|
||||||
|
<script>(win => {
|
||||||
|
win.saveToLocal = {
|
||||||
|
set: function setWithExpiry(key, value, ttl) {
|
||||||
|
if (ttl === 0) return
|
||||||
|
const now = new Date()
|
||||||
|
const expiryDay = ttl * 86400000
|
||||||
|
const item = {
|
||||||
|
value: value,
|
||||||
|
expiry: now.getTime() + expiryDay,
|
||||||
|
}
|
||||||
|
localStorage.setItem(key, JSON.stringify(item))
|
||||||
|
},
|
||||||
|
|
||||||
|
get: function getWithExpiry(key) {
|
||||||
|
const itemStr = localStorage.getItem(key)
|
||||||
|
|
||||||
|
if (!itemStr) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
const item = JSON.parse(itemStr)
|
||||||
|
const now = new Date()
|
||||||
|
|
||||||
|
if (now.getTime() > item.expiry) {
|
||||||
|
localStorage.removeItem(key)
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
return item.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
win.getScript = url => new Promise((resolve, reject) => {
|
||||||
|
const script = document.createElement('script')
|
||||||
|
script.src = url
|
||||||
|
script.async = true
|
||||||
|
script.onerror = reject
|
||||||
|
script.onload = script.onreadystatechange = function () {
|
||||||
|
const loadState = this.readyState
|
||||||
|
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
|
||||||
|
script.onload = script.onreadystatechange = null
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
document.head.appendChild(script)
|
||||||
|
})
|
||||||
|
|
||||||
|
win.activateDarkMode = function () {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'dark')
|
||||||
|
heo.initThemeColor()
|
||||||
|
}
|
||||||
|
win.activateLightMode = function () {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'light')
|
||||||
|
heo.initThemeColor()
|
||||||
|
}
|
||||||
|
const t = saveToLocal.get('theme')
|
||||||
|
|
||||||
|
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||||
|
const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
|
||||||
|
const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
|
||||||
|
const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
|
||||||
|
|
||||||
|
if (t === undefined) {
|
||||||
|
if (isLightMode) activateLightMode()
|
||||||
|
else if (isDarkMode) activateDarkMode()
|
||||||
|
else if (isNotSpecified || hasNoSupport) {
|
||||||
|
const now = new Date()
|
||||||
|
const hour = now.getHours()
|
||||||
|
const isNight = hour <= 6 || hour >= 18
|
||||||
|
isNight ? activateDarkMode() : activateLightMode()
|
||||||
|
}
|
||||||
|
window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
|
||||||
|
if (saveToLocal.get('theme') === undefined) {
|
||||||
|
e.matches ? activateDarkMode() : activateLightMode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else if (t === 'light') activateLightMode()
|
||||||
|
else activateDarkMode()
|
||||||
|
|
||||||
|
const asideStatus = saveToLocal.get('aside-status')
|
||||||
|
if (asideStatus !== undefined) {
|
||||||
|
if (asideStatus === 'hide') {
|
||||||
|
document.documentElement.classList.add('hide-aside')
|
||||||
|
} else {
|
||||||
|
document.documentElement.classList.remove('hide-aside')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(window)</script>
|
||||||
|
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js"></script>
|
||||||
|
<link href="https://at.alicdn.com/t/font_1891866_47sukspu18q.css" rel="stylesheet">
|
||||||
|
<link href="https://cdn2.tianli0.top/npm/remixicon@2.5.0/fonts/remixicon.css" rel="stylesheet">
|
||||||
|
<link href="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/Swiper/8.0.6/swiper-bundle.min.css" rel="stylesheet">
|
||||||
|
<link th:href="@{/assets/zhheo/commentBarrage.css}" rel="stylesheet">
|
||||||
|
<script data-pace-options='{ "restartOnRequestAfter":false,"eventLag":false}'
|
||||||
|
src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/pace/1.2.4/pace.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- loading 页面 -->
|
||||||
|
<div id="loading-box" onclick="heo.hideLoading()">
|
||||||
|
<div class="loading-bg"><img class="loading-img" src="https://img.zhheo.com/i/2022/08/31/630f01a3755aa.webp"></div>
|
||||||
|
</div>
|
||||||
|
<div id="web_bg"></div>
|
||||||
|
|
||||||
|
<!-- 控制台 -->
|
||||||
|
<div id="console">
|
||||||
|
<div class="close-btn" href="javascript:void(0);" onclick="heo.hideConsole()"><i class="fas fa-circle-xmark"></i>
|
||||||
|
</div>
|
||||||
|
<div class="console-card-group">
|
||||||
|
<div class="console-card-group-left">
|
||||||
|
<div class="console-card" id="card-newest-comments" onclick="heo.hideConsole()">
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="author-content-item-tips">互动</div>
|
||||||
|
<span class="author-content-item-title">最近评论</span></div>
|
||||||
|
<div class="aside-list"><span>正在加载中...</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="console-card-group-right">
|
||||||
|
<div class="console-card tags" onclick="heo.hideConsole()">
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="author-content-item-tips">标签</div>
|
||||||
|
<span class="author-content-item-title">寻找感兴趣的领域</span></div>
|
||||||
|
<div class="card-tag-cloud"><a href="tags/AfterEffects/index.html" style="font-size:1em;color:#d3d3d3">AfterEffects<sup>11</sup></a>
|
||||||
|
<a href="tags/Chrome/index.html" style="font-size:1em;color:#d3d3d3">Chrome<sup>10</sup></a> <a
|
||||||
|
href="tags/Docker/index.html" style="font-size:1em;color:#d3d3d3">Docker<sup>1</sup></a> <a
|
||||||
|
href="tags/Dribbble/index.html" style="font-size:1em;color:#d3d3d3">Dribbble<sup>9</sup></a>
|
||||||
|
<a href="tags/FinalCutPro/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">FinalCutPro<sup>5</sup></a> <a href="tags/Heocan/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">Heocan<sup>21</sup></a>
|
||||||
|
<a href="tags/Heomagic/index.html" style="font-size:1em;color:#d3d3d3">Heomagic<sup>5</sup></a> <a
|
||||||
|
href="tags/Hexo/index.html" style="font-size:1em;color:#d3d3d3">Hexo<sup>43</sup></a> <a
|
||||||
|
href="tags/HomePod/index.html" style="font-size:1em;color:#d3d3d3">HomePod<sup>2</sup></a>
|
||||||
|
<a href="tags/Mac/index.html" style="font-size:1em;color:#d3d3d3">Mac<sup>48</sup></a> <a
|
||||||
|
href="tags/Photoshop/index.html" style="font-size:1em;color:#d3d3d3">Photoshop<sup>23</sup></a>
|
||||||
|
<a href="tags/Principle/index.html" style="font-size:1em;color:#d3d3d3">Principle<sup>2</sup></a> <a
|
||||||
|
href="tags/Python/index.html" style="font-size:1em;color:#d3d3d3">Python<sup>9</sup></a> <a
|
||||||
|
href="tags/Sketch/index.html" style="font-size:1em;color:#d3d3d3">Sketch<sup>75</sup></a> <a
|
||||||
|
href="tags/Sketch-Data/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">Sketch-Data<sup>3</sup></a> <a
|
||||||
|
href="tags/Swift/index.html" style="font-size:1em;color:#d3d3d3">Swift<sup>98</sup></a> <a
|
||||||
|
href="tags/SwiftUI-100days/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">SwiftUI-100days<sup>48</sup></a> <a
|
||||||
|
href="tags/VI/index.html" style="font-size:1em;color:#d3d3d3">VI<sup>10</sup></a> <a
|
||||||
|
href="tags/VLOG/index.html" style="font-size:1em;color:#d3d3d3">VLOG<sup>2</sup></a> <a
|
||||||
|
href="tags/iOS/index.html" style="font-size:1em;color:#d3d3d3">iOS<sup>30</sup></a> <a
|
||||||
|
href="tags/illustrator/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">illustrator<sup>8</sup></a> <a
|
||||||
|
href="tags/%E4%BA%A7%E5%93%81/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">产品<sup>16</sup></a> <a
|
||||||
|
href="tags/%E4%BC%98%E8%B4%A8%E6%8A%A5%E5%91%8A/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">优质报告<sup>3</sup></a> <a
|
||||||
|
href="tags/%E4%BD%93%E9%AA%8C%E5%AE%98/index.html" style="font-size:1em;color:#d3d3d3">体验官<sup>3</sup></a>
|
||||||
|
<a href="tags/%E5%8A%9E%E5%85%AC/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">办公<sup>1</sup></a> <a
|
||||||
|
href="tags/%E5%AD%97%E4%BD%93/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">字体<sup>10</sup></a> <a
|
||||||
|
href="tags/%E5%B9%B2%E8%B4%A7/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">干货<sup>138</sup></a> <a
|
||||||
|
href="tags/%E5%BC%80%E5%8F%91/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">开发<sup>179</sup></a> <a
|
||||||
|
href="tags/%E5%BF%85%E7%9C%8B/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">必看<sup>45</sup></a> <a
|
||||||
|
href="tags/%E6%95%99%E7%A8%8B/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">教程<sup>254</sup></a> <a
|
||||||
|
href="tags/%E6%97%A5%E5%B8%B8/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">日常<sup>27</sup></a> <a
|
||||||
|
href="tags/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">更新日志<sup>7</sup></a> <a
|
||||||
|
href="tags/%E6%B7%B7%E5%89%AA/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">混剪<sup>5</sup></a> <a
|
||||||
|
href="tags/%E7%83%AD%E9%97%A8/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">热门<sup>50</sup></a> <a
|
||||||
|
href="tags/%E7%94%B5%E5%AD%90%E4%B9%A6/index.html" style="font-size:1em;color:#d3d3d3">电子书<sup>1</sup></a>
|
||||||
|
<a href="tags/%E7%BD%91%E9%A1%B5%E5%89%8D%E7%AB%AF/index.html" style="font-size:1em;color:#d3d3d3">网页前端<sup>44</sup></a>
|
||||||
|
<a href="tags/%E8%A1%A8%E6%83%85/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">表情<sup>2</sup></a> <a
|
||||||
|
href="tags/%E8%A7%86%E9%A2%91/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">视频<sup>17</sup></a> <a
|
||||||
|
href="tags/%E8%AE%BE%E8%AE%A1/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">设计<sup>216</sup></a> <a
|
||||||
|
href="tags/%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">设计报告<sup>12</sup></a> <a
|
||||||
|
href="tags/%E8%AF%84%E6%B5%8B/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">评测<sup>10</sup></a> <a
|
||||||
|
href="tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">读书笔记<sup>6</sup></a> <a
|
||||||
|
href="tags/%E8%BD%AF%E4%BB%B6/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">软件<sup>50</sup></a> <a
|
||||||
|
href="tags/%E8%BF%90%E7%BB%B4/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">运维<sup>8</sup></a> <a
|
||||||
|
href="tags/%E8%BF%90%E8%90%A5/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">运营<sup>4</sup></a> <a
|
||||||
|
href="tags/%E9%97%B2%E8%81%8A/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">闲聊<sup>18</sup></a> <a
|
||||||
|
href="tags/%E9%9F%B3%E4%B9%90/index.html"
|
||||||
|
style="font-size:1em;color:#d3d3d3">音乐<sup>6</sup></a></div>
|
||||||
|
</div>
|
||||||
|
<div class="console-card history" onclick="heo.hideConsole()">
|
||||||
|
<div class="item-headline"><i class="fas fa-archive"></i><span>文章</span></div>
|
||||||
|
<ul class="card-archive-list">
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2022/index.html"><span
|
||||||
|
class="card-archive-list-date">2022</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">92</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2021/index.html"><span
|
||||||
|
class="card-archive-list-date">2021</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">147</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2020/index.html"><span
|
||||||
|
class="card-archive-list-date">2020</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">319</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2019/index.html"><span
|
||||||
|
class="card-archive-list-date">2019</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">62</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2018/index.html"><span
|
||||||
|
class="card-archive-list-date">2018</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">1</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2017/index.html"><span
|
||||||
|
class="card-archive-list-date">2017</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">6</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2016/index.html"><span
|
||||||
|
class="card-archive-list-date">2016</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">3</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
<li class="card-archive-list-item"><a class="card-archive-list-link"
|
||||||
|
href="archives/2015/index.html"><span
|
||||||
|
class="card-archive-list-date">2015</span>
|
||||||
|
<div class="card-archive-list-count-group"><span class="card-archive-list-count">19</span><span
|
||||||
|
class="card-archive-list-count-unit">篇</span></div>
|
||||||
|
</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="button-group">
|
||||||
|
<div class="console-btn-item"><a class="darkmode_switchbutton" href="javascript:void(0);"
|
||||||
|
onclick="rm.switchDarkMode()" rel="external nofollow" title="显示模式切换"><i
|
||||||
|
class="fa-duotone fa-moon" style="font-size:1rem"></i></a></div>
|
||||||
|
<div class="console-btn-item" id="consoleKeyboard" onclick="heo.keyboardToggle()" title="快捷键开关"><a
|
||||||
|
class="keyboard-switch"><i class="fa-duotone fa-keyboard"></i></a></div>
|
||||||
|
<div class="console-btn-item" id="assist-open" onclick="heo.hideConsole()" title="无障碍工具栏"><a
|
||||||
|
class="assist-btn"><i class="fa-duotone fa-wheelchair"></i></a></div>
|
||||||
|
<div class="console-btn-item" id="consoleCommentBarrage" onclick="heo.switchCommentBarrage()" title="热评开关">
|
||||||
|
<a class="commentBarrage"><i class="fa-solid fa-message-captions"></i></a></div>
|
||||||
|
<div class="console-btn-item" id="consoleMusic" onclick="heo.musicToggle()" title="音乐开关"><a
|
||||||
|
class="music-switch"><i class="fa-duotone fa-music"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<div class="console-mask" href="javascript:void(0);" onclick="heo.hideConsole()" rel="external nofollow"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 侧边栏 -->
|
||||||
|
<div id="sidebar">
|
||||||
|
<div id="menu-mask"></div>
|
||||||
|
<div id="sidebar-menus">
|
||||||
|
<div class="author-avatar"></div>
|
||||||
|
<div class="site-data">
|
||||||
|
<div class="data-item is-center">
|
||||||
|
<div class="data-item-link"><a href="archives/index.html">
|
||||||
|
<div class="headline">文章</div>
|
||||||
|
<div class="length-num">649</div>
|
||||||
|
</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="data-item is-center">
|
||||||
|
<div class="data-item-link"><a href="tags/index.html">
|
||||||
|
<div class="headline">标签</div>
|
||||||
|
<div class="length-num">47</div>
|
||||||
|
</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="data-item is-center">
|
||||||
|
<div class="data-item-link"><a href="categories/index.html">
|
||||||
|
<div class="headline">分类</div>
|
||||||
|
<div class="length-num">11</div>
|
||||||
|
</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="menus_items">
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>文库</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="archives/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-list-timeline"></i> <span>文章列表</span></a></li>
|
||||||
|
<li><a class="site-page child" href="categories/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-list-tree"></i> <span>全部分类</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/index.html"><i class="fa-fw fa-duotone fa-tags"></i>
|
||||||
|
<span>全部标签</span></a></li>
|
||||||
|
<li><a class="site-page child" href="essay/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-rectangles-mixed"></i> <span>即刻短文</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>专栏</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="tags/%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-swatchbook"></i> <span>设计报告</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/Heocan/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-pen-paintbrush"></i> <span>设计分享</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/Sketch/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-palette"></i> <span>设计工具</span></a></li>
|
||||||
|
<li><a class="site-page child" href="tags/%E6%B7%B7%E5%89%AA/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-scissors"></i> <span>视频混剪</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>友链</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="moments/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-fish-fins"></i> <span>友链鱼塘</span></a></li>
|
||||||
|
<li><a class="site-page child" href="link/index.html"><i class="fa-fw fa-duotone fa-user-group"></i>
|
||||||
|
<span>友情链接</span></a></li>
|
||||||
|
<li><a class="site-page child" href="javascript:travelling()" rel="external nofollow"><i
|
||||||
|
class="fa-fw fa-duotone fa-treasure-chest"></i> <span>宝藏博主</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="menus_item"><a class="site-page" href="javascript:void(0);"
|
||||||
|
rel="external nofollow"><span>我的</span><i
|
||||||
|
class="fas fa-chevron-down expand"></i></a>
|
||||||
|
<ul class="menus_item_child">
|
||||||
|
<li><a class="site-page child" href="tlink/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-screwdriver-wrench"></i> <span>在线工具</span></a></li>
|
||||||
|
<li><a class="site-page child" href="movies/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-film-simple"></i> <span>电影推荐</span></a></li>
|
||||||
|
<li><a class="site-page child" href="about/index.html"><i
|
||||||
|
class="fa-fw fa-duotone fa-face-awesome"></i> <span>关于本站</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page" id="body-wrap">
|
||||||
|
<!-- 头部导航栏 -->
|
||||||
|
|
||||||
|
<header th:replace="modules/header :: header"></header>
|
||||||
|
<div id="home_top">
|
||||||
|
<!-- 每日说说 -->
|
||||||
|
<div th:replace="modules/time-list :: time-list"></div>
|
||||||
|
<!-- 置顶内容 -->
|
||||||
|
<div th:replace="modules/top-post :: top-post"></div>
|
||||||
|
</div>
|
||||||
|
<main class="layout" id="content-inner">
|
||||||
|
<div class="recent-posts" id="recent-posts">
|
||||||
|
|
||||||
|
<!-- 分类导航栏 -->
|
||||||
|
<div th:replace="modules/category-bar :: category-bar"></div>
|
||||||
|
|
||||||
|
<th:block th:replace="modules/post-list :: post-list"></th:block>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div th:replace="modules/aside :: aside"></div>
|
||||||
|
</main>
|
||||||
|
<!--<!– foot –>-->
|
||||||
|
<footer th:replace="modules/footer :: foot"></footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--<div th:replace="module/rightside :: rightside"></div>-->
|
||||||
|
<div id="rightside">
|
||||||
|
<div id="rightside-config-hide">
|
||||||
|
<button id="translateLink" title="简繁转换" type="button">简</button>
|
||||||
|
<button id="darkmode" title="浅色和深色模式转换" type="button"><i class="fas fa-adjust"></i></button>
|
||||||
|
<button id="hide-aside-btn" title="单栏和双栏切换" type="button"><i class="fas fa-arrows-alt-h"></i></button>
|
||||||
|
</div>
|
||||||
|
<div id="rightside-config-show">
|
||||||
|
<button id="rightside_config" title="设置" type="button"><i class="fas fa-cog fa-spin"></i></button>
|
||||||
|
<button id="go-up" title="回到顶部" type="button"><i class="fas fa-arrow-up"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="js-pjax">
|
||||||
|
<div id="rightMenu">
|
||||||
|
<div class="rightMenu-group rightMenu-small">
|
||||||
|
<div class="rightMenu-item" id="menu-backward"><i class="fa-solid fa-arrow-left"></i></div>
|
||||||
|
<div class="rightMenu-item" id="menu-forward"><i class="fa-solid fa-arrow-right"></i></div>
|
||||||
|
<div class="rightMenu-item" id="menu-refresh"><i class="fa-solid fa-arrow-rotate-right"></i></div>
|
||||||
|
<div class="rightMenu-item" id="menu-top"><i class="fa-solid fa-arrow-up"></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="rightMenu-group rightMenu-line rightMenuPlugin">
|
||||||
|
<div class="rightMenu-item" id="menu-copytext"><i class="fa-duotone fa-copy"></i><span>复制选中文本</span>
|
||||||
|
</div>
|
||||||
|
<div class="rightMenu-item" id="menu-pastetext"><i class="fa-duotone fa-paste"></i><span>粘贴文本</span>
|
||||||
|
</div>
|
||||||
|
<a class="rightMenu-item" id="menu-commenttext"><i
|
||||||
|
class="fa-duotone fa-comment-medical"></i><span>引用到评论</span></a>
|
||||||
|
<div class="rightMenu-item" id="menu-newwindow"><i
|
||||||
|
class="fa-duotone fa-window-restore"></i><span>新窗口打开</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-copylink"><i
|
||||||
|
class="fa-duotone fa-link-horizontal"></i><span>复制链接地址</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-copyimg"><i class="fa-duotone fa-images"></i><span>复制此图片</span>
|
||||||
|
</div>
|
||||||
|
<div class="rightMenu-item" id="menu-downloadimg"><i
|
||||||
|
class="fa-duotone fa-download"></i><span>下载此图片</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-search"><i
|
||||||
|
class="fa-solid fa-magnifying-glass"></i><span>站内搜索</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-searchBaidu"><i
|
||||||
|
class="fa-solid fa-magnifying-glass"></i><span>百度搜索</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-music-toggle"><i class="fas fa-play"></i><span>播放音乐</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-music-back"><i
|
||||||
|
class="fa-duotone fa-backward"></i><span>切换到上一首</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-music-forward"><i
|
||||||
|
class="fa-duotone fa-forward"></i><span>切换到下一首</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-music-playlist"
|
||||||
|
onclick='window.open("https://music.163.com/#/playlist?app_version=8.8.36&id=5197802668","_blank")'>
|
||||||
|
<i class="fa-duotone fa-list-music"></i><span>查看所有歌曲</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-music-copyMusicName"><i class="fa-duotone fa-copy"></i>
|
||||||
|
<span>复制歌名</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="rightMenu-group rightMenu-line rightMenuOther"><a class="rightMenu-item menu-link"
|
||||||
|
id="menu-randomPost"><i
|
||||||
|
class="fa-duotone fa-dice"></i><span>随便逛逛</span></a><a class="rightMenu-item menu-link"
|
||||||
|
href="categories/index.html"><i
|
||||||
|
class="fa-duotone fa-list-tree"></i><span>博客分类</span></a><a class="rightMenu-item menu-link"
|
||||||
|
href="tags/index.html"><i
|
||||||
|
class="fa-duotone fa-tags"></i><span>文章标签</span></a></div>
|
||||||
|
<div class="rightMenu-group rightMenu-line"><a class="rightMenu-item menu-link" href="cc/index.html"><i
|
||||||
|
class="fa-solid fa-hand"></i><span>隐私协议</span></a><a class="rightMenu-item menu-link"
|
||||||
|
href="cc/index.html"><i
|
||||||
|
class="fa-solid fa-closed-captioning"></i><span>版权协议</span></a></div>
|
||||||
|
<div class="rightMenu-group rightMenu-line rightMenuOther">
|
||||||
|
<div class="rightMenu-item" id="menu-copy"><i
|
||||||
|
class="fa-duotone fa-link-horizontal"></i><span>复制地址</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-commentBarrage"><i class="fa-solid fa-message-captions"></i><span
|
||||||
|
class="menu-commentBarrage-text">关闭热评</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-darkmode"><i class="fa-solid fa-moon"></i><span
|
||||||
|
class="menu-darkmode-text">显示模式</span></div>
|
||||||
|
<div class="rightMenu-item" id="menu-translate"><i class="fa-duotone fa-language"></i><span>轉為繁體</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="rightmenu-mask"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<script th:src="@{/assets/js/utils.js}"></script>
|
||||||
|
<script th:src="@{/assets/js/main.js}"></script>
|
||||||
|
<script charset="utf-8" data-pjax="" th:src="@{/assets/zhheo/blogex.js}"></script>
|
||||||
|
<script src="https://cdn.zhheo.com/JS-Heo/translate/tw_cn.js"></script>
|
||||||
|
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/instant.page/5.1.0/instantpage.min.js"
|
||||||
|
type="module"></script>
|
||||||
|
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vanilla-lazyload/17.3.1/lazyload.iife.min.js"></script>
|
||||||
|
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/node-snackbar/0.1.16/snackbar.min.js"></script>
|
||||||
|
<script defer src="https://cdn.zhheo.com/public/algolia/algolia.js"></script>
|
||||||
|
<script>var preloader = {
|
||||||
|
endLoading: () => {
|
||||||
|
//- document.body.style.overflow = 'auto';
|
||||||
|
document.getElementById('loading-box').classList.add("loaded")
|
||||||
|
},
|
||||||
|
initLoading: () => {
|
||||||
|
//- document.body.style.overflow = '';
|
||||||
|
document.getElementById('loading-box').classList.remove("loaded")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window.addEventListener('load', preloader.endLoading())
|
||||||
|
setTimeout(function () {
|
||||||
|
preloader.endLoading();
|
||||||
|
}, 3000)</script>
|
||||||
|
<div class="js-pjax"></div>
|
||||||
|
<script>window.addEventListener('load', () => {
|
||||||
|
const changeContent = (content) => {
|
||||||
|
if (content === '') return content
|
||||||
|
|
||||||
|
content = content.replace(/<img.*?src="(.*?)"?[^\>]+>/ig, '[图片]') // replace image link
|
||||||
|
content = content.replace(/<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi, '[链接]') // replace url
|
||||||
|
content = content.replace(/<pre><code>.*?<\/pre>/gi, '[代码]') // replace code
|
||||||
|
content = content.replace(/<[^>]+>/g, "") // remove html tag
|
||||||
|
|
||||||
|
if (content.length > 150) {
|
||||||
|
content = content.substring(0, 150) + '...'
|
||||||
|
}
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
|
||||||
|
const getComment = () => {
|
||||||
|
const runTwikoo = () => {
|
||||||
|
twikoo.getRecentComments({
|
||||||
|
envId: 'https://twikoo.zhheo.com',
|
||||||
|
region: '',
|
||||||
|
pageSize: 6,
|
||||||
|
includeReply: true
|
||||||
|
}).then(function (res) {
|
||||||
|
const twikooArray = res.map(e => {
|
||||||
|
return {
|
||||||
|
'content': changeContent(e.comment),
|
||||||
|
'avatar': e.avatar,
|
||||||
|
'nick': e.nick,
|
||||||
|
'url': e.url + '#' + e.id,
|
||||||
|
'date': new Date(e.created).toISOString()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
saveToLocal.set('twikoo-newest-comments', JSON.stringify(twikooArray), 10 / (60 * 24))
|
||||||
|
generateHtml(twikooArray)
|
||||||
|
}).catch(function (err) {
|
||||||
|
const $dom = document.querySelector('#card-newest-comments .aside-list')
|
||||||
|
$dom.innerHTML = "无法获取评论,请确认相关配置是否正确"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof twikoo === 'object') {
|
||||||
|
runTwikoo()
|
||||||
|
} else {
|
||||||
|
getScript('https://cdn2.tianli0.top/npm/twikoo@1.6.5/dist/twikoo.all.min.js').then(runTwikoo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateHtml = array => {
|
||||||
|
let result = ''
|
||||||
|
|
||||||
|
if (array.length) {
|
||||||
|
for (let i = 0; i < array.length; i++) {
|
||||||
|
result += '<div class=\'aside-list-item\'>'
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
const name = 'data-lazy-src'
|
||||||
|
result += `<a href='${array[i].url}' class='thumbnail'><img ${name}='${array[i].avatar}' alt='${array[i].nick}'><div class='name'><span>${array[i].nick}</span></div></a>`
|
||||||
|
}
|
||||||
|
|
||||||
|
result += `<div class='content'>
|
||||||
|
<a class='comment' href='${array[i].url}'>${array[i].content}</a>
|
||||||
|
<time datetime="${array[i].date}">${btf.diffDate(array[i].date, true)}</time></div>
|
||||||
|
</div>`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result += '没有评论'
|
||||||
|
}
|
||||||
|
|
||||||
|
let $dom = document.querySelector('#card-newest-comments .aside-list')
|
||||||
|
$dom.innerHTML = result
|
||||||
|
window.lazyLoadInstance && window.lazyLoadInstance.update()
|
||||||
|
window.pjax && window.pjax.refresh($dom)
|
||||||
|
}
|
||||||
|
|
||||||
|
const newestCommentInit = () => {
|
||||||
|
if (document.querySelector('#card-newest-comments .aside-list')) {
|
||||||
|
const data = saveToLocal.get('twikoo-newest-comments')
|
||||||
|
if (data) {
|
||||||
|
generateHtml(JSON.parse(data))
|
||||||
|
} else {
|
||||||
|
getComment()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newestCommentInit()
|
||||||
|
document.addEventListener('pjax:complete', newestCommentInit)
|
||||||
|
})</script>
|
||||||
|
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/qrcodejs/1.0.0/qrcode.min.js"></script>
|
||||||
|
<script data-pjax=""
|
||||||
|
src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/Swiper/6.6.2/swiper-bundle.min.js"></script>
|
||||||
|
<script th:src="@{/assets/zhheo/rightmenu.js}"></script>
|
||||||
|
<script th:src="@{/assets/zhheo/random.js}"></script>
|
||||||
|
<script data-pjax th:src="@{/zhheo/commentBarrage.js}"></script>
|
||||||
|
<script src="https://cdn.zhheo.com/public/waterfall/waterfall.min.js"></script>
|
||||||
|
<script src="https://cdn.zhheo.com/public/assist/assist-entry.min.js"></script>
|
||||||
|
<script src="https://cdn.zhheo.com/public/aplayer/Meting2.min.js"></script>
|
||||||
|
<script src="https://cdn.zhheo.com/public/pjax/pjax.min.js"></script>
|
||||||
|
<script>let pjaxSelectors = [
|
||||||
|
'title',
|
||||||
|
'#config-diff',
|
||||||
|
'#body-wrap',
|
||||||
|
'#rightside-config-hide',
|
||||||
|
'#rightside-config-show',
|
||||||
|
'.js-pjax'
|
||||||
|
]
|
||||||
|
|
||||||
|
if (false) {
|
||||||
|
pjaxSelectors.unshift('meta[property="og:image"]', 'meta[property="og:title"]', 'meta[property="og:url"]')
|
||||||
|
}
|
||||||
|
|
||||||
|
var pjax = new Pjax({
|
||||||
|
elements: 'a:not([target="_blank"])',
|
||||||
|
selectors: pjaxSelectors,
|
||||||
|
cacheBust: false,
|
||||||
|
analytics: false,
|
||||||
|
scrollRestoration: false
|
||||||
|
})
|
||||||
|
|
||||||
|
document.addEventListener('pjax:send', function () {
|
||||||
|
|
||||||
|
// removeEventListener toc scroll
|
||||||
|
window.removeEventListener('scroll', window.tocScrollFn)
|
||||||
|
|
||||||
|
typeof preloader === 'object' && preloader.initLoading()
|
||||||
|
|
||||||
|
if (window.aplayers) {
|
||||||
|
for (let i = 0; i < window.aplayers.length; i++) {
|
||||||
|
if (!window.aplayers[i].options.fixed) {
|
||||||
|
window.aplayers[i].destroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typeof typed === 'object' && typed.destroy()
|
||||||
|
|
||||||
|
//reset readmode
|
||||||
|
const $bodyClassList = document.body.classList
|
||||||
|
$bodyClassList.contains('read-mode') && $bodyClassList.remove('read-mode')
|
||||||
|
})
|
||||||
|
|
||||||
|
document.addEventListener('pjax:complete', function () {
|
||||||
|
window.refreshFn()
|
||||||
|
|
||||||
|
document.querySelectorAll('script[data-pjax]').forEach(item => {
|
||||||
|
const newScript = document.createElement('script')
|
||||||
|
const content = item.text || item.textContent || item.innerHTML || ""
|
||||||
|
Array.from(item.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value))
|
||||||
|
newScript.appendChild(document.createTextNode(content))
|
||||||
|
item.parentNode.replaceChild(newScript, item)
|
||||||
|
})
|
||||||
|
|
||||||
|
GLOBAL_CONFIG.islazyload && window.lazyLoadInstance.update()
|
||||||
|
|
||||||
|
typeof chatBtnFn === 'function' && chatBtnFn()
|
||||||
|
typeof panguInit === 'function' && panguInit()
|
||||||
|
|
||||||
|
// google analytics
|
||||||
|
typeof gtag === 'function' && gtag('config', '', {'page_path': window.location.pathname});
|
||||||
|
|
||||||
|
typeof loadMeting === 'function' && document.getElementsByClassName('aplayer').length && loadMeting()
|
||||||
|
|
||||||
|
// Analytics
|
||||||
|
if (false) {
|
||||||
|
MtaH5.pgv()
|
||||||
|
}
|
||||||
|
|
||||||
|
// prismjs
|
||||||
|
typeof Prism === 'object' && Prism.highlightAll()
|
||||||
|
|
||||||
|
typeof preloader === 'object' && preloader.endLoading()
|
||||||
|
})
|
||||||
|
|
||||||
|
document.addEventListener('pjax:error', (e) => {
|
||||||
|
if (e.request.status === 404) {
|
||||||
|
pjax.loadUrl('/404.html')
|
||||||
|
}
|
||||||
|
})</script>
|
||||||
|
<script>!function () {
|
||||||
|
var d = document.createElement("script");
|
||||||
|
d.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?b6b512a6a0006dd6fcb565df2b0da0b748a4d749e4d1f2212c129ca4a479426dfd9a9dcb5ced4d7780eb6f3bbd089073c2a6d54440560d63862bbf4ec01bba3a", d.id = "ttzz";
|
||||||
|
var e = document.getElementsByTagName("script")[0];
|
||||||
|
e.parentNode.insertBefore(d, e)
|
||||||
|
}(window)</script>
|
||||||
|
<script async data-pjax src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
|
||||||
|
</div>
|
||||||
|
<div class="js-pjax">
|
||||||
|
<script>
|
||||||
|
coverColor(),
|
||||||
|
removeLoading(),
|
||||||
|
addRightMenuClickEvent(),
|
||||||
|
navTitle(),
|
||||||
|
heo.topPostScroll(),
|
||||||
|
heo.topCategoriesBarScroll(),
|
||||||
|
heo.sayhi(),
|
||||||
|
heo.addTag(),
|
||||||
|
heo.stopImgRightDrag(),
|
||||||
|
heo.addFriendLinksInFooter(),
|
||||||
|
heo.qrcodeCreate(),
|
||||||
|
heo.hidecookie(),
|
||||||
|
heo.onlyHome(),
|
||||||
|
heo.addNavBackgroundInit(),
|
||||||
|
heo.initIndexEssay(),
|
||||||
|
heo.changeTimeInEssay(),
|
||||||
|
heo.reflashEssayWaterFall(),
|
||||||
|
heo.addMediumInEssay(),
|
||||||
|
heo.darkModeStatus(),
|
||||||
|
heo.categoriesBarActive(),
|
||||||
|
heo.initThemeColor()
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<th:block th:with="postItems=${posts.items}" th:fragment="post-list">
|
||||||
|
|
||||||
|
<!-- card,需要添加在没有图片时使用随机图片 -->
|
||||||
|
<div class="recent-post-item lastestpost-item" th:each="post : ${postItems}">
|
||||||
|
<div class="post_cover left_radius">
|
||||||
|
<a th:attr="title=${post.spec.title}" th:href="${post.status.permalink}">
|
||||||
|
<img class="post_bg" th:alt="${post.spec.title}" th:attr="data-lazy-src=${post.spec.cover}">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<!-- 类别非空时 -->
|
||||||
|
<th:block th:if="${not #lists.isEmpty(post.categories)}">
|
||||||
|
<a class="article-meta__categories"
|
||||||
|
th:each="category : ${post.categories}"
|
||||||
|
th:href="${category.status.permalink}"
|
||||||
|
th:text="${category.spec.displayName}"
|
||||||
|
th:title="${category.spec.displayName}">
|
||||||
|
</a>
|
||||||
|
</th:block>
|
||||||
|
<div class="recent-post-info">
|
||||||
|
<div class="recent-post-info-top">
|
||||||
|
<span class="lastestpost">最新文章</span>
|
||||||
|
<a class="article-title"
|
||||||
|
th:attr="title=${post.spec.title}"
|
||||||
|
th:href="${post.status.permalink}"
|
||||||
|
th:text="${post.spec.title}">
|
||||||
|
</a>
|
||||||
|
<div class="content" th:text="${post.status.excerpt}"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="article-meta-wrap">
|
||||||
|
<!-- tag -->
|
||||||
|
<th:block th:if="${not #lists.isEmpty(post.tags)}">
|
||||||
|
<span class="article-meta tags">
|
||||||
|
<a class="article-meta__tags" event.cancelbubble
|
||||||
|
onclick="window.event.cancelBubble=!0"
|
||||||
|
th:each="tag : ${post.tags}"
|
||||||
|
th:href="${tag.status.permalink}"
|
||||||
|
th:text="${tag.spec.displayName}"
|
||||||
|
th:title="${tag.spec.displayName}">
|
||||||
|
<span class="tags-punctuation">#</span>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</th:block>
|
||||||
|
<!-- 创建时间 -->
|
||||||
|
<span class="post-meta-date">
|
||||||
|
<i class="far fa-calendar-alt"></i>
|
||||||
|
<span class="article-meta-label">创建</span>
|
||||||
|
<time th:text="${#dates.format(post.spec.publishTime,'yyyy-MM-dd')}"
|
||||||
|
th:title="${#dates.format(post.spec.publishTime,'yyyy-MM-dd')}">
|
||||||
|
</time>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div th:if="${posts.hasPrevious() || posts.hasNext()}">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="pagination">
|
||||||
|
|
||||||
|
<!-- 上一页 -->
|
||||||
|
<a class="extend prev" data-pjax-state="" rel="prev" th:href="${posts.prevUrl}"
|
||||||
|
th:if="${posts.hasPrevious()}">
|
||||||
|
<i class="fas fa-chevron-left fa-fw"></i>
|
||||||
|
<div class="pagination_tips_prev">上页</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<span class="text-sm" th:text="${posts.page} +'/'+ ${posts.total}"></span>
|
||||||
|
|
||||||
|
<!-- 下一页 -->
|
||||||
|
<a class="extend next" data-pjax-state="" rel="next"
|
||||||
|
th:href="${posts.nextUrl}"
|
||||||
|
th:if="${posts.hasNext()}">
|
||||||
|
<div class="pagination_tips_next">下页</div>
|
||||||
|
<i class="fas fa-chevron-right fa-fw"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</th:block>
|
||||||
|
</html>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<div id="rightside" th:fragment="rightside">
|
||||||
|
<div id="rightside-config-hide">
|
||||||
|
<button id="translateLink" type="button" title="简繁转换">简</button>
|
||||||
|
<button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button>
|
||||||
|
<button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button>
|
||||||
|
</div>
|
||||||
|
<div id="rightside-config-show">
|
||||||
|
<button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button>
|
||||||
|
<button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<div class="bbTimeList container" id="bbTimeList" th:fragment="time-list">
|
||||||
|
<i class="bber-logo iconfont icon-bblogo"
|
||||||
|
onclick="pjax.loadUrl("/essay/")"
|
||||||
|
style="font-size:2rem" title="说说"></i>
|
||||||
|
<div class="swiper-container swiper-no-swiping" id="bbtalk" tabindex="-1">
|
||||||
|
<div class="swiper-wrapper" id="bber-talk" onclick="pjax.loadUrl("/essay/")">
|
||||||
|
<div class="li-style swiper-slide">
|
||||||
|
日志模块
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<i class="bber-gotobb fas fa-arrow-circle-right" onclick="pjax.loadUrl("/essay/")"
|
||||||
|
title="查看全文"></i></div>
|
||||||
|
<style>.topGroup .todayCard::after {
|
||||||
|
box-shadow: 0 -109px 133px -9px #201e1d inset
|
||||||
|
}</style>
|
||||||
|
</html>
|
|
@ -0,0 +1,307 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<!-- 置顶的文章-->
|
||||||
|
<div class="recent-top-post-group" id="recent-top-post-group" th:fragment="top-post">
|
||||||
|
<div class="recent-post-top" id="recent-post-top">
|
||||||
|
<div id="bannerGroup">
|
||||||
|
<div id="banners">
|
||||||
|
<div class="banners-title">
|
||||||
|
<div class="banners-title-big">分享设计</div>
|
||||||
|
<div class="banners-title-big">与科技生活</div>
|
||||||
|
<div class="banners-title-small">ZHHEO.COM</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-all">
|
||||||
|
<div class="tags-group-wrapper">
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#989bf8"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6302f0748a83b.png"
|
||||||
|
title="AfterEffect">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63030a85d6458.png"
|
||||||
|
title="Sketch">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#57b6e6"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303102c049d1.png"
|
||||||
|
title="Docker">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#4082c3"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63030fe730a69.png"
|
||||||
|
title="Photoshop">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630310dea00f5.png"
|
||||||
|
title="FinalCutPro">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63031127e8e2b.png"
|
||||||
|
title="Python">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#eb6840"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630311760ca04.png"
|
||||||
|
title="Swift">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#8f55ba"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630311cf9dded.png"
|
||||||
|
title="Principle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#f29e39"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303121db0410.png"
|
||||||
|
title="illustrator">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#2c51db"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630312c06cdc5.png"
|
||||||
|
title="CSS3">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#f7cb4f"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630312f898a1c.png"
|
||||||
|
title="JS">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#e9572b"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303132113bbb.png"
|
||||||
|
title="HTML">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#df5b40"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/09/23/632d2d33b1e1b.webp"
|
||||||
|
title="Git">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#e65164"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/09/23/632d2e083fc9b.webp"
|
||||||
|
title="Apifox">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#989bf8"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6302f0748a83b.png"
|
||||||
|
title="AfterEffect">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63030a85d6458.png"
|
||||||
|
title="Sketch">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#57b6e6"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303102c049d1.png"
|
||||||
|
title="Docker">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#4082c3"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63030fe730a69.png"
|
||||||
|
title="Photoshop">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630310dea00f5.png"
|
||||||
|
title="FinalCutPro">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#fff"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/63031127e8e2b.png"
|
||||||
|
title="Python">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#eb6840"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630311760ca04.png"
|
||||||
|
title="Swift">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#8f55ba"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630311cf9dded.png"
|
||||||
|
title="Principle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#f29e39"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303121db0410.png"
|
||||||
|
title="illustrator">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#2c51db"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630312c06cdc5.png"
|
||||||
|
title="CSS3">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#f7cb4f"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/630312f898a1c.png"
|
||||||
|
title="JS">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#e9572b"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/08/22/6303132113bbb.png"
|
||||||
|
title="HTML">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon-pair">
|
||||||
|
<div class="tags-group-icon" style="background:#df5b40"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/09/23/632d2d33b1e1b.webp"
|
||||||
|
title="Git">
|
||||||
|
</div>
|
||||||
|
<div class="tags-group-icon" style="background:#e65164"><img
|
||||||
|
onerror='this.onerror=null,this.src="https://cdn.zhheo.com/Guli/others/imgerror.png"'
|
||||||
|
src="https://img.zhheo.com/i/2022/09/23/632d2e083fc9b.webp"
|
||||||
|
title="Apifox">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 随机前往一篇文章 -->
|
||||||
|
<a id="banner-hover" onclick="toRandomPost()"><span class="bannerText">随便逛逛</span><i
|
||||||
|
class="fas fa-arrow-right banner-righticon"></i></a></div>
|
||||||
|
<div class="categoryGroup">
|
||||||
|
<div class="categoryItem" style="box-shadow:var(--heo-shadow-blue)"><a
|
||||||
|
class="categoryButton CB1 bikan" href="tags/%E5%BF%85%E7%9C%8B/index.html"><span
|
||||||
|
class="categoryButtonText">必看精选</span><i class="fas fa-dove"></i></a></div>
|
||||||
|
<div class="categoryItem" style="box-shadow:var(--heo-shadow-red)"><a
|
||||||
|
class="categoryButton remen" href="tags/%E7%83%AD%E9%97%A8/index.html"><span
|
||||||
|
class="categoryButtonText">热门文章</span><i class="fas fa-burn"></i></a></div>
|
||||||
|
<div class="categoryItem" style="box-shadow:var(--heo-shadow-green)"><a
|
||||||
|
class="categoryButton shiyong" href="tags/%E6%95%99%E7%A8%8B/index.html"><span
|
||||||
|
class="categoryButtonText">实用教程</span><i class="fas fa-book"></i></a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="topGroup">
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover left_radius"><a href="p/1b0d95ef.html"
|
||||||
|
title="摸鱼 for Mac - 系统更新界面模拟器,高仿苹果macOS系统升级黑屏界面"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/1b0d95ef.html")">荐</span> <img
|
||||||
|
alt="摸鱼 for Mac - 系统更新界面模拟器,高仿苹果macOS系统升级黑屏界面"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/eHesos21190681656557411689.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/1b0d95ef.html")"><a
|
||||||
|
class="article-title" href="p/1b0d95ef.html"
|
||||||
|
title="摸鱼 for Mac - 系统更新界面模拟器,高仿苹果macOS系统升级黑屏界面">摸鱼 for Mac -
|
||||||
|
系统更新界面模拟器,高仿苹果macOS系统升级黑屏界面</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover right_radius"><a href="p/5115d869.html" title="微信表情:熊猫二憨已上线!"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/5115d869.html")">荐</span> <img
|
||||||
|
alt="微信表情:熊猫二憨已上线!"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/PvbpiY20190381646706601470.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/5115d869.html")"><a
|
||||||
|
class="article-title" href="p/5115d869.html"
|
||||||
|
title="微信表情:熊猫二憨已上线!">微信表情:熊猫二憨已上线!</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover left_radius"><a href="p/9df485ea.html"
|
||||||
|
title="比例计 for Mac - 设计师的比例计算工具|比例计算 尺寸计算 常用比例 比例计算器"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/9df485ea.html")">荐</span> <img
|
||||||
|
alt="比例计 for Mac - 设计师的比例计算工具|比例计算 尺寸计算 常用比例 比例计算器"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/BDDRvO24291281640141622573.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/9df485ea.html")"><a
|
||||||
|
class="article-title" href="p/9df485ea.html"
|
||||||
|
title="比例计 for Mac - 设计师的比例计算工具|比例计算 尺寸计算 常用比例 比例计算器">比例计
|
||||||
|
for Mac - 设计师的比例计算工具|比例计算 尺寸计算 常用比例 比例计算器</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover right_radius"><a href="p/a170ac02.html"
|
||||||
|
title="DelSpace3 for Mac - 文本处理工具|去空行 去空格 正则表达式替换"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/a170ac02.html")">荐</span> <img
|
||||||
|
alt="DelSpace3 for Mac - 文本处理工具|去空行 去空格 正则表达式替换"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/rcVHOw24491281640158664890.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/a170ac02.html")"><a
|
||||||
|
class="article-title" href="p/a170ac02.html"
|
||||||
|
title="DelSpace3 for Mac - 文本处理工具|去空行 去空格 正则表达式替换">DelSpace3 for Mac
|
||||||
|
- 文本处理工具|去空行 去空格 正则表达式替换</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover left_radius"><a href="p/4db484b3.html"
|
||||||
|
title="轻节食APP正式上线!快速减肥可以从今天开始,定个小目标,坚持一个月!"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/4db484b3.html")">荐</span> <img
|
||||||
|
alt="轻节食APP正式上线!快速减肥可以从今天开始,定个小目标,坚持一个月!"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/7rZ69c20991281640144589173.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/4db484b3.html")"><a
|
||||||
|
class="article-title" href="p/4db484b3.html"
|
||||||
|
title="轻节食APP正式上线!快速减肥可以从今天开始,定个小目标,坚持一个月!">轻节食APP正式上线!快速减肥可以从今天开始,定个小目标,坚持一个月!</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-item">
|
||||||
|
<div class="post_cover right_radius"><a href="p/2daa6a7b.html"
|
||||||
|
title="Sticker-Heo表情发布:个人博客的基础表情系列"><span
|
||||||
|
class="recent-post-top-text"
|
||||||
|
onclick="pjax.loadUrl("/p/2daa6a7b.html")">荐</span> <img
|
||||||
|
alt="Sticker-Heo表情发布:个人博客的基础表情系列"
|
||||||
|
class="post_bg"
|
||||||
|
data-lazy-src="https://p.zhheo.com/Kjhrny22490581621235364737.png!cover"
|
||||||
|
onerror='this.onerror=null,this.src="https://img.zhheo.com/i/2022/08/31/630efd3d82799.webp"'></a>
|
||||||
|
</div>
|
||||||
|
<div class="recent-post-info" onclick="pjax.loadUrl("/p/2daa6a7b.html")"><a
|
||||||
|
class="article-title" href="p/2daa6a7b.html"
|
||||||
|
title="Sticker-Heo表情发布:个人博客的基础表情系列">Sticker-Heo表情发布:个人博客的基础表情系列</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="todayCard" id="todayCard"
|
||||||
|
onclick='window.open("https://www.bilibili.com/video/BV1A841147Ef/")'>
|
||||||
|
<div class="todayCard-info">
|
||||||
|
<div class="todayCard-tips">音乐推荐</div>
|
||||||
|
<div class="todayCard-title">逐星</div>
|
||||||
|
</div>
|
||||||
|
<div class="todayCard-cover"
|
||||||
|
style="background:url(https://img.zhheo.com/i/2022/09/23/632d1625aa0d7.webp) no-repeat center/cover"></div>
|
||||||
|
<div class="banner-button-group"><a class="banner-button"
|
||||||
|
onclick="window.event.cancelBubble=!0,heo.hideTodayCard()"><i
|
||||||
|
class="fas fa-circle-plus"></i><span class="banner-button-text">更多推荐</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,17 @@
|
||||||
|
apiVersion: theme.halo.run/v1alpha1
|
||||||
|
kind: Theme
|
||||||
|
metadata:
|
||||||
|
name: theme-hao
|
||||||
|
spec:
|
||||||
|
displayName: Hao
|
||||||
|
author:
|
||||||
|
name: 程序员小航
|
||||||
|
website: 'https://liuzhihang.com'
|
||||||
|
description: Halo 2.0 Theme base on Thymeleaf, Referring to Butterfly and Heo
|
||||||
|
logo: 'https://liuzhihang.com/logo'
|
||||||
|
website: 'https://liuzhihang.com'
|
||||||
|
repo: 'https://github.com/liuzhihang/halo-theme-hao'
|
||||||
|
settingName: "theme-hao-setting"
|
||||||
|
configMapName: "theme-hao-configMap"
|
||||||
|
version: 1.0.0
|
||||||
|
require: 2.0.0
|
Loading…
Reference in New Issue