Compare commits

..

No commits in common. "master" and "v1.0" have entirely different histories.
master ... v1.0

155 changed files with 10088 additions and 6963 deletions

View File

@ -1,58 +0,0 @@
kind: pipeline
steps:
- name: restore-cache
image: meltwater/drone-cache:dev
environment:
AWS_ACCESS_KEY_ID:
from_secret: aws_acces
AWS_SECRET_ACCESS_KEY:
from_secret: aws_key
pull: true
settings:
debug: false
cache_key: '{{ arch }}_{{ os }}_{{ checksum "package-lock.json" }}'
archive_format: "gzip"
endpoint: storage.yandexcloud.net
restore: true
bucket: drone-cache
region: ru-central1
mount: 'node_modules'
- name: run-sh
image: node:alpine
commands:
- chmod +x ./bin/run.sh
- ./bin/run.sh
- name: update-site
image: plugins/downstream
settings:
server: https://drone.lp76.ru
token:
from_secret: drone_token
fork: false
repositories:
- aleks/site
- name: rebuild-cache
image: meltwater/drone-cache:dev
environment:
AWS_ACCESS_KEY_ID:
from_secret: aws_acces
AWS_SECRET_ACCESS_KEY:
from_secret: aws_key
pull: true
settings:
debug: false
cache_key: '{{ arch }}_{{ os }}_{{ checksum "package-lock.json" }}'
archive_format: "gzip"
endpoint: storage.yandexcloud.net
rebuild: true
bucket: drone-cache
region: ru-central1
mount: 'node_modules'
- name: telegram
image: appleboy/drone-telegram
settings:
token:
from_secret: token_telegramm
to:
from_secret: to_telegram_user
message: #success {{build.status}}

3
.gitattributes vendored
View File

@ -1,3 +0,0 @@
*.html linguist-language=javascript
*.stylus linguist-language=javascript
*.ejs linguist-language=javascript

View File

@ -1,31 +0,0 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Node.js CI
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test

8
.gitignore vendored
View File

@ -1,8 +0,0 @@
.DS_Store
.idea/
*.log
*.iml
node_modules/
.cache
.history
_bak.yml

View File

@ -1,4 +0,0 @@
.cache/
.history/
.github/
_bak.yml

View File

@ -1,45 +0,0 @@
{
"blocks": false,
"brackets": "never",
"colons": false,
"colors": "never",
"commaSpace": false,
"commentSpace": "never",
"cssLiteral": "never",
"customProperties": [],
"depthLimit": false,
"duplicates": false,
"efficient": false,
"exclude": [],
"extendPref": false,
"globalDupe": false,
"groupOutputByFile": false,
"indentPref": false,
"leadingZero": "never",
"maxErrors": false,
"maxWarnings": false,
"mixed": false,
"mixins": [],
"namingConvention": "lowercase-dash",
"namingConventionStrict": false,
"none": "never",
"noImportant": false,
"parenSpace": false,
"placeholders": "always",
"prefixVarsWithDollar": "always",
"quotePref": false,
"reporterOptions": {
"columns": ["lineData", "severity", "description", "rule"],
"columnSplitter": " ",
"showHeaders": false,
"truncate": false
},
"semicolons": "never",
"sortOrder": "never",
"stackedProperties": false,
"trailingWhitespace": "never",
"universal": false,
"valid": false,
"zeroUnits": "never",
"zIndexNormalize": false
}

390
README.md
View File

@ -1,247 +1,109 @@
<h1 align="center">Ayer</h1>
:ocean: Ayer is a clean and elegant theme for Hexo, also fast, powerful and responsive. It contains many awesome features, It's perfect for your blog, "Ayer" means "water" in Malaysian and "yesterday" in Spanish. If you have any queries or advice during the process of using, Please contact me!
收藏本主题请点右上角Star谢谢~
### [Preview](https://shen-yu.gitee.io)
### [中文说明](https://shen-yu.gitee.io/2019/ayer/)
![Screenshot](screenshots/hexo-theme-ayer.png)
## Install
### Install
### For hexo >= 5.0
```shell
npm i hexo-theme-ayer -S
``` bash
$ git clone https://github.com/Shen-Yu/hexo-theme-ayer.git themes/ayer
```
- If this theme is newly installed, a `_config.ayer.yml` file will be generated in the root directory after the installation is complete, and you can directly edit the `_config.ayer.yml` file for configuration.
- If it is a theme upgrade, you can use the configuration method of hexo < 5.0, or you can move the original configuration file to the root directory and rename it to `_config.ayer.yml`.
### For hexo < 5.0
```shell
git clone https://github.com/Shen-Yu/hexo-theme-ayer.git themes/ayer
```
## Enable
### Enable
Modify `theme` setting in `_config.yml` to `ayer`
```yml
``` yml
theme: ayer
```
## Update
### Update
```bash
``` bash
cd themes/ayer
git pull
```
## Multi Language Support
### Configuration
zh-CN中文简体 enEnglish zh-TW中文繁体 ja日本語 esEspañol deDeutsch frFrançais ruРусский ko한국어 viTiếng Việt nlNederlands nonorsk ptPortuguês
let me know if you cant find something.
English is default languge, if you want to change, modify `language` option in `_config.yml` file in your Hexo blog's root folder.
## Configuration
let me know if you have any questions.
```yml
# Menu-Sidebar
``` yml
# Menu-侧边栏菜单
menu:
Home: /
Archives: /archives
Categories: /categories
Tags: /tags
Gallery: http://shenyu-vip.lofter.com
Travel: /tags/旅行/
About: /2019/about
# Subtitle and Typing animation
# https://github.com/mattboldt/typed.js
subtitle:
enable: true
text: A clean and elegant theme
text2: It's perfect for your hexo blog
text3: Have fun! #Supports up to three lines of text
startDelay: 0
typeSpeed: 200
loop: true
backSpeed: 100
showCursor: true
# Favicon and sidebar logo
# 网站图标和侧边栏logo
favicon: /favicon.ico
logo: /images/ayer-side.svg
# Cover Setting
# enable: [true|false]path: [background-image]logo: [cover-logo-image]
# 封面配置
# enable-是否启用封面path-封面背景图logo-封面logo
cover:
enable: true
path: /images/cover1.jpg # there are some beautiful cover images in Ayer's directory: /source/images, choose your favorite image to replace it.
path: /images/cover1.jpg # images目录下附送多张美图可更换
logo: /images/ayer.svg
# ProgressBar
progressBar: true
# 页面顶部进度条
progressBar: ture
# Boardcast
broadcast:
enable: true
type: 2 # 1custom2hitokoto api(https://hitokoto.cn/)
text: a clean and elegant theme, fast and responsive. # only work in custom mode
# Article Setting
# (Use this to excerpt if article is too long<!--more-->)
# 文章配置
# 文章太长,截断按钮文字(在需要截断的行增加此标记:<!--more-->)
excerpt_link: Read More...
excerpt_all: false
# Copy code button
copy_btn: true
# Share
share_enable: true
# If you are not in China, maybe you prefer to set:false
share_china: true
# share text
# 文章分享文字
share_text: Share
# search text
# 搜索文字
search_text: Search
# nav text
# 分页文字
nav_text:
page_prev: Prev page
page_next: Next page
post_prev: Newer posts
post_next: Older posts
# Catalog in article
# 文章页是否显示目录
toc: true
# images in the article support click to fullscreen
image_viewer: true
# https://github.com/willin/hexo-wordcount
word_count:
enable: true
# only display in article page(not in index page)
only_article_visit: true
# Reward Setting
# type0-close reward 1-only open in article which you have configured reward:true 2-open in all articles
# 打赏
# 打赏type设定0-关闭打赏; 1-文章对应的md文件里有reward:true属性才有打赏 2-所有文章均有打赏
reward_type: 2
# reward word
reward_wording: "Buy me a cup of coffee~"
# qrcode image path
# 打赏wording
reward_wording: '请我喝杯咖啡吧~'
# 支付宝二维码图片地址跟你设置logo的方式一样。比如/images/alipay.jpg
alipay: /images/alipay.jpg
# qrcode image path
# 微信二维码图片地址
weixin: /images/wechat.jpg
# Copyright
# type0-close all 1-only display in article which you have configured copyright: true 2-all articles
copyright_type: 2
# Search
# https://github.com/theme-next/hexo-generator-searchdb
# 是否启用搜索
search: true
# RSS
# leave it empty if you dont' need
# RSS订阅(先安装hexo-generator-feed插件再去博客根目录config进行配置)
rss: /atom.xml
# DarkMode
darkmode: true
# 评论1、Valine(推荐)2、Gitalk
# Canvas background style: 0-close1-moveline
canvas_bg: 0
# Custom mouse pointerreplace /images/mouse.cur
mouse:
enable: false
path: /images/mouse.cur
# Click effect: 0-close1-love2-boom3-particles
click_effect: 0
# articleWidth and sidebarWidth
layout:
article_width: 80rem
sidebar_width: 8rem
# GitHub Ribbons(https://github.blog/2008-12-19-github-ribbons/)
github:
# (Set false if you don't need)
enable: false
url: https://github.com/Shen-Yu/hexo-theme-ayer
# pv&uv statistics
busuanzi:
enable: true
# cnzz statistics
cnzz:
enable: true
url: #
# Google Analytics
google_analytics: ""
# Baidu Analytics
baidu_analytics: ""
# Mathjax Support
mathjax: true
# Katex Support
# note: need change the hexo-renderernpm un hexo-renderer-marked -S && npm i hexo-renderer-markdown-it-katex -S
katex:
enable: false # true
allpost: true
copy_tex: false
# since year
since: 2019
# only for chinese website
# ICP
icp:
enable: false
url: "http://www.beian.miit.gov.cn/"
text: "浙ICP备88888888"
# gongan
gongan:
enable: false
img: /images/beian.png
url: "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=01234567890123" #link
text: "浙公网安备01234567890123号"
# friends link
friends_link:
Ayer: #site name
# site url
url: https://github.com/Shen-Yu/hexo-theme-ayer
# site icon(optional)
img: /images/ayer.png
GitHub:
url: https://github.com/Shen-Yu
img: https://i.loli.net/2020/09/07/indb4PRYDA98EkN.png
gitee:
url: https://gitee.com/shen-yu
img: https://i.loli.net/2020/09/07/K3AqO7h6krQFlRX.png
Hexo:
url: https://hexo.io
img: https://i.loli.net/2020/09/07/UYGzjo7h68CRWny.png
hexo-tag-chart:
url: https://github.com/Shen-Yu/hexo-tag-chart
img: https://i.loli.net/2020/09/07/GIXBYE5SoylhR1r.png
# Comment1、Valine (recommended)2、Gitalk3、Twikoo4、MiniValine
# You can close the comment section on one of your posts by marking `comments: false` in front-matter.
# 1、Valine [A fast, simple & powerful comment system](https://github.com/xCss/Valine)
# You need create leancloud account first (https://console.leancloud.app), then put the id|key in below.
leancloud:
# 1、Valine[一款快速、简洁且高效的无后端评论系统](https://github.com/xCss/Valine)
# 启用Valine必须先创建leancloud应用 获取 id|key 填入即可
leancloud:
enable: true
app_id: #
app_key: #
# Valine Setting
# Valine配置
valine:
enable: true
avatar: mp # (https://valine.js.org/avatar.html)
placeholder: Add some comments to my article~ # placeholder
enable: true # 是否启用
avatar: mp # 头像样式(https://valine.js.org/avatar.html)
placeholder: 给我的文章加点评论吧~ # placeholder
# 2、Gitalk(https://github.com/gitalk/gitalk)
gitalk:
@ -252,42 +114,47 @@ gitalk:
owner: # GitHub ID
admin: # GitHub ID
# 3、Twikoo(https://github.com/imaegoo/twikoo)
twikoo:
enable: false
envId: #
# GitHub Ribbons(https://github.blog/2008-12-19-github-ribbons/)
github:
# (关闭请设置为false)
url: https://github.com/Shen-Yu/hexo-theme-ayer
# fancybox(仅用于相册展示若需要可配置albums)
fancybox: true
# advertisement
# if there is an "ad" word in photo or urlit may blocked by adblock or any other browser extensions
ads:
ad_1:
title: vultr优惠vps
img: https://cdn.jsdelivr.net/gh/Shen-Yu/cdn/img/vultr.png
url: https://www.vultr.com/?ref=8630075
width: 300
ad_2:
title: 云服务器全球购低至2折
img: https://cdn.jsdelivr.net/gh/Shen-Yu/cdn/img/ten_2.jpg
url: https://curl.qcloud.com/kvO7hb43
width: 300
# 访问量统计(不蒜子)
busuanzi:
enable: true
# encrypt settings
lock:
enable: false
password: 123456
# 友盟cnzz统计(url填js代码src链接)
cnzz:
enable: true
url: #
# Google Analytics
google_analytics: ''
# 百度统计
baidu_analytics: ''
# 数学公式
mathjax: true
# 网站成立年份(默认为 2019若填入年份小于当前年份则显示为 2018-2019 类似的格式)
since: 2019
#是否显示页脚信息(建议保留,有助于本主题的推广)
pageFooter: true
```
## Plugins
- [hexo-generator-search](https://github.com/wzpan/hexo-generator-search) (for Local Search)
### Plugins
+ [hexo-generator-search](https://github.com/wzpan/hexo-generator-search) Local search
```yml
$ npm install hexo-generator-searchdb --save
```
Then add the plugin configuration in hexo's configuration file `_config.yml` (note: not the theme's configuration file):
Then add the plugin configuration for hexo's configuration file `_config.yml` (note: not the theme's configuration file):
```yml
# Hexo-generator-search
search:
@ -296,16 +163,16 @@ lock:
format: html
```
- [hexo-generator-feed](https://github.com/hexojs/hexo-generator-feed) (for RSS)
+ [hexo-generate-feed](https://github.com/hexojs/hexo-generator-feed) RSS
```yml
$ npm install hexo-generator-feed --save
```
Then add the plugin configuration in hexo's configuration file `_config.yml` (note: not the theme's configuration file):
Then add the plugin configuration for hexo's configuration file `_config.yml` (note: not the theme's configuration file):
```yml
feed:m
feed:
type: atom
path: atom.xml
limit: 20
@ -313,84 +180,63 @@ lock:
content:
content_limit: 140
content_limit_delim: ' '
order_by: -date
order_by: -date
```
- [hexo-generator-index-pin-top](https://github.com/netcan/hexo-generator-index-pin-top) (for Sticky Post)
```bash
+ [hexo-generator-index-pin-top](https://github.com/netcan/hexo-generator-index-pin-top)
``` bash
$ npm uninstall hexo-generator-index --save
$ npm install hexo-generator-index-pin-top --save
```
## Categories
### Post poster
```bash
hexo new page categories
```
Then paste following codes to file: /source/categories/index.md
```md
``` md
---
title: categories
type: categories
layout: "categories"
title: Post name
photos: [
["img_url"],
["img_url"]
]
---
```
## Tags
Same as categories.
## Friend Links
```bash
hexo new page friends
```
Then paste following codes to file: /source/friends/index.md
```md
---
title: friends
type: friends
layout: "friends"
---
```
Then edit `friends_link` in `_config.yml`
## Gallery
### Gallery
Need to write in the head of the markdown, this is not a good way to write, I hope to get a better way to write on github.
```md
``` md
---
title: Gallery
albums: [["img_url", "img_caption"], ["img_url", "img_caption"]]
albums: [
["img_url","img_caption"],
["img_url","img_caption"]
]
---
```
## Toc
### Toc
Use Tocbot to parse the title tags (h1~h6) in the content and insert the directory.
Use Tocbot to parse the title tags (h1~h6) in the content and insert the directory.
- ayer/\_config.yml
+ ayer/_config.yml
```bash
# Toc
``` bash
# Toc
toc: true
```
```
+ If Toc is turned on in ayer/_config.yml, then Tocbot will generate a Toc article directory in the title tag of each blog parsing content, but not all blogs require Toc, so in the Front-matter section of markdown Can be closed:
- If Toc is turned on in ayer/\_config.yml, then Tocbot will generate a Toc article directory in the title tag of each blog parsing content, but not all blogs require Toc, so in the Front-matter section of markdown Can be closed:
```md
``` md
---
toc: false
---
no_toc: true
---
```
```
---
Inspired by [Ocean](https://github.com/zhwangart/hexo-theme-ocean)
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Ayer</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/Shen-Yu/hexo-theme-ayer" property="cc:attributionName" rel="cc:attributionURL">Eric-Shen</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.

View File

@ -1,22 +1,11 @@
# 侧边栏菜单
menu:
Главная: /
Архивы: /archives
Категории: /categories
Теги: /tags
# 站点次标题和打字动效
# https://github.com/mattboldt/typed.js
subtitle:
enable: true # 是否开启动效
text: # 显示的文字
text2: # 滚动播放,如果不需要可以留空
text3: # 最多支持三段文字
startDelay: 0 # 延迟时间
typeSpeed: 200 # 打字速度
loop: true # 是否循环
backSpeed: 100 # 回退速度
showCursor: true # 是否显示光标
主页: /
目录: /archives
标签: /tags
旅行: /tags/旅行/
摄影: http://shenyu-vip.lofter.com
关于我: /2019/about
# 网站图标和侧边栏logo
favicon: /favicon.ico
@ -26,189 +15,93 @@ logo: /images/ayer-side.svg
# enable-是否启用封面path-封面背景图logo-封面logo
cover:
enable: true
path: /images/cover1.jpg # /source/images目录下附送多张美图可更换
path: /images/cover1.jpg # images目录下附送多张美图可更换
logo: false #/images/ayer.svg如果不要直接设置成false
# 页面顶部进度条
progressBar: true
# 告示板模块
broadcast:
enable: false # true开启false关闭
type: 2 # 1自定义输入2一言api(https://hitokoto.cn/)
text: енен # type为1时有效
# 页面顶部进度条
progressBar: ture
# 文章配置
# 文章太长,截断按钮文字(在需要截断的行增加此标记:<!--more-->)
excerpt_link: false
# 如果你嫌每篇文章手动加more标记比较麻烦又不想在首页全文显示可以把excerpt_all设置成true这样首页只会显示文章归档
excerpt_all: false
# 是否开启代码复制按钮
copy_btn: true
# 是否开启文章分享按钮
share_enable: true
# 国内的社交平台(If you are not in China, maybe you prefer to set:false)
share_china: false
excerpt_link: 阅读更多...
# 文章分享文字
share_text: Поделится
share_text: 分享
# 分页文字
nav_text:
page_prev: Страница назад
page_next: Страница вперед
post_prev: Предыдущая запись
post_next: Следующая запись
page_prev: 上一页
page_next: 下一页
post_prev: 上一篇
post_next: 下一篇
# 文章页是否显示目录
toc: true
# 文章中的图片是否支持点击放大
image_viewer: true
# https://github.com/willin/hexo-wordcount
# 是否开启字数统计(关闭请设置enable为false)
# 也可以单独在md文件里Front-matter设置`no_word_count: true`属性,来自定义关闭字数统计
word_count:
enable: true
# 只在文章详情显示(不在首页显示)
only_article_visit: true
# 打赏
# 打赏type设定0-关闭打赏; 1-文章对应的md文件里有reward:true属性才有打赏 2-所有文章均有打赏
reward_type: 2
# 打赏wording
reward_wording: "wording"
reward_wording: '请我喝杯咖啡吧~'
# 支付宝二维码图片地址跟你设置logo的方式一样。比如/images/alipay.jpg
alipay: /images/alipay.jpg
# 微信二维码图片地址
weixin: /images/wechat.jpg
# 版权声明
# 版权声明type设定0-关闭版权声明; 1-文章对应的md文件里有copyright: true属性才有版权声明 2-所有文章均有版权声明
copyright_type: 2
# 是否启用搜索
# 需要安装hexo-generator-searchdb(https://github.com/theme-next/hexo-generator-searchdb)
search: true
# RSS订阅(先安装hexo-generator-feed插件再去博客根目录config进行配置)
# 不想显示可以直接留空
rss: /atom.xml
# 是否启用黑夜模式开关
darkmode: true
# 评论1、Valine(推荐)2、Gitalk
# 动态背景效果: 0-关闭1-动态线条(跟随鼠标)
canvas_bg: 0
# 自定义鼠标样式,直接替换/images/mouse.cur文件
mouse:
enable: false
path: /images/mouse.cur
# 鼠标点击效果0-关闭1-爱心2-爆炸烟花3-粒子烟花
click_effect: 0
# 页面宽度自定义不建议修改可能造成布局混乱article_width文章宽度sidebar_width侧边栏宽度
layout:
article_width: 80rem
sidebar_width: 8rem
# GitHub Ribbons-封面右上角的forkme换样式直接在source/images目录下替换forkme图片
github:
# (关闭请设置为false)
# 1、Valine[一款快速、简洁且高效的无后端评论系统](https://github.com/xCss/Valine)
# 启用Valine必须先创建leancloud应用 获取 id|key 填入即可
leancloud:
enable: true
url: https://github.com/alkyl1978/hexo-theme-ayer
app_id: #
app_key: #
# Valine配置
valine:
enable: true # 是否启用
avatar: mp # 头像样式(https://valine.js.org/avatar.html)
placeholder: 给我的文章加点评论吧~ # placeholder
# 网易云音乐插件
music:
enable: false
# 播放器尺寸类型(1小尺寸、2大尺寸)
type: 1
id: 22707008 # 网易云分享的音乐ID(更换音乐请更改此配置项)
autoPlay: true # 是否开启自动播放
# 2、Gitalk(https://github.com/gitalk/gitalk)
gitalk:
enable: false # true
clientID: # GitHub Application Client ID
clientSecret: # Client Secret
repo: # Repository name
owner: # GitHub ID
admin: # GitHub ID
# GitHub Ribbons(https://github.blog/2008-12-19-github-ribbons/)
github:
# (关闭请设置为false)
url: https://github.com/Shen-Yu/hexo-theme-ayer
# fancybox(仅用于相册展示若需要可配置albums)
fancybox: true
# 访问量统计(不蒜子)
busuanzi:
enable: false
enable: true
# 友盟cnzz统计(url填js代码src链接)
cnzz:
enable: false
enable: true
url: https://s9.cnzz.com/z_stat.php?id=1278069914&web_id=1278069914
# Google Analytics
google_analytics: ""
google_analytics: ''
# 百度统计
baidu_analytics: ""
baidu_analytics: ''
yandex_analytics: true
# Mathjax数学公式
# 数学公式
mathjax: false
# Katex数学公式(allpost设置为false时只有头部设置math:true的文章才开启)
# 需要更换hexo渲染器npm un hexo-renderer-marked -S && npm i hexo-renderer-markdown-it-katex -S
katex:
enable: true # true
allpost: true
copy_tex: false
# mermaid流程图 三个选项缺一不可(https://mermaid-js.github.io/mermaid/)
mermaid:
enable: true
cdn: https://cdn.staticfile.org/mermaid/8.14.0/mermaid.min.js
theme: forest
# 网站成立年份(默认为 2019若填入年份小于当前年份则显示为 2018-2019 类似的格式)
since: 2023
since: 2015
# ICP备案信息尾部显示
icp:
enable: false
url: "https://beian.miit.gov.cn/" # 备案链接
text: "浙ICP备88888888" # 备案信息
# 公安备案信息尾部显示
gongan:
enable: false
img: /images/beian.png #公安备案图片
url: "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=01234567890123" #公安备案链接
text: "浙公网安备01234567890123号" #公安备案信息
# 友情链接
friends_link:
Ayer主题: #网站名称
#网站地址
url: https://github.com/alkyl1978/hexo-theme-ayer
#网站图片(可忽略不写)
img: /images/ayer.png
GitHub:
url: https://github.com/alkyl1978
img: /images/github.png
码云:
url: https://lp76.ru
img: /images/gitee.png
Hexo官网:
url: https://hexo.io
img: /images/hexo.png
# 评论1、Valine(推荐)2、Gitalk3、Twikoo;
# 首页广告配置
# 可以根据需要自行增加ad_3ad_4...留空则不显示建议图片和url不要带ad等关键词否则可能会被adblock等插件屏蔽
#ads:
# ad_1:
# title: 云服务器限时秒杀
# img: https://pic.imgdb.cn/item/62174b452ab3f51d912a5ccc.jpg
# url: https://curl.qcloud.com/kvO7hb43
# width: 300
# ad_2:
# title: vultr优惠vps
# img: https://pic.imgdb.cn/item/62174b452ab3f51d912a5cd7.png
# url: https://www.vultr.com/?ref=8630075
# width: 300
# 网站开启加密访问,密码可设置任何字符
lock:
enable: true
password: 123456
#是否显示页脚信息(建议保留,有助于本主题的推广)
pageFooter: true

View File

@ -1,6 +0,0 @@
#!/bin/sh
set -x
set -e
npm i
npm run build

View File

@ -1,2 +0,0 @@
// 这个文件用来防止 hexo 5.0.0以上 使用 "hexo clean" 命令报错。
// This file is used to prevent hexo above 5.0.0 from using "hexo clean" command error.

19
languages/de.yml Normal file
View File

@ -0,0 +1,19 @@
categories: Kategorien
search: Suche
tags: Tags
tagcloud: Tag Cloud
tweets: Tweets
prev: zurück
next: weiter
comment: Kommentare
archive_a: Archiv
archive_b: "Archive: %s"
page: Seite %d
recent_posts: letzter Beitrag
newer: Neuer
older: Älter
share: Teilen
powered_by: Powered by
rss_feed: RSS Feed
category: Kategorie
tag: Tag

View File

@ -13,26 +13,7 @@ recent_posts: Recent Posts
newer: Newer
older: Older
share: Share
powered_by: Powered by %s
theme: Theme - %s
powered_by: Powered by
rss_feed: RSS Feed
category: Category
tag: Tag
site_visitors: Visitors
page_views: Views
friends: Friends
post:
word_count: Word count
read_time: Reading time
minutes: min
reward: Donate
sticky: Sticky
copyright_title: Copyright
copyright_content: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel
tag: Tag

View File

@ -1,38 +0,0 @@
categories: Categories
search: Search
tags: Tags
tagcloud: Tag Cloud
tweets: Tweets
prev: Prev
next: Next
comment: Comments
archive_a: Archives
archive_b: "Archives: %s"
page: Page %d
recent_posts: Recent Posts
newer: Newer
older: Older
share: Share
powered_by: Powered by %s
theme: Theme - %s
rss_feed: RSS Feed
category: Category
tag: Tag
site_visitors: Visitors
page_views: Views
friends: Friends
post:
word_count: Word count
read_time: Reading time
minutes: min
reward: Donate
sticky: Sticky
copyright_title: Copyright
copyright_content: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel

19
languages/es.yml Normal file
View File

@ -0,0 +1,19 @@
categories: Categorías
search: Buscar
tags: Tags
tagcloud: Nube de Tags
tweets: Tweets
prev: Previo
next: Siguiente
comment: Comentarios
archive_a: Archivos
archive_b: "Archivos: %s"
page: Página %d
recent_posts: Posts recientes
newer: Nuevo
older: Viejo
share: Compartir
powered_by: Construido por
rss_feed: RSS
category: Categoría
tag: Tag

View File

@ -13,26 +13,7 @@ recent_posts: Articles récents
newer: Récent
older: Ancien
share: Partager
powered_by: Powered by %s
theme: Theme - %s
powered_by: Propulsé par
rss_feed: Flux RSS
category: Catégorie
tag: Mot-clé
site_visitors: Visitors
page_views: Views
friends: Mes amis
post:
word_count: Nombre de mots
read_time: Temps de lecture
minutes: min
reward: Récompense
sticky: Haut
copyright_title: Avis de copyright
copyright_content: Le droit d'auteur appartient à l'auteur. Pour les réimpressions commerciales, veuillez contacter l'auteur pour autorisation. Pour les réimpressions non commerciales, veuillez indiquer la source.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel

19
languages/ja.yml Normal file
View File

@ -0,0 +1,19 @@
categories: カテゴリ
search: 検索
tags: タグ
tagcloud: タグクラウド
tweets: ツイート
prev: 戻る
next: 次へ
comment: コメント
archive_a: アーカイブ
archive_b: "アーカイブ: %s"
page: ページ %d
recent_posts: 最近の投稿
newer: 次の記事
older: 前の記事
share: 共有
powered_by: Powered by
rss_feed: RSSフィード
category: カテゴリ
tag: タグ

19
languages/ko.yml Normal file
View File

@ -0,0 +1,19 @@
categories: 카테고리
search: 검색
tags: 태그
tagcloud: 태그 클라우드
tweets: 트윗
prev: 이전
next: 다음
comment: 댓글
archive_a: 아카이브
archive_b: "아카이브: %s"
page: 페이지 %d
recent_posts: 최근 포스트
newer: 최신
older: 이전
share: 공유
powered_by: Powered by
rss_feed: RSS Feed
category: 카테고리
tag: 태그

View File

@ -1,3 +1,4 @@
categories: Categorieën
search: Zoeken
tags: Labels
@ -13,26 +14,7 @@ recent_posts: Recente berichten
newer: Nieuwer
older: Ouder
share: Delen
powered_by: Powered by %s
theme: Theme - %s
powered_by: Powered by
rss_feed: RSS Feed
category: Categorie
tag: Label
site_visitors: Visitors
page_views: Views
friends: Vrienden
post:
word_count: Aantal woorden in artikel
read_time: Leestijd
minutes: min
reward: Doneer
sticky: Sticky
copyright_title: Copyright melding
copyright_content: Copyright is eigendom van de auteur. Neem voor commerciële herdrukken contact op met de auteur voor autorisatie. Geef de bron aan voor niet-commerciële herdrukken.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel

View File

@ -13,26 +13,7 @@ recent_posts: Siste innlegg
newer: Newer
older: Older
share: Share
powered_by: Powered by %s
theme: Theme - %s
powered_by: Powered by
rss_feed: RSS Feed
category: Category
tag: Tag
site_visitors: Visitors
page_views: Views
friends: Venner
post:
word_count: Ordtelling
read_time: Lesetid
minutes: min
reward: Donere
sticky: Sticky
copyright_title: Opphavsrett
copyright_content: Opphavsrett eies av forfatteren. For kommersielle opptrykk, vennligst kontakt forfatteren for godkjenning. For ikke-kommersiell uttrykk, vennligst oppgi kilden.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel
tag: Tag

19
languages/pt.yml Normal file
View File

@ -0,0 +1,19 @@
categories: Categorias
search: Buscar
tags: Tags
tagcloud: Nuvem de Tags
tweets: Tweets
prev: Anterior
next: Próximo
comment: Comentários
archive_a: Arquivos
archive_b: "Arquivos: %s"
page: Página %d
recent_posts: Postagens Recentes
newer: Mais Recente
older: Mais Antigo
share: Compartilhar
powered_by: Desenvolvido por
rss_feed: Feed RSS
category: Categoria
tag: Tag

View File

@ -13,26 +13,7 @@ recent_posts: Недавние записи
newer: Следующий
older: Предыдущий
share: Поделиться
powered_by: Powered by %s
theme: Theme - %s
powered_by: Создано с помощью
rss_feed: RSS-каналы
category: Категория
tag: Метка
site_visitors: Visitors
page_views: Views
friends: друзья
post:
word_count: Количество слов
read_time: Время чтения
minutes: минут
reward: вознаграждение
sticky: липкий
copyright_title: Авторские права
copyright_content: Авторские права принадлежат автору. Для коммерческих перепечаток, пожалуйста, свяжитесь с автором для авторизации. Для некоммерческих перепечаток, пожалуйста, укажите источник.
lock:
lock_info: Please enter password
lock_error: Incorrect password, please try again
confirm_text: Ok
cancel_text: Cancel
tag: Метка

19
languages/zh-CN.yml Normal file
View File

@ -0,0 +1,19 @@
categories: 分类
search: 搜索
tags: 标签
tagcloud: 标签云
tweets: 推文
prev: 上一页
next: 下一页
comment: 留言
archive_a: 归档
archive_b: 归档:%s
page: 第 %d 页
recent_posts: 最新文章
newer: Newer
older: Older
share: 分享
powered_by: Powered by
rss_feed: RSS Feed
category: Category
tag: Tag

19
languages/zh-TW.yml Normal file
View File

@ -0,0 +1,19 @@
categories: 分類
search: 搜尋
tags: 標籤
tagcloud: 標籤雲
tweets: 推文
prev: 上一頁
next: 下一頁
comment: 留言
archive_a: 彙整
archive_b: 彙整:%s
page: 第 %d 頁
recent_posts: 最新文章
newer: Newer
older: Older
share: Share
powered_by: Powered by
rss_feed: RSS Feed
category: Category
tag: Tag

View File

@ -1,9 +0,0 @@
<ul class="ads">
<% for (var i in theme.ads){ %>
<li>
<a href="<%= theme.ads[i].url %>">
<img src="<%= theme.ads[i].img %>" width="<%= theme.ads[i].width %>" alt="<%=theme.ads[i].title %>">
</a>
</li>
<% } %>
</ul>

View File

@ -1,57 +1,43 @@
<%- js('/js/jquery-3.6.0.min') %> <%- js('/js/lazyload.min') %>
<!-- Tocbot -->
<% if (theme.toc && is_post() && !page.no_toc){ %> <%- js('/js/tocbot.min') %>
<script>
tocbot.init({
tocSelector: ".tocbot",
contentSelector: ".article-entry",
headingSelector: "h1, h2, h3, h4, h5, h6",
hasInnerContainers: true,
scrollSmooth: true,
scrollContainer: "main",
positionFixedSelector: ".tocbot",
positionFixedClass: "is-position-fixed",
fixedSidebarOffset: "auto",
});
</script>
<%- js('/js/jquery-2.0.3.min') %>
<%- js('/js/jquery.justifiedGallery.min') %>
<%- js('/js/lazyload.min') %>
<%- js('/js/busuanzi-2.3.pure.min') %>
<% if (theme.fancybox){ %>
<%- js('fancybox/jquery.fancybox.min') %>
<% } %>
<script src="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.js"></script>
<link
rel="stylesheet"
href="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.css"
/>
<script src="https://cdn.staticfile.org/justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js"></script>
<%- js('dist/main') %>
<!-- ImageViewer -->
<% if (theme.image_viewer){ %> <%- partial('viewer') %> <% } %>
<!-- MathJax -->
<% if (theme.mathjax){ %> <%- partial('mathjax') %>
<% if (theme.toc && is_post()){ %>
<%- js('/js/tocbot.min') %>
<script>
// Tocbot_v4.7.0 http://tscanlin.github.io/tocbot/
tocbot.init({
tocSelector: '.tocbot',
contentSelector: '.article-entry',
headingSelector: 'h1, h2, h3, h4, h5, h6',
hasInnerContainers: true,
scrollSmooth: true,
positionFixedSelector: '.tocbot',
positionFixedClass: 'is-position-fixed',
fixedSidebarOffset: 'auto',
});
</script>
<% } %>
<script>
var ayerConfig = {
mathjax: true,
};
</script>
<% } %>
<!-- Katex -->
<% if (theme.katex.enable){ %> <%- partial('katex') %> <% } %>
<!-- busuanzi -->
<% if (theme.busuanzi && theme.busuanzi.enable){ %> <%-
js('/js/busuanzi-2.3.pure.min') %> <% } %>
<!-- ClickLove -->
<% if (theme.click_effect===1){ %> <%- js('/js/clickLove') %> <% } %>
<!-- ClickBoom1 -->
<% if (theme.click_effect===2){ %>
<script src="https://cdn.staticfile.org/animejs/3.2.1/anime.min.js"></script>
<%- js('/js/clickBoom1') %> <% } %>
<!-- ClickBoom2 -->
<% if (theme.click_effect===3){ %> <%- js('/js/clickBoom2') %> <% } %>
<!-- CodeCopy -->
<% if (theme.copy_btn == true) { %> <%- css('/css/clipboard') %> <%-
partial('post/clipboard') %> <% } %>
<!-- CanvasBackground -->
<% if (theme.canvas_bg == 1) { %> <%- js('/js/dz') %> <% } %>
<script>
if (window.mermaid) {
mermaid.initialize({ theme: "<%= theme.mermaid.theme %>" });
mathjax: <%=theme.mathjax %>
}
</script>
<%- js('js/ayer') %>
<script src="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.css">
<% if (theme.mathjax){ %>
<%- partial('mathjax') %>
<% } %>
<script type="text/javascript" src="https://js.users.51.la/20544303.js"></script>

View File

@ -1,10 +1,4 @@
<section class="outer">
<% if (theme.ads && theme.ads.length != 0){ %>
<%- partial('ads') %>
<% } %>
<% if (theme.broadcast.enable && pagination == 2){ %>
<%- partial('_partial/broadcast') %>
<% } %>
<article class="articles">
<%
var title = '';
@ -15,9 +9,8 @@
else title = __('archive_a');
}
%>
<% if (pagination !== 2){ %>
<h1 class="page-type-title"><%- title %></h1>
<% } %>
<% if (pagination == 2){ %>
<% page.posts.each(function(post){ %>
<%- partial('article', {post: post, index: true}) %>

View File

@ -1,69 +1,64 @@
<article
id="<%= post.layout %>-<%= post.slug %>"
class="article article-type-<%= post.layout %>"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<article id="<%= post.layout %>-<%= post.slug %>" class="article article-type-<%= post.layout %>" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<% if (post.link || post.title){ %>
<header class="article-header">
<%- partial('post/title', {class_name: 'article-title'}) %>
<%- partial('post/author', {class_name: 'article-author'}) %>
</header>
<% } %> <% if (index || is_post()) { %>
<% } %>
<% if (index || is_post()) { %>
<div class="article-meta">
<%- partial('post/date', {class_name: 'article-date', date_format: null})
%> <%- partial('post/category') %> <% if(theme.word_count &&
theme.word_count.enable && !post.no_word_count){%> <%-
partial('post/word') %> <% } %>
<%- partial('post/date', {class_name: 'article-date', date_format: null}) %>
<%- partial('post/category') %>
</div>
<% } %> <% if (theme.toc && is_post()){ %> <%- partial('post/tocbot') %> <%
} %> <% if (theme.excerpt_all&&index){ %> <% }else{ %>
<% } %>
<% if (theme.toc && is_post()){ %>
<%- partial('post/tocbot') %>
<% } %>
<div class="article-entry" itemprop="articleBody">
<%- partial('post/justifiedGallery') %> <%- partial('post/gallery') %> <%
if (post.excerpt && index){ %> <%- post.excerpt %> <% if
(theme.excerpt_link){ %>
<a class="article-more-link" href="<%- url_for(post.path) %>"
><%= theme.excerpt_link %></a
>
<% } %> <% } else { %> <%- post.content %> <% } %>
<!-- reward -->
<% if ((theme.reward_type === 2 || (theme.reward_type === 1 &&
post.reward)) && !index && !post.no_reward){ %>
<div id="reword-out">
<div id="reward-btn">
<%= __('post.reward') %>
</div>
</div>
<%- partial('post/justifiedGallery') %>
<%- partial('post/gallery') %>
<% if (post.excerpt && index){ %>
<%- post.excerpt %>
<% if (theme.excerpt_link){ %>
<a class="article-more-link" href="<%- url_for(post.path) %>"><%= theme.excerpt_link %></a>
<% } %>
<% } else { %>
<%- post.content %>
<% } %>
<!-- 打赏 -->
<% if ((theme.reward_type === 2 || (theme.reward_type === 1 && post.reward)) && !index){ %>
<div id="reward-btn">
打赏
</div>
<% } %>
</div>
<% } %>
<!-- copyright -->
<% if (((theme.copyright_type === 2) || (theme.copyright_type === 1 &&
post.copyright)) && !index){ %>
<div class="declare">
<ul class="post-copyright">
<li>
<i class="ri-copyright-line"></i>
<strong><%= __('post.copyright_title') %> </strong>
<% if (post.copyright_content) { %>
<%= post.copyright_content %>
<% } else { %>
<%= __('post.copyright_content') %>
<% } %>
</li>
</ul>
</div>
<% } %>
<footer class="article-footer">
<% if (!index && theme.share_enable){ %> <%- partial('post/share') %> <% }
%> <%- partial('post/tag') %>
<a data-url="<%- post.permalink %>" data-id="<%= post._id %>"
class="article-share-link"><%- theme.share_text %></a>
<%- partial('post/tag') %>
</footer>
</div>
<% if (!index){ %> <%- partial('post/nav') %> <% } %> <% if (theme.valine &&
theme.valine.enable && !post.no_valine){ %> <%- partial('post/valine', { key:
post.slug, title: post.title, url: config.url+url_for(post.path) }) %> <% } %>
<% if (!index){ %>
<%- partial('post/nav') %>
<% } %>
</article>
<% if (theme.valine && theme.valine.enable){ %>
<%- partial('post/valine', {
key: post.slug,
title: post.title,
url: config.url+url_for(post.path)
}) %>
<% } %>
<% if (is_post()) { %>
<%- partial('post/gitalk') %>
<% } %>
</article>

View File

@ -1,6 +1,6 @@
<% if (theme.cover.enable) { %>
<section class="cover">
<% if (theme.github.enable && theme.github.url){ %>
<% if (theme.github && theme.github.url){ %>
<%# "GitHub Ribbons" %>
<a class="forkMe" href="<%=theme.github.url%>"
target="_blank"><img width="149" height="149" src="<%- url_for('images/forkme.png') %>"
@ -12,13 +12,7 @@
</div>
<div class="cover-inner text-center text-white">
<h1><a href="<%- url_for() %>"><%= config.title %></a></h1>
<div id="subtitle-box">
<% if (theme.subtitle.enable) { %>
<span id="subtitle"></span>
<% }else{ %>
<span id="subtitle"><%= theme.subtitle.text %></span>
<% } %>
</div>
<h2><%= config.subtitle %></h2>
<div>
<% if (theme.cover.logo) { %>
<img
@ -31,29 +25,7 @@
</div>
</div>
<div class="cover-learn-more">
<a href="javascript:void(0)" class="anchor"><i class="ri-arrow-down-line"></i></a>
<a href="#main" class="anchor"><i class="ri-arrow-down-line"></i></a>
</div>
</section>
<% } %>
<% if (theme.subtitle.enable){ %>
<script src="https://cdn.staticfile.org/typed.js/2.0.12/typed.min.js"></script>
<% } %>
<!-- Subtitle -->
<% if (theme.subtitle.enable){ %>
<script>
try {
var typed = new Typed("#subtitle", {
strings: ['<%= theme.subtitle.text %>', '<%= theme.subtitle.text2 %>', '<%= theme.subtitle.text3 %>'],
startDelay: <%= theme.subtitle.startDelay %>,
typeSpeed: <%= theme.subtitle.typeSpeed %>,
loop: <%= theme.subtitle.loop %>,
backSpeed: <%= theme.subtitle.backSpeed %>,
showCursor: <%= theme.subtitle.showCursor %>
});
} catch (err) {
console.log(err)
}
</script>
<% } %>
<% } %>

View File

@ -1,46 +0,0 @@
<% if (theme.broadcast.type===1 && theme.broadcast.text){ %>
<div class="notice" style="margin-top:50px">
<i class="ri-heart-fill"></i>
<div class="notice-content"><%= theme.broadcast.text %></div>
</div>
<% } %>
<% if (theme.broadcast.type===2){ %>
<div class="notice" style="margin-top:50px">
<i class="ri-heart-fill"></i>
<div class="notice-content" id="broad"></div>
</div>
<script type="text/javascript">
fetch('https://v1.hitokoto.cn')
.then(response => response.json())
.then(data => {
document.getElementById("broad").innerHTML = data.hitokoto;
})
.catch(console.error)
</script>
<% } %>
<style>
.notice {
padding: 20px;
border: 1px dashed #e6e6e6;
color: #969696;
position: relative;
display: inline-block;
width: 100%;
background: #fbfbfb50;
border-radius: 10px;
}
.notice i {
float: left;
color: #999;
font-size: 16px;
padding-right: 10px;
vertical-align: middle;
margin-top: -2px;
}
.notice-content {
display: initial;
vertical-align: middle;
}
</style>

View File

@ -1,8 +0,0 @@
<div class="totop" id="totop">
<i class="ri-arrow-up-line"></i>
</div>
<% if (theme.darkmode){ %>
<div class="todark" id="todark">
<i class="ri-moon-line"></i>
</div>
<% } %>

View File

@ -1,20 +1,30 @@
<footer class="footer">
<div class="outer">
<ul>
<ul class="list-inline">
<li>
Copyrights &copy;
&copy;
<% if (theme.since && !isNaN(theme.since) && theme.since < date(new Date(), 'YYYY')) { %><%- theme.since%>-<% } %><%= date(new Date(), 'YYYY') %>
<i class="ri-heart-fill heart_icon"></i> <%= config.author || config.title %>
<%= config.author || config.title %>
</li>
</ul>
<ul>
<li>
<% if (theme.pageFooter){ %>
<% var hexoLink = '<a href="https://hexo.io" target="_blank">Hexo</a>'; %>
<% var themeLink = '<a href="https://github.com/alkyl1978/hexo-theme-ayer" target="_blank">Ayer</a>'; %>
<%- __('powered_by', hexoLink) %>
<span class="division">|</span>
<%- __('theme', themeLink) %>
<% var themeLink = '<a href="https://github.com/Shen-Yu/hexo-theme-ayer" target="_blank">Ayer</a>'; %>
<%- hexoLink %> Theme <%- themeLink %> by shenyu
<% } %>
</li>
</ul>
<ul class="list-inline">
<li>
<% if (theme.busuanzi && theme.busuanzi.enable){ %>
<%# "不蒜子统计" %>
<%- partial('post/busuanzi') %>
<% } %>
</li>
<li>
<!-- cnzz统计 -->
<% if (theme.cnzz&&theme.cnzz.enable){ %>
<script type="text/javascript" src='<%= theme.cnzz.url%>'></script>
<% } %>
</li>
</ul>

View File

@ -1,10 +1,14 @@
<% if (theme.google_analytics){ %>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=<%= theme.google_analytics %>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<%= theme.google_analytics %>');
<%# "Google Analytics" %>
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '<%= theme.google_analytics %>', 'auto');
ga('send', 'pageview');
</script>
<%# "End Google Analytics" %>
<% } %>

View File

@ -1,58 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<% if (config.language){ %>
<html lang="<%= config.language %>">
<% } else { %>
<html lang="en">
<% }%>
<head>
<meta charset="utf-8" />
<% var title = page.title; if (is_archive()) { title = __('archive_a'); if
(is_month()) { title += ': ' + page.year + '/' + page.month; } else if
(is_year()) { title += ': ' + page.year; } } else if (is_category()) {
title = page.category; } else if (is_tag()) { title = __('tag') + ': ' +
page.tag; } %> <% if (page.keywords){ %>
<meta
name="keywords"
content="<%= page.keywords %>,<%= config.keywords %>"
/>
<% } else if (config.keywords){ %>
<meta name="keywords" content="<%= config.keywords %>" />
<% } %> <% if (page.description){ %>
<meta name="description" content="<%= page.description %>" />
<% } else if (config.description){ %>
<meta name="description" content="<%= config.description %>" />
<% } %>
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title><% if (title){ %><%= title %> | <% } %> <%= config.title %></title>
<% if (theme.favicon){ %>
<link rel="shortcut icon" href="<%- theme.favicon %>" />
<% } %> <%- css('dist/main') %>
<%- css('css/fonts/remixicon') %>
<%- css('css/custom') %> <% if (theme.progressBar){ %>
<script src="https://cdn.staticfile.org/pace/1.2.4/pace.min.js"></script>
<% } %>
<%- partial('google-analytics') %>
<%- partial('baidu-analytics') %>
<%- partial('yandex-analytics') %>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@sweetalert2/theme-bulma@5.0.1/bulma.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js"></script>
<head>
<meta charset="utf-8" />
<% var title = page.title; if (is_archive()) { title = __('archive_a'); if
(is_month()) { title += ': ' + page.year + '/' + page.month; } else if
(is_year()) { title += ': ' + page.year; } } else if (is_category()) { title
= __('categories.ejs') + ': ' + page.categories; } else if (is_tag()) {
title = __('tag') + ': ' + page.tag; } %> <% if (page.keywords){ %>
<meta name="keywords" content="<%= page.keywords %>,<%= config.keywords %>" />
<% } else if (config.keywords){ %>
<meta name="keywords" content="<%= config.keywords %>" />
<% } %> <% if (page.description){ %>
<meta name="description" content="<%= page.description %>" />
<% } else if (config.description){ %>
<meta name="description" content="<%= config.description %>" />
<% } %>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>
<% if (title){ %><%= title %> | <% } %> <%= config.title %>
</title>
<% if (theme.favicon){ %>
<link rel="shortcut icon" href="<%- theme.favicon %>" />
<% } %>
<%- css('css/style') %> <% if (theme.fancybox){ %> <%-
css('fancybox/jquery.fancybox.min') %> <% } %> <%- js('/js/pace.min.js') %>
<!-- mermaid -->
<% if (theme.mermaid.enable) { %>
<script src="<%= theme.mermaid.cdn %>"></script>
<% } %>
<style>
.swal2-styled.swal2-confirm {
font-size: 1.6rem;
}
</style>
</head>
</html>
</html>
<%- partial('google-analytics') %>
<%- partial('baidu-analytics') %>
</head>
</html>

View File

@ -1,11 +0,0 @@
<% if ( theme.katex.enable ) { %>
<% if( theme.katex.allpost || page.math ) { %>
<link rel="stylesheet" href="https://cdn.staticfile.org/KaTeX/0.15.1/katex.min.css">
<script src="https://cdn.staticfile.org/KaTeX/0.15.1/katex.min.js"></script>
<script src="https://cdn.staticfile.org/KaTeX/0.15.1/contrib/auto-render.min.js"></script>
<% if ( theme.katex.copy_tex ) { %>
<script src="https://cdn.staticfile.org/KaTeX/0.15.1/contrib/copy-tex.min.js"></script>
<link rel="stylesheet" href="https://cdn.staticfile.org/KaTeX/0.15.1/contrib/copy-tex.min.css">
<% } %>
<% } %>
<% } %>

View File

@ -1,37 +0,0 @@
<% if (theme.lock.enable){ %>
<script>
const password = "<%= theme.lock.password %>";
const lock_password = window.sessionStorage.getItem("lock_password");
console.log(password, lock_password);
if (lock_password !== password) {
Swal.fire({
title: "<%= __('lock.lock_info') %>",
input: "text",
inputAttributes: {
autocapitalize: "off",
},
showCancelButton: false,
showLoaderOnConfirm: true,
allowOutsideClick: false,
confirmButtonText: "<%= __('lock.confirm_text') %>",
}).then((result) => {
console.log(result);
if (result.isConfirmed) {
console.log(password);
if (result.value === password) {
window.sessionStorage.setItem("lock_password", result.value);
} else {
Swal.fire({
icon: "error",
title: "<%= __('lock.lock_error') %>",
confirmButtonText: "<%= __('lock.confirm_text') %>",
allowOutsideClick: false,
}).then(() => {
window.location.reload();
});
}
}
});
}
</script>
<% } %>

View File

@ -15,5 +15,4 @@
});
</script>
<script src="https://cdn.staticfile.org/mathjax/2.7.7/MathJax.js"></script>
<script src="https://cdn.staticfile.org/mathjax/2.7.7/config/TeX-AMS-MML_HTMLorMML-full.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.6/unpacked/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

View File

@ -1,17 +1,18 @@
<% if (post.albums && post.albums.length){ %>
<div class="article-albums">
<ul class="article-albums-photos" id="basicExample">
<% post.albums.forEach(function(photo){ %>
<div class="article-albums">
<ul class="article-albums-photos" id="basicExample">
<% post.albums.forEach(function(photo){ %>
<li class="article-albums-item" data-scroll-reveal>
<img class="lazy" data-original="<%- url_for(photo[0]) %>" itemprop="image" alt="<%- photo[1] %>"
style="cursor: pointer;">
<% if (photo && photo.length > 1){ %>
<span class="article-albums-caption"> <%- photo[1] %> </span>
<% } %>
</li>
<li class="article-albums-item" data-scroll-reveal>
<a class="article-albums-img fancybox" data-fancybox="images" data-caption="<%- photo[1] %>" href="<%- url_for(photo[0]) %>" rel="gallery_<%= post._id %>" title="<%- photo[1] %>">
<img class="lazy" data-original="<%- url_for(photo[0]) %>" itemprop="image" alt="<%- photo[1] %>">
</a>
<% if (photo && photo.length > 1){ %>
<span class="article-albums-caption"> <%- photo[1] %> </span>
<% } %>
</li>
<% }) %>
</ul>
</div>
<% } %>
<% }) %>
</ul>
</div>
<% } %>

View File

@ -1,8 +0,0 @@
<% if (post.authors && post.authors.length){ %>
<div class="<%= class_name %>" <% if (!index){ %> style="text-align: center" <% }%>>
作者:<% for (var i = 0; i < post.authors.length - 1; i++) { %>
<%= post.authors[i]%> ,
<% }%> <%= post.authors[post.authors.length - 1] %>
</div>
<% } %>

View File

@ -1,5 +1,4 @@
<span>
<span><i class="ri-user-3-fill"></i><%- __('site_visitors') %>:<span id="busuanzi_value_site_uv"></span></span>
<span class="division">|</span>
<span><i class="ri-eye-fill"></i><%- __('page_views') %>:<span id="busuanzi_value_page_pv"></span></span>
</span>
<ul class="list-inline">
<li>PV:<span id="busuanzi_value_page_pv"></span></li>
<li>UV:<span id="busuanzi_value_site_uv"></span></li>
</ul>

View File

@ -1,54 +0,0 @@
<script src="https://cdn.staticfile.org/clipboard.js/2.0.10/clipboard.min.js"></script>
<script>
function wait(callback, seconds) {
var timelag = null;
timelag = window.setTimeout(callback, seconds);
}
!function (e, t, a) {
var initCopyCode = function(){
var copyHtml = '';
copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
copyHtml += '<i class="ri-file-copy-2-line"></i><span>COPY</span>';
copyHtml += '</button>';
$(".highlight .code pre").before(copyHtml);
$(".article pre code").before(copyHtml);
var clipboard = new ClipboardJS('.btn-copy', {
target: function(trigger) {
return trigger.nextElementSibling;
}
});
clipboard.on('success', function(e) {
let $btn = $(e.trigger);
$btn.addClass('copied');
let $icon = $($btn.find('i'));
$icon.removeClass('ri-file-copy-2-line');
$icon.addClass('ri-checkbox-circle-line');
let $span = $($btn.find('span'));
$span[0].innerText = 'COPIED';
wait(function () { // 等待两秒钟后恢复
$icon.removeClass('ri-checkbox-circle-line');
$icon.addClass('ri-file-copy-2-line');
$span[0].innerText = 'COPY';
}, 2000);
});
clipboard.on('error', function(e) {
e.clearSelection();
let $btn = $(e.trigger);
$btn.addClass('copy-failed');
let $icon = $($btn.find('i'));
$icon.removeClass('ri-file-copy-2-line');
$icon.addClass('ri-time-line');
let $span = $($btn.find('span'));
$span[0].innerText = 'COPY FAILED';
wait(function () { // 等待两秒钟后恢复
$icon.removeClass('ri-time-line');
$icon.addClass('ri-file-copy-2-line');
$span[0].innerText = 'COPY';
}, 2000);
});
}
initCopyCode();
}(window, document);
</script>

View File

@ -0,0 +1,21 @@
<% if (theme.gitalk.enable) { %>
<div class="gitalk" id="gitalk-container"></div>
<%- css('https://cdn.jsdelivr.net/npm/gitalk@1.5.0/dist/gitalk.css') %>
<%- js('https://cdn.jsdelivr.net/npm/gitalk@1.5.0/dist/gitalk.min.js') %>
<%- js('https://cdn.jsdelivr.net/npm/blueimp-md5@2.10.0/js/md5.min.js') %>
<script type="text/javascript">
var gitalk = new Gitalk({
clientID: '<%- theme.gitalk.clientID %>',
clientSecret: '<%- theme.gitalk.clientSecret %>',
repo: '<%- theme.gitalk.repo %>',
owner: '<%- theme.gitalk.owner %>',
admin: ['<%- theme.gitalk.admin %>'],
// id: location.pathname, // Ensure uniqueness and length less than 50
id: md5(location.pathname),
distractionFreeMode: false, // Facebook-like distraction free mode
pagerDirection: 'last'
})
gitalk.render('gitalk-container')
</script>
<% } %>

View File

@ -1,9 +1,12 @@
<% if (post.albums && post.albums.length){ %>
<div class="justified-gallery" id="gallery">
<div class="justified-gallery" id="gallery">
<% post.albums.forEach(function(photo){ %>
<div>
<img src="<%- url_for(photo[0]) %>" itemprop="image" alt="<%- photo[1] %>" style="cursor: pointer;">
</div>
<div>
<a class="fancybox" data-fancybox="images" data-caption="<%- photo[1] %>" href="<%- url_for(photo[0]) %>" rel="gallery_<%= post._id %>" title="<%- photo[1] %>">
<img src="<%- url_for(photo[0]) %>" itemprop="image" alt="<%- photo[1] %>">
</a>
</div>
<% }) %>
</div>
<% } %>
</div>
<% } %>

View File

@ -1,52 +0,0 @@
<%
var sUrl = url.replace(/index\.html$/, '');
sUrl = /^(http:|https:)\/\//.test(sUrl) ? sUrl : 'http:' + sUrl;
%>
<div class="share-btn">
<span class="share-sns share-outer">
<i class="ri-share-forward-line"></i>
<%- theme.share_text %>
</span>
<div class="share-wrap">
<i class="arrow"></i>
<div class="share-icons">
<% if( theme.share_china ){ %>
<a class="weibo share-sns" href="javascript:;" data-type="weibo">
<i class="ri-weibo-fill"></i>
</a>
<a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
<i class="ri-wechat-fill"></i>
</a>
<a class="qq share-sns" href="javascript:;" data-type="qq">
<i class="ri-qq-fill"></i>
</a>
<a class="douban share-sns" href="javascript:;" data-type="douban">
<i class="ri-douban-line"></i>
</a>
<!-- <a class="qzone share-sns" href="javascript:;" data-type="qzone">
<i class="icon icon-qzone"></i>
</a> -->
<% } %>
<% if( theme.share_eng ) { %>
<a class="facebook share-sns" href="javascript:;" data-type="facebook">
<i class="ri-facebook-circle-fill"></i>
</a>
<a class="twitter share-sns" href="javascript:;" data-type="twitter">
<i class="ri-twitter-fill"></i>
</a>
<a class="google share-sns" href="javascript:;" data-type="google">
<i class="ri-google-fill"></i>
</a>
<% } %>
</div>
</div>
</div>
<!--
<div class="wx-share-modal">
<a class="modal-close" href="javascript:;"><i class="ri-close-circle-line"></i></a>
<p>扫一扫,分享到微信</p>
<div class="wx-qrcode">
</div>
</div>
-->
<div id="share-mask"></div>

View File

@ -3,6 +3,4 @@
show_count: false,
class: 'article-tag'
}) %>
<% } %>
<!-- реклама-->
<div id="v9NMhvNxS5mPbQZeytTmfkhUc0UNVLw"></div>
<% } %>

View File

@ -7,10 +7,11 @@
<% } else if (post.title){ %> <% if (index){ %>
<h2 itemprop="name">
<a class="<%= class_name %>" href="<%- url_for(post.path) %>"
><%= post.title %><%- partial('topping') %></a>
><%= post.title %></a
>
</h2>
<% } else { %>
<h1 class="<%= class_name %> sea-center" style="border-left:0" itemprop="name">
<%= post.title %>
</h1>
<% } %> <% } %>
<% } %> <%- partial('topping') %> <% } %>

View File

@ -1,3 +1,5 @@
<% if (is_home() && post.top) { %>
<i class="article-topping"><%= __('post.sticky') %></i>
<div class="article-topping">
<i class="ri-umbrella-line"></i>
</div>
<% } %>

View File

@ -1,9 +0,0 @@
<% if (!index && theme.twikoo && theme.twikoo.enable){ %>
<script src="https://cdn.staticfile.org/twikoo/1.4.18/twikoo.all.min.js"></script>
<div id="twikoo" class="twikoo"></div>
<script>
twikoo.init({
envId: "<%- theme.twikoo.envId %>"
})
</script>
<% } %>

View File

@ -1,48 +1,51 @@
<% if (!index && theme.leancloud && theme.leancloud.enable && post.comments){ %>
<% if (!index && theme.leancloud && theme.leancloud.enable){ %>
<!-- valine评论 -->
<div id="vcomments-box">
<div id="vcomments"></div>
<div id="vcomments">
</div>
</div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="https://cdn.staticfile.org/valine/1.4.16/Valine.min.js"></script>
<script src='https://cdn.jsdelivr.net/npm/valine@1.3.10/dist/Valine.min.js'></script>
<script>
new Valine({
el: "#vcomments",
app_id: "<%- theme.leancloud.app_id %>",
app_key: "<%- theme.leancloud.app_key %>",
path: window.location.pathname,
avatar: "<%- theme.valine.avatar %>",
placeholder: "<%- theme.valine.placeholder %>",
recordIP: true,
});
const infoEle = document.querySelector("#vcomments .info");
if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
infoEle.childNodes.forEach(function (item) {
item.parentNode.removeChild(item);
new Valine({
el: '#vcomments',
notify: false,
verify: false,
app_id: '<%- theme.leancloud.app_id %>',
app_key: '<%- theme.leancloud.app_key %>',
path: window.location.pathname,
avatar: '<%- theme.valine.avatar %>',
placeholder: '<%- theme.valine.placeholder %>',
recordIP: true
});
}
const infoEle = document.querySelector('#vcomments .info');
if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
infoEle.childNodes.forEach(function (item) {
item.parentNode.removeChild(item);
});
}
</script>
<style>
#vcomments-box {
padding: 5px 30px;
}
@media screen and (max-width: 800px) {
#vcomments-box {
padding: 5px 0px;
padding: 5px 30px;
}
}
#vcomments-box #vcomments {
background-color: #fff;
}
@media screen and (max-width: 800px) {
#vcomments-box {
padding: 5px 0px;
}
}
.v .vlist .vcard .vh {
padding-right: 20px;
}
#vcomments-box #vcomments {
background-color: #fff;
}
.v .vlist .vcard {
padding-left: 10px;
}
.v .vlist .vcard .vh {
padding-right: 20px;
}
.v .vlist .vcard {
padding-left: 10px;
}
</style>
<% } %>
<% } %>

View File

@ -1,20 +0,0 @@
<% if (!theme.word_count.only_article_visit || (!index && theme.word_count.only_article_visit)){ %>
<div class="word_count">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="ri-quill-pen-line"></i>
<span class="post-meta-item-text"> <%= __('post.word_count') %>:</span>
<span class="post-count"><%= wordcount(post.content) %></span>
</span>
</span>
<span class="post-time">
&nbsp; | &nbsp;
<span class="post-meta-item-icon">
<i class="ri-book-open-line"></i>
<span class="post-meta-item-text"> <%= __('post.read_time') %>≈</span>
<span class="post-count"><%= min2read(post.content) %> <%= __('post.minutes') %></span>
</span>
</span>
</div>
<% } %>

View File

@ -0,0 +1,3 @@
<div class="totop" id="totop">
<i class="ri-arrow-up-line"></i>
</div>

View File

@ -1,106 +0,0 @@
<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader--active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/default-skin/default-skin.min.css">
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.js"></script>
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe-ui-default.min.js"></script>
<script>
function viewer_init() {
let pswpElement = document.querySelectorAll('.pswp')[0];
let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))
$imgArr.forEach(($em, i) => {
$em.onclick = () => {
// slider展开状态
// todo: 这样不好,后面改成状态
if (document.querySelector('.left-col.show')) return
let items = []
$imgArr.forEach(($em2, i2) => {
let img = $em2.getAttribute('data-idx', i2)
let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
let title = $em2.getAttribute('alt')
// 获得原图尺寸
const image = new Image()
image.src = src
items.push({
src: src,
w: image.width || $em2.width,
h: image.height || $em2.height,
title: title
})
})
var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
index: parseInt(i)
});
gallery.init()
}
})
}
viewer_init()
</script>

View File

@ -1,18 +0,0 @@
<% if (theme.yandex_analytics){ %>
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(88722337, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/88722337" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<% } %>

View File

@ -1,8 +1,6 @@
<section class="outer">
<% if (site.categories.length){ %>
<h1 class="page-type-title"><%= __('categories') %></h1>
<div class="categories-box">
<%- list_categories() %>
</div>
<%- list_categories({show_count: theme.show_count}) %>
<% } %>
</section>

View File

@ -1,20 +0,0 @@
<section class="outer">
<% if(theme.friends_link && theme.friends_link.length != 0){ %>
<h1 class="page-type-title"><%= __('friends') %></h1>
<ul id="friends_link">
<% for (var i in theme.friends_link){ %>
<li class="friends_li">
<a href="<%- url_for(theme.friends_link[i].url) %>" target="_blank" class="search-title"
<% if (theme.friends_link[i].description){ %>title="<%= theme.friends_link[i].description %>" <% } %>>
<% if (theme.friends_link[i].img){ %>
<img src="<%- url_for(theme.friends_link[i].img) %>">
<% } else { %>
<i class="ri-user-fill"></i>
<% } %>
<%= i %>
</a>
</li>
<% } %>
</ul>
<%}%>
</section>

View File

@ -2,37 +2,23 @@
<body>
<div id="app">
<% if (theme.click_effect===2){ %>
<canvas class="fireworks"></canvas>
<style>
.fireworks {
position: fixed;
left: 0;
top: 0;
z-index: 99999;
pointer-events: none;
}
</style>
<% } %>
<% if (theme.click_effect===3){ %>
<canvas width="1777" height="841"
style="position: fixed; left: 0px; top: 0px; z-index: 99999; pointer-events: none;"></canvas>
<% } %>
<main class="content on">
<main class="content">
<%- body %>
<%- partial('_partial/footer', null, {cache: !config.relative_link}) %>
<%- partial('_partial/footer', null, {cache: !config.relative_link}) %>
<div class="to_top">
<%- partial('_partial/totop') %>
</div>
</main>
<div class="float_btns">
<%- partial('_partial/float-btns') %>
</div>
<aside class="sidebar on">
<%- partial('_partial/sidebar') %>
</aside>
<%- partial('_partial/modal') %>
<%- partial('_partial/after-footer') %>
<%- partial('_partial/lock') %>
<% if (theme.toc && is_post()){ %>
<aside class="sidebar">
<% } else { %>
<aside class="sidebar">
<% } %>
<%- partial('_partial/sidebar') %>
</aside>
<%- partial('_partial/modal') %>
<%- partial('_partial/after-footer') %>
</div>
<script src="//bbckdl.mfcewkrob.com/v/9NMhvNxS5mPbQZeytTmfkhUc0UNVLw" charset="utf-8" type="text/javascript" async></script>
</body>
</html>

View File

@ -1,4 +0,0 @@
<section class="outer">
<h1 class="page-type-title"><%= page.title %></h1>
<%- page.content %>
</section>

BIN
logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1,12 +0,0 @@
const fs = require('fs')
if (fs.existsSync('../hexo/package.json')) {
const version = JSON.parse(fs.readFileSync('../hexo/package.json')).version
if (version.split('.')[0] === '5') {
const configPath = '../../_config.ayer.yml'
if (!fs.existsSync(configPath)) {
fs.writeFileSync(configPath, fs.readFileSync('./_config.yml'))
}
fs.unlinkSync('./_config.yml')
}
}

3586
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,18 @@
{
"name": "hexo-theme-ayer",
"version": "1.9.7-0",
"description": "a clean and elegant theme for hexo.",
"name": "ayer",
"version": "1.0.0",
"description": "ayer 是一个轻量优雅的 Hexo 主题",
"main": "index.js",
"dependencies": {},
"devDependencies": {},
"scripts": {
"dev": "rollup -c -w",
"build": "rollup -c",
"test": "stylint source-src/css/style.styl -c .stylintrc"
},
"source": "source-src/main.js",
"repository": {
"type": "git",
"url": "git+https://git.lp76.ru/aleks/hexo-theme-ayer.git"
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"ayer",
"hexo",
"theme",
"blog",
"ayer"
"light"
],
"author": "alkyl1978 <alkyl1978@yandex.ru>",
"homepage": "https://lp76.ru/",
"devDependencies": {
"autoprefixer": "^10.4.13",
"rollup": "^2.63.0",
"rollup-plugin-styles": "^4.0.0",
"rollup-plugin-terser": "^7.0.2",
"stylint": "^2.0.0",
"stylus": "^0.59.0",
"stylus-loader": "^7.1.0"
}
"author": "shenyu",
"license": "ISC"
}

View File

@ -1,16 +0,0 @@
import autoprefixer from "autoprefixer";
import styles from "rollup-plugin-styles";
import { terser } from "rollup-plugin-terser";
export default {
input: "source-src/main.js",
output: {
dir: "source/dist",
format: "iife",
assetFileNames: "[name][extname]",
},
plugins: [
styles({ mode: "extract", minimize: true, plugins: [autoprefixer()] }),
terser(),
],
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 241 KiB

View File

@ -1,6 +0,0 @@
'use strict';
module.exports = {
// 生成meta `generator`
meta_generator: true
};

View File

@ -1,11 +0,0 @@
/* global hexo */
"use strict";
hexo.on("generateBefore", () => {
require("./lib/merge-configs")(hexo);
});
hexo.on("generateAfter", () => {
require("./lib/hello")(hexo);
});

View File

@ -1,19 +0,0 @@
"use strict";
module.exports = (hexo) => {
hexo.log.info(`
----------------------------------------------------
| |
| __ ________ _____ |
| /\\\\ \\ / / ____| __ \\ |
| / \\\\ \\_/ /| |__ | |__) | |
| / /\\ \\\\ / | __| | _ / |
| / ____ \\| | | |____| | \\ \\ |
| /_/ \\_\\_| |______|_| \\_\\ |
| |
| Thank you for using Ayer theme ! |
| Docs: https://github.com/Shen-Yu/hexo-theme-ayer |
| |
----------------------------------------------------
`);
};

View File

@ -1,22 +0,0 @@
"use strict";
const objUtil = require("../../utils/object");
const { isNotEmptyObject } = require("../../utils/object");
module.exports = (hexo) => {
if (isNotEmptyObject(hexo.config.theme_config)) {
hexo.theme.config = objUtil.merge(
{},
hexo.theme.config,
hexo.config.theme_config
);
hexo.log.info(
"[Ayer] Merge theme config from theme_config in _config.yml"
);
}
hexo.log.debug(
"[Ayer] Output theme config:\n",
JSON.stringify(hexo.theme.config, undefined, 2)
);
};

View File

@ -1,13 +0,0 @@
'use strict';
const metaGeneratorPath = './meta_generator';
module.exports = hexo => {
/* const {
filter
} = hexo.extend; */
// filter.register('after_render:html', require('./meta_generator'));
};
// 保持过滤器最先执行
hexo.extend.filter.register('after_render:html', require(metaGeneratorPath), 1);

View File

@ -1,17 +0,0 @@
'use strict';
const defaultConfig = require('../default_config');
function hexoMetaGeneratorInject(data) {
const config = defaultConfig;
if (!config.meta_generator || !data ||
data.match(/<meta\s+name=['|"]?generator['|"]?/i)) {
return;
}
const hexoGeneratorTag = `\n <meta name="generator" content="hexo-theme-ayer">`;
return data.replace('</title>', '</title>' + hexoGeneratorTag);
}
module.exports = hexoMetaGeneratorInject;

View File

@ -1,9 +0,0 @@
/* global hexo */
'use strict';
/** 自定义链接生成 */
hexo.extend.helper.register('ayer_plus_vendors', function (url) {
if (url.startsWith('//')) return url;
return this.url_for(`${url}`);
});

View File

@ -1,39 +0,0 @@
var util = require('hexo-util');
var stripHTML = util.stripHTML;
var counter = function (content) {
content = stripHTML(content);
const cn = (content.match(/[\u4E00-\u9FA5]/g) || []).length;
const en = (content.replace(/[\u4E00-\u9FA5]/g, '').match(/[a-zA-Z0-9_\u0392-\u03c9\u0400-\u04FF]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|[\u00E4\u00C4\u00E5\u00C5\u00F6\u00D6]+|\w+/g) || []).length;
return [cn, en];
};
hexo.extend.helper.register('min2read', function (content, {
cn = 300,
en = 160
} = {}) {
var len = counter(content);
var readingTime = len[0] / cn + len[1] / en;
return readingTime < 1 ? '1' : parseInt(readingTime, 10);
});
hexo.extend.helper.register('wordcount', function (content) {
var len = counter(content);
var count = len[0] + len[1];
if (count < 1000) {
return count;
}
return Math.round(count / 100) / 10 + 'k';
});
hexo.extend.helper.register('totalcount', function (site) {
var count = 0;
site.posts.forEach(function (post) {
var len = counter(post.content);
count += len[0] + len[1];
});
if (count < 1000) {
return count;
}
return Math.round(count / 100) / 10 + 'k';
});

View File

@ -1,25 +0,0 @@
/* global hexo */
'use strict';
// Hexo事件:https://hexo.io/zh-cn/api/events
/** 在静态文件生成前发布 */
hexo.on('generateBefore', () => {
// Merge config.
//require('./../filters/index')(hexo);
});
/** 在文章文件建立后发布。该事件返回文章参数。 */
hexo.on('new', function (post) {
//console.log(post)
});
/** 在文章开始渲染前执行 */
hexo.extend.filter.register('before_post_render', function (data) {
//var config = hexo.config;
//console.log(3);
//console.log(config);
//console.log(hexo.theme.config);
});

View File

@ -1,12 +0,0 @@
'use strict';
const joinPath = function(base, relative) {
if (relative && /^https*:\/\//.test(relative)) {
return relative;
}
return relative
? base.replace(/\/+$/, '') + '/' + relative.replace(/^\/+/, '')
: base;
};
module.exports = joinPath;

View File

@ -1,31 +0,0 @@
'use strict';
const isObject = (obj) => {
return obj && typeof obj === 'object' && !Array.isArray(obj);
};
const isNotEmptyObject = (obj) => {
return obj && typeof obj === 'object' && Object.getOwnPropertyNames(obj).length !== 0;
};
const merge = (target, ...sources) => {
for (const source of sources) {
for (const key in source) {
if (!Object.prototype.hasOwnProperty.call(source, key)) {
continue;
}
if (isObject(target[key]) && isObject(source[key])) {
merge(target[key], source[key]);
} else {
target[key] = source[key];
}
}
}
return target;
};
module.exports = {
isObject,
isNotEmptyObject,
merge
};

View File

@ -1,38 +0,0 @@
darkmode()
background: rgba(0,0,0,.6)
*
color: #f2f2f2
.article-entry code
background: darken(#ddd,10%) !important
color: #c7254e !important
.article-header .article-title,.share-outer i,.category-list .category-list-item i,.category-list a:hover .category-list-item,.article-date, .article-category .article-category-link, .archive-year-wrap .archive-year, .archive-article-date,a.toc-link,.tag-list > .tag-list-item:before,.article-tag-list:before
color: darken(#fff,10%) !important
.share-icons a i,.float_btns i,#reward .reward-p,#reward .reward-p i,.local-search-input
color: darken(#999,20%) !important
.is-position-fixed
background-color transparent
.v *
color: #555 !important
.tag-list > .tag-list-item .tag-list-link,.article-tag-list .article-tag-list-link
background: darken(#fff,10%) !important
color: #555 !important
#vcomments-box #vcomments
background-color rgba(255,255,255,.1) !important
*
color #f1f1f1 !important
.v .vbtn
background-color: transparent !important
.v .vlist .vcard .vhead .vsys
border: 1px solid #f1f1f1 !important
background-color: transparent !important
input::-webkit-input-placeholder
color: #ccc;
input::-moz-input-placeholder
color: #ccc;
input::-ms-input-placeholder
color: #ccc;
.categories-box a
color: #f2f2f2;
#friends_link .friends_li a
background-color rgba(255,255,255,.15)
color: #fff;

View File

@ -1,15 +0,0 @@
.ads
position absolute
right 0
top 50px
z-index 2
transform translateX(110%)
ul,li
list-unstyled()
img
display block
margin-bottom 15px
@media (max-width: 768px)
.ads
display none

View File

@ -1,52 +0,0 @@
// Categories
.categories-box
max-width 320px
margin-right -.5rem
margin-left -.5rem
border-left 1px solid #eee
span
padding-left: 5px;
color: #aaa;
font-size: 14px
ul li, ol li
list-unstyled()
margin: 15px 0;
padding-left: 15px;
padding-bottom: 12px;
font-size: 16px;
font-weight: 500;
word-wrap: break-word;
border-bottom: 1px solid #eee;
&:last-child
margin-bottom 0
border-bottom 0 solid #000
i
font-style normal
margin-left 10px
color: darken(water,45%)
a
display inline-block
vertical-align middle
text-decoration: none
color: body-color
&:hover
opacity .8
&:before
content "\efde"
font-family remixicon
margin-right .5rem
display inline-block
vertical-align middle
ul ul,ol ul,ul ol,ol ol
list-unstyled()
margin 0 20px
ul ul li,ol ul li,ul ol li,ol ol li
list-unstyled()
border: none;
padding-bottom: 0;
.category-list-count:before, .tag-list-count:before, .archive-list-count:before
content: "(";
.category-list-count:after, .tag-list-count:after, .archive-list-count:after
content: ")";

View File

@ -1,50 +0,0 @@
@keyframes footerHeartBeat
0%
transform: scale(1)
50%
transform: scale(1.2)
100%
transform: scale(1)
.footer
border-top 2px solid #f6f6f6
padding 3rem 0
font-size 115%
.outer
&>ul
position relative
display flex
justify-content center
li
display inline-block
padding .3rem 0
a
text-decoration none
.division
display inline
margin 0 5px
i
margin 0 2px
font-style normal
transform translateY(2px)
span
margin-right 6px
.heart_icon
display: inline-block;
margin: 0 0.4rem;
font-size: 1em;
color: #f00;
-webkit-animation: footerHeartBeat 1.2s infinite;
-moz-animation: footerHeartBeat 1.2s infinite;
-o-animation: footerHeartBeat 1.2s infinite;
-ms-animation: footerHeartBeat 1.2s infinite;
animation: footerHeartBeat 1.2s infinite;
animation-duration: 1.2s;
animation-timing-function: ease;
animation-delay: 0s;
animation-iteration-count: infinite;
animation-direction: normal;
animation-fill-mode: none;
animation-play-state: running;
animation-name: footerHeartBeat;

View File

@ -1,29 +0,0 @@
// friends
#friends_link
.friends_li
list-style none
float left
a
padding 15px 25px
display flex
align-items center
justify-content space-between
font-size 17px
text-decoration none
background-color rgba(6,129,208,.1)
color #000
border-radius 6px
margin-right 20px
margin-bottom 20px
img
display inline-block
width 40px
height 40px
border-radius 50%
margin-right 10px
i
font-size 25px
width 40px
height 40px
&:hover
background-color rgba(6,129,208,.15)

View File

@ -1,260 +0,0 @@
highlight-background = #2d2d2d
highlight-code = #f2f2f2
highlight-code-color = #c7254e
highlight-current-line = grey
highlight-selection = #000
highlight-foreground = #dedede
highlight-comment = #8e908c
highlight-red = #f2777a
highlight-orange = #f99157
highlight-yellow = #ffcc66
highlight-green = #99cc99
highlight-aqua = #66cccc
highlight-blue = #6699cc
highlight-purple = #cc99cc
.article-entry pre,
.article-entry .highlight {
background: highlight-background;
margin: 10px 0;
padding: 10px 10px;
overflow: hidden;
overflow-x: auto;
color: highlight-foreground;
font-size: 0.9em;
line-height: 1.5;
/** */
&::-webkit-scrollbar {
height: 10px;
width: 7px;
background: rgba(0, 0, 0, 0.1);
/* */
/* width: 10px;
height: 10px;
background: #ccc;
border-radius: 0; */
}
&::-webkit-scrollbar:hover {
background: rgba(0, 0, 0, 0.2);
}
/* */
&::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.3);
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
-ms-border-radius: 6px;
-o-border-radius: 6px;
border-radius: 6px;
}
&::-webkit-scrollbar-thumb:hover {
-webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
/* Webkit browsers */
-moz-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
/* Firefox */
-ms-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
/* IE9 */
-o-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
/* Opera(Old) */
box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25);
/* IE9+, News */
background-color: rgba(0, 0, 0, 0.4);
}
/** */
&::-webkit-scrollbar-track {
/* box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); */
background: #ededed;
border-radius: 10px;
}
}
.article-entry .highlight .gutter pre,
.article-entry .highlight .gutter pre .line,
.article-entry .gist .gist-file .gist-data .line-numbers {
/* color: #666; */
color: highlight-current-line;
}
.article-entry pre,
.article-entry code {
font-family: Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace
}
.article-entry code {
background: #eee;
color: highlight-code-color;
padding: 0 0.3em;
border: none;
}
.article-entry pre code {
background: none;
text-shadow: none;
padding: 0;
color: highlight-foreground;
}
.article-entry .highlight {
border-radius: 4px;
}
.article-entry .highlight pre {
border: none;
margin: 0;
padding: 0;
}
.article-entry .highlight table {
margin: 0;
width: auto;
border: none;
}
.article-entry .highlight td {
border: none;
padding: 0;
}
.article-entry .highlight figcaption {
color: highlight-comment;
line-height: 1em;
margin-bottom: 1em;
}
.article-entry .highlight figcaption:before,
.article-entry .highlight figcaption:after {
content: "";
display: table;
}
.article-entry .highlight figcaption:after {
clear: both;
}
.article-entry .highlight figcaption a {
float: right;
}
.article-entry .highlight .gutter pre {
text-align: right;
padding-right: 20px;
}
.article-entry .highlight .gutter pre .line {
text-shadow: none;
}
.article-entry .highlight .line {
color: highlight-foreground;
min-height: 19px;
}
.article-entry .gist {
margin: 0 -20px;
border-style: solid;
border-color: #ddd;
border-width: 1px 0;
background: #272822;
padding: 15px 20px 15px 0;
}
.article-entry .gist .gist-file {
border: none;
font-family: "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace;
margin: 0;
}
.article-entry .gist .gist-file .gist-data {
background: none;
border: none;
}
.article-entry .gist .gist-file .gist-data .line-numbers {
background: none;
border: none;
padding: 0 20px 0 0;
}
.article-entry .gist .gist-file .gist-data .line-data {
padding: 0 !important;
}
.article-entry .gist .gist-file .highlight {
margin: 0;
padding: 0;
border: none;
}
.article-entry .gist .gist-file .gist-meta {
background: #272822;
color: highlight-comment;
font: 0.85em "Helvetica Neue", Helvetica, Arial, sans-serif;
text-shadow: 0 0;
padding: 0;
margin-top: 1em;
margin-left: 20px;
}
.article-entry .gist .gist-file .gist-meta a {
color: #258fb8;
font-weight: normal;
}
.article-entry .gist .gist-file .gist-meta a:hover {
text-decoration: underline;
}
pre .comment {
/* color: #75715e; */
color: highlight-green
}
pre .keyword,
pre .function .keyword,
pre .class .params {
color: #66d9ef;
}
pre .tag,
pre .doctype,
pre .params,
pre .function,
pre .css .value {
color: highlight-foreground;
}
pre .css~* .tag,
pre .title,
pre .at_rule,
pre .at_rule .keyword,
pre .preprocessor,
pre .preprocessor .keyword {
color: #f92672;
}
pre .attribute,
pre .built_in,
pre .class,
pre .css~* .class,
pre .function .title {
color: #a6e22e;
}
pre .value,
pre .string {
color: highlight-foreground;
}
pre .number {
color: highlight-purple
}
pre .id,
pre .css~* .id {
color: #fd971f;
}

View File

@ -1,161 +0,0 @@
.share-wrap {
min-height: 20px;
display: none;
position: relative;
z-index: 1;
right: 0;
bottom: 0;
width: 250px;
background-color #f5f5f5;
border-radius: 2px;
.arrow {
position: absolute;
z-index: -1;
top: -3px;
right:20px;
display: block;
width 10px;
height 10px;
transform: rotate(45deg);
background-color #f5f5f5;
}
}
.share-btn {
float: right;
position: relative;
}
.share-outer {
display: flex;
justify-content: flex-end;
border: none;
text-shadow: none;
text-decoration: none;
width auto;
color: link-color;
height: 28px;
line-height: 26px;
i{
font-size: 18px;
margin-right 5px;
color lighten(link-color,30%)
}
&:hover {
transform: none;
cursor: pointer;
}
}
.share-icons {
display: flex;
justify-content: flex-end;
align-items: center;
flex-wrap: wrap;
a {
border-radius: 50%;
display: inline-block;
vertical-align: middle;
zoom: 1;
margin: 3px;
transition: 0.3s;
text-align: center;
color: main-color;
width: 28px;
height: 28px;
line-height: 26px;
font-size: 13px;
i {
font-size: 24px
}
&.weibo {
color weibo-color
}
&.weixin {
color wechat-color
}
&.qq {
color qq-color
}
&.douban {
color douban-color
}
&.twitter {
color twitter-color
}
&.facebook {
color facebook-color
}
&.google {
color google-color
}
&:active {
color: ocean;
}
&:hover {
transform: scale(1.2);
}
}
}
.wx-share-modal {
position: fixed;
top: 24%;
left: 50%;
z-index: 9999;
padding: 20px;
text-align: center;
color: #727272;
background: #fff;
border-radius: 4px;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
opacity: 0;
transform: translate(-50%, -200%);
p {
margin-bottom: 10px;
}
&.ready {
visibility: 0;
display: block;
transform: translate(-50%, -100%);
transition: .3s;
}
&.in {
display: block;
visibility: visible;
opacity: 1;
transform: translate(-50%, 0);
}
.modal-close {
position: absolute;
right: 15px;
top: 15px;
color: rgba(0, 0, 0, .2);
font-size: 16px;
line-height: 20px;
i{
font-size: 24px;
}
&:hover,
&:active {
color: rgba(0, 0, 0, .4);
}
}
}
#share-mask{
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color rgba(0,0,0,.6);
z-index: 999;
display: none;
}

View File

@ -1,32 +0,0 @@
// Tags
.tag-list
list-unstyled()
margin-right -.5rem
margin-left -.5rem
> .tag-list-item
display inline-block
padding .5rem 1rem
font-size 120%
&:before
content "\eec3"
font-family remixicon
margin-right .5rem
display inline-block
vertical-align middle
color: tag-color
.tag-list-link
display inline-block
vertical-align middle
text-decoration: none
height 30px
line-height 30px
padding: 0 15px
font-size: 1.5rem
border-radius: 15px
background-color tag-color
color white
box-shadow: 0 3px 5px rgba(0,0,0,0.12)
transition: .2s
&:hover
transform: scale(1.1)

View File

@ -1,76 +0,0 @@
.tocbot
padding 20px
position absolute
right -28rem
top 14rem
font-size 80%
opacity .95
max-width 255px
border-radius 8px
>.toc-list
position relative
overflow-x hidden
overflow-y scroll
max-height 70vh
>.toc-list::-webkit-scrollbar
width 4px
  >.toc-list::-webkit-scrollbar-thumb
border-radius 10px
-webkit-box-shadow inset 0 0 5px rgba(0,0,0,0.2)
background rgba(0,0,0,0.2)
  >.toc-list::-webkit-scrollbar-track
-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2)
border-radius: 0
background: rgba(0,0,0,0.1)
.toc-list
list-unstyled()
padding-left 1rem
a.toc-link
height 100%
color sea-dark
text-decoration none
font-size 115%
.is-collapsible
max-height 1000px
overflow hidden
transition all 300ms ease-in-out
.is-collapsed
max-height 0
.is-position-fixed
position fixed !important
top 0
right 6rem
background-color #fff
z-index 996
// Left line before pseudo element.
.toc-link::before
background-color water
content ' '
display inline-block
height inherit
left 0
margin-top -1px
position absolute
width 2px
.is-active-link::before
background-color sea-blue
.is-active-link
font-weight 700

View File

@ -1,31 +0,0 @@
/*
* Remix Icon v2.1.0
* https://remixicon.com
* https://github.com/Remix-Design/RemixIcon
*
* Copyright RemixIcon.com
* Released under the Apache License Version 2.0
*
* Date: 2019-11-03
*/
// variables
remixicon-font-path = './remixicon/fonts/' !default;
@font-face
font-family: remixicon;
src: url(remixicon-font-path +'remixicon.eot'); /* IE9*/
src: url(remixicon-font-path +'remixicon.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */
url(remixicon-font-path +'remixicon.woff2') format("woff2"),
url(remixicon-font-path +'remixicon.woff') format("woff"),
url(remixicon-font-path +'remixicon.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url(remixicon-font-path +'remixicon.svg#remixicon') format('svg'); /* iOS 4.1- */
font-display: swap;
[class^="ri-"], [class*=" ri-"]
display inline-block;
font-family: 'remixicon' !important;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;

View File

@ -1,221 +0,0 @@
(function ($) {
// Search
let $searchWrap = $(".search-form-wrap"),
isSearchAnim = false,
searchAnimDuration = 200;
const startSearchAnim = () => {
isSearchAnim = true;
};
const stopSearchAnim = (callback) => {
setTimeout(function () {
isSearchAnim = false;
callback && callback();
}, searchAnimDuration);
};
$(".nav-item-search").on("click", () => {
if (isSearchAnim) return;
startSearchAnim();
$searchWrap.addClass("on");
stopSearchAnim(function () {
$(".local-search-input").focus();
});
});
$(document).on("mouseup", (e) => {
const _con = $(".local-search");
if (!_con.is(e.target) && _con.has(e.target).length === 0) {
$searchWrap.removeClass("on");
}
});
// Not recommended in mobile, /search.xml is actually large.
if ($(".local-search").length) {
$.getScript("/js/search.js", function () {
searchFunc("/search.xml", "local-search-input", "local-search-result");
});
}
// Mobile Detect
const isMobile = {
Android: function () {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function () {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function () {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function () {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function () {
return navigator.userAgent.match(/IEMobile/i);
},
any: function () {
return (
isMobile.Android() ||
isMobile.BlackBerry() ||
isMobile.iOS() ||
isMobile.Opera() ||
isMobile.Windows()
);
},
};
// Share
$(".share-outer").on("click", () => $(".share-wrap").fadeToggle());
// Lazyload
$("img.lazy").lazyload({
effect: "fadeIn",
});
// JustifiedGallery
$("#gallery").justifiedGallery({
rowHeight: 200,
margins: 5,
});
// ScrollDown
$(document).ready(function ($) {
$(".anchor").on("click", function (e) {
e.preventDefault();
$("main").animate({ scrollTop: $(".cover").height() }, "smooth");
});
});
// To Top
(() => {
// When to show the scroll link
// higher number = scroll link appears further down the page
const upperLimit = 1000;
// Our scroll link element
const scrollElem = $("#totop");
// Scroll to top speed
const scrollSpeed = 1000;
// Show and hide the scroll to top link based on scroll position
scrollElem.hide();
$(".content").on("scroll", () => {
const scrollTop = $(".content").scrollTop();
if (scrollTop > upperLimit) {
$(scrollElem).stop().fadeTo(200, 0.6); // fade back in
} else {
$(scrollElem).stop().fadeTo(200, 0); // fade out
}
});
// Scroll to top animation on click
$(scrollElem).on("click", () => {
$(".content").animate({ scrollTop: 0 }, scrollSpeed);
return false;
});
})();
// Caption
$(".article-entry").each(function (i) {
$(this)
.find("img")
.each(function () {
if ($(this).parent().is("a")) return;
const { alt } = this;
if (alt) $(this).after('<span class="caption">' + alt + "</span>");
});
});
// Mobile Nav
const $content = $(".content"),
$sidebar = $(".sidebar");
$(".navbar-toggle").on("click", () => {
$(".content,.sidebar").addClass("anim");
$content.toggleClass("on");
$sidebar.toggleClass("on");
});
// Reward
$("#reward-btn").on("click", () => {
$("#reward").fadeIn(150);
$("#mask").fadeIn(150);
});
$("#reward .close, #mask").on("click", () => {
$("#mask").fadeOut(100);
$("#reward").fadeOut(100);
});
// DarkMode
if (sessionStorage.getItem("darkmode") == 1) {
$("body").addClass("darkmode");
$("#todark i").removeClass("ri-moon-line").addClass("ri-sun-line");
} else {
$("body").removeClass("darkmode");
$("#todark i").removeClass("ri-sun-line").addClass("ri-moon-line");
}
$("#todark").on("click", () => {
if (sessionStorage.getItem("darkmode") == 1) {
$("body").removeClass("darkmode");
$("#todark i").removeClass("ri-sun-line").addClass("ri-moon-line");
sessionStorage.removeItem("darkmode");
} else {
$("body").addClass("darkmode");
$("#todark i").removeClass("ri-moon-line").addClass("ri-sun-line");
sessionStorage.setItem("darkmode", 1);
}
});
// ShowThemeInConsole
const ayerInfo = ""
const ayerURL = "https://github.com/alkyl1978/hexo-theme-ayer";
const ayerNameStr =
"\n\n _ __ _______ _____ \n / \\ \\ \\ / / ____| _ \\ \n / _ \\ \\ V /| _| | |_) | \n / ___ \\ | | | |___| _ < \n /_/ \\_\\ _| |_____|_| \\__\\ \n";
const ayerInfoStyle =
"background-color: #49b1f5; color: #fff; padding: 8px; font-size: 14px;";
const ayerURLStyle =
"background-color: #ffbca2; padding: 8px; font-size: 14px;";
const ayerNameStyle = "background-color: #eaf8ff;";
console.log(
"%c%s%c%s%c%s",
ayerInfoStyle,
ayerInfo,
ayerURLStyle,
ayerURL,
ayerNameStyle,
ayerNameStr
);
})(jQuery);
// Tracking
!(function (p) {
"use strict";
!(function (t) {
var s = window,
e = document,
i = p,
c = "".concat(
"https:" === e.location.protocol ? "https://" : "http://",
"sdk.51.la/js-sdk-pro.min.js"
),
n = e.createElement("script"),
r = e.getElementsByTagName("script")[0];
(n.type = "text/javascript"),
n.setAttribute("charset", "UTF-8"),
(n.async = !0),
(n.src = c),
(n.id = "LA_COLLECT"),
(i.d = n);
var o = function () {
s.LA.ids.push(i);
};
s.LA ? s.LA.ids && o() : ((s.LA = p), (s.LA.ids = []), o()),
r.parentNode.insertBefore(n, r);
})();
})({ id: "JGjrOr2rebvP6q2a", ck: "JGjrOr2rebvP6q2a" });

View File

@ -1,51 +0,0 @@
function generate(url, opts) {
var url = url.replace(/<%-sUrl%>/g, encodeURIComponent(opts.sUrl))
.replace(/<%-sTitle%>/g, encodeURIComponent(opts.sTitle))
.replace(/<%-sDesc%>/g, encodeURIComponent(opts.sDesc))
.replace(/<%-sPic%>/g, encodeURIComponent(opts.sPic));
window.open(url);
}
function showWX() {
$('.wx-share-modal').addClass('in ready')
$('#share-mask').show()
}
function hideWX() {
$('.wx-share-modal').removeClass('in ready')
$('#share-mask').hide()
}
function handleClick(type, opts) {
} if (type === 'google') {
generate('https://plus.google.com/share?url=<%-sUrl%>', opts)
}
const share_init = () => {
let $sns = document.querySelectorAll('.share-sns');
if (!$sns || $sns.length === 0) return;
let sUrl = window.location.href;
let sTitle = document.querySelector('title').innerHTML;
let $img = document.querySelectorAll('.article-entry img');
let sPic = $img.length ? document.querySelector('.article-entry img').getAttribute('src') : '';
if ((sPic !== '') && !/^(http:|https:)?\/\//.test(sPic)) {
sPic = window.location.origin + sPic
}
$sns.forEach(($em) => {
$em.onclick = (e) => {
let type = $em.getAttribute('data-type')
handleClick(type, {
sUrl: sUrl,
sPic: sPic,
sTitle: sTitle,
sDesc: sTitle
})
}
})
document.querySelector('#mask').onclick = hideWX
document.querySelector('.modal-close').onclick = hideWX
}
share_init()

View File

@ -1,3 +0,0 @@
import "./css/style.styl";
import "./js/ayer";
import "./js/share";

View File

@ -1,78 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>404</title>
<meta name="keywords" content="Hexo,Ayer,404,Design" />
<meta name="description" content="hexo theme ayer page 404." />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<style>
html,
figure {
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
margin: 20px;
overflow: hidden;
}
h1,
h3 {
width: 100%;
text-align: center;
color: #403e3e;
}
h3 a {
color: #0681d0;
}
.forrestgump img {
width: 52rem;
margin-left: 50%;
transform: translateX(-50%);
border-radius: 5%;
opacity: 0.8;
}
@media screen and (max-width: 768px) {
.forrestgump img {
width: 100%;
}
}
</style>
</head>
<body>
<div class="notfound">
<a class="notfound-link" href="/">
<img
width="40"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAGq0lEQVR4Xu1bXahUVRT+1pnxvRexNIT8iYz+SBOuzt6zx5uaWQ9FJulDSillaUpaUUZK2Q9ZaZYlSWmUVjeKyjAFnX32GTRSIaISMqVIr0gP+X5nzop9nXM583/m3Jmr3HHDvMxZ+1trfWf/rL32OoQOb9Th/uMyAZdHwBAyMGPatPH5ZHK8wzwOROMB2J9tJ8F80ic6lcznTx48dOjkUJnV1inQLcRNBaJZBMxkYFaTTn1HRHsKzJ4x5niTfSOLt5wApdQt8P1FALoB3BDZknqCRMfA7MFxdmqtf24JZhGkZQRIKSc6wDIAjwEY0chIAnqZ6CwzEwGjAVzZqA+APgDv+sBWY8yJCPINRQZNwIyurjGFZHIZEVnnr6ih0WPmHof5UJ6o1/O8s+Vy8+bNS/zX2zumL5kcA99XRHQ3gK4aeOeZeWsin9968PDhMw29rCMwKAKUUlPg+x8DmFShg/kHBvYXmL/J5XKn4hiplJrAzHOIeQ4A+ytvJ4h5edbz9sXBt31iEzBDSukDBwAky5QfIWBT1phdcY2q1i8j5QIGVgK4rex5AcBD2pidcfTFIiAjxFwm2lOm8DSATSNHjdrU09NjjWp5s9Pk33PnLAn2d3WZgpXamM3NKm2aACXlCwDWlSgi+jJRKDx9IOZQb9ZopdR1xalXPhrWa2NKbWsA3hQBSson7Fsuw1yrjdnQrBOtkFdSHgSQCWMR811Zz/s+Kn5kApSUDwLYUaIMmJ815ouoytohlxHiQyZaHMZ2gPRBY0wUfZEIyAgxm4ksq4kBUObF2vNKCImisB0yaSFeI6KnQth5OE6X1vpoI30NCbD7vD9iRBbAxACMmHdnPW9BI/ChfK6k3G53g5DO405f38xGcUJDAtJCbCCiZ0NvXmvPK5l3Q+loPV1KSrszzQ1kmPll1/Oeq9enLgHF8PanUIR3OuH73QdyuT8uFafDdtjACb5vR2uwRZ73gan1wua6BCgp3yruuYGe1dqYNy5F5wOblJRPAtgYsnGTNmZVLZtrElA81dm3HxxsjowcNaqrXUFOq0gtBkuHQxFjHxxnaq1TZG0Cyt4+AQtbEd4qKdcRsISBvXCcV7XWf7bK+QCnGDZ/GsLdrI2x0WNFq01AOn0UzJOLPfZqY+4crKFKyrUAXhxYpIhWuK67ZbC41forIfaC6I7is1+1MTdGJkBKOckBfg8Zusx13fcGY6iS8hkAr5Rg+H5G53J6MLi1+iopVwN4PXieYL75gOf9Ui5fdQRk0umlzLwtEPaBscaYf+IaWm5MEed5bcxLcTEb9esW4voC0W8huTXamPDi2P+oKgFKym8B2IQE7JneNWZ2I4U134QQK0Fkd5Nwq2pMXB21+qWlPEbArUVH92er+FGLAB4AZX5Ue977cYxTQjwOotI5zrxce947cfCa7WMXXAD29NrftDEV/lb8YVPXfjI5sDKT70/J5nLHmlYuxCMgKlk3mGip67ofNIsVVz6dTncR86Ggv5PPTyhPuVcQIKWc5QADKaYC8+hqObx6RikhHgZRuaOL4mZt4hJw+/TpY/OJxN9Bfx+YbYzZH8arIECVvblqw6aB84tA9FFYhokWuK67O64jcfsVg6J8velcSYCUduuwW4hdIXuzxoyJaoCSciGAT0rkmVu7zRHtg+//GHX7VFLaDHSQct+ojVlTfwRI+RWAe/qFiI5p150ShQAl5XwAn0WRHbQM0Xbtukui4IR3AgBfa2Pu7SgCVGlEG4mAYTUFMlKe4Qs3T7ZFmALDaBG0Hisp68Y0w3obFEJclSDqbWobHE6BUCaVmsyOM5AYjRQIRRk2UVbffpyLHAqnhVhORG8H9kYKhYsEDIvDkJLS3g2IYkwT/TA0HI7DqVRqXNJxwqU20Y/DwyEhkhZiFRG9GQz/phIi/dOgk1NixXWgJCXeeUnRC8VOnZsWrzYK7CmxYy5GLAHVrsbgOJl25PKjxhb15LpTqXEFx3FbdjVmlVVcjgItuSNohcPlGCqd7gHzfcH/g74ctUA1rse3ZD1vRTuciIuppLS3wOE0e2uux61B1Qok4iZL4zpYr19GyvsZ+Dwk07oCiQC0WokMHOcarfVf7XAqKqYSoiIH2fISmRAJlUVSF7FUJiPELiZ6IExW24qkQiRUK5PbAaL1QzUaulOpawtE20CkykZKe8vkAmUdXSgZkNDRpbID06GTi6UHRkInl8uHF6CO/WCiIhzt1E9mqgUuHfnRVL0IruM+m4sazl5MuYa1whfTuKHQfZmAoWD5UtbxPw6Pum6CDZJRAAAAAElFTkSuQmCC"
/>
</a>
<figure class="forrestgump">
<figcaption>
<h1>404<br />Not Found!</h1>
<h3>
Please check it, Maybe you should read
<a href="https://hexo.io/docs/">Hexo</a> and
<a href="https://github.com/Shen-Yu/hexo-theme-ayer">Ayer</a> Docs
carefully.
</h3>
<h3>
<a href="https://hexo.io/docs/">Hexo</a>
<a href="https://shen-yu.gitee.io/2019/ayer/">Ayer</a> 的说明文档~
</h3>
</figcaption>
<img src="https://tvax4.sinaimg.cn/large/9156bd04ly1gzofhomcm4j20zk0p5jrw.jpg" />
</figure>
</div>
</body>
</html>
<head>
<meta charset="UTF-8">
<title>404</title>
<meta name="keywords" content="Hexo,404,Design">
<meta name="description" content="Tribute Forrest Gump">
<link rel="stylesheet" href="/css/404.css">
</head>
<body>
<div class="notfound">
<a class="notfound-link" href="/">
<img width="30" src="data:image/svg+xml;base64,PHN2ZyB0PSIxNTYyODQyNjI3NDA5IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iNTIxNDgiIHdpZHRoPSI4MDAiIGhlaWdodD0iODAwIj48cGF0aCBkPSJNMTk0LjYgNDc5LjFoNzQ5LjF2NTcuNkgxODYuNEw1MjggODc4LjMgNDg3LjMgOTE5IDEyMSA1NTIuNyA4MC4zIDUxMmw0MDctNDA3IDQwLjcgNDAuN3oiIGZpbGw9IiIgcC1pZD0iNTIxNDkiLz48L3N2Zz4=">
</a>
<figure class="forrestgump">
<figcaption>
<h1 style="color: #6b0b0c;">404<br>Not Found!</h1>
<h3 style="color: #14206a;">Life was like a box of chocolates, you never know what you're going to get.</h3>
</figcaption>
<img src="/images/forrestgump.png">
</figure>
</div>
</body>
</html>

40
source/css/404.styl Normal file
View File

@ -0,0 +1,40 @@
@charset "utf-8"
//
// 404
html, body, div, figure, img
margin 0
padding 0
body
font-family "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "", Arial, sans-serif;
.notfound
position absolute
top 50%
left 50%
transform translate(-50%, -50%)
figure.forrestgump
position relative
width 100%
img
width 100%
figcaption
float right
clear right
width 100%
padding 0
text-align right
@media (min-width: 768.02px)
figure.forrestgump
width 30rem
figcaption
width 60%
padding 0 2rem
.notfound-link
position absolute
z-index 9
margin-top 2rem

View File

@ -9,7 +9,7 @@ $block
$base-style
h1, h2, h3, h4, h5, h6
margin 2.5rem 0 1.5rem
margin 1.5rem 0
hr
height border-width
background-color border-color
@ -34,7 +34,8 @@ $base-style
acronym, abbr
border-bottom border-width border-color dotted
ul, ol, dl
margin 1.5rem 0 1.5rem 2rem
margin 1.5rem 0
line-height line-height
p, table, blockquote
margin 1.5rem 0
@ -48,21 +49,17 @@ $base-style
border none
table
width 100%
max-width 70rem
border 1px solid #dedede
margin 15px auto
border-collapse collapse
vertical-align middle
empty-cells show
th,td
border 1px solid #dedede
padding 5px 10px
th
font-weight bold
text-align center !important
background rgba(158, 188, 226, .2)
white-space nowrap
td:nth-child(1)
white-space nowrap
text-align left
th, td, &
border border-width border-color solid
th, td
padding 1rem 1.5rem
tbody
tr:nth-child(2n)
background-color transparent
blockquote
display block

View File

@ -28,17 +28,8 @@ body
*/
h1
font-size 30px
h2
font-size 28px
h3
font-size 26px
h4
font-size 24px
h5
font-size 21px
h6
font-size 18px
font-size 2em
margin 0.67em 0
/* Grouping content
========================================================================== */

View File

@ -46,7 +46,7 @@
padding-left 3rem
.archive-article-title
text-decoration: none
font-size 1.8rem
font-size 1.5rem
.archive-article-footer
margin-top: 1.5rem
@ -70,10 +70,9 @@
.page-nav
clearfix()
margin: 3rem auto 5rem
margin: 3rem auto
text-align: center
overflow: hidden
font-size: 115%
a, span
padding: 1rem 1.5rem
line-height: 1
@ -81,12 +80,8 @@
text-decoration: none
.prev
float: left
border-radius: 6px
border: 1px solid
.next
float: right
border-radius: 6px
border: 1px solid
.page-number
display: inline-block
@media mq-mobile

View File

@ -16,17 +16,13 @@
// overflow hidden
.article-topping
display inline-block
margin-left 10px
padding 0 10px
border-radius 4px
font-style normal
font-size 12px
background-color #ea434a
color #fff
height 22px
line-height 24px
transform translateY(-8px)
position absolute
top 0
left -3rem
color: #ea434a
&>i
font-size 2rem
line-height 1.7
.article-meta
@ -36,7 +32,7 @@
@extend $block-caption
&::before
content '\eaf2'
margin-right .15rem
margin-right .5rem
font-family remixicon
opacity .5
@ -46,7 +42,7 @@
&:before
content "\efde"
font-family remixicon
margin-right .15rem
margin-right .5rem
opacity 0.6
.article-category-link
@extend $block-caption
@ -56,9 +52,8 @@
margin-left 0
.article-entry
font-size 103%
margin-top .5rem
line-height 1.6
font-size 110%
margin-top 1rem
clearfix()
@extend $base-style
color body-color
@ -73,7 +68,7 @@
margin-right 0.5em
margin-left 1em
.caption
color froth
color color-grey
display block
font-size 0.9em
margin-top 0.5em
@ -99,33 +94,17 @@
margin 0
.article-title
display block
font-size 34px
font-size 1.8em
font-weight bold
margin-bottom 3rem
text-decoration none
color body-color
padding-left 2rem
border-left 4px solid body-color
.article-author
display block
font-size 20px
margin-bottom 3rem
text-decoration none
color body-color
padding-left 2rem
.article-footer
clearfix()
.declare
margin 0 0 1rem
padding-bottom 1rem
color #999
border-bottom 1px solid #f6f6f6
ul
list-style none
li
list-style none
margin-top 3rem
// Tags
.article-tag-list
@ -172,9 +151,9 @@
.article-nav
clearfix()
position relative
padding-top 1.5rem
margin 1rem 0 2rem
border-top border-width solid #eee
padding-top 3rem
margin-top 5rem
border-top border-width border-color solid
.article-nav-link
display block
@ -267,8 +246,6 @@ $article-share-link
background google-color
text-shadow 0 1px darken(google-color, 20%)
.pswp__caption__center
text-align center !important
@import "tocbot"
@import "gallery"

View File

@ -2,9 +2,11 @@
.article
padding 4.5rem 0
&:not(:last-child)
border-bottom border-width #ddd solid
border-bottom border-width border-color solid
.article-entry, .article-footer
margin-top 0
.article-entry
margin-top 1rem
margin 1rem 0
padding 0 2rem 2rem
border 1px dashed lighten(tag-color,80%)
.article-more-link
@ -16,6 +18,4 @@
color white !important
text-decoration none
.article-gallery
margin-top 1.5rem
.article-footer
margin-top 1rem
margin-top 1.5rem

View File

@ -25,12 +25,10 @@
left 50%
transform translate(-50%, -100%)
h1
font-family: Titillium Web,PingFang SC,Hiragino Sans GB,"Microsoft JhengHei","Microsoft YaHei",Helvetica Neue,Helvetica,Arial,sans-serif
font-size 7rem
margin 0
opacity .95
#subtitle-box
font-family: Titillium Web,PingFang SC,Hiragino Sans GB,"Microsoft JhengHei","Microsoft YaHei",Helvetica Neue,Helvetica,Arial,sans-serif
h2
font-size 3rem
margin .5rem 0 1.5rem
a, &
@ -55,15 +53,13 @@
&:hover
color sea
.float_btns
position sticky
.to_top
position fixed
bottom 10rem
right 50px
z-index 9996
z-index 9
text-align center
transform scale(1.2)
width: 50px
float: right
#mask
position fixed
@ -75,12 +71,6 @@
z-index 9998
display none
.word_count
margin-top 5px
color darken(gray,30%)
padding-bottom 1rem
border-bottom 1px solid darken(froth-light,2%)
// Media Query
@media (max-width: 768px)
.cover-inner
@ -88,8 +78,8 @@
width 100%
h1
font-size 4.5rem
#subtitle-box
h2
font-size 2rem
.float_btns
.to_top
right 10px

View File

@ -0,0 +1,13 @@
// Categories
.category-list
list-unstyled()
margin-right -.5rem
margin-left -.5rem
> .category-list-item
display inline-block
padding .5rem 1rem
&:before
content "\efde"
font-family remixicon
margin-right .5rem

View File

@ -0,0 +1,17 @@
.footer
border-top border-width solid #bbb
padding 3rem 0
.outer
&>ul
position relative
display flex
justify-content space-between
&:first-child
border-bottom border-width solid darken(froth-light,10%)
li
display inline-block
padding .5rem 0
span
margin-right 6px

Some files were not shown because too many files have changed in this diff Show More