UNPKG

hatchyt

Version:
90 lines (70 loc) 3.54 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = publish; exports.parseRoot = parseRoot; var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _stylus = require('stylus'); var _stylus2 = _interopRequireDefault(_stylus); var _uglifyJs = require('uglify-js'); var _uglifyJs2 = _interopRequireDefault(_uglifyJs); var _database = require('../database'); var _database2 = _interopRequireDefault(_database); var _utilities = require('../../shared/utilities'); var _path = require('path'); var _path2 = _interopRequireDefault(_path); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var templatesPath = _path2.default.join(__dirname, '..', 'templates'); var bundledScript = _fs2.default.readFileSync(_path2.default.join(templatesPath, 'bundledScript.js'), { encoding: 'utf-8' }); function saveSite(req) { return function (err) { if (err) console.log(err); _database2.default.run('UPDATE sites SET markup = ?, script = ?, style = ?, title = ?, config = ? WHERE id = ?', [req.body.markup, req.body.script, req.body.stylesheet, req.body.title, req.body.config, req.body.id]); }; } function publish(req, res) { res.end('published.'); var settings = JSON.parse(req.body.config); var title = req.body.title || ''; var stylesheets = (0, _utilities.thirdPartyStyles)(JSON.stringify(settings.extraCSS)); var html = req.body.markup; var scripts = (0, _utilities.thirdPartyScripts)(JSON.stringify(settings.extraScripts)); // add style templates (only checked tempaltes are saved, so no need to filter) // TODO: lookup templates from DB so we can get changes, pre-req: edit templates var styleTemplates = settings.cssTemplates.map(function (x) { return x.text; }).join(''); var scriptTemplates = settings.scriptTemplates.map(function (x) { return x.text; }).join('\n'); var js = _uglifyJs2.default.minify('(function(){' + bundledScript + '\n' + scriptTemplates + '\n' + req.body.script + '\n}())', { fromString: true }).code; _stylus2.default.render(req.body.stylesheet, { filename: 'building.css', compress: true }, function (err, css) { if (err) css = '/* Error building style: ' + err.toString() + ' */'; var output = renderHTML(title, styleTemplates + css, stylesheets, html, scripts, js).replace(/\n/g, ''); var domain = parseRoot(req.body.domain); _fs2.default.writeFile('.hatchyt/output/' + domain + '/index.html', output, saveSite(req)); }); } function parseRoot(domain) { // check if domain is a root domain (naked, or www) domain = domain.toLowerCase(); var ret = {}; if (/^www\./.test(domain)) { ret.domain = domain.substring(4); ret.www = true; } else if (2 === domain.split('.').length) { ret.domain = domain; ret.naked = true; } ret.toString = function () { return this.domain; }; return ret; } // builds the markup for the page function renderHTML(title, css, stylesheets, html, scripts, js) { return '<!doctype html>\n<html><head><title>' + title + '</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" /><meta charset="utf-8" />\n<style>' + css + 'form._h-sign input[name="name"]{display: none;}</style>\n' + stylesheets + '\n</head>\n<body>' + html + scripts + '\n<script type="text/javascript">' + js + '</script>\n</body></html>'; } //# sourceMappingURL=publish.js.map