X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=www%2Fjs%2Fblerg.js;h=fac5371b391d381553a849bf3111b27783b53555;hb=a579fec94d5058776ea0fb6f47f922ea48ff876f;hp=83a8a88683f523c3554b05f72e5a49a8fab816af;hpb=756f2f096cf6a6f7126e053846c1b87b089e30ce;p=blerg.git diff --git a/www/js/blerg.js b/www/js/blerg.js index 83a8a88..fac5371 100644 --- a/www/js/blerg.js +++ b/www/js/blerg.js @@ -241,223 +241,6 @@ Pager.prototype.showRecord = function(r) { Pager.prototype.loadItems = function(from, to, continuation) { } - -// Object to render user pages -function User(m) { - Pager.call(this); - this.username = m[1]; - this.baseFrag = m[1]; - this.permalink = (m[2] != 'p'); - this.pageStart = parseInt(m[3]); -} -User.prototype = new Pager(); -User.prototype.constructor = User; - -User.prototype.updateState = function(m) { - if (m[1] != this.username) - return false; - - this.permalink = (m[2] != 'p'); - this.pageStart = parseInt(m[3]); - this.show(); - - return true; -} - -User.prototype.show = function() { - Pager.prototype.show.call(this); - - $$('[name=section]').each(function(v) { v.update(' @' + this.username) }.bind(this)); - $('rss').show(); - $('rsslink').href = '/rss/' + this.username; - $$('[name=user.reflink]').each(function(e) { - e.href = baseURL + '/#/ref/' + this.username; - }.bind(this)); - $('usercontrols').show(); - - if (this.permalink && this.pageStart >= 0) { - this.showRecord(this.pageStart); - } else if (this.pageStart >= 0) { - this.showPageAt(this.pageStart); - } else { - this.reload(); - } -} - -User.prototype.hide = function() { - Pager.prototype.hide.call(this); - $('signup').hide(); - $('rss').hide(); - $('usercontrols').hide(); -} - -User.prototype.reload = function() { - this.pageStart = null; - - $$('[name=user.subscribelink]').each(Element.hide); - $$('[name=user.unsubscribelink]').each(Element.hide); - - if (loginStatus.loggedIn) { - new Ajax.Request(baseURL + '/feedinfo/' + this.username, { - method: 'post', - parameters: { - username: loginStatus.username - }, - onSuccess: function(r) { - var json = r.responseText.evalJSON(); - if (json.subscribed) { - $$('[name=user.subscribelink]').each(Element.hide); - $$('[name=user.unsubscribelink]').each(Element.show); - } else { - $$('[name=user.subscribelink]').each(Element.show); - $$('[name=user.unsubscribelink]').each(Element.hide); - } - } - }); - } - - new Ajax.Request(baseURL + '/info/' + this.username, { - method: 'get', - onSuccess: function(r) { - var response = r.responseText.evalJSON(); - if (response) { - this.itemCount = parseInt(response.record_count); - this.showPageAt(this.itemCount - 1); - } - }.bind(this) - }); -} - -User.prototype.loadItems = function(from, to, continuation) { - if (to < 0) - return; - - var url; - if (from != undefined && to != undefined) { - url = baseURL + '/get/' + this.username + '/' + from + '-' + to; - this.pageStart = to; - } else { - url = baseURL + '/get/' + this.username; - } - - new Ajax.Request(url, { - method: 'get', - onSuccess: function(r) { - var records = r.responseText.evalJSON(); - if (records && records.length > 0) { - records.each(function(v) { - v.id = v.record; - v.author = this.username; - mangleRecord(v, recordTemplate); - }.bind(this)); - this.addItems(records); - if (!this.pageStart) - this.pageStart = records[0].recInt; - } - continuation(); - }.bind(this), - onFailure: function(r) { - this.displayItems(); - }.bind(this), - on404: function(r) { - displayError('User not found'); - } - }); -} - -function mangleRecord(record, template) { - record.recInt = parseInt(record.record); - - var lines = record.data.split(/\r?\n/); - if (lines[lines.length - 1] == '') - lines.pop(); - - var out = ['

']; - 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; - } - - // Put quoted material into a special paragraph - if (l[0] == '>') { - var pi = out.lastIndexOf('

'); - if (pi != -1) { - out[pi] = '

'; - l = l.replace(/^>\s*/, ''); - } - } - - // Sanitize HTML input - l = l.replace(/&/g, '&').replace(//g, '>'); - - // Turn HTTP URLs into links - l = l.replace(/(\s|^)(https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/([^\s"]*[^.!,;?()\s])?)?)/g, '$1$2'); - - // Turn markdown links into links - l = l.replace(/(\s|^)\[([^\]]+)\]\((https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/[^)"]*?)?)\)/g, '$1$2'); - - // Turn *foo* into italics and **foo** into bold - l = l.replace(/([^\w\\]|^)\*\*(\w[^*]*)\*\*(\W|$)/g, '$1$2$3'); - l = l.replace(/([^\w\\]|^)\*(\w[^*]*)\*(\W|$)/g, '$1$2$3'); - - // Turn refs and tags into links - l = l.replace(/(\s|^)#([A-Za-z0-9_-]+)/g, '$1#$2'); - l = l.replace(/(\s|^)@([A-Za-z0-9_-]+)(\/\d+)?/g, '$1@$2'); - - // Create lists when lines begin with * - if (l[0] == '*') { - if (!listMode) { - var pi = out.lastIndexOf('

'); - out[pi] = '

'); - - record.data = out.join(''); - record.date = (new Date(record.timestamp * 1000)).toString(); - record.html = template.evaluate(record); -} - function displayError(msg) { items.innerText = msg; } @@ -628,6 +411,36 @@ function signup_cancel() { urlSwitch(); } +function passwd() { + var old_password = $('passwd.old_password').value; + var new_password = $('passwd.new_password').value; + + new Ajax.Request(baseURL + '/passwd', { + parameters: { + username: loginStatus.username, + password: old_password, + new_password: new_password + }, + onSuccess: function(r) { + if (r.responseJSON.status == 'success') { + alert('Password changed'); + passwd_cancel(); + } else { + alert('Password change failed. Your password has NOT been changed.'); + } + }, + onFailure: function(r) { + alert('Password change error'); + } + }); +} + +function passwd_cancel() { + $('passwd').hide(); + $('navigation').show(); + urlSwitch(); +} + function subscribe() { new Ajax.Request(baseURL + '/subscribe/' + currentPager.username, { method: 'post', @@ -672,25 +485,6 @@ function unsubscribe() { }); } -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; @@ -767,34 +561,6 @@ function loadLatest() { }); } -function qlink(loc) { - if (loc) { - location.hash = loc; - } else if (event && event.target) { - location.href = event.target.href; - } else { - // Bogus qlink - return; - } - lastHash = location.hash; - urlSwitch(); - return false; -} - -function Welcome() { - loadLatest(); -} - -Welcome.prototype.show = function() { - $$('[name=section]').each(function(v) { v.update('Welcome') }); - $('welcome').show(); -} - -Welcome.prototype.hide = function() { - stopTicker(); - $('welcome').hide(); -} - function ExternalURLPost(m) { this.title = decodeURIComponent(m[1]).replace(']','').replace('[',''); this.url = decodeURIComponent(m[2]); @@ -804,66 +570,3 @@ ExternalURLPost.prototype.show = function() { $('post.content').value = '[' + this.title + '](' + this.url + ')'; $('post').show(); } - -var urlmap = [ - ['search', /^\?post\/([^/]+)\/(.+)/, ExternalURLPost], - ['hash', /^#\/(ref|tag)\/([A-Za-z0-9_-]+)(?:\/p(\d+))?$/, Tag], - ['hash', /^#\/feed(?:\/p(\d+))?$/, Feed], - ['hash', /^#([A-Za-z0-9_-]+)(?:\/(p)?(\d+))?$/, User] -]; - -function urlSwitch() { - var m; - var pageconstructor; - - for (var i = 0; i < urlmap.length; i++) { - if (m = location[urlmap[i][0]].match(urlmap[i][1])) { - pageconstructor = urlmap[i][2]; - break; - } - } - if (i == urlmap.length) - pageconstructor = Welcome; - - if (currentPager && currentPager instanceof pageconstructor) { - // updateState returns true if the state has been successfully updated. - // Otherwise, we continue and create a new instance. - if (currentPager.updateState(m)) - return; - } - - if (currentPager && currentPager.hide) - currentPager.hide(); - - currentPager = new pageconstructor(m); - if (currentPager.show) - currentPager.show(); -} - -var lastHash; -function hashCheck() { - if (location.hash != lastHash) { - lastHash = location.hash; - urlSwitch(); - } -} - -function init() { - items = $('items'); - loginStatus = new LoginStatus(); - - lastHash = location.hash; - urlSwitch(); - - 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); -}