summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJochen Topf <jochen@topf.org>2014-05-14 15:58:59 +0200
committerJochen Topf <jochen@topf.org>2014-05-14 15:58:59 +0200
commit90255cc4e9044f821f23d6881e883908c45eb6bb (patch)
tree4965b73f8fe28a56bf55b814de949ba5ecf12281
parentf91e3bdce425be9a839687a2f13c3c10a2e96838 (diff)
downloadtaginfo-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.
-rw-r--r--taginfo-config-example.json5
-rw-r--r--web/lib/utils.rb6
-rw-r--r--web/public/js/taginfo.js34
-rw-r--r--web/views/key.erb16
-rw-r--r--web/views/tag.erb14
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