summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--taginfo-config-example.json10
-rw-r--r--web/i18n/de.yml4
-rw-r--r--web/i18n/en.yml47
-rw-r--r--web/i18n/fr.yml7
-rw-r--r--web/i18n/it.yml4
-rw-r--r--web/i18n/ru.yml2
-rw-r--r--web/lib/ui/test.rb54
-rw-r--r--web/lib/utils.rb10
-rw-r--r--web/public/css/flexigrid/flexigrid.css1370
-rw-r--r--web/public/css/flexigrid/images/load-large.gifbin0 -> 3208 bytes
-rw-r--r--web/public/css/flexigrid/images/load.gifbin1737 -> 1849 bytes
-rw-r--r--web/public/css/flexigrid/images/load.pngbin827 -> 885 bytes
-rw-r--r--web/public/css/smoothness/jquery-ui-1.8.10.custom.css8
-rw-r--r--web/public/css/taginfo.css266
-rw-r--r--web/public/favicon.icobin318 -> 318 bytes
-rw-r--r--web/public/img/arrow.pngbin0 -> 269 bytes
-rw-r--r--web/public/img/mapbg/world.pngbin0 -> 7415 bytes
-rw-r--r--web/public/js/customSelect.jquery.js26
-rw-r--r--web/public/js/flexigrid.js37
-rw-r--r--web/public/js/jquery.tipsy.js241
-rw-r--r--web/public/js/taginfo.js181
-rwxr-xr-xweb/taginfo.rb11
-rw-r--r--web/views/about.erb32
-rw-r--r--web/views/apidoc.erb2
-rw-r--r--web/views/download.erb56
-rw-r--r--web/views/embed/key.erb6
-rw-r--r--web/views/embed/layout.erb6
-rw-r--r--web/views/embed/tag.erb6
-rw-r--r--web/views/index.erb62
-rw-r--r--web/views/key.erb56
-rw-r--r--web/views/keys.erb15
-rw-r--r--web/views/layout.erb25
-rw-r--r--web/views/reports/characters_in_keys.erb50
-rw-r--r--web/views/reports/database_statistics.erb102
-rw-r--r--web/views/reports/frequently_used_keys_without_wiki_page.erb38
-rw-r--r--web/views/reports/index.erb41
-rw-r--r--web/views/reports/josm_styles.erb28
-rw-r--r--web/views/reports/key_lengths.erb11
-rw-r--r--web/views/reports/language_comparison_table_for_keys_in_the_wiki.erb46
-rw-r--r--web/views/reports/languages.erb15
-rw-r--r--web/views/reports/wiki_pages_about_non_existing_keys.erb17
-rw-r--r--web/views/search.erb10
-rw-r--r--web/views/search_tags.erb10
-rw-r--r--web/views/sources.erb26
-rw-r--r--web/views/sources/index.erb20
-rw-r--r--web/views/sources/merkaartor/index.erb4
-rw-r--r--web/views/tag.erb60
-rw-r--r--web/views/tags.erb15
-rw-r--r--web/views/test/index.erb25
-rw-r--r--web/views/test/key.erb340
-rw-r--r--web/views/test/wiki_import.erb23
51 files changed, 1713 insertions, 1712 deletions
diff --git a/taginfo-config-example.json b/taginfo-config-example.json
index 25a8d4b..90caf4e 100644
--- a/taginfo-config-example.json
+++ b/taginfo-config-example.json
@@ -6,14 +6,14 @@
// url prefix for the site
"url": "http://localhost:4567",
// Used in the title of all HTML pages.
- "name": "Test Taginfo",
- // Description that appears if you click on the instance icon in the upper left.
- "description": "This is a Taginfo test instance. To change this text or the icon above change your <tt>taginfo-config.json</tt>.",
+ "name": "OpenStreetMap Taginfo",
+ // Description of this taginfo instance
+ "description": "This is a <b>taginfo test instance</b>. Change this text in your <tt>taginfo-config.json</tt>.",
// URL path to instance icon in the upper left.
"icon": "/img/logo/world.png"
},
"tagcloud": {
- "number_of_tags": 100
+ "number_of_tags": 260
},
// For the geodistribution map. See the wiki documentation about these settings.
"geodistribution": {
@@ -24,7 +24,7 @@
"width": 360,
"height": 180,
"scale_image": 2,
- "background_image": "/img/worldp.png"
+ "background_image": "/img/mapbg/world.png"
},
"xapi": {
// URL prefix for the XAPI/JOSM links on the key and tag pages.
diff --git a/web/i18n/de.yml b/web/i18n/de.yml
index d139df4..bf7406b 100644
--- a/web/i18n/de.yml
+++ b/web/i18n/de.yml
@@ -49,8 +49,6 @@ pages:
last_update_run: Letzte Aktualisierung
data_until_explanation: Alle Änderungen bis zu diesem Zeitpunkt sind auf jeden Fall in den Daten, spätere können unter Umständen auch drin sein.
to: bis
- info: |
- <p>Alle Uhrzeiten in UTC.</p>
download:
index:
intro: |
@@ -71,7 +69,7 @@ pages:
reports:
index:
intro: |
- <p class="text">Reports zeigen die Daten aus verschiedenen Perspektiven.
+ <p>Reports zeigen die Daten aus verschiedenen Perspektiven.
Meist bringen Sie Daten aus verschiedenen Quellen auf interessante Art und
Weise zusammen. Manche der Reports helfen dabei, bestimmte Arten von Fehlern
zu finden, zum Beispiel häufig verwendete Keys ohne Wiki-Seite.</p>
diff --git a/web/i18n/en.yml b/web/i18n/en.yml
index 2d4e42f..3f29e48 100644
--- a/web/i18n/en.yml
+++ b/web/i18n/en.yml
@@ -20,27 +20,41 @@ taginfo:
source: Source
sources: Sources
download: Download
- about: About Taginfo
- wiki: Wiki
+ about: About taginfo
+ wiki: taginfo wiki page
reports: Reports
keys: Keys
tags: Tags
+ international: International
map: Map
maps: Maps
combinations: Combinations
key_combinations: Combinations
overview: Overview
data_from: Data from
+ data_from_description: Last update of taginfo database
instance:
- title: About this Taginfo site
+ title: About this taginfo site
other: See the <a href="http://wiki.openstreetmap.org/wiki/Taginfo/Sites">OSM wiki</a> for other sites.
pages:
index:
- description: Taginfo is a system for finding and aggregating information about OpenStreetMap tags.
- buttons:
- show_all_keys: Show all keys
- reports: Reports
+ keys:
+ intro: |
+ Here are some of the more common tag keys:
+ listkeys: See list of all keys...
+ listtags: See list of the most common tags...
+ reports:
+ listreports: See all reports...
+ about:
+ intro:
+ <p>OpenStreetMap uses <b>tags</b> of the form <b>key=value</b>
+ to add meaning to geographic objects. Taginfo collects information
+ about these tags from several sources to help you understand what
+ they mean and how they are used.</p>
+ more: More about taginfo...
+ international:
+ see: See other taginfo sites...
sources:
index:
intro: |
@@ -52,8 +66,6 @@ pages:
last_update_run: Last update run
data_until_explanation: All edits until this time will be in the data, later edits might be.
to: to
- info: |
- <p>All times in UTC.</p>
download:
index:
intro: |
@@ -72,7 +84,7 @@ pages:
reports:
index:
intro: |
- <p class="text">Reports show the data from different angles.
+ <p>Reports show the tag data from different angles.
They often bring together data from several sources in interesting ways. Some
of the reports can help with finding specific errors.</p>
data_sources: Data sources used
@@ -80,6 +92,12 @@ pages:
results:
title: Search results
you_were_searching_for: You were searching for
+ keys:
+ intro: |
+ <p>This table shows all tag keys that exist in the database or in any of the other sources.</p>
+ tags:
+ intro: |
+ <p>This table shows the most common tags in the database.</p>
key:
no_description_in_wiki: No description in wiki
filter:
@@ -114,6 +132,7 @@ pages:
description: <i>This table shows only the most common combinations of the most common tags.</i>
wiki_pages:
title: Wiki pages about this tag
+ none_found: No wiki page available for this tag.
josm_rules:
title: JOSM style rules with this tag
choice: |
@@ -161,7 +180,9 @@ reports:
(:) is added as a separator character.</p>
statistics:
tab: Statistics
- title: Statistics Overview
+ title: Statistics overview
+ fraction: Fraction
+ characters: Characters in key
characters_in_keys:
plain: Only latin lowercase letters (<span class="char">a</span> to <span class="char">z</span>) and underscore (<span class="char">_</span>), first and last characters are letters.
colon: Like A but with one or more colons (<span class="char">:</span>) inside.
@@ -171,7 +192,7 @@ reports:
rest: Everything else.
whitespace:
tab: Whitespace
- title: Keys With Whitespace
+ title: Keys with whitespace
intro: |
<p>Keys that contain whitespace characters such as space, tab, new
line, carriage return, or whitespace characters from other
@@ -181,7 +202,7 @@ reports:
the underscore (_) should be used instead.</p>
problematic:
tab: Problematic
- title: Keys With Possibly Problematic Characters
+ title: Keys with possibly problematic characters
intro: |
<p>Keys that contain possibly problematic characters: <span
class="char">=+/&amp;&lt;&gt;;'"?%#@\,</span>. These characters
diff --git a/web/i18n/fr.yml b/web/i18n/fr.yml
index 4b33c5e..3d1bed6 100644
--- a/web/i18n/fr.yml
+++ b/web/i18n/fr.yml
@@ -47,8 +47,6 @@ pages:
last_update_run: Dernière mise à jour
data_until_explanation: Toutes les modifications jusqu'à cette date sont présentes, les suivantes le seront peut-être.
to: à
- info: |
- <p>Toutes les heures sont en temps universel (UTC).</p>
download:
index:
intro: |
@@ -65,10 +63,9 @@ pages:
reports:
index:
intro: |
- <p class="text">Les compte-rendus montre les données de différents points de vue.
+ <p>Les compte-rendus montre les données de différents points de vue.
Ils agrègent de façon interessante des données d'origines variées.
- Certains compte-rendus peuvent aider à trouver tous types d'erreurs, comme par exemple des valeurs de tags beaucoup utilisées mais n'ayant pas de page sur le wiki.
- </p>
+ Certains compte-rendus peuvent aider à trouver tous types d'erreurs, comme par exemple des valeurs de tags beaucoup utilisées mais n'ayant pas de page sur le wiki.</p>
data_sources: Data<br/>Sources
search:
results:
diff --git a/web/i18n/it.yml b/web/i18n/it.yml
index 789879e..c479dd3 100644
--- a/web/i18n/it.yml
+++ b/web/i18n/it.yml
@@ -44,8 +44,6 @@ pages:
last_update_run: Ultimo aggiornamento eseguito
data_until_explanation: Tutte le modifiche eseguite fino a questo orario saranno presenti nei dati, le modifiche successive potrebbero esserci.
to: a
- info: |
- <p>Tutti gli orari sono in UTC.</p>
download:
index:
intro: |
@@ -64,7 +62,7 @@ pages:
reports:
index:
intro: |
- <p class="text">I Reports mostrano i dati da differenti prospettive.
+ <p>I Reports mostrano i dati da differenti prospettive.
Spesso riuniscono i dati da diverse fonti in modi interessanti. Alcuni
di questi reports possono aiutare a trovare certi tipi di errori, come ad esempio
chiavi popolari senza una pagini nel wiki.</p>
diff --git a/web/i18n/ru.yml b/web/i18n/ru.yml
index e9baa9d..25106d8 100644
--- a/web/i18n/ru.yml
+++ b/web/i18n/ru.yml
@@ -69,7 +69,7 @@ pages:
reports:
index:
intro: |
- <p class="text">Отчёты представляют данные под разными углами.
+ <p>Отчёты представляют данные под разными углами.
Они сопоставляют данные из нескольких источников интересными способами.
Некоторые отчёты помогают найти определённые виды ошибок: например,
часто используемые ключи без соответствующих вики-страниц.</p>
diff --git a/web/lib/ui/test.rb b/web/lib/ui/test.rb
index 9117da1..ba66f3b 100644
--- a/web/lib/ui/test.rb
+++ b/web/lib/ui/test.rb
@@ -7,6 +7,8 @@ class Taginfo < Sinatra::Base
end
get! '/test/tags' do
+ @section = 'test'
+ @section_title = 'Test'
@title = ['Tags', 'Test']
limit = 300;
(@min, @max) = @db.select('SELECT min(count) AS min, max(count) AS max FROM popular_keys').get_columns(:min, :max)
@@ -18,59 +20,11 @@ class Taginfo < Sinatra::Base
end
get '/test/wiki_import' do
+ @section = 'test'
+ @section_title = 'Test'
@title = ['Wiki Import', 'Test']
@invalid_page_titles = @db.select('SELECT * FROM invalid_page_titles').execute()
erb :'test/wiki_import'
end
- get %r{^/test/keys/(.*)} do |key|
- if params[:key].nil?
- @key = key
- else
- @key = params[:key]
- end
-
- @key_html = escape_html(@key)
- @key_uri = escape(@key)
- @key_json = @key.to_json
- @key_pp = pp_key(@key)
-
- @title = [@key_html, 'Keys']
-
- @filter_type = get_filter()
- @sel = Hash.new('')
- @sel[@filter_type] = ' selected="selected"'
-
- @count_all_values = @db.select("SELECT count_#{@filter_type} FROM db.keys").condition('key = ?', @key).get_first_value().to_i
-
- @desc = h(@db.select("SELECT description FROM wiki.wikipages WHERE lang='en' AND key=? AND value IS NULL", @key).get_first_value())
- @desc = '<i>no description in wiki</i>' if @desc == ''
-
- @prevalent_values = @db.select("SELECT value, count_#{@filter_type} AS count FROM tags").
- condition('key=?', @key).
- condition('count > ?', @count_all_values * 0.02).
- order_by(:count, 'DESC').
- execute().map{ |row| [{ 'value' => row['value'], 'count' => row['count'].to_i }] }
-
- # add "(other)" label for the rest of the values
- sum = @prevalent_values.inject(0){ |sum, x| sum += x[0]['count'] }
- if sum < @count_all_values
- @prevalent_values << [{ 'value' => '(other)', 'count' => @count_all_values - sum }]
- end
-
- @wiki_count = @db.count('wiki.wikipages').condition('value IS NULL').condition('key=?', @key).get_first_value().to_i
-
- (@merkaartor_type, @merkaartor_link, @merkaartor_selector) = @db.select('SELECT tag_type, link, selector FROM merkaartor.keys').condition('key=?', @key).get_columns(:tag_type, :link, :selector)
- @merkaartor_images = [:node, :way, :area, :relation].map{ |type|
- name = type.to_s.capitalize
- '<img src="/img/types/' + (@merkaartor_selector =~ /Type is #{name}/ ? type.to_s : 'none') + '.16.png" alt="' + name + '" title="' + name + '"/>'
- }.join('&nbsp;')
-
- @merkaartor_values = @db.select('SELECT value FROM merkaartor.tags').condition('key=?', @key).order_by(:value).execute().map{ |row| row['value'] }
-
- @merkaartor_desc = @db.select('SELECT lang, description FROM key_descriptions').condition('key=?', @key).order_by(:lang).execute()
-
- erb :'test/key'
- end
-
end
diff --git a/web/lib/utils.rb b/web/lib/utils.rb
index a4cd31c..c18575b 100644
--- a/web/lib/utils.rb
+++ b/web/lib/utils.rb
@@ -132,24 +132,22 @@ end
def link_to_key(key)
k = escape(key)
- title = escape_html(key)
if key.match(/[=\/]/)
- return '<a class="taglink" href="/keys/?key=' + k + '" title="' + title + '">' + pp_key(key) + '</a>'
+ return '<a class="taglink" href="/keys/?key=' + k + '">' + pp_key(key) + '</a>'
else
- return '<a class="taglink" href="/keys/' + k + '" title="' + title + '">' + pp_key(key) + '</a>'
+ return '<a class="taglink" href="/keys/' + k + '">' + pp_key(key) + '</a>'
end
end
def link_to_value(key, value)
k = escape(key)
v = escape(value)
- title = escape_html(key) + '=' + escape_html(value)
if key.match(/[=\/]/) || value.match(/[=\/]/)
- return '<a class="taglink" href="/tags/?key=' + k + '&value=' + v + '" title="' + title + '">' + pp_value(value) + '</a>'
+ return '<a class="taglink" href="/tags/?key=' + k + '&value=' + v + '">' + pp_value(value) + '</a>'
else
- return '<a class="taglink" href="/tags/' + k + '=' + v + '" title="' + title + '">' + pp_value(value) + '</a>'
+ return '<a class="taglink" href="/tags/' + k + '=' + v + '">' + pp_value(value) + '</a>'
end
end
diff --git a/web/public/css/flexigrid/flexigrid.css b/web/public/css/flexigrid/flexigrid.css
index 4b41e6d..86f1b69 100644
--- a/web/public/css/flexigrid/flexigrid.css
+++ b/web/public/css/flexigrid/flexigrid.css
@@ -1,722 +1,648 @@
-@charset "UTF-8";
-/* CSS Document */
-
-.flexigrid
- {
- font-size: 80%;
- position: relative;
- border: 0px solid #eee;
- overflow: hidden;
- color: #000;
- }
-
- .flexigrid.hideBody
- {
- height: 26px !important;
- border-bottom: 1px solid #ccc;
- }
-
- .ie6fullwidthbug
- {
- border-right: 0px solid #ccc;
- padding-right: 2px;
- }
-
-.flexigrid div.nDiv
- {
- background: #eee url(images/line.gif) repeat-y -1px top;
- border: 1px solid #ccc;
- border-top: 0px;
- overflow: auto;
- left: 0px;
- position: absolute;
- z-index: 999;
- float: left;
- }
-
- .flexigrid div.nDiv table
- {
- margin: 2px;
- }
-
-.flexigrid div.hDivBox
- {
- float: left;
- padding-right: 40px;
- }
-
-.flexigrid div.bDiv table
- {
- margin-bottom: 10px;
- }
-
- .flexigrid div.bDiv table.autoht
- {
- border-bottom: 0px;
- margin-bottom: 0px;
- }
-
-.flexigrid div.nDiv td
- {
- padding: 2px 3px;
- border: 1px solid #eee;
- cursor: default;
- }
-
-.flexigrid div.nDiv tr:hover td, .flexigrid div.nDiv tr.ndcolover td
- {
-/* background: #d5effc url(images/hl.png) repeat-x top;*/
- border: 1px solid #a8d8eb;
- }
-
- .flexigrid div.nDiv td.ndcol1
- {
- border-right: 1px solid #ccc;
- }
-
- .flexigrid div.nDiv td.ndcol2
- {
- border-left: 1px solid #fff;
- padding-right: 10px;
- }
-
- .flexigrid div.nDiv tr:hover td.ndcol1, .flexigrid div.nDiv tr.ndcolover td.ndcol1
- {
- border-right: 1px solid #d2e3ec;
- }
-
- .flexigrid div.nDiv tr:hover td.ndcol2, .flexigrid div.nDiv tr.ndcolover td.ndcol2
- {
- border-left: 1px solid #eef8ff;
- }
-
- .flexigrid div.nBtn
- {
- position: absolute;
- height: 24px;
- width: 14px;
- z-index: 900;
- /*background: #fafafa url(images/fhbg.gif) repeat-x bottom;*/
- border: 0px solid #ccc;
- border-left: 1px solid #ccc;
- top: 0px;
- left: 0px;
- margin-top: 1px;
- cursor: pointer;
- display: none;
- }
-
- .flexigrid div.nBtn div
- {
- height: 24px;
- width: 12px;
- border-left: 1px solid #fff;
- float: left;
- /*background: url(images/ddn.png) no-repeat center;*/
- }
-
- .flexigrid div.nBtn.srtd
- {
- /*background: url(images/wbg.gif) repeat-x 0px -1px;*/
- }
-
-
-.flexigrid div.mDiv
- {
- /*background: url(images/wbg.gif) repeat-x top;*/
- border: 1px solid #ccc;
- border-bottom: 0px;
- border-top: 0px;
- font-weight: bold;
- display: block;
- overflow: hidden;
- white-space: nowrap;
- position: relative;
- }
-
-.flexigrid div.mDiv div
- {
- padding: 6px;
- white-space: nowrap;
- }
-
- .flexigrid div.mDiv div.ptogtitle
- {
- position: absolute;
- top: 4px;
- right: 3px;
- padding: 0px;
- height: 16px;
- width: 16px;
- overflow: hidden;
- border: 1px solid #ccc;
- cursor: pointer;
- }
-
- .flexigrid div.mDiv div.ptogtitle:hover
- {
- background-position: left -2px;
- border-color: #bbb;
- }
-
- .flexigrid div.mDiv div.ptogtitle span
- {
- display: block;
- border-left: 1px solid #eee;
- border-top: 1px solid #fff;
- border-bottom: 1px solid #ddd;
- width: 14px;
- height: 14px;
- /*background: url(images/uup.png) no-repeat center;*/
- }
-
- .flexigrid div.mDiv div.ptogtitle.vsble span
- {
- /*background: url(images/ddn.png) no-repeat center;*/
- }
-
-.flexigrid div.tDiv /*toolbar*/
- {
- background: #fafafa /*url(images/bg.gif) repeat-x top*/;
- position: relative;
- border: 1px solid #ccc;
- border-bottom: 0px;
- overflow: hidden;
- }
-
- .flexigrid div.tDiv2
- {
- float: left;
- clear: both;
- padding: 1px;
- }
-
-.flexigrid div.sDiv /*toolbar*/
- {
- background: #fafafa /*url(images/bg.gif) repeat-x top*/;
- position: relative;
- border: 1px solid #ccc;
- border-top: 0px;
- overflow: hidden;
- display: none;
- }
-
- .flexigrid div.sDiv2
- {
- float: left;
- clear: both;
- padding: 5px;
- padding-left: 5px;
- width: 1024px;
- }
-
- .flexigrid div.sDiv2 input, .flexigrid div.sDiv2 select
- {
- vertical-align: middle;
- }
-
- .flexigrid div.btnseparator
- {
- float: left;
- height: 22px;
- border-left: 1px solid #ccc;
- border-right: 1px solid #fff;
- margin: 1px;
- }
-
- .flexigrid div.fbutton
- {
- float: left;
- display: block;
- cursor: pointer;
- padding: 1px;
- }
-
- .flexigrid div.fbutton div
- {
- float: left;
- padding: 1px 3px;
- }
-
- .flexigrid div.fbutton span
- {
- float: left;
- display: block;
- padding: 3px;
- }
-
- .flexigrid div.fbutton:hover, .flexigrid div.fbutton.fbOver
- {
- padding: 0px;
- border: 1px solid #ccc;
- }
-
- .flexigrid div.fbutton:hover div, .flexigrid div.fbutton.fbOver div
- {
- padding: 0px 2px;
- border-left: 1px solid #fff;
- border-top: 1px solid #fff;
- border-right: 1px solid #eee;
- border-bottom: 1px solid #eee;
- }
-
-
-/* end toolbar*/
-
-.flexigrid div.hDiv
- {
- background: rgb(198,200,202);
- position: relative;
- border: 1px solid #ccc;
-/* border-bottom: 0px;*/
- font-weight: bold;
- overflow: hidden;
- }
-
-.flexigrid div.hDiv table
- {
- border-right: 1px solid #fff;
- }
-
- .flexigrid div.cDrag
- {
- float: left;
- position: absolute;
- z-index: 2;
- overflow: visible;
- }
-
- .flexigrid div.cDrag div
- {
- float: left;
- background: none;
- display: block;
- position: absolute;
- height: 24px;
- width: 5px;
- cursor: col-resize;
- }
-
- .flexigrid div.cDrag div:hover, .flexigrid div.cDrag div.dragging
- {
- background: url(images/line.gif) repeat-y 2px center;
- }
-
-.flexigrid div.iDiv
- {
- border: 1px solid #316ac5;
- position: absolute;
- overflow: visible;
- background: none;
- }
-
- .flexigrid div.iDiv input, .flexigrid div.iDiv select, .flexigrid div.iDiv textarea
- {
- }
-
- .flexigrid div.iDiv input.tb
- {
- border: 0px;
- padding: 0px;
- width: 100%;
- height: 100%;
- padding: 0px;
- background: none;
- }
-
-.flexigrid div.bDiv
- {
- border: 1px solid #ccc;
- border-top: 0px;
- background: rgb(230,231,232);
- overflow: auto;
- position: relative;
- }
-
-.flexigrid div.bDiv table
- {
- border-bottom: 1px solid #ccc;
- }
-
- .flexigrid div.hGrip
- {
- position: absolute;
- top: 0px;
- right: 0px;
- height: 5px;
- width: 5px;
- background: url(images/line.gif) repeat-x center;
- margin-right: 1px;
- cursor: col-resize;
- }
-
- .flexigrid div.hGrip:hover, .flexigrid div.hGrip.hgOver
- {
- border-right: 1px solid #999;
- margin-right: 0px;
- }
-
- .flexigrid div.vGrip
- {
- height: 5px;
- overflow: hidden;
- position: relative;
- background: rgb(198,200,202);
- border: 1px solid #ccc;
- border-top: 0px;
- text-align: center;
- cursor: row-resize;
- }
-
- .flexigrid div.vGrip span
- {
- display: block;
- margin: 1px auto;
- width: 20px;
- height: 1px;
- overflow: hidden;
- border-top: 1px solid #aaa;
- border-bottom: 1px solid #aaa;
- background: none;
- }
-
-.flexigrid div.hDiv th, .flexigrid div.bDiv td /* common cell properties*/
- {
- text-align: left;
- border-right: 1px solid #ddd;
- border-left: 1px solid #fff;
- overflow: hidden;
- vertical-align: top !important;
- }
-
- .flexigrid div.hDiv th div, .flexigrid div.bDiv td div, div.colCopy div/* common inner cell properties*/
- {
- padding: 5px;
- border-left: 0px solid #fff;
- }
-
-.flexigrid div.hDiv th, div.colCopy
- {
- font-weight: normal;
- height: 24px;
- cursor: default;
- white-space: nowrap;
- overflow: hidden;
- }
-
-div.colCopy {
- background: #fafafa url(images/fhbg.gif) repeat-x bottom;
- border: 1px solid #ccc;
- border-bottom: 0px;
- overflow: hidden;
- }
-
-.flexigrid div.hDiv th.sorted
- {
- background: rgb(188,189,192);
- border-bottom: 0px solid #ccc;
- }
-
- .flexigrid div.hDiv th.thOver
- {
- }
-
- .flexigrid div.hDiv th.thOver div, .flexigrid div.hDiv th.sorted.thOver div
- {
- border-bottom: 1px solid orange;
- padding-bottom: 4px;
- }
-
- .flexigrid div.hDiv th.sorted div
- {
- border-bottom: 0px solid #ccc;
- padding-bottom: 5px;
- }
-
- .flexigrid div.hDiv th.thMove
- {
- background: #fff;
- color: #fff;
- }
-
- .flexigrid div.hDiv th.sorted.thMove div
- {
- border-bottom: 1px solid #fff;
- padding-bottom: 4px
- }
-
- .flexigrid div.hDiv th.thMove div
- {
- background: #fff !important;
- }
-
- .flexigrid div.hDiv th div.sdesc
- {
- background: url(images/dn.png) no-repeat center top;
- }
-
- .flexigrid div.hDiv th div.sasc
- {
- background: url(images/up.png) no-repeat center top;
- }
-
-.flexigrid div.bDiv td
- {
- border-bottom: 1px solid #fff;
- vertical-align: top;
- white-space: nowrap;
- }
-
- .flexigrid div.hDiv th div
- {
- }
-
- .flexigrid span.cdropleft
- {
- display: block;
- background: url(images/prev.gif) no-repeat -4px center;
- width: 24px;
- height: 24px;
- position: relative;
- top: -24px;
- margin-bottom: -24px;
- z-index: 3;
- }
-
- .flexigrid div.hDiv span.cdropright
- {
- display: block;
- background: url(images/next.gif) no-repeat 12px center;
- width: 24px;
- height: 24px;
- float: right;
- position: relative;
- top: -24px;
- margin-bottom: -24px;
- }
-
-
- .flexigrid div.bDiv td div
- {
- border-top: 0px solid #fff;
- padding-bottom: 4px;
- }
-
-
- .flexigrid tr td.sorted
- {
- background: rgb(220,221,222);
- border-right: 1px solid #ddd;
- border-bottom: 1px solid #f3f3f3;
- }
-
- .flexigrid tr td.sorted div
- {
- }
-
-
- .flexigrid tr.erow td
- {
- background: rgb(220,221,222);
- border-bottom: 1px solid #f7f7f7;
- }
-
- .flexigrid tr.erow td.sorted
- {
- background: rgb(209,211,212);
- border-bottom: 1px solid #e3e3e3;
- }
-
- .flexigrid tr.erow td.sorted div
- {
- }
-
- .flexigrid div.bDiv tr:hover td,
- .flexigrid div.bDiv tr:hover td.sorted,
- .flexigrid div.bDiv tr.trOver td.sorted,
- .flexigrid div.bDiv tr.trOver td
- {
- background: #d9ebf5;
- border-left: 1px solid #eef8ff;
- border-bottom: 1px dotted #a8d8eb;
- }
-
-/* .flexigrid div.bDiv tr.trSelected:hover td,
- .flexigrid div.bDiv tr.trSelected:hover td.sorted,
- .flexigrid div.bDiv tr.trOver.trSelected td.sorted,
- .flexigrid div.bDiv tr.trOver.trSelected td,
- .flexigrid tr.trSelected td.sorted,
- .flexigrid tr.trSelected td
- {
- background: #d5effc url(images/hl.png) repeat-x top;
- border-right: 1px solid #d2e3ec;
- border-left: 1px solid #eef8ff;
- border-bottom: 1px solid #a8d8eb;
- }*/
-
- /* novstripe adjustments */
-
- .flexigrid.novstripe .bDiv table
- {
- border-bottom: 1px solid #ccc;
- border-right: 1px solid #ccc;
- }
-
- .flexigrid.novstripe div.bDiv td
- {
- border-right-color: #fff;
- }
-
- .flexigrid.novstripe div.bDiv tr.erow td.sorted
- {
- border-right-color: #e3e3e3;
- }
-
- .flexigrid.novstripe div.bDiv tr td.sorted
- {
- border-right-color: #f3f3f3;
- }
-
- .flexigrid.novstripe div.bDiv tr.erow td
- {
- border-right-color: #f7f7f7;
- border-left-color: #f7f7f7;
- }
-
-/* .flexigrid.novstripe div.bDiv tr.trSelected:hover td,
- .flexigrid.novstripe div.bDiv tr.trSelected:hover td.sorted,
- .flexigrid.novstripe div.bDiv tr.trOver.trSelected td.sorted,
- .flexigrid.novstripe div.bDiv tr.trOver.trSelected td,
- .flexigrid.novstripe tr.trSelected td.sorted,
- .flexigrid.novstripe tr.trSelected td
- {
- border-right: 1px solid #0066FF;
- border-left: 1px solid #0066FF;
- } */
-
- .flexigrid.novstripe div.bDiv tr.trOver td, .flexigrid.novstripe div.bDiv tr:hover td
- {
- border-left-color: #d9ebf5;
- border-right-color: #d9ebf5;
- }
-
- /* end novstripe */
-
-.flexigrid div.pDiv
- {
- background: url(images/wbg.gif) repeat-x 0 -1px;
- border: 1px solid #ccc;
- border-top: 0px;
- overflow: hidden;
- white-space: nowrap;
- position: relative;
- }
-
-.flexigrid div.pDiv div.pDiv2
- {
- margin: 3px;
- margin-left: -2px;
- float: left;
- width: 1024px;
- }
-
- div.pGroup
- {
- float: left;
- background: none;
- height: 24px;
- margin: 0px 5px;
- }
-
- .flexigrid div.pDiv .pPageStat, .flexigrid div.pDiv .pcontrol
- {
- position: relative;
-
- top: 5px;
- overflow: visible;
- }
-
- .flexigrid div.pDiv input
- {
- vertical-align: text-top;
- position: relative;
- top: -5px;
- }
-
- .flexigrid div.pDiv div.pButton
- {
- float: left;
- width: 22px;
- height: 22px;
- border: 0px;
- cursor: pointer;
- overflow: hidden;
- }
-
- .flexigrid div.pDiv div.pButton:hover, .flexigrid div.pDiv div.pButton.pBtnOver
- {
- width: 20px;
- height: 20px;
- border: 1px solid #ccc;
- cursor: pointer;
- }
-
- .flexigrid div.pDiv div.pButton span
- {
- width: 20px;
- height: 20px;
- display: block;
- float: left;
- }
-
- .flexigrid div.pDiv div.pButton:hover span, .flexigrid div.pDiv div.pButton.pBtnOver span
- {
- width: 19px;
- height: 19px;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
- }
-
-
- .flexigrid .pSearch
- {
- background: url(images/magnifier.png) no-repeat center;
- }
-
- .flexigrid .pFirst
- {
- background: url(images/first.gif) no-repeat center;
- }
-
- .flexigrid .pPrev
- {
- background: url(images/prev.gif) no-repeat center;
- }
-
- .flexigrid .pNext
- {
- background: url(images/next.gif) no-repeat center;
- }
-
- .flexigrid .pLast
- {
- background: url(images/last.gif) no-repeat center;
- }
-
- .flexigrid .pReload
- {
- background: url(images/load.png) no-repeat center;
- }
-
- .flexigrid .pReload.loading
- {
- background: url(images/load.gif) no-repeat center;
- }
-
-/* ie adjustments */
-
- .flexigrid.ie div.hDiv th div, .flexigrid.ie div.bDiv td div, div.colCopy.ie div/* common inner cell properties*/
- {
- overflow: hidden;
- }
-
+@charset "UTF-8";
+/* CSS Document */
+
+.flexigrid {
+ font-size: 80%;
+ position: relative;
+ border: 0px solid #ddddd4;
+ overflow: hidden;
+ color: #000;
+ margin-bottom: 10px;
+}
+
+.flexigrid.hideBody {
+ height: 26px !important;
+ border-bottom: 1px solid #ddddd4;
+}
+
+.ie6fullwidthbug {
+ border-right: 0px solid #ddddd4;
+ padding-right: 2px;
+}
+
+.flexigrid div.nDiv {
+ background: #eee url(images/line.gif) repeat-y -1px top;
+ border: 1px solid #ddddd4;
+ border-top: 0px;
+ overflow: auto;
+ left: 0px;
+ position: absolute;
+ z-index: 999;
+ float: left;
+}
+
+.flexigrid div.nDiv table {
+ margin: 2px;
+}
+
+.flexigrid div.hDivBox {
+ float: left;
+ padding-right: 40px;
+}
+
+.flexigrid div.hDivBox table {
+ background: #b8b8b0;
+}
+
+.flexigrid div.bDiv table {
+ margin-bottom: 10px;
+}
+
+.flexigrid div.bDiv table.autoht {
+ border-bottom: 0px;
+ margin-bottom: 0px;
+}
+
+.flexigrid div.nDiv td {
+ padding: 2px 3px;
+ border: 1px solid #ddddd4;
+ cursor: default;
+}
+
+.flexigrid div.nDiv tr:hover td, .flexigrid div.nDiv tr.ndcolover td {
+ border: 1px solid #ddddd4;
+}
+
+.flexigrid div.nDiv td.ndcol1 {
+ border-right: 1px solid #ddddd4;
+}
+
+.flexigrid div.nDiv td.ndcol2 {
+ border-left: 1px solid #ddddd4;
+ padding-right: 10px;
+}
+
+.flexigrid div.nDiv tr:hover td.ndcol1, .flexigrid div.nDiv tr.ndcolover td.ndcol1 {
+ border-right: 1px solid #d2e3ec;
+}
+
+.flexigrid div.nDiv tr:hover td.ndcol2, .flexigrid div.nDiv tr.ndcolover td.ndcol2 {
+ border-left: 1px solid #eef8ff;
+}
+
+.flexigrid div.nBtn {
+ position: absolute;
+ height: 24px;
+ width: 14px;
+ z-index: 900;
+ border: 0px solid #ccc;
+ border-left: 1px solid #ccc;
+ top: 0px;
+ left: 0px;
+ margin-top: 1px;
+ cursor: pointer;
+ display: none;
+}
+
+.flexigrid div.nBtn div {
+ height: 24px;
+ width: 12px;
+ border-left: 1px solid #fff;
+ float: left;
+}
+
+.flexigrid div.nBtn.srtd {
+}
+
+.flexigrid div.mDiv {
+ border: 1px solid #ccc;
+ border-bottom: 0px;
+ border-top: 0px;
+ font-weight: bold;
+ display: block;
+ overflow: hidden;
+ white-space: nowrap;
+ position: relative;
+}
+
+.flexigrid div.mDiv div {
+ padding: 6px;
+ white-space: nowrap;
+}
+
+.flexigrid div.mDiv div.ptogtitle {
+ position: absolute;
+ top: 4px;
+ right: 3px;
+ padding: 0px;
+ height: 16px;
+ width: 16px;
+ overflow: hidden;
+ border: 1px solid #ccc;
+ cursor: pointer;
+}
+
+.flexigrid div.mDiv div.ptogtitle:hover {
+ background-position: left -2px;
+ border-color: #bbb;
+}
+
+.flexigrid div.mDiv div.ptogtitle span {
+ display: block;
+ border-left: 1px solid #eee;
+ border-top: 1px solid #fff;
+ border-bottom: 1px solid #ddd;
+ width: 14px;
+ height: 14px;
+}
+
+.flexigrid div.mDiv div.ptogtitle.vsble span {
+}
+
+.flexigrid div.tDiv /*toolbar*/ {
+ background: #fafafa;
+ position: relative;
+ border: 1px solid #ccc;
+ border-bottom: 0px;
+ overflow: hidden;
+}
+
+.flexigrid div.tDiv2 {
+ float: left;
+ clear: both;
+ padding: 1px;
+}
+
+.flexigrid div.sDiv /*toolbar*/ {
+ position: relative;
+ float: right;
+ margin-right: 4px;
+}
+
+.flexigrid div.sDiv2 {
+ float: left;
+ padding: 1px 0 0 5px;
+}
+
+.flexigrid div.sDiv2 input, .flexigrid div.sDiv2 select {
+ background: url(images/magnifier.png) no-repeat right #ffffff;
+}
+
+.flexigrid div.sDiv2 select {
+ margin: 0;
+ padding: 0;
+}
+
+.flexigrid span.customStyleSelectBox {
+ padding: 0 4px;
+}
+
+.flexigrid div.btnseparator {
+ float: left;
+ height: 22px;
+ border-left: 1px solid #b8b8b0;
+ margin: 1px;
+}
+
+.flexigrid div.fbutton {
+ float: left;
+ display: block;
+ cursor: pointer;
+ padding: 1px;
+}
+
+.flexigrid div.fbutton div {
+ float: left;
+ padding: 1px 3px;
+}
+
+.flexigrid div.fbutton span {
+ float: left;
+ display: block;
+ padding: 3px;
+}
+
+.flexigrid div.fbutton:hover, .flexigrid div.fbutton.fbOver {
+ padding: 0px;
+ border: 1px solid #ccc;
+}
+
+.flexigrid div.fbutton:hover div, .flexigrid div.fbutton.fbOver div {
+ padding: 0px 2px;
+ border-left: 1px solid #fff;
+ border-top: 1px solid #fff;
+ border-right: 1px solid #eee;
+ border-bottom: 1px solid #eee;
+}
+
+/* end toolbar*/
+
+.flexigrid div.hDiv {
+ position: relative;
+ font-weight: bold;
+ overflow: hidden;
+}
+
+.flexigrid div.hDiv table {
+ border-right: 1px solid #ddddd4;
+}
+
+.flexigrid div.cDrag {
+ float: left;
+ position: absolute;
+ z-index: 2;
+ overflow: visible;
+}
+
+.flexigrid div.cDrag div {
+ float: left;
+ background: none;
+ display: block;
+ position: absolute;
+ height: 24px;
+ width: 3px;
+ cursor: col-resize;
+}
+
+.flexigrid div.cDrag div:hover, .flexigrid div.cDrag div.dragging {
+ background-color: #808080;
+}
+
+.flexigrid div.iDiv {
+ border: 1px solid #316ac5;
+ position: absolute;
+ overflow: visible;
+ background: none;
+}
+
+.flexigrid div.iDiv input, .flexigrid div.iDiv select, .flexigrid div.iDiv textarea {
+}
+
+.flexigrid div.iDiv input.tb {
+ border: 0px;
+ padding: 0px;
+ width: 100%;
+ height: 100%;
+ padding: 0px;
+ background: none;
+}
+
+.flexigrid div.bDiv {
+ border-right: 1px solid #ddddd4;
+ background: #ddddd4;
+ overflow: auto;
+ position: relative;
+}
+
+.flexigrid div.bDiv table {
+ border-bottom: 1px solid #ddddd4;
+}
+
+.flexigrid div.hGrip {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ height: 5px;
+ width: 5px;
+ background: url(images/line.gif) repeat-x center;
+ margin-right: 1px;
+ cursor: col-resize;
+}
+
+.flexigrid div.hGrip:hover, .flexigrid div.hGrip.hgOver {
+ border-right: 1px solid #999;
+ margin-right: 0px;
+}
+
+.flexigrid div.vGrip {
+ height: 5px;
+ overflow: hidden;
+ position: relative;
+ background: #ddddd4;
+ border: 1px solid #ccc;
+ border-top: 0px;
+ text-align: center;
+ cursor: row-resize;
+}
+
+.flexigrid div.vGrip span {
+ display: block;
+ margin: 1px auto;
+ width: 20px;
+ height: 1px;
+ overflow: hidden;
+ border-top: 1px solid #aaa;
+ border-bottom: 1px solid #aaa;
+ background: none;
+}
+
+.flexigrid div.hDiv th, .flexigrid div.bDiv td /* common cell properties*/ {
+ text-align: left;
+ border-right: 1px solid #ddddd4;
+ /*border-left: 1px solid #ddddd4;*/
+ overflow: hidden;
+ vertical-align: top !important;
+}
+
+.flexigrid div.hDiv th div, .flexigrid div.bDiv td div, div.colCopy div/* common inner cell properties*/ {
+ padding: 2px 6px;
+ border-right: 0px solid #ddddd4;
+}
+
+.flexigrid div.hDiv th, div.colCopy {
+/* font-weight: normal;*/
+ height: 27px;
+ cursor: default;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.flexigrid div.hDiv th div {
+}
+
+.flexigrid div.hDiv th img {
+ position: relative;
+ top: 3px;
+}
+
+div.colCopy {
+ border: 1px solid #ccc;
+ border-bottom: 0px;
+ overflow: hidden;
+}
+
+.flexigrid div.hDiv th.sorted {
+ background: #a0a098;
+ border-bottom: 0px solid #ccc;
+}
+
+.flexigrid div.hDiv th.thOver {
+}
+
+.flexigrid div.hDiv th.thOver div, .flexigrid div.hDiv th.sorted.thOver div {
+ border-bottom: 1px solid orange;
+}
+
+.flexigrid div.hDiv th.sorted div {
+}
+
+.flexigrid div.hDiv th.thMove {
+ background: #fff;
+ color: #fff;
+}
+
+.flexigrid div.hDiv th.sorted.thMove div {
+ border-bottom: 1px solid #fff;
+ padding-bottom: 4px
+}
+
+.flexigrid div.hDiv th.thMove div {
+ background: #fff !important;
+}
+
+.flexigrid div.hDiv th div.sdesc {
+ background: url(images/ddn.png) no-repeat center top;
+}
+
+.flexigrid div.hDiv th div.sasc {
+ background: url(images/uup.png) no-repeat center top;
+}
+
+.flexigrid div.bDiv td {
+ border-bottom: 0px;
+ vertical-align: top;
+ white-space: nowrap;
+}
+
+.flexigrid div.hDiv th div {
+}
+
+.flexigrid span.cdropleft {
+ display: block;
+ background: url(images/prev.gif) no-repeat -4px center;
+ width: 24px;
+ height: 24px;
+ position: relative;
+ top: -24px;
+ margin-bottom: -24px;
+ z-index: 3;
+}
+
+.flexigrid div.hDiv span.cdropright {
+ display: block;
+ background: url(images/next.gif) no-repeat 12px center;
+ width: 24px;
+ height: 24px;
+ float: right;
+ position: relative;
+ top: -24px;
+ margin-bottom: -24px;
+}
+
+.flexigrid div.bDiv td {
+ background: #e8e8e4;
+}
+
+.flexigrid div.bDiv td div {
+ border-top: 0px solid #ddddd4;
+ padding-bottom: 4px;
+}
+
+.flexigrid tr td.sorted {
+ border-right: 1px solid #ddd;
+ border-bottom: 0px;
+}
+
+.flexigrid tr td.sorted div {
+}
+
+.flexigrid tr.erow td {
+ background: #d0d0c8;
+ border-bottom: 0px;
+}
+
+.flexigrid tr.erow td.sorted {
+ border-bottom: 0px;
+}
+
+.flexigrid tr.erow td.sorted div {
+}
+
+.flexigrid div.bDiv tr:hover td,
+.flexigrid div.bDiv tr:hover td.sorted,
+.flexigrid div.bDiv tr.trOver td.sorted,
+.flexigrid div.bDiv tr.trOver td {
+ background: #ffffff;
+ border-bottom: 0px; /*1px dotted #a8d8eb;*/
+}
+
+/* .flexigrid div.bDiv tr.trSelected:hover td,
+ .flexigrid div.bDiv tr.trSelected:hover td.sorted,
+ .flexigrid div.bDiv tr.trOver.trSelected td.sorted,
+ .flexigrid div.bDiv tr.trOver.trSelected td,
+ .flexigrid tr.trSelected td.sorted,
+ .flexigrid tr.trSelected td
+ {
+ background: #d5effc url(images/hl.png) repeat-x top;
+ border-right: 1px solid #d2e3ec;
+ border-left: 1px solid #eef8ff;
+ border-bottom: 1px solid #a8d8eb;
+ }*/
+
+/* novstripe adjustments */
+
+.flexigrid.novstripe .bDiv table {
+ border-bottom: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+}
+
+.flexigrid.novstripe div.bDiv td {
+ border-right-color: #fff;
+}
+
+.flexigrid.novstripe div.bDiv tr.erow td.sorted {
+}
+
+.flexigrid.novstripe div.bDiv tr td.sorted {
+}
+
+.flexigrid.novstripe div.bDiv tr.erow td {
+ border-right-color: #f7f7f7;
+ border-left-color: #f7f7f7;
+}
+
+/* .flexigrid.novstripe div.bDiv tr.trSelected:hover td,
+ .flexigrid.novstripe div.bDiv tr.trSelected:hover td.sorted,
+ .flexigrid.novstripe div.bDiv tr.trOver.trSelected td.sorted,
+ .flexigrid.novstripe div.bDiv tr.trOver.trSelected td,
+ .flexigrid.novstripe tr.trSelected td.sorted,
+ .flexigrid.novstripe tr.trSelected td
+ {
+ border-right: 1px solid #0066FF;
+ border-left: 1px solid #0066FF;
+ } */
+
+.flexigrid.novstripe div.bDiv tr.trOver td, .flexigrid.novstripe div.bDiv tr:hover td {
+ border-left-color: #d9ebf5;
+ border-right-color: #d9ebf5;
+}
+
+/* end novstripe */
+
+.flexigrid div.pDiv {
+ background: #ddddd4;
+ border-top: 0px;
+ overflow: hidden;
+ white-space: nowrap;
+ position: relative;
+}
+
+.flexigrid div.pDiv div.pDiv2 {
+ padding: 2px 0 1px 0;
+ float: left;
+ margin-bottom: 1px;
+ background-color: #b8b8b0;
+ width: 800px;
+ -moz-border-radius-topleft: 4px;
+ -khtml-border-radius-topleft: 4px;
+ -webkit-border-radius-topleft: 4px;
+ -chrome-border-radius-topleft: 4px;
+ -o-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -khtml-border-radius-topright: 4px;
+ -webkit-border-radius-topright: 4px;
+ -chrome-border-radius-topright: 4px;
+ -o-border-radius-topright: 4px;
+}
+
+div.pGroup {
+ float: left;
+ background: none;
+ height: 24px;
+ margin: 0px 5px;
+}
+
+.flexigrid div.pDiv .pPageStat {
+ width: 220px;
+ display: block;
+}
+
+.flexigrid div.pDiv .pPageStat, .flexigrid div.pDiv .pcontrol {
+ position: relative;
+ top: 1px;
+ overflow: visible;
+}
+
+.flexigrid div.pDiv input {
+ vertical-align: text-top;
+ position: relative;
+ top: -2px;
+ border: 0px none; /* 1px solid #a0a0a0;*/
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
+ margin: 0;
+ padding: 2px;
+}
+
+.flexigrid div.pDiv div.pButton {
+ float: left;
+ width: 22px;
+ height: 22px;
+ border: 0px;
+ cursor: pointer;
+ overflow: hidden;
+}
+
+.flexigrid div.pDiv div.pButton:hover, .flexigrid div.pDiv div.pButton.pBtnOver {
+ width: 20px;
+ height: 20px;
+ border: 1px solid #f0f0f0;
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
+ cursor: pointer;
+}
+
+.flexigrid div.pDiv div.pButton span {
+ width: 20px;
+ height: 20px;
+ display: block;
+ float: left;
+}
+
+.flexigrid div.pDiv div.pButton:hover span, .flexigrid div.pDiv div.pButton.pBtnOver span {
+ width: 19px;
+ height: 19px;
+/* border-top: 1px solid #fff;
+ border-left: 1px solid #fff;*/
+}
+
+.flexigrid .pSearch {
+ background: url(images/magnifier.png) no-repeat center;
+}
+
+.flexigrid .pFirst {
+ background: url(images/first.gif) no-repeat center;
+}
+
+.flexigrid .pPrev {
+ background: url(images/prev.gif) no-repeat center;
+}
+
+.flexigrid .pNext {
+ background: url(images/next.gif) no-repeat center;
+}
+
+.flexigrid .pLast {
+ background: url(images/last.gif) no-repeat center;
+}
+
+.flexigrid .pReload {
+ background: url(images/load.png) no-repeat center;
+}
+
+.flexigrid .pReload.loading {
+ background: url(images/load.gif) no-repeat center;
+}
+
+/* ie adjustments */
+
+.flexigrid.ie div.hDiv th div, .flexigrid.ie div.bDiv td div, div.colCopy.ie div/* common inner cell properties*/ {
+ overflow: hidden;
+}
+
diff --git a/web/public/css/flexigrid/images/load-large.gif b/web/public/css/flexigrid/images/load-large.gif
new file mode 100644
index 0000000..77264c0
--- /dev/null
+++ b/web/public/css/flexigrid/images/load-large.gif
Binary files differ
diff --git a/web/public/css/flexigrid/images/load.gif b/web/public/css/flexigrid/images/load.gif
index 68f01d0..8b6c8a6 100644
--- a/web/public/css/flexigrid/images/load.gif
+++ b/web/public/css/flexigrid/images/load.gif
Binary files differ
diff --git a/web/public/css/flexigrid/images/load.png b/web/public/css/flexigrid/images/load.png
index d65defb..3529e65 100644
--- a/web/public/css/flexigrid/images/load.png
+++ b/web/public/css/flexigrid/images/load.png
Binary files differ
diff --git a/web/public/css/smoothness/jquery-ui-1.8.10.custom.css b/web/public/css/smoothness/jquery-ui-1.8.10.custom.css
index f48e0b8..1fe7933 100644
--- a/web/public/css/smoothness/jquery-ui-1.8.10.custom.css
+++ b/web/public/css/smoothness/jquery-ui-1.8.10.custom.css
@@ -73,7 +73,7 @@
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #ffffff; background: #ffffff; font-weight: normal; color: #000000; }
.ui-state-hover a, .ui-state-hover a:hover { color: #000000; text-decoration: none; }
/*.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #f0f0f0 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }*/
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: rgb(220, 221, 222); font-weight: normal; color: #000000; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {/* border: 1px solid #c0c0c0;*/ background: #ddddd4; font-weight: normal; color: #000000; }
/*.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }*/
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000000; text-decoration: none; }
.ui-widget :active { outline: none; }
@@ -305,7 +305,7 @@
*
* http://docs.jquery.com/UI/Autocomplete#theming
*/
-.ui-autocomplete { position: absolute; cursor: default; background-color: #f0f0f0; border: 1px solid #a0a0a0; font-size: 80%; }
+.ui-autocomplete { position: absolute; cursor: default; background-color: #f0f0f0; /*border: 1px solid #c0c0c0;*/ font-size: 80%; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
@@ -421,11 +421,11 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
*/
.ui-tabs { position: relative; padding: 0; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em 1em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; /*top: 1px;*/ margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .2em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background-color: rgb(220, 221, 222); border: 1px solid #a0a0a0;
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 20px; background-color: #ddddd4; /*border: 1px solid #c0c0c0;*/
-moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/web/public/css/taginfo.css b/web/public/css/taginfo.css
index b69face..b151a44 100644
--- a/web/public/css/taginfo.css
+++ b/web/public/css/taginfo.css
@@ -17,22 +17,28 @@ img.icon_large {
}
h1 {
- margin: 0;
+ margin: 0 0 4px 0;
font-size: 150%;
}
+h1.section {
+ text-transform: uppercase;
+}
+
h2 {
- font-weight: normal;
margin-top: 20px;
margin-bottom: 4px;
}
p {
- margin-top: 2px;
+ color: #404040;
+ margin: 0 0 6px 0;
+ max-width: 60em;
}
-p.text {
- max-width: 60em;
+p.emphasis {
+ font-weight: bold;
+ font-size: 110%;
}
iframe {
@@ -49,11 +55,7 @@ a {
a:hover {
text-decoration: underline;
}
-/*
-a.taglink {
- color: #4a837c !important;
-}
-*/
+
span.badchar {
color: #e00000;
}
@@ -82,6 +84,10 @@ a.section {
text-decoration: none;
}
+div.pre {
+ margin-bottom: 20px;
+}
+
/* ========== */
span.button {
@@ -102,44 +108,81 @@ span.disabled {
/* ========== */
-div#top {
- margin: 15px 20px;
+.tipsy { font-size: 80%; position: absolute; padding: 5px; z-index: 100000; }
+.tipsy-inner { background-color: #000; color: #FFF; max-width: 180px; padding: 5px 8px 4px 8px; text-align: center; }
+
+/* Rounded corners */
+.tipsy-inner { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; }
+
+.tipsy-arrow { position: absolute; width: 0; height: 0; line-height: 0; border: 5px dashed #000; }
+
+/* Rules to colour arrows */
+.tipsy-arrow-n { border-bottom-color: #000; }
+.tipsy-arrow-s { border-top-color: #000; }
+.tipsy-arrow-e { border-left-color: #000; }
+.tipsy-arrow-w { border-right-color: #000; }
+
+.tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
+.tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
+.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; }
+.tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }
+
+/* ========== */
+
+span.customStyleSelectBox {
+ margin: 0;
+ padding: 1px 4px 0 4px;
+ border:1px solid #a0a0a0;
+ background-color: #ffffff;
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
+ font-size: 90%;
}
-div#top div#top_right {
- position: absolute;
- right: 20px;
- top: 30px;
+span.customStyleSelectBox.changed { }
+
+.customStyleSelectBoxInner {
+ background:url(/img/arrow.png) no-repeat center right;
}
-div#top div#top_right form {
- float: left;
- padding-left: 6px;
+/* ========== */
+
+div#header {
+ padding: 15px 20px 20px 20px;
}
-div#date {
+div#header_date {
position: absolute;
- top: 10px;
- right: 21px;
+ top: 12px;
+ right: 20px;
font-size: 80%;
text-align: right;
color: #808080;
}
-div#top form#set_language {
+div#header div#header_forms {
+ position: absolute;
+ right: 20px;
+ top: 31px;
+}
+
+div#header div#header_forms form {
+ float: left;
+ padding-left: 22px;
}
select#locale {
+ font-size: 90%;
background-color: #ffffff;
- height: 24px;
- width: 100px;
- padding: 2px;
- border: 1px solid #808080;
- -moz-border-radius: 4px;
- -khtml-border-radius: 4px;
- -webkit-border-radius: 4px;
- -chrome-border-radius: 4px;
- -o-border-radius: 4px;
+ width: 98px;
+ border: none;
}
input#search {
@@ -147,8 +190,9 @@ input#search {
background-repeat: no-repeat;
background-position: right 3px;
height: 18px;
+ width: 228px;
padding: 2px;
- border: 1px solid #808080;
+ border: 1px solid #a0a0a0;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
-webkit-border-radius: 4px;
@@ -159,16 +203,21 @@ input#search {
input#search:active {
}
+/* ========== */
+
div#main {
- margin: 20px 20px 0 20px;
+ margin: 0 20px;
}
+/* ========== */
+
div#footer {
clear: both;
position: relative;
- top: 4px;
font-size: 90%;
- margin-left: 20px;
+ margin: 0 20px;
+ padding: 4px 0;
+ height: 20px;
}
div#footer_left {
@@ -177,37 +226,75 @@ div#footer_left {
div#footer_right {
position: absolute;
- right: 20px;
+ right: 0px;
text-align: right;
}
/* ========== */
-div#tabs {
- margin-top: 14px;
+div.box {
+ background-color: #ddddd4;
+ padding: 20px;
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
}
-div#tabs h2 {
- margin: 0 0 10px 0;
- font-size: 100%;
+.resize, .ui-tabs-panel {
+ overflow: hidden;
}
-div#tabs form {
- margin-bottom: 6px;
- font-size: 80%;
+/* ========== */
+
+div.boxes {
+ width: 232px;
+ float: right;
+}
+
+table.boxes {
+ border-collapse: collapse;
+}
+
+.boxes h2 {
+ text-transform: uppercase;
+ font-weight: normal;
+ margin: 16px 0 2px 0px;
+}
+
+.boxes h2 a {
+ color: #000000;
+ text-decoration: none;
+}
+
+table.boxes td {
+ vertical-align: bottom;
+}
+
+table.boxes td.box {
+ vertical-align: top;
+ font-size: 90%;
+ background-color: #ddddd4;
+ padding: 8px;
+ margin-bottom: 10px;
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
}
/* ========== */
-table.stats {
- margin-top: 0;
- margin-left: 16px;
- margin-bottom: 20px;
- font-size: 80%;
+div#tabs h2, div.box h2 {
+ margin: 0 0 10px 0;
+ font-size: 120%;
}
-div.stats h2 {
- margin-top: 0;
+div#tabs form {
+ margin-bottom: 6px;
+ font-size: 80%;
}
/* ========== */
@@ -247,17 +334,17 @@ span.char {
-o-border-radius: 4px;
}
-.tag-description {
- color: #808080;
- width: 50%;
-}
-
form#filter-form {
margin-top: 10px;
clear: both;
float: right;
}
+select#filter {
+ width: 146px;
+ background-color: #ffffff;
+}
+
div.canvas {
border: 1px solid #cccccc;
background-color: #ffffff;
@@ -286,33 +373,31 @@ div.bar {
margin: 4px 0 0 6px !important;
padding: 0 !important;
height: 8px;
- background-color: #c0c0c0;
+ background-color: #a0a098;
}
/* ========== */
table.list {
- width: 100%;
- background-color: #fbfbff0;
border-collapse: collapse;
}
table.list th, table.list td {
- border: 1px solid #ffffff;
- padding: 3px;
+ border-right: 1px solid #ddddd4;
+ padding: 2px 6px;
vertical-align: top;
}
table.list th {
- background-color: rgb(85%,85%,85%);
+ background-color: #b8b8b0;
}
table.list td {
- background-color: rgb(95%,95%,95%);
+ background-color: #e8e8e4;
}
table.list td.even {
- background-color: rgb(90%,90%,90%);
+ background-color: #d0d0c8;
}
table.list th.tl, table.list td.tl {
@@ -377,7 +462,12 @@ table.drilldown td#feature {
/* ========== */
table.desc {
- background-color: #f0f0f0;
+ background-color: #b8b8b0;
+ -moz-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -chrome-border-radius: 4px;
+ -o-border-radius: 4px;
padding: 6px;
width: 100%;
}
@@ -397,47 +487,3 @@ table.desc td {
}
/* ========== */
-
-table#index {
- width: 100%;
- border-collapse: collapse;
-}
-
-table#index h2 {
- margin: 16px 0 2px 0px;
-}
-
-table#index h2 a {
- color: #000000;
- text-decoration: none;
-}
-
-table#index td {
- vertical-align: bottom;
-}
-
-table#index td.box {
- vertical-align: top;
- font-size: 90%;
- background-color: rgb(90%,89%,85%);
- padding: 6px;
- margin-bottom: 10px;
- -moz-border-radius: 4px;
- -khtml-border-radius: 4px;
- -webkit-border-radius: 4px;
- -chrome-border-radius: 4px;
- -o-border-radius: 4px;
-}
-
-table#index td.box p {
- margin: 0;
- padding: 8px;
-}
-
-/* ========== */
-
-div#instance_description a {
- text-decoration: underline;
-}
-
-/* ========== */
diff --git a/web/public/favicon.ico b/web/public/favicon.ico
index 698794f..1a04d3e 100644
--- a/web/public/favicon.ico
+++ b/web/public/favicon.ico
Binary files differ
diff --git a/web/public/img/arrow.png b/web/public/img/arrow.png
new file mode 100644
index 0000000..4b35e9d
--- /dev/null
+++ b/web/public/img/arrow.png
Binary files differ
diff --git a/web/public/img/mapbg/world.png b/web/public/img/mapbg/world.png
new file mode 100644
index 0000000..d544068
--- /dev/null
+++ b/web/public/img/mapbg/world.png
Binary files differ
diff --git a/web/public/js/customSelect.jquery.js b/web/public/js/customSelect.jquery.js
new file mode 100644
index 0000000..b28c0ed
--- /dev/null
+++ b/web/public/js/customSelect.jquery.js
@@ -0,0 +1,26 @@
+(function($){
+ $.fn.extend({
+
+ customStyle : function(options) {
+ if(!$.browser.msie || ($.browser.msie&&$.browser.version>6)){
+ return this.each(function() {
+
+ var currentSelected = $(this).find(':selected');
+ $(this).after('<span class="customStyleSelectBox"><span class="customStyleSelectBoxInner">'+currentSelected.text()+'</span></span>').css({position:'absolute', opacity:0 /*,fontSize:$(this).next().css('font-size')*/});
+ var selectBoxSpan = $(this).next();
+ var selectBoxWidth = parseInt($(this).width()) - parseInt(selectBoxSpan.css('padding-left')) -parseInt(selectBoxSpan.css('padding-right'));
+ var selectBoxSpanInner = selectBoxSpan.find(':first-child');
+ selectBoxSpan.css({display:'inline-block'});
+ selectBoxSpanInner.css({width:selectBoxWidth, display:'inline-block'});
+ var selectBoxHeight = parseInt(selectBoxSpan.height()) + parseInt(selectBoxSpan.css('padding-top')) + parseInt(selectBoxSpan.css('padding-bottom'));
+ $(this).height(selectBoxHeight).change(function(){
+ // selectBoxSpanInner.text($(this).val()).parent().addClass('changed'); This was not ideal
+ selectBoxSpanInner.text($(this).find(':selected').text()).parent().addClass('changed');
+ // Thanks to Juarez Filho & PaddyMurphy
+ });
+
+ });
+ }
+ }
+ });
+})(jQuery);
diff --git a/web/public/js/flexigrid.js b/web/public/js/flexigrid.js
index 95914bf..66813c3 100644
--- a/web/public/js/flexigrid.js
+++ b/web/public/js/flexigrid.js
@@ -94,6 +94,14 @@
);
},
+ getRp: function() {
+ return p.rp;
+ },
+ newRp: function(value) {
+ p.newp = 1;
+ p.rp = value;
+ g.populate();
+ },
fixHeight: function (newH) {
newH = false;
if (!newH) newH = $(g.bDiv).height();
@@ -117,7 +125,11 @@
var hrH = g.bDiv.offsetTop + newH;
if (p.height != 'auto' && p.resizable) hrH = g.vDiv.offsetTop;
$(g.rDiv).css({height: hrH});
-
+
+ var width_pDiv = jQuery(g.pDiv).width();
+ var width_hDiv = jQuery(g.hDiv).find('tr').width() - 1;
+ jQuery(g.pDiv).find('.pDiv2').width( Math.min(width_pDiv, width_hDiv) );
+
},
dragStart: function (dragtype,e,obj) { //default drag function start
@@ -250,6 +262,7 @@
this.rePosDrag();
this.fixHeight();
this.colresize = false;
+ this.populate();
}
else if (this.vresize)
{
@@ -393,6 +406,11 @@
if (this.pDiv) {
this.domElements.pPageStat.html(p.nomsg);
}
+ if (p.emptymsg != null) {
+ jQuery(this.gDiv).replaceWith('<span class="emptymsg">' + p.emptymsg + '</span>');
+ } else {
+ jQuery(this.gDiv).remove();
+ }
return false;
}
@@ -527,7 +545,7 @@
tbody = null; data = null; i = null;
- if (p.onSuccess) p.onSuccess();
+ if (p.onSuccess) p.onSuccess(g);
if (p.hideOnSubmit) $(g.block).remove();//$(t).show();
this.hDiv.scrollLeft = this.bDiv.scrollLeft;
@@ -599,7 +617,7 @@
this.domElements.pReload.addClass('loading');
}
- $(g.block).css({top:g.bDiv.offsetTop});
+ $(g.block).css({top:g.bDiv.offsetTop, width: jQuery(g.pDiv).find('.pDiv2').width()});
if (p.hideOnSubmit) $(this.gDiv).prepend(g.block); //$(t).hide();
@@ -1168,7 +1186,7 @@
{
g.pDiv.className = 'pDiv';
g.pDiv.innerHTML = '<div class="pDiv2"></div>';
- $(g.bDiv).after(g.pDiv);
+ $(g.bDiv).parent().prepend(g.pDiv);
var html = ' <div class="pGroup"> <div class="pFirst pButton"><span></span></div><div class="pPrev pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"><span class="pcontrol">'+p.pagetext+' <input type="text" size="4" value="1" /> '+p.outof+' <span> 1 </span></span></div> <div class="btnseparator"></div> <div class="pGroup"> <div class="pNext pButton"><span></span></div><div class="pLast pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"> <div class="pReload pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"><span class="pPageStat"></span></div>';
$('div',g.pDiv).html(html);
@@ -1215,8 +1233,8 @@
//add search button
if (p.searchitems)
{
- $('.pDiv2',g.pDiv).prepend("<div class='pGroup'> <div class='pSearch pButton'><span></span></div> </div> <div class='btnseparator'></div>");
- $('.pSearch',g.pDiv).click(function(){$(g.sDiv).slideToggle('fast',function(){$('.sDiv:visible input:first',g.gDiv).trigger('focus');});});
+/* $('.pDiv2',g.pDiv).prepend("<div class='pGroup'> <div class='pSearch pButton'><span></span></div> </div> <div class='btnseparator'></div>");
+ $('.pSearch',g.pDiv).click(function(){$(g.sDiv).slideToggle('fast',function(){$('.sDiv:visible input:first',g.gDiv).trigger('focus');});}); */
//add search box
g.sDiv.className = 'sDiv';
@@ -1235,11 +1253,11 @@
if (p.qtype=='') p.qtype = sitems[0].name;
- $(g.sDiv).append("<div class='sDiv2'>"+p.findtext+" <input type='text' size='30' name='q' class='qsbox' /> <select name='qtype'>"+sopt+"</select> <!--input type='button' value='Clear' /--></div>");
+ $(g.sDiv).append("<div class='btnseparator'></div> <div class='sDiv2'>"/*+p.findtext*/+" <input type='text' size='20' name='q' class='qsbox' />"); // <select name='qtype'>"+sopt+"</select> <!--input type='button' value='Clear' /--></div>");
$('input[name=q],select[name=qtype]',g.sDiv).keydown(function(e){if(e.keyCode==13) g.doSearch()});
$('input[value=Clear]',g.sDiv).click(function(){$('input[name=q]',g.sDiv).val(''); p.query = ''; g.doSearch(); });
- $(g.bDiv).after(g.sDiv);
+ $(g.pDiv).children().first().append(g.sDiv);
}
@@ -1279,7 +1297,8 @@
gtop = g.bDiv.offsetTop;
$(g.block).css(
{
- width: g.bDiv.style.width,
+ //width: g.bDiv.style.width,
+ width: jQuery(g.pDiv).find('.pDiv2').width(),
height: gh,
background: 'white',
position: 'relative',
diff --git a/web/public/js/jquery.tipsy.js b/web/public/js/jquery.tipsy.js
new file mode 100644
index 0000000..9567ed3
--- /dev/null
+++ b/web/public/js/jquery.tipsy.js
@@ -0,0 +1,241 @@
+// tipsy, facebook style tooltips for jquery
+// version 1.0.0a
+// (c) 2008-2010 jason frame [jason@onehackoranother.com]
+// released under the MIT license
+
+(function($) {
+
+ function maybeCall(thing, ctx) {
+ return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
+ };
+
+ function Tipsy(element, options) {
+ this.$element = $(element);
+ this.options = options;
+ this.enabled = true;
+ this.fixTitle();
+ };
+
+ Tipsy.prototype = {
+ show: function() {
+ var title = this.getTitle();
+ if (title && this.enabled) {
+ var $tip = this.tip();
+
+ $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
+ $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
+ $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
+
+ var pos = $.extend({}, this.$element.offset(), {
+ width: this.$element[0].offsetWidth,
+ height: this.$element[0].offsetHeight
+ });
+
+ var actualWidth = $tip[0].offsetWidth,
+ actualHeight = $tip[0].offsetHeight,
+ gravity = maybeCall(this.options.gravity, this.$element[0]);
+
+ var tp;
+ switch (gravity.charAt(0)) {
+ case 'n':
+ tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
+ break;
+ case 's':
+ tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
+ break;
+ case 'e':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
+ break;
+ case 'w':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
+ break;
+ }
+
+ if (gravity.length == 2) {
+ if (gravity.charAt(1) == 'w') {
+ tp.left = pos.left + pos.width / 2 - 15;
+ } else {
+ tp.left = pos.left + pos.width / 2 - actualWidth + 15;
+ }
+ }
+
+ $tip.css(tp).addClass('tipsy-' + gravity);
+ $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);
+ if (this.options.className) {
+ $tip.addClass(maybeCall(this.options.className, this.$element[0]));
+ }
+
+ if (this.options.fade) {
+ $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
+ } else {
+ $tip.css({visibility: 'visible', opacity: this.options.opacity});
+ }
+ }
+ },
+
+ hide: function() {
+ if (this.options.fade) {
+ this.tip().stop().fadeOut(function() { $(this).remove(); });
+ } else {
+ this.tip().remove();
+ }
+ },
+
+ fixTitle: function() {
+ var $e = this.$element;
+ if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
+ $e.attr('original-title', $e.attr('title') || '').removeAttr('title');
+ }
+ },
+
+ getTitle: function() {
+ var title, $e = this.$element, o = this.options;
+ this.fixTitle();
+ var title, o = this.options;
+ if (typeof o.title == 'string') {
+ title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
+ } else if (typeof o.title == 'function') {
+ title = o.title.call($e[0]);
+ }
+ title = ('' + title).replace(/(^\s*|\s*$)/, "");
+ return title || o.fallback;
+ },
+
+ tip: function() {
+ if (!this.$tip) {
+ this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>');
+ }
+ return this.$tip;
+ },
+
+ validate: function() {
+ if (!this.$element[0].parentNode) {
+ this.hide();
+ this.$element = null;
+ this.options = null;
+ }
+ },
+
+ enable: function() { this.enabled = true; },
+ disable: function() { this.enabled = false; },
+ toggleEnabled: function() { this.enabled = !this.enabled; }
+ };
+
+ $.fn.tipsy = function(options) {
+
+ if (options === true) {
+ return this.data('tipsy');
+ } else if (typeof options == 'string') {
+ var tipsy = this.data('tipsy');
+ if (tipsy) tipsy[options]();
+ return this;
+ }
+
+ options = $.extend({}, $.fn.tipsy.defaults, options);
+
+ function get(ele) {
+ var tipsy = $.data(ele, 'tipsy');
+ if (!tipsy) {
+ tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
+ $.data(ele, 'tipsy', tipsy);
+ }
+ return tipsy;
+ }
+
+ function enter() {
+ var tipsy = get(this);
+ tipsy.hoverState = 'in';
+ if (options.delayIn == 0) {
+ tipsy.show();
+ } else {
+ tipsy.fixTitle();
+ setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
+ }
+ };
+
+ function leave() {
+ var tipsy = get(this);
+ tipsy.hoverState = 'out';
+ if (options.delayOut == 0) {
+ tipsy.hide();
+ } else {
+ setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
+ }
+ };
+
+ if (!options.live) this.each(function() { get(this); });
+
+ if (options.trigger != 'manual') {
+ var binder = options.live ? 'live' : 'bind',
+ eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
+ eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
+ this[binder](eventIn, enter)[binder](eventOut, leave);
+ }
+
+ return this;
+
+ };
+
+ $.fn.tipsy.defaults = {
+ className: null,
+ delayIn: 0,
+ delayOut: 0,
+ fade: false,
+ fallback: '',
+ gravity: 'n',
+ html: false,
+ live: false,
+ offset: 0,
+ opacity: 0.8,
+ title: 'title',
+ trigger: 'hover'
+ };
+
+ // Overwrite this method to provide options on a per-element basis.
+ // For example, you could store the gravity in a 'tipsy-gravity' attribute:
+ // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
+ // (remember - do not modify 'options' in place!)
+ $.fn.tipsy.elementOptions = function(ele, options) {
+ return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
+ };
+
+ $.fn.tipsy.autoNS = function() {
+ return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
+ };
+
+ $.fn.tipsy.autoWE = function() {
+ return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
+ };
+
+ /**
+ * yields a closure of the supplied parameters, producing a function that takes
+ * no arguments and is suitable for use as an autogravity function like so:
+ *
+ * @param margin (int) - distance from the viewable region edge that an
+ * element should be before setting its tooltip's gravity to be away
+ * from that edge.
+ * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer
+ * if there are no viewable region edges effecting the tooltip's
+ * gravity. It will try to vary from this minimally, for example,
+ * if 'sw' is preferred and an element is near the right viewable
+ * region edge, but not the top edge, it will set the gravity for
+ * that element's tooltip to be 'se', preserving the southern
+ * component.
+ */
+ $.fn.tipsy.autoBounds = function(margin, prefer) {
+ return function() {
+ var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},
+ boundTop = $(document).scrollTop() + margin,
+ boundLeft = $(document).scrollLeft() + margin,
+ $this = $(this);
+
+ if ($this.offset().top < boundTop) dir.ns = 'n';
+ if ($this.offset().left < boundLeft) dir.ew = 'w';
+ if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';
+ if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';
+
+ return dir.ns + (dir.ew ? dir.ew : '');
+ }
+ };
+
+})(jQuery);
diff --git a/web/public/js/taginfo.js b/web/public/js/taginfo.js
index 3ea3957..8362b58 100644
--- a/web/public/js/taginfo.js
+++ b/web/public/js/taginfo.js
@@ -1,6 +1,73 @@
// taginfo.js
+var grids = {};
+var current_grid = '';
+
+function resize_home() {
+ var tagcloud = jQuery('#tagcloud');
+ tagcloud.empty();
+ tagcloud.height(0);
+
+ resize_wrapper();
+
+ var height = tagcloud.parent().innerHeight();
+ tagcloud.parent().children().each(function(index) {
+ if (this.id != 'tagcloud') {
+ height -= jQuery(this).outerHeight(true);
+ }
+ });
+ tagcloud.height(height - 20);
+
+ var tags = tagcloud_data();
+ var cloud = '';
+ for (var i=0; i < tags.length; i++) {
+ cloud += '<a href="/keys/' + tags[i][0] + '" style="font-size: ' + tags[i][1] + 'px;">' + tags[i][0] + '</a> ';
+ }
+ tagcloud.append(cloud);
+
+ var tags = tagcloud.children().toArray().sort(function(a, b) {
+ return parseInt(jQuery(a).css('font-size')) - parseInt(jQuery(b).css('font-size'));
+ });
+
+ while (tagcloud.get(0).scrollHeight > tagcloud.height()) {
+ jQuery(tags.shift()).remove();
+ }
+}
+
+function resize_window() {
+ resize_wrapper(true);
+}
+
+function resize_wrapper(resize_grid) {
+ var height = jQuery(window).height();
+
+ height -= jQuery('div#header').outerHeight(true);
+ height -= jQuery('div.pre').outerHeight(true);
+ height -= jQuery('.ui-tabs-nav').outerHeight(true);
+ height -= jQuery('div#footer').outerHeight(true);
+
+ var wrapper = jQuery('.resize,.ui-tabs-panel');
+ wrapper.outerHeight(height);
+
+ if (resize_grid) {
+ if (grids[current_grid]) {
+ var grid = grids[current_grid][0].grid;
+ var oldrp = grid.getRp();
+ var rp = calculate_flexigrid_rp(jQuery(grids[current_grid][0]).parents('.ui-tabs-panel, div.box'));
+ if (rp != oldrp) {
+ grid.newRp(rp);
+ grid.fixHeight();
+ }
+ }
+ }
+}
+
jQuery(document).ready(function() {
+
+ jQuery('select').customStyle();
+ jQuery('*[title]').tipsy({ opacity: 1, delayIn: 500 });
+ jQuery(window).resize(resize_window);
+
jQuery.getQueryString = (function(a) {
if (a == "") return {};
var b = {};
@@ -10,16 +77,6 @@ jQuery(document).ready(function() {
}
return b;
})(window.location.search.substr(1).split('&'))
-
- jQuery('#instance_description').dialog({
- autoOpen: false,
- position: [20, 50],
- title: texts.instance_description.title
- });
-
- jQuery('#instance').click(function() {
- jQuery('#instance_description').dialog('open');
- });
});
function print_wiki_link(title, options) {
@@ -261,21 +318,48 @@ jQuery(document).ready(function() {
/* ============================ */
-var grids = {};
-
var flexigrid_defaults = {
method : 'GET',
dataType : 'json',
showToggleBtn : false,
+ height : 'auto',
usepager : true,
- useRp : true,
- rp : 15,
- rpOptions : [10,15,20,25,50,100],
+ useRp : false,
+ onSuccess : function(grid) {
+ jQuery('*[title]').tipsy({ opacity: 1, delayIn: 500, gravity: 'w' });
+ grid.fixHeight();
+ }
};
+function calculate_flexigrid_rp(box) {
+ var height = box.innerHeight();
+
+ height -= box.children('h2').outerHeight(true);
+ height -= box.children('.boxpre').outerHeight(true);
+ height -= box.children('.pDiv').outerHeight();
+ height -= box.children('.pHiv').outerHeight();
+ height -= 80; // table tools and header, possibly horizontal scrollbar
+
+ return Math.floor(height / 28);
+}
+
function create_flexigrid(domid, options) {
+ current_grid = domid;
if (grids[domid] == null) {
- grids[domid] = jQuery('#' + domid).flexigrid(jQuery.extend({}, flexigrid_defaults, texts.flexigrid, options));
+ // grid doesn't exist yet, so create it
+ var me = jQuery('#' + domid);
+ var rp = calculate_flexigrid_rp(me.parents('.ui-tabs-panel, div.box'));
+ grids[domid] = me.flexigrid(jQuery.extend({}, flexigrid_defaults, texts.flexigrid, options, { rp: rp }));
+ jQuery('*[title]').tipsy({ opacity: 1, delayIn: 500, gravity: 's' });
+ } else {
+ // grid does exist, make sure it has the right size
+ var grid = grids[domid][0].grid;
+ var oldrp = grid.getRp();
+ var rp = calculate_flexigrid_rp(jQuery(grids[domid][0]).parents('.ui-tabs-panel, div.box'));
+ if (rp != oldrp) {
+ grid.newRp(rp);
+ grid.fixHeight();
+ }
}
}
@@ -285,14 +369,14 @@ var create_flexigrid_for = {
create_flexigrid('grid-keys', {
url: '/api/2/db/keys?include=prevalent_values',
colModel: [
- { display: texts.osm.key, name: 'key', width: 180, sortable: true },
- { display: '<span title="Number of objects with this key"><img src="/img/types/all.16.png" alt=""/> Total</span>', name: 'count_all', width: 250, sortable: true, align: 'center' },
- { display: '<span title="Number of nodes with this key"><img src="/img/types/node.16.png" alt=""/> Nodes</span>', name: 'count_nodes', width: 250, sortable: true, align: 'center' },
- { display: '<span title="Number of ways with this key"><img src="/img/types/way.16.png" alt=""/> Ways</span>', name: 'count_ways', width: 250, sortable: true, align: 'center' },
- { display: '<span title="Number of relations with this key"><img src="/img/types/relation.16.png" alt=""/> Relation</span>', name: 'count_relations', width: 250, sortable: true, align: 'center' },
- { display: 'Users', name: 'users_all', width: 44, sortable: true, align: 'right' },
- { display: '<img src="/img/sources/wiki.16.png" alt="Wiki" title="Wiki"/>', name: 'in_wiki', width: 20, sortable: true, align: 'center' },
- { display: '<img src="/img/sources/josm.16.png" alt="JOSM" title="JOSM"/>', name: 'in_josm', width: 20, sortable: true, align: 'center' },
+ { display: texts.osm.key, name: 'key', width: 160, sortable: true },
+ { display: '<span title="Number of objects with this key"><img src="/img/types/all.16.png" alt=""/> Total</span>', name: 'count_all', width: 200, sortable: true, align: 'center' },
+ { display: '<span title="Number of nodes with this key"><img src="/img/types/node.16.png" alt=""/> Nodes</span>', name: 'count_nodes', width: 220, sortable: true, align: 'center' },
+ { display: '<span title="Number of ways with this key"><img src="/img/types/way.16.png" alt=""/> Ways</span>', name: 'count_ways', width: 220, sortable: true, align: 'center' },
+ { display: '<span title="Number of relations with this key"><img src="/img/types/relation.16.png" alt=""/> Relation</span>', name: 'count_relations', width: 220, sortable: true, align: 'center' },
+ { display: '<span title="Number of users currently owning objects with this key">Users</span>', name: 'users_all', width: 44, sortable: true, align: 'right' },
+ { display: '<img src="/img/sources/wiki.16.png" alt="Wiki" title="Key has wiki page"/>', name: 'in_wiki', width: 20, sortable: true, align: 'center' },
+ { display: '<img src="/img/sources/josm.16.png" alt="JOSM" title="Key appears in JOSM config"/>', name: 'in_josm', width: 20, sortable: true, align: 'center' },
{ display: '<span title="Number of different values for this key">Values</span>', name: 'values_all', width: 70, sortable: true, align: 'right' },
{ display: 'Prevalent Values', name: 'prevalent_values', width: 500, sortable: true }
],
@@ -301,7 +385,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -338,7 +421,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -364,7 +446,6 @@ var create_flexigrid_for = {
],
usepager: false,
useRp: false,
- height: 130,
preProcess: function(data) {
return {
total: 4,
@@ -392,7 +473,7 @@ var create_flexigrid_for = {
],
sortname: 'to_count',
sortorder: 'desc',
- height: 410,
+ emptymsg: '[No combinations found (only checked the most common ones).]',
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -410,7 +491,7 @@ var create_flexigrid_for = {
url: '/api/2/wiki/tags?key=' + encodeURIComponent(key) + '&value=' + encodeURIComponent(value),
colModel: [
{ display: 'Language', name: 'lang', width: 150, sortable: false },
- { display: 'Wikipage', name: 'title', width: 200, sortable: false, align: 'right' },
+ { display: 'Wiki page', name: 'title', width: 200, sortable: false, align: 'right' },
{ display: 'Description', name: 'description', width: 400, sortable: false },
{ display: 'Image', name: 'image', width: 120, sortable: false },
{ display: 'Objects', name: 'objects', width: 80, sortable: false },
@@ -420,7 +501,6 @@ var create_flexigrid_for = {
],
usepager: false,
useRp: false,
- height: 300,
preProcess: function(data) {
return {
total: data.size,
@@ -459,7 +539,7 @@ var create_flexigrid_for = {
],*/
sortname: 'v',
sortorder: 'asc',
- height: 300,
+ emptymsg: '[No JOSM styles for this tag]',
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -486,7 +566,6 @@ var create_flexigrid_for = {
],
usepager: false,
useRp: false,
- height: 130,
preProcess: function(data) {
return {
total: 4,
@@ -506,20 +585,19 @@ var create_flexigrid_for = {
create_flexigrid('grid-values', {
url: '/api/2/db/keys/values?key=' + encodeURIComponent(key) + '&filter=' + encodeURIComponent(filter_type),
colModel: [
- { display: texts.misc.count, name: 'count', width: 300, sortable: true, align: 'center' },
- { display: texts.osm.value, name: 'value', width: 500, sortable: true }
+ { display: texts.osm.value, name: 'value', width: 500, sortable: true },
+ { display: texts.misc.count, name: 'count', width: 300, sortable: true, align: 'center' }
],
searchitems: [
{ display: texts.osm.value, name: 'value' }
],
sortname: 'count',
sortorder: 'desc',
- height: 410,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
- print_value_with_percent(row.count, row.fraction),
- link_to_value(key, row.value)
+ link_to_value(key, row.value),
+ print_value_with_percent(row.count, row.fraction)
] };
});
delete data.data;
@@ -540,7 +618,6 @@ var create_flexigrid_for = {
],
sortname: 'to_count',
sortorder: 'desc',
- height: 410,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -568,7 +645,7 @@ var create_flexigrid_for = {
],
sortname: 'v',
sortorder: 'asc',
- height: 410,
+ emptymsg: '[No JOSM styles for this key]',
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -588,7 +665,7 @@ var create_flexigrid_for = {
url: '/api/2/wiki/keys?key=' + encodeURIComponent(key),
colModel: [
{ display: 'Language', name: 'lang', width: 150, sortable: false },
- { display: 'Wikipage', name: 'title', width: 160, sortable: false, align: 'right' },
+ { display: 'Wiki page', name: 'title', width: 160, sortable: false, align: 'right' },
{ display: 'Description', name: 'description', width: 400, sortable: false },
{ display: 'Image', name: 'image', width: 120, sortable: false },
{ display: 'Objects', name: 'objects', width: 80, sortable: false },
@@ -598,7 +675,6 @@ var create_flexigrid_for = {
],
usepager: false,
useRp: false,
- height: 400,
preProcess: function(data) {
return {
total: data.size,
@@ -633,7 +709,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -655,7 +730,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -679,7 +753,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -713,7 +786,6 @@ var create_flexigrid_for = {
],
sortname: 'k',
sortorder: 'asc',
- height: 400,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -745,7 +817,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
var wikilinks = [];
@@ -775,7 +846,6 @@ var create_flexigrid_for = {
{ display: 'Wiki Key Pages', name: 'wiki_key_pages', width: 260, sortable: true, align: 'center' },
{ display: 'Wiki Tag Pages', name: 'wiki_tag_pages', width: 260, sortable: true, align: 'center' }
],
- height: 540,
sortname: 'code',
sortorder: 'asc',
showToggleBtn: false,
@@ -814,7 +884,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -831,19 +900,6 @@ var create_flexigrid_for = {
});
},
characters_in_keys: {
- statistics: function() {
- create_flexigrid('grid-statistics', {
- colModel: [
- { display: '&nbsp;', name: 'row', width: 10, sortable: true, align: 'center' },
- { display: texts.misc.count, name: 'count', width: 40, sortable: true, align: 'right' },
- { display: 'Fraction', name: 'fraction', width: 60, sortable: true, align: 'right' },
- { display: 'Characters in Key', name: 'characters', width: 810, sortable: true }
- ],
- width: 990,
- height: 200,
- usepager: false
- });
- },
whitespace: function() {
create_flexigrid('grid-whitespace', {
url: '/api/2/db/keys?filters=characters_space&include=prevalent_values',
@@ -863,7 +919,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -901,7 +956,6 @@ var create_flexigrid_for = {
],
sortname: 'count_all',
sortorder: 'desc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
@@ -941,7 +995,6 @@ var create_flexigrid_for = {
],
sortname: 'length',
sortorder: 'asc',
- height: 420,
preProcess: function(data) {
data.rows = jQuery.map(data.data, function(row, i) {
return { 'cell': [
diff --git a/web/taginfo.rb b/web/taginfo.rb
index bbef7a9..fffcdc5 100755
--- a/web/taginfo.rb
+++ b/web/taginfo.rb
@@ -108,6 +108,8 @@ class Taginfo < Sinatra::Base
javascript 'jquery-1.5.1.min'
javascript 'jquery-ui-1.8.10.custom.min'
+ javascript 'customSelect.jquery'
+ javascript 'jquery.tipsy'
# javascript 'flexigrid-minified'
javascript 'flexigrid'
javascript 'protovis-r3.2'
@@ -154,18 +156,13 @@ class Taginfo < Sinatra::Base
erb :index
end
- %w(about download keys tags).each do |page|
+ %w(about download keys sources tags).each do |page|
get '/' + page do
@title = t.taginfo[page]
erb page.to_sym
end
end
- get! '/sources' do
- @title = t.taginfo.sources
- erb :'sources/index'
- end
-
#-------------------------------------
get %r{^/keys/(.*)} do |key|
@@ -207,6 +204,7 @@ class Taginfo < Sinatra::Base
end
@wiki_count = @db.count('wiki.wikipages').condition('value IS NULL').condition('key=?', @key).get_first_value().to_i
+ @user_count = @db.select('SELECT users_all FROM db.keys').condition('key=?', @key).get_first_value().to_i
(@merkaartor_type, @merkaartor_link, @merkaartor_selector) = @db.select('SELECT tag_type, link, selector FROM merkaartor.keys').condition('key=?', @key).get_columns(:tag_type, :link, :selector)
@merkaartor_images = [:node, :way, :area, :relation].map{ |type|
@@ -262,6 +260,7 @@ class Taginfo < Sinatra::Base
@sel = Hash.new('')
@sel[@filter_type] = ' selected="selected"'
+ @wiki_count = @db.count('wiki.wikipages').condition('value=?', @value).condition('key=?', @key).get_first_value().to_i
@count_all = @db.select('SELECT count_all FROM db.tags').condition('key = ? AND value = ?', @key, @value).get_first_value().to_i
@desc = h(@db.select("SELECT description FROM wiki.wikipages WHERE lang=? AND key=? AND value=?", r18n.locale.code, @key, @value).get_first_value())
diff --git a/web/views/about.erb b/web/views/about.erb
index 0e64c48..54d9b16 100644
--- a/web/views/about.erb
+++ b/web/views/about.erb
@@ -1,5 +1,18 @@
-<h1>About</h1>
+<div class="boxes">
+ <h2>Sources</h2>
+ <div class="box">
+ <p>Taginfo integrates data about tags from several sources:</p>
+ <p>From the <b>OSM database</b> statistics about key and tag usage.</p>
+ <p>The <b>Wiki</b> contains some documentation for keys and tags.</p>
+ <p>Icons and styles are taken from the <b>JOSM</b> editor
+ configuration.</p>
+ <p>&#x2794; <a href="http://wiki.openstreetmap.org/wiki/Taginfo/Sources">More information about the sources on the wiki...</a></p>
+ </div>
+</div>
+
+
+<h1>About taginfo</h1>
<p>OpenStreetMap uses <b>tags</b> to add meaning to geographic objects. There
is no fixed list of those tags. New tags can be invented and used as needed.
Everybody can come up with a new tag and add it to new or existing objects.
@@ -17,15 +30,6 @@ also gets information about those tags from the wiki and from other places. Tagi
tries to bring together all information about tags to help you understand
how they are used and what they mean.</p>
-<h2>Sources</h2>
-
-<p><b>Wiki:</b> The <img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://wiki.openstreetmap.org/">OSM wiki</a>
-contains lots of documentation about tags but the information is far from complete.
-Taginfo finds all pages beginning with 'Key:' or 'Tag:' and their
-counterparts for other languages (for example 'DE:Key:...'). </p>
-
-<p><b>JOSM:</b> <img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://josm.openstreetmap.de/">JOSM</a> is one of the most popular OSM editors.</p>
-
<h2>Contact</h2>
<p>Taginfo was created and is maintained by <a href="http://wiki.openstreetmap.org/wiki/User:Joto">Jochen Topf</a>. You can contact
@@ -59,11 +63,3 @@ Please use the API responsibly. Do not create huge amounts of requests to
get the whole database or large chunks of it, instead use the
<a href="/download">database downloads</a> provided.</p>
-<h2>Similar tools</h2>
-
-<p>Taginfo is not the first tool to try something like this. Others like
-<img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://wiki.openstreetmap.org/wiki/Tagwatch">Tagwatch</a>,
-<img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://tagstat.hypercube.telascience.org/index.php">Tagstat</a>, and
-<img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://www.osmdoc.com/">Osmdoc</a> came before it.</p>
-
-
diff --git a/web/views/apidoc.erb b/web/views/apidoc.erb
index d1cf6c7..d3685b3 100644
--- a/web/views/apidoc.erb
+++ b/web/views/apidoc.erb
@@ -1,4 +1,4 @@
-<h1>API Documentation</h1>
+<h1 class="section">API Documentation</h1>
<p>See <a href="http://wiki.openstreetmap.org/wiki/Taginfo/API">the OSM wiki</a> for general information about the API.</p>
diff --git a/web/views/download.erb b/web/views/download.erb
index 9eb95aa..0e06179 100644
--- a/web/views/download.erb
+++ b/web/views/download.erb
@@ -1,24 +1,34 @@
-<h1><%= t.taginfo.download %></h1>
-
-<%= t.pages.download.index.intro %>
-
-<table class="list">
- <tr>
- <th class="tl"><%= t.pages.download.index.file %></th>
- <th class="tr"><%= t.pages.download.index.packed %></th>
- <th class="tr"><%= t.pages.download.index.unpacked %></th>
- <th class="tl"><%= t.pages.download.index.description %></th>
- </tr>
-<% Source.visible.each do |source| %>
- <td class="tl"><%= source.link_download %></td>
- <td class="tr"><%= source.dbpack %></td>
- <td class="tr"><%= source.dbsize %></td>
- <td class="tl"><%= t.sources[source.id].description %></td>
- </tr>
+<div class="pre">
+ <h1 class="section"><%= t.taginfo.download %></h1>
+ <%= t.pages.download.index.intro %>
+</div>
+<div class="box resize">
+ <table class="list">
+ <tr>
+ <th class="tl"><%= t.pages.download.index.file %></th>
+ <th class="tr"><%= t.pages.download.index.packed %></th>
+ <th class="tr"><%= t.pages.download.index.unpacked %></th>
+ <th class="tl"><%= t.pages.download.index.description %></th>
+ </tr>
+ <tr>
+ <td class="tl"><a rel="nofollow" href="/download/taginfo-master.db.bz2">taginfo-master.db.bz2</a></td>
+ <td class="tr"><%= File.size("../../download/taginfo-master.db.bz2").to_bytes rescue "<i>#{ t.pages.download.index.unknown }</i>" %></td>
+ <td class="tr"><%= File.size("../../data/taginfo-master.db").to_bytes rescue "<i>#{ t.pages.download.index.unknown }</i>" %></td>
+ <td class="tl"><%= t.sources.master.description %></td>
+ </tr>
+<% Source.visible.each_with_index do |source, n| c = (n%2==0) ? ' even' : '' %>
+ <tr>
+ <td class="tl<%= c %>"><%= source.link_download %></td>
+ <td class="tr<%= c %>"><%= source.dbpack %></td>
+ <td class="tr<%= c %>"><%= source.dbsize %></td>
+ <td class="tl<%= c %>"><%= t.sources[source.id].description %></td>
+ </tr>
<% end %>
- <td class="tl"><a rel="nofollow" href="/download/taginfo-master.db.bz2">taginfo-master.db.bz2</a></td>
- <td class="tr"><%= File.size("../../download/taginfo-master.db.bz2").to_bytes rescue "<i>#{ t.pages.download.index.unknown }</i>" %></td>
- <td class="tr"><%= File.size("../../data/taginfo-master.db").to_bytes rescue "<i>#{ t.pages.download.index.unknown }</i>" %></td>
- <td class="tl"><%= t.sources.master.description %></td>
- </tr>
-</table>
+ </table>
+</div>
+<% javascript do
+ JQuery.ready do
+ JS.raw(%Q{ resize_wrapper(); })
+ end
+end
+%>
diff --git a/web/views/embed/key.erb b/web/views/embed/key.erb
index 5b457f0..e1aaa09 100644
--- a/web/views/embed/key.erb
+++ b/web/views/embed/key.erb
@@ -1,11 +1,11 @@
<% if @key == '{{{key}}}' %>
-<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/">tag<b>info</b> [More...]</a>
<p>Statistics about the key will appear here.</p>
<% elsif @dbkey.nil? %>
-<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>">tag<b>info</b> [More...]</a>
<p>This key does not appear in the OSM database.</p>
<% else %>
-<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/keys/?key=<%= escape(@key) %>"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about key '<%= escape_html(@key) %>' at Taginfo" href="http://taginfo.openstreetmap.org/keys/?key=<%= escape(@key) %>">tag<b>info</b> [More...]</a>
<div class="content"><table>
<tr>
<td class="ft"><img src="/img/types/node.16.png" alt="Nodes" title="Nodes with key '<%= escape_html(@key) %>' in database"></td>
diff --git a/web/views/embed/layout.erb b/web/views/embed/layout.erb
index 9f02fb3..edb3c28 100644
--- a/web/views/embed/layout.erb
+++ b/web/views/embed/layout.erb
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style>
body {
- font-family: Verdana,Arial,sans-serif;
+ font-family: Arial,sans-serif;
font-size: 0.8em;
padding: 0;
margin: 0;
@@ -13,7 +13,7 @@ body {
div.main {
width: 180px;
background-color: #ffffff;
- border: 1px solid #006000;
+ border: 1px solid #a0a0a0;
padding: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
@@ -30,7 +30,7 @@ a img {
a {
text-decoration: none;
- color: #006000;
+ color: #083e76;
}
div.content {
diff --git a/web/views/embed/tag.erb b/web/views/embed/tag.erb
index 74361b8..394f168 100644
--- a/web/views/embed/tag.erb
+++ b/web/views/embed/tag.erb
@@ -1,11 +1,11 @@
<% if @key == '{{{key}}}' && @value == '{{{value}}}' %>
-<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/">tag<b>info</b> [More...]</a>
<p>Statistics about the tag will appear here.</p>
<% elsif @dbtag.nil? %>
-<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>">tag<b>info</b> [More...]</a>
<p>This tag does not appear in the OSM database.</p>
<% else %>
-<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>"><img src="/img/taginfo.24.png" alt="Taginfo"/> <b>Taginfo</b> [More...]</a>
+<a target="_blank" title="More information about tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' at Taginfo" href="http://taginfo.openstreetmap.org/tags/?key=<%= escape(@key) %>&value=<%= escape(@value) %>">tag<b>info</b> [More...]</a>
<div class="content"><table>
<tr>
<td class="ft"><img src="/img/types/node.16.png" alt="Nodes" title="Nodes with tag '<%= escape_html(@key) %>=<%= escape_html(@value) %>' in database"></td>
diff --git a/web/views/index.erb b/web/views/index.erb
index e27ce36..51be9fe 100644
--- a/web/views/index.erb
+++ b/web/views/index.erb
@@ -1,55 +1,61 @@
-<table id="index">
+<table class="boxes resize" width="100%">
<tr>
<td>
- <h2><a href="/keys">KEYS</a></h2>
+ <h2><a href="/keys"><%= t.taginfo.keys %></a>
+ / <a href="/tags"><%= t.taginfo.tags %></a></h2>
</td>
<td rowspan="4" width="20"></td>
- <td width="338">
- <h2><a href="/reports">REPORTS</a></h2>
+ <td width="232">
+ <h2><a href="/reports"><%= t.taginfo.reports %></a></h2>
</td>
<td rowspan="4" width="20"></td>
- <td width="338">
- <h2><a href="/about">ABOUT TAGINFO</a></h2>
+ <td width="232">
+ <h2><a href="/about"><%= t.taginfo.about %></a></h2>
</td>
</tr>
<tr>
<td rowspan="3" class="box">
- <p>Here are some common tag keys. There is also a <a href="/keys">list of all keys</a>
- or a <a href="/tags">list of the most common tags</a>.</p>
- <p style="margin-top: 15px; line-height: 200%; text-align: justify;">
-<% @tags.each do |tag| %>
- <a href="/keys/<%= tag['key'] %>" class="taglink" style="font-size: <%= tagcloud_size(tag) %>px;"><%= tag['key'] %></a>
-<% end %>
- </p>
+ <p><%= t.pages.index.keys.intro %></p>
+ <div id="tagcloud" style="margin: 15px 0; line-height: 200%; text-align: justify; overflow: hidden;">
+ </div>
+ <p class="emphasis" style="margin-top: 20px;">&#x2794; <a href="/keys"><%= t.pages.index.keys.listkeys %></a></p>
+ <p class="emphasis">&#x2794; <a href="/tags"><%= t.pages.index.keys.listtags %></a></p>
</td>
<td rowspan="3" class="box">
- <%= t.pages.reports.index.intro %>
- <p style="margin-top: 15px">
+ <p><%= t.pages.reports.index.intro %></p>
+ <ul style="margin: 0 0 0 18px; padding: 0;">
<% Report.each do |report| %>
- <a href="<%= report.url %>"><%= t.reports[report.name].name %></a><br/>
+ <li><a href="<%= report.url %>"><%= t.reports[report.name].name %></a></li>
<% end %>
- </p>
- <p style="padding-top: 20px;"><a href="/reports">See all reports...</a></p>
+ </ul>
+ <p class="emphasis" style="margin-top: 20px;">&#x2794; <a href="/reports"><%= t.pages.index.reports.listreports %></a></p>
</td>
<td class="box">
- <p>OpenStreetMap uses <b>tags</b> of the form <b>key=value</b>
- to add meaning to geographic objects.
- Taginfo collects information about these tags from several
- sources and helps you find tags and explore their uses.</p>
- <p><a href="/about">More about taginfo...</a></p>
+ <%= t.pages.index.about.intro %>
+ <p class="emphasis" style="margin-top: 20px;">&#x2794; <a href="/about"><%= t.pages.index.about.more %></a></p>
</td>
</tr>
<tr>
<td>
- <h2><a href="/international">INTERNATIONAL</a></h2>
+ <h2><a href="/international"><%= t.taginfo.international %></a></h2>
</td>
</tr>
<tr>
<td class="box">
- <p>This is the main taginfo site. It contains OSM data for
- the whole planet and is updated daily.</p>
- <p><a href="/sites">See other taginfo sites showing data for a
- specific area...</a></p>
+ <p><%= TaginfoConfig.get('instance.description') %></p>
+ <p class="emphasis" style="margin-top: 20px;">&#x2794; <a href="http://wiki.openstreetmap.org/wiki/Taginfo/Sites"><%= t.pages.index.international.see %></a></p>
</td>
</tr>
</table>
+<% javascript do
+ JS.raw('function tagcloud_data() { return ' + @tags.map{ |tag| [tag['key'], tagcloud_size(tag)] }.to_json.gsub(/\],/, "],\n")) + "; }\n" +
+
+ JQuery.ready do
+ JS.raw(<<"JAVASCRIPT")
+jQuery(window).resize(resize_home);
+resize_home();
+
+JAVASCRIPT
+ end
+end
+%>
diff --git a/web/views/key.erb b/web/views/key.erb
index 429b2e3..98e28e9 100644
--- a/web/views/key.erb
+++ b/web/views/key.erb
@@ -1,28 +1,24 @@
-<div id="tools">
- <% if @count_all_values < 1000 %>
- <%= xapi_link('*', @key) %> <%= josm_link('*', @key) %>
- <% else %>
- <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" width="14" height="10" alt=""/>XAPI</span>
- <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" width="14" height="10" alt=""/>JOSM</span>
- <% end %>
-</div>
-
-<form id="filter-form">
- <label for="filter"><%= t.pages.key.filter.label %></label>
- <select id="filter" name="filter">
- <option value="all"<%= @sel['all'] %>><%= t.pages.key.filter.none %></option>
- <option value="nodes"<%= @sel['nodes'] %>><%= t.pages.key.filter.nodes %></option>
- <option value="ways"<%= @sel['ways'] %>><%= t.pages.key.filter.ways %></option>
- <option value="relations"<%= @sel['relations'] %>><%= t.pages.key.filter.relations %></option>
- </select>
-</form>
-
-<h1><%= @key_pp %></h1>
-
-<div class="tag-description" title="Description from the wiki">
- <%= @desc %>
+<div class="pre">
+ <div id="tools">
+ <% if @count_all_values < 1000 %>
+ <%= xapi_link('*', @key) %> <%= josm_link('*', @key) %>
+ <% else %>
+ <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" width="14" height="10" alt=""/>XAPI</span>
+ <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" width="14" height="10" alt=""/>JOSM</span>
+ <% end %>
+ </div>
+ <form id="filter-form">
+ <label for="filter"><%= t.pages.key.filter.label %></label>
+ <select id="filter" name="filter">
+ <option value="all"<%= @sel['all'] %>><%= t.pages.key.filter.none %></option>
+ <option value="nodes"<%= @sel['nodes'] %>><%= t.pages.key.filter.nodes %></option>
+ <option value="ways"<%= @sel['ways'] %>><%= t.pages.key.filter.ways %></option>
+ <option value="relations"<%= @sel['relations'] %>><%= t.pages.key.filter.relations %></option>
+ </select>
+ </form>
+ <h1><%= @key_pp %></h1>
+ <p><%= @desc %></p>
</div>
-
<div id="tabs">
<ul>
<li><a href="#overview"><%= t.taginfo.overview %></a></li>
@@ -36,11 +32,12 @@
<h2><%= t.taginfo.overview %></h2>
<table id="grid-overview">
</table>
+ <p>Objects with this key are owned by <%= @user_count %> different users.</p>
</div>
<div id="values">
<h2><%= t.pages.key.values_used %></h2>
- <div class="canvas" id="canvas-values" style="position: absolute;"></div>
- <div style="margin-left: 180px;">
+ <div class="canvas" id="canvas-values" style="float: right;"></div>
+ <div>
<table id="grid-values">
</table>
</div>
@@ -81,12 +78,12 @@
</div>
<div id="josm">
<h2><%= t.pages.key.josm_rules.title %></h2>
- <form>
+<!-- <form>
<label for="josm-style"><%= t.pages.key.josm_rules.choice %></label>
<select id="josm-style" name="josm-style">
<option>Standard</option>
</select>
- </form>
+ </form>-->
<table id="grid-josm">
</table>
</div>
@@ -108,9 +105,7 @@
</table>
</div>-->
</div>
-
<iframe id="josmiframe" name="josmiframe"></iframe>
-
<% javascript do
JQuery.ready do
JS.raw(<<"JAVASCRIPT")
@@ -131,6 +126,7 @@ jQuery('#filter').bind('change', function() {
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
if (ui.tab.hash.substring(1) in create_flexigrid_for.key) {
create_flexigrid_for.key[ui.tab.hash.substring(1)](#{ @key.to_json }, #{ @filter_type.to_json });
diff --git a/web/views/keys.erb b/web/views/keys.erb
index 26be6e2..3154633 100644
--- a/web/views/keys.erb
+++ b/web/views/keys.erb
@@ -1,11 +1,14 @@
-<h1 style="text-transform: uppercase;"><%= t.osm.keys %></h1>
-
-<table id="grid-keys">
-</table>
-
+<div class="pre">
+ <h1 class="section"><%= t.osm.keys %></h1>
+ <%= t.pages.keys.intro %>
+</div>
+<div class="box resize">
+ <table id="grid-keys">
+ </table>
+</div>
<% javascript do
JQuery.ready do
- JS.raw(%Q{ create_flexigrid_for.keys.keys(); })
+ JS.raw(%Q{ resize_wrapper(); create_flexigrid_for.keys.keys(); })
end
end
%>
diff --git a/web/views/layout.erb b/web/views/layout.erb
index f1b7dfe..cd6ce97 100644
--- a/web/views/layout.erb
+++ b/web/views/layout.erb
@@ -11,8 +11,11 @@
<%= javascript_tags %>
</head>
<body>
- <div id="top">
- <div id="top_right">
+ <div id="header">
+ <div id="header_date" title="<%= t.taginfo.data_from_description %>">
+ <%= t.taginfo.data_from %>: <%= @data_until %> UTC
+ </div>
+ <div id="header_forms">
<form id="set_language" action="/switch_locale">
<input type="hidden" name="url" value="<%= request.path %>"/>
<select id="locale" name="locale">
@@ -22,19 +25,16 @@
</select>
</form>
<form action="/search">
- <input type="text" id="search" name="q" value="Search taginfo..." style="color: #d0d0d0;"/>
+ <input type="text" id="search" name="q" value=""/>
</form>
</div>
- <div id="date">
- <%= t.taginfo.data_from %>: <%= @data_until %> UTC
- </div>
- <div id="top_left">
- <a href="/"><img src="<%= TaginfoConfig.get('instance.icon', '/img/logo/world.png') %>" alt="taginfo"/></a>
+ <div id="header_logo">
+ <a href="/"><img width="49" height="49" src="<%= TaginfoConfig.get('instance.icon', '/img/logo/world.png') %>" alt="taginfo"/></a>
<% if @section %>
- <a href="/"><img src="/img/logo/taginfo_with_bar.png" alt="taginfo"/></a>
+ <a href="/"><img width="136" height="49" src="/img/logo/taginfo_with_bar.png" alt="taginfo"/></a>
<a class="section" href="/<%= @section %>"><%= @section_title %></a>
<% else %>
- <a href="/"><img src="/img/logo/taginfo.png" alt="taginfo"/></a>
+ <a href="/"><img width="129" height="49" src="/img/logo/taginfo.png" alt="taginfo"/></a>
<% end %>
</div>
</div>
@@ -43,9 +43,12 @@
</div>
<div id="footer">
<div id="footer_left">
- <a href="http://www.openstreetmap.org/"><b style="font-style: smallcaps;">OpenStreetMap</b></a>
+ <a href="http://www.openstreetmap.org/"><b style="font-style: smallcaps;">OpenStreetMap</b> - The Free Wiki World Map</a>
</div>
<div id="footer_right">
+ <a href="/keys"><%= t.taginfo.keys %></a> &middot;
+ <a href="/tags"><%= t.taginfo.tags %></a> &middot;
+ <a href="/reports"><%= t.taginfo.reports %></a> &middot;
<a href="/sources"><%= t.taginfo.sources %></a> &middot;
<a href="/download"><%= t.taginfo.download %></a> &middot;
<a href="/about"><%= t.taginfo.about %></a> &middot;
diff --git a/web/views/reports/characters_in_keys.erb b/web/views/reports/characters_in_keys.erb
index 390e091..71f2470 100644
--- a/web/views/reports/characters_in_keys.erb
+++ b/web/views/reports/characters_in_keys.erb
@@ -1,7 +1,7 @@
-<h1><%= t.reports.characters_in_keys.name %></h1>
-
-<%= t.reports.characters_in_keys.intro %>
-
+<div class="pre">
+ <h1><%= t.reports.characters_in_keys.name %></h1>
+ <%= t.reports.characters_in_keys.intro %>
+</div>
<div id="tabs">
<ul>
<li><a href="#statistics"><%= t.reports.characters_in_keys.statistics.tab %></a></li>
@@ -10,36 +10,45 @@
</ul>
<div id="statistics">
<h2><%= t.reports.characters_in_keys.statistics.title %></h2>
- <div class="canvas" id="canvas"></div>
- <p></p>
- <table id="grid-statistics">
+ <div class="canvas boxpre" id="canvas" style="margin-bottom: 20px;"></div>
+ <table class="list">
+ <tr>
+ <th>&nbsp;</th>
+ <th class="tr"><%= t.misc.count %></th>
+ <th class="tr"><%= t.reports.characters_in_keys.statistics.fraction %></th>
+ <th class="tl"><%= t.reports.characters_in_keys.statistics.characters %></th>
+ </tr>
<% letter='A'
colors = { :A => '#2ca02c', :B => '#98df8a', :C => '#dbdb8d', :D => '#d62728', :E => '#ff9896', :F => '#aec7e8' }
- %w(plain colon letters space problem rest).each do |type| %>
+ %w(plain colon letters space problem rest).each_with_index do |type, n| c = (n%2!=0) ? ' even' : '' %>
<tr>
- <td style="background-color: <%= colors[letter.to_sym] %>;"><%= letter %></td>
- <td><%= @db.stats('characters_in_keys_' + type) %></td>
- <td><%= sprintf '%.2f', @db.stats('characters_in_keys_' + type) * 100.0 / @db.stats('num_keys') %>%</td>
- <td><%= t.reports.characters_in_keys.statistics.characters_in_keys[type] %></td>
+ <td class="tc<%= c %>" style="background-color: <%= colors[letter.to_sym] %>;"><%= letter %></td>
+ <td class="tr<%= c %>"><%= @db.stats('characters_in_keys_' + type) %></td>
+ <td class="tr<%= c %>"><%= sprintf '%.2f', @db.stats('characters_in_keys_' + type) * 100.0 / @db.stats('num_keys') %>%</td>
+ <td class="tl<%= c %>"><%= t.reports.characters_in_keys.statistics.characters_in_keys[type] %></td>
</tr>
<% letter = letter.succ; end %>
<tr>
- <td style="border-top: 1px solid #000000;"></td>
- <td style="border-top: 1px solid #000000;"><%= @db.stats('num_keys') %></td>
- <td style="border-top: 1px solid #000000;">100%</td>
- <td style="border-top: 1px solid #000000;">Total</td>
+ <td class="tc" style="border-top: 1px solid #000000;"></td>
+ <td class="tr" style="border-top: 1px solid #000000;"><%= @db.stats('num_keys') %></td>
+ <td class="tr" style="border-top: 1px solid #000000;">100%</td>
+ <td class="tl" style="border-top: 1px solid #000000;">Total</td>
</tr>
</table>
</div>
<div id="whitespace">
<h2><%= t.reports.characters_in_keys.whitespace.title %></h2>
- <%= t.reports.characters_in_keys.whitespace.intro %>
+ <div class="boxpre">
+ <%= t.reports.characters_in_keys.whitespace.intro %>
+ </div>
<table id="grid-whitespace">
</table>
</div>
<div id="problematic">
<h2><%= t.reports.characters_in_keys.problematic.title %></h2>
- <%= t.reports.characters_in_keys.problematic.intro %>
+ <div class="boxpre">
+ <%= t.reports.characters_in_keys.problematic.intro %>
+ </div>
<table id="grid-problematic">
</table>
</div>
@@ -51,8 +60,11 @@
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
- create_flexigrid_for.reports.characters_in_keys[ui.tab.hash.substring(1)]();
+ if (create_flexigrid_for.reports.characters_in_keys[ui.tab.hash.substring(1)]) {
+ create_flexigrid_for.reports.characters_in_keys[ui.tab.hash.substring(1)]();
+ }
}
});
diff --git a/web/views/reports/database_statistics.erb b/web/views/reports/database_statistics.erb
index fe36c97..da04737 100644
--- a/web/views/reports/database_statistics.erb
+++ b/web/views/reports/database_statistics.erb
@@ -1,49 +1,57 @@
<h1><%= t.reports.database_statistics.name %></h1>
-<div class="stats" style="float: left; padding-right: 60px;">
- <div>
- <h2><img class="icon_large" src="/img/types/all.24.png" alt=""/> Objects</h2>
- <table class="stats">
- <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('objects').to_s_with_ts %></td><td> objects in the database</td></tr>
- <tr><td>with together </td><td class="number"><%= @db.stats('object_tags').to_s_with_ts %></td><td> tags</td></tr>
- </table>
- </div>
- <div>
- <h2><img class="icon_large" src="/img/types/node.24.png" alt=""/> Nodes</h2>
- <table class="stats">
- <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('nodes').to_s_with_ts %></td><td> nodes</td></tr>
- <tr><td>of which </td><td class="number"><%= @db.stats('nodes_with_tags').to_s_with_ts %></td><td> have at least one tag</td></tr>
- <tr><td>(thats </td><td class="number"><%= (10000.0 * @db.stats('nodes_with_tags') / @db.stats('nodes')).to_i.to_f / 100 %></td><td> %)</td></tr>
- <tr><td>with together </td><td class="number"><%= @db.stats('node_tags').to_s_with_ts %></td><td> tags</td></tr>
- <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('node_tags') / @db.stats('nodes_with_tags')).to_i.to_f / 100 %></td><td> tags per tagged node)</td></tr>
- </table>
- </div>
- <div>
- <h2><img class="icon_large" src="/img/types/way.24.png" alt=""/> Ways</h2>
- <table class="stats">
- <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('ways').to_s_with_ts %></td><td> ways</td></tr>
- <tr><td>(of which </td><td class="number"><%= @db.stats('closed_ways').to_s_with_ts %></td><td> are closed)</td></tr>
- <tr><td>with together </td><td class="number"><%= @db.stats('way_tags').to_s_with_ts %></td><td> tags</td></tr>
- <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('way_tags') / @db.stats('ways')).to_i.to_f / 100 %></td><td> tags per way)</td></tr>
- </table>
- </div>
- <div>
- <h2><img class="icon_large" src="/img/types/relation.24.png" alt=""/> Relations</h2>
- <table class="stats">
- <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('relations').to_s_with_ts %></td><td> relations</td></tr>
- <tr><td>with together </td><td class="number"><%= @db.stats('relation_tags').to_s_with_ts %></td><td> tags</td></tr>
- <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('relation_tags') / @db.stats('relations')).to_i.to_f / 100 %></td><td> tags per relation)</td></tr>
- </table>
- </div>
-</div>
-
-<div class="stats">
- <div>
- <h2><img class="icon_large" src="/img/types/tag.24.png" alt=""/> Tags</h2>
- <table class="stats">
- <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('num_keys').to_s_with_ts %></td><td> different keys</td></tr>
- <tr><td>and </td><td class="number"><%= @db.stats('num_tags').to_s_with_ts %></td><td> different tags</td></tr>
- </table>
- </div>
-</div>
-
+<table class="boxes">
+ <tr>
+ <td><h2><img class="icon_large" src="/img/types/all.24.png" alt=""/> OBJECTS</h2></td>
+ <td rowspan="4" width="20"></td>
+ <td><h2><img class="icon_large" src="/img/types/tag.24.png" alt=""/> TAGS</h2></td>
+ <td rowspan="4" width="20"></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="box">
+ <table>
+ <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('objects').to_s_with_ts %></td><td> objects in the database</td></tr>
+ <tr><td>with together </td><td class="number"><%= @db.stats('object_tags').to_s_with_ts %></td><td> tags</td></tr>
+ </table>
+ </td>
+ <td class="box">
+ <table>
+ <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('num_keys').to_s_with_ts %></td><td> different keys</td></tr>
+ <tr><td>and </td><td class="number"><%= @db.stats('num_tags').to_s_with_ts %></td><td> different tags</td></tr>
+ </table>
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><h2><img class="icon_large" src="/img/types/node.24.png" alt=""/> NODES</h2></td>
+ <td><h2><img class="icon_large" src="/img/types/way.24.png" alt=""/> WAYS</h2></td>
+ <td><h2><img class="icon_large" src="/img/types/relation.24.png" alt=""/> RELATIONS</h2></td>
+ </tr>
+ <tr>
+ <td class="box">
+ <table>
+ <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('nodes').to_s_with_ts %></td><td> nodes</td></tr>
+ <tr><td>of which </td><td class="number"><%= @db.stats('nodes_with_tags').to_s_with_ts %></td><td> have at least one tag</td></tr>
+ <tr><td>(thats </td><td class="number"><%= (10000.0 * @db.stats('nodes_with_tags') / @db.stats('nodes')).to_i.to_f / 100 %></td><td> %)</td></tr>
+ <tr><td>with together </td><td class="number"><%= @db.stats('node_tags').to_s_with_ts %></td><td> tags</td></tr>
+ <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('node_tags') / @db.stats('nodes_with_tags')).to_i.to_f / 100 %></td><td> tags per tagged node)</td></tr>
+ </table>
+ </td>
+ <td class="box">
+ <table>
+ <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('ways').to_s_with_ts %></td><td> ways</td></tr>
+ <tr><td>(of which </td><td class="number"><%= @db.stats('closed_ways').to_s_with_ts %></td><td> are closed)</td></tr>
+ <tr><td>with together </td><td class="number"><%= @db.stats('way_tags').to_s_with_ts %></td><td> tags</td></tr>
+ <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('way_tags') / @db.stats('ways')).to_i.to_f / 100 %></td><td> tags per way)</td></tr>
+ </table>
+ </td>
+ <td class="box">
+ <table>
+ <tr><td style="width: 7em;">There are </td><td style="width: 7em;" class="number"><%= @db.stats('relations').to_s_with_ts %></td><td> relations</td></tr>
+ <tr><td>with together </td><td class="number"><%= @db.stats('relation_tags').to_s_with_ts %></td><td> tags</td></tr>
+ <tr><td>(or about </td><td class="number"><%= ( 100.0 * @db.stats('relation_tags') / @db.stats('relations')).to_i.to_f / 100 %></td><td> tags per relation)</td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
diff --git a/web/views/reports/frequently_used_keys_without_wiki_page.erb b/web/views/reports/frequently_used_keys_without_wiki_page.erb
index 6c0f8b2..78d8909 100644
--- a/web/views/reports/frequently_used_keys_without_wiki_page.erb
+++ b/web/views/reports/frequently_used_keys_without_wiki_page.erb
@@ -1,24 +1,26 @@
-<h1><%= @title %></h1>
-
-<p>This table shows keys that appear more than 10&thinsp;000 times in the OSM
-database but have no wiki page describing them. If you know anything about one
-of these keys, please create the wiki page by clicking on the link in the
-leftmost column and describe the key. Sometimes it might make sense to create a
-redirect to a different wiki page instead. To do this put just one line with
-<tt style="background-color: #f0f0f0; padding: 0 2px;">#REDIRECT [[<i>page name</i>]]</tt>
-in the wiki page.</p>
-
-<form method="" type="GET">
- <input type="checkbox" name="english" id="english"<%= params[:english] == '1' ? ' checked="checked"' : '' %>/> Also show keys that have no English language wiki page but a page in some other language.
-</form>
-<p></p>
-
-<table id="grid-keys">
-</table>
-
+<div class="pre">
+ <h1><%= @title %></h1>
+ <p>This table shows keys that appear more than 10&thinsp;000 times in the OSM
+ database but have no wiki page describing them. If you know anything about one
+ of these keys, please create the wiki page by clicking on the link in the
+ leftmost column and describe the key. Sometimes it might make sense to create a
+ redirect to a different wiki page instead. To do this put just one line with
+ <tt style="background-color: #f0f0f0; padding: 0 2px;">#REDIRECT [[<i>page name</i>]]</tt>
+ in the wiki page.</p>
+</div>
+<div class="box resize">
+ <div class="boxpre">
+ <form method="" type="GET" style="margin-bottom: 10px;">
+ <input type="checkbox" name="english" id="english"<%= params[:english] == '1' ? ' checked="checked"' : '' %>/> Also show keys that have no English language wiki page but a page in some other language.
+ </form>
+ </div>
+ <table id="grid-keys">
+ </table>
+</div>
<% javascript do
JQuery.ready do
JS.raw(<<"JAVASCRIPT")
+ resize_wrapper();
create_flexigrid_for.reports.frequently_used_keys_without_wiki_page(#{ params[:english] == '1' ? '1' : '0' });
jQuery('#english').bind('click', function() {
jQuery('#grid-keys').flexOptions({
diff --git a/web/views/reports/index.erb b/web/views/reports/index.erb
index 94928a8..f632270 100644
--- a/web/views/reports/index.erb
+++ b/web/views/reports/index.erb
@@ -1,17 +1,24 @@
-<h1><%= t.taginfo.reports %></h1>
-
-<%= t.pages.reports.index.intro %>
-
-<table class="list">
- <tr><th class="tc" colspan="<%= Source.visible.size %>"/><%= t.pages.reports.index.data_sources %></th><th class="tl">Report</th></tr>
-<% Report.each_with_index do |report, n| c = (n%2!=0) ? ' even' : '' %>
- <tr>
-<% Source.visible.each do |source| %>
- <td class="tc<%= c %>" width="45"><%= source.link_img if report.uses_source? source.id %></td>
-<% end %>
- <td class="tl<%= c %>"><a href="<%= report.url %>"><%= t.reports[report.name].name %></a></td>
- </tr>
-<% end %>
-</table>
-
-
+<div class="pre">
+ <h1 class="section"><%= t.taginfo.reports %></h1>
+ <%= t.pages.reports.index.intro %>
+</div>
+<div class="box resize">
+ <h2>List of all reports</h2>
+ <table class="list">
+ <tr><th class="tc" colspan="<%= Source.visible.size %>"/><%= t.pages.reports.index.data_sources %></th><th class="tl">Report</th></tr>
+ <% Report.each_with_index do |report, n| c = (n%2!=0) ? ' even' : '' %>
+ <tr>
+ <% Source.visible.each do |source| %>
+ <td class="tc<%= c %>" width="45"><%= source.link_img if report.uses_source? source.id %></td>
+ <% end %>
+ <td class="tl<%= c %>"><a href="<%= report.url %>"><%= t.reports[report.name].name %></a></td>
+ </tr>
+ <% end %>
+ </table>
+</div>
+<% javascript do
+ JQuery.ready do
+ JS.raw(%Q{ resize_wrapper(); })
+ end
+end
+%>
diff --git a/web/views/reports/josm_styles.erb b/web/views/reports/josm_styles.erb
index 55a0f75..e1c4a93 100644
--- a/web/views/reports/josm_styles.erb
+++ b/web/views/reports/josm_styles.erb
@@ -1,18 +1,20 @@
-<h1><%= t.reports.josm_styles.name %></h1>
-
-Select style:
-<select>
-<% ['standard'].each do |style| %>
- <option id="<%= style %>" name="<%= style %>"><%= style %></option>
-<% end %>
-</select>
-
-<table id="grid-rules">
-</table>
-
+<div class="pre">
+ <h1><%= t.reports.josm_styles.name %></h1>
+<!--
+ Select style:
+ <select>
+ <% ['standard'].each do |style| %>
+ <option id="<%= style %>" name="<%= style %>"><%= style %></option>
+ <% end %>
+ </select>-->
+</div>
+<div class="box resize">
+ <table id="grid-rules">
+ </table>
+</div>
<% javascript do
JQuery.ready do
- JS.raw(%Q{ create_flexigrid_for.reports.josm_styles('standard'); })
+ JS.raw(%Q{ resize_wrapper(); create_flexigrid_for.reports.josm_styles('standard'); })
end
end
%>
diff --git a/web/views/reports/key_lengths.erb b/web/views/reports/key_lengths.erb
index 9931a82..2b937c8 100644
--- a/web/views/reports/key_lengths.erb
+++ b/web/views/reports/key_lengths.erb
@@ -1,7 +1,7 @@
-<h1><%= @title %></h1>
-
-<p>Tag keys can be between 0 and 255 (Unicode) characters long. Very short or very long keys are often, but not always, errors.</p>
-
+<div class="pre">
+ <h1><%= @title %></h1>
+ <p>Tag keys can be between 0 and 255 (Unicode) characters long. Very short or very long keys are often, but not always, errors.</p>
+</div>
<%
hist = Array.new
@db.execute('SELECT length(key) AS length, count(*) AS count FROM db.keys GROUP BY length(key) ORDER BY length(key)') do |row|
@@ -9,7 +9,6 @@
end
hist = hist.map{ |item| item.nil? ? 0 : item }
%>
-
<div id="tabs">
<ul>
<li><a href="#keys">Keys</a></li>
@@ -26,12 +25,12 @@
<div id="canvas"></div>
</div>
</div>
-
<script type="text/javascript">
jQuery(function() {
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
create_flexigrid_for.reports.key_lengths[ui.tab.hash.substring(1)]();
}
diff --git a/web/views/reports/language_comparison_table_for_keys_in_the_wiki.erb b/web/views/reports/language_comparison_table_for_keys_in_the_wiki.erb
index 4a231a7..e6655d1 100644
--- a/web/views/reports/language_comparison_table_for_keys_in_the_wiki.erb
+++ b/web/views/reports/language_comparison_table_for_keys_in_the_wiki.erb
@@ -9,29 +9,29 @@
end
@languages_lookup = @languages.map{ |lang| "'#{lang}': #{lang_lookup[lang]}" }.join(', ')
%>
-<h1><%= t.reports.language_comparison_table_for_keys_in_the_wiki.name %></h1>
-
-<%= t.reports.language_comparison_table_for_keys_in_the_wiki.intro %>
-
-<table id="grid-keys">
-</table>
-
-<p></p>
-
-<table>
-
- <tr><td><img src="/img/sources/wiki/wiki-t.png" alt="[t]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.template %></td></tr>
- <tr><td><img src="/img/sources/wiki/wiki-e.png" alt="[e]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.error %></td></tr>
- <tr><td><img src="/img/sources/wiki/wiki-p.png" alt="[p]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.page %></td></tr>
- <tr><td><img src="/img/sources/wiki/wiki-r.png" alt="[r]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.redirect %></td></tr>
-</table>
-
+<div class="pre">
+ <h1><%= t.reports.language_comparison_table_for_keys_in_the_wiki.name %></h1>
+ <%= t.reports.language_comparison_table_for_keys_in_the_wiki.intro %>
+</div>
+<div class="box resize">
+ <table id="grid-keys">
+ </table>
+ <table class="boxpre">
+ <tr><td><img src="/img/sources/wiki/wiki-t.png" alt="[t]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.template %></td></tr>
+ <tr><td><img src="/img/sources/wiki/wiki-e.png" alt="[e]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.error %></td></tr>
+ <tr><td><img src="/img/sources/wiki/wiki-p.png" alt="[p]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.page %></td></tr>
+ <tr><td><img src="/img/sources/wiki/wiki-r.png" alt="[r]"/></td><td><%= t.reports.language_comparison_table_for_keys_in_the_wiki.icons.redirect %></td></tr>
+ </table>
+</div>
<script type="text/javascript">
jQuery(document).ready(function() {
+ resize_wrapper();
var lang_to_idx = {
<%= @languages_lookup %>
};
- jQuery('#grid-keys').flexigrid({
+ var rp = calculate_flexigrid_rp(jQuery('div.box')) - 1;
+ current_grid = 'grid-keys';
+ grids[current_grid] = jQuery('#grid-keys').flexigrid({
url: '/api/2/wiki/keys',
method: 'GET',
dataType: 'json',
@@ -49,10 +49,12 @@
showToggleBtn: false,
showTableToggleBtn: false,
usepager: true,
- useRp: true,
- rpOptions: [10,15,20,25,50,100],
- rp: 15,
- height: 400,
+ useRp: false,
+ rp: rp,
+ height: 'auto',
+ onSuccess: function(grid) {
+ grid.fixHeight();
+ },
preProcess: function(data) {
return {
total: data.total,
diff --git a/web/views/reports/languages.erb b/web/views/reports/languages.erb
index 9cf7047..baae73b 100644
--- a/web/views/reports/languages.erb
+++ b/web/views/reports/languages.erb
@@ -1,10 +1,11 @@
-<h1><%= t.reports.languages.name %></h1>
-
-<%= t.reports.languages.intro %>
-
-<table id="grid-langs">
-</table>
-
+<div class="pre">
+ <h1><%= t.reports.languages.name %></h1>
+ <%= t.reports.languages.intro %>
+</div>
+<div class="box">
+ <table id="grid-langs">
+ </table>
+</div>
<% javascript do
JQuery.ready do
JS.raw(%Q{ create_flexigrid_for.reports.languages(); })
diff --git a/web/views/reports/wiki_pages_about_non_existing_keys.erb b/web/views/reports/wiki_pages_about_non_existing_keys.erb
index f030386..3ca8264 100644
--- a/web/views/reports/wiki_pages_about_non_existing_keys.erb
+++ b/web/views/reports/wiki_pages_about_non_existing_keys.erb
@@ -1,13 +1,14 @@
-<h1><%= t.reports.wiki_pages_about_non_existing_keys.name %></h1>
-
-<%= t.reports.wiki_pages_about_non_existing_keys.intro %>
-
-<table id="grid-keys">
-</table>
-
+<div class="pre">
+ <h1><%= t.reports.wiki_pages_about_non_existing_keys.name %></h1>
+ <%= t.reports.wiki_pages_about_non_existing_keys.intro %>
+</div>
+<div class="box resize">
+ <table id="grid-keys">
+ </table>
+</div>
<% javascript do
JQuery.ready do
- JS.raw(%Q{ create_flexigrid_for.reports.wiki_pages_about_non_existing_keys(); })
+ JS.raw(%Q{ resize_wrapper(); create_flexigrid_for.reports.wiki_pages_about_non_existing_keys(); })
end
end
%>
diff --git a/web/views/search.erb b/web/views/search.erb
index 4226d74..a6c9eb2 100644
--- a/web/views/search.erb
+++ b/web/views/search.erb
@@ -1,7 +1,7 @@
-<h1><%= @title %></h1>
-
-<p><b><%= t.pages.search.results.you_were_searching_for %>:</b> <%= escape_html(@query) %></p>
-
+<div class="pre">
+ <h1 class="section"><%= @title %></h1>
+ <p><b><%= t.pages.search.results.you_were_searching_for %>:</b> <%= escape_html(@query) %></p>
+</div>
<div id="tabs">
<ul>
<li><a href="#keys"><%= t.osm.keys %></a></li>
@@ -18,12 +18,12 @@
</table>
</div>
</div>
-
<% javascript do
JQuery.ready do
JS.raw(%Q{
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
create_flexigrid_for.search[ui.tab.hash.substring(1)](#{ @query.to_json });
}
diff --git a/web/views/search_tags.erb b/web/views/search_tags.erb
index 2548199..bd8e911 100644
--- a/web/views/search_tags.erb
+++ b/web/views/search_tags.erb
@@ -1,7 +1,7 @@
-<h1><%= @title %></h1>
-
-<p><b><%= t.pages.search.results.you_were_searching_for %>:</b> <%= escape_html(@query) %></p>
-
+<div class="pre">
+ <h1 class="section"><%= @title %></h1>
+ <p><b><%= t.pages.search.results.you_were_searching_for %>:</b> <%= escape_html(@query) %></p>
+</div>
<div id="tabs">
<ul>
<li><a href="#tags"><%= t.osm.tags %></a></li>
@@ -12,12 +12,12 @@
</table>
</div>
</div>
-
<% javascript do
JQuery.ready do
JS.raw(%Q{
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
create_flexigrid_for.search[ui.tab.hash.substring(1)](#{ @query.to_json });
}
diff --git a/web/views/sources.erb b/web/views/sources.erb
new file mode 100644
index 0000000..5e35000
--- /dev/null
+++ b/web/views/sources.erb
@@ -0,0 +1,26 @@
+<div class="pre">
+ <h1 class="section"><%= t.taginfo.sources %></h1>
+ <%= t.pages.sources.index.intro %>
+</div>
+<div class="box resize">
+ <table class="list">
+ <tr>
+ <th class="tl"><%= t.taginfo.source %></th><th><%= t.pages.sources.index.data_until %>*</th><th><%= t.pages.sources.index.last_update_run %></th>
+ </tr>
+ <% Source.visible.each_with_index do |source, n| c = (n%2!=0) ? ' even' : '' %>
+ <tr>
+ <td class="<%= c %>"><%= source.name %>
+ <td class="tc<%= c %>"><%= source.data_until %> UTC</td>
+ <td class="tc<%= c %>"><%= source.update_start + ' ' + t.pages.sources.index.to + ' ' + source.update_end %> UTC</td>
+ </tr>
+ <% end %>
+ </table>
+
+ <p style="font-size: 80%">* <%= t.pages.sources.index.data_until_explanation %></p>
+</div>
+<% javascript do
+ JQuery.ready do
+ JS.raw(%Q{ resize_wrapper(); })
+ end
+end
+%>
diff --git a/web/views/sources/index.erb b/web/views/sources/index.erb
deleted file mode 100644
index 2aef3e7..0000000
--- a/web/views/sources/index.erb
+++ /dev/null
@@ -1,20 +0,0 @@
-<h1><%= t.taginfo.sources %></h1>
-
-<%= t.pages.sources.index.intro %>
-
-<table class="list">
- <tr>
- <th class="tl"><%= t.taginfo.source %></th><th><%= t.pages.sources.index.data_until %>*</th><th><%= t.pages.sources.index.last_update_run %></th>
- </tr>
-<% Source.visible.each_with_index do |source, n| c = (n%2!=0) ? ' even' : '' %>
- <tr>
- <td class="<%= c %>"><%= source.name %>
- <td class="tc<%= c %>"><%= source.data_until %></td>
- <td class="tc<%= c %>"><%= source.update_start + ' ' + t.pages.sources.index.to + ' ' + source.update_end %></td>
- </tr>
-<% end %>
-</table>
-
-<p style="font-size: 80%">* <%= t.pages.sources.index.data_until_explanation %></p>
-
-<%= t.pages.sources.index.info %>
diff --git a/web/views/sources/merkaartor/index.erb b/web/views/sources/merkaartor/index.erb
deleted file mode 100644
index a1486c7..0000000
--- a/web/views/sources/merkaartor/index.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<h1><img src="/img/sources/merkaartor.32.png" alt="" title="Merkaartor"/> Merkaartor</h1>
-
-<p><img src="/img/link-extern.gif" alt=""/><a class="extlink" href="http://merkaartor.be/">Merkaartor</a> is an OSM editor.</p>
-
diff --git a/web/views/tag.erb b/web/views/tag.erb
index e5807d5..5c750c4 100644
--- a/web/views/tag.erb
+++ b/web/views/tag.erb
@@ -1,28 +1,24 @@
-<div id="tools">
- <% if @count_all < 1000 %>
- <%= xapi_link('*', @key, @value) %> <%= josm_link('*', @key, @value) %>
- <% else %>
- <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" alt=""/>XAPI</span>
- <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" alt=""/>JOSM</span>
- <% end %>
-</div>
-
-<form id="filter-form">
- <label for="filter"><%= t.pages.key.filter.label %></label>
- <select id="filter" name="filter">
- <option value="all"<%= @sel['all'] %>><%= t.pages.key.filter.none %></option>
- <option value="nodes"<%= @sel['nodes'] %>><%= t.pages.key.filter.nodes %></option>
- <option value="ways"<%= @sel['ways'] %>><%= t.pages.key.filter.ways %></option>
- <option value="relations"<%= @sel['relations'] %>><%= t.pages.key.filter.relations %></option>
- </select>
-</form>
-
-<h1><%= link_to_key(@key) %>=<%= @value_pp %></h1>
-
-<div class="tag-description" title="Description from the wiki">
- <%= @desc %>
+<div class="pre">
+ <div id="tools">
+ <% if @count_all < 1000 %>
+ <%= xapi_link('*', @key, @value) %> <%= josm_link('*', @key, @value) %>
+ <% else %>
+ <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" alt=""/>XAPI</span>
+ <span class="button disabled" title="Button disabled, because there are too many objects with this key"><img src="/img/link-extern-disabled.gif" alt=""/>JOSM</span>
+ <% end %>
+ </div>
+ <form id="filter-form">
+ <label for="filter"><%= t.pages.key.filter.label %></label>
+ <select id="filter" name="filter">
+ <option value="all"<%= @sel['all'] %>><%= t.pages.key.filter.none %></option>
+ <option value="nodes"<%= @sel['nodes'] %>><%= t.pages.key.filter.nodes %></option>
+ <option value="ways"<%= @sel['ways'] %>><%= t.pages.key.filter.ways %></option>
+ <option value="relations"<%= @sel['relations'] %>><%= t.pages.key.filter.relations %></option>
+ </select>
+ </form>
+ <h1><%= link_to_key(@key) %>=<%= @value_pp %></h1>
+ <p><%= @desc %></p>
</div>
-
<div id="tabs">
<ul>
<li><a href="#overview"><%= t.taginfo.overview %></a></li>
@@ -43,24 +39,27 @@
</div>
<div id="wiki">
<h2><%= t.pages.tag.wiki_pages.title %></h2>
- <table id="grid-wiki">
- </table>
+ <% if @wiki_count > 0 %>
+ <table id="grid-wiki">
+ </table>
+ <% else %>
+ <p><i><%= t.pages.tag.wiki_pages.none_found %>.</i></p>
+ <p>[<a href="http://wiki.openstreetmap.org/w/index.php?action=edit&title=Tag:<%= escape(@tag) %>">Create wiki page</a>]</p>
+ <% end %>
</div>
<div id="josm">
<h2><%= t.pages.key.josm_rules.title %></h2>
- <form>
+<!-- <form>
<label for="josm-style"><%= t.pages.tag.josm_rules.choice %></label>
<select id="josm-style" name="josm-style">
<option>Standard</option>
</select>
- </form>
+ </form>-->
<table id="grid-josm">
</table>
</div>
</div>
-
<iframe id="josmiframe" name="josmiframe"></iframe>
-
<% javascript do
JQuery.ready do
JS.raw(<<"JAVASCRIPT")
@@ -76,6 +75,7 @@ jQuery('#filter').bind('change', function() {
var tabs = jQuery('#tabs').tabs({
show: function(event, ui) {
+ resize_wrapper();
window.location.hash = ui.tab.hash;
create_flexigrid_for.tag[ui.tab.hash.substring(1)](#{ @key.to_json }, #{ @value.to_json }, #{ @filter_type.to_json });
}
diff --git a/web/views/tags.erb b/web/views/tags.erb
index 17d0a93..37c84e7 100644
--- a/web/views/tags.erb
+++ b/web/views/tags.erb
@@ -1,11 +1,14 @@
-<h1 style="text-transform: uppercase;"><%= t.osm.tags %></h1>
-
-<table id="grid-tags">
-</table>
-
+<div class="pre">
+ <h1 class="section"><%= t.osm.tags %></h1>
+ <%= t.pages.tags.intro %>
+</div>
+<div class="box resize">
+ <table id="grid-tags">
+ </table>
+</div>
<% javascript do
JQuery.ready do
- JS.raw(%Q{ create_flexigrid_for.tags.tags(); })
+ JS.raw(%Q{ resize_wrapper(); create_flexigrid_for.tags.tags(); })
end
end
%>
diff --git a/web/views/test/index.erb b/web/views/test/index.erb
index 7fb38d8..6dd7804 100644
--- a/web/views/test/index.erb
+++ b/web/views/test/index.erb
@@ -1,8 +1,17 @@
-<h1>Test</h1>
-
-<p>The test pages are for Taginfo development only.</p>
-
-<ul>
- <li><a href="/test/tags">Tags</a></li>
- <li><a href="/test/wiki_import">Wiki import</a></li>
-</ul>
+<div class="pre">
+ <h1 class="section">Test</h1>
+ <p>The test pages are for taginfo development only.</p>
+</div>
+<div class="box resize">
+ <h2>Test pages</h2>
+ <ul>
+ <li><a href="/test/tags">Tags</a></li>
+ <li><a href="/test/wiki_import">Wiki import</a></li>
+ </ul>
+</div>
+<% javascript do
+ JQuery.ready do
+ JS.raw(%Q{ resize_wrapper(); })
+ end
+end
+%>
diff --git a/web/views/test/key.erb b/web/views/test/key.erb
deleted file mode 100644
index 9a819ce..0000000
--- a/web/views/test/key.erb
+++ /dev/null
@@ -1,340 +0,0 @@
-<table id="overview">
-</table>
-
-<h1><%= @key_pp %></h1>
-
-<div class="source-wiki" title="Description from the wiki">
- <%= @desc %>
-</div>
-
-<div id="tools">
- <% if @count_all_values < 1000 %>
- [<%= xapi_link('*', @key) %>] [<%= josm_link('*', @key) %>]
- <% else %>
- <span title="Links disabled, because there are too many objects with this key">[XAPI] [JOSM]</span>
- <% end %>
-</div>
-
-<form id="filter-form">
- <label for="filter">Filter:</label>
- <select id="filter" name="filter">
- <option value="all"<%= @sel['all'] %>>No filter</option>
- <option value="nodes"<%= @sel['nodes'] %>>Nodes only</option>
- <option value="ways"<%= @sel['ways'] %>>Ways only</option>
- <option value="relations"<%= @sel['relations'] %>>Relations only</option>
- </select>
-</form>
-
-<div id="tabs">
- <ul>
- <li><a href="#tabs-values">Values</a></li>
- <li><a href="#tabs-keys">Other Keys</a></li>
- <li><a href="#tabs-map">Map</a></li>
- <li><a href="#tabs-wiki">Wiki</a></li>
- <li><a href="#tabs-josm">JOSM</a></li>
- </ul>
- <div id="tabs-values">
- <h2>Values used with this key</h2>
- <div class="canvas" id="canvas-values"></div>
- <div style="margin-left: 180px;">
- <table id="grid-values">
- </table>
- </div>
- </div>
- <div id="tabs-keys">
- <h2>Other keys used together with this key</h2>
- <table id="grid-keys">
- </table>
- <div class="canvas" id="canvas-keypairs"></div>
- </div>
- <div id="tabs-map">
- <h2>Geographical distribution of this key</h2>
- <p><i>Currently only tags on nodes are shown.</i></p>
- <div style="background-image: url(/img/worldp.png); background-repeat: no-repeat;"/><img src="/api/2/db/keys/distribution?key=<%= @key_uri %>" alt=""/></div>
- </div>
- <div id="tabs-wiki">
- <h2>Wiki pages about this key</h2>
- <table id="wiki-langs">
- </table>
- </div>
- <div id="tabs-josm">
- <h2>JOSM style rules with this key</h2>
- <form>
- <label for="josm-style">Choose style:</label>
- <select id="josm-style" name="josm-style">
- <option>Standard</option>
- </select>
- </form>
- <table id="grid-josm">
- </table>
- </div>
-</div>
-
-<iframe id="josmiframe" name="josmiframe"></iframe>
-
-<script type="text/javascript">
- jQuery(function() {
- jQuery('#josm').bind('click', function() {
- jQuery('#josmiframe')[0].src = jQuery('#josm')[0].href;
- return false;
- });
-
- jQuery('#filter').bind('change', function() {
- var value = this.value;
- window.location.search = 'filter=' + value;
- });
-
- var tabs = jQuery('#tabs').tabs();
-
- jQuery.getJSON('/api/2/db/keys/overview?key=<%= @key_uri %>', function(data, textStatus) {
- var table_content = '<tr><th></th><th title="Number of objects with this key">Number of objects</th><th class="values" title="Number of different values">Values</th></tr>';
- table_content += jQuery.map(['all', 'nodes', 'ways', 'relations'], function(obj, i) {
- var d = data[obj];
- return '<tr><td>' + print_image(obj) + '</td><td class="count">' + print_value_with_percent(d.count, d.count_fraction) + '</td><td class="values">' + print_with_ts(d.values) + '</td></tr>';
- }).join('');
- jQuery('#overview').append(table_content);
- });
-
- jQuery('#grid-values').flexigrid({
- url: '/api/2/db/keys/values?key=<%= @key_uri %>&filter=<%= @filter_type %>',
- method: 'GET',
- dataType: 'json',
- colModel: [
- { display: 'Count', name: 'count', width: 300, sortable: true, align: 'center' },
- { display: 'Value', name: 'value', width: 500, sortable: true, align: 'left' }
- ],
- searchitems: [
- { display: 'Value', name: 'value' }
- ],
- sortname: 'count',
- sortorder: 'desc',
- showToggleBtn: false,
- showTableToggleBtn: false,
- usepager: true,
- useRp: true,
- rpOptions: [10,15,20,25,50,100],
- rp: 15,
- height: 410,
- preProcess: function(data) {
- data.rows = jQuery.map(data.data, function(row, i) {
- return { 'cell': [
- print_value_with_percent(row.count, row.fraction),
- link_to_value(<%= @key_json %>, row.value)
- ] };
- });
- delete data.data;
- return data;
- }
- });
-
- jQuery('#grid-keys').flexigrid({
- url: '/api/2/db/keys/keys?key=<%= @key_uri %>&filter=<%= @filter_type %>',
- method: 'GET',
- dataType: 'json',
- colModel: [
- { display: '<span title="Number of objects with this key that also have the other key">Count &rarr;</span>', name: 'to_count', width: 320, sortable: true, align: 'center' },
- { display: '<span title="Key used together with this key">Other key</span>', name: 'other_key', width: 340, sortable: true, align: 'left' },
- { display: '<span title="Number of objects with other key that also have this key">&rarr; Count</span>', name: 'from_count', width: 320, sortable: true, align: 'center' }
- ],
-/* searchitems: [
- { display: 'Other Key', name: 'other_key' }
- ],*/
- sortname: 'to_count',
- sortorder: 'desc',
- showToggleBtn: false,
- showTableToggleBtn: false,
- usepager: true,
- useRp: true,
- rpOptions: [10,15,20,25,50,100],
- rp: 15,
- height: 410,
- preProcess: function(data) {
- data.rows = jQuery.map(data.data, function(row, i) {
- return { 'cell': [
- print_value_with_percent(row.together_count, row.to_fraction),
- link_to_key(row.other_key),
- print_value_with_percent(row.together_count, row.from_fraction),
- ] };
- });
- return data;
- }
- });
-
- jQuery('#grid-josm').flexigrid({
- url: '/api/2/josm/styles/standard/keys?key=<%= @key_uri %>',
- method: 'GET',
- dataType: 'json',
- colModel: [
- { display: 'Value', name: 'v', width: 200, sortable: true, align: 'left' },
- { display: 'Scale min', name: 'scale_min', width: 80, sortable: true, align: 'right' },
- { display: 'Scale max', name: 'scale_max', width: 80, sortable: true, align: 'right' },
- { display: 'Rule XML', name: 'rule', width: 100, sortable: false, align: 'left' }
- ],
- searchitems: [
- { display: 'Value', name: 'v' }
- ],
- sortname: 'v',
- sortorder: 'asc',
- showToggleBtn: false,
- showTableToggleBtn: false,
- usepager: true,
- useRp: true,
- rpOptions: [10,15,20,25,50,100],
- rp: 15,
- height: 410,
- preProcess: function(data) {
- data.rows = jQuery.map(data.data, function(row, i) {
- return { 'cell': [
- row.v ? link_to_value(row.k, row.v) : row.b ? (row.b + ' (Boolean)') : '*',
- print_with_ts(row.scale_min),
- print_with_ts(row.scale_max),
- '<span title="' + row.rule + '">XML</span>'
- ] };
- });
- return data;
- }
- });
-
- jQuery('#wiki-langs').flexigrid({
- url: '/api/2/wiki/keys?key=<%= @key_uri %>',
- method: 'GET',
- dataType: 'json',
- colModel: [
- { display: 'Language', name: 'lang', width: 150, sortable: false },
- { display: 'Wikipage', name: 'title', width: 160, sortable: false, align: 'right' },
- { display: 'Description', name: 'description', width: 400, sortable: false },
- { display: 'Image', name: 'image', width: 120, sortable: false },
- { display: 'Objects', name: 'objects', width: 80, sortable: false },
- { display: 'Implied Tags', name: 'tags_implied', width: 120, sortable: false },
- { display: 'Combined Tags', name: 'tags_combination', width: 120, sortable: false },
- { display: 'Linked Tags', name: 'tags_linked', width: 220, sortable: false }
- ],
- showToggleBtn: false,
- showTableToggleBtn: false,
- usepager: false,
- useRp: false,
- rpOptions: [10,15,20,25,50,100],
- height: 400,
- preProcess: function(data) {
- return {
- total: data.size,
- page: 1,
- rows: jQuery.map(data, function(row, i) {
- return { 'cell': [
- print_language(row.lang, row.language),
- print_wiki_link(row.title),
- row.description,
- row.image == null ? '<i>no image</i>' : print_wiki_link(row.image),
- (row.on_node ? '<img src="/img/types/node.16.png" alt="yes"/>' : '<img src="/img/types/none.16.png" alt="no"/>') + ' ' +
- (row.on_way ? '<img src="/img/types/way.16.png" alt="yes"/>' : '<img src="/img/types/none.16.png" alt="no"/>') + ' ' +
- (row.on_area ? '<img src="/img/types/area.16.png" alt="yes"/>' : '<img src="/img/types/none.16.png" alt="no"/>') + ' ' +
- (row.on_relation ? '<img src="/img/types/relation.16.png" alt="yes"/>' : '<img src="/img/types/none.16.png" alt="no"/>'),
- print_key_or_tag_list(row.tags_implies),
- print_key_or_tag_list(row.tags_combination),
- print_key_or_tag_list(row.tags_linked)
- ]};
- })
- };
- }
- });
- });
-</script>
-<script type="text/javascript+protovis">
-
-var data = <%= @prevalent_values.to_json() %>;
-
-var w=160, h=440;
-
-var vis = new pv.Panel()
- .canvas('canvas-values')
- .width(w)
- .height(h + 20);
-
-var scale = pv.Scale.linear(0, <%= @count_all_values %>).range(0, h);
-
-vis.add(pv.Layout.Stack)
- .bottom(10)
- .layers(data)
- .x(10)
- .y(function(d) scale(d.count))
- .layer.add(pv.Bar)
- .width(20)
- .anchor('left')
- .add(pv.Label)
- .left(30)
- .text(function(d) d.value);
-
-vis.render();
-
-// =======
-
-jQuery.getJSON('/api/2/db/keys/keys?key=<%= @key_uri %>&filter=<%= @filter_type %>&page=1&rp=100&sortname=to_count&sortorder=desc', function(jsonData, textStatus) {
-
- var data = jsonData.data;
- jQuery.getJSON('/api/2/db/keys/keys?key=<%= @key_uri %>&filter=<%= @filter_type %>&page=1&rp=100&sortname=from_count&sortorder=desc', function(jsonData_rev, textStatus) {
-
- data = data.concat(jsonData_rev.data);
-/* var l = jsonData_rev.data.length;
- for(var i=0; i<l; i++) {
- data.push({
- from_fraction: jsonData_rev.data[i].to_fraction,
- to_fraction: jsonData_rev.data[i].from_fraction,
- together_count: jsonData_rev.data[i].together_count,
- other_key: jsonData_rev.data[i].other_key
- });
- }*/
-
- var w=600, h=600;
-
- var x = pv.Scale.linear(0, 1).range(0, w),
- y = pv.Scale.linear(0, 1).range(0, h),
- c = pv.Scale.log(10000, 20000000).range("orange", "brown"),
- s = pv.Scale.log(10000, 20000000).range(1, 100);
-
- var vis_keypairs = new pv.Panel()
- .canvas('canvas-keypairs')
- .width(w)
- .height(h)
- .bottom(20)
- .left(20)
- .right(10)
- .top(5);
-
- /* Y-axis and ticks. */
- vis_keypairs.add(pv.Rule)
- .data(y.ticks())
- .bottom(y)
- .strokeStyle(function(d) d ? "#eee" : "#000")
- .anchor("left").add(pv.Label)
- .visible(function(d) d > 0 && d < 1)
- .text(y.tickFormat);
-
- /* X-axis and ticks. */
- vis_keypairs.add(pv.Rule)
- .data(x.ticks())
- .left(x)
- .strokeStyle(function(d) d ? "#eee" : "#000")
- .anchor("bottom").add(pv.Label)
- .visible(function(d) d > 0 && d < 1)
- .text(x.tickFormat);
-
- /* The dot plot! */
- vis_keypairs.add(pv.Panel)
- .data(data)
- .add(pv.Dot)
- .left(function(d) x(d.from_fraction))
- .bottom(function(d) y(d.to_fraction))
-// .strokeStyle(function(d) c(d.together_count))
- .strokeStyle('brown')
- .fillStyle(function() this.strokeStyle())
-// .fillStyle(function() this.strokeStyle().alpha(.2))
-// .size(function(d) s(d.together_count))
- .size(8)
-// .visible(function(d) d.from_fraction > 0.1 && d.to_fraction > 0.1)
- .title(function(d) d.other_key);
-
- vis_keypairs.render();
- });
-});
-
-</script>
diff --git a/web/views/test/wiki_import.erb b/web/views/test/wiki_import.erb
index 33b9b1e..f061b2f 100644
--- a/web/views/test/wiki_import.erb
+++ b/web/views/test/wiki_import.erb
@@ -1,10 +1,13 @@
-<h1>Wiki Import</h1>
-
-<table>
- <% @invalid_page_titles.each do |row| %>
- <tr>
- <td><%= row['reason'] %></td>
- <td><%= row['title'] %></td>
- </tr>
- <% end %>
-</table>
+<div class="pre">
+ <h1 class="section">Wiki Import</h1>
+</div>
+<div class="box">
+ <table>
+ <% @invalid_page_titles.each do |row| %>
+ <tr>
+ <td><%= row['reason'] %></td>
+ <td><%= row['title'] %></td>
+ </tr>
+ <% end %>
+ </table>
+</div>