From 8a3beaa29c1e16a4f230a414734de33d402c1c51 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Wed, 16 Jan 2013 15:52:16 +0100 Subject: Add keyboard shortcuts --- web/public/js/taginfo.js | 79 +++++++++++++++++++++- web/views/tag.erb | 1 + web/viewsjs/index.js.erb | 2 + web/viewsjs/key.js.erb | 2 + web/viewsjs/relation.js.erb | 1 + web/viewsjs/reports/characters_in_keys.js.erb | 1 + .../frequently_used_keys_without_wiki_page.js.erb | 1 + web/viewsjs/reports/josm_styles.js.erb | 1 + web/viewsjs/reports/key_lengths.js.erb | 1 + ...ge_comparison_table_for_keys_in_the_wiki.js.erb | 1 + web/viewsjs/reports/languages.js.erb | 1 + web/viewsjs/reports/name_tags.js.erb | 1 + .../wiki_pages_about_non_existing_keys.js.erb | 1 + 13 files changed, 90 insertions(+), 3 deletions(-) (limited to 'web') diff --git a/web/public/js/taginfo.js b/web/public/js/taginfo.js index 8846898..f9bcb06 100644 --- a/web/public/js/taginfo.js +++ b/web/public/js/taginfo.js @@ -13,7 +13,8 @@ Number.prototype.print_as_percent = function() { /* ============================ */ var grids = {}, - current_grid = ''; + current_grid = '', + up = function() { window.location = '/'; }; /* ============================ */ @@ -302,7 +303,7 @@ function pp_rtype(rtype) { function pp_role(role) { if (role == '') { - return span(texts.misc.empty_string, 'badchar empty'); + return span(texts.misc.empty_string, 'empty'); } var result = '', @@ -401,6 +402,16 @@ function create_flexigrid(domid, options) { grids[domid] = me.flexigrid(jQuery.extend({}, flexigrid_defaults, texts.flexigrid, options, { rp: rp })); jQuery('th *[title]').tipsy({ opacity: 1, delayIn: 500, gravity: 's', offset: 3 }); jQuery('.sDiv input[title]').tipsy({ opacity: 1, delayIn: 500, gravity: 'e' }); + jQuery('input.qsbox').bind('keydown', function(event) { + if (event.which == 27) { // esc + this.blur(); + return false; + } + if (event.which == 9) { // tab + jQuery('input#search').focus(); + return false; + } + }); } else { // grid does exist, make sure it has the right size resize_grid(domid); @@ -469,7 +480,69 @@ jQuery(document).ready(function() { window.location = '/keys/' + ui.item.value; } } - }).focus(); + }); + + jQuery(document).bind('keyup', function(event) { + if (event.target == document.body) { + if (event.which >= 49 && event.which <= 57) { // digit + jQuery("#tabs").tabs("select", event.which - 49); + } else { + switch (event.which) { + /* case 63: // ? + window.location = '/help'; + break;*/ + case 70: // f + jQuery('input.qsbox').focus(); + break; + case 72: // h + window.location = '/'; + break; + case 75: // k + window.location = '/keys'; + break; + case 83: // s + jQuery('input#search').focus(); + break; + case 84: // t + window.location = '/tags'; + break; + case 8: // backspace + up(); + break; + case 36: // home + jQuery('div.pFirst:visible').click(); + break; + case 33: // page up + jQuery('div.pPrev:visible').click(); + break; + case 34: // page down + jQuery('div.pNext:visible').click(); + break; + case 35: // end + jQuery('div.pLast:visible').click(); + break; + } + } + } + }); + + jQuery(document).bind('keydown', function(event) { + if (event.target == document.body && event.which == 9) { + jQuery('input#search').focus(); + return false; + } + }); + + jQuery('input#search').bind('keydown', function(event) { + if (event.which == 27) { // esc + this.blur(); + return false; + } + if (event.which == 9) { // tab + jQuery('input.qsbox:visible').focus(); + return false; + } + }); jQuery(window).resize(function() { resize_box(); diff --git a/web/views/tag.erb b/web/views/tag.erb index d9ef5a2..0ad61c7 100644 --- a/web/views/tag.erb +++ b/web/views/tag.erb @@ -76,6 +76,7 @@ function page_init2() { var key = #{ @key.to_json }, value = #{ @value.to_json }; + up = function() { window.location = url_for_key(key); }; jQuery('h1').html(link_to_key(key) + '=' + pp_value(value)); jQuery('span#keylink').html(link_to_key(key)); init_tabs([key, value, #{ @filter_type.to_json }]); diff --git a/web/viewsjs/index.js.erb b/web/viewsjs/index.js.erb index 59a7806..2d11329 100644 --- a/web/viewsjs/index.js.erb +++ b/web/viewsjs/index.js.erb @@ -14,6 +14,8 @@ var tags_data = <%= tags.map{ |entry| [ entry['skey'], entry['svalue'] ] }.to_js var width, height, font_family = 'Impact', font_weight = 'normal'; +up = function() {}; + function draw(words) { var fill = d3.scale.category20b(); diff --git a/web/viewsjs/key.js.erb b/web/viewsjs/key.js.erb index aceef99..b0a67e4 100644 --- a/web/viewsjs/key.js.erb +++ b/web/viewsjs/key.js.erb @@ -183,6 +183,8 @@ function create_chart(params) { } function page_init() { + up = function() { window.location = '/keys'; } + jQuery('#josm_button').bind('click', function() { jQuery('#josmiframe')[0].src = jQuery('#josm_button')[0].href; return false; diff --git a/web/viewsjs/relation.js.erb b/web/viewsjs/relation.js.erb index c33073e..f4713be 100644 --- a/web/viewsjs/relation.js.erb +++ b/web/viewsjs/relation.js.erb @@ -35,5 +35,6 @@ var create_flexigrid_for = { }; function page_init() { + up = function() { window.location = '/relations'; }; page_init2(); } diff --git a/web/viewsjs/reports/characters_in_keys.js.erb b/web/viewsjs/reports/characters_in_keys.js.erb index a36f7b4..900b155 100644 --- a/web/viewsjs/reports/characters_in_keys.js.erb +++ b/web/viewsjs/reports/characters_in_keys.js.erb @@ -72,6 +72,7 @@ var create_flexigrid_for = { }; function page_init() { + up = function() { window.location = '/reports'; }; init_tabs([]); var w = 968, diff --git a/web/viewsjs/reports/frequently_used_keys_without_wiki_page.js.erb b/web/viewsjs/reports/frequently_used_keys_without_wiki_page.js.erb index 680ba5d..d405fe5 100644 --- a/web/viewsjs/reports/frequently_used_keys_without_wiki_page.js.erb +++ b/web/viewsjs/reports/frequently_used_keys_without_wiki_page.js.erb @@ -36,6 +36,7 @@ function create_flexigrid_with_option(english) { } function page_init() { + up = function() { window.location = '/reports'; }; page_init2(); jQuery('#english').bind('click', function() { jQuery('#grid-keys').flexOptions({ diff --git a/web/viewsjs/reports/josm_styles.js.erb b/web/viewsjs/reports/josm_styles.js.erb index ea3b365..157f223 100644 --- a/web/viewsjs/reports/josm_styles.js.erb +++ b/web/viewsjs/reports/josm_styles.js.erb @@ -33,5 +33,6 @@ function create_flexigrid_with_option(stylename) { } function page_init() { + up = function() { window.location = '/reports'; }; page_init2(); } diff --git a/web/viewsjs/reports/key_lengths.js.erb b/web/viewsjs/reports/key_lengths.js.erb index 63652ca..af13615 100644 --- a/web/viewsjs/reports/key_lengths.js.erb +++ b/web/viewsjs/reports/key_lengths.js.erb @@ -47,6 +47,7 @@ end hist = hist.map{ |item| item.nil? ? 0 : item } %> function page_init() { + up = function() { window.location = '/reports'; }; init_tabs([]); var bar_width = 6, diff --git a/web/viewsjs/reports/language_comparison_table_for_keys_in_the_wiki.js.erb b/web/viewsjs/reports/language_comparison_table_for_keys_in_the_wiki.js.erb index f4f99cd..85184a8 100644 --- a/web/viewsjs/reports/language_comparison_table_for_keys_in_the_wiki.js.erb +++ b/web/viewsjs/reports/language_comparison_table_for_keys_in_the_wiki.js.erb @@ -12,6 +12,7 @@ @languages_lookup = @languages.map{ |lang| "'#{lang}': #{lang_lookup[lang]}" }.join(', ') %> function page_init() { + up = function() { window.location = '/reports'; }; var lang_to_idx = { <%= @languages_lookup %> }; diff --git a/web/viewsjs/reports/languages.js.erb b/web/viewsjs/reports/languages.js.erb index 2cb8a8f..9d8bd04 100644 --- a/web/viewsjs/reports/languages.js.erb +++ b/web/viewsjs/reports/languages.js.erb @@ -1,5 +1,6 @@ <% page = @trans.t.reports.languages %> function page_init() { + up = function() { window.location = '/reports'; }; create_flexigrid('grid-langs', { url: '/api/4/wiki/languages', colModel: [ diff --git a/web/viewsjs/reports/name_tags.js.erb b/web/viewsjs/reports/name_tags.js.erb index 241bdc3..07b78cc 100644 --- a/web/viewsjs/reports/name_tags.js.erb +++ b/web/viewsjs/reports/name_tags.js.erb @@ -74,6 +74,7 @@ var create_flexigrid_for = { }; function page_init() { + up = function() { window.location = '/reports'; }; jQuery('#subtag-filter').bind('change', function() { var value = this.value; diff --git a/web/viewsjs/reports/wiki_pages_about_non_existing_keys.js.erb b/web/viewsjs/reports/wiki_pages_about_non_existing_keys.js.erb index a0addf6..54d1d14 100644 --- a/web/viewsjs/reports/wiki_pages_about_non_existing_keys.js.erb +++ b/web/viewsjs/reports/wiki_pages_about_non_existing_keys.js.erb @@ -3,6 +3,7 @@ page = @trans.t.reports.wiki_pages_about_non_existing_keys %> function page_init() { + up = function() { window.location = '/reports'; }; create_flexigrid('grid-keys', { url: '/api/4/keys/all?filters=in_wiki,not_in_db&include=wikipages', colModel: [ -- cgit v1.2.3