diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c7c6c4add..1605e1133 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -249,18 +249,18 @@ class ApplicationController < ActionController::Base options = actions.extract_options! cache_path = options[:cache_path] || Hash.new + options[:unless] = case options[:unless] + when NilClass then Array.new + when Array then options[:unless] + else unlessp = [ options[:unless] ] + end + + options[:unless].push(Proc.new do |controller| + controller.params.include?(:page) + end) + options[:cache_path] = Proc.new do |controller| - user = controller.instance_variable_get("@user") - - case - when user.nil? then user = :none - when user.display_name == controller.params[:display_name] then user = :self - when user.administrator? then user = :administrator - when user.moderator? then user = :moderator - else user = :other - end - - cache_path.merge(controller.params).merge(:locale => I18n.locale, :user => user) + cache_path.merge(controller.params).merge(:locale => I18n.locale) end actions.push(options) @@ -271,8 +271,9 @@ class ApplicationController < ActionController::Base ## # extend expire_action to expire all variants def expire_action(options = {}) - path = ActionCachePath.path_for(self, options, false).gsub('?', '.').gsub(':', '.') - expire_fragment(Regexp.new(Regexp.escape(path) + "\\..*")) + I18n.available_locales.each do |locale| + super options.merge(:locale => locale) + end end ## diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index c51f54c5e..abd59aeb2 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -15,18 +15,17 @@ class TraceController < ApplicationController before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_data, :api_create] around_filter :api_call_handle_error, :only => [:api_details, :api_data, :api_create] - caches_action :list, :unless => :logged_in?, :layout => false - caches_action :view, :layout => false + caches_action :list, :view, :layout => false caches_action :georss, :layout => true cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => OSM_STATUS == :database_offline cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => OSM_STATUS == :database_offline # Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.). # target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces - def list(target_user = nil, action = "list") + def list # from display name, pick up user id if one user's traces only display_name = params[:display_name] - if target_user.nil? and !display_name.blank? + if !display_name.blank? target_user = User.find(:first, :conditions => { :status => ["active", "confirmed"], :display_name => display_name }) if target_user.nil? @title = t'trace.no_such_user.title' @@ -103,7 +102,7 @@ class TraceController < ApplicationController end # final helper vars for view - @action = action + @target_user = target_user @display_name = target_user.display_name if target_user @all_tags = tagset.values @trace = Trace.new(:visibility => default_visibility) if @user @@ -143,6 +142,10 @@ class TraceController < ApplicationController logger.info("id is #{@trace.id}") flash[:notice] = t 'trace.create.trace_uploaded' + if @user.traces.count(:conditions => { :inserted => false }) > 4 + flash[:warning] = t 'trace.trace_header.traces_waiting', :count => @user.traces.count(:conditions => { :inserted => false }) + end + redirect_to :action => 'mine' end else diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5fa021bcf..2ccfcca2b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -40,14 +40,53 @@ module ApplicationHelper return js end + def style_rules + css = "" + + css << ".hidden { display: none }"; + css << ".hide_unless_logged_in { display: none }" unless @user; + css << ".hide_if_logged_in { display: none }" if @user; + css << ".hide_if_user_#{@user.id} { display: none }" if @user; + css << ".show_if_user_#{@user.id} { display: inline }" if @user; + css << ".hide_unless_administrator { display: none }" unless @user and @user.administrator?; + + return content_tag(:style, css) + end + + def if_logged_in(tag = :div, &block) + concat(content_tag(tag, capture(&block), :class => "hide_unless_logged_in")) + end + + def if_not_logged_in(tag = :div, &block) + concat(content_tag(tag, capture(&block), :class => "hide_if_logged_in")) + end + + def if_user(user, tag = :div, &block) + if user + concat(content_tag(tag, capture(&block), :class => "hidden show_if_user_#{user.id}")) + end + end + + def unless_user(user, tag = :div, &block) + if user + concat(content_tag(tag, capture(&block), :class => "hide_if_user_#{user.id}")) + else + concat(content_tag(tag, capture(&block))) + end + end + + def if_administrator(tag = :div, &block) + concat(content_tag(tag, capture(&block), :class => "hide_unless_administrator")) + end + def describe_location(lat, lon, zoom = nil, language = nil) zoom = zoom || 14 language = language || request.user_preferred_languages.join(',') url = "http://nominatim.openstreetmap.org/reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{language}" begin - Timeout::timeout(4) do - response = REXML::Document.new(Net::HTTP.get(URI.parse(url))) + response = Timeout::timeout(4) do + REXML::Document.new(Net::HTTP.get(URI.parse(url))) end rescue Exception response = nil diff --git a/app/models/notifier.rb b/app/models/notifier.rb index de0ad21d6..364463336 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -48,7 +48,7 @@ class Notifier < ActionMailer::Base def message_notification(message) common_headers message.recipient from_header message.sender.display_name, "m", message.id, message.digest - subject message.title + subject I18n.t('notifier.message_notification.subject_header', :subject => message.title, :locale => locale) body :to_user => message.recipient.display_name, :from_user => message.sender.display_name, :body => message.body, diff --git a/app/models/user.rb b/app/models/user.rb index f99ad3b40..d5b75d073 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -29,6 +29,8 @@ class User < ActiveRecord::Base validates_email_format_of :email validates_email_format_of :new_email, :allow_blank => true validates_format_of :display_name, :with => /^[^\/;.,?]*$/ + validates_format_of :display_name, :with => /^\S/, :message => "has leading whitespace" + validates_format_of :display_name, :with => /\S$/, :message => "has trailing whitespace" validates_numericality_of :home_lat, :allow_nil => true validates_numericality_of :home_lon, :allow_nil => true validates_numericality_of :home_zoom, :only_integer => true, :allow_nil => true diff --git a/app/views/diary_entry/_diary_comment.html.erb b/app/views/diary_entry/_diary_comment.html.erb index 77238b4d3..a0e75ecce 100644 --- a/app/views/diary_entry/_diary_comment.html.erb +++ b/app/views/diary_entry/_diary_comment.html.erb @@ -1,7 +1,7 @@ <%= user_thumbnail diary_comment.user, :style => "float: right" %>
<%= t'trace.trace_header.traces_waiting', :count => @user.traces.count(:conditions => ["inserted=?", false]) %>
-<% end %> - -<% form_for :trace, @trace, :url => { :action => "create" }, :html => { :multipart => true } do |f| %> -<%= t'trace.trace_form.upload_gpx' %> | <%= f.file_field :gpx_file, :size => 50, :maxlength => 255 %> |
<%= t'trace.trace_form.description' %> | <%= f.text_field :description, :size => 50, :maxlength => 255 %> |
<%= t'trace.trace_form.tags' %> | <%= f.text_field :tagstring, :size => 50, :maxlength => 255 %> (<%= t'trace.trace_form.tags_help' %>) |
<%= t'trace.trace_form.visibility' %> | <%= f.select :visibility, [[t('trace.visibility.private'),"private"],[t('trace.visibility.public'),"public"],[t('trace.visibility.trackable'),"trackable"],[t('trace.visibility.identifiable'),"identifiable"]] %> (<%= t'trace.trace_form.visibility_help' %>) |
<%= submit_tag t('trace.trace_form.upload_button') %> | <%= t'trace.trace_form.help' %> |
- <%= rss_link_to :action => 'georss', :display_name => @display_name, :tag => @tag %> - <% if @user.nil? or @display_name.nil? or @user.display_name != @display_name %> - | <%= link_to t('trace.trace_header.see_just_your_traces'), :action => 'mine' %> - <% end %> - <% if @tag or @display_name %> - | <%= link_to t('trace.trace_header.see_all_traces'), :controller => 'trace', :action => 'list' %> - <% end %> - <% if @tag and @user and @user.display_name == @display_name %> - | <%= link_to t('trace.trace_header.see_your_traces'), :controller => 'trace', :action => 'mine' %> - <% end %> -
diff --git a/app/views/trace/_trace_list.html.erb b/app/views/trace/_trace_list.html.erb deleted file mode 100644 index 968fd85be..000000000 --- a/app/views/trace/_trace_list.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= render :partial => 'trace_paging_nav' %> - -- | - |
---|
<%= t'trace.trace_form.upload_gpx' %> | <%= f.file_field :gpx_file, :size => 50, :maxlength => 255 %> |
<%= t'trace.trace_form.description' %> | <%= f.text_field :description, :size => 50, :maxlength => 255 %> |
<%= t'trace.trace_form.tags' %> | <%= f.text_field :tagstring, :size => 50, :maxlength => 255 %> (<%= t'trace.trace_form.tags_help' %>) |
<%= t'trace.trace_form.visibility' %> | <%= f.select :visibility, [[t('trace.visibility.private'),"private"],[t('trace.visibility.public'),"public"],[t('trace.visibility.trackable'),"trackable"],[t('trace.visibility.identifiable'),"identifiable"]] %> (<%= t'trace.trace_form.visibility_help' %>) |
<%= submit_tag t('trace.trace_form.upload_button') %> | <%= t'trace.trace_form.help' %> |
+ <%= rss_link_to :action => 'georss', :display_name => @display_name, :tag => @tag %> + <% unless_user(@target_user, :span) do %> + | <%= link_to t('trace.trace_header.your_traces'), :action => 'mine' %> + <% end %> + | <%= link_to t('trace.trace_header.upload_trace'), :action => 'create' %> + <% if @tag %> + <% if @display_name %> + | <%= link_to t('trace.trace_header.see_all_traces'), :controller => 'trace', :action => 'list' %> + <% end %> + <% if_user(@target_user, :span) do %> + | <%= link_to t('trace.trace_header.see_your_traces'), :controller => 'trace', :action => 'mine' %> + <% end %> + <% end %> +
+ +<%= render :partial => 'trace_paging_nav' %> + ++ | + |
---|
<%= button_to t('trace.view.edit_track'), :controller => 'trace', :action => 'edit', :id => @trace.id %> | - <% end %> - <% if @trace.user == @user %> -<%= button_to t('trace.view.delete_track'), :controller => 'trace', :action => 'delete', :id => @trace.id %> | - <% end %> -
<%= button_to t('trace.view.edit_track'), :controller => 'trace', :action => 'edit', :id => @trace.id %> | +<%= button_to t('trace.view.delete_track'), :controller => 'trace', :action => 'delete', :id => @trace.id %> | +
\n OpenStreetMap има отворени податоци, лиценциран е под Криејтив\n Комонс Наведи извор-Сподели под исти услови 2.0 (CC-BY-SA).\n
\n\n Слободно можете да ги копирате, дистрибуирате, јавно прикажувате и адаптирате нашите карти\n и податоци, под услов да го наведете OpenStreetMap и неговите\n учесници. Ако ги менувате или темелите дела врз нашите карти и податоци\n резултатите можете да ги дистрибуирате само под истата лиценца.\n Во полниот законски\n правилник се објаснети вашите права и должности.\n
\n\n\n Доколку користите слики од карти на OpenStreetMap, бараме\n наводот да содржи барем “© Учесници на\n OpenStreetMap, CC-BY-SA”. Ако користите само податоци од картите,\n бараме наводот да гласи “Картографски податоци © Учесници на OpenStreetMap,\n CC-BY-SA”.\n
\n\n Кадешто е можно, OpenStreetMap треба да има хиперврска http://www.openstreetmap.org/\n и CC-BY-SA до http://creativecommons.org/licenses/by-sa/2.0/deed.mk. Доколку\n користите медиум кадешто не може да се ставаат врски (како на пр.\n печатено издание), ви препорачуваме да ги наведете корисниците на\n www.openstreetmap.org (на пр. со проширување на\n ‘OpenStreetMap’ со полнава адреса) и до\n www.creativecommons.org.\n
\n\n\n Прочитајте повеќе за користењето на нашите податоци на Правните\n ЧПП.\n
\n\n Учесниците во OSM се потсетуваат никогаш да не ставаат податоци од\n извори заштитени со авторски права (на пр. Google Карти или печатени карти) без\n јасна дозвола од имателите на авторските права.\n
\n\n Иако OpenStreetMap има отворени податоци, ние сепак не можеме бесплатно да \n го нудиме картографскиот програм на развивачи кои се трети лица.\n\n Погледајте ги нашите Правила на користење на програмот,\n Правила на користење на полињата\n и Правила на користење на Nominatim.\n
\n\n\n Нашата лиценца CC-BY-SA бара да “го наведете изворниот\n автор разумно за медиумот или средството што го\n користите”. Поединечните картографи на OSM не бараат да\n бидат наведувани посебно, туку само како “Учесници на\n OpenStreetMap”, но онаму кадешто OpenStreetMap содржи податоци\n од некоја државна картографска установа или друг важен извор,\n веројатно би било разумно да ги наведете нив директно,\n наведувајќи ги како што тие обично се наведуваат, или ставајќи врска до нивната страница.\n
\n\n\n\n\n Поставањето на податоци во OpenStreetMap не подразбира дека изворниот \n добавувач на податоци го поддржува и застапува OpenStreetMap, дека дава било каква гаранција, или пак\n дека прифаќа било каква одговорност.\n
" + legal_babble: "\n OpenStreetMap има отворени податоци, лиценциран е под Creative\n Commons Наведи извор-Сподели под исти услови 2.0 (CC-BY-SA).\n
\n\n Слободно можете да ги копирате, дистрибуирате, јавно прикажувате и адаптирате нашите карти\n и податоци, под услов да го наведете OpenStreetMap и неговите\n учесници. Ако ги менувате или темелите дела врз нашите карти и податоци\n резултатите можете да ги дистрибуирате само под истата лиценца.\n Во полниот законски\n правилник се објаснети вашите права и должности.\n
\n\n\n Доколку користите слики од карти на OpenStreetMap, бараме\n наводот да содржи барем “© Учесници на\n OpenStreetMap, CC-BY-SA”. Ако користите само податоци од картите,\n бараме наводот да гласи “Картографски податоци © Учесници на OpenStreetMap,\n CC-BY-SA”.\n
\n\n Кадешто е можно, OpenStreetMap треба да има хиперврска http://www.openstreetmap.org/\n и CC-BY-SA до http://creativecommons.org/licenses/by-sa/2.0/deed.mk. Доколку\n користите медиум кадешто не може да се ставаат врски (како на пр.\n печатено издание), ви препорачуваме да ги наведете корисниците на\n www.openstreetmap.org (на пр. со проширување на\n ‘OpenStreetMap’ со полнава адреса) и до\n www.creativecommons.org.\n
\n\n\n Прочитајте повеќе за користењето на нашите податоци на Правните\n ЧПП.\n
\n\n Учесниците во OSM се потсетуваат никогаш да не ставаат податоци од\n извори заштитени со авторски права (на пр. Google Карти или печатени карти) без\n јасна дозвола од имателите на авторските права.\n
\n\n Иако OpenStreetMap има отворени податоци, ние сепак не можеме бесплатно да \n го нудиме картографскиот програм на развивачи кои се трети лица.\n\n Погледајте ги нашите Правила на користење на програмот,\n Правила на користење на полињата\n и Правила на користење на Nominatim.\n
\n\n\n Нашата лиценца CC-BY-SA бара да “го наведете изворниот\n автор разумно за медиумот или средството што го\n користите”. Поединечните картографи на OSM не бараат да\n бидат наведувани посебно, туку само како “Учесници на\n OpenStreetMap”, но онаму кадешто OpenStreetMap содржи податоци\n од некоја државна картографска установа или друг важен извор,\n веројатно би било разумно да ги наведете нив директно,\n наведувајќи ги како што тие обично се наведуваат, или ставајќи врска до нивната страница.\n
\n\n\n\n\n Поставањето на податоци во OpenStreetMap не подразбира дека изворниот \n добавувач на податоци го поддржува и застапува OpenStreetMap, дека дава било каква гаранција, или пак\n дека прифаќа било каква одговорност.\n
" native: mapping_link: почнете со изработка на карти native_link: македонската верзија @@ -1052,7 +1052,6 @@ mk: footer2: и можете да одговорите на {{replyurl}} header: "{{from_user}} ви испрати порака преку OpenStreetMap со насловот {{subject}}:" hi: Здраво {{to_user}}, - subject: "[OpenStreetMap] {{user}} ви испрати нова порака" signup_confirm: subject: "[OpenStreetMap] Потврдете ја вашата е-поштенска адреса" signup_confirm_html: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index d8acf7a3e..2508d629d 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1053,7 +1053,6 @@ nl: footer2: en u kunt antwoorden op {{replyurl}} header: "{{from_user}} heeft u een bericht gezonden via OpenStreetMap met het onderwerp {{subject}}:" hi: Hallo {{to_user}}, - subject: "[OpenStreetMap] {{user}} heeft u een nieuw bericht gezonden" signup_confirm: subject: "[OpenStreetMap] Bevestig uw e-mailadres" signup_confirm_html: diff --git a/config/locales/no.yml b/config/locales/no.yml index dd4981ba0..c357f3a75 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -953,7 +953,6 @@ footer2: og du kan svare til {{replyurl}} header: "{{from_user}} har sendt deg en melding gjennom OpenStreetMap med emnet {{subject}}:" hi: Hei {{to_user}}, - subject: "[OpenStreetMap] {{user}} sendte deg en melding" signup_confirm: subject: "[OpenStreetMap] Bekreft din e-postadresse" signup_confirm_html: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index feb326221..fa84ea3af 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1034,7 +1034,6 @@ pl: footer2: możesz odpowiedzieć pod adresem {{replyurl}} header: "{{from_user}} wysłał do Ciebie wiadomość z OpenStreetMap o temacie {{subject}}:" hi: Witaj {{to_user}}, - subject: "[OpenStreetMap] Użytkownik {{user}} przysłał nową wiadomość" signup_confirm: subject: "[OpenStreetMap] Prośba o potwierdzenie adresu e-mail" signup_confirm_html: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index c55f5ee05..9c7f64f45 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1082,7 +1082,6 @@ pt-BR: footer2: e pode respondê-la em {{replyurl}} header: "{{from_user}} enviou uma mensagem pelo OpenStreetMap para você com o assunto {{subject}}:" hi: Olá {{to_user}}, - subject: "[OpenStreetMap] {{user}} enviou uma mensagem para você" signup_confirm: subject: "[OpenStreetMap] Confirme seu endereço de e-mail" signup_confirm_html: @@ -1527,7 +1526,7 @@ pt-BR: webmaster: webmaster terms: agree: Concordo - consider_pd: Desejo que minhas contribuições sejam de Domínio Público + consider_pd: Em adição ao disposto acima, eu desejo que minhas contribuições sejam de Domínio Público consider_pd_why: o que é isso? decline: Discordo heading: Termos do Colaborador diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 3f0204cd4..c54b36efc 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1064,7 +1064,6 @@ ru: footer2: и вы можете ответить на {{replyurl}} header: "{{from_user}} отправил вам сообщение с темой {{subject}} через OpenStreetMap:" hi: Привет, {{to_user}}, - subject: "[OpenStreetMap] {{user}} прислал вам новое сообщение" signup_confirm: subject: "[OpenStreetMap] Подтвердите ваш адрес электронной почты" signup_confirm_html: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8ea9fdc69..51ab9bdc5 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -982,7 +982,6 @@ sk: footer2: a môžete odpovedať na {{replyurl}} header: "{{from_user}} vám zaslal správu cez OpenStreetMap s predmetom {{subject}}:" hi: Ahoj {{to_user}}, - subject: "[OpenStreetMap] {{user}} pošleme vám novú správu" signup_confirm: subject: "[OpenStreetMap] Potvrďte svoju e-mailovú adresu" signup_confirm_html: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index b47ecd5df..10214e7f6 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -628,7 +628,6 @@ sl: footer2: in nanj odgovorite na naslovu {{replyurl}} header: "Uporabnik {{from_user}} vam je prek OpenStreetMap poslal novo sporočilo glede {{subject}}:" hi: Pozdravljeni, {{to_user}}, - subject: "[OpenStreetMap] {{user}} vam je poslal novo sporočilo" signup_confirm: subject: "[OpenStreetMap] Potrdite svoj elektronski naslov" signup_confirm_html: diff --git a/config/locales/sr-EC.yml b/config/locales/sr-EC.yml index 718a599f1..b849d954a 100644 --- a/config/locales/sr-EC.yml +++ b/config/locales/sr-EC.yml @@ -734,7 +734,6 @@ sr-EC: message_notification: footer2: и можете одговорити на њу {{replyurl}} hi: Поздрав {{to_user}}, - subject: "[OpenStreetMap] {{user}} вам је послао нову поруку" signup_confirm: subject: "[OpenStreetMap] Потврдите вашу адресу е-поште" signup_confirm_html: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index a2c76782c..81c86037b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -3,6 +3,7 @@ # Export driver: syck # Author: AS # Author: Andygol +# Author: KEL # Author: Prima klasy4na # Author: Yurkoy # Author: Тест @@ -925,6 +926,7 @@ uk: shop_tooltip: Магазин з фірмовою символікою OpenStreetMap sign_up: реєстрація sign_up_tooltip: Створити обліковий запис для редагування + sotm2010: Запрошуємо на конференцію OpenStreetMap 2010 "The State of the Map", яка проходить 10-12 липня в Амстердамі! tag_line: Вільна Вікі-мапа Світу user_diaries: Щоденники user_diaries_tooltip: Подивитись щоденники @@ -1061,7 +1063,6 @@ uk: footer2: і ви можете відповісти на {{replyurl}} header: "{{from_user}} надіслав вам повідомлення через OpenStreetMap з темою {{subject}}:" hi: Привіт, {{to_user}}, - subject: "[OpenStreetMap] {{user}} надіслав вам нове повідомлення" signup_confirm: subject: "[OpenStreetMap] Підтвердіть вашу адресу електронної пошти" signup_confirm_html: @@ -1497,7 +1498,7 @@ uk: webmaster: веб-майстер terms: agree: Приймаю - consider_pd: Я вважаю, що мій внесок є суспільним надбанням + consider_pd: На додаток до зазначеної угоди, я вважаю, що мій внесок є суспільним надбанням consider_pd_why: що це? decline: Відхилити heading: Умови співпраці diff --git a/config/locales/vi.yml b/config/locales/vi.yml index b0e4ab4fd..4fce2f1c7 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -960,7 +960,6 @@ vi: footer2: và trả lời tại {{replyurl}} header: "{{from_user}} đã gửi thư cho bạn dùng OpenStreetMap có tiêu đề {{subject}}:" hi: Chào {{to_user}}, - subject: "[OpenStreetMap] {{user}} đã gửi thư mới cho bạn" signup_confirm: subject: "[OpenStreetMap] Xác nhận địa chỉ thư điện tử của bạn" signup_confirm_html: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 99613a383..1405e8430 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -360,7 +360,6 @@ zh-CN: footer2: 并且您可以在{{replyurl}}回复 header: "{{from_user}}已经通过OpenStreetMap向您发送标题为{{subject}}的消息:" hi: 您好{{to_user}}, - subject: "[OpenStreetMap] {{user}}给您发送新消息" signup_confirm_html: click_the_link: 如果是您本人,那么欢迎您!请点击一下链接确认帐户并阅读更多关于OpenStreetMap的信息 current_user: 一个基于其所处位置的,当前用户分类列表可从这里获得Category:Users_by_geographical_region. diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index c8e67549f..0d71f76c9 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -536,7 +536,6 @@ zh-TW: footer2: 並在 {{replyurl}} 回覆 header: "{{from_user}} 透過 OpenStreetMap 寄給您主旨為 {{subject}} 的訊息:" hi: "{{to_user}}您好," - subject: "[OpenStreetMap] {{user}} 寄給您新的訊息" signup_confirm: subject: "[OpenStreetMap] 確認您的電子郵件" signup_confirm_html: diff --git a/config/potlatch/locales/uk.yml b/config/potlatch/locales/uk.yml index cd6a7b9c5..9b4f34106 100644 --- a/config/potlatch/locales/uk.yml +++ b/config/potlatch/locales/uk.yml @@ -3,6 +3,7 @@ # Export driver: syck # Author: AS # Author: Andygol +# Author: KEL # Author: Prima klasy4na uk: a_poi: $1 об’єкта (POI) @@ -136,6 +137,7 @@ uk: option_layer_os_streetview: "В.БРИТАНІЯ: OS StreetView" option_layer_osmarender: OSM — Osmarender option_layer_streets_haiti: "Гаїті: назви вулиць" + option_layer_surrey_air_survey: "UK: Surrey Air Survey" option_layer_tip: Оберіть фон option_limitways: Попереджати при завантаженні\nвеликих обсягів даних option_microblog_id: "Ім'я мікроблогу:" diff --git a/lib/diff_reader.rb b/lib/diff_reader.rb index 0b1593158..9b3e01b86 100644 --- a/lib/diff_reader.rb +++ b/lib/diff_reader.rb @@ -104,7 +104,7 @@ class DiffReader # take the first element and check that it is an osmChange element @reader.read - raise APIBadUserInput.new("Document element should be 'osmChange'.") if @reader.name != 'osmChange' + raise OSM::APIBadUserInput.new("Document element should be 'osmChange'.") if @reader.name != 'osmChange' result = OSM::API.new.get_xml_doc result.root.name = "diffResult" @@ -185,7 +185,7 @@ class DiffReader # delete doesn't have to contain a full payload, according to # the wiki docs, so we just extract the things we need. new_id = xml['id'].to_i - raise API::APIBadXMLError.new(model, xml, "ID attribute is required") if new_id.nil? + raise OSM::APIBadXMLError.new(model, xml, "ID attribute is required") if new_id.nil? # if the ID is a placeholder then map it to the real ID model_sym = model.to_s.downcase.to_sym diff --git a/public/images/sotm.png b/public/images/sotm.png deleted file mode 100644 index af2d049bc..000000000 Binary files a/public/images/sotm.png and /dev/null differ diff --git a/public/javascripts/map.js b/public/javascripts/map.js index fd45d9304..272913d20 100644 --- a/public/javascripts/map.js +++ b/public/javascripts/map.js @@ -34,21 +34,24 @@ function createMap(divName, options) { var mapnik = new OpenLayers.Layer.OSM.Mapnik(i18n("javascripts.map.base.mapnik"), { keyid: "mapnik", displayOutsideMaxExtent: true, - wrapDateLine: true + wrapDateLine: true, + layerCode: "M" }); map.addLayer(mapnik); var osmarender = new OpenLayers.Layer.OSM.Osmarender(i18n("javascripts.map.base.osmarender"), { keyid: "osmarender", displayOutsideMaxExtent: true, - wrapDateLine: true + wrapDateLine: true, + layerCode: "O" }); map.addLayer(osmarender); var cyclemap = new OpenLayers.Layer.OSM.CycleMap(i18n("javascripts.map.base.cycle_map"), { keyid: "cyclemap", displayOutsideMaxExtent: true, - wrapDateLine: true + wrapDateLine: true, + layerCode: "C" }); map.addLayer(cyclemap); @@ -60,16 +63,11 @@ function createMap(divName, options) { ], { displayOutsideMaxExtent: true, wrapDateLine: true, - numZoomLevels: 19 + numZoomLevels: 19, + layerCode: "N" }); map.addLayer(noname); - var maplint = new OpenLayers.Layer.OSM.Maplint(i18n("javascripts.map.overlays.maplint"), { - displayOutsideMaxExtent: true, - wrapDateLine: true - }); - map.addLayer(maplint); - var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels); markers = new OpenLayers.Layer.Markers("Markers", { @@ -226,39 +224,53 @@ function getEventPosition(event) { function getMapLayers() { var layerConfig = ""; - for (var layers = map.getLayersBy("isBaseLayer", true), i = 0; i < layers.length; i++) { - layerConfig += layers[i] == map.baseLayer ? "B" : "0"; - } - - for (var layers = map.getLayersBy("isBaseLayer", false), i = 0; i < layers.length; i++) { - layerConfig += layers[i].getVisibility() ? "T" : "F"; + for (var i = 0; i < map.layers.length; i++) { + if (map.layers[i].layerCode && map.layers[i].getVisibility()) { + layerConfig += map.layers[i].layerCode; + } } return layerConfig; } function setMapLayers(layerConfig) { - var l = 0; + if (layerConfig.charAt(0) == "B" || layerConfig.charAt(0) == "0") { + var l = 0; - for (var layers = map.getLayersBy("isBaseLayer", true), i = 0; i < layers.length; i++) { - var c = layerConfig.charAt(l++); + for (var layers = map.getLayersBy("isBaseLayer", true), i = 0; i < layers.length; i++) { + var c = layerConfig.charAt(l++); - if (c == "B") { - map.setBaseLayer(layers[i]); + if (c == "B") { + map.setBaseLayer(layers[i]); + } } - } - while (layerConfig.charAt(l) == "B" || layerConfig.charAt(l) == "0") { - l++; - } + while (layerConfig.charAt(l) == "B" || layerConfig.charAt(l) == "0") { + l++; + } - for (var layers = map.getLayersBy("isBaseLayer", false), i = 0; i < layers.length; i++) { - var c = layerConfig.charAt(l++); + for (var layers = map.getLayersBy("isBaseLayer", false), i = 0; i < layers.length; i++) { + var c = layerConfig.charAt(l++); - if (c == "T") { - layers[i].setVisibility(true); - } else if(c == "F") { - layers[i].setVisibility(false); + if (c == "T") { + layers[i].setVisibility(true); + } else if(c == "F") { + layers[i].setVisibility(false); + } + } + } else { + for (var i = 0; i < map.layers.length; i++) { + if (map.layers[i].layerCode) { + if (layerConfig.indexOf(map.layers[i].layerCode) >= 0) { + if (map.layers[i].isBaseLayer) { + map.setBaseLayer(map.layers[i]); + } else { + map.layers[i].setVisibility(true); + } + } else { + map.layers[i].setVisibility(false); + } + } } } } diff --git a/public/javascripts/site.js b/public/javascripts/site.js index 0a5aae4ad..0e2c5aeb7 100644 --- a/public/javascripts/site.js +++ b/public/javascripts/site.js @@ -107,10 +107,8 @@ function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat,objtype,obj args[objtype] = objid; } - // This is a hack to omit the default mapnik layer (B000FTF) from - // the shortlink. B000FTFT is then the "Object" layer which we get - // on /?{node,way,relation}=id - if (layers && (layers != "B000FTF") && (layers != "B000FTFT")) { + // This is a hack to omit the default mapnik layer from the shortlink. + if (layers && layers != "M") { args["layers"] = layers; } else { diff --git a/public/openlayers/OpenStreetMap.js b/public/openlayers/OpenStreetMap.js index ce8a6e81f..69f141806 100644 --- a/public/openlayers/OpenStreetMap.js +++ b/public/openlayers/OpenStreetMap.js @@ -111,31 +111,3 @@ OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, { CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap" }); - -/** - * Class: OpenLayers.Layer.OSM.Maplint - * - * Inherits from: - * -