123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /* 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;
- });
|