2025-2-26-fixed
This commit is contained in:
84
themes/next/scripts/helpers/engine.js
Normal file
84
themes/next/scripts/helpers/engine.js
Normal file
@ -0,0 +1,84 @@
|
||||
/* global hexo */
|
||||
|
||||
'use strict';
|
||||
|
||||
const crypto = require('crypto');
|
||||
|
||||
hexo.extend.helper.register('next_inject', function(point) {
|
||||
return hexo.theme.config.injects[point]
|
||||
.map(item => this.partial(item.layout, item.locals, item.options))
|
||||
.join('');
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('next_js', function(...urls) {
|
||||
const { js } = hexo.theme.config;
|
||||
return urls.map(url => this.js(`${js}/${url}`)).join('');
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('next_vendors', function(url) {
|
||||
if (url.startsWith('//')) return url;
|
||||
const internal = hexo.theme.config.vendors._internal;
|
||||
return this.url_for(`${internal}/${url}`);
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('post_edit', function(src) {
|
||||
const theme = hexo.theme.config;
|
||||
if (!theme.post_edit.enable) return '';
|
||||
return this.next_url(theme.post_edit.url + src, '<i class="fa fa-pencil-alt"></i>', {
|
||||
class: 'post-edit-link',
|
||||
title: this.__('post.edit')
|
||||
});
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('post_nav', function(post) {
|
||||
const theme = hexo.theme.config;
|
||||
if (theme.post_navigation === false || (!post.prev && !post.next)) return '';
|
||||
const prev = theme.post_navigation === 'right' ? post.prev : post.next;
|
||||
const next = theme.post_navigation === 'right' ? post.next : post.prev;
|
||||
const left = prev ? `
|
||||
<a href="${this.url_for(prev.path)}" rel="prev" title="${prev.title}">
|
||||
<i class="fa fa-chevron-left"></i> ${prev.title}
|
||||
</a>` : '';
|
||||
const right = next ? `
|
||||
<a href="${this.url_for(next.path)}" rel="next" title="${next.title}">
|
||||
${next.title} <i class="fa fa-chevron-right"></i>
|
||||
</a>` : '';
|
||||
return `
|
||||
<div class="post-nav">
|
||||
<div class="post-nav-item">${left}</div>
|
||||
<div class="post-nav-item">${right}</div>
|
||||
</div>`;
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('gitalk_md5', function(path) {
|
||||
let str = this.url_for(path);
|
||||
str.replace('index.html', '');
|
||||
return crypto.createHash('md5').update(str).digest('hex');
|
||||
});
|
||||
|
||||
hexo.extend.helper.register('canonical', function() {
|
||||
// https://support.google.com/webmasters/answer/139066
|
||||
const { permalink } = hexo.config;
|
||||
let url = this.url.replace(/index\.html$/, '');
|
||||
if (!permalink.endsWith('.html')) {
|
||||
url = url.replace(/\.html$/, '');
|
||||
}
|
||||
return `<link rel="canonical" href="${url}">`;
|
||||
});
|
||||
|
||||
/**
|
||||
* Get page path given a certain language tag
|
||||
*/
|
||||
hexo.extend.helper.register('i18n_path', function(language) {
|
||||
const { path, lang } = this.page;
|
||||
const base = path.startsWith(lang) ? path.slice(lang.length + 1) : path;
|
||||
return this.url_for(`${this.languages.indexOf(language) === 0 ? '' : '/' + language}/${base}`);
|
||||
});
|
||||
|
||||
/**
|
||||
* Get the language name
|
||||
*/
|
||||
hexo.extend.helper.register('language_name', function(language) {
|
||||
const name = hexo.theme.i18n.__(language)('name');
|
||||
return name === 'name' ? language : name;
|
||||
});
|
||||
Reference in New Issue
Block a user