Rework API to provide global state for individual instances
Also add User controls
width: 100%;
}
+.blerg-user-controls {
+ font-size: 14pt;
+ text-align: right;
+}
+
+.blerg-user-controls a {
+ color: inherit;
+ text-decoration: none;
+ margin-left: 4pt;
+}
+
+.blerg-user-controls a:hover {
+ text-decoration: underline;
+}
+
+
.record {
margin: 8pt 0 24pt 0;
font-size: 14pt;
var baseURL = '';
+// The API state is static so that any instance can use login-dependent API
+// calls
enyo.kind({
name: "blerg.API",
- loggedIn: false,
- username: "",
+ kind: "Component",
+ statics: {
+ apiInitialized: false,
+ loggedIn: false,
+ username: "",
+ },
create: function() {
this.inherited(arguments);
+ if (blerg.API.apiInitialized) {
+ if (blerg.API.loggedIn) {
+ setTimeout(function() {
+ this.bubble('onLoginSuccessful', {username: blerg.API.username});
+ }.bind(this), 0);
+ }
+ return;
+ }
+
if (enyo.getCookie('auth') && enyo.getCookie('username')) {
- this.loggedIn = true;
- this.username = enyo.getCookie('username');
+ blerg.API.loggedIn = true;
+ blerg.API.username = enyo.getCookie('username');
// Defer the signal until everything's initialized
setTimeout(function() {
- this.bubble('onLoginSuccessful', {username: this.username});
+ this.bubble('onLoginSuccessful', {username: blerg.API.username});
}.bind(this), 0);
}
+
+ blerg.API.apiInitialized = true;
},
login: function(username, password) {
var req = new enyo.Ajax({
});
req.response(function(inSender, inResponse) {
if (inResponse.status == 'success') {
- this.loggedIn = true;
- this.username = username;
+ blerg.API.loggedIn = true;
+ blerg.API.username = username;
enyo.setCookie('username', username);
this.bubble('onLoginSuccessful', {username: username});
} else {
method: 'POST'
});
req.response(function(inSender, inResponse) {
- this.loggedIn = false;
+ blerg.API.loggedIn = false;
enyo.setCookie('auth', '', {"Max-Age": 0});
this.bubble('onLogoutSuccessful');
}.bind(this));
req.go({
- username: this.username
+ username: blerg.API.username
});
enyo.setCookie('username', '', {"Max-Age": 0});
},
requestFeedStatus: function() {
- if (!this.loggedIn)
+ if (!blerg.API.loggedIn)
throw new Error('Cannot request feed status when not logged in');
// TODO
+ },
+ loadUserRecords: function(username, from ,to) {
+ var url;
+ if (from != undefined && to != undefined) {
+ url = baseURL + '/get/' + username + '/' + from + '-' + to;
+ } else {
+ url = baseURL + '/get/' + username;
+ }
+
+ var req = new enyo.Ajax({
+ url: url
+ });
+ req.response(function(inSender, inResponse) {
+ this.bubble('onItemsLoaded', {
+ entries: inResponse
+ });
+ }.bind(this));
+ req.go();
}
});
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+))?$/);
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 {
},
loadItems: function(from, to) {
this.inherited(arguments);
-
- var url;
- if (from != undefined && to != undefined) {
- url = baseURL + '/get/' + this.username + '/' + from + '-' + to;
+ this.$.api.loadUserRecords(this.username, from, to);
+ },
+ itemsLoaded: function(inSender, inEvent) {
+ if (this.permalink) {
+ this.$.loadMoreButton.hide();
} else {
- url = baseURL + '/get/' + this.username;
+ this.$.loadMoreButton.show();
}
- var req = new enyo.Ajax({
- url: url
- });
- req.response(function(inSender, inResponse) {
- if (this.permalink) {
- this.$.loadMoreButton.hide();
- } else {
- this.$.loadMoreButton.show();
- }
-
- for (var i = 0; i < inResponse.length; i++) {
- inResponse[i].author = this.username;
- }
+ for (var i = 0; i < inEvent.entries.length; i++) {
+ inEvent.entries[i].author = this.username;
+ }
- this.addItems(inResponse);
- }.bind(this));
- req.go();
+ this.addItems(inEvent.entries);
+ },
+ getStalkStatus: function() {
+ if (!blerg.API.loggedIn) {
+ this.$.stalkLink.hide();
+ this.$.unstalkLink.hide();
+ return;
+ }
+ // Make an API call to determine status
}
});