You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.2 KiB
157 lines
3.2 KiB
// display-engine.js
|
|
// Copyright (C) 2022 DTP Technologies, LLC
|
|
// License: Apache-2.0
|
|
|
|
'use strict';
|
|
|
|
const path = require('path');
|
|
|
|
const pug = require('pug');
|
|
const uuidv4 = require('uuid').v4;
|
|
|
|
const { SiteService, SiteError } = require('../../lib/site-lib');
|
|
|
|
class DisplayList {
|
|
|
|
constructor (service, name) {
|
|
this.name = name;
|
|
this.id = uuidv4();
|
|
this.commands = [ ];
|
|
}
|
|
|
|
showNotification (message, status, pos, timeout) {
|
|
this.commands.push({
|
|
action: 'showNotification',
|
|
params: { message, status, pos, timeout },
|
|
});
|
|
}
|
|
|
|
showModal (html) {
|
|
this.commands.push({
|
|
action: 'showModal',
|
|
params: { html },
|
|
});
|
|
}
|
|
|
|
closeModal ( ) {
|
|
this.commands.push({
|
|
action: 'closeModal',
|
|
params: { },
|
|
});
|
|
}
|
|
|
|
addElement (selector, where, html) {
|
|
this.commands.push({
|
|
selector, action: 'addElement',
|
|
params: { where, html },
|
|
});
|
|
}
|
|
|
|
setTextContent (selector, text) {
|
|
this.commands.push({
|
|
selector, action: 'setTextContent',
|
|
params: { text },
|
|
});
|
|
}
|
|
|
|
setInputValue (selector, value) {
|
|
this.commands.push({
|
|
selector, action: 'setInputValue',
|
|
params: { value },
|
|
});
|
|
}
|
|
|
|
replaceElement (selector, html) {
|
|
this.commands.push({
|
|
selector, action: 'replaceElement',
|
|
params: { html },
|
|
});
|
|
}
|
|
|
|
removeElement (selector) {
|
|
this.commands.push({
|
|
selector, action: 'removeElement',
|
|
params: { },
|
|
});
|
|
}
|
|
|
|
setAttribute (selector, name, value) {
|
|
this.commands.push({
|
|
selector, action: 'setAttribute',
|
|
params: { name, value },
|
|
});
|
|
}
|
|
|
|
removeAttribute (selector, name) {
|
|
this.commands.push({
|
|
selector, action: 'removeAttribute',
|
|
params: { name },
|
|
});
|
|
}
|
|
|
|
addClass (selector, add) {
|
|
this.commands.push({
|
|
selector, action: 'addClass',
|
|
params: { add },
|
|
});
|
|
}
|
|
|
|
removeClass (selector, remove) {
|
|
this.commands.push({
|
|
selector, action: 'removeClass',
|
|
params: { remove },
|
|
});
|
|
}
|
|
|
|
replaceClass (selector, remove, add) {
|
|
this.commands.push({
|
|
selector, action: 'replaceClass',
|
|
params: { remove, add },
|
|
});
|
|
}
|
|
|
|
navigateTo (href) {
|
|
this.commands.push({
|
|
action: 'navigateTo',
|
|
params: { href },
|
|
});
|
|
}
|
|
|
|
reload ( ) {
|
|
this.commands.push({
|
|
action: 'reload',
|
|
params: { },
|
|
});
|
|
}
|
|
}
|
|
|
|
class DisplayEngineService extends SiteService {
|
|
|
|
constructor (dtp) {
|
|
super(dtp, module.exports);
|
|
this.templates = { };
|
|
}
|
|
|
|
loadTemplate (name, pugScript) {
|
|
const scriptFile = path.join(this.dtp.config.root, 'app', 'views', pugScript);
|
|
this.templates[name] = pug.compileFile(scriptFile);
|
|
}
|
|
|
|
executeTemplate (name, data) {
|
|
if (!this.templates[name]) {
|
|
this.log.error('view engine template undefined', { name });
|
|
throw new SiteError(500, 'Unknown display engine template');
|
|
}
|
|
data = Object.assign(this.dtp.app.locals, data);
|
|
return this.templates[name](data);
|
|
}
|
|
|
|
createDisplayList (name = 'default') { return new DisplayList(this, name); }
|
|
}
|
|
|
|
module.exports = {
|
|
logId: 'svc:display-engine',
|
|
index: 'displayEngine',
|
|
className: 'DisplayEngineService',
|
|
create: (dtp) => { return new DisplayEngineService(dtp); },
|
|
};
|