mission.template
Version:
mission template for template engine
76 lines (75 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const bwipjs = require("bwip-js");
const fs_1 = require("fs");
const Handlebars = require("handlebars");
require("handlebars");
const _ = require("lodash");
const path_1 = require("path");
class Template {
static compile(template, data, compileOptions) {
return Handlebars.compile(template, compileOptions)(data);
}
static register(key, fn) {
return Handlebars.registerHelper(key, fn);
}
static unRegister(key) {
Handlebars.unregisterHelper(key);
}
static registerDefaultApi() {
Template.register('_', (...param) => {
const method = param[0];
const last = param.length - 2;
const input = _.chain(param).drop(1).take(last > 0 ? last : 0).value();
return _[method](input);
});
/*
<img src="{{barcode data.MRN}}" />
*/
Template.register('barcode', (...param) => {
const api = require('deasync')(bwipjs.toBuffer);
const data = param[0];
const bcid = param[1] || 'code39';
const img = api({
bcid,
height: 10,
includetext: true,
scale: 3,
text: data,
textfont: 'Inconsolata',
textsize: 13,
textxalign: 'center',
});
const buffer = img.toString('base64');
return 'data:image/png;base64,' + buffer;
});
/*
ex1: {{include '/Templates/assets/css/core.css'}}
ex2: {{{include '/Templates/common/header.tpl.html' 'tpl'}}}
ex3: <img src="{{include '/Templates/assets/images/logo.png' 'img'}}" />
*/
Template.register('include', (...param) => {
const path = param[0];
const fullPath = path_1.resolve(__dirname, '../..' + path);
if (fs_1.existsSync(fullPath)) {
let response;
const type = param[1];
switch (type) {
case 'img':
response = 'data:image/png;base64,' + fs_1.readFileSync(fullPath, 'base64');
break;
case 'tpl':
const tpl = fs_1.readFileSync(fullPath, 'utf-8');
const opt = param[param.length - 1];
response = Template.compile(tpl, opt.data.root);
break;
default:
response = fs_1.readFileSync(fullPath, 'utf-8');
break;
}
return response;
}
});
}
}
exports.Template = Template;