hatchyt
Version:
Hatch your next idea.
90 lines (70 loc) • 3.54 kB
JavaScript
;
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