[feat] gallery
This commit is contained in:
parent
43c402a7f7
commit
6b7a6a2048
|
@ -327,7 +327,7 @@ plugins:
|
||||||
# 可以处理评论区的图片(不支持 iframe 类评论系统)例如:
|
# 可以处理评论区的图片(不支持 iframe 类评论系统)例如:
|
||||||
# 使用twikoo评论可以写: .tk-content img:not([class*="emo"])
|
# 使用twikoo评论可以写: .tk-content img:not([class*="emo"])
|
||||||
# 使用waline评论可以写: #waline_container .vcontent img
|
# 使用waline评论可以写: #waline_container .vcontent img
|
||||||
selector: .swiper-slide img # 多个选择器用英文逗号隔开
|
selector: .swiper-slide img, .gallery img # 多个选择器用英文逗号隔开
|
||||||
|
|
||||||
# swiper
|
# swiper
|
||||||
swiper:
|
swiper:
|
||||||
|
|
|
@ -10,6 +10,7 @@ hexo.extend.tag.register('folding', require('./lib/folding')(hexo), true)
|
||||||
hexo.extend.tag.register('folders', require('./lib/folders')(hexo), true)
|
hexo.extend.tag.register('folders', require('./lib/folders')(hexo), true)
|
||||||
hexo.extend.tag.register('grid', require('./lib/grid')(hexo), true)
|
hexo.extend.tag.register('grid', require('./lib/grid')(hexo), true)
|
||||||
hexo.extend.tag.register('swiper', require('./lib/swiper')(hexo), true)
|
hexo.extend.tag.register('swiper', require('./lib/swiper')(hexo), true)
|
||||||
|
hexo.extend.tag.register('gallery', require('./lib/gallery')(hexo), {ends: true})
|
||||||
|
|
||||||
// data
|
// data
|
||||||
hexo.extend.tag.register('users', require('./lib/friends')(hexo))
|
hexo.extend.tag.register('users', require('./lib/friends')(hexo))
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/**
|
||||||
|
* gallery.js v1.0 | https://github.com/xaoxuu/hexo-theme-stellar/
|
||||||
|
* 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
|
||||||
|
*
|
||||||
|
* {% gallery size:small/medium/large %}
|
||||||
|
* /xxx.png
|
||||||
|
* /xxx.png
|
||||||
|
* /xxx.png
|
||||||
|
* /xxx.png
|
||||||
|
* {% endgallery %}
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function img(src, alt) {
|
||||||
|
let img = ''
|
||||||
|
img += `<img src="${src}"`
|
||||||
|
if (alt?.length > 0) {
|
||||||
|
img += ` alt="${alt}"`
|
||||||
|
}
|
||||||
|
img += `/>`
|
||||||
|
// cap
|
||||||
|
img += `<div class="image-meta">`
|
||||||
|
if (alt?.length > 0) {
|
||||||
|
img += `<span class="image-caption">${alt}</span>`
|
||||||
|
}
|
||||||
|
img += `</div>`
|
||||||
|
return img
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ctx => function(args, content) {
|
||||||
|
args = ctx.args.map(args, ['size'])
|
||||||
|
var el = ''
|
||||||
|
el += '<div class="tag-plugin gallery"'
|
||||||
|
el += ' ' + ctx.args.joinTags(args, ['size']).join(' ')
|
||||||
|
el += '>'
|
||||||
|
const rows = content.split(/<!--\s*row(.*?)\s*-->/g).filter(item => item.trim().length > 0)
|
||||||
|
for (let row of rows) {
|
||||||
|
const img_mds = row.split('\n').filter(item => item.trim().length > 0)
|
||||||
|
for (let md of img_mds) {
|
||||||
|
const matches = md.match(/\!\[(.*?)\]\((.*?)\)/i)
|
||||||
|
if (matches?.length > 2) {
|
||||||
|
let alt = matches[1]
|
||||||
|
let src = matches[2]
|
||||||
|
el += `<div class="cell">${img(src, alt)}</div>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
el += '</div>'
|
||||||
|
return el
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
.tag-plugin.gallery
|
||||||
|
border-radius: 8px
|
||||||
|
column-count: 4
|
||||||
|
column-gap: 0
|
||||||
|
margin-left: -4px
|
||||||
|
margin-right: -4px
|
||||||
|
.cell
|
||||||
|
display: block
|
||||||
|
padding: 4px
|
||||||
|
overflow hidden
|
||||||
|
z-index 0
|
||||||
|
position: relative
|
||||||
|
&:hover
|
||||||
|
.image-meta
|
||||||
|
opacity: 1
|
||||||
|
img
|
||||||
|
object-fit: cover
|
||||||
|
height: 100%
|
||||||
|
overflow: hidden
|
||||||
|
display: block
|
||||||
|
.image-meta
|
||||||
|
position: absolute
|
||||||
|
opacity: 0
|
||||||
|
z-index: 1
|
||||||
|
margin: 4px
|
||||||
|
top: 0
|
||||||
|
left: 0
|
||||||
|
right: 0
|
||||||
|
bottom: 0
|
||||||
|
pointer-events: none
|
||||||
|
background: rgba(black, 0.5)
|
||||||
|
border-radius: 8px
|
||||||
|
trans1(opacity)
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
justify-content: flex-end
|
||||||
|
.image-caption
|
||||||
|
display: block
|
||||||
|
font-size: $fs-13
|
||||||
|
color: white
|
||||||
|
line-height: 1.2
|
||||||
|
margin: 4px
|
||||||
|
&:empty
|
||||||
|
display: none
|
|
@ -3,7 +3,6 @@
|
||||||
grid-gap: 16px
|
grid-gap: 16px
|
||||||
grid-template-columns: repeat(auto-fill, "calc((100% - 1 * %s) / 2)" % 16px)
|
grid-template-columns: repeat(auto-fill, "calc((100% - 1 * %s) / 2)" % 16px)
|
||||||
>.cell
|
>.cell
|
||||||
margin: 1rem 0
|
|
||||||
p:first-child>strong:only-child
|
p:first-child>strong:only-child
|
||||||
font-size: 1rem
|
font-size: 1rem
|
||||||
>.cell>
|
>.cell>
|
||||||
|
@ -18,14 +17,6 @@
|
||||||
p:last-child
|
p:last-child
|
||||||
margin-bottom: -0.25em
|
margin-bottom: -0.25em
|
||||||
|
|
||||||
.md-text .tag-plugin.grid
|
|
||||||
margin-top: -0.5rem
|
|
||||||
margin-bottom: -0.5rem
|
|
||||||
|
|
||||||
.tag-plugin.grid
|
|
||||||
@media screen and (max-width: $device-tablet)
|
|
||||||
display: block
|
|
||||||
|
|
||||||
.tag-plugin.grid
|
.tag-plugin.grid
|
||||||
&[bg]>.cell
|
&[bg]>.cell
|
||||||
padding: 1rem
|
padding: 1rem
|
||||||
|
|
|
@ -3,3 +3,7 @@ img[fancybox='true']
|
||||||
|
|
||||||
.swiper-slide
|
.swiper-slide
|
||||||
cursor: zoom-in
|
cursor: zoom-in
|
||||||
|
|
||||||
|
.tag-plugin.gallery
|
||||||
|
img
|
||||||
|
cursor: zoom-in
|
Loading…
Reference in New Issue