From 6565409e5256fade0943a8bd2bfacbc0e0139937 Mon Sep 17 00:00:00 2001 From: Jonatan Nilsson Date: Sun, 21 Aug 2022 21:54:24 +0000 Subject: [PATCH] base: Added /health route. nfp_moe: Complete re-thinking of all loading. Smarter loading and lighter site. Better user experience among other things. --- base/article/routes.mjs | 6 +- base/serve.mjs | 2 +- base/server.mjs | 17 + base/static_routes.mjs | 17 + nfp_moe/api/file/util.mjs | 3 +- nfp_moe/api/serve.mjs | 43 +- nfp_moe/app/fileinfo.js | 2 +- nfp_moe/app/index.js | 2 +- nfp_moe/app/media.js | 83 +- nfp_moe/app/site_article.js | 30 +- nfp_moe/app/site_page.js | 328 +++++--- nfp_moe/public/assets/admin.css | 23 + nfp_moe/public/assets/app.css | 855 -------------------- nfp_moe/public/assets/app_body.css | 1039 +++++++++++++++++++++++++ nfp_moe/public/assets/img/favicon.png | Bin 2953 -> 3067 bytes nfp_moe/public/assets/img/heart.xcf | Bin 704337 -> 717725 bytes nfp_moe/public/index.html | 143 +++- 17 files changed, 1585 insertions(+), 1008 deletions(-) create mode 100644 base/static_routes.mjs create mode 100644 nfp_moe/public/assets/app_body.css diff --git a/base/article/routes.mjs b/base/article/routes.mjs index d5c88ab..51e8f52 100644 --- a/base/article/routes.mjs +++ b/base/article/routes.mjs @@ -23,8 +23,12 @@ export default class ArticleRoutes { } /** GET: /api/articles/[path] */ - async getArticle(ctx) { + async getArticle(ctx, onlyReturn = false) { let res = await ctx.db.safeCallProc('article_get_single', [ctx.params.path]) + + if (onlyReturn) { + return this.getArticle_resOutput(res) + } ctx.body = this.getArticle_resOutput(res) } diff --git a/base/serve.mjs b/base/serve.mjs index eb6d44f..26a3d56 100644 --- a/base/serve.mjs +++ b/base/serve.mjs @@ -22,7 +22,7 @@ export default class ServeHandler { } let indexFile = fsSync.readFileSync(path.join(this.root, 'index.html')) - this.template = dot.template(indexFile.toString(), { argName: ['headerDescription', 'headerImage', 'headerTitle', 'headerUrl', 'payloadData', 'payloadTree', 'version', 'nonce'] }) + this.template = dot.template(indexFile.toString(), { argName: ['headerDescription', 'headerImage', 'headerTitle', 'headerUrl', 'payloadData', 'payloadTree', 'version', 'nonce', 'type', 'banner'] }) // console.log(indexFile.toString()) } diff --git a/base/server.mjs b/base/server.mjs index f8f691e..b7a6d55 100644 --- a/base/server.mjs +++ b/base/server.mjs @@ -7,6 +7,7 @@ import PageRoutes from './page/routes.mjs' import ArticleRoutes from './article/routes.mjs' import AuthenticationRoutes from './authentication/routes.mjs' import { authenticate } from './authentication/security.mjs' +import StaticRoutes from './static_routes.mjs' export default class Server { constructor(http, port, core, opts = {}) { @@ -30,6 +31,7 @@ export default class Server { page: new PageRoutes(), article: new ArticleRoutes(), auth: new AuthenticationRoutes(), + static: new StaticRoutes(), } this.init() @@ -54,6 +56,9 @@ export default class Server { ctx.db = pool }) this.flaska.before(QueryHandler()) + + let healthChecks = 0 + let healthCollectLimit = 60 * 60 * 12 this.flaska.after(function(ctx) { let ended = new Date().getTime() @@ -69,6 +74,18 @@ export default class Server { level = 'error' } + if (ctx.url === '/health') { + healthChecks++ + if (healthChecks >= healthCollectLimit) { + ctx.log[level]({ + duration: Math.round(ended), + status: ctx.status, + }, `<-- ${status}${ctx.method} ${ctx.url} {has happened ${healthChecks} times}`) + healthChecks = 0 + } + return + } + ctx.log[level]({ duration: requestTime, status: ctx.status, diff --git a/base/static_routes.mjs b/base/static_routes.mjs new file mode 100644 index 0000000..ebf8e27 --- /dev/null +++ b/base/static_routes.mjs @@ -0,0 +1,17 @@ +import config from './config.mjs' + +export default class StaticRoutes { + constructor(opts = {}) { + Object.assign(this, { }) + } + + register(server) { + server.flaska.get('/health', this.health.bind(this)) + } + + health(ctx) { + ctx.body = { + environment: config.get('NODE_ENV'), + } + } +} diff --git a/nfp_moe/api/file/util.mjs b/nfp_moe/api/file/util.mjs index b804ed5..958821e 100644 --- a/nfp_moe/api/file/util.mjs +++ b/nfp_moe/api/file/util.mjs @@ -18,7 +18,7 @@ export function combineFilesWithArticles(articles, files) { } export function parseFile(file) { - file.url = 'https://cdn.nfp.is' + file.path + file.path = 'https://cdn.nfp.is' + file.path file.magnet = null file.meta = JSON.parse(file.meta || '{}') || {} if (file.meta.torrent) { @@ -27,6 +27,7 @@ export function parseFile(file) { + '&dn=' + encodeURIComponent(file.meta.torrent.name) + '&xt=urn:btih:' + file.meta.torrent.hash + file.meta.torrent.announce.map(item => ('&tr=' + encodeURIComponent(item))).join('') + file.meta.torrent = { name: file.meta.torrent.name, files: file.meta.torrent.files } } return file } \ No newline at end of file diff --git a/nfp_moe/api/serve.mjs b/nfp_moe/api/serve.mjs index df7490e..9b4636a 100644 --- a/nfp_moe/api/serve.mjs +++ b/nfp_moe/api/serve.mjs @@ -1,8 +1,22 @@ - +import path from 'path' import Parent from '../base/serve.mjs' +import fs from 'fs/promises' +import dot from 'dot' export default class ServeHandler extends Parent { + traverseTree(set, tree) { + for (let branch of tree) { + if (branch.children && branch.children.length) { + set.add(branch.id) + this.traverseTree(set, branch.children) + } + } + } + async serveIndex(ctx) { + let indexFile = await fs.readFile(path.join(this.root, 'index.html')) + this.template = dot.template(indexFile.toString(), { argName: ['headerDescription', 'headerImage', 'headerTitle', 'headerUrl', 'payloadData', 'payloadTree', 'version', 'nonce', 'type', 'banner', 'media'] }) + let payload = { headerDescription: 'Small fansubbing and scanlation group translating and encoding our favourite shows from Japan.', headerImage: this.frontend + '/assets/img/heart.png', @@ -12,18 +26,39 @@ export default class ServeHandler extends Parent { payloadTree: null, version: this.version, nonce: ctx.state.nonce, + type: 'page', + banner: false, + media: false, } try { - payload.payloadTree = JSON.stringify(await this.pageRoutes.getPageTree(ctx, true)) + let tree = await this.pageRoutes.getPageTree(ctx, true) + let setOfBranches = new Set() + this.traverseTree(setOfBranches, tree.tree) + + payload.payloadTree = JSON.stringify(tree) if (ctx.url === '/' || (ctx.url.startsWith('/page/') && ctx.url.lastIndexOf('/') === 5)) { ctx.params.path = null if (ctx.url.lastIndexOf('/') === 5) { ctx.params.path = ctx.url.slice(ctx.url.lastIndexOf('/') + 1) } - payload.payloadData = JSON.stringify(await this.pageRoutes.getPage(ctx, true)) + let data = await this.pageRoutes.getPage(ctx, true) + if (!data.page) { + payload.type = 'frontpage' + } + else if (setOfBranches.has(data.page.id)) { + payload.type = 'page_with_children' + } + payload.media = data.page?.media_avif_preview || false + payload.banner = data.featured?.banner_avif_preview || data.page?.banner_avif_preview || false + payload.payloadData = JSON.stringify(data) + } else if (ctx.url.startsWith('/article/') && ctx.url.lastIndexOf('/') === 8) { + ctx.params.path = ctx.url.slice(ctx.url.lastIndexOf('/') + 1) + let data = await this.articleRoutes.getArticle(ctx, true) + payload.media = data.article?.media_avif_preview || false + payload.payloadData = JSON.stringify(data) + payload.type = 'article' } - console.log('url', ctx.url) } catch (e) { ctx.log.error(e) } diff --git a/nfp_moe/app/fileinfo.js b/nfp_moe/app/fileinfo.js index a5cca90..384eed1 100644 --- a/nfp_moe/app/fileinfo.js +++ b/nfp_moe/app/fileinfo.js @@ -60,7 +60,7 @@ const Fileinfo = { m('a', { target: '_blank', rel: 'noopener', - href: vnode.attrs.file.url, + href: vnode.attrs.file.path, }, this.getDownloadName(vnode)), vnode.attrs.file.magnet ? m('a', { diff --git a/nfp_moe/app/index.js b/nfp_moe/app/index.js index e2c4e52..f3a45fb 100644 --- a/nfp_moe/app/index.js +++ b/nfp_moe/app/index.js @@ -47,4 +47,4 @@ AVIF.onload = AVIF.onerror = function () { m.route(document.getElementById('main'), '/', allRoutes) m.mount(document.getElementById('footer'), Footer) } -AVIF.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A='; +AVIF.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAABAA0ABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgAPkgIaDQgMgkf8AAAQAAAr3A='; diff --git a/nfp_moe/app/media.js b/nfp_moe/app/media.js index c90cdea..fcb8541 100644 --- a/nfp_moe/app/media.js +++ b/nfp_moe/app/media.js @@ -1,3 +1,5 @@ +const m = require('mithril') + export function generatePictureSource(item, cover) { if (!item || !item.media_alt_prefix) return null @@ -10,9 +12,56 @@ export function generatePictureSource(item, cover) { + item.media_alt_prefix + '_medium.avif' + ' 1300w, ' + item.media_alt_prefix + '_large.avif 1920w', cover: cover, + preview: item.media_avif_preview, } } +let loadingImage = null +let loader = null + +function cancelLoader() { + if (loader) { + loader.src = '' + } + loader = null +} + +export function smartBanner(item) { + if (!item) { + if (loader) { + cancelLoader() + } + loadingImage = null + return null + } + + if (!item.preview) { + loadingImage = null + cancelLoader() + return item.banner + } + if (loadingImage !== item.banner && loader) { + cancelLoader() + } + if (loadingImage === item.banner && !loader) { + return item.banner + } + if (loadingImage === item.banner) { + return item.preview + } + + loadingImage = item.banner + loader = new Image(); + + loader.src = item.banner; + loader.onload = loader.onerror = function() { + loader = null + m.redraw() + } + + return item.preview +} + export function getBannerImage(item, prefix) { if (!item || !item.banner_alt_prefix) return null @@ -20,7 +69,8 @@ export function getBannerImage(item, prefix) { path: prefix + item.path, name: item.name, original: item.banner_path, - banner: item.banner_alt_prefix + banner: item.banner_alt_prefix, + preview: item.banner_avif_preview, } var deviceWidth = window.innerWidth @@ -47,23 +97,24 @@ export function getArticlePicture(pictureData, useRouteLink, path, altText, fall if (!pictureData) return fallback || null return m(useRouteLink ? m.route.Link : 'a', { - class: 'cover', + class: 'cover ' + (pictureData.preview ? 'haspreview' : ''), rel: useRouteLink ? null : 'noopener', target: useRouteLink ? null : '_blank', href: path, - }, - m('picture', [ - m('source', { - srcset: pictureData.avif, - sizes: pictureData.cover, - type: 'image/avif', - }), - m('img', { - srcset: pictureData.jpeg, - sizes: pictureData.cover, - alt: altText, - src: pictureData.fallback, - }), + }, [ + pictureData.preview ? m('img', { src: pictureData.preview }) : null, + m('picture', [ + m('source', { + srcset: pictureData.avif, + sizes: pictureData.cover, + type: 'image/avif', + }), + m('img', { + srcset: pictureData.jpeg, + sizes: pictureData.cover, + alt: altText, + src: pictureData.fallback, + }), + ]) ]) -) } \ No newline at end of file diff --git a/nfp_moe/app/site_article.js b/nfp_moe/app/site_article.js index 9dd39ec..ea19ca3 100644 --- a/nfp_moe/app/site_article.js +++ b/nfp_moe/app/site_article.js @@ -21,7 +21,7 @@ const SiteArticle = { if (window.__nfpdata) { this.path = m.route.param('id') - this.data.article = window.__nfpdata + this.data = window.__nfpdata window.__nfpdata = null this.afterData() } else { @@ -83,7 +83,30 @@ const SiteArticle = { return [ this.loading - ? m('div.loading-spinner') + ? m('.inside.vertical', [ + m('div.actions', m('div.lb-link')), + m('article.fullsize', [ + m('h2.title', m('div.lb-main.lb--long')), + m('div.row', [ + m('div.cover', m('picture.lb.nobg')), + m('div.description', [ + m('div.lb-main.lb--long'), + m('div.lb-main'), + m('div.lb-main.lb--medium'), + m('div.lb-main.lb--medium'), + m('div.lb-main'), + m('p', m.trust(' ')), + m('fileinfo', [ + m('div.lb-main.lb--slim.lb--longest'), + m('ul', [ + m('li', m('div.lb-main.lb--slim.lb--longest')), + m('li', m('div.lb-main.lb--slim.lb--longest')), + ]) + ]), + ]), + ]), + ]), + ]) : null, !this.loading && this.error === 'Article not found' ? NotFoundView.view() @@ -96,7 +119,7 @@ const SiteArticle = { }, }, 'Article error: ' + this.error + '. Click here to try again')) : null, - (article + (!this.loading && article ? m('.inside.vertical', [ m('div.actions', [ '« ', @@ -134,6 +157,7 @@ const SiteArticle = { } }}, m('div.loading-spinner')) : m('button.comments', { + style: 'display: none', onclick: function() { window.LoadComments = true }, }, 'Open comment discussion'), ]) diff --git a/nfp_moe/app/site_page.js b/nfp_moe/app/site_page.js index 1d8a0e4..96fde77 100644 --- a/nfp_moe/app/site_page.js +++ b/nfp_moe/app/site_page.js @@ -15,7 +15,7 @@ const SitePage = { oninit: function(vnode) { this.error = '' this.loading = false - this.showLoading = null + this.treePage = null this.data = { page: null, articles: [], @@ -26,7 +26,6 @@ const SitePage = { this.children = [] this.currentPage = Number(m.route.param('page')) || 1 - console.log('test', window.__nfpdata) if (window.__nfpdata) { this.path = m.route.param('id') this.lastpage = this.currentPage @@ -58,24 +57,13 @@ const SitePage = { this.lastpage = this.currentPage this.path = m.route.param('id') - if (this.showLoading) { - clearTimeout(this.showLoading) - } - - if (this.data.page) { - this.showLoading = setTimeout(() => { - this.showLoading = null - this.loading = true - m.redraw() - }, 300) - } else { - this.loading = true - } + this.loading = true if (this.path) { - this.children = PageTree.TreeMap.get(this.path) - this.children = this.children && this.children.children || [] + this.treePage = PageTree.TreeMap.get(this.path) + this.children = this.treePage && this.treePage.children || [] } else { + this.treePage = { has_banner: true, has_media: true } this.children = PageTree.Tree } @@ -90,8 +78,6 @@ const SitePage = { this.error = err.message }) .then(() => { - clearTimeout(this.showLoading) - this.showLoading = null this.loading = false m.redraw() }) @@ -111,8 +97,8 @@ const SitePage = { } this.picture = media.generatePictureSource(this.data.page, - '(max-width: 840px) calc(100vw - 82px), ' - + '758px') + '(max-width: 1280px) calc(100vw - 2rem), ' + + '1248px') if (this.lastpage !== 1) { document.title = 'Page ' + this.lastpage + ' - ' + title @@ -128,107 +114,211 @@ const SitePage = { return ([ this.loading - ? m('div.loading-spinner') - : null, - !this.loading && this.error === 'Page not found' - ? NotFoundView.view() - : null, - !this.loading && this.error && this.error !== 'Page not found' - ? m('div.wrapper', m('div.error', { - onclick: () => { - this.error = '' - this.fetchPage(vnode) - }, - }, 'Page error: ' + this.error + '. Click here to try again')) - : null, - (featuredBanner - ? m(m.route.Link, { - class: 'page-banner', - href: featuredBanner.path, - style: { 'background-image': 'url("' + featuredBanner.banner + '")' }, - }, - m('div.inside', m('div.page-banner-title', featuredBanner.name)) - ) - : null), - (!featuredBanner && pageBanner - ? m('a.page-banner', { - href: pageBanner.original, - target: '_blank', - style: { 'background-image': 'url("' + pageBanner.banner + '")' }, - }, - ) - : null), - (page - ? m('.inside.vertical', [ - m('div.actions', [ - '« ', - m(m.route.Link, { - href: page.parent_path - ? '/page/' + page.parent_path - : '/' - }, page.parent_name || 'Home'), - Authentication.currentUser - ? [ - m('div.filler'), - 'Actions:', - m(m.route.Link, { href: '/admin/pages/' + page.id }, 'Edit page'), - ] - : null, - ]), - m('h2.title', page.name) - ]) - : null), - (page || this.data.articles.length - ? m('.inside', [ - this.children.length - ? m('aside', { class: page ? '' : 'frontpage' }, [ - m('h5', page ? 'View ' + page.name + ':' : 'Categories'), - this.children.map((page) => { - return [ - m(m.route.Link, { class: 'root', href: '/page/' + page.path }, page.name), - (page.children && page.children.length - ? m('ul', page.children.map(function(subpage) { - return m('li', m(m.route.Link, { class: 'child', href: '/page/' + subpage.path }, subpage.name)) - })) - : null), - ] - }), - !page - ? m('div.asuna.spritesheet') - : null, + ? [ + this.treePage.has_banner + ? m('div.page-banner.lb') + : null, + this.path + ? m('div.inside.vertical', [ + m('div.actions', m('div.lb-link')), + m('h2.title', m('div.lb-main.lb--long')), ]) : null, - m('div.container', [ - (page - ? media.getArticlePicture(this.picture, false, page.media_path, 'Image for page ' + page.name) - : null), - (page && page.content - ? m('div.content', page.content.blocks.map(block => { - return m(EditorBlock, { block: block }) - })) - : null), - (page && this.data.articles.length - ? [ - m('h5', 'Latest posts under ' + page.name + ':'), - this.data.articles.map(function(article) { - return m(Articleslim, { article: article }) - }), - ] - : null), - (!page && this.data.articles.length - ? this.data.articles.map(function(article) { - return m(Article, { article: article }) - }) - : null), - m(Paginator, { - base: page ? '/page/' + page.path : '/', - page: this.currentPage, - perPage: ArticlesPerPage, - total: this.data.total_articles, - }), + m('div.inside', [ + this.children.length + ? m('aside', [ + m('h5', m('div.lb-main')), + m('div.lb-link'), + m('ul', [ + m('li', m('div.lb-link')), + m('li', m('div.lb-link')), + m('li', m('div.lb-link')), + ]), + m('div.lb-link'), + m('ul', [ + m('li', m('div.lb-link')), + m('li', m('div.lb-link')), + m('li', m('div.lb-link')), + ]), + ]) + : null, + !this.path + ? m('div.container', [ + m('article', [ + m('h2.title', m('div.lb-main.lb--long')), + m('div.row', [ + m('div.lb-main.lb--imgmini'), + m('div', [ + m('div', m.trust(' ')), + m('div.lb-main.lb--long'), + m('div.lb-main'), + m('div.lb-main.lb--medium'), + m('div.lb-main.lb--medium'), + m('div.lb-main'), + ]), + ]), + ]), + m('article', [ + m('h2.title', m('div.lb-main.lb--long')), + m('div.row', [ + m('div.lb-main.lb--imgmini'), + m('div', [ + m('div', m.trust(' ')), + m('div.lb-main.lb--long'), + m('div.lb-main'), + m('div.lb-main.lb--medium'), + m('div.lb-main.lb--medium'), + m('div.lb-main'), + ]), + ]), + ]), + ]) + : null, + this.path + ? m('div.container', [ + this.treePage.has_media + ? m('div.cover', m('picture.lb.nobg')) + : null, + m('h5', m('div.lb-main.lb--long')), + m('articleslim', [ + m('a.cover.nobg.lb'), + m('div', [ + m('div', m('div.lb-link.lb--long')), + m('div.lb-main.lb--longest.lb--slim'), + ]), + ]), + m('articleslim', [ + m('a.cover.nobg.lb'), + m('div', [ + m('div', m('div.lb-link.lb--long')), + m('div.lb-main.lb--longest.lb--slim'), + ]), + ]), + m('articleslim', [ + m('a.cover.nobg.lb'), + m('div', [ + m('div', m('div.lb-link.lb--long')), + m('div.lb-main.lb--longest.lb--slim'), + ]), + ]), + m('articleslim', [ + m('a.cover.nobg.lb'), + m('div', [ + m('div', m('div.lb-link.lb--long')), + m('div.lb-main.lb--longest.lb--slim'), + ]), + ]), + ]) + : null, ]), - ]) - : null), + ] + : [ + this.error === 'Page not found' + ? NotFoundView.view() + : null, + this.error && this.error !== 'Page not found' + ? m('div.wrapper', m('div.error', { + onclick: () => { + this.error = '' + this.fetchPage(vnode) + }, + }, 'Page error: ' + this.error + '. Click here to try again')) + : null, + (featuredBanner + ? m(m.route.Link, { + class: 'page-banner', + href: featuredBanner.path, + style: { 'background-image': 'url("' + featuredBanner.preview + '")' }, + }, [ + m('div.page-banner-real', { + style: { 'background-image': 'url("' + featuredBanner.banner + '")' }, + }, m('div.inside', m('div.page-banner-title', featuredBanner.name))), + ] + ) + : null), + (!featuredBanner && pageBanner + ? m('a.page-banner', { + href: pageBanner.original, + target: '_blank', + style: { 'background-image': 'url("' + pageBanner.preview + '")' }, + }, + m('div.page-banner-real', { + style: { 'background-image': 'url("' + pageBanner.banner + '")' }, + }) + ) + : null), + (page + ? m('.inside.vertical', [ + m('div.actions', [ + '« ', + m(m.route.Link, { + href: page.parent_path + ? '/page/' + page.parent_path + : '/' + }, page.parent_name || 'Home'), + Authentication.currentUser + ? [ + m('div.filler'), + 'Actions:', + m(m.route.Link, { href: '/admin/pages/' + page.id }, 'Edit page'), + ] + : null, + ]), + m('h2.title', page.name) + ]) + : null), + (page || this.data.articles.length + ? m('.inside', [ + this.children.length + ? m('aside', { class: page ? '' : 'frontpage' }, [ + m('h5', page ? 'View ' + page.name + ':' : 'Categories'), + this.children.map((page) => { + return [ + m(m.route.Link, { class: 'root', href: '/page/' + page.path }, page.name), + (page.children && page.children.length + ? m('ul', page.children.map(function(subpage) { + return m('li', m(m.route.Link, { class: 'child', href: '/page/' + subpage.path }, subpage.name)) + })) + : null), + ] + }), + !page + ? m('div.asuna.spritesheet') + : null, + ]) + : null, + m('div.container', [ + (page + ? media.getArticlePicture(this.picture, false, page.media_path, 'Image for page ' + page.name) + : null), + (page && page.content + ? m('div.content', page.content.blocks.map(block => { + return m(EditorBlock, { block: block }) + })) + : null), + (page && this.data.articles.length + ? [ + m('h5', 'Latest posts under ' + page.name + ':'), + this.data.articles.map(function(article) { + return m(Articleslim, { article: article }) + }), + ] + : null), + (!page && this.data.articles.length + ? this.data.articles.map(function(article) { + return m(Article, { article: article }) + }) + : null), + m(Paginator, { + base: page ? '/page/' + page.path : '/', + page: this.currentPage, + perPage: ArticlesPerPage, + total: this.data.total_articles, + }), + ]), + ]) + : null), + ], ]) }, } diff --git a/nfp_moe/public/assets/admin.css b/nfp_moe/public/assets/admin.css index 4b66699..d8be2d1 100644 --- a/nfp_moe/public/assets/admin.css +++ b/nfp_moe/public/assets/admin.css @@ -306,6 +306,29 @@ dialogue button.cancel { min-height: 80px !important; } + + +@keyframes spinner-loader { + to {transform: rotate(360deg);} +} + +.loading-spinner:after { + content: ''; + box-sizing: border-box; + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + border-radius: 50%; + border: 2px solid #ccc; + border-top-color: #333; + animation: spinner-loader .6s linear infinite; + z-index: 1000; +} + /* ===================== 3rd party ===================== */ diff --git a/nfp_moe/public/assets/app.css b/nfp_moe/public/assets/app.css index d18d94b..d65fbff 100644 --- a/nfp_moe/public/assets/app.css +++ b/nfp_moe/public/assets/app.css @@ -1,858 +1,3 @@ -/* - ===================== Variables ===================== -*/ -:root { - --content-max-width: 1280px; - --primary-darker-bg: #002f6c; - --primary-darker-fg: #fff; - --primary-darker-fg-light: #999; - --primary-darker-link: #ffad42; - - --primary-bg: #3d77c7; - --primary-fg: #fff; - --primary-fg-light: #999; - --primary-link: #f57c00; - - --bg: #fff; - --bg-content-alt: #eee; - --color: #000; - --light: #757575; - --link: #bb4d00; - --title-bg: #f57c00; - --title-fg: #000; - --seperator: #ccc; - --content-bg: #fff; - --content-border: 0px solid transparent; - - --alt-bg: #ccc; - --alt-inside-bg: #fff; - --alt-inside-border: 1px solid #555; - --alt-color: #555; - - --footer-bg: #ccc; - --footer-color: #000; - --footer-seperator: #fff; - --footer-link: #8F3C00; - - --button-border: 1px solid #f57c00; - --button-bg: #ffad42; - --button-fg: #000; - - --error-bg: red; - --error-fg: white; -} - -.nightmode { - --content-max-width: 1280px; - --primary-darker-bg: #002f6c; - --primary-darker-fg: #fff; - --primary-darker-fg-light: #999; - --primary-darker-link: #ffad42; - - --primary-bg: #28518b; - --primary-fg: #fff; - --primary-fg-light: #999; - --primary-link: #f57c00; - - --bg: black; - --bg-content-alt: #333; - --color: #d7dadc; - --light: #bbb; - --link: #e05e00; - --title-bg: #e05e00; - --title-fg: #000; - --title-sublink: #27159C; - --seperator: #ccc; - --content-bg: #1a1a1b; - --content-border: 1px solid #343536; - - --alt-bg: #000; - --alt-inside-bg: #343536; - --alt-inside-border: 1px solid #808080; - --alt-color: #d7dadc; - - --footer-bg: #343536; - --footer-color: #d7dadc; - --footer-seperator: #666; - --footer-link: #fe791b; - - --button-border: 1px solid #f57c00; - --button-bg: #ffad42; - --button-fg: #000; - - --error-bg: red; - --error-fg: white; -} - -/* - ===================== Reset ===================== -*/ - -/* Box sizing rules */ -*, *::before, *::after { box-sizing: border-box; -} - -/* Remove default margin */ -body, h1, h2, h3, h4, p, figure, blockquote, dl, dd { - margin: 0; -} - -body { - min-height: 100vh; - text-rendering: optimizeSpeed; - line-height: 1.5; - font-size: 16px; - font-family: 'Inter var', sans-serif; - font-feature-settings: "slnt" 0deg, "case", "frac", "tnum", "ss02", "calt", "ccmp", "kern"; - background: var(--bg); - color: var(--color); -} - -.italic { font-variation-settings: "slnt" 10deg; } - -a { - text-decoration-skip-ink: auto; -} - -img { - max-width: 100%; - margin: 0 auto; - display: block; -} - -input, button, textarea, select { - font: inherit; -} - -@media (prefers-reduced-motion: reduce) { - *, *::before, *::after { - animation-play-state: paused !important; - transition: none !important; - scroll-behavior: auto !important; - } -} - -h1 { - font-size: 2.488rem; -} -h2 { - font-size: 2.074rem; -} -h3 { - font-size: 1.728rem; -} -h4 { - font-size: 1.44rem; -} -h5 { - font-size: 1.0rem; -} - -a, a:visited, button { - text-decoration: none; - border: none; - padding: 0; - margin: 0; - font-weight: bold; - cursor: pointer; -} - -input[type=text], -input[type=password], -select { - border: 1px solid var(--color); - background: var(--bg); - color: var(--color); - border-radius: 0; - padding: 0.25rem; - line-height: 1rem; -} - -label { - font-size: 0.75rem; - font-weight: 500; - margin-top: 1rem; - margin-bottom: 0.25rem; - display: block; -} - -input[type=text]:hover, -input[type=text]:active, -input[type=password]:hover, -input[type=password]:active, -select:hover, -select:active { - border-color: var(--link); -} - -button { - background: transparent; -} - -/* - ===================== Common ===================== -*/ - -.inside { - width: 100%; - max-width: var(--content-max-width); - display: flex; - margin: 0 auto; -} - -.inside.vertical { - flex-direction: column; -} - -.error { - background: var(--error-bg); - color: var(--error-fg); - cursor: pointer; - text-align: center; - padding: 0.5rem; -} - -.wrapper { - background: var(--alt-bg); - color: var(--alt-color); - display: flex; - justify-content: center; - align-items: center; - min-height: calc(100vh - 200px); - padding: 1rem; -} - -.filler { - flex: 2 1 auto; -} - -.wrapper .inside { - flex-direction: column; - color: var(--alt-color); - background: var(--alt-inside-bg); - border: var(--alt-inside-border); -} - -.wrapper .error { - border: 1px solid var(--error-bg); - color: var(--error-bg); - background: transparent; -} - -@keyframes spinner-loader { - to {transform: rotate(360deg);} -} - -.loading-spinner:after { - content: ''; - box-sizing: border-box; - position: absolute; - top: 50%; - left: 50%; - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - border-radius: 50%; - border: 2px solid #ccc; - border-top-color: #333; - animation: spinner-loader .6s linear infinite; - z-index: 1000; -} - -.notfound { - color: var(--light); -} - -@media screen and (max-width: 639px){ - main .inside { - flex-direction: column; - } - - .wrapper { - flex-direction: column; - } -} - -/* - ===================== Header ===================== -*/ - -header { - background: var(--primary-darker-bg); - color: var(--primary-darker-fg); -} - -header a, -header a:visited, -header button { - color: var(--primary-darker-link); -} - -header p { - color: var(--primary-darker-fg-light); -} - -header .title, -header .title:visited { - min-height: 100px; - padding-left: 10px; - display: flex; - align-items: center; - background: 25px center no-repeat; - background-size: auto 91px; - flex: 0 0 auto; -} - -header .logo { - background-position: -119px 0px; - width: 81px; - height: 100px; - transform: scale(0.9); - margin-right: 1rem; -} - -header .title h1 { - font-weight: 500; - color: var(--primary-darker-fg); -} - -header aside { - flex: 2 1 auto; - display: flex; - flex-direction: column; - align-items: flex-end; - font-size: 0.8rem; - padding: 0.5rem 0.5rem; -} - -header aside a, -header aside button { - margin-left: 0.5rem; -} - -header aside p button { - margin-left: 0; -} - -/* - ===================== Nav ===================== -*/ - -nav { - background: var(--primary-bg); -} - -nav a, nav a:visited, nav .loading-spinner { - flex: 2 0 auto; - text-align: center; - font-weight: 300; - padding: 10px 10px 7px 10px; - border-bottom: 3px solid var(--primary-bg); - color: var(--primary-fg); -} - -nav a.active { - border-bottom-color: var(--primary-link); -} - -nav .loading-spinner { - position: relative; -} - -@media screen and (max-width: 639px){ - nav { - font-size: 0.8em; - } -} - -/* - ===================== main ===================== -*/ - -main { - min-height: calc(100vh - 390px); -} - -.page-banner { - background-size: cover; - background-repeat: no-repeat; - background-position: center; - height: 150px; - width: 100%; - display: block; -} - -.page-banner-title { - color: white; - text-align: right; - padding: 0.5rem 1rem; - font-size: 1.6rem; - flex: 2 1 auto; - text-shadow: 0 0 .3em #000; -} - -.actions { - padding: 0.5rem 1rem; - display: flex; -} - -.actions a { - margin-left: 0.375rem; -} - -main a, -main a:visited { - color: var(--link); -} - -main h5 { - padding: 0 0.5rem 0.5rem; - margin: 0 0 0.75rem; - border-bottom: 1px solid var(--seperator); - font-size: 1rem; -} - -main .loading-spinner { - position: fixed; - left: 50%; - top: 50%; -} - -main h2.title, -.main h2.title { - font-size: 1.4rem; - background: var(--title-bg); - color: var(--title-fg); - text-align: center; - font-weight: 400; - padding: 0.375rem; - line-height: 1.4rem; -} - -main .container { - flex: 2 1 auto; - margin: 1rem; -} - -main .cover picture img { - margin-bottom: 1rem; - width: 100%; -} - -main button, -main input[type=submit] { - border: var(--button-border); - background: #ffad42; - color: #000; - align-self: center; - padding: 0.25rem 1rem; - margin: 1rem 0 2rem; -} - -@media screen and (max-width: 639px){ - main .container { - margin: 1rem 0.25rem; - } -} - -/* ************** aside ************** */ - -main aside { - padding: 0.375rem 1rem 0.5rem; - margin: 1rem; - font-size: 0.875rem; - flex: 0 0 250px; - background: var(--content-bg); - border: var(--content-border); -} - -main aside a { - display: block; -} - -main aside h5 { - margin: 0 -0.5rem 0.25rem; - font-size: 0.9em; -} - -main aside ul { - margin: 0 0 0.5rem; - padding-left: 1.5rem; -} - -main aside .asuna { - margin-top: 2rem; - width: 200px; - height: 461px; - background-position: 0 -150px; -} - -.nightmode main aside .asuna { - background-position: -200px -150px; -} - -.daymode .day { - display: block; -} - -@media screen and (max-width: 1000px){ - main aside { - flex: 0 0 200px; - } -} - -@media screen and (max-width: 639px){ - main aside { - margin: 1rem 0.25rem; - flex: 0 0 auto; - } - - main aside.frontpage { - order: 2; - } -} - - -/* ************** paginator ************** */ - -paginator { - display: flex; - justify-content: center; - width: 100%; -} - -paginator a { - color: var(--link); - cursor: pointer; -} - -paginator a, -paginator div { - display: block; - font-size: 0.8rem; - max-width: 80px; - flex-grow: 2; - text-align: center; - padding: 0.5rem; - margin-top: 1rem; -} - -/* ************** articleslim ************** */ - -articleslim { - display: flex; - margin-bottom: 0.75rem; - padding-right: 0.5rem; -} - -articleslim p.description { - font-size: 0.75rem; -} - -articleslim .cover { - flex: 0 0 124px; - margin-right: 0.75rem; -} - -articleslim .cover picture img { - margin-bottom: 0; -} - -articleslim a.nobg { - height: 70px; - background: var(--seperator); - display: block; -} - -articleslim a.title { - display: block; - margin-bottom: 0.375rem; -} - -/* ************** article ************** */ - -article { - background: var(--content-bg); - border: var(--content-border); - margin-bottom: 1rem; -} - -article .row { - margin: 1rem 0; - display: flex; -} - -article .cover { - flex: 0 0 auto; - margin-right: 1rem; - align-self: flex-start; -} - -article a.title { - flex: 0 0 100%; - margin-bottom: 0.5rem; -} - -article .description { - font-size: 0.875rem; - margin-bottom: 1rem; - padding: 0 0.25rem; -} - -article .meta { - font-size: 0.625rem; - line-height: 0.75rem; - color: var(--light); - font-weight: 500; - padding: 1.25rem 0.25rem 0; -} - -article.fullsize .row { - margin: 1rem; - flex-direction: column; -} - -article.fullsize .cover { - margin-right: 0; -} - -@media screen and (max-width: 1000px){ - article .row { - flex-direction: column; - } - - article.fullsize .row { - margin: 1rem 0.25rem; - } - - article .cover { - margin-right: 0; - } -} - -/* ************** fileinfo ************** */ - -fileinfo { - padding-left: 0.25rem; - margin-bottom: 0.5rem; - color: var(--light); - line-height: 1rem; - font-size: 0.75rem; - display: block; - position: relative; -} - -fileinfo.slim { - padding: 0; - margin: 0; -} - -fileinfo p span, -fileinfo p a { - margin-right: 0.25rem; -} - -fileinfo p a { - font-weight: 550; - padding-right: 0.25rem; - border-right: 1px solid var(--seperator); - display: inline-block; -} - -fileinfo p span { - font-weight: 700; -} - -fileinfo .trimmed { - padding: 0.25rem 0 0.25rem 1rem; -} - -fileinfo ul { - margin: 0.5rem 0; - padding-left: 1.5rem; -} - -/* - ===================== login ===================== -*/ - -.login--first { - flex: 0 0 170px; -} - -.login { - align-items: center; - font-size: 1rem; - padding: 1rem 1rem 2rem; - margin: 1rem; - max-width: 400px; -} - -.login .title { - font-size: 1.4rem; - font-weight: 200; - margin-bottom: 2rem; - text-align: center; -} - -.login input, -.login label { - width: 100%; - max-width: 300px; -} - -.login input[type=submit] { - min-width: 150px; - margin-top: 1rem; -} - -.login--asuna { - flex: 0 0 auto; - width: 180px; - height: 494px; - background-position: -400px 0; -} - -.nightmode .login--asuna { - background-position: -580px 0; -} - - -@media screen and (max-width: 1000px){ - .login--first { - display: none; - } -} - - -@media screen and (max-width: 639px){ - .login { - order: 2; - } - - .login--asuna { - max-width: 120px; - } -} - -/* - ===================== content ===================== -*/ - -.content :is(h1, h2, h3, h4, h5, ul, ol, blockquote, p) { - margin: 0 0 0.75rem; -} - -.content :is(h1, h2, h3, h4, h5) { - padding: 0 0.5rem 0.5rem; - border-bottom: 1px solid var(--seperator); -} - -.content :is(blockquote, pre) { - background: var(--bg-content-alt); - padding: 0.5rem; -} - -.content blockquote p { - margin: 0; -} - -/* - ===================== footer ===================== -*/ - -footer { - background: var(--footer-bg); - color: var(--footer-color); - text-align: center; - padding: 1rem; - display: flex; - align-items: center; - font-weight: 500; - font-size: 0.625rem; -} - -footer .first { - flex: 0 0 119px; -} - -footer .middle { - display: flex; - flex-direction: column; - align-items: center; - flex: 2 1 auto; - padding: 0 2rem; -} - -footer .asuna { - flex: 0 0 119px; - height: 150px; - width: 119px; - background-position: 0px 0px; -} - -footer ul { - margin: 0 0 0.25rem; - padding: 0 0 0.25rem; - border-bottom: 1px solid var(--footer-seperator); - display: flex; - justify-content: center; - flex-wrap: wrap; - min-width: 300px; -} - -footer ul li { - padding: 0 0.25rem; - list-style-position: inside; -} - -footer a { - color: var(--footer-link); - margin: 0 0 0.25rem; -} - - -@media screen and (max-width: 1000px){ - footer .first { - display: none; - } -} - - -@media screen and (max-width: 639px){ - footer{ - flex-direction: column; - } - - footer .middle { - padding: 0 0 2rem; - } - - footer .asuna { - flex: 0 0 150px; - } -} - -/* - ===================== 404 page ===================== -*/ - -.not_found { - flex-direction: column; - text-align: center; -} - -.not_found .asuna { - width: 120px; - height: 444px; - margin: 2rem 0 0rem; - background-position: -760px 0; -} - -.nightmode .not_found .asuna { - background-position: -880px 0; -} /* ===================== Large assets ===================== diff --git a/nfp_moe/public/assets/app_body.css b/nfp_moe/public/assets/app_body.css new file mode 100644 index 0000000..38e6cb8 --- /dev/null +++ b/nfp_moe/public/assets/app_body.css @@ -0,0 +1,1039 @@ +/* + ===================== Variables ===================== +*/ +:root { + --content-max-width: 1280px; + --primary-darker-bg: #002f6c; + --primary-darker-fg: #fff; + --primary-darker-fg-light: #999; + --primary-darker-link: #ffad42; + + --primary-bg: #3d77c7; + --primary-fg: #fff; + --primary-fg-light: #999; + --primary-link: #f57c00; + + --bg: #fff; + --bg-content-alt: #eee; + --color: #000; + --light: #757575; + --link: #bb4d00; + --title-bg: #f57c00; + --title-fg: #000; + --seperator: #ccc; + --content-bg: #fff; + --content-border: 0px solid transparent; + + --alt-bg: #ccc; + --alt-inside-bg: #fff; + --alt-inside-border: 1px solid #555; + --alt-color: #555; + + --footer-bg: #ccc; + --footer-color: #000; + --footer-seperator: #fff; + --footer-link: #8F3C00; + + --button-border: 1px solid #f57c00; + --button-bg: #ffad42; + --button-fg: #000; + + --error-bg: red; + --error-fg: white; +} + +.nightmode { + --content-max-width: 1280px; + --primary-darker-bg: #002f6c; + --primary-darker-fg: #fff; + --primary-darker-fg-light: #999; + --primary-darker-link: #ffad42; + + --primary-bg: #28518b; + --primary-fg: #fff; + --primary-fg-light: #999; + --primary-link: #f57c00; + + --bg: black; + --bg-content-alt: #333; + --color: #d7dadc; + --light: #bbb; + --link: #e05e00; + --title-bg: #e05e00; + --title-fg: #000; + --title-sublink: #27159C; + --seperator: #ccc; + --content-bg: #1a1a1b; + --content-border: 1px solid #343536; + + --alt-bg: #000; + --alt-inside-bg: #343536; + --alt-inside-border: 1px solid #808080; + --alt-color: #d7dadc; + + --footer-bg: #343536; + --footer-color: #d7dadc; + --footer-seperator: #666; + --footer-link: #fe791b; + + --button-border: 1px solid #f57c00; + --button-bg: #ffad42; + --button-fg: #000; + + --error-bg: red; + --error-fg: white; +} + +/* + ===================== Reset ===================== +*/ + +/* Box sizing rules */ +*, *::before, *::after { box-sizing: border-box; +} + +/* Remove default margin */ +body, h1, h2, h3, h4, p, figure, blockquote, dl, dd { + margin: 0; +} + +body { + min-height: 100vh; + text-rendering: optimizeSpeed; + line-height: 1.5; + font-size: 16px; + font-family: 'Inter var', sans-serif; + font-variation-settings: "slnt" 0; + font-feature-settings: "case", "frac", "tnum", "ss02", "calt", "ccmp", "kern"; + background: var(--bg); + color: var(--color); +} + +.italic { font-variation-settings: "slnt" 10deg; } + +a { + text-decoration-skip-ink: auto; +} + +img { + max-width: 100%; + margin: 0 auto; + display: block; +} + +input, button, textarea, select { + font: inherit; +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-play-state: paused !important; + transition: none !important; + scroll-behavior: auto !important; + } +} + +h1 { + font-size: 2.488rem; +} +h2 { + font-size: 2.074rem; +} +h3 { + font-size: 1.728rem; +} +h4 { + font-size: 1.44rem; +} +h5 { + font-size: 1.0rem; +} + +a, a:visited, button { + text-decoration: none; + border: none; + padding: 0; + margin: 0; + font-weight: bold; + cursor: pointer; +} + +input[type=text], +input[type=password], +select { + border: 1px solid var(--color); + background: var(--bg); + color: var(--color); + border-radius: 0; + padding: 0.25rem; + line-height: 1rem; +} + +label { + font-size: 0.75rem; + font-weight: 500; + margin-top: 1rem; + margin-bottom: 0.25rem; + display: block; +} + +input[type=text]:hover, +input[type=text]:active, +input[type=password]:hover, +input[type=password]:active, +select:hover, +select:active { + border-color: var(--link); +} + +button { + background: transparent; +} + + +/* + ===================== Loading bar ===================== +*/ + +.lb, +.lb-main, +.lb-link { + width: 100px; + background: var(--color); + opacity: 0.35; + height: 1rem; + border-radius: 20px; + align-self: center; + position: relative; +} + +.lb-main, +.lb-link { + display: inline-block; +} + +.lb-link { + background: var(--link); +} + +.lb:after, +.lb-main:after, +.lb-link:after { + content: ''; + background: repeating-linear-gradient(to right, transparent 0%, transparent 25%, #00000044 75%, transparent 100%); + background-size: 300% auto; + background-position: 0 -300%; + border-radius: 20px; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + animation: lbgradient 10s infinite; + animation-fill-mode: forwards; + animation-timing-function: linear; +} + +.lb-main:after { + background: repeating-linear-gradient(to right, transparent 0%, transparent 25%, #ffffff44 75%, transparent 100%); + background-size: 300% auto; + background-position: 0 -300%; +} + +.lb-link:after { + background: repeating-linear-gradient(to right, transparent 0%, transparent 25%, #ffffff44 75%, transparent 100%); + background-size: 300% auto; + background-position: 0 -300%; +} + +@keyframes lbgradient { + 0% { background-position: 300% 0; } + 100% { background-position: -300% 0; } +} + +main aside .lb-main { + height: 0.875rem; +} + +.actions .lb-link { + margin: 0.25rem 0; +} + +article .row div .lb-main { + display: block; + margin-bottom: 0.75rem; + opacity: 0.2; +} + +.page-banner.lb, +.page-banner.lb:after { + border-radius: 0; + opacity: 1; + background-color: var(--seperator); +} + +footer .lb { + background: var(--footer-link); + display: inline-block; + margin-top: 0.25rem; + margin-bottom: 0.15rem; + bottom: -4px; + height: 0.625rem; +} + +.lb--large { + height:40px; + width: 200px; +} + +.lb--long { + width: 200px; +} + +.lb--longest { + width: 300px; +} + +.lb--medium { + width: 150px; +} +.lb--slim { + height: 0.675rem; +} + +main .cover picture.lb, +main .cover.haspreview > img { + display: block; + width: 100%; + height: auto; + opacity: 1; + border-radius: 0; +} + +main .cover picture.lb.nobg { + padding-top: 50%; + background: var(--seperator); + margin-bottom: 1rem; +} + +article.fullsize .row .cover { + width: 100%; +} + +article .description .lb-main { + display: block; + margin: 0 0 0.75rem; +} + +article .description fileinfo ul .lb-main { + bottom: -4px; +} + +main .cover picture.lb:after { + border-radius: 0; +} + +.lb--imgmini { + width: 400px; + height: 225px; + margin-right: 1rem; + opacity: 0.2; +} + +@media (prefers-reduced-motion), only screen and (hover: none) and (pointer: coarse), (prefers-reduced-motion) { + .lb:after { + background: transparent !important; + display: none !important; + animation: none !important; + } +} + +/* + ===================== Common ===================== +*/ + +.inside { + width: 100%; + max-width: var(--content-max-width); + display: flex; + margin: 0 auto; +} + +.inside.vertical { + flex-direction: column; +} + +.error { + background: var(--error-bg); + color: var(--error-fg); + cursor: pointer; + text-align: center; + padding: 0.5rem; +} + +.wrapper { + background: var(--alt-bg); + color: var(--alt-color); + display: flex; + justify-content: center; + align-items: center; + min-height: calc(100vh - 200px); + padding: 1rem; +} + +.filler { + flex: 2 1 auto; +} + +.wrapper .inside { + flex-direction: column; + color: var(--alt-color); + background: var(--alt-inside-bg); + border: var(--alt-inside-border); +} + +.wrapper .error { + border: 1px solid var(--error-bg); + color: var(--error-bg); + background: transparent; +} + +.notfound { + color: var(--light); +} + +@media screen and (max-width: 639px){ + main .inside { + flex-direction: column; + } + + .wrapper { + flex-direction: column; + } +} + +/* + ===================== Header ===================== +*/ + +header { + background: var(--primary-darker-bg); + color: var(--primary-darker-fg); +} + +header a, +header a:visited, +header button { + color: var(--primary-darker-link); +} + +header p { + color: var(--primary-darker-fg-light); +} + +header .title, +header .title:visited { + min-height: 100px; + padding-left: 10px; + display: flex; + align-items: center; + background: 25px center no-repeat; + background-size: auto 91px; + flex: 0 0 auto; +} + +header .logo { + background-position: -119px 0px; + width: 81px; + height: 100px; + transform: scale(0.9); + margin-right: 1rem; +} + +header .lb { + background: var(--primary-darker-fg); +} + +header .logo.lb { + background: #eaad81; +} + +header .title h1 { + font-weight: 500; + color: var(--primary-darker-fg); +} + +header aside { + flex: 2 1 auto; + display: flex; + flex-direction: column; + align-items: flex-end; + font-size: 0.8rem; + padding: 0.5rem 0.5rem; +} + +header aside a, +header aside button { + margin-left: 0.5rem; +} + +header aside p button { + margin-left: 0; +} + +/* + ===================== Nav ===================== +*/ + +nav { + background: var(--primary-bg); +} + +nav a, nav a:visited { + flex: 2 0 auto; + text-align: center; + font-weight: 300; + padding: 10px 10px 7px 10px; + border-bottom: 3px solid var(--primary-bg); + color: var(--primary-fg); +} + +nav a .lb { + background: var(--primary-fg); + display: inline-block; +} + +nav a.active { + border-bottom-color: var(--primary-link); +} + +@media screen and (max-width: 639px){ + nav { + font-size: 0.8em; + } +} + +/* + ===================== main ===================== +*/ + +main { + min-height: calc(100vh - 294px); +} + +.page-banner, +.page-banner .page-banner-real { + background-size: cover; + background-repeat: no-repeat; + background-position: center; + height: 150px; + width: 100%; + display: block; + position: relative; +} + +.page-banner-real { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.page-banner-title { + color: white; + text-align: right; + padding: 0.5rem 1rem; + font-size: 1.6rem; + flex: 2 1 auto; + text-shadow: 0 0 .3em #000; +} + +.actions { + padding: 0.5rem 1rem; + display: flex; +} + +.actions a { + margin-left: 0.375rem; +} + +main a, +main a:visited { + color: var(--link); +} + +main h5 { + padding: 0 0.5rem 0.5rem; + margin: 0 0 0.75rem; + border-bottom: 1px solid var(--seperator); + font-size: 1rem; +} + +main h2.title, +.main h2.title { + font-size: 1.4rem; + background: var(--title-bg); + color: var(--title-fg); + text-align: center; + font-weight: 400; + padding: 0.375rem; + line-height: 1.4rem; +} + +main .container { + flex: 2 1 auto; + margin: 1rem; +} + +main .cover { + position: relative; + display: block; +} + +main .cover.haspreview > img { + margin-bottom: 1rem; +} + +main .cover.haspreview picture { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +main .cover picture img { + margin-bottom: 1rem; + width: 100%; +} + +main button, +main input[type=submit] { + border: var(--button-border); + background: #ffad42; + color: #000; + align-self: center; + padding: 0.25rem 1rem; + margin: 1rem 0 2rem; +} + +@media screen and (max-width: 639px){ + main .container { + margin: 1rem 0.25rem; + } +} + +/* ************** aside ************** */ + +main aside { + padding: 0.375rem 1rem 0.5rem; + margin: 1rem; + font-size: 0.875rem; + flex: 0 0 250px; + background: var(--content-bg); + border: var(--content-border); +} + +main aside a { + display: block; +} + +main aside h5 { + margin: 0 -0.5rem 0.25rem; + font-size: 0.9em; +} + +main aside ul { + margin: 0 0 0.5rem; + padding-left: 1.5rem; +} + +main aside .asuna { + margin-top: 2rem; + width: 200px; + height: 461px; + background-position: 0 -150px; +} + +.nightmode main aside .asuna { + background-position: -200px -150px; +} + +.daymode .day { + display: block; +} + +@media screen and (max-width: 1000px){ + main aside { + flex: 0 0 200px; + } +} + +@media screen and (max-width: 639px){ + main aside { + margin: 1rem 0.25rem; + flex: 0 0 auto; + } + + main aside.frontpage { + order: 2; + } +} + + +/* ************** paginator ************** */ + +paginator { + display: flex; + justify-content: center; + width: 100%; +} + +paginator a { + color: var(--link); + cursor: pointer; +} + +paginator a, +paginator div { + display: block; + font-size: 0.8rem; + max-width: 80px; + flex-grow: 2; + text-align: center; + padding: 0.5rem; + margin-top: 1rem; +} + +/* ************** articleslim ************** */ + +articleslim { + display: flex; + margin-bottom: 0.75rem; + padding-right: 0.5rem; +} + +articleslim p.description { + font-size: 0.75rem; +} + +articleslim .cover { + flex: 0 0 124px; + margin-right: 0.75rem; +} + +articleslim .cover picture img, +articleslim .cover.haspreview > img { + margin-bottom: 0; +} + +articleslim a.nobg { + height: 70px; + background: var(--seperator); + display: block; +} + +articleslim a.title { + display: block; + margin-bottom: 0.375rem; +} + +/* ************** article ************** */ + +article { + background: var(--content-bg); + border: var(--content-border); + margin-bottom: 1rem; +} + +article .row { + margin: 1rem 0; + display: flex; +} + +article .cover { + flex: 0 0 auto; + margin-right: 1rem; + align-self: flex-start; +} + +article a.title { + flex: 0 0 100%; + margin-bottom: 0.5rem; +} + +article .description { + font-size: 0.875rem; + margin-bottom: 1rem; + padding: 0 0.25rem; +} + +article .meta { + font-size: 0.625rem; + line-height: 0.75rem; + color: var(--light); + font-weight: 500; + padding: 1.25rem 0.25rem 0; +} + +article:not(.fullsize) .cover.haspreview > img { + width: 400px; +} + +article.fullsize .row { + margin: 1rem; + flex-direction: column; +} + +article.fullsize .cover { + margin-right: 0; +} + +@media screen and (max-width: 1000px){ + article:not(.fullsize) .cover.haspreview > img { + width: calc(100vw - 265px); + } + + article .row { + flex-direction: column; + } + + article.fullsize .row { + margin: 1rem 0.25rem; + } + + article .cover { + margin-right: 0; + } +} + +@media screen and (max-width: 639px){ + article:not(.fullsize) .cover.haspreview > img { + width: calc(100vw - 10px); + } +} + +/* ************** fileinfo ************** */ + +fileinfo { + padding-left: 0.25rem; + margin-bottom: 0.5rem; + color: var(--light); + line-height: 1rem; + font-size: 0.75rem; + display: block; + position: relative; +} + +fileinfo.slim { + padding: 0; + margin: 0; +} + +fileinfo p span, +fileinfo p a { + margin-right: 0.25rem; +} + +fileinfo p a { + font-weight: 550; + padding-right: 0.25rem; + border-right: 1px solid var(--seperator); + display: inline-block; +} + +fileinfo p span { + font-weight: 700; +} + +fileinfo .trimmed { + padding: 0.25rem 0 0.25rem 1rem; +} + +fileinfo ul { + margin: 0.5rem 0; + padding-left: 1.5rem; +} + +/* + ===================== login ===================== +*/ + +.login--first { + flex: 0 0 170px; +} + +.login { + align-items: center; + font-size: 1rem; + padding: 1rem 1rem 2rem; + margin: 1rem; + max-width: 400px; +} + +.login .title { + font-size: 1.4rem; + font-weight: 200; + margin-bottom: 2rem; + text-align: center; +} + +.login input, +.login label { + width: 100%; + max-width: 300px; +} + +.login input[type=submit] { + min-width: 150px; + margin-top: 1rem; +} + +.login--asuna { + flex: 0 0 auto; + width: 180px; + height: 494px; + background-position: -400px 0; +} + +.nightmode .login--asuna { + background-position: -580px 0; +} + + +@media screen and (max-width: 1000px){ + .login--first { + display: none; + } +} + + +@media screen and (max-width: 639px){ + .login { + order: 2; + } + + .login--asuna { + max-width: 120px; + } +} + +/* + ===================== content ===================== +*/ + +.content :is(h1, h2, h3, h4, h5, ul, ol, blockquote, p) { + margin: 0 0 0.75rem; +} + +.content :is(h1, h2, h3, h4, h5) { + padding: 0 0.5rem 0.5rem; + border-bottom: 1px solid var(--seperator); +} + +.content :is(blockquote, pre) { + background: var(--bg-content-alt); + padding: 0.5rem; +} + +.content blockquote p { + margin: 0; +} + +/* + ===================== footer ===================== +*/ + +footer { + background: var(--footer-bg); + color: var(--footer-color); + min-height: 150px; + text-align: center; + padding: 1rem; + display: flex; + align-items: center; + font-weight: 500; + font-size: 0.625rem; +} + +footer .first { + flex: 0 0 119px; +} + +footer .middle { + display: flex; + flex-direction: column; + align-items: center; + flex: 2 1 auto; + padding: 0 2rem; +} + +footer .asuna { + flex: 0 0 119px; + height: 150px; + width: 119px; + background-position: 0px 0px; +} + +footer ul { + margin: 0 0 0.25rem; + padding: 0 0 0.25rem; + border-bottom: 1px solid var(--footer-seperator); + display: flex; + justify-content: center; + flex-wrap: wrap; + min-width: 300px; +} + +footer ul li { + padding: 0 0.25rem; + list-style-position: inside; +} + +footer a { + color: var(--footer-link); + margin: 0 0 0.25rem; +} + + +@media screen and (max-width: 1000px){ + footer .first { + display: none; + } +} + + +@media screen and (max-width: 639px){ + footer{ + flex-direction: column; + } + + footer .middle { + padding: 0 0 2rem; + } + + footer .asuna { + flex: 0 0 150px; + } +} + +/* + ===================== 404 page ===================== +*/ + +.not_found { + flex-direction: column; + text-align: center; +} + +.not_found .asuna { + width: 120px; + height: 444px; + margin: 2rem 0 0rem; + background-position: -760px 0; +} + +.nightmode .not_found .asuna { + background-position: -880px 0; +} diff --git a/nfp_moe/public/assets/img/favicon.png b/nfp_moe/public/assets/img/favicon.png index d8f76d33dc2c9b9a930bf8f03f2cb5d6ad0b3016..984f71ef5a7148ebc5a92564aa76f01917939ec2 100644 GIT binary patch delta 3024 zcmV;>3orDE7yB0>iBL{Q4GJ0x0000DNk~Le0000m0000m2m=5B0ASn+wUHr9e**we zOjJbx0053)UWr#*gj!^MVp@N0YM6F$mwN6#)n(Ti(kl&W6Y6d&y;G+n`_XZYt)-;)tPn6mv+sMaK(#k#EN6VhGf2k zXuOJJxQk!3iDa*ZU9*B!w}4u@e|%fIepR-5Rj_whtaDYbZ&9*zQnhtUs&!4NY)z+V zOQdT|p=C;&Wlf%IQJQd1mS|L!UsIG~OP63qonS?oTtS{yK9W~Gj#@*CQaX@LJdsQ< znp85JV>_K^M5b&+u4+fJY(=eQL#AIssA4#rMnIxEJgq`Nku*7tEH#N9enOl3v4=VaAwc#FA#bk!Hc1 zY0R2q(v)1uj#$TyR>gj1f3|>6zLs{wk$}vcgUh6V%c*qOqjcM$YvQMQ-=KZise#$B zdE~Nw>A8jP!-?g`iRaLW>DG|y$erlYr{%<|=Dnuuww&|0miNM*^~kCH(W&{-vijDz z``Wzu*TMJHzxL3(^vt*M(zf;3y7bz^`r5?$-NyRh$^7EV`{c~}f8)&j<<9))&;9Ao z{piyD?9=}5)%)?-{_@%X^xFUR-2eFB{P*Mk{p0`t?EnAr|Nr^_|Nr&+{`U6#_xSks z^z-uU=lAmC`t92B?b`0;+w$ko_2kU=>dyV;%KqZb{o%s?=D7Odv;Xn1{_Vm4^~L}G z(e2^M=Gw~H+REC~f7R8=&&C3g_%E8^yyzAPy`Q)Mg>Y4xdpW))uK~zY`P1So?Q|BEA@Uu?XKrKli2@NIzbr5ntA+SOc zLk5D11)@Mgg2u!m6eE`a-c~ITf`WEffdCR>A$TDq1C-$DZFX~rOgg1&sTyG_s1+AN zQK;4}>^vfu}ms~K*TUz zhH2AuRTY&$($n+?tUibdX$4dajYK2{z@jiL0guCJ^Zfh?;S2%}PhybWRmS$ZDnl@y zXyDNdfMFoIfXb$m2n3u^f(Z}jvcushdH|kF$72XMf5x<-&iv7MkSiFE*Tb-$K-A+Q z7M}{UiFkrmEWonE>DX{u2-`m(0em1vP~5Io=e-a7f`X|S5=%(L<4Ht_F9d)PfM>-< zg>wV2{)wx|Tx@tOmX4+8xeZ3M(PXXyfI(!7uz*!ULIIV;3m6lHF|1o(Lv~15@17 zAa8DMoem14zKN&vS!|d{g2en_Is+R(7v^9RME;xzR}~|iljFx(pXZ)7F9K5?Igd)g zu!S&>j|U(!n8wgz=@D94p0V}Y@+fXMMT|~h2SB3OU<#QbQ7kNY7Cau=gkxOdv@(`=fxO9Nx@te|y#Jmu z*IiGMpn!#gc&ZR`q(Y|5R(LWM@`Z&7r*Bu&a_3c(sinnaxA~x*JPQh!OCn;6BrGh% zR?#9A3PH%S%*>rT<+68uXJ*<>&YAX>fA;ov>lGzBSU$N72#J_2h=sL~HcJqrh;rq4 zWSNScnG4D%=JPG>ZI*V6#d4<4djWLW>B;`VYhhQUc*8CzNek`CiiuK@gH#^5Tqcvt zciw90=&+pW=;%0i?tI^b2jnw7^2zUI%3Mhj1g!%TR8ay6nXL54WpdBE2=c`Me~6wv zd%m-?v#a0RqsWxY7CgT96w8;##Y0fM7Q#mE;!CI$g-4-K$d~y{_FK_t7kcfrD?Ku~ zOyTAA#CzH0n51n0a3Ft1E|bX&UZ%`eDV5P+hSi2v7XW?F?7vu(`SU z)L^H5aX=qhj=tU=+rX(Nqp`vIB#tHec|xFClac;izoXAOU|Y;zaP)QCuKfMRUmOm* zb?{VkQ={WS97`a7klguWF%%C48X>i*I-?0 z3R=lqH8+sHFP%qfYK?cF&(A%do16dF9Rztfxjmi*!xG`9*AtE=C8L#^n!Hv0 zsq(vH<$Iq#pPvV!f8w!^I%^XThI#)7_|oKLDJZoxLsmOntDib?{lwUcwG~f4oS*+N zD@`5C=z`Q5wK_ezaq5VEs=Rji`iZHr+Pf8VbE~~~{4RnAv&1TR z!~Xya>{+crOWjyaB?cY|EFT&gx^``7Dym|x_}POj7LUi0e~5WWf+bJ`Z%LI((R@bq zF;ZYDY4u(-J=C}+l(go!uI#2N9td#+UnE=vhUz?YNhwlI#v7yWfwv-V?a)_4cgL;` z9|_%GP*JpYbW)Hcq~-Bp;S#8+rlx|Ml#-IBwqKbDBjCBU*QfTa2|YY?tpHcJZ%x6> zE1x)e^=c7Ye<)r8hEfzHzvF$Ut?fQHuz*{!H?**1|DoTEm4=t>Tb)1i<-^tb>O3Kh zANP9Gf$xC)7T^CktshOS+FuwNstYVG(iI;{M z^$9XEbN1eE14~MZi;H!Ig$26&1a5IfVA1{0ki(>Ee{LLxxdftXjwYohr)>EaL2jL% z@hu7jps28@u%MtIKk@kSLn~e)pOlddhu_{vi(dpg^ffGLO0x77f_(aT=A^E;qC!`! zE7Iu-^7FaRj;Gp#vTo2lO{?o((edS?j zVsf-x2>LIRx62VU S=ER5q0000_CX>@2HM@dakSAh-}000W&Nkla*gNYBM{_j@1xpI1Ne&folz9}Nl= z9#fP!>oE?NmS_2VqX*vO(e$?VIJ7v6F%!T80uU%AkxJsM!{hPRA*AHku~R4&Vr|Jr zZ;i!;dDd3fI4FU&mhRjFvfiv?eMx7gNwZZ$YJu|}B{fP(wAN^)7>ou)e~~7MBf>C5 zNP+X90*$qXFbc@B6deZC>J5^Lrq*bowWcr=gp{;9ZR(9WaU4>~QilB<m6Kb_82#?kdr6obA2ttig3IqgNW2`|bfs~Rc3TU=x&|yZBH9!P7 zCm9Zh7;BkMC&Xz;R!woze;_ySZ&Qska2_cS7G#ZOus3)zmxZBSuQMqo42J{8!x5zg zXG^@bc;~UU#9Bj=*2uC3LE2(>G-fy{um*Pbb|{LHz1=>(1cXOwjW))kmBKl9(AJUX zCArSgfksL}J}rsDgkm}+))KEYS*yd=!+SVu&`MDhB}zs#njNxwf0LkEBdjX&;Q%Q$ z#+Kj}`6OpFni8Q=N+Y))ZvzhJEY3NMF_fjnc|lPa^3pJ#+q$!>5ETt*27WVgt?ClK!iEK4mfPeCOYdvLY zkW%41l%*j~GEfm^f9aSMmPU6Lp<|2_1X0Fbe?+C;Wp-hiq}jpi7<7OLG%5^n9@4ae z_a18;WP7=qR~sTdoJR3Yo5K2`)2 zxkieB!dXHg@z!99DSA{GO6v&}c<+%?qNHL}!vB1D9T~*LVZyl7Z1zj;{?~`-?kwN< ztt*^+@ny#Of0X&d9dwd_l6WcE*&p-WfBHT@c;ihX9WhtUxcuyhGe>5yR$;>cya8j8 zorOh;qWt9t<&a8{=Oqufwn>tZXP-IE*7go)iM1Y#z!*iSV$w=RR&S8h>JWwaFoY=L zJKy^^-g@K5RCOJR;-yz#EyhB?c}o}wJ>6RDVdG9s!( zq)8Qxe?=ewgZBWM;jm!q{yl1;!0CYJUimU-U%15ouB{PGHkdd=)aYERR}!_=Tm3V= zb?+|Dd%PDYq482ut*2Bf6-NDCauM*=ul*(;z4I;=A&F+296Nf1Kx>4Q2=8&mfcM}X z(p!!nUZUzeRt9wI9gdwo$=rOEAOGVgI9Jk~e_sw#slL4~^lQ4my8~fBy;{S22MVk! zXwDsBbGt_nhg`Yz1!}bbTN=(^x@9A}O$po^T`4@s?J^@De*c#Cu1WYyaK(Nkya zTmSrbuWM|H(u(oKP>Up5SSEu3Z@%%LT>b6e!SCHCi6ig|5r#;m4npbyA&^2q6yX5r z96}4sWJ02$7)`+!jLMR|tqqhCl+F*2f1WyH0hW%h9Mckk_L|+j0qt%RXD#(8<&E#Y z$#87=gFpOTL=}{Ch%kU8#s>ici36;2XdOT$0PDaQq%IL*K$OOKG&gSE#R`cRl0ZrS zODkdJg`d4B+1M3Ks)BH;5wY46D%?Sll zCL=?V285Ahxl^H{6YNf(-oL!f_kQ>uzwsyE#`|eX^vao?1HD6ruWz zCu2Un{(xrd1RFOV^2vMuLAJkze+&iQIh?b>{{tusM}Q_$j{UuyN){7E9%T!Z4k!wX zD?kh^-~aY^@PGUb=Gzjnw*|4LHPd0RyT`rZK3Q8+t*5l=h9CaJ-?RSTt1KRhA=G&3 z@!sQ|4}TRv9zMK8EH$%Pg~z=?%Wf9C;d6c7kQ{`r8%n>z@lXwBEjR7^XI=`79i%ImLj z^4tmqlA^Rs$|=<_%0Kgnrv2dWBqs$#aR>!AJTFb|2&n_XfVw_KDFDwy- z5qq2KuRZ~AK-f&!e?~C!p5DDa`-74oim<|Cy~Y|(z0;*Oe~5`!gw-}Oj1dZibO>b- zlxPGZNLb(M(>?YAorR-}wzr8w%_uj_o_YqUL&`_%D_fhJ5?xW2VFHE`XFiKsbp&U~-Ql;NinZRH_yF`2f{ua{T;x z?yo&yce_uNR!Qq~Y)=x_`VAh76(-3uy!+D)-hT5_9t|>a^GdbIE;A*gg0 z{-S;2na?66e_8+d{U4QO-jNXDoW|oYQ-cFx;OBsP@P=a;EAn^fbJN2~Yv`8)4$ z>*v?#tv^P0S8z*bX|G)3;e!d~BZo8ri^ooqRBGToJ6jug0TS0$VMQ&hJp1P!&G_DD zE91SbZ%Ki|dPR{N0xb1ZQc;@S-F>pf87ebfk~Bpre}$HU?Ou;NA6%oFW(2NaI^1XN z)*3AqHPiV}#heC$snL`@Zk{zE98eR{!s*I~e|-AJBE`RMoBJ)OPBe zQ$HWTqOP@J#@WuF_Klyb0&o{>II~j(ml=ZR(l`3VGq_ zr(b&N<#_jl>dJS2xIz+p-hJh$`w=n9eWPr5e@BdVzayIDTW`6=Z4=|%m&Hfjk4aX; zO`A7wx{-&xa}DNj|F5*(J#J9;y?o&5r;~U6^uSZkzx?>i2VQu7_1!n#x#{J{pSjy| z=ca>Cz5Mw8$6tQ@ZVMW5?H~DT*J8R~Z$A9gV#~8nJ^s^|lV5!P8TW_kW_O3WSxj;p z&3j!8e-OV0KV`wcg#7ps)vo!YeEVO>S9w!9{83JDV3|6&0FNxdHy7Z$9CGKYZ-JRz zje3N6Z~^*tXjy3Cl5rhh?bG4bw{*DuejR@AAsz1SUx0Hu{Jy#Xmo32SbokIh`lnvd zao5Y=)IG-*TKn5_9sghnY zzDqAheAdlzm-wdMGVzc1>IpLcp~I%K+FCH0RwOrmZ@Cw)^Vx%A`rbo^Ml z4*%@b;s5?dhc(M}IChjnSqu_%339|cdO*Zk9oqk-!+F>l1o{=V>4Ue`}Er-~WpaGxzDR z``0=Q=`AtD+{1B0%y)E{a9M}9d{2kp(J5(o>c4f|m8HYqCF$_f4|(~5p~R{Ow4Bpn zd*=e2)M1C-XNGZoFd2gX!NZL!({z{|tHXQm(&6*}ro-RslrdhR*(C_Zs=@`>xBv&K z{S@KX1FH2=Z|rzU$0wfR(4>ZSxK<~z>04$Uf4*6VZ*AA%2h%z{m$CqNF2F|?V6P6Z zyrIL=eY||Z)UMaeG&{f}RO>HvxUOD@DQ!CZ=5KZQ@I4DqC%yXcJ{^CC)($~XUHTYO z-+NWZ|8ic3m$&J#;7c90x%9qJXS#TR*>XUKwyio`Ua|mNbhzmY9p0a(!-sW>m|y&f zj{oPAI{aWvhnE)e%gfdAmREE*qK_quOYG(W7Evdi#lduZqfQCS9eT|z--y%0A1&75 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 {{? }} - - - + + + + - -
-
+ +
+ {{ if (banner) { }} +
+ {{ } }} + {{ if (type === 'page' || type === 'page_with_children') { }} +
+
+

+
+ {{ } }} +
+ {{ if (type === 'page_with_children' || type === 'frontpage') { }} + + {{ } }} + {{ if (type === 'frontpage') { }} +
+
+

+
+
+
+
 
+
+
+
+
+
+
+
+
+
+

+
+
+
+
 
+
+
+
+
+
+
+
+
+
+ {{ } else if (type === 'page' || type === 'page_with_children') { }} +
+ {{ if (media) { }} +
+ {{ } }} +
+ + +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+
+ {{ } else if (type === 'article') { }} +
+ +
+

+
+ {{ if (media) { }} +
+ {{ } }} +
+
+
+
+
+
+

 

+ +
+
    +
  • +
  • +
+
+
+
+
+ {{ } }} +
+
+
+
+
+
+
+
+
+