Raw Text Content QR Edit Remove
ape-snake-camel



<!--Bulletins-->

<script type="text/javascript" src="./js/graphics-converter.js"></script>
<script type="text/javascript">
	const _gc = new GraphicsConverter();
</script>

<div class="well well-sm">
	<h4>Bulletins</h4>
</div>

<?xjs
	load('smbdefs.js');

	// Deuce's URL-ifier
	function linkify(body) {
		urlRE = /(?:https?|ftp|telnet|ssh|gopher|rlogin|news):\/\/[^\s'"'<>()]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6}/gi;
		body = body.replace(urlRE, function (str) {
			var ret = '';
			var p = 0;
			var link = str.replace(/\.*$/, '');
			var linktext = link;
			if (link.indexOf('://') == -1) link = 'mailto:' + link;
			return format(
				'<a class="ulLink" href="%s">%s</a>%s',
				link, linktext, str.substr(linktext.length)
			);
		});
		return body;
	}

	var maxMessages = 100;
	var list = []; // { type, title, date, body }

	var f = new File(system.ctrl_dir + 'modopts.d/bullshit.ini');
	if (f.open('r')) {
		messageBase = f.iniGetValue('bullshit', 'messageBase');
		maxMessages = f.iniGetValue('bullshit', 'maxMessages', 10);
		if (messageBase !== null) {
			var mb = new MsgBase(messageBase);
			if (mb.open()) {
				for (var n = mb.first_msg; n <= mb.last_msg; n++) {
					var h = mb.get_msg_header(false, n);
					if (h === null || (h.attr&MSG_DELETE) > 0) continue;
					list.push({ type: 'message', title: h.subject, date: h.when_written_time, body: mb.get_msg_body(n) });
				}
			}
			if (list.length > maxMessages) list = list.slice(-maxMessages);
		}

		files = f.iniGetObject('bullshit:files');
		var fkeys = Object.keys(files);
		for (var n = 0; n < fkeys.length; n++) {
			if (!file_exists(files[fkeys[n]])) continue;
			var ff = new File(files[fkeys[n]]);
			if (!ff.open('r')) continue;
			var body = ff.read();
			ff.close();
			list.push({ type: 'file', title: fkeys[n], date: file_date(files[fkeys[n]]), body: body });
		}
		f.close();
		list = list.sort(function (a, b) { return b.date - a.date; });
	}
?>

<div>
	<ul class="list-group">
	<? list.forEach(function (e, i) { ?>
		<li class="list-group-item striped">
			<strong><? write(e.title); ?></strong><br>
			<em><? write(system.timestr(e.date)); ?></em>
			<div id="bfdiv<? write(i); ?>" class="message">
				<? if (e.type == 'file') { ?>
					<script type="text/javascript">
						_gc.from_ans(atob('<? write(base64_encode(e.body)); ?>'), '#bfdiv' + <? write(i); ?>);
					</script>
				<?xjs
					} else {
						write(linkify(e.body).replace(/\r?\n/g, '<br>'));
					}
				?>
			</div>
		</li>
	<? }); ?>
	</ul>
</div>

Read 11 times, last 4 hours ago