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, onclick: "startStalking"},
- {name: "unstalkLink", kind: "blerg.Link", content: "[stop stalking]", showing: false, onclick: "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"}
- ],
- 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.$.loadMoreButton.hide();
+ 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;
- }
- // Make an API call to determine status
- }
+ 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);
+ }
});