FEATURE: Use shift+Z twice to log out

This commit is contained in:
Robin Ward 2015-09-01 16:37:54 -04:00
parent 9f50f70670
commit f2fa7a39be
4 changed files with 28 additions and 19 deletions

View file

@ -53,7 +53,8 @@ const PATH_BINDINGS = {
'q': 'quoteReply', 'q': 'quoteReply',
'b': 'toggleBookmark', 'b': 'toggleBookmark',
'f': 'toggleBookmarkTopic', 'f': 'toggleBookmarkTopic',
'shift+r': 'replyToTopic' 'shift+r': 'replyToTopic',
'shift+z shift+z': 'logout'
}; };
@ -73,25 +74,29 @@ export default {
_.each(FUNCTION_BINDINGS, this._bindToFunction, this); _.each(FUNCTION_BINDINGS, this._bindToFunction, this);
}, },
toggleBookmark(){ toggleBookmark() {
this.sendToSelectedPost('toggleBookmark'); this.sendToSelectedPost('toggleBookmark');
this.sendToTopicListItemView('toggleBookmark'); this.sendToTopicListItemView('toggleBookmark');
}, },
toggleBookmarkTopic(){ toggleBookmarkTopic() {
const topic = this.currentTopic(); const topic = this.currentTopic();
// BIG hack, need a cleaner way // BIG hack, need a cleaner way
if(topic && $('.posts-wrapper').length > 0) { if (topic && $('.posts-wrapper').length > 0) {
topic.toggleBookmark(); topic.toggleBookmark();
} else { } else {
this.sendToTopicListItemView('toggleBookmark'); this.sendToTopicListItemView('toggleBookmark');
} }
}, },
quoteReply(){ logout() {
this.container.lookup('route:application').send('logout');
},
quoteReply() {
$('.topic-post.selected button.create').click(); $('.topic-post.selected button.create').click();
// lazy but should work for now // lazy but should work for now
setTimeout(function(){ setTimeout(function() {
$('#wmd-quote-post').click(); $('#wmd-quote-post').click();
}, 500); }, 500);
}, },
@ -185,25 +190,25 @@ export default {
this.container.lookup('controller:application').send('showKeyboardShortcutsHelp'); this.container.lookup('controller:application').send('showKeyboardShortcutsHelp');
}, },
sendToTopicListItemView(action){ sendToTopicListItemView(action) {
const elem = $('tr.selected.topic-list-item.ember-view')[0]; const elem = $('tr.selected.topic-list-item.ember-view')[0];
if(elem){ if (elem) {
const view = Ember.View.views[elem.id]; const view = Ember.View.views[elem.id];
view.send(action); view.send(action);
} }
}, },
currentTopic(){ currentTopic() {
const topicController = this.container.lookup('controller:topic'); const topicController = this.container.lookup('controller:topic');
if(topicController) { if (topicController) {
const topic = topicController.get('model'); const topic = topicController.get('model');
if(topic){ if (topic) {
return topic; return topic;
} }
} }
}, },
sendToSelectedPost(action){ sendToSelectedPost(action) {
const container = this.container; const container = this.container;
// TODO: We should keep track of the post without a CSS class // TODO: We should keep track of the post without a CSS class
const selectedPostId = parseInt($('.topic-post.selected article.boxed').data('post-id'), 10); const selectedPostId = parseInt($('.topic-post.selected article.boxed').data('post-id'), 10);
@ -266,7 +271,7 @@ export default {
const $selected = $articles.filter('.selected'); const $selected = $articles.filter('.selected');
let index = $articles.index($selected); let index = $articles.index($selected);
if($selected.length !== 0){ //boundries check if ($selected.length !== 0) { //boundries check
// loop is not allowed // loop is not allowed
if (direction === -1 && index === 0) { return; } if (direction === -1 && index === 0) { return; }
if (direction === 1 && index === ($articles.size()-1) ) { return; } if (direction === 1 && index === ($articles.size()-1) ) { return; }
@ -277,15 +282,15 @@ export default {
const scrollTop = $(document).scrollTop(); const scrollTop = $(document).scrollTop();
index = 0; index = 0;
$articles.each(function(){ $articles.each(function() {
const top = $(this).position().top; const top = $(this).position().top;
if(top > scrollTop) { if (top > scrollTop) {
return false; return false;
} }
index += 1; index += 1;
}); });
if(index >= $articles.length){ if (index >= $articles.length) {
index = $articles.length - 1; index = $articles.length - 1;
} }
@ -299,7 +304,7 @@ export default {
$articles.removeClass('selected'); $articles.removeClass('selected');
$article.addClass('selected'); $article.addClass('selected');
if($article.is('.topic-list-item')){ if ($article.is('.topic-list-item')) {
this.sendToTopicListItemView('select'); this.sendToTopicListItemView('select');
} }
@ -355,7 +360,7 @@ export default {
active = $('#navigation-bar li.active'), active = $('#navigation-bar li.active'),
index = $sections.index(active) + direction; index = $sections.index(active) + direction;
if(index >= 0 && index < $sections.length){ if (index >= 0 && index < $sections.length) {
$sections.eq(index).find('a').click(); $sections.eq(index).find('a').click();
} }
}, },

View file

@ -19,7 +19,9 @@ const ApplicationRoute = Discourse.Route.extend(OpenComposer, {
actions: { actions: {
logout() { logout() {
this.currentUser.destroySession().then(() => logout(this.siteSettings, this.keyValueStore)); if (this.currentUser) {
this.currentUser.destroySession().then(() => logout(this.siteSettings, this.keyValueStore));
}
}, },
_collectTitleTokens(tokens) { _collectTitleTokens(tokens) {

View file

@ -32,6 +32,7 @@
<li>{{{i18n 'keyboard_shortcuts_help.application.help'}}}</li> <li>{{{i18n 'keyboard_shortcuts_help.application.help'}}}</li>
<li>{{{i18n 'keyboard_shortcuts_help.application.dismiss_new_posts'}}}</li> <li>{{{i18n 'keyboard_shortcuts_help.application.dismiss_new_posts'}}}</li>
<li>{{{i18n 'keyboard_shortcuts_help.application.dismiss_topics'}}}</li> <li>{{{i18n 'keyboard_shortcuts_help.application.dismiss_topics'}}}</li>
<li>{{{i18n 'keyboard_shortcuts_help.application.log_out'}}}</li>
</ul> </ul>
</div> </div>
<div class="span6"> <div class="span6">

View file

@ -2581,6 +2581,7 @@ en:
help: '<b>?</b> Open keyboard help' help: '<b>?</b> Open keyboard help'
dismiss_new_posts: '<b>x</b>, <b>r</b> Dismiss New/Posts' dismiss_new_posts: '<b>x</b>, <b>r</b> Dismiss New/Posts'
dismiss_topics: '<b>x</b>, <b>t</b> Dismiss Topics' dismiss_topics: '<b>x</b>, <b>t</b> Dismiss Topics'
log_out: '<b>shift</b>+<b>z</b> <b>shift</b>+<b>z</b> Log Out'
actions: actions:
title: 'Actions' title: 'Actions'
bookmark_topic: '<b>f</b> Toggle bookmark topic' bookmark_topic: '<b>f</b> Toggle bookmark topic'