X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=www%2Fjs%2Fblerg.js;h=22fbdedce458c11c65fc85f23d36c5873dffdf4d;hb=ef568497bf23c8fe38e378f20c175ea6accc7b2f;hp=205c5a9ee594b2f5c58be802600735a88bc4cde5;hpb=acfedd7b7e02875fdc6a85fdcb080771da24961d;p=blerg.git diff --git a/www/js/blerg.js b/www/js/blerg.js index 205c5a9..22fbded 100644 --- a/www/js/blerg.js +++ b/www/js/blerg.js @@ -8,7 +8,10 @@ var recordTemplate = new Template( '
#{data}
Posted #{date}
' ); var tagRecordTemplate = new Template( - '
#{data}
Posted by @#{author} on #{date}
' + '
#{data}
Posted by @#{author} on #{date}
' +); +var latestRecordsTemplate = new Template( + '
@#{author} #{data}
' ); // Page elements @@ -92,7 +95,7 @@ LoginStatus.prototype.update = function() { LoginStatus.prototype.post = function(msg) { if (!this.loggedIn) { alert("You are not logged in!"); - exit(0); + return; } new Ajax.Request(baseURL + '/put', { @@ -205,6 +208,10 @@ User.prototype.show = function() { items.show(); $('rss').show(); $('rsslink').href = '/rss/' + this.username; + $$('[name=user.reflink]').each(function(e) { + e.href = '/#ref/' + this.username; + }.bind(this)); + $('usercontrols').show(); } User.prototype.loadItems = function(from, to) { @@ -257,8 +264,8 @@ function mangleRecord(record, template) { record.data = record.data.replace(/(\s)\*([^*]+)\*(\s)/g, '$1$2$3'); // Turn refs and tags into links - record.data = record.data.replace(/(\s|^)#(\w+)/g, '$1#$2'); - record.data = record.data.replace(/(\s|^)@(\w+)/g, '$1@$2'); + record.data = record.data.replace(/(\s|^)#([A-Za-z0-9_-]+)/g, '$1#$2'); + record.data = record.data.replace(/(\s|^)@([A-Za-z0-9_-]+)/g, '$1@$2'); // Turn newlines into linebreaks and paragraphs record.data = record.data.replace(/\r?\n\r?\n/g, "

").replace(/\r?\n/g, "
"); @@ -329,6 +336,7 @@ Tag.prototype.show = function() { $('newer_link').hide(); $('rss').hide(); items.show(); + $('usercontrols').hide(); } function postPopup() { @@ -402,41 +410,92 @@ function resizePostContent() { }, 150); } -function loadNewThings() { - new Ajax.Request(baseURL + '/newtags.json', { +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 fadeOut(p) { +} + +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 < 5 && 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) { - $('newtags').update(); - r.responseText.evalJSON().each(function(v) { + var j = r.responseText.evalJSON(); + + $('latest-tags').update(); + j.tags.each(function(v) { var a = new Element('a', {href: '/#tag/' + v}); a.insert('#' + v); - $('newtags').insert(a); - $('newtags').insert(new Element('br')); + $('latest-tags').insert(a); + $('latest-tags').appendChild(document.createTextNode(' ')); }); - } - }); - new Ajax.Request(baseURL + '/newusers.json', { - onSuccess: function(r) { - $('newusers').update(); - r.responseText.evalJSON().each(function(v) { - var a = new Element('a', {href: '/#' + v}); - a.insert('@' + v); - $('newusers').insert(a); - $('newusers').insert(new Element('br')); + $('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(); @@ -463,7 +522,8 @@ function hashSwitch() { $('older_link').hide(); $('welcome').show(); $('rss').hide(); - loadNewThings(); + $('usercontrols').hide(); + loadLatest(); } }