NewsBlur/media/js/newsblur/reader/reader_keyboard.js

418 lines
19 KiB
JavaScript
Raw Normal View History

NEWSBLUR.ReaderKeyboard = function(options) {
var defaults = {
width: 700
};
this.options = $.extend({}, defaults, options);
this.runner();
};
NEWSBLUR.ReaderKeyboard.prototype = new NEWSBLUR.Modal;
NEWSBLUR.ReaderKeyboard.prototype.constructor = NEWSBLUR.ReaderKeyboard;
_.extend(NEWSBLUR.ReaderKeyboard.prototype, {
runner: function() {
this.make_modal();
this.handle_cancel();
this.open_modal();
this.$modal.bind('click', $.rescope(this.handle_click, this));
},
make_modal: function() {
var self = this;
this.$modal = $.make('div', { className: 'NB-modal-keyboard NB-modal' }, [
$.make('div', { className: 'NB-modal-tabs' }, [
$.make('div', { className: 'NB-modal-tab NB-active NB-modal-tab-general' }, 'General'),
$.make('div', { className: 'NB-modal-tab NB-modal-tab-feeds' }, 'Feeds'),
$.make('div', { className: 'NB-modal-tab NB-modal-tab-stories' }, 'Stories')
]),
2013-04-05 11:26:25 -07:00
$.make('h2', { className: 'NB-modal-title' }, [
$.make('div', { className: 'NB-icon' }),
2013-07-03 22:15:10 -07:00
'Keyboard shortcuts',
$.make('div', { className: 'NB-icon-dropdown' })
2013-04-05 11:26:25 -07:00
]),
// General
$.make('div', { className: 'NB-tab NB-tab-general NB-active' }, [
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Switch views'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'←'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'→'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Quick search for a site'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'g'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Dashboard'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'esc'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'd'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open Everything'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'e'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Hide sites'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'u'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Full screen'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'f'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Switch focus/unread'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'+'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'-'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'View keyboard shortcuts'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'?'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Add site/folder'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'a'
])
])
])
]),
// Feeds
$.make('div', { className: 'NB-tab NB-tab-feeds' }, [
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Next site'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'↓'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'j'
])
// TODO: Mention "shift + n" here? It will be too wide.
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Prev. site'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'↑'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'k'
])
// TODO: Mention "shift + p" here? It will be too wide.
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open site/feed trainer'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
't'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open story trainer'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
't'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Mark all as read'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'a'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Oldest unread story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'm'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Reload feed/folder'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'r'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Search feed'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'/'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Toggle unread/all'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'L'
])
])
])
]),
// Stories
$.make('div', { className: 'NB-tab NB-tab-stories' }, [
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Next story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'↓'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'j'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Previous story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'↑'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'k'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open in Story view'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'enter'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open in Text view'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'enter'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Page down'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'space'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Page up'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'space'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Next Unread Story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'n'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Toggle read/unread'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'u'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'm'
])
])
2013-07-10 09:00:17 -07:00
]),
2013-12-05 14:25:15 -08:00
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Mark below stories read'),
2013-12-05 14:25:15 -08:00
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'b'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Mark above stories read'),
2013-12-05 14:25:15 -08:00
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'y'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Save/Unsave story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
's'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Email story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'e'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open in background tab'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'o'
]),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'v'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Open in new window'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
'v'
])
])
2013-07-10 09:00:17 -07:00
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Expand story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span','+'),
'x'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Collapse story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'x'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Share this story'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'shift',
$.make('span', '+'),
's'
])
]),
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Save comments'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'ctrl',
$.make('span', '+'),
'enter'
])
])
]),
$.make('div', { className: 'NB-keyboard-group' }, [
$.make('div', { className: 'NB-keyboard-shortcut' }, [
$.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Scroll to comments'),
$.make('div', { className: 'NB-keyboard-shortcut-key' }, [
'c'
])
])
])
])
]);
},
handle_cancel: function() {
var $cancel = $('.NB-modal-cancel', this.$modal);
$cancel.click(function(e) {
e.preventDefault();
$.modal.close();
});
},
// ===========
// = Actions =
// ===========
handle_click: function(elem, e) {
var self = this;
$.targetIs(e, { tagSelector: '.NB-modal-tab' }, function($t, $p) {
e.preventDefault();
var newtab;
if ($t.hasClass('NB-modal-tab-general')) {
newtab = 'general';
} else if ($t.hasClass('NB-modal-tab-feeds')) {
newtab = 'feeds';
} else if ($t.hasClass('NB-modal-tab-stories')) {
newtab = 'stories';
}
self.switch_tab(newtab);
});
}
});