diff options
-rw-r--r-- | taginfo-config-example.json | 5 | ||||
-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 |
5 files changed, 69 insertions, 6 deletions
diff --git a/taginfo-config-example.json b/taginfo-config-example.json index 20ccfae..74789c2 100644 --- a/taginfo-config-example.json +++ b/taginfo-config-example.json @@ -38,6 +38,11 @@ "turbo": { "url_prefix": "http://overpass-turbo.eu/?" }, + "level0": { + "max_results": 50, + "overpass_url_prefix": "http://overpass.osm.rambler.ru/cgi/interpreter?", + "level0_url_prefix": "http://level0.osmz.ru/?" + }, "opensearch": { // For the OpenSearchDescription. You have to change at least the shortname and the contact for your instance. "shortname": "Taginfo Test Instance", 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 |