diff --git a/exec/load/sbbslist_html.js b/exec/load/sbbslist_html.js index 654d91d913eafeedb65d593389a59875edc33fea..6136bf762e786fe27ad5736d3b888a02b4369b98 100644 --- a/exec/load/sbbslist_html.js +++ b/exec/load/sbbslist_html.js @@ -30,10 +30,16 @@ writeln("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); writeln('<style media="screen" type="text/css">'); writeln('body { font-family:arial, sans-serif; }'); writeln('th { color:#FFFFFF; background-color:#000000;}'); -writeln('td { vertical-align:top; font-size:80%; }'); -writeln('tr { background-color:#eeeeee; }'); -writeln('pre { background-color:black; font-family:Courier,Prestige,monospace; font-size:5pt }'); +writeln('td { vertical-align:top; font-size:10pt; }'); +writeln('.row { background-color:#eeeeee; }'); +writeln('pre { cursor:zoom-in; color: #a8a8a8; background-color:black; font-family:Courier,Prestige,monospace; font-size:5pt }'); +writeln('.zoomedIn { font-size:large; cursor:zoom-out; }'); +writeln('.zoomedOut { font-size:5pt; z-index:1; cusor:zoom-in; }'); +writeln('.overlay { position:relative; left:0px; top:0px; width:100%; height;100%; z-index:100; background-color:rgba(0,0,0,0.5); }'); writeln('</style>'); +writeln('<script>'); +writeln('function onClick(obj) { obj.className = (obj.className=="zoomedIn" ? "zoomedOut":"zoomedIn"); scrollBy(1000,0); }'); +writeln('</script>'); writeln('<title>Synchronet BBS List</title>'); writeln('</head>'); @@ -42,7 +48,7 @@ load("graphic.js"); //writeln('<body><font face="Arial" size="-1">'); -list=list.filter(function(obj) { return obj.software.bbs.substr(0,10).toLowerCase() == "synchronet"; }); +list=list.filter(function(obj) { return obj.software && obj.software.bbs && obj.software.bbs.substr(0,10).toLowerCase() == "synchronet"; }); writeln('<h1 style="text-align: center;"><i>' + 'Synchronet'.link('http://www.synchro.net') + ' BBS List</i></h1>'); @@ -105,7 +111,7 @@ function bbs_sysop(sysop) return(encode_text(sysop.name)); } -function bbs_preview(bbs) +function bbs_preview(num, bbs) { /*** var cap=[]; @@ -121,8 +127,18 @@ function bbs_preview(bbs) // log(LOG_DEBUG,bbs.preview.join("\r\n")); var graphic=new Graphic(); graphic.base64_decode(bbs.preview); - write('<pre>'); - write(graphic.HTML.replace(/background-color: black;/g, '')); + write('<pre id="' + num + '" onclick="onClick(this)">'); // onmouseout="this.className=\'zoomOut\'">'); + var html = graphic.HTML; + /* HTML Optimization: */ + /* Remove black background color (black is the default */ + html = html.replace(/background-color: black;/g, ''); + /* Remove grey foreground color (grey is the default) */ + html = html.replace(/\"color: #a8a8a8;/g, '"'); + /* Remove empty style attributes */ + html = html.replace(/\ style=\" \"/g, ''); + /* Remoe empty span tags */ + html = html.replace(/<span>([^<]*)<\/span>/g,'$1'); + write(html); writeln('</pre>'); } @@ -133,36 +149,75 @@ function localDateStr(date) return format("%u-%02u-%02u", date.getFullYear(), date.getMonth()+1, date.getDate()); } -function bbs_table_entry(bbs) +function other_service(service, address) +{ + switch(service) { + case "ftp": + case "gopher": + return service.link(service + "://" + address); + case "nntp": + return service.link("news://" + address); + } + return service; +} + +function bbs_table_entry(num, bbs) { var i; + writeln('<tr><td><table width=100%>'); /* Name: */ - writeln('<tr><td style="text-align:center;"><b>'); + writeln('<tr class="row"><td style="text-align:center;"><b>'); var uri = bbs.web_site; - if(uri.length) { + if(uri && uri.length) { if(uri.indexOf('://')<1) uri = "http://" + bbs.web_site; writeln(encode_text(bbs.name).link(encodeURI(uri))); } else writeln(encode_text(bbs.name)); writeln('</b>'); + writeln('<tr><td>' + encode_text(bbs.description.join("\r\n"))); + writeln('</table>'); /* Since: */ + writeln('<td><table><tr class="row">'); writeln('<td style="text-align:center;">'); if(bbs.first_online) writeln(encode_text(bbs.first_online.substring(0,4))); + writeln('</table>'); /* Operators: */ - writeln('<td>'); - for(i=0; i<bbs.sysop.length; i++) - writeln((i ? ', ':'') + bbs_sysop(bbs.sysop[i])); - writeln('<td>' + encode_text(bbs.location)); - writeln('<td>'); - writeln(bbs_service(bbs.service[0])); + writeln('<td><table width=100%>'); + for(i in bbs.sysop) + writeln('<tr class="row"><td>' + bbs_sysop(bbs.sysop[i])); + if(!bbs.sysop.length) + writeln('<tr class="row"><td>'); + writeln('</table>'); + + /* Location: */ + writeln('<td><table width=100%>'); + writeln('<tr class="row"><td>' + encode_text(bbs.location)); + writeln('</table>'); + + /* Services */ + writeln('<td><table width=100%>'); + for(i=0; i<bbs.service.length; i++) { + if(i && JSON.stringify(bbs.service[i]).toLowerCase() == JSON.stringify(bbs.service[i-1]).toLowerCase()) + continue; + writeln('<tr class="row"><td>' + bbs_service(bbs.service[i])); + } + writeln('</table>'); + + /* Networks */ + writeln('<td><table width=100%>'); + for(i in bbs.network) + writeln(format('<tr class="row"><td><div title="%s">', bbs.network[i].address) + encode_text(bbs.network[i].name) + '</div>'); + if(!bbs.network.length) + writeln('<tr class="row"><td>'); + writeln('</table>'); /* Verification results */ - writeln('<td>'); + writeln('<td><table><tr class="row"><td>'); if(bbs.entry.autoverify) { if(!bbs.entry.autoverify.success) { if(bbs.entry.autoverify.last_failure) { @@ -171,28 +226,19 @@ function bbs_table_entry(bbs) } else writeln("N/A"); } else if(bbs.entry.autoverify.last_success) { + writeln(format("<div title='%s'>", bbs.entry.autoverify.last_success.ip_address)); writeln(localDateStr(bbs.entry.autoverify.last_success.on)); writeln(encode_text(bbs.entry.autoverify.last_success.result)); + writeln("</div>"); } else writeln("Success"); } else writeln("No auto-verification possible"); - writeln('<tr style="background-color:#ffffff;"><td>' + encode_text(bbs.description.join("\r\n"))); - writeln('<td><td><td>'); - var addl_services=[]; - for(i=1; i<bbs.service.length; i++) { - if(i && JSON.stringify(bbs.service[i]).toLowerCase() == JSON.stringify(bbs.service[i-1]).toLowerCase()) - continue; - addl_services.push(bbs.service[i]); - } - writeln('<td>'); // style="border-collapse: collapse;">'); - if(addl_services.length) { - writeln('<table style="width:100%;">'); - while(addl_services.length) - writeln('<tr><td style="font-size:100%;">' + bbs_service(addl_services.shift())); - writeln('</table>'); - } +// writeln('<table style="width:100%;">'); +// while(addl_services.length) +// writeln('<tr><td style="font-size:100%;">' + bbs_service(addl_services.shift())); +// writeln('</table>'); // if(bbs.service.length) @@ -202,14 +248,26 @@ function bbs_table_entry(bbs) // else if(!bbs.entry.autoverify || !bbs.entry.autoverify.success) { - write('<td>'); + write('<tr><td>'); if(bbs.entry.verified) writeln("Last verified on " + localDateStr(bbs.entry.verified.on) + " by " + encode_text(bbs.entry.verified.by)); } - else if(bbs.preview) { - write('<td>'); // style="text-align:left; border-collapse:collapse; border-style:none;">'); - bbs_preview(bbs); + else { + if(bbs.preview) { + write('<tr><td>'); // style="border-style:outset;">'); + // writeln('<div>'); // onclick="this.className=\'overlay\'">'); + bbs_preview(num, bbs); + // writeln('</div>'); + } + if(bbs.entry.autoverify.last_success.other_services + && bbs.entry.autoverify.last_success.other_services.tcp + && bbs.entry.autoverify.last_success.other_services.tcp.length) { + write('<tr><td>Also: '); + for(i in bbs.entry.autoverify.last_success.other_services.tcp) + writeln('[' + other_service(bbs.entry.autoverify.last_success.other_services.tcp[i], bbs.entry.autoverify.last_success.service.address) + ']'); + } } + writeln('</table>'); } /* GENERATE SUMMARY TABLE */ @@ -224,12 +282,13 @@ writeln('<th>Since</th>'); writeln('<th>Operators</th>'); writeln('<th>Location</th>'); writeln('<th>Terminal Services</th>'); +writeln('<th>Networks</th>'); writeln('<th style="width:1%;">Verification Results</th>'); writeln('</thead>'); writeln('<tbody>'); var i; for(i in list) - bbs_table_entry(list[i]); + bbs_table_entry(i, list[i]); writeln('</tbody>'); writeln('</table>');