X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=www%2Fjssrc%2Fblerg%2FUser.js;h=57366fbf71c37e6452d2a6de8fb526001be4b583;hb=3e5f69d01b9488475413d4ecce8161ab7a889ca2;hp=5bcdbd05f1e1e46834c982bbd32223f8b8b99c74;hpb=a579fec94d5058776ea0fb6f47f922ea48ff876f;p=blerg.git diff --git a/www/jssrc/blerg/User.js b/www/jssrc/blerg/User.js index 5bcdbd0..57366fb 100644 --- a/www/jssrc/blerg/User.js +++ b/www/jssrc/blerg/User.js @@ -1,103 +1,125 @@ enyo.kind({ - name: "blerg.User", - kind: "blerg.Pager", - listKind: "blerg.Record", - handlers: { - onLogin: "getStalkStatus", - onLogout: "getStalkStatus" - }, - published: { - username: "", - permalink: false, - record: null, - }, - components: [ - {classes: "blerg-user-controls", components: [ - {name: "chatterLink", kind: "blerg.Link", content: "[chatter]"}, - {name: "stalkLink", kind: "blerg.Link", content: "[stalk]", showing: false, onNavigate: "startStalking"}, - {name: "unstalkLink", kind: "blerg.Link", content: "[stop stalking]", showing: false, onNavigate: "stopStalking"}, - {name: "rssLink", kind: "blerg.Link", components: [ - {noDom: true, content: "["}, - {kind: "Image", src: "/images/rss.png", attributes: {width: 16, height: 16}}, - {noDom: true, content: "RSS]"} - ]} - ]}, - {name: "records"}, - {name: "loadMoreButton", kind: "onyx.Button", onclick: "loadMore", content: "Load More"}, - {name: "api", kind: "blerg.API", - onItemsLoaded: "itemsLoaded", - onSubscriptionStatus: "gotStalkStatus"} - ], - statics: { - locationDetect: function(l) { - var m = l.hash.match(/^#([A-Za-z0-9_-]+)(?:\/(\d+))?$/); - if (m) { - return { - kind: "blerg.User", - username: m[1], - permalink: m[2] != undefined, - record: parseInt(m[2]) - }; - } - } - }, - create: function() { - this.inherited(arguments); - this.usernameChanged(); - }, - usernameChanged: function() { - this.bubble('onSetTitle', {section: '@' + this.username}); - this.$.records.destroyComponents(); - this.lastRecord = null; - this.$.loadMoreButton.hide(); - this.$.chatterLink.setHref('/#/ref/' + this.username); - this.$.rssLink.setHref('/rss/' + this.username); - this.getStalkStatus(); + name: "blerg.User", + kind: "blerg.Pager", + listKind: "blerg.Record", + handlers: { + onLogin: "getStalkStatus", + onLogout: "getStalkStatus", + onReload: "usernameChanged" + }, + published: { + username: "", + permalink: false, + record: null, + }, + components: [ + {classes: "blerg-user-controls", components: [ + {name: "chatterLink", kind: "blerg.Link", content: "[chatter]"}, + {name: "stalkLink", kind: "blerg.Link", content: "[stalk]", showing: false, onNavigate: "startStalking"}, + {name: "unstalkLink", kind: "blerg.Link", content: "[stop stalking]", showing: false, onNavigate: "stopStalking"}, + {name: "rssLink", kind: "blerg.Link", components: [ + {tag: null, content: "["}, + {kind: "Image", src: "/images/rss.png", attributes: {width: 16, height: 16}}, + {tag: null, content: "RSS]"} + ]} + ]}, + {name: "records"}, + {name: "spinner", kind: "OldSchoolSpinner", showing: false}, + {name: "emptyAccountMessage", showing: false, content: "Hey, there's nothing here!"}, + {name: "userNotFoundMessage", classes: "blerg-error", showing: false, content: "User not found"}, + {name: "loadMoreButton", kind: "onyx.Button", onclick: "loadMore", content: "Load More"}, + {name: "api", kind: "blerg.API", + onItemsLoaded: "itemsLoaded", + onUserNotFound: "userNotFound", + onAPIError: "apiError", + onSubscriptionStatus: "gotStalkStatus"} + ], + statics: { + locationDetect: function(l) { + var m = l.hash.match(/^#([A-Za-z0-9_-]+)(?:\/(\d+))?$/); + if (m) { + return { + kind: "blerg.User", + username: m[1], + permalink: m[2] != undefined, + record: parseInt(m[2]) + }; + } + } + }, + create: function() { + this.inherited(arguments); + this.usernameChanged(); + }, + usernameChanged: function() { + this.bubble('onSetTitle', {section: '@' + this.username}); + this.$.records.destroyComponents(); + this.lastRecord = null; + this.$.loadMoreButton.hide(); + this.$.chatterLink.setHref('/#/ref/' + this.username); + this.$.rssLink.setHref('/rss/' + this.username); + this.getStalkStatus(); - if (this.permalink) { - this.loadItems(this.record, this.record); - } else { - this.loadMore(); - } - }, - loadItems: function(from, to) { - this.inherited(arguments); - this.$.api.loadUserRecords(this.username, from, to); - }, - itemsLoaded: function(inSender, inEvent) { - if (this.permalink) { - this.$.loadMoreButton.hide(); - } else { - this.$.loadMoreButton.show(); - } + if (this.permalink) { + this.loadItems(this.record, this.record); + } else { + this.loadMore(); + } + }, + loadItems: function(from, to) { + this.inherited(arguments); + this.$.api.loadUserRecords(this.username, from, to); + }, + itemsLoaded: function(inSender, inEvent) { + this.$.userNotFoundMessage.hide(); + if (this.permalink) { + this.$.loadMoreButton.hide(); + } else { + this.$.loadMoreButton.show(); + } - for (var i = 0; i < inEvent.entries.length; i++) { - inEvent.entries[i].author = this.username; - } + for (var i = 0; i < inEvent.entries.length; i++) { + inEvent.entries[i].author = this.username; + } - this.addItems(inEvent.entries); - }, - getStalkStatus: function() { - if (!blerg.API.loggedIn) { - this.$.stalkLink.hide(); - this.$.unstalkLink.hide(); - return; - } - this.$.api.getSubscriptionStatus(this.username); - }, - gotStalkStatus: function(inSender, inEvent) { - if (inEvent.subscribed) { - this.$.stalkLink.hide(); - this.$.unstalkLink.show(); - } else { - this.$.stalkLink.show(); - this.$.unstalkLink.hide(); - } - }, - startStalking: function() { - this.$.api.subscribe(this.username); - }, - stopStalking: function() { - this.$.api.unsubscribe(this.username); - } + this.addItems(inEvent.entries); + if (this.lastRecord == 0 || inEvent.entries.length == 0) + this.$.loadMoreButton.hide(); + }, + addItems: function(items) { + this.$.emptyAccountMessage.setShowing(items.length == 0); + this.inherited(arguments); + }, + userNotFound: function() { + this.addItems([]); + this.$.emptyAccountMessage.hide(); + this.$.userNotFoundMessage.show(); + }, + apiError: function() { + this.addItems([]); + alert('Unknown API Error'); + }, + getStalkStatus: function() { + if (!blerg.API.loggedIn) { + this.$.stalkLink.hide(); + this.$.unstalkLink.hide(); + return; + } + this.$.api.getSubscriptionStatus(this.username); + }, + gotStalkStatus: function(inSender, inEvent) { + if (inEvent.subscribed) { + this.$.stalkLink.hide(); + this.$.unstalkLink.show(); + } else { + this.$.stalkLink.show(); + this.$.unstalkLink.hide(); + } + }, + startStalking: function() { + this.$.api.subscribe(this.username); + }, + stopStalking: function() { + this.$.api.unsubscribe(this.username); + } });