diff options
author | Jochen Topf <jochen@topf.org> | 2014-05-14 15:58:59 +0200 |
---|---|---|
committer | Jochen Topf <jochen@topf.org> | 2014-05-14 15:58:59 +0200 |
commit | 90255cc4e9044f821f23d6881e883908c45eb6bb (patch) | |
tree | 4965b73f8fe28a56bf55b814de949ba5ecf12281 /web | |
parent | f91e3bdce425be9a839687a2f13c3c10a2e96838 (diff) | |
download | taginfo-90255cc4e9044f821f23d6881e883908c45eb6bb.tar taginfo-90255cc4e9044f821f23d6881e883908c45eb6bb.tar.gz |
Add "Level0 Editor" button to key and tag pages.
This allows easy editing of tags, for instance when there are typos. If you
click on this link an Overpass API call will be made to find the object IDs for
the objects with this key/tag and then the Level0 editor will be opened in a
new window with those objects. To not overwhelm the Overpass API or the Level0
editor, the link will only be active if there are less then a configurable
number of objects with the given key/tags.
Diffstat (limited to 'web')
-rw-r--r-- | web/lib/utils.rb | 6 | ||||
-rw-r--r-- | web/public/js/taginfo.js | 34 | ||||
-rw-r--r-- | web/views/key.erb | 16 | ||||
-rw-r--r-- | web/views/tag.erb | 14 |
4 files changed, 64 insertions, 6 deletions
diff --git a/web/lib/utils.rb b/web/lib/utils.rb index 0c6f777..8f0629f 100644 --- a/web/lib/utils.rb +++ b/web/lib/utils.rb @@ -101,7 +101,11 @@ def turbo_link(filter, key, value=nil) parameters[:template] = template url = TaginfoConfig.get('turbo.url_prefix', 'http://overpass-turbo.eu/?') + Rack::Utils::build_query(parameters) - return '<span class="button">' + external_link('turbo_button', '<img src="/img/turbo.png" title="overpass turbo"/>', url, true) + '</span>' + return '<span class="button">' + external_link('turbo_button', '<img src="/img/turbo.png"/> overpass turbo', url, true) + '</span>' +end + +def level0_link() + return '<span class="button">' + external_link('level0_button', 'Level0 Editor', '#', false) + '</span>' end def external_link(id, title, link, new_window=false) diff --git a/web/public/js/taginfo.js b/web/public/js/taginfo.js index 1e6f6cd..fef20d3 100644 --- a/web/public/js/taginfo.js +++ b/web/public/js/taginfo.js @@ -530,6 +530,40 @@ function table_right() { /* ============================ */ +function quote_double(text) { + return text.replace(/["\\]/, '\\$&', 'gm') +} + +function level0_editor(overpass_url_prefix, level0_url_prefix, filter, key, value) { + var query = '["' + quote_double(key); + if (value !== undefined) { + query += '"="' + quote_double(value); + } + query += '"];' + + if (filter == 'nodes') { + query = 'node' + query; + } else if (filter == 'ways') { + query = 'way' + query; + } else if (filter == 'relations') { + query = 'rel' + query; + } else { + query = '(node' + query + 'way' + query + 'rel' + query + ');'; + } + + var overpass_url = overpass_url_prefix + 'data=[out:json];' + query + 'out body;'; + + jQuery.getJSON(overpass_url, function(data) { + var objects = jQuery.map(data.elements, function(el) { + return el.type.substr(0,1) + el.id + (el.type == 'way' ? '!' : ''); + }); + var level0_url = level0_url_prefix + 'url=' + objects.join(','); + window.open(level0_url, '_blank'); + }); +} + +/* ============================ */ + function open_help() { jQuery('#help').dialog({ modal: true, diff --git a/web/views/key.erb b/web/views/key.erb index 0c1c2f7..ba0e633 100644 --- a/web/views/key.erb +++ b/web/views/key.erb @@ -9,13 +9,18 @@ </select> </form> <div id="tools" class="no-print"> - <% if @count_all_values < TaginfoConfig.get('xapi.max_results', 1000) %> + <% if @count_all_values <= TaginfoConfig.get('xapi.max_results', 1000) %> <%= xapi_link(@filter_xapi, @key) %> <%= josm_link(@filter_xapi, @key) %> <% else %> <span class="button disabled" title="Button disabled, because there are too many objects with this key">XAPI</span> <span class="button disabled" title="Button disabled, because there are too many objects with this key">JOSM</span> <% end %> <%= turbo_link(@filter_type, @key) %> + <% if @count_all_values <= TaginfoConfig.get('level0.max_results', 10) %> + <%= level0_link() %> + <% else %> + <span class="button disabled" title="Button disabled, because there are too many objects with this key">Level0 Editor</span> + <% end %> </div> <h1></h1> <p><%= @desc %></p> @@ -105,9 +110,14 @@ <% javascript do JS.raw(<<"JAVASCRIPT") function page_init2() { - var key = #{ @key.to_json }; + var filter = #{ @filter_type.to_json }, + key = #{ @key.to_json }; jQuery('h1').html(fmt_key(key)); - init_tabs([key, #{ @filter_type.to_json }, #{ r18n.locale.code.to_json }]); + jQuery('#level0_button').bind('click', function() { + level0_editor('#{ TaginfoConfig.get('level0.overpass_url_prefix') }', '#{ TaginfoConfig.get('level0.level0_url_prefix') }', filter, key, undefined); + }); + + init_tabs([key, filter, #{ r18n.locale.code.to_json }]); create_chart({ key: key, width: 160, diff --git a/web/views/tag.erb b/web/views/tag.erb index 0e1cf76..ad74217 100644 --- a/web/views/tag.erb +++ b/web/views/tag.erb @@ -16,6 +16,11 @@ <span class="button disabled" title="Button disabled, because there are too many objects with this key">JOSM</span> <% end %> <%= turbo_link(@filter_type, @key, @value) %> + <% if @count_all <= TaginfoConfig.get('level0.max_results', 10) %> + <%= level0_link() %> + <% else %> + <span class="button disabled" title="Button disabled, because there are too many objects with this key">Level0 Editor</span> + <% end %> </div> <h1></h1> <p><%= @desc %></p> @@ -102,13 +107,18 @@ <% javascript do JS.raw(<<"JAVASCRIPT") function page_init2() { - var key = #{ @key.to_json }, + var filter = #{ @filter_type.to_json }, + key = #{ @key.to_json }, value = #{ @value.to_json }; up = function() { window.location = url_for_key(key); }; jQuery('h1').html(link_to_key(key) + '=' + fmt_value(value)); jQuery('span#keylink').html(link_to_key(key)); jQuery('span#relationlink').html(link_to_rtype(value)); - init_tabs([key, value, #{ @filter_type.to_json }]); + jQuery('#level0_button').bind('click', function() { + level0_editor('#{ TaginfoConfig.get('level0.overpass_url_prefix') }', '#{ TaginfoConfig.get('level0.level0_url_prefix') }', filter, key, undefined); + }); + + init_tabs([key, value, filter]); } JAVASCRIPT end |