hexo-theme-stellar/layout/_partial/sidebar/index_rightbar.ejs

94 lines
2.6 KiB
Plaintext

<%
const wiki = theme.wiki.tree[page.wiki]
const topic = theme.topic.tree[page.topic]
const notebook = theme.notebooks.tree[page.notebook]
if (page.rightbar == null) {
const { site_tree } = theme
var sidebar
if (is_home()) {
sidebar = site_tree.home.rightbar
} else if (page.layout === 'notebooks') {
// 笔记本列表页
sidebar = site_tree.notebooks.rightbar
} else if (page.layout === 'notes') {
// 笔记列表页
sidebar = notebook ? notebook.rightbar : site_tree.notes.rightbar
} else if (notebook) {
// 笔记本文章内页
sidebar = page.rightbar ?? notebook.note_rightbar
} else if (is_category() || is_tag() || is_archive() || ['categories', 'tags', 'archives'].includes(page.layout)) {
sidebar = site_tree.index_blog.rightbar
} else if (page.layout === 'index_topic') {
// 专栏列表页等同于博客列表页
sidebar = site_tree.index_blog.rightbar
} else if (page.topic?.length > 0) {
// 专栏文章内页等同于普通文章内页
sidebar = site_tree.post.rightbar
} else if (page.layout === 'index_wiki') {
sidebar = site_tree.index_wiki.rightbar
} else if (page.wiki?.length > 0) {
sidebar = site_tree.wiki.rightbar
} else if (page.layout === '404') {
sidebar = site_tree.error_page.rightbar
} else if (page.layout === 'page') {
sidebar = site_tree.page.rightbar
} else if (page.layout === 'post') {
sidebar = site_tree.post.rightbar
} else if (page.layout == null) {
sidebar = site_tree.page.rightbar
} else {
sidebar = []
}
if (topic?.rightbar) {
sidebar = topic.rightbar
}
if (wiki?.rightbar) {
sidebar = wiki.rightbar
}
page.rightbar = sidebar
}
// parse array string
if (typeof page.rightbar == 'string') {
page.rightbar = page.rightbar.replace(/ /g, '').split(',');
}
function layoutWidgets() {
if (page.rightbar == null || page.rightbar.length == 0) {
return ''
}
var el = ''
if (page.rightbar) {
page.rightbar.forEach((w, i) => {
let name = ''
let widget = {}
if (typeof w == 'string') {
name = w
} else if (typeof w == 'object' && w.override) {
name = w.override
}
if (name in theme.widgets) {
Object.assign(widget, theme.widgets[name])
}
if (typeof w == 'object' && (w.override || w.layout)) {
Object.assign(widget, w)
}
if (widget && widget.layout) {
el += partial('../widgets/' + widget.layout, {item: widget})
}
});
}
if (el.trim().length > 0) {
return `<div class="widgets">${el}</div>`
} else {
return ''
}
}
%>
<%- layoutWidgets() %>