From 0720e3c5838209512d7c793508c4a04c1ac6e18d Mon Sep 17 00:00:00 2001 From: HerrHase Date: Tue, 2 Aug 2022 09:27:07 +0200 Subject: [PATCH] using now defaultContext to extend eta templates, adding etaHelper --- .../frontend/views/templates/page/blog.eta | 9 +- .../frontend/views/templates/page/default.eta | 2 +- packages/server/_bootstrap.js | 28 ++--- packages/server/eta/injectStore.js | 14 --- packages/server/eta/isHome.js | 18 ---- packages/server/eta/parseMarkdown.js | 18 ---- packages/server/eta/templateClass.js | 15 --- packages/server/helpers/eta.js | 101 ++++++++++++++++++ packages/server/stores/page.js | 1 + 9 files changed, 122 insertions(+), 84 deletions(-) delete mode 100644 packages/server/eta/injectStore.js delete mode 100644 packages/server/eta/isHome.js delete mode 100644 packages/server/eta/parseMarkdown.js delete mode 100644 packages/server/eta/templateClass.js create mode 100644 packages/server/helpers/eta.js diff --git a/packages/frontend/views/templates/page/blog.eta b/packages/frontend/views/templates/page/blog.eta index 896425e..61670ee 100644 --- a/packages/frontend/views/templates/page/blog.eta +++ b/packages/frontend/views/templates/page/blog.eta @@ -1,11 +1,12 @@ -{% layout('layout') %} +{{# layout('layout') }} -{{# const posts = await it.injectStore('post') }} +{{# const store = await it.injectStore('post') }} +{{# const posts = await store.find() }} -{{# if posts.data.length > 0 }} +{{# if (posts.data && posts.data.length > 0) { }} {{# posts.data.forEach((post) => { }} {{ post.title }} - {{ marked.parse(page.data.content) }} + {{! it.marked.parse(post.teaser_content) }} {{# }) }} {{# } else { }} diff --git a/packages/frontend/views/templates/page/default.eta b/packages/frontend/views/templates/page/default.eta index 92f7600..9d81c35 100644 --- a/packages/frontend/views/templates/page/default.eta +++ b/packages/frontend/views/templates/page/default.eta @@ -4,7 +4,7 @@
- {{! it.parseMarkdown(it.page.data.content) }} + {{! it.marked.parse(it.page.data.content) }}
diff --git a/packages/server/_bootstrap.js b/packages/server/_bootstrap.js index 1c258a2..66fa930 100644 --- a/packages/server/_bootstrap.js +++ b/packages/server/_bootstrap.js @@ -17,14 +17,26 @@ const server = fastify() import * as Eta from 'eta' import view from '@fastify/view' +import { asset, templateClass, isHome, injectStore } from './helpers/eta.js' +import { marked } from 'marked' server.register(view, { engine: { eta: Eta - }, + root: path.join(path.resolve(), '/../frontend/views'), extname: '.eta', + + // adding function to templates + defaultContext: { + asset: asset, + templateClass: templateClass, + isHome: isHome, + injectStore: injectStore, + marked: marked + }, + options: { tags: [ '{{', '}}' ], includeViewExtension: true, @@ -46,24 +58,12 @@ server.register(view, { import SettingsStore from './stores/settings.js' -import templateClass from './eta/templateClass.js' -import isHome from './eta/isHome.js' -import injectStore from './eta/injectStore.js' -import parseMarkdown from './eta/parseMarkdown.js' - - // getting options from directus add to all views server.addHook('preHandler', async function (request, response) { const settingsStore = new SettingsStore() const settings = await settingsStore.find() - response.locals = { - settings: settings, - templateClass: templateClass, - isHome: isHome, - injectStore: injectStore, - parseMarkdown: parseMarkdown - } + response.locals.settings = settings }) // check url for paged diff --git a/packages/server/eta/injectStore.js b/packages/server/eta/injectStore.js deleted file mode 100644 index b462afc..0000000 --- a/packages/server/eta/injectStore.js +++ /dev/null @@ -1,14 +0,0 @@ -import slugify from 'slugify' - -/** - * - * - * - */ - -export default async function injectStore(name) { - const StoreClass = await import('./../stores/' + name + '.js') - const store = new StoreClass.default() - - return await store.find() -} \ No newline at end of file diff --git a/packages/server/eta/isHome.js b/packages/server/eta/isHome.js deleted file mode 100644 index 95429f5..0000000 --- a/packages/server/eta/isHome.js +++ /dev/null @@ -1,18 +0,0 @@ -import slugify from 'slugify' - -/** - * - * - * - */ - -export default function isHome(entity) { - - let result = false - - if (entity.data && entity.data.permalink && entity.data.permalink === "/") { - result = true - } - - return result -} \ No newline at end of file diff --git a/packages/server/eta/parseMarkdown.js b/packages/server/eta/parseMarkdown.js deleted file mode 100644 index 8c8d59e..0000000 --- a/packages/server/eta/parseMarkdown.js +++ /dev/null @@ -1,18 +0,0 @@ -import { marked } from 'marked' - -/** - * - * - * - */ - -export default function parseMarkdown(value) { - - let result = '' - - if (value) { - result = marked.parse(value) - } - - return result -} \ No newline at end of file diff --git a/packages/server/eta/templateClass.js b/packages/server/eta/templateClass.js deleted file mode 100644 index 6cdc9c6..0000000 --- a/packages/server/eta/templateClass.js +++ /dev/null @@ -1,15 +0,0 @@ -import slugify from 'slugify' - -/** - * - * - * - */ - -export default function templateClass(entity, prefix = 'page') { - if (entity.data && entity.data.template) { - prefix += '-' + entity.data.template - } - - return prefix -} \ No newline at end of file diff --git a/packages/server/helpers/eta.js b/packages/server/helpers/eta.js new file mode 100644 index 0000000..f7443a2 --- /dev/null +++ b/packages/server/helpers/eta.js @@ -0,0 +1,101 @@ +import slugify from 'slugify' +import { marked } from 'marked' +import * as fs from 'fs' + +/** + * etaHelpers + * + * collection for helpers to extend eta + * + * + */ + +/** + * asset - + * + * @param {String} path + * @param {String} [prefix='/public'] + * + */ +function asset(path, prefix = '/public') +{ + // getting basePath + const basePath = path + + // path to mix-manifest + file = basePath + 'mix-manifest.json'; + + if (!fs.existsSync(file)) { + //const manifest = file_get_contents($file); + //const files = json_decode(manifest, true); + + //if (files[prefix + path]) { + // path = str_replace(prefix, '', files[prefix + path]); + //} + } + + return path +} + +/** + * templateClass - parse template name to css-classname, + * use prefix, default is "page" + * + * @param {Object} entity + * @param {String} [prefix='page'] + * @return {String} + * + */ +function templateClass(entity, prefix = 'page') { + if (entity.data && entity.data.template) { + prefix += '-' + entity.data.template + } + + return prefix +} + + +/** + * isHome - check if entity is home, + * checks for permalink + * + * @param {Object} entity + * @return {Boolean} + * + */ +function isHome(entity) { + + let result = false + + if (entity.data && entity.data.permalink && entity.data.permalink === "/") { + result = true + } + + return result +} + + +/** + * injectStore + * + * + * @param {String} name + * @return {Object} + * + */ +async function injectStore(name) { + + const path = './../stores/' + name + '.js' + + // if file + //if (!fs.existsSync(path)) { + //throw new Error(name + ' not exists!') + //} + + const StoreClass = await import(path) + const store = new StoreClass.default() + + return store +} + +export { asset, templateClass, isHome, injectStore } \ No newline at end of file diff --git a/packages/server/stores/page.js b/packages/server/stores/page.js index 21d0769..4fb43fb 100644 --- a/packages/server/stores/page.js +++ b/packages/server/stores/page.js @@ -32,6 +32,7 @@ class PageStore extends DirectusAbstractStore { 'title', 'status', 'permalink', + 'template', 'meta', 'content' ],