/www/src/Picker.js
enyo.kind({
name: "Picker",
kind: "FittableRows",
classes: "picker",
events: {
onConversationSwitched: ''
},
conversations: [],
buddies: [],
buddiesByJid: {},
roster: {},
components: [
{name: "tabButtons", kind: "onyx.RadioGroup", classes: "picker-radiobuttons", components: [
{content: "Conversations", active: true, ontap: "selectConversations"},
{content: "Buddies", ontap: "selectBuddies"}
]},
{name: "tabPanels", kind: "Panels", classes: "picker-panels", fit: true, draggable: false, components: [
{name: "conversationList", kind: "List", onSetupItem: "conversationItemSetup", components: [
{classes: "conversation-list-item", onclick: "conversationItemClick", components: [
{classes: "conversation-status", components: [
{name: "conversationBuddyStatus", kind: "StatusCircle"},
]},
{classes: "conversation-content", components: [
{name: "conversationBuddyName", classes: "conversation-buddy-name"},
{name: "conversationLastMessage", classes: "conversation-last-message"},
]},
{classes: "conversation-image-container", components: [
{name: "conversationImage", classes: "buddy-image"},
]}
]}
]},
{name: "buddyList", kind: "List", onSetupItem: "buddyItemSetup", components: [
{classes: "buddy-list-item", onclick: "buddyItemClick", components: [
{classes: "buddy-status", components: [
{name: "buddyStatus", kind: "StatusCircle"},
]},
{classes: "buddy-content", components: [
{name: "buddyName", classes: "buddy-name"},
{name: "buddyStatusText", classes: "buddy-status-text"},
]},
{classes: "buddy-image-container", components: [
{name: "buddyImage", classes: "buddy-image"},
]}
]}
]}
]},
{kind: "onyx.Toolbar", components: [
{name: "loginButton", kind: "onyx.Button", content: "Login", onclick: "loginClick"},
{name: "logoutButton", kind: "onyx.Button", content: "Logout", showing: false, onclick: "logoutClick"},
]},
{kind: "Signals", onLoginSuccessful: "didLogin", onLogout: "didLogout"}
],
create: function() {
this.inherited(arguments);
conversationStore.loadConversations();
this.updateConversationList();
},
selectConversations: function(inSender, inEvent) {
this.$.tabPanels.setIndex(0);
},
updateConversationList: function() {
this.conversations = conversationStore.getConversationSummary();
this.$.conversationList.setCount(this.conversations.length);
this.$.conversationList.refresh();
},
selectBuddies: function(inSender, inEvent) {
this.$.tabPanels.setIndex(1);
},
setRoster: function(data) {
this.roster = data;
for (jid in data) {
this.mergeBuddyInfo(data[jid]);
}
this.updateBuddyList();
},
setPresence: function(data) {
this.mergeBuddyInfo(data);
this.updateBuddyList();
},
mergeBuddyInfo: function(data) {
var b = this.buddiesByJid[data.jid];
if (!b) {
b = this.buddiesByJid[data.jid] = {};
this.buddies.push(b);
}
for (i in data) {
b[i] = data[i];
}
if (!b.name) {
b.name = b.jid;
}
b.lastUpdate = new Date().getTime();
},
sortBuddies: function() {
this.buddies.sort(function(a, b) {
if (a.lastUpdate > b.lastUpdate)
return -1;
if (a.lastUpdate < b.lastUpdate)
return 1;
return 0;
});
},
updateBuddyList: function() {
this.sortBuddies();
this.$.buddyList.setCount(this.buddies.length);
this.$.buddyList.refresh();
this.$.conversationList.refresh();
},
conversationItemSetup: function(inSender, inEvent) {
var row = this.conversations[inEvent.index];
if (!row) return;
var status;
if (this.buddiesByJid[row.jid]) {
status = this.buddiesByJid[row.jid].status;
} else {
status = 'unknown';
}
this.$.conversationBuddyStatus.setStatus(status);
var name = row.jid;
if (row.jid in this.roster && this.roster[row.jid].name) {
name = this.roster[row.jid].name;
}
this.$.conversationBuddyName.setContent(name);
this.$.conversationLastMessage.setContent(row.message);
},
buddyItemSetup: function(inSender, inEvent) {
var row = this.buddies[inEvent.index];
if (!row) return;
this.$.buddyStatus.setStatus(row.status);
this.$.buddyName.setContent(row.name);
this.$.buddyStatusText.setContent(row.statusText);
},
loginClick: function(inSender, inEvent) {
enyo.Signals.send('onStartLogin');
},
logoutClick: function(inSender, inEvent) {
enyo.Signals.send('onStartLogout');
},
didLogin: function(inSender, inEvent) {
this.$.loginButton.hide();
this.$.logoutButton.show();
},
didLogout: function(inSender, inEvent) {
this.$.logoutButton.hide();
this.$.loginButton.show();
this.buddies = [];
this.buddiesByJid = {};
this.updateBuddyList();
},
conversationItemClick: function(inSender, inEvent) {
this.doConversationSwitched({
jid: this.conversations[inEvent.index].jid,
name: this.conversations[inEvent.index].jid
});
},
buddyItemClick: function(inSender, inEvent) {
this.doConversationSwitched({
jid: this.buddies[inEvent.index].jid,
name: this.buddies[inEvent.index].name
});
}
});