hexo/node_modules/hexo-douban/lib/generator.js

74 lines
2.0 KiB
JavaScript
Raw Normal View History

2023-09-25 15:58:56 +08:00
'use strict';
const path = require('path');
const http = require('./http')
const log = require('./util').log;
const renderFile = require('./util').renderFile;
const i18n = require('./util').i18n;
module.exports = async function (locals) {
const type = locals.douban_type
const config = this.config;
if (!config.douban || !type || !config.douban[type]) {//当没有输入信息时,不进行数据渲染。
return;
}
let root = config.root;
if (root.endsWith('/')) {
root = root.slice(0, root.length - 1);
}
let timeout = 10000;
if (config.douban.timeout) {
timeout = config.douban.timeout;
}
let item_per_page = 10
if (config.douban.item_per_page) {
item_per_page = config.douban.item_per_page
}
let meta_max_line = 4
if (config.douban.meta_max_line) {
meta_max_line = config.douban.meta_max_line
}
let customize_layout = 'page'
if (config.douban.customize_layout) {
customize_layout = config.douban.customize_layout
}
const startTime = new Date().getTime();
let data = await http.fetchData(config.douban.id, config.url, type, timeout);
const endTime = new Date().getTime();
log.info(`${data.wish.length} (wish), ${data.do.length} (do),${data.collect.length} (collect) ${type} loaded in ${endTime - startTime} ms`);
const __ = i18n.__(config.language);
return renderFile(path.join(__dirname, 'templates/index.ejs'), {
quote: config.douban[type].quote,
wish: data.wish,
collect: data.collect,
dO: data.do,
item_per_page: item_per_page,
meta_max_line: meta_max_line,
type: `${type}`,
__: __,
root: root
}).then(renderedData => {
return {
path: config.douban[type].path,
data: Object.assign({
title: config.douban[type].title,
content: renderedData,
slug: `${type}s`
}, config.douban[type].option),
layout: [customize_layout, 'post']
};
})
};