/www/jssrc/blerg/User.js
enyo.kind({
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.$.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;
}
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);
}
});