/www/jssrc/blerg/Controls.js
enyo.kind({
name: "blerg.Controls",
kind: "Control",
classes: "blerg-controls",
username: null,
postShowing: false,
published: {
loggedIn: false
},
handlers: {
onLogin: "login",
onLogout: "logout",
onPostVisibility: "postVisibilityUpdate",
onShowForgotPasswordLink: "showForgotPasswordLink"
},
components: [
{name: "loggedOutControls", components: [
{tag: "form", onkeyup: "loginKeyUp", classes: "login", components: [
{kind: "onyx.Groupbox", components: [
{kind: "onyx.InputDecorator", components: [
{name: "username", kind: "onyx.Input", placeholder: "Username", attributes: {tabindex: 1}}
]},
{kind: "onyx.InputDecorator", components: [
{name: "password", kind: "onyx.Input", placeholder: "Password", type: "password", attributes: {tabindex: 2}}
]},
]},
{kind: "onyx.Button", content: "Login", onclick: "loginClicked", attributes: {tabindex: 3}},
{name: "forgotPassword", showing: false, style: "margin-top: 10px; text-align: left", components: [
{kind: "blerg.Link", content: "Forgot your password?", onNavigate: "popupForgotPasswordDialog"}
]}
]}
]},
{name: "loggedInControls", showing: false, components: [
{name: "greeting", classes: "blerg-controls-greeting", components: [
{tag: null, content: "Hello, "},
{name: "userlink", tag: "a"},
{tag: null, content: ". "},
{kind: "blerg.Link", content: "Logout", onNavigate: "logoutClicked"},
{tag: null, content: "."},
{tag: "br"},
{kind: "blerg.Link", content: "Account Center", href: '/#/account'},
{tag: null, content: "."}
]},
{classes: "blerg-controls-toolbar", components: [
{name: "mentionButton", kind: "onyx.Button", content: "Feed Your Vanity", onclick: "chatterClicked"},
{name: "feedButton", kind: "onyx.Button", classes: "feed-button", content: "Stalk Your Victims", onclick: "feedClicked"},
{name: "spewButton", kind: "onyx.Button", classes: "spew-button", content: "Spew It!", onclick: "spewToggle"}
]},
]},
{name: "forgotPasswordDialog", kind: "blerg.ForgotPasswordDialog"},
{name: "api", kind: "blerg.API",
onStatus: "gotStatus"},
{kind: "Signals",
onClearNotification: "clearNotification"}
],
showRSS: function(url) {
this.$.rssButton.show();
if (url)
this.$.rssButton.setAttribute('href', url);
},
hideRSS: function() {
this.$.rssButton.hide();
},
loggedInChanged: function() {
if (this.loggedIn) {
this.$.loggedOutControls.hide();
this.$.loggedInControls.show();
} else {
this.$.loggedOutControls.show();
this.$.loggedInControls.hide();
}
},
loginClicked: function(inSender, inEvent) {
this.bubble('onTryLogin', {
username: this.$.username.getValue(),
password: this.$.password.getValue()
});
inEvent.preventDefault();
return true;
},
loginKeyUp: function(inSender, inEvent) {
if (inEvent.keyCode == 13) {
if (this.$.username.hasFocus()) {
this.$.password.focus();
} else {
this.loginClicked(this, inEvent);
}
return true;
}
},
logoutClicked: function() {
this.bubble('onTryLogout');
return true;
},
login: function(inSender, inEvent) {
this.$.password.setValue('');
this.$.forgotPassword.hide();
// TODO: Replace with regular blur() call in future enyo
this.$.password.node.blur();
this.setLoggedIn(true);
this.$.userlink.setAttribute('href', '/#' + inEvent.username);
this.$.userlink.setContent('@' + inEvent.username);
this.username = inEvent.username;
this.updateStatus();
this.feedStatusUpdateInterval = setInterval(function() {
this.updateStatus();
}.bind(this), 900000);
},
logout: function(inSender, inEvent) {
this.setLoggedIn(false);
clearInterval(this.feedStatusUpdateInterval);
},
changePasswordClicked: function() {
this.bubble('onShowChangePassword');
},
spewToggle: function(inSender, inEvent) {
this.postShowing = !this.postShowing;
this.bubble('onPostVisibility', {showing: this.postShowing});
},
postVisibilityUpdate: function(inSender, inEvent) {
this.postShowing = inEvent.showing;
this.$.spewButton.addRemoveClass('active', inEvent.showing);
},
updateStatus: function() {
this.$.api.getStatus();
},
gotStatus: function(inSender, inEvent) {
if ('mentioned' in inEvent) {
this.$.mentionButton.addRemoveClass('new', inEvent.mentioned);
}
if ('feed_new' in inEvent) {
this.$.feedButton.addRemoveClass('new', inEvent.feed_new > 0);
if (inEvent.feed_new > 0) {
this.$.feedButton.setContent('Stalk Your Victims (' + inEvent.feed_new + ')');
} else {
this.$.feedButton.setContent('Stalk Your Victims');
}
}
},
chatterClicked: function() {
window.location.href = '/#/ref/' + this.username;
this.bubble('onNavigate');
},
feedClicked: function() {
window.location.href = '/#/feed';
this.bubble('onNavigate');
},
clearNotification: function(inSender, inEvent) {
if (inEvent.type == 'feed') {
this.gotStatus(this, {feed_new: 0});
} else if (inEvent.type == 'mentioned') {
this.gotStatus(this, {mentioned: false});
}
},
showForgotPasswordLink: function(inSender, inevent) {
this.$.forgotPassword.show();
},
popupForgotPasswordDialog: function() {
this.$.forgotPasswordDialog.setUsername(this.$.username.getValue());
this.$.forgotPasswordDialog.show();
}
});