summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorJochen Topf <jochen@topf.org>2013-01-20 11:17:59 +0100
committerJochen Topf <jochen@topf.org>2013-01-20 11:17:59 +0100
commitad0df22a8f4b6e2546734f5990ea74bd73329d56 (patch)
tree0de94ec1625b4e42c4c93f1688771a2fe8a007ec /web
parenteaf29ca05a1b4ea7f61c44e262c17d7c5feb1a0a (diff)
downloadtaginfo-ad0df22a8f4b6e2546734f5990ea74bd73329d56.tar
taginfo-ad0df22a8f4b6e2546734f5990ea74bd73329d56.tar.gz
Add wiki tab to relation page
Diffstat (limited to 'web')
-rw-r--r--web/i18n/de.yml8
-rw-r--r--web/i18n/en.yml5
-rw-r--r--web/lib/api/v4/relation.rb47
-rw-r--r--web/lib/ui/relation.rb3
-rw-r--r--web/views/relation.erb11
-rw-r--r--web/viewsjs/relation.js.erb28
6 files changed, 102 insertions, 0 deletions
diff --git a/web/i18n/de.yml b/web/i18n/de.yml
index 9de7085..6f7384f 100644
--- a/web/i18n/de.yml
+++ b/web/i18n/de.yml
@@ -289,6 +289,14 @@ pages:
ways_tooltip: Relation Members vom Typ Way mit dieser Rolle (und als Prozentsatz aller Members von Typ Way) für diesen Relation-Typ.
relations_tooltip: Relation Members vom Typ Relation mit dieser Rolle (und als Prozentsatz aller Members von Typ Relation) für diesen Relation-Typ.
no_roles_info: Zu diesem Relation-Typ gibt es keine Informationen über Roles (wahrscheinlich weil es nur sehr wenige dieser Relations gibt).
+ graph:
+ tab: Role-Diagramm
+ title: Role-Diagramm
+ wiki_pages:
+ title: Wiki-Seiten zu diesem Relation-Typ
+ none_found: Keine Wiki-Seiten für diesen Relation-Typ vorhanden.
+ create: Wiki-Seite für diesen Relation-Typ anlegen
+ wiki_page: Wiki-Seite
flexigrid:
pagetext: Seite
diff --git a/web/i18n/en.yml b/web/i18n/en.yml
index 062786c..3b2e96f 100644
--- a/web/i18n/en.yml
+++ b/web/i18n/en.yml
@@ -288,6 +288,11 @@ pages:
graph:
tab: Roles Graph
title: Roles Graph
+ wiki_pages:
+ title: Wiki pages about this relation type
+ none_found: No wiki page available for this relation type.
+ create: Create wiki page for this relation type
+ wiki_page: Wiki page
flexigrid:
pagetext: Page
diff --git a/web/lib/api/v4/relation.rb b/web/lib/api/v4/relation.rb
index cd4aab5..82ffd15 100644
--- a/web/lib/api/v4/relation.rb
+++ b/web/lib/api/v4/relation.rb
@@ -103,4 +103,51 @@ class Taginfo < Sinatra::Base
}.to_json
end
+ api(4, 'relation/wiki_pages', {
+ :description => 'Get list of wiki pages in different languages describing a relation type.',
+ :parameters => { :rtype => 'Relation type (required)' },
+ :paging => :no,
+ :result => no_paging_results([
+ [:lang, :STRING, 'Language code.'],
+ [:language, :STRING, 'Language name in its language.'],
+ [:language_en, :STRING, 'Language name in English.'],
+ [:title, :STRING, 'Wiki page title.'],
+ [:description, :STRING, 'Short description of key from wiki page.'],
+ [:image, :HASH, 'Associated image.', [
+ [:title, :STRING, 'Wiki page title of associated image.' ],
+ [:width, :INT, 'Width of image.' ],
+ [:height, :INT, 'Height of image.' ],
+ [:mime, :STRING, 'MIME type of image.' ],
+ [:image_url, :STRING, 'Image URL' ],
+ [:thumb_url_prefix, :STRING, 'Prefix of thumbnail URL.' ],
+ [:thumb_url_suffix, :STRING, 'Suffix of thumbnail URL.' ]
+ ]]
+ ]),
+ :notes => 'To get the complete thumbnail image URL, concatenate <tt>thumb_url_prefix</tt>, width of image in pixels, and <tt>thumb_url_suffix</tt>. The thumbnail image width must be smaller than <tt>width</tt>, use the <tt>image_url</tt> otherwise.',
+ :example => { :rtype => 'multipolygon' },
+ :ui => '/relations/multipolygon#wiki'
+ }) do
+ rtype = params[:rtype]
+
+ res = @db.execute('SELECT * FROM wiki.relation_pages LEFT OUTER JOIN wiki.wiki_images USING (image) WHERE rtype = ? ORDER BY lang', rtype)
+
+ return res.map{ |row| {
+ :lang => h(row['lang']),
+ :language => h(::Language[row['lang']].native_name),
+ :language_en => h(::Language[row['lang']].english_name),
+ :title => h(row['title']),
+ :description => h(row['description']),
+ :image => {
+ :title => h(row['image']),
+ :width => row['width'].to_i,
+ :height => row['height'].to_i,
+ :mime => h(row['mime']),
+ :image_url => h(row['image_url']),
+ :thumb_url_prefix => h(row['thumb_url_prefix']),
+ :thumb_url_suffix => h(row['thumb_url_suffix'])
+ }
+ }
+ }.to_json
+ end
+
end
diff --git a/web/lib/ui/relation.rb b/web/lib/ui/relation.rb
index 4b5af88..a8cfa43 100644
--- a/web/lib/ui/relation.rb
+++ b/web/lib/ui/relation.rb
@@ -8,9 +8,12 @@ class Taginfo < Sinatra::Base
@rtype = params[:rtype]
end
+ @rtype_uri = escape(@rtype)
+
@title = [escape_html(@rtype), t.osm.relations]
section :relations
+ @wiki_count = @db.count('wiki.relation_pages').condition('rtype=?', @rtype).get_first_value().to_i
@count_all_values = @db.select("SELECT count_relations FROM db.keys").condition('key = ?', @rtype).get_first_value().to_i
@desc = h(@db.select("SELECT description FROM wiki.relation_pages WHERE lang=? AND rtype=?", r18n.locale.code, @rtype).get_first_value())
diff --git a/web/views/relation.erb b/web/views/relation.erb
index 845ab65..0ed3dd9 100644
--- a/web/views/relation.erb
+++ b/web/views/relation.erb
@@ -15,6 +15,7 @@
<li><a href="#overview"><%= t.pages.relation.overview.tab %></a></li>
<li><a href="#roles"><%= t.pages.relation.roles.tab %></a></li>
<li><a href="#graph"><%= t.pages.relation.graph.tab %></a></li>
+ <li><a href="#wiki"><%= t.sources.wiki.name %></a></li>
</ul>
<div id="overview">
<% if @image_url %>
@@ -41,6 +42,16 @@
<div class="canvas">
</div>
</div>
+ <div id="wiki">
+ <h2><%= t.pages.relation.wiki_pages.title %></h2>
+ <% if @wiki_count > 0 %>
+ <table id="grid-wiki">
+ </table>
+ <% else %>
+ <p class="empty"><%= t.pages.relation.wiki_pages.none_found %></p>
+ <p><a class="extlink" target="_blank" rel="nofollow" href="http://wiki.openstreetmap.org/w/index.php?action=edit&title=Relation:<%= @rtype_uri %>"><%= t.pages.relation.wiki_pages.create %></a></p>
+ <% end %>
+ </div>
</div>
<iframe id="josmiframe" name="josmiframe"></iframe>
<% javascript do
diff --git a/web/viewsjs/relation.js.erb b/web/viewsjs/relation.js.erb
index 5d38ffb..c2e003b 100644
--- a/web/viewsjs/relation.js.erb
+++ b/web/viewsjs/relation.js.erb
@@ -1,5 +1,6 @@
<%
osm = @trans.t.osm
+ misc = @trans.t.misc
page = @trans.t.pages.relation
%>
var create_flexigrid_for = {
@@ -54,6 +55,33 @@ var create_flexigrid_for = {
return data;
}
});
+ },
+ wiki: function(rtype) {
+ create_flexigrid('grid-wiki', {
+ url: '/api/4/relation/wiki_pages?rtype=' + encodeURIComponent(rtype),
+ colModel: [
+ { display: '<%= misc.language %>', name: 'lang', width: 150, sortable: false },
+ { display: '<%= page.wiki_pages.wiki_page %>', name: 'title', width: 160, sortable: false, align: 'right' },
+ { display: '<%= misc.description %>', name: 'description', width: 500, sortable: false },
+ { display: '<%= misc.image %>', name: 'image', width: 300, sortable: false }
+ ],
+ usepager: false,
+ useRp: false,
+ preProcess: function(data) {
+ return {
+ total: data.size,
+ page: 1,
+ rows: jQuery.map(data, function(row, i) {
+ return { 'cell': [
+ fmt_language(row.lang, row.language, row.language_en),
+ link_to_wiki(row.title),
+ row.description,
+ fmt_wiki_image_popup(row.image)
+ ]};
+ })
+ };
+ }
+ });
}
};