efgh
Version:
Echomail in Fidonet: generator of headers.
95 lines (85 loc) • 2.92 kB
JavaScript
var path = require('path');
var escapeHTML = require('lodash.escape');
var extend = require('extend');
var pad = require('underscore.string/pad');
var defaults = {
nodelist: false,
avatarWidth: 140,
messageHTML: false
};
var dtArrayToString = dtArray => [
dtArray[0], '-',
pad(dtArray[1], 2, '0'), '-',
pad(dtArray[2], 2, '0'),
' ',
pad(dtArray[3], 2, '0'), ':',
pad(dtArray[4], 2, '0'), ':',
pad(dtArray[5], 2, '0')
].join('');
var TheSynchronousInterface = settings => {
var options = extend(true, {}, defaults, settings);
if( Array.isArray(options.origTime) ){
options.origTime = dtArrayToString(options.origTime);
}
if( Array.isArray(options.procTime) ){
options.procTime = dtArrayToString(options.procTime);
}
// Rows:
// 1) from (with an address and a city), time
// 2) to, time
// 3) (OPTIONAL) FGHI URL
// 4) subject
var rowCount = 4;
if( typeof options.URL === 'undefined' ) rowCount--;
var escapedURL = escapeHTML(options.URL);
return [
'<table class="table table-bordered table-condensed">',
'<tr>',
'<th rowspan=' + rowCount + ' class="avatar inverse" width=1 ',
'style="background-image: url(', escapeHTML(options.avatarURL),
');">',
'<div style="width: ' + options.avatarWidth + 'px;">',
' ',
'</div>',
'</th>',
'<th class="inverse">From</th>',
'<td>' + escapeHTML(options.from) + '</td>',
'<td>' + escapeHTML(options.origAddr) + '</td>',
'<td width=1><nobr>' + options.origTime + '</nobr></td>',
'</tr>',
'<tr>',
'<th class="inverse">To</th>',
(
typeof options.procTime === 'undefined'
) ? '<td colspan=3>' : '<td colspan=2>',
escapeHTML(options.to) + '</td>',
(
typeof options.procTime === 'undefined'
) ? '' : (
'<td width=1><nobr>' + options.procTime + '</nobr></td>'
),
'</tr>',
( typeof options.URL === 'undefined' ) ? '' : [
'<tr>',
'<th class="inverse" nowrap>FGHI URL</th>',
'<td colspan=3>',
`<a href="${escapedURL}">${escapedURL}</a>`,
'</td>',
'</tr>'
].join(''),
'<tr>',
'<th class="inverse">Subj</th>',
'<td colspan=3>' + escapeHTML(options.subj) + '</td>',
'</tr>',
( options.messageHTML === false ) ? '</table>' : [
'<tr><td colspan=5 class="messageText">',
( options.messageHTML === true ) ? '' : (
`${ options.messageHTML }</td></tr></table>`
)
].join('')
].join('');
};
module.exports = {
sync: TheSynchronousInterface,
pathCSS: () => path.join(__dirname, 'styles', 'efgh.css')
};