24 Commits
v1.3 ... v1.7

Author SHA1 Message Date
shenyu
da20d7b3c9 feat: Subtitle typed animation 2020-01-30 14:14:35 +08:00
shenyu
7fcdbf8722 fix: tocbot 2020-01-29 20:36:48 +08:00
shenyu
71e1c2149d fix: style 2020-01-25 12:42:48 +08:00
shenyu
e528545051 release: v1.6 2020-01-24 13:06:25 +08:00
shenyu
3908fbe0e5 feat: valine comment verify 2020-01-24 13:02:50 +08:00
shenyu
db78e3261e fix: sidebar width 2020-01-23 14:19:50 +08:00
shenyu
8f267514b3 fix: sidebar 2020-01-23 14:13:24 +08:00
shenyu
0fb41a4ce2 fix: README.md 2020-01-23 11:30:35 +08:00
shenyu
dd35431d98 docs: images in article support click to fullscreen 2020-01-20 21:02:13 +08:00
沈宇
3d85b0926a feat: Support image display fullscreen 2020-01-20 15:09:23 +08:00
shenyu
661902f0f4 Merge branch 'master' of https://github.com/Shen-Yu/hexo-theme-ayer 2020-01-18 22:14:24 +08:00
shenyu
ef3c7271ef fix: style 2020-01-18 22:13:43 +08:00
沈宇
ad5e15c0e0 docs: fix license 2020-01-15 10:25:12 +08:00
沈宇
459860c16a docs: v1.5 2020-01-15 10:11:33 +08:00
沈宇
8c7a957f6e Create LICENSE 2020-01-15 08:35:30 +08:00
shenyu
7d408946e9 fix: docs 2020-01-15 08:25:50 +08:00
shenyu
df2f61aad0 fix: style 2020-01-15 07:57:43 +08:00
shenyu
bffec8c8d9 fix: style 2020-01-13 22:02:19 +08:00
shenyu
380d4c6501 Merge branch 'master' of https://github.com/Shen-Yu/hexo-theme-ayer 2020-01-13 21:36:53 +08:00
shenyu
8f93d6494e fix: sponsor.jpg 2020-01-13 21:36:32 +08:00
沈宇
f610f83e09 Create FUNDING.yml 2020-01-13 21:30:21 +08:00
shenyu
9dcd4aca7c feat: sponsor 2020-01-13 21:25:44 +08:00
shenyu
77ecc930bd style: Categories,Tags 2020-01-13 20:58:07 +08:00
shenyu
54216601f2 release: v1.3 2020-01-09 21:32:48 +08:00
21 changed files with 326 additions and 78 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: https://pic.downk.cc/item/5e1c70bc2fb38b8c3c5b0a2f.png

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 沈宇
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,6 +1,6 @@
<p align="center"><a href="https://shen-yu.gitee.io" target="_blank" rel="noopener noreferrer"><img width="100" src="logo.png" alt="ayer logo"></a></p>
<h3 align="center">一个干净且优雅的 Hexo 主题</h3>
<h3 align="center">一个安静且优雅的 Hexo 主题</h3>
<p align="center">
<a href="https://travis-ci.org/Shen-Yu/hexo-theme-ayer?branch=master" target="_blank" rel="noopener noreferrer">
@@ -14,7 +14,7 @@
</a>
<br>
<a href="https://github.com/Shen-Yu/hexo-theme-ayer/releases" target="_blank" rel="noopener noreferrer">
<img alt="GitHub release" src="https://img.shields.io/badge/release-v1.2-blue.svg">
<img alt="GitHub release" src="https://img.shields.io/badge/release-v1.7-blue.svg">
</a>
<img alt="language" src="https://img.shields.io/badge/language-ejs--stylus-orange.svg">
<a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener noreferrer">
@@ -33,6 +33,8 @@
### [中文说明](https://shen-yu.gitee.io/2019/ayer/)
### [国内镜像](https://gitee.com/shen-yu/hexo-theme-ayer)
![Screenshot](screenshots/hexo-theme-ayer.png)
### Install
@@ -58,17 +60,30 @@ git pull
### Configuration
let me know if you cant find anything.
let me know if you have any questions.
``` yml
# Menu-Sidebar
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
startDelay: 0
typeSpeed: 200
loop: true
backSpeed: 100
showCursor: true
# Favicon and sidebar logo
favicon: /favicon.ico
logo: /images/ayer-side.svg
@@ -100,6 +115,9 @@ nav_text:
# 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
@@ -133,6 +151,7 @@ leancloud:
# Valine Setting
valine:
enable: true
verify: false # comment verify
avatar: mp # (https://valine.js.org/avatar.html)
placeholder: Add some comments to my article~ # placeholder
@@ -203,7 +222,7 @@ pageFooter: true
Then add the plugin configuration in hexo's configuration file `_config.yml` (note: not the theme's configuration file):
```yml
feed:
feed:m
type: atom
path: atom.xml
limit: 20
@@ -220,20 +239,22 @@ pageFooter: true
$ npm uninstall hexo-generator-index --save
$ npm install hexo-generator-index-pin-top --save
```
### Post poster
### Categories
``` bash
hexo new page categories
```
Then paste following codes to file: _posts/categories/index.md
``` md
---
title: Post name
photos: [
["img_url"],
["img_url"]
]
title: categories
type: categories
layout: "categories"
---
```
### Tags
Same as categories.
### 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.
@@ -268,6 +289,5 @@ Use Tocbot to parse the title tags (h1~h6) in the content and insert the directo
---
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>.
<br/>
<a src="https://github.com/Shen-Yu/hexo-theme-ayer">Ayer</a> by <a href="https://github.com/Shen-Yu">Eric-Shen</a> is licensed under <a rel="license" href="https://www.mit-license.org/">MIT</a>.

View File

@@ -1,12 +1,24 @@
# 侧边栏菜单
menu:
主页: /
目录: /archives
归档: /archives
分类: /categories
标签: /tags
旅行: /tags/旅行/
摄影: http://shenyu-vip.lofter.com
关于我: /2019/about
# 站点次标题和打字动效
# https://github.com/mattboldt/typed.js
subtitle:
enable: true # 是否开启动效
text: 面朝大海,春暖花开 # 显示的文字
startDelay: 0 # 延迟时间
typeSpeed: 200 # 打字速度
loop: true # 是否循环
backSpeed: 100 # 回退速度
showCursor: true # 是否显示光标
# 网站图标和侧边栏logo
favicon: /favicon.ico
logo: /images/ayer-side.svg
@@ -36,6 +48,9 @@ nav_text:
# 文章页是否显示目录
toc: true
# 文章中的图片是否支持点击放大
image_viewer: true
# https://github.com/willin/hexo-wordcount
# 是否开启字数统计(关闭请设置enable为false)
# 也可以单独在md文件里Front-matter设置`no_word_count: true`属性,来自定义关闭字数统计
@@ -71,6 +86,7 @@ leancloud:
# Valine配置
valine:
enable: true # 是否启用
verify: false # 是否启用防垃圾验证
avatar: mp # 头像样式(https://valine.js.org/avatar.html)
placeholder: 给我的文章加点评论吧~ # placeholder

View File

@@ -3,28 +3,45 @@
<%- js('/js/lazyload.min') %>
<%- js('/js/busuanzi-2.3.pure.min') %>
<% if (theme.fancybox){ %>
<%- js('fancybox/jquery.fancybox.min') %>
<%- js('fancybox/jquery.fancybox.min') %>
<% } %>
<% if (theme.subtitle.enable){ %>
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.11/lib/typed.min.js"></script>
<script>
var typed = new Typed("#subtitle", {
strings: ['<%= theme.subtitle.text %>'],
startDelay: <%= theme.subtitle.startDelay %>,
typeSpeed: <%= theme.subtitle.typeSpeed %>,
loop: <%= theme.subtitle.loop %>,
backSpeed: <%= theme.subtitle.backSpeed %>,
showCursor: <%= theme.subtitle.showCursor %>
});
</script>
<% } %>
<% 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',
onClick: (e) => {
document.getElementById(e.target.innerText).scrollIntoView()
return false;
}
});
</script>
<%- 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,
scrollContainer:'main',
positionFixedSelector: '.tocbot',
positionFixedClass: 'is-position-fixed',
fixedSidebarOffset: 'auto',
onClick: (e) => {
$('.toc-link').removeClass('is-active-link');
$(`a[href=${e.target.hash}]`).addClass('is-active-link');
$(e.target.hash).scrollIntoView();
return false;
}
});
</script>
<% } %>
<script>
@@ -38,10 +55,12 @@
<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') %>
<% if (theme.image_viewer){ %>
<%- partial('viewer') %>
<% } %>
<script type="text/javascript" src="https://js.users.51.la/20544303.js"></script>
<% if (theme.mathjax){ %>
<%- partial('mathjax') %>
<% } %>
<script type="text/javascript" src="https://js.users.51.la/20544303.js"></script>

View File

@@ -12,7 +12,13 @@
</div>
<div class="cover-inner text-center text-white">
<h1><a href="<%- url_for() %>"><%= config.title %></a></h1>
<h2><%= config.subtitle %></h2>
<div id="subtitle-box">
<% if (theme.subtitle.enable) { %>
<span id="subtitle"></span>
<% }else{ %>
<span id="subtitle"><%= theme.subtitle.text %></span>
<% } %>
</div>
<div>
<% if (theme.cover.logo) { %>
<img

View File

@@ -10,7 +10,7 @@
new Valine({
el: '#vcomments',
notify: false,
verify: false,
verify: '<%- theme.leancloud.verify %>',
app_id: '<%- theme.leancloud.app_id %>',
app_key: '<%- theme.leancloud.app_key %>',
path: window.location.pathname,

106
layout/_partial/viewer.ejs Normal file
View File

@@ -0,0 +1,106 @@
<!-- 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.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.css">
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/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,6 +1,17 @@
<section class="outer">
<% if (site.categories.length){ %>
<h1 class="page-type-title"><%= __('categories') %></h1>
<%- list_categories({show_count: theme.show_count}) %>
<!-- <%- list_categories({show_count: theme.show_count}) %> -->
<ul class="category-list">
<% site.categories.sort('name').each(function(item){ %>
<% if(item.posts.length){ %>
<a class="category-list-link" href="<%- config.root %><%- item.path %>" title="<%= item.name %>">
<li class="category-list-item">
<%= item.name %><i><%= item.posts.length %></i>
</li>
</a>
<% } %>
<% }); %>
</ul>
<% } %>
</section>

View File

@@ -9,11 +9,7 @@
<%- partial('_partial/totop') %>
</div>
</main>
<% if (theme.toc && is_post()){ %>
<aside class="sidebar">
<% } else { %>
<aside class="sidebar">
<% } %>
<%- partial('_partial/sidebar') %>
</aside>
<%- partial('_partial/modal') %>

View File

@@ -9,7 +9,7 @@ $block
$base-style
h1, h2, h3, h4, h5, h6
margin 1.5rem 0
margin 2.5rem 0 1.5rem
hr
height border-width
background-color border-color

View File

@@ -46,7 +46,7 @@
padding-left 3rem
.archive-article-title
text-decoration: none
font-size 1.5rem
font-size 1.8rem
.archive-article-footer
margin-top: 1.5rem

View File

@@ -32,7 +32,7 @@
@extend $block-caption
&::before
content '\eaf2'
margin-right .5rem
margin-right .15rem
font-family remixicon
opacity .5
@@ -42,7 +42,7 @@
&:before
content "\efde"
font-family remixicon
margin-right .5rem
margin-right .15rem
opacity 0.6
.article-category-link
@extend $block-caption

View File

@@ -25,10 +25,12 @@
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
h2
#subtitle-box
font-family: Titillium Web,PingFang SC,Hiragino Sans GB,"Microsoft JhengHei","Microsoft YaHei",Helvetica Neue,Helvetica,Arial,sans-serif
font-size 3rem
margin .5rem 0 1.5rem
a, &
@@ -84,7 +86,7 @@
width 100%
h1
font-size 4.5rem
h2
#subtitle-box
font-size 2rem
.to_top

View File

@@ -4,10 +4,41 @@
list-unstyled()
margin-right -.5rem
margin-left -.5rem
> .category-list-item
display inline-block
padding .5rem 1rem
.category-list-item
margin: 10px 10px;
padding: 0 14px;
display: inline-block;
text-align: center;
height: 38px;
min-width: 80px;
line-height: 38px;
font-size: 1.5rem;
font-weight: 500;
border-radius: 5px;
word-wrap: break-word;
cursor: pointer;
box-shadow: 0px 3px 5px rgba(0,0,0,0.08);
border: 1px solid #e7e7eb
&:before
content "\efde"
font-family remixicon
margin-right .5rem
margin-right .5rem
display inline-block
vertical-align middle
i
font-style normal
margin-left 10px
color: darken(water,20%)
a
display inline-block
vertical-align middle
text-decoration: none
color: body-color
&:hover
.category-list-item
border: 1px solid darken(water,20%)
box-shadow: 0 3px 5px water
color: darken(water,30%);
&:before
color: darken(water,30%);

View File

@@ -11,4 +11,22 @@
&:before
content "\eec3"
font-family remixicon
margin-right .5rem
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,6 +1,6 @@
.tocbot
position fixed
position absolute
top 14rem
left calc((100vw - 70rem) / 2 + 70rem)
font-size 80%
@@ -47,3 +47,9 @@ a.toc-link
margin-top -1px
position absolute
width 2px
.is-active-link::before
background-color sea-blue
.is-active-link
font-weight 700

View File

@@ -51,7 +51,7 @@ border-width = 0.1rem
border-color = froth
// Layout
aside-width = 7rem
aside-width = 8rem
wrap-width = 70rem
years-width = 6rem
logo-size = 4.2rem

BIN
source/images/ayer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
source/images/sponsor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@@ -176,30 +176,14 @@
// Mobile nav
var $content = $('.content'),
$sidebar = $('.sidebar'),
isMobileNavAnim = false,
mobileNavAnimDuration = 200;
var startMobileNavAnim = function () {
isMobileNavAnim = true;
};
var stopMobileNavAnim = function () {
setTimeout(function () {
isMobileNavAnim = false;
}, mobileNavAnimDuration);
};
$sidebar = $('.sidebar');
$('.navbar-toggle').on('click', function () {
if (isMobileNavAnim) return;
startMobileNavAnim();
$content.toggleClass('on');
$sidebar.toggleClass('on');
stopMobileNavAnim();
});
$($content).on('click', function () {
if (isMobileNavAnim || !$content.hasClass('on')) return;
$content.removeClass('on');
$sidebar.removeClass('on');
});