ckn.backend
Version:
CKN Framework for Backend
61 lines (52 loc) • 1.94 kB
JavaScript
import {ckn} from 'ckn.core';
import {Middleware} from "../core/Middleware.js";
import {File} from "ckn.stream";
class ViewEngineMiddleware extends Middleware {
static #viewDirectories = [];
constructor() {
super();
this.priority = 10;
this.views = [];
this.viewFolder = 'views';
}
changeViewFolder(path) {
this.viewFolder = path;
return this;
}
async onInitialEngine(backend) {
}
async onStartingServer(backend, next) {
await this.onInitialEngine(backend);
if (this.viewFolder != null && this.viewFolder.trim() != "") {
ViewEngineMiddleware.#viewDirectories.push(this.viewFolder);
}
if (backend.modules != null) {
for (let application of backend.modules.values()) {
ViewEngineMiddleware.#viewDirectories = ViewEngineMiddleware.#viewDirectories.union(application.views);
}
}
if (backend.themes != null) {
for (let theme of backend.themes.values()) {
let viewDirectory = File.join(theme.path, "views");
ViewEngineMiddleware.#viewDirectories.push(viewDirectory);
}
}
ViewEngineMiddleware.#viewDirectories = ViewEngineMiddleware.#viewDirectories.distinct();
backend.server.set("views", ViewEngineMiddleware.#viewDirectories);
this.log.info("[OK]", this.constructor.name + " View Engine has been set.");
next();
}
async onInitialSession(backend, session, next) {
session.render = async (view, data) => {
if (view == null) next();
if (typeof view === "string") {
session.response.render(view, data);
} else if (view.render != null) {
let html = await view.render();
session.send(html);
}
}
next();
}
}
export {ViewEngineMiddleware}