const { Component } = require('inferno'); const MetaTags = require('../misc/meta'); const OpenGraph = require('../misc/open_graph'); const StructuredData = require('../misc/structured_data'); const Plugins = require('./plugins'); function getPageTitle(page, siteTitle, helper) { let title = page.title; if (helper.is_archive()) { title = helper._p('common.archive', Infinity); if (helper.is_month()) { title += ': ' + page.year + '/' + page.month; } else if (helper.is_year()) { title += ': ' + page.year; } } else if (helper.is_category()) { title = helper._p('common.category', 1) + ': ' + page.category; } else if (helper.is_tag()) { title = helper._p('common.tag', 1) + ': ' + page.tag; } else if (helper.is_categories()) { title = helper._p('common.category', Infinity); } else if (helper.is_tags()) { title = helper._p('common.tag', Infinity); } return [title, siteTitle].filter(str => typeof str !== 'undefined' && str.trim() !== '').join(' - '); } module.exports = class extends Component { render() { const { env, site, config, helper, page } = this.props; const { url_for, cdn, iconcdn, fontcdn, is_post } = helper; const { url, meta_generator = true, head = {}, article, highlight } = config; const { meta = [], open_graph = {}, structured_data = {}, canonical_url, rss, favicon } = head; const language = page.lang || page.language || config.language; let hlTheme, images; if (highlight && highlight.enable === false) { hlTheme = null; } else if (article && article.highlight && article.highlight.theme) { hlTheme = article.highlight.theme; } else { hlTheme = 'atom-one-light'; } if (typeof page.og_image === 'string') { images = [page.og_image]; } else if (helper.has_thumbnail(page)) { images = [helper.get_thumbnail(page)]; } else if (article && typeof article.og_image === 'string') { images = [article.og_image]; } else if (page.content && page.content.includes(']*src=['"]([^'"]+)([^>]*>)/gi; while ((img = imgPattern.exec(page.content)) !== null) { images.push(img[1]); } } else { images = [url_for('/img/og_image.png')]; } let adsenseClientId = null; if (Array.isArray(config.widgets)) { const widget = config.widgets.find(widget => widget.type === 'adsense'); if (widget) { adsenseClientId = widget.client_id; } } let openGraphImages = images; if ((Array.isArray(open_graph.image) && open_graph.image.length > 0) || typeof open_graph.image === 'string') { openGraphImages = open_graph.image; } else if ((Array.isArray(page.photos) && page.photos.length > 0) || typeof page.photos === 'string') { openGraphImages = page.photos; } let structuredImages = images; if ((Array.isArray(structured_data.image) && structured_data.image.length > 0) || typeof structured_data.image === 'string') { structuredImages = structured_data.image; } else if ((Array.isArray(page.photos) && page.photos.length > 0) || typeof page.photos === 'string') { structuredImages = page.photos; } return {meta_generator ? : null} {getPageTitle(page, config.title, helper)} {typeof open_graph === 'object' ? : null} {typeof structured_data === 'object' ? : null} {canonical_url ? : null} {rss ? : null} {favicon ? : null} {hlTheme ? : null} {adsenseClientId ? : null} ; } };