enyo.kind({
- name: "blerg.Controls",
- kind: "Control",
- classes: "blerg-controls",
- username: null,
- postShowing: false,
- published: {
- loggedIn: false
- },
- handlers: {
- onLogin: "login",
- onLogout: "logout",
- onPostVisibility: "postVisibilityUpdate"
- },
- components: [
- {name: "loggedOutControls", components: [
- {tag: "form", onsubmit: "loginClicked", classes: "login", components: [
- {kind: "onyx.Groupbox", components: [
- {kind: "onyx.InputDecorator", components: [
- {name: "username", kind: "onyx.Input", placeholder: "Username"}
- ]},
- {kind: "onyx.InputDecorator", components: [
- {name: "password", kind: "onyx.Input", placeholder: "Password", type: "password"}
- ]},
- ]},
- {kind: "onyx.Button", content: "Login", onclick: "loginClicked"}
- ]}
- ]},
- {name: "loggedInControls", showing: false, components: [
- {name: "greeting", components: [
- {noDom: true, content: "Hello, "},
- {name: "userlink", tag: "a"},
- {noDom: true, content: ". "},
- {kind: "blerg.Link", content: "Logout", onNavigate: "logoutClicked"},
- {noDom: true, content: "."}
- ]},
- {components: [
- {name: "rssButton", kind: "blerg.Link", showing: false, components: [
- {kind: "Image", src: "/images/rss.png", width: 16, height: 16},
- {noDom: true, content: " RSS"}
- ]}
- ]},
- {classes: "blerg-controls-toolbar", components: [
- {kind: "onyx.Button", content: "Feed Your Vanity", onclick: "chatterClicked"},
- {kind: "onyx.Button", content: "Stalk Your Victims", onclick: "feedClicked"},
- {name: "spewButton", kind: "onyx.Button", classes: "spew-button", content: "Spew It!", onclick: "spewToggle"}
- ]},
- ]}
- ],
- 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;
- },
- logoutClicked: function() {
- this.bubble('onTryLogout');
- return true;
- },
- login: function(inSender, inEvent) {
- this.$.password.setValue('');
- this.setLoggedIn(true);
- this.$.userlink.setAttribute('href', '/#' + inEvent.username);
- this.$.userlink.setContent('@' + inEvent.username);
- this.username = inEvent.username;
- },
- logout: function(inSender, inEvent) {
- this.setLoggedIn(false);
- },
- 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);
- }
+ 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();
+ }
});