diff --git a/layout/includes/additional-js.pug b/layout/includes/additional-js.pug index 108dd03c9..b884cedc9 100644 --- a/layout/includes/additional-js.pug +++ b/layout/includes/additional-js.pug @@ -11,7 +11,7 @@ div if theme.instantpage script(src=url_for(theme.asset.instantpage), type='module') - if theme.lazyload.enable + if theme.lazyload.enable && !theme.lazyload.native script(src=url_for(theme.asset.lazyload)) if theme.snackbar.enable @@ -33,7 +33,7 @@ div != partial("includes/third-party/prismjs", {}, { cache: true }) if theme.aside.enable && theme.aside.card_newest_comments.enable - if theme.pjax.enable || (!is_post() && page.aside !== false) + if theme.pjax.enable || (globalPageType !== 'post' && page.aside !== false) != partial("includes/third-party/newest-comments/index", {}, { cache: true }) != fragment_cache('injectBottom', function(){return injectHtml(theme.inject.bottom)}) diff --git a/layout/includes/head.pug b/layout/includes/head.pug index 59f37828d..3e7757344 100644 --- a/layout/includes/head.pug +++ b/layout/includes/head.pug @@ -1,12 +1,18 @@ - var pageTitle -- is_archive() ? page.title = findArchivesTitle(page, theme.menu, date) : '' -- if (is_tag()) pageTitle = _p('page.tag') + ': ' + page.tag -- else if (is_category()) pageTitle = _p('page.category') + ': ' + page.category -- else if (is_current('/404.html', [strict])) pageTitle = _p('error404') -- else pageTitle = page.title || config.title || '' +- globalPageType === 'archive' ? page.title = findArchivesTitle(page, theme.menu, date) : '' +case globalPageType + when 'tag' + - pageTitle = _p('page.tag') + ': ' + page.tag + when 'category' + - pageTitle = _p('page.category') + ': ' + page.category + when '404' + - pageTitle = _p('error404') + default + - pageTitle = page.title || config.title || '' + - var isSubtitle = config.subtitle ? ' - ' + config.subtitle : '' -- var tabTitle = is_home() || !pageTitle ? config.title + isSubtitle : pageTitle + ' | ' + config.title +- var tabTitle = globalPageType === 'home' || !pageTitle ? config.title + isSubtitle : pageTitle + ' | ' + config.title - var pageAuthor = config.email ? config.author + ',' + config.email : config.author - var pageCopyright = config.copyright || config.author - var themeColorLight = theme.theme_color && theme.theme_color.enable && theme.theme_color.meta_theme_color_light || '#ffffff' diff --git a/layout/includes/head/Open_Graph.pug b/layout/includes/head/Open_Graph.pug index abde7e69d..b3628d086 100644 --- a/layout/includes/head/Open_Graph.pug +++ b/layout/includes/head/Open_Graph.pug @@ -2,7 +2,7 @@ if theme.Open_Graph_meta.enable - const coverVal = page.cover_type === 'img' ? page.cover : theme.avatar.img let ogOption = Object.assign({ - type: is_post() ? 'article' : 'website', + type: globalPageType === 'post' ? 'article' : 'website', image: coverVal ? full_url_for(coverVal) : '', fb_admins: theme.facebook_comments.user_id || '', fb_app_id: theme.facebook_comments.app_id || '', diff --git a/layout/includes/head/analytics.pug b/layout/includes/head/analytics.pug index 5c389ba10..d75145d48 100644 --- a/layout/includes/head/analytics.pug +++ b/layout/includes/head/analytics.pug @@ -4,7 +4,7 @@ if theme.baidu_analytics (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?!{theme.baidu_analytics}"; - var s = document.getElementsByTagName("script")[0]; + var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); btf.addGlobalFn('pjaxComplete', () => { diff --git a/layout/includes/head/config.pug b/layout/includes/head/config.pug index b23742e16..efa36547c 100644 --- a/layout/includes/head/config.pug +++ b/layout/includes/head/config.pug @@ -116,7 +116,7 @@ script. buttonText: '!{_p("load_more")}' }, isPhotoFigcaption: !{theme.photofigcaption}, - islazyload: !{theme.lazyload.enable}, + islazyloadPlugin: !{theme.lazyload.enable && !theme.lazyload.native}, isAnchor: !{theme.anchor.auto_update || false}, percent: { toc: !{theme.toc.scroll_percent}, diff --git a/layout/includes/head/config_site.pug b/layout/includes/head/config_site.pug index ccd45dcf8..5c1c67d70 100644 --- a/layout/includes/head/config_site.pug +++ b/layout/includes/head/config_site.pug @@ -9,8 +9,8 @@ var showToc = false if (theme.aside.enable && page.aside !== false) { let tocEnable = false - if (is_post() && theme.toc.post) tocEnable = true - else if (is_page() && theme.toc.page) tocEnable = true + if (globalPageType === 'post' && theme.toc.post) tocEnable = true + else if (globalPageType === 'page' && theme.toc.page) tocEnable = true const pageToc = typeof page.toc === 'boolean' ? page.toc : tocEnable showToc = pageToc && (toc(page.content) !== '' || page.encrypt === true) } @@ -19,9 +19,7 @@ script#config-diff. var GLOBAL_CONFIG_SITE = { title: '!{titleVal}', - isPost: !{is_post()}, - isHome: !{is_home()}, isHighlightShrink: !{isHighlightShrink}, isToc: !{showToc}, - isShuoshuo: !{page.type == 'shuoshuo'} + pageType: '!{page.type == 'shuoshuo' ? 'shuoshuo' : globalPageType}' } diff --git a/layout/includes/head/preconnect.pug b/layout/includes/head/preconnect.pug index f8af3809b..cefe9fcae 100644 --- a/layout/includes/head/preconnect.pug +++ b/layout/includes/head/preconnect.pug @@ -10,7 +10,7 @@ if internal_provider === third_party_provider && internal_provider !== 'local' link(rel="preconnect" href=providers[internal_provider]) -else +else if internal_provider !== 'local' link(rel="preconnect" href=providers[internal_provider]) if third_party_provider !== 'local' diff --git a/layout/includes/header/index.pug b/layout/includes/header/index.pug index caa79987f..481db70cc 100644 --- a/layout/includes/header/index.pug +++ b/layout/includes/header/index.pug @@ -6,33 +6,32 @@ var bg_img = '' if !theme.disable_top_img && page.top_img !== false - if is_post() - - top_img = page.top_img || page.cover || theme.default_top_img - else if is_page() - - top_img = page.top_img || theme.default_top_img - else if is_tag() - - top_img = theme.tag_per_img && theme.tag_per_img[page.tag] - - top_img = top_img || returnTopImg(theme.tag_img) - else if is_category() - - top_img = theme.category_per_img && theme.category_per_img[page.category] - - top_img = top_img || returnTopImg(theme.category_img) - else if is_home() - - top_img = returnTopImg(theme.index_img) - else if is_archive() - - top_img = returnTopImg(theme.archive_img) - else - - top_img = page.top_img || theme.default_top_img + case globalPageType + when 'post' + - top_img = page.top_img || page.cover || theme.default_top_img + when 'page' + - top_img = page.top_img || theme.default_top_img + when 'tag' + - top_img = theme.tag_per_img && theme.tag_per_img[page.tag] || returnTopImg(theme.tag_img) + when 'category' + - top_img = theme.category_per_img && theme.category_per_img[page.category] || returnTopImg(theme.category_img) + when 'home' + - top_img = returnTopImg(theme.index_img) + when 'archive' + - top_img = returnTopImg(theme.archive_img) + default + - top_img = page.top_img || theme.default_top_img if top_img !== false - bg_img = getBgPath(top_img) - - headerClassName = is_home() ? 'full_page' : is_post() ? 'post-bg' : 'not-home-page' + - headerClassName = globalPageType === 'home' ? 'full_page' : globalPageType === 'post' ? 'post-bg' : 'not-home-page' header#page-header(class=`${headerClassName + isFixedClass}` style=bg_img) include ./nav.pug if top_img !== false - if is_post() + if globalPageType === 'post' include ./post-info.pug - else if is_home() + else if globalPageType === 'home' #site-info h1#site-title=config.title if theme.subtitle.enable @@ -48,6 +47,6 @@ header#page-header(class=`${headerClassName + isFixedClass}` style=bg_img) #page-site-info h1#site-title=page.title || page.tag || page.category else - //- improvement seo - if !is_post() + //- improve seo + if globalPageType !== 'post' h1.title-seo=page.title || page.tag || page.category || config.title \ No newline at end of file diff --git a/layout/includes/header/nav.pug b/layout/includes/header/nav.pug index 97d5b1ecd..814a4761b 100644 --- a/layout/includes/header/nav.pug +++ b/layout/includes/header/nav.pug @@ -5,7 +5,7 @@ nav#nav img.site-icon(src=url_for(theme.nav.logo) alt='Logo') if theme.nav.display_title span.site-name=config.title - if is_post() + if globalPageType === 'post' a.nav-page-title(href=url_for('/')) span.site-name=(page.title || config.title) #menus diff --git a/layout/includes/layout.pug b/layout/includes/layout.pug index 81e7e257e..cf3e973bf 100644 --- a/layout/includes/layout.pug +++ b/layout/includes/layout.pug @@ -1,7 +1,8 @@ +- var globalPageType = getPageType(page, is_home) - var htmlClassHideAside = theme.aside.enable && theme.aside.hide ? 'hide-aside' : '' -- page.aside = is_archive() ? theme.aside.display.archive: is_category() ? theme.aside.display.category : is_tag() ? theme.aside.display.tag : page.aside +- page.aside = globalPageType === 'archive' ? theme.aside.display.archive: globalPageType === 'category' ? theme.aside.display.category : globalPageType === 'tag' ? theme.aside.display.tag : page.aside - var hideAside = !theme.aside.enable || page.aside === false ? 'hide-aside' : '' -- var pageType = is_post() ? 'post' : 'page' +- var pageType = globalPageType === 'post' ? 'post' : 'page' - pageType = page.type ? pageType + ' type-' + page.type : pageType doctype html @@ -13,7 +14,7 @@ html(lang=config.language data-theme=theme.display_mode class=htmlClassHideAside if theme.background #web_bg(style=getBgPath(theme.background)) - + !=partial('includes/sidebar', {}, {cache: true}) #body-wrap(class=pageType) diff --git a/layout/includes/mixins/indexPostUI.pug b/layout/includes/mixins/indexPostUI.pug index 4c5370479..4f2c3ee50 100644 --- a/layout/includes/mixins/indexPostUI.pug +++ b/layout/includes/mixins/indexPostUI.pug @@ -10,7 +10,7 @@ mixin indexPostUI() - const leftOrRight = indexLayout === 3 ? (index % 2 === 0 ? 'left' : 'right') : (indexLayout === 2 ? 'right' : '') - const post_cover = article.cover - const no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : '' - + if post_cover && theme.cover.index_enable .post_cover(class=leftOrRight) a(href=url_for(link) title=title) @@ -20,7 +20,7 @@ mixin indexPostUI() div.post-bg(style=`background: ${post_cover}`) .recent-post-info(class=no_cover) a.article-title(href=url_for(link) title=title) - if is_home() && (article.top || article.sticky > 0) + if globalPageType === 'home' && (article.top || article.sticky > 0) i.fas.fa-thumbtack.sticky = title .article-meta-wrap @@ -58,7 +58,7 @@ mixin indexPostUI() a(href=url_for(item.path)).article-meta__tags #[=item.name] if index < article.tags.data.length - 1 span.article-meta-link #[='•'] - + mixin countBlockInIndex - needLoadCountJs = true span.article-meta @@ -67,7 +67,7 @@ mixin indexPostUI() if block block span.article-meta-label= ' ' + _p('card_post_count') - + if theme.comments.card_post_count && theme.comments.use case theme.comments.use[0] when 'Disqus' diff --git a/layout/includes/page/flink.pug b/layout/includes/page/flink.pug index 30cdad58d..f94fffc47 100644 --- a/layout/includes/page/flink.pug +++ b/layout/includes/page/flink.pug @@ -30,7 +30,7 @@
-.*?<\/pre>/gi, '[!{_p("aside.card_newest_comments.code")}]') // replace code
- content = content.replace(/.*?<\/code>/gi, '[!{_p("aside.card_newest_comments.code")}]') // replace code
+ content = content.replace(/.*?<\/code>/gi, '[!{_p("aside.card_newest_comments.code")}]') // replace code
content = content.replace(/<[^>]+>/g, "") // remove html tag
if (content.length > 150) {
@@ -23,8 +23,9 @@ script.
result += ''
if (!{theme.aside.card_newest_comments.avatar} && array[i].avatar) {
- const imgAttr = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}'
- result += ``
+ const imgAttr = '!{theme.lazyload.enable && !theme.lazyload.native ? "data-lazy-src" : "src"}'
+ const lazyloadNative = '!{theme.lazyload.enable && theme.lazyload.native ? "loading=\"lazy\"" : ""}'
+ result += ``
}
result += `
diff --git a/layout/includes/third-party/search/algolia.pug b/layout/includes/third-party/search/algolia.pug
index b1f3c3d47..4ef600179 100644
--- a/layout/includes/third-party/search/algolia.pug
+++ b/layout/includes/third-party/search/algolia.pug
@@ -14,7 +14,7 @@
#algolia-info
.algolia-stats
.algolia-poweredBy
-
+
#search-mask
script(src=url_for(theme.asset.algolia_search))
diff --git a/layout/includes/third-party/umami_analytics.pug b/layout/includes/third-party/umami_analytics.pug
index 518afd53f..3534c20c3 100644
--- a/layout/includes/third-party/umami_analytics.pug
+++ b/layout/includes/third-party/umami_analytics.pug
@@ -35,7 +35,7 @@ script.
const insertData = async () => {
try {
- if (GLOBAL_CONFIG_SITE.isPost && config.page_pv) {
+ if (GLOBAL_CONFIG_SITE.pageType === 'post' && config.page_pv) {
const pagePV = document.getElementById('umamiPV')
if (pagePV) {
const data = await getData(true)
diff --git a/layout/includes/widget/card_author.pug b/layout/includes/widget/card_author.pug
index 095f66fa5..9f7e68756 100644
--- a/layout/includes/widget/card_author.pug
+++ b/layout/includes/widget/card_author.pug
@@ -13,14 +13,14 @@ if theme.aside.card_author.enable
.headline= _p('aside.tags')
.length-num= site.tags.length
a(href=url_for(config.category_dir) + '/')
- .headline= _p('aside.categories')
+ .headline= _p('aside.categories')
.length-num= site.categories.length
if theme.aside.card_author.button.enable
a#card-info-btn(href=theme.aside.card_author.button.link)
i(class=theme.aside.card_author.button.icon)
span=theme.aside.card_author.button.text
-
+
if(theme.social)
.card-info-social-icons
!=partial('includes/header/social', {}, {cache: true})
diff --git a/layout/includes/widget/card_post_toc.pug b/layout/includes/widget/card_post_toc.pug
index b811210ed..cd30d50f4 100644
--- a/layout/includes/widget/card_post_toc.pug
+++ b/layout/includes/widget/card_post_toc.pug
@@ -10,6 +10,5 @@
if (page.encrypt == true)
.toc-content.toc-div-class(class=tocExpandClass style="display:none")!=toc(page.origin, {list_number: tocNumber})
- else
+ else
.toc-content(class=tocExpandClass)!=toc(page.content, {list_number: tocNumber})
-
\ No newline at end of file
diff --git a/layout/includes/widget/index.pug b/layout/includes/widget/index.pug
index 388ea1cc6..b29887895 100644
--- a/layout/includes/widget/index.pug
+++ b/layout/includes/widget/index.pug
@@ -1,6 +1,6 @@
#aside-content.aside-content
//- post
- if is_post()
+ if globalPageType === 'post'
- const tocStyle = page.toc_style_simple
- const tocStyleVal = tocStyle === true || tocStyle === false ? tocStyle : theme.toc.style_simple
if showToc && tocStyleVal
diff --git a/layout/post.pug b/layout/post.pug
index 08bdea3a7..947b3793b 100644
--- a/layout/post.pug
+++ b/layout/post.pug
@@ -17,7 +17,7 @@ block content
each item, index in page.tags.data
a(href=url_for(item.path)).post-meta__tags #[=item.name]
include includes/third-party/share/index.pug
-
+
if theme.reward.enable && theme.reward.QR_code
!=partial('includes/post/reward', {}, {cache: true})
@@ -33,4 +33,3 @@ block content
if page.comments !== false && theme.comments.use
- var commentsJsLoad = true
!=partial('includes/third-party/comments/index', {}, {cache: true})
-
\ No newline at end of file
diff --git a/package.json b/package.json
index 12450b2d6..5eff91acb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hexo-theme-butterfly",
- "version": "5.3.0-b1",
+ "version": "5.3.0-b2",
"description": "A Simple and Card UI Design theme for Hexo",
"main": "package.json",
"scripts": {
diff --git a/scripts/events/merge_config.js b/scripts/events/merge_config.js
index a1ba9e995..c14c57cd5 100644
--- a/scripts/events/merge_config.js
+++ b/scripts/events/merge_config.js
@@ -547,6 +547,7 @@ hexo.extend.filter.register('before_generate', () => {
instantpage: false,
lazyload: {
enable: false,
+ native: false,
field: 'site',
placeholder: null,
blur: false
diff --git a/scripts/filters/post_lazyload.js b/scripts/filters/post_lazyload.js
index cecc6ce27..7ad6339d2 100644
--- a/scripts/filters/post_lazyload.js
+++ b/scripts/filters/post_lazyload.js
@@ -9,6 +9,10 @@
const urlFor = require('hexo-util').url_for.bind(hexo)
const lazyload = htmlContent => {
+ if (hexo.theme.config.lazyload.native) {
+ return htmlContent.replace(/()/ig, '$1 loading=\'lazy\'$2')
+ }
+
const bg = hexo.theme.config.lazyload.placeholder ? urlFor(hexo.theme.config.lazyload.placeholder) : 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
return htmlContent.replace(/( {
return finalResult
})
+
+hexo.extend.helper.register('getPageType', (page, isHome) => {
+ const { layout, tag, category, type, archive } = page
+ if (layout) return layout
+ if (tag) return 'tag'
+ if (category) return 'category'
+ if (archive) return 'archive'
+ if (type) {
+ if (type === 'tags' || type === 'categories') return type
+ else return 'page'
+ }
+ if (isHome) return 'home'
+ return 'post'
+})
diff --git a/scripts/tag/hide.js b/scripts/tag/hide.js
index a788172fb..3a58bec25 100644
--- a/scripts/tag/hide.js
+++ b/scripts/tag/hide.js
@@ -16,50 +16,37 @@
'use strict'
-const parseArgs = args => {
- return args.join(' ').split(',')
-}
+const parseArgs = args => args.join(' ').split(',')
const generateStyle = (bg, color) => {
let style = 'style="'
- if (bg) {
- style += `background-color: ${bg};`
- }
- if (color) {
- style += `color: ${color}`
- }
+ if (bg) style += `background-color: ${bg};`
+ if (color) style += `color: ${color}`
style += '"'
return style
}
const hideInline = args => {
const [content, display = 'Click', bg = false, color = false] = parseArgs(args)
- const group = generateStyle(bg, color)
-
- return `${display}
${hexo.render.renderSync({ text: content, engine: 'markdown' })}`
+ const style = generateStyle(bg, color)
+ const border = bg ? `style="border: 1px solid ${bg}"` : ''
+ const renderedContent = hexo.render.renderSync({ text: content, engine: 'markdown' })
+ return `${display}
${renderedContent}`
}
hexo.extend.tag.register('hideInline', hideInline)
hexo.extend.tag.register('hideBlock', hideBlock, { ends: true })
-hexo.extend.tag.register('hideToggle', hideToggle, { ends: true })
+hexo.extend.tag.register('hideToggle', hideToggle, { ends: true })
\ No newline at end of file
diff --git a/source/js/main.js b/source/js/main.js
index 42cfd9766..db49960a7 100644
--- a/source/js/main.js
+++ b/source/js/main.js
@@ -864,7 +864,7 @@ document.addEventListener('DOMContentLoaded', () => {
menuMask && menuMask.addEventListener('click', () => { sidebarFn.close() })
clickFnOfSubMenu()
- GLOBAL_CONFIG.islazyload && lazyloadImg()
+ GLOBAL_CONFIG.islazyloadPlugin && lazyloadImg()
GLOBAL_CONFIG.copyright !== undefined && addCopyright()
if (GLOBAL_CONFIG.autoDarkmode) {
@@ -890,7 +890,7 @@ document.addEventListener('DOMContentLoaded', () => {
initAdjust()
justifiedIndexPostUI()
- if (GLOBAL_CONFIG_SITE.isPost) {
+ if (GLOBAL_CONFIG_SITE.pageType === 'post') {
addPostOutdateNotice()
GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll('#post-meta time'))
} else {
@@ -900,11 +900,11 @@ document.addEventListener('DOMContentLoaded', () => {
toggleCardCategory()
}
- GLOBAL_CONFIG_SITE.isHome && scrollDownInIndex()
+ GLOBAL_CONFIG_SITE.pageType === 'home' && scrollDownInIndex()
scrollFn()
forPostFn()
- !GLOBAL_CONFIG_SITE.isShuoshuo && btf.switchComments(document)
+ GLOBAL_CONFIG_SITE.pageType !== 'shuoshuo' && btf.switchComments(document)
openMobileMenu()
}
`
+ const style = generateStyle(bg, color)
+ return ` `
}
const hideBlock = (args, content) => {
const [display = 'Click', bg = false, color = false] = parseArgs(args)
- const group = generateStyle(bg, color)
-
- return ` `
+ const style = generateStyle(bg, color)
+ const renderedContent = hexo.render.renderSync({ text: content, engine: 'markdown' })
+ return ` `
}
const hideToggle = (args, content) => {
const [display, bg = false, color = false] = parseArgs(args)
- const group = generateStyle(bg, color)
- let border = ''
-
- if (bg) {
- border = `style="border: 1px solid ${bg}"`
- }
-
- return `