diff options
author | Jochen Topf <jochen@topf.org> | 2013-01-20 11:17:59 +0100 |
---|---|---|
committer | Jochen Topf <jochen@topf.org> | 2013-01-20 11:17:59 +0100 |
commit | ad0df22a8f4b6e2546734f5990ea74bd73329d56 (patch) | |
tree | 0de94ec1625b4e42c4c93f1688771a2fe8a007ec /web | |
parent | eaf29ca05a1b4ea7f61c44e262c17d7c5feb1a0a (diff) | |
download | taginfo-ad0df22a8f4b6e2546734f5990ea74bd73329d56.tar taginfo-ad0df22a8f4b6e2546734f5990ea74bd73329d56.tar.gz |
Add wiki tab to relation page
Diffstat (limited to 'web')
-rw-r--r-- | web/i18n/de.yml | 8 | ||||
-rw-r--r-- | web/i18n/en.yml | 5 | ||||
-rw-r--r-- | web/lib/api/v4/relation.rb | 47 | ||||
-rw-r--r-- | web/lib/ui/relation.rb | 3 | ||||
-rw-r--r-- | web/views/relation.erb | 11 | ||||
-rw-r--r-- | web/viewsjs/relation.js.erb | 28 |
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) + ]}; + }) + }; + } + }); } }; |