- let algolia = 'undefined'; let env = process.env; if (theme.algolia_search.enable) { algolia = JSON.stringify({ appId: env.ALGOLIA_APP_ID || config.algolia.appId || config.algolia.applicationID, apiKey: env.ALGOLIA_API_KEY || config.algolia.apiKey, indexName: env.ALGOLIA_INDEX_NAME || config.algolia.indexName, hits: theme.algolia_search.hits, // search languages languages: { input_placeholder: _p("algolia_search.input_placeholder"), hits_empty: _p("algolia_search.hits_empty"), hits_stats: _p("algolia_search.hits_stats") } }) } let localSearch = 'undefined'; if (theme.local_search && theme.local_search.enable) { localSearch = JSON.stringify({ path: config.search.path, languages: { // search languages hits_empty: _p("local_search.hits_empty") } }) } let translate = 'undefined'; if (theme.translate && theme.translate.enable){ translate = JSON.stringify({ defaultEncoding: theme.translate.defaultEncoding, translateDelay: theme.translate.translateDelay, msgToTraditionalChinese: theme.translate.msgToTraditionalChinese, msgToSimplifiedChinese: theme.translate.msgToSimplifiedChinese }) } let copyright = 'undefined'; if (theme.copy.enable && theme.copy.copyright.enable){ copyright = JSON.stringify({ limitCount: theme.copy.copyright.limit_count, languages: { author: _p("copy_copyright.author") + ': ' + config.author, link: _p("copy_copyright.link") + ': ', source: _p("copy_copyright.source") + ': ' + config.title, info: _p("copy_copyright.info") } }) } let Snackbar = 'undefined'; if (theme.snackbar && theme.snackbar.enable) { Snackbar = JSON.stringify({ chs_to_cht: _p("Snackbar.chs_to_cht"), cht_to_chs: _p("Snackbar.cht_to_chs"), day_to_night: _p("Snackbar.day_to_night"), night_to_day: _p("Snackbar.night_to_day"), bgLight: theme.snackbar.bg_light, bgDark: theme.snackbar.bg_dark, position: theme.snackbar.position, }) } let noticeOutdate = 'undefined'; if (theme.noticeOutdate && theme.noticeOutdate.enable) { noticeOutdate = JSON.stringify({ limitDay: theme.noticeOutdate.limit_day, position: theme.noticeOutdate.position, messagePrev: theme.noticeOutdate.message_prev, messageNext: theme.noticeOutdate.message_next, }) } let highlight = 'undefined'; if ((config.highlight && config.highlight.enable) || (config.prismjs && config.prismjs.enable)) { highlight = JSON.stringify({ plugin: config.highlight.enable ? 'highlighjs' : 'prismjs', highlightCopy: theme.highlight_copy, highlightLang: theme.highlight_lang }) } script. var GLOBAL_CONFIG = { root: '!{config.root}', algolia: !{algolia}, localSearch: !{localSearch}, translate: !{translate}, noticeOutdate: !{noticeOutdate}, highlight: !{highlight}, copy: { success: '!{_p("copy.success")}', error: '!{_p("copy.error")}', noSupport: '!{_p("copy.noSupport")}' }, relativeDate: { homepage: !{theme.post_meta.page.date_format === 'relative'}, post: !{theme.post_meta.post.date_format === 'relative'} }, runtime: '!{theme.runtimeshow.enable ? _p("aside.card_webinfo.runtime.unit") : ""}', date_suffix: { just: '!{_p("date_suffix.just")}', min: '!{_p("date_suffix.min")}', hour: '!{_p("date_suffix.hour")}', day: '!{_p("date_suffix.day")}', month: '!{_p("date_suffix.month")}' }, copyright: !{copyright}, lightbox: '!{ theme.medium_zoom ? "mediumZoom" : (theme.fancybox ? "fancybox" : "null" )}', Snackbar: !{Snackbar}, source: { jQuery: '!{url_for(theme.CDN.jquery)}', justifiedGallery: { js: '!{url_for(theme.CDN.justifiedGallery_js)}', css: '!{url_for(theme.CDN.justifiedGallery_css)}' }, fancybox: { js: '!{url_for(theme.CDN.fancybox)}', css: '!{url_for(theme.CDN.fancybox_css)}' } }, isPhotoFigcaption: !{theme.photofigcaption}, islazyload: !{theme.lazyload.enable}, isanchor: !{theme.anchor} }; var saveToLocal = { set: function setWithExpiry(key, value, ttl) { const now = new Date() const expiryDay = ttl * 86400000 const item = { value: value, expiry: now.getTime() + expiryDay, } localStorage.setItem(key, JSON.stringify(item)) }, get: function getWithExpiry(key) { const itemStr = localStorage.getItem(key) if (!itemStr) { return undefined } const item = JSON.parse(itemStr) const now = new Date() if (now.getTime() > item.expiry) { localStorage.removeItem(key) return undefined } return item.value } } // https://stackoverflow.com/questions/16839698/jquery-getscript-alternative-in-native-javascript const getScript = url => new Promise((resolve, reject) => { const script = document.createElement('script') script.src = url script.async = true script.onerror = reject script.onload = script.onreadystatechange = function() { const loadState = this.readyState if (loadState && loadState !== 'loaded' && loadState !== 'complete') return script.onload = script.onreadystatechange = null resolve() } document.head.appendChild(script) })