@edenjs/cli
Version:
Web Application Framework built on Express.js, Redis and RiotJS
203 lines (179 loc) • 7.1 kB
JavaScript
// bind dependencies
const config = require('config');
const Controller = require('controller');
/**
* build $${model.charAt(0).toUpperCase() + model.slice(1).toLowerCase()} controller
*
* @mount /
*/
class $${model.charAt(0).toUpperCase() + model.slice(1).toLowerCase()}Controller extends Controller {
/**
* construct Design controller
*/
constructor() {
// run super
super();
// bind build methods
this.build = this.build.bind(this);
// build $${model.toLowerCase()} controller
this.building = this.build();
}
// ////////////////////////////////////////////////////////////////////////////
//
// BUILD METHODS
//
// ////////////////////////////////////////////////////////////////////////////
/**
* build $${model.toLowerCase()} controller
*
* @return {Promise}
*/
async build() {
// use router
this.eden.router.use(async (req, res, next) => {
// set header
let fa = '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no, minimum-scale=1, user-scalable=no">';
fa += '<link rel="manifest" href="/manifest.json">';
fa += `<link rel="icon" type="image/x-icon" href="${config.get('cdn.url') || '/'}public/assets/icons/favicon.ico">`;
fa += '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
fa += '<meta name="apple-mobile-web-app-capable" content="yes">';
// set icons
fa += '<link rel="manifest" href="/manifest.json">';
fa += '<meta name="theme-color" content="#ffffff">';
fa += '<meta name="msapplication-TileColor" content="#ffffff">';
fa += `<link rel="icon" type="image/png" sizes="16x16" href="${config.get('cdn.url') || '/'}public/assets/icons/favicon-16x16.png">`;
fa += `<link rel="icon" type="image/png" sizes="32x32" href="${config.get('cdn.url') || '/'}public/assets/icons/favicon-32x32.png">`;
fa += `<link rel="icon" type="image/png" sizes="96x96" href="${config.get('cdn.url') || '/'}public/assets/icons/favicon-96x96.png>`;
fa += `<link rel="icon" type="image/png" sizes="192x192" href="${config.get('cdn.url') || '/'}public/assets/icons/android-icon-192x192.png">`;
fa += `<meta name="msapplication-TileImage" content="${config.get('cdn.url') || '/'}public/assets/icons/ms-icon-144x144.png">`;
fa += `<link rel="apple-touch-icon" sizes="57x57" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-57x57.png">`;
fa += `<link rel="apple-touch-icon" sizes="72x72" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-72x72.png">`;
fa += `<link rel="apple-touch-icon" sizes="76x76" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-76x76.png">`;
fa += `<link rel="apple-touch-icon" sizes="114x114" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-114x114.png">`;
fa += `<link rel="apple-touch-icon" sizes="120x120" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-120x120.png">`;
fa += `<link rel="apple-touch-icon" sizes="144x144" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-144x144.png">`;
fa += `<link rel="apple-touch-icon" sizes="152x152" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-152x152.png">`;
fa += `<link rel="apple-touch-icon" sizes="180x180" href="${config.get('cdn.url') || '/'}public/assets/icons/apple-icon-180x180.png">`;
// set footer
let ft = '';
// set head
res.locals.page.head = (res.locals.head || '') + fa;
res.locals.page.script = (res.locals.page.script || '') + ft;
// add footer placements
req.placement('footer');
// run next
next();
});
}
// ////////////////////////////////////////////////////////////////////////////
//
// ROUTE METHODS
//
// ////////////////////////////////////////////////////////////////////////////
/**
* Index action
*
* @param {Request} req
* @param {Response} res
*
* @name HOME
* @route {get} /
* @menu {MAIN} Home
* @priority 10
*/
async indexAction(req, res) {
// do home placement
req.placement('home');
// render Page
res.render('home');
}
// ////////////////////////////////////////////////////////////////////////////
//
// INFORMATION METHODS
//
// ////////////////////////////////////////////////////////////////////////////
/**
* Manifest action
*
* @param {Request} req
* @param {Response} res
*
* @route {get} /manifest.json
*/
async manifestAction(req, res) {
// return JSON
res.json({
name : '$${model}',
icons : [
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-36x36.png`,
type : 'image/png',
sizes : '36x36',
density : '0.75',
},
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-48x48.png`,
type : 'image/png',
sizes : '48x48',
density : '1.0',
},
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-72x72.png`,
type : 'image/png',
sizes : '72x72',
density : '1.5',
},
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-96x96.png`,
type : 'image/png',
sizes : '96x96',
density : '2.0',
},
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-144x144.png`,
type : 'image/png',
sizes : '144x144',
density : '3.0',
},
{
src : `${config.get('cdn.url') || '/'}public/assets/icons/android-icon-192x192.png`,
type : 'image/png',
sizes : '192x192',
density : '4.0',
},
],
});
}
/**
* Config action
*
* @param {Request} req
* @param {Response} res
*
* @route {get} /browserconfig.xml
*/
async browserConfigAction(req, res) {
// send xml response
res.send(`
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="${config.get('cdn.url') || '/'}public/assets/icons/ms-icon-70x70.png" />
<square150x150logo src="${config.get('cdn.url') || '/'}public/assets/icons/ms-icon-150x150.png" />
<square310x310logo src="${config.get('cdn.url') || '/'}public/assets/icons/ms-icon-310x310.png" />
<TileColor>#ffffff</TileColor>
</tile>
</msapplication>
</browserconfig>
`);
// end response
res.end();
}
}
/**
* export $${model.charAt(0).toUpperCase() + model.slice(1).toLowerCase()} controller
*
* @type {$${model.charAt(0).toUpperCase() + model.slice(1).toLowerCase()}Controller}
*/
exports = module.exports = $${model.charAt(0).toUpperCase() + model.slice(1).toLowerCase()}Controller;