patternplate-server
Version:
Programmatically serve atomic patterns via a REST API
56 lines (44 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = layout;
function layout(props) {
const styleRefs = (props.reference.style || []).filter(isReference);
const scriptRefs = (props.reference.script || []).filter(isReference);
return `<!doctype html>
<html>
<head>
<title>${props.title}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
${styleRefs.filter(isAbsolute).map(style => `<link rel="stylesheet" href="/api/resource/${style.id}.css">`).join('\n')}
${styleRefs.filter(isRelative).map(style => `<link rel="stylesheet" href="${style.uri || style.id}">`).join('\n')}
${(props.content.style || []).map(style => style.wrap === false ? style.content : `<style>${style.content}</style>`).join('\n')}
${(props.reference.markup || []).map(m => `<link rel="m" href="/api/resource/${m.uri}.html">`).join('\n')}
</head>
<body>
${(props.content.markup || []).map(markup => markup.content).join('\n')}
${scriptRefs.filter(isAbsolute).map(script => `<script src="/api/resource/${script.id}.js"></script>`).join('\n')}
${scriptRefs.filter(isRelative).filter(script => Boolean(script.uri || script.id)).map(script => `<script src="${script.uri || script.id}"></script>`).join('\n')}
${props.content.script || [].filter(Boolean).filter(script => Boolean(script.content)).map(script => script.wrap === false ? script.content : `<script>${script.content}</script>`).join('\n')}
</body>
</html>
`;
}
function isAbsolute(reference) {
return !isRelative(reference) && !hasUri(reference);
}
function isReference(reference) {
return 'id' in reference || 'uri' in reference;
}
function isRelative(reference) {
return (reference.id || '').charAt(0) === '.' || hasUri(reference);
}
function hasUri(reference) {
return 'uri' in reference;
}
module.exports = exports['default'];