Add about page
BIN
app/assets/images/about/0.jpg
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
app/assets/images/about/1.jpg
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
app/assets/images/about/2.jpg
Normal file
After Width: | Height: | Size: 196 KiB |
BIN
app/assets/images/about/3.jpg
Normal file
After Width: | Height: | Size: 270 KiB |
BIN
app/assets/images/about/4.jpg
Normal file
After Width: | Height: | Size: 195 KiB |
BIN
app/assets/images/about/5.jpg
Normal file
After Width: | Height: | Size: 200 KiB |
BIN
app/assets/images/about/osm.png
Normal file
After Width: | Height: | Size: 171 KiB |
BIN
app/assets/images/about/sprite.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
app/assets/images/about/sprite@2x.png
Normal file
After Width: | Height: | Size: 22 KiB |
20
app/assets/javascripts/about.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
(function () {
|
||||||
|
var num = Math.floor(Math.random() * 6);
|
||||||
|
|
||||||
|
// Background image
|
||||||
|
if (window.location.hash) {
|
||||||
|
var h = window.location.hash.match(/#(.*)/);
|
||||||
|
if (!isNaN(parseInt(h[1], 10))) num = h[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#content').attr('class', 'photo-' + num);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '#next-photo', function () {
|
||||||
|
num = (num + 1) % 6;
|
||||||
|
$('#content').attr('class', 'photo-' + num);
|
||||||
|
window.location.hash = num;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
})();
|
|
@ -2347,3 +2347,142 @@ a.button {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.site-about #content {
|
||||||
|
background-color: #000;
|
||||||
|
background-position: 50% 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
background-attachment: fixed;
|
||||||
|
|
||||||
|
&.photo-0 { background-image: image-url('about/0.jpg'); .photo-0 { display: block; } }
|
||||||
|
&.photo-1 { background-image: image-url('about/1.jpg'); .photo-1 { display: block; } }
|
||||||
|
&.photo-2 { background-image: image-url('about/2.jpg'); .photo-2 { display: block; } }
|
||||||
|
&.photo-3 { background-image: image-url('about/4.jpg'); .photo-3 { display: block; } }
|
||||||
|
&.photo-4 { background-image: image-url('about/4.jpg'); .photo-4 { display: block; } }
|
||||||
|
&.photo-5 { background-image: image-url('about/5.jpg'); .photo-5 { display: block; } }
|
||||||
|
|
||||||
|
.caption {
|
||||||
|
max-width: 200px;
|
||||||
|
font: italic 14px/20px 'Times New Roman', serif;
|
||||||
|
position: fixed;
|
||||||
|
text-align: right;
|
||||||
|
right: 20px;
|
||||||
|
bottom: 60px;
|
||||||
|
text-shadow: #000 0px 1px 5px;
|
||||||
|
color: #fff;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.caption a {
|
||||||
|
color: white;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.next {
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 10px;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-indent: -9999px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: image-url('about/sprite.png') -120px 0px no-repeat;
|
||||||
|
background-color: #000;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-body {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
margin: auto;
|
||||||
|
color: #333;
|
||||||
|
width: 50%;
|
||||||
|
min-width: 320px;
|
||||||
|
max-width: 640px;
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
background: white;
|
||||||
|
padding: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attr {
|
||||||
|
position: relative;
|
||||||
|
padding: 170px 20px 20px 20px;
|
||||||
|
background: #333;
|
||||||
|
background: rgba(0, 0, 0, .8);
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
strong {
|
||||||
|
display: block;
|
||||||
|
color: white;
|
||||||
|
font-size: 25px;
|
||||||
|
span {
|
||||||
|
color: #76c551;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-image {
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
right: 240px;
|
||||||
|
left: 0px;
|
||||||
|
height: 150px;
|
||||||
|
background-position: 0 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: image-url('about/osm.png');
|
||||||
|
background-size: cover;
|
||||||
|
background-color: #76c551;
|
||||||
|
}
|
||||||
|
|
||||||
|
.byosm {
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
right: 0px;
|
||||||
|
z-index: 1;
|
||||||
|
width: 240px;
|
||||||
|
height: 150px;
|
||||||
|
padding: 20px 20px 20px 40px;
|
||||||
|
font: bold 24px/25px Helvetica, Arial, sans-serif;
|
||||||
|
white-space: nowrap;
|
||||||
|
color: #fff;
|
||||||
|
background: #76c551
|
||||||
|
}
|
||||||
|
|
||||||
|
.byosm span {
|
||||||
|
display: inline-block;
|
||||||
|
width: 25px;
|
||||||
|
margin-left: -25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
background: 40px 40px image-url('about/sprite.png') no-repeat;
|
||||||
|
|
||||||
|
&.local { background-position: 0px 0px; }
|
||||||
|
&.community { background-position: 0px -40px; }
|
||||||
|
&.open { background-position: 0px -80px; }
|
||||||
|
&.contributors { background-position: 0px -120px; }
|
||||||
|
&.infringement { background-position: 0px -160px; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -74,6 +74,9 @@ class SiteController < ApplicationController
|
||||||
def help
|
def help
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def about
|
||||||
|
end
|
||||||
|
|
||||||
def preview
|
def preview
|
||||||
render :text => RichText.new(params[:format], params[:text]).to_html
|
render :text => RichText.new(params[:format], params[:text]).to_html
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<li><%= link_to t('layouts.gps_traces'), traces_path %></li>
|
<li><%= link_to t('layouts.gps_traces'), traces_path %></li>
|
||||||
<li><%= link_to t('layouts.user_diaries'), diary_path %></li>
|
<li><%= link_to t('layouts.user_diaries'), diary_path %></li>
|
||||||
<li><%= link_to t('layouts.help'), help_path %></li>
|
<li><%= link_to t('layouts.help'), help_path %></li>
|
||||||
<li><%= link_to t('layouts.about'), '#' %></li>
|
<li><%= link_to t('layouts.about'), about_path %></li>
|
||||||
</ul>
|
</ul>
|
||||||
<% if @user %>
|
<% if @user %>
|
||||||
<%= render :partial => "layouts/user_menu" %>
|
<%= render :partial => "layouts/user_menu" %>
|
||||||
|
|
43
app/views/site/about.html.erb
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<% content_for :head do %>
|
||||||
|
<%= javascript_include_tag "about" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div id='content-body'>
|
||||||
|
<div class='attr'>
|
||||||
|
<div class='byosm'>
|
||||||
|
<%= t "about_page.copyright_html" %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='user-image'></div>
|
||||||
|
|
||||||
|
<strong>
|
||||||
|
<%= raw t "about_page.used_by", :name => "<span class='user-name'>OpenStreetMap</span>" %>
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='text'>
|
||||||
|
<div class='section'>
|
||||||
|
<p><strong><%= t "about_page.lede_text" %></strong></p>
|
||||||
|
<h2><div class='icon local'></div><%= t "about_page.local_knowledge_title" %></h2>
|
||||||
|
<p><%= t "about_page.local_knowledge_html" %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='section'>
|
||||||
|
<h2><div class='icon community'></div><%= t "about_page.community_driven_title" %></h2>
|
||||||
|
<p><%= t "about_page.community_driven_html", :diary_path => diary_path %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='section' id='open-data'>
|
||||||
|
<h2><div class='icon open'></div><%= t "about_page.open_data_title" %></h2>
|
||||||
|
<p><%= t "about_page.open_data_html", :copyright_path => copyright_path %></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% 5.times do |i| %>
|
||||||
|
<div class='caption photo-<%= i %>'>
|
||||||
|
<%= t "about_page.photo_caption_#{i}_html" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<a class='next' id='next-photo' href='#'><%= t "about_page.next" %></a>
|
|
@ -1190,6 +1190,53 @@ en:
|
||||||
url: http://wiki.openstreetmap.org/
|
url: http://wiki.openstreetmap.org/
|
||||||
title: wiki.openstreetmap.org
|
title: wiki.openstreetmap.org
|
||||||
description: Browse the wiki for in-depth OSM documentation.
|
description: Browse the wiki for in-depth OSM documentation.
|
||||||
|
about_page:
|
||||||
|
next: Next
|
||||||
|
copyright_html: <span>©</span>OpenStreetMap<br>contributors
|
||||||
|
used_by: "%{name} powers map data on hundreds of web sites, mobile apps, and hardware devices"
|
||||||
|
lede_text: |
|
||||||
|
OSM is built by a community of local mappers that keeps data about
|
||||||
|
roads, cafés, subway stations, and much more up to date every day.
|
||||||
|
local_knowledge_title: Local Knowledge
|
||||||
|
local_knowledge_html: |
|
||||||
|
OpenStreetMap emphasizes local knowledge. Contributors use
|
||||||
|
aerial imagery, GPS devices, and low-tech field maps to verify that OSM
|
||||||
|
is up to date and accurate.
|
||||||
|
community_driven_title: Community Driven
|
||||||
|
community_driven_html: |
|
||||||
|
From the engineers that tune OSM's servers to the Humanitarian OSM Team
|
||||||
|
that maps disaster-affected areas, OSM's community is diverse,
|
||||||
|
passionate, and growing every day. To learn more about the community,
|
||||||
|
see the <a href='%{diary_path}'>user diaries</a>,
|
||||||
|
<a href='http://blogs.openstreetmap.org/'>community blogs</a>, and
|
||||||
|
the <a href='http://www.osmfoundation.org/'>OSM Foundation</a> website.
|
||||||
|
open_data_title: Open Data
|
||||||
|
open_data_html: |
|
||||||
|
OpenStreetMap is <i>open data</i>: you are free to use it for any purpose
|
||||||
|
as long as you credit OpenStreetMap and its contributors. If you alter or
|
||||||
|
build upon the data in certain ways, you may distribute the result only
|
||||||
|
under the same licence. See the <a href='%{copyright_path}'>Copyright and
|
||||||
|
License page</a> for details.
|
||||||
|
photo_caption_0_html: |
|
||||||
|
<a href='https://twitter.com/mikel'>@mikel</a> working on
|
||||||
|
<a href='http://mapkibera.org/'>Map Kibera</a>, a project to map the
|
||||||
|
largest slum in Nairobi, Kenya.
|
||||||
|
<a href='http://www.flickr.com/photos/watato/4564778295'>© watato
|
||||||
|
2010</a>
|
||||||
|
photo_caption_1_html: |
|
||||||
|
<a href='https://twitter.com/lxbarth'>@lxbarth</a> and
|
||||||
|
<a href='https://twitter.com/limareis'>@limareis</a> survey Brasilia with
|
||||||
|
walking papers.
|
||||||
|
<a href='http://www.flickr.com/photos/mapbox/7104560119'>© mapbox
|
||||||
|
2012</a>
|
||||||
|
photo_caption_2_html: |
|
||||||
|
@TODO caption (<a href='http://www.flickr.com/photos/oddwick/4775001075'>source</a>)
|
||||||
|
photo_caption_3_html: |
|
||||||
|
@TODO caption (<a href='http://www.flickr.com/photos/28698126@N02/3012439281'>source</a>)
|
||||||
|
photo_caption_4_html: |
|
||||||
|
@TODO caption (<a href='http://www.flickr.com/photos/louis_liu/4875155429/'>source</a>)
|
||||||
|
photo_caption_5_html: |
|
||||||
|
@TODO caption (<a href='http://www.flickr.com/photos/kachkaev/5793019627'>source</a>)
|
||||||
notifier:
|
notifier:
|
||||||
diary_comment_notification:
|
diary_comment_notification:
|
||||||
subject: "[OpenStreetMap] %{user} commented on your diary entry"
|
subject: "[OpenStreetMap] %{user} commented on your diary entry"
|
||||||
|
|
|
@ -127,6 +127,7 @@ OpenStreetMap::Application.routes.draw do
|
||||||
match '/copyright' => 'site#copyright', :via => :get
|
match '/copyright' => 'site#copyright', :via => :get
|
||||||
match '/welcome' => 'site#welcome', :via => :get, :as => :welcome
|
match '/welcome' => 'site#welcome', :via => :get, :as => :welcome
|
||||||
match '/help' => 'site#help', :via => :get, :as => :help
|
match '/help' => 'site#help', :via => :get, :as => :help
|
||||||
|
match '/about' => 'site#about', :via => :get, :as => :about
|
||||||
match '/history' => 'changeset#list', :via => :get
|
match '/history' => 'changeset#list', :via => :get
|
||||||
match '/history/feed' => 'changeset#feed', :via => :get, :defaults => { :format => :atom }
|
match '/history/feed' => 'changeset#feed', :via => :get, :defaults => { :format => :atom }
|
||||||
match '/export' => 'site#export', :via => :get
|
match '/export' => 'site#export', :via => :get
|
||||||
|
|