X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=www%2Fjs%2Fblerg.js;h=9f92594ba51b22777d5855bf0390d4854d0bb3b9;hb=f4bf2d2efc566e9f165b97bda72cd5a27e0d2b19;hp=c5fd50413476f042a759fdc13a6fe89385c18886;hpb=2a252001cf9fbb3b5459d142b340a02b5c6eaaa9;p=blerg.git diff --git a/www/js/blerg.js b/www/js/blerg.js index c5fd504..9f92594 100644 --- a/www/js/blerg.js +++ b/www/js/blerg.js @@ -8,7 +8,10 @@ var recordTemplate = new Template( '
'];
+ var endpush = null;
+ var listMode = false;
+ lines.each(function(l) {
+ if (l == '') {
+ if (out[out.length - 1] == '
') {
+ out[out.length - 1] = '
'; + } + if (out[out.length - 1] == '') { + out.push(''); + out.push('
'); + listMode = false; + } + return; + } + + if (l[0] == '>') { + var pi = out.lastIndexOf('
'); + if (pi != -1) { + out[pi] = '
'; + l = l.replace(/^>\s*/, ''); + } + } + if (l[0] == '*') { + if (!listMode) { + var pi = out.lastIndexOf('
'); + out[pi] = '
").replace(/\r?\n/g, "
");
+ out.push(l);
+ if (endpush) {
+ out.push(endpush);
+ endpush = null;
+ } else {
+ out.push('
');
+ }
+ });
+ while (out[out.length - 1] == '
' || out[out.length - 1] == '
') + out.pop(); + record.data = out.join(''); record.date = (new Date(record.timestamp * 1000)).toString(); record.html = template.evaluate(record); } @@ -329,6 +414,7 @@ Tag.prototype.show = function() { $('newer_link').hide(); $('rss').hide(); items.show(); + $('usercontrols').hide(); } function postPopup() { @@ -383,6 +469,50 @@ function older_page() { currentPager.olderPage(); } +function obsess() { + new Ajax.Request(baseURL + '/subscribe/' + currentPager.username, { + method: 'post', + parameters: { + username: loginStatus.username + }, + onSuccess: function(r) { + var response = r.responseText.evalJSON(); + if (response.status == 'success') { + alert("You call " + currentPager.username + " and begin breathing heavily into the handset."); + $$('[name=user.obsesslink]').each(Element.hide); + $$('[name=user.unobsesslink]').each(Element.show); + } else { + alert('Failed to obsess. This is probably for the best'); + } + }, + onFailure: function(r) { + alert('Failed to obsess. This is probably for the best'); + } + }); +} + +function unobsess() { + new Ajax.Request(baseURL + '/unsubscribe/' + currentPager.username, { + method: 'post', + parameters: { + username: loginStatus.username + }, + onSuccess: function(r) { + var response = r.responseText.evalJSON(); + if (response.status == 'success') { + alert("You come to your senses."); + $$('[name=user.obsesslink]').each(Element.show); + $$('[name=user.unobsesslink]').each(Element.hide); + } else { + alert('You are unable to tear yourself away (because something failed on the server)'); + } + }, + onFailure: function(r) { + alert('You are unable to tear yourself away (because something failed on the server)'); + } + }); +} + var resizePostContentTimeout = null; function resizePostContent() { if (resizePostContentTimeout) @@ -402,15 +532,90 @@ function resizePostContent() { }, 150); } +var tickerTimer = null; +var tickerHead, tickerTail; + +function tickerFader(a, b, p) { + var p2 = 1 - p; + + a.style.opacity = p; + a.style.lineHeight = (100 * p) + '%'; + + b.style.opacity = p2; + b.style.lineHeight = (100 * p2) + '%'; + if (p == 1.0) + b.hide(); +} + +function ticker() { + tickerHead.show(); + Bytex64.FX.run(tickerFader.curry(tickerHead, tickerTail), 0.5); + tickerHead = tickerHead.nextSibling; + tickerTail = tickerTail.nextSibling; + if (tickerHead == null) { + stopTicker(); + loadLatest.delay(10); + } +} + +function startTicker() { + stopTicker(); + for (var elem = $('latest-posts').firstChild; elem != null; elem = elem.nextSibling) { + elem.hide(); + } + + // Show the first five + tickerHead = $('latest-posts').firstChild; + for (var i = 0; i < 10 && tickerHead; i++) { + tickerHead.show(); + tickerHead = tickerHead.nextSibling; + } + tickerTail = $('latest-posts').firstChild; + tickerTimer = setInterval(ticker, 5000); +} + +function stopTicker() { + if (tickerTimer) + clearInterval(tickerTimer); + tickerTimer = null; +} + +function loadLatest() { + new Ajax.Request(baseURL + '/latest.json', { + onSuccess: function(r) { + var j = r.responseText.evalJSON(); + + $('latest-tags').update(); + j.tags.each(function(v) { + var a = new Element('a', {href: '/#tag/' + v}); + a.insert('#' + v); + a.className = 'ref'; + $('latest-tags').insert(a); + $('latest-tags').appendChild(document.createTextNode(' ')); + }); + + $('latest-posts').update(); + j.records.each(function(v) { + v.data = v.data.replace(/&/g, '&').replace(//g, '>'); + v.date = (new Date(v.timestamp * 1000)).toString(); + var html = latestRecordsTemplate.evaluate(v); + $('latest-posts').insert(html); + }); + startTicker(); + } + }); +} + function hashSwitch() { var m; + stopTicker(); if (m = location.search.match(/^\?post\/([^/]+)\/(.+)/)) { $('post').show(); $('post.content').value = '[' + decodeURIComponent(m[1]).replace(']','').replace('[','') + '](' + decodeURIComponent(m[2]) + ')'; - } else if (m = location.hash.match(/^#(ref|tag)\/(\w+)$/)) { + } else if (m = location.hash.match(/^#(ref|tag)\/([A-Za-z0-9_-]+)$/)) { currentPager = new Tag(m[1], m[2]); currentPager.show(); - } else if (m = location.hash.match(/^#(\w+)(:(\d+))?$/)) { + } else if (m = location.hash.match(/^#([A-Za-z0-9_-]+)(:(\d+))?$/)) { if (!currentPager || currentPager.username != m[1]) currentPager = new User(m[1]); currentPager.show(); @@ -419,7 +624,7 @@ function hashSwitch() { if (m[3]) { var r = parseInt(m[3]); currentPager.showRecord = r; - if (currentPager.recordCache[r]) { + if (currentPager.itemCache[r]) { currentPager.displayItems(); } else { currentPager.loadItems((r >= 49 ? r - 49 : 0), r); @@ -437,6 +642,8 @@ function hashSwitch() { $('older_link').hide(); $('welcome').show(); $('rss').hide(); + $('usercontrols').hide(); + loadLatest(); } }