X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;ds=sidebyside;f=www%2Fjs%2Fblerg.js;h=0d114cb22f70ef8d0f3e21a490aac81f14741241;hb=868758a60c47c984eb76bae45183d063981ebdd5;hp=9f92594ba51b22777d5855bf0390d4854d0bb3b9;hpb=f4bf2d2efc566e9f165b97bda72cd5a27e0d2b19;p=blerg.git diff --git a/www/js/blerg.js b/www/js/blerg.js index 9f92594..0d114cb 100644 --- a/www/js/blerg.js +++ b/www/js/blerg.js @@ -2,96 +2,6 @@ * BSD-style license. Please see the COPYING file for details. */ -// Config -var baseURL = ''; -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] = '
') - out.pop(); - - record.data = out.join(''); - record.date = (new Date(record.timestamp * 1000)).toString(); - record.html = template.evaluate(record); -} - -function displayError(msg) { - items.innerText = msg; -} - - -// Object for browsing tags -function Tag(type, tag) { - this.initPager(); - this.type = type; - this.tag = tag; - - var url = baseURL + "/tag/"; - switch(type) { - case 'tag': - //url += '%23'; - url += 'H'; // apache is eating the hash, even encoded. Probably a security feature. - break; - case 'ref': - url += '%40'; - break; - default: - alert('Invalid tag type: ' + type); - return; - } - url += tag; - - new Ajax.Request(url, { - method: 'get', - onSuccess: function(r) { - var j = r.responseText.evalJSON(); - if (j) { - var maxid = j.length - 1; - j.each(function(v, i) { - v.id = maxid - i; - mangleRecord(v, tagRecordTemplate) - }); - this.addItems(j); - this.pageStart = j.length - 1; - } - this.displayItems(); - }.bind(this), - onFailure: function(r) { - this.displayItems(); - }.bind(this) - }); - -} -Tag.prototype = new Pager(); -Tag.prototype.constructor = Tag; - -Tag.prototype.show = function() { - var ctype = {ref: '@', tag: '#'}[this.type]; - - $$('[name=section]').each(function(v) { - v.update(' about ' + ctype + this.tag); - }.bind(this)); - $('welcome').hide(); - $('post').hide(); - $('older_link').hide(); - $('newer_link').hide(); - $('rss').hide(); - items.show(); - $('usercontrols').hide(); -} - -function postPopup() { - if (loginStatus.loggedIn) { - var post = $('post'); - if (post.visible()) { - post.hide(); - } else { - post.show(); - if (currentPager.username && currentPager.username != loginStatus.username && !$('post.content').value) { - $('post.content').value = '@' + currentPager.username + ': '; - } - $('post.content').focus(); - } - } -} - -function signup() { - var username = $('signup.username').value; - var password = $('signup.password').value; - - new Ajax.Request(baseURL + '/create', { - parameters: { - username: username, - password: password - }, - onSuccess: function(r) { - $('signup').hide(); - location.href = '/#' + username; - hashSwitch(); - - loginStatus.login(username, password); - }, - onFailure: function(r) { - alert("Failed to create user"); - } - }); -} - -function signup_cancel() { - $('signup').hide(); - hashSwitch(); -} - -function newer_page() { - if (currentPager) - currentPager.newerPage(); -} - -function older_page() { - if (currentPager) - currentPager.olderPage(); -} - -function obsess() { - new Ajax.Request(baseURL + '/subscribe/' + currentPager.username, { - method: 'post', + new Ajax.Request(baseURL + '/passwd', { parameters: { - username: loginStatus.username + username: loginStatus.username, + password: old_password, + new_password: new_password }, 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); + if (r.responseJSON.status == 'success') { + alert('Password changed'); + passwd_cancel(); } else { - alert('Failed to obsess. This is probably for the best'); + alert('Password change failed. Your password has NOT been changed.'); } }, onFailure: function(r) { - alert('Failed to obsess. This is probably for the best'); + alert('Password change error'); } }); } -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) - clearTimeout(resizePostContentTimeout); - resizePostContentTimeout = setTimeout(function() { - var c = $('post.content'); - var lines = Math.floor(c.value.length / (100 * (c.clientWidth / 1000))) + 1; - var m = c.value.match(/\r?\n/g); - if (m) - lines += m.length; - if (lines <= 3) { - c.style.height = ""; - } else { - c.style.height = (lines * 17) + "pt"; - } - resizePostContentTimeout = null; - }, 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)\/([A-Za-z0-9_-]+)$/)) { - currentPager = new Tag(m[1], m[2]); - currentPager.show(); - } else if (m = location.hash.match(/^#([A-Za-z0-9_-]+)(:(\d+))?$/)) { - if (!currentPager || currentPager.username != m[1]) - currentPager = new User(m[1]); - currentPager.show(); - loginStatus.update(); - - if (m[3]) { - var r = parseInt(m[3]); - currentPager.showRecord = r; - if (currentPager.itemCache[r]) { - currentPager.displayItems(); - } else { - currentPager.loadItems((r >= 49 ? r - 49 : 0), r); - } - } else { - currentPager.pageStart = currentPager.itemCount - 1; - currentPager.loadItems(); - } - } else { - $$('[name=section]').each(function(v) { v.update('Welcome') }); - $('signup').hide(); - items.update(); - items.hide(); - $('newer_link').hide(); - $('older_link').hide(); - $('welcome').show(); - $('rss').hide(); - $('usercontrols').hide(); - loadLatest(); - } -} - -var lastHash; -function hashCheck() { - if (location.hash != lastHash) { - lastHash = location.hash; - hashSwitch(); - } -} - -function init() { - items = $('items'); - loginStatus = new LoginStatus(); - - lastHash = location.hash; - hashSwitch(); - - setInterval(hashCheck, 250); - - document.body.observe('keyup', function(event) { - if (event.shiftKey && event.keyCode == '32') { - postPopup(); - event.stop(); - } - }); - $('post.content').addEventListener('keyup', function(event) { - event.stopPropagation(); - }, true); +function passwd_cancel() { + $('passwd').hide(); + $('navigation').show(); + urlSwitch(); }