Potlatch 1.1 (server code)
authorRichard Fairhurst <richard@systemed.net>
Wed, 8 Jul 2009 20:52:02 +0000 (20:52 +0000)
committerRichard Fairhurst <richard@systemed.net>
Wed, 8 Jul 2009 20:52:02 +0000 (20:52 +0000)
13 files changed:
app/controllers/amf_controller.rb
app/controllers/swf_controller.rb
config/potlatch/autocomplete.txt
config/potlatch/localised/en/help.html
config/potlatch/localised/no/localised.yaml
config/potlatch/localised/tr/localised.yaml [new file with mode: 0644]
config/potlatch/localised/vi/localised.yaml [new file with mode: 0644]
config/potlatch/localised/zh-HANT/localised.yaml [new file with mode: 0644]
config/potlatch/presets.txt
public/javascripts/site.js
public/potlatch/photos.css [new file with mode: 0644]
public/potlatch/potlatch.swf
test/functional/amf_controller_test.rb

index aee3129..0b5e3a3 100644 (file)
@@ -302,7 +302,7 @@ class AmfController < ApplicationController
   end
 
   # Get a way including nodes and tags.
-  # Returns the way id, a Potlatch-style array of points, a hash of tags, and the version number.
+  # Returns the way id, a Potlatch-style array of points, a hash of tags, the version number, and the user ID.
 
   def getway(wayid) #:doc:
     amf_handle_error_with_timeout("'getway' #{wayid}") do
@@ -310,6 +310,7 @@ class AmfController < ApplicationController
         points = sql_get_nodes_in_way(wayid)
         tags = sql_get_tags_in_way(wayid)
         version = sql_get_way_version(wayid)
+        uid = sql_get_way_user(wayid)
       else
         # Ideally we would do ":include => :nodes" here but if we do that
         # then rails only seems to return the first copy of a node when a
@@ -326,9 +327,10 @@ class AmfController < ApplicationController
         end
         tags = way.tags
         version = way.version
+        uid = way.changeset.user.id
       end
 
-      [0, '', wayid, points, tags, version]
+      [0, '', wayid, points, tags, version, uid]
     end
   end
   
@@ -415,7 +417,8 @@ class AmfController < ApplicationController
       # Remove any elements where 2 seconds doesn't elapse before next one
       revdates.delete_if { |d| revdates.include?(d+1) or revdates.include?(d+2) }
       # Collect all in one nested array
-      revdates.collect! {|d| [d.strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
+      revdates.collect! {|d| [d.succ.strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
+      revdates.uniq!
 
       return ['way', wayid, revdates]
     rescue ActiveRecord::RecordNotFound
@@ -428,7 +431,7 @@ class AmfController < ApplicationController
   def getnode_history(nodeid) #:doc:
     begin 
       history = Node.find(nodeid).old_nodes.reverse.collect do |old_node|
-        [old_node.timestamp.strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
+        [old_node.timestamp.succ.strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
       end
       return ['node', nodeid, history]
     rescue ActiveRecord::RecordNotFound
@@ -595,6 +598,14 @@ class AmfController < ApplicationController
   # 6. hash of node versions (node=>version)
 
   def putway(renumberednodes, usertoken, changeset_id, wayversion, originalway, pointlist, attributes, nodes, deletednodes) #:doc:
+
+logger.info("renumberednodes is #{renumberednodes.inspect}")
+logger.info("wayversion is #{wayversion}")
+logger.info("pointlist is #{pointlist.inspect}")
+logger.info("sendnodes is #{nodes.inspect}")
+logger.info("deletednodes is #{deletednodes.inspect}")
+
+
     amf_handle_error("'putway' #{originalway}") do
       # -- Initialise
        
@@ -748,10 +759,11 @@ class AmfController < ApplicationController
 
   def getpoi(id,timestamp) #:doc:
     amf_handle_error("'getpoi' #{id}") do
+      id = id.to_i
       n = Node.find(id)
       v = n.version
       unless timestamp == ''
-        n = OldNode.find(id, :conditions=>['timestamp=?',DateTime.strptime(timestamp, "%d %b %Y, %H:%M:%S")])
+        n = OldNode.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC')
       end
 
       if n
@@ -937,7 +949,11 @@ class AmfController < ApplicationController
   end
 
   def sql_get_way_version(wayid)
-    ActiveRecord::Base.connection.select_one("SELECT version FROM current_ways WHERE id=#{wayid.to_i}")
+    ActiveRecord::Base.connection.select_one("SELECT version FROM current_ways WHERE id=#{wayid.to_i}")['version']
+  end
+
+  def sql_get_way_user(wayid)
+    ActiveRecord::Base.connection.select_one("SELECT user FROM current_ways,changesets WHERE current_ways.id=#{wayid.to_i} AND current_ways.changeset=changesets.id")['user']
   end
 end
 
index 262662c..d989a5e 100644 (file)
@@ -23,6 +23,7 @@ class SwfController < ApplicationController
                xmax=params['xmax'].to_f;
                ymin=params['ymin'].to_f;
                ymax=params['ymax'].to_f;
+               start=params['start'].to_i;
        
                # -     Begin movie
        
@@ -54,7 +55,7 @@ class SwfController < ApplicationController
                           "  AND "+OSM.sql_for_area(ymin,xmin,ymax,xmax,"gps_points.")+
                           "  AND (gps_points.timestamp IS NOT NULL) "+
                           "ORDER BY fileid DESC,ts "+
-                          "LIMIT 10000"
+                          "LIMIT 10000 OFFSET #{start}"
                  else
                        sql="SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,gpx_id AS fileid,"+
                             "      EXTRACT(EPOCH FROM timestamp) AS ts, gps_points.trackid AS trackid "+
@@ -62,7 +63,7 @@ class SwfController < ApplicationController
                                 "WHERE "+OSM.sql_for_area(ymin,xmin,ymax,xmax,"gps_points.")+
                                 "  AND (gps_points.timestamp IS NOT NULL) "+
                                 "ORDER BY fileid DESC,ts "+
-                                "LIMIT 10000"
+                                "LIMIT 10000 OFFSET #{start}"
                end
                gpslist=ActiveRecord::Base.connection.select_all sql
        
index ac40201..7785326 100755 (executable)
@@ -1,8 +1,11 @@
 # Potlatch autocomplete values
 # each line should be: key / way|point|POI (tab) list_of_values
 # '-' indicates no autocomplete for values
-highway/way            motorway,motorway_link,trunk,trunk_link,primary,primary_link,secondary,tertiary,unclassified,residential,service,bridleway,cycleway,footway,pedestrian,steps,living_street,track,road
-highway/point  mini_roundabout,traffic_signals,crossing,gate,stile,cattle_grid,toll_booth,incline,viaduct,motorway_junction,services,ford,bus_stop,turning_circle
+highway/way            motorway,motorway_link,trunk,trunk_link,primary,primary_link,secondary,tertiary,unclassified,residential,service,bridleway,cycleway,footway,pedestrian,steps,living_street,track,road,path
+highway/point  mini_roundabout,traffic_signals,crossing,incline,viaduct,motorway_junction,services,ford,bus_stop,turning_circle
+highway/POI            bus_stop
+barrier/way            hedge,fence,wall,ditch
+barrier/point  hedge,fence,wall,ditch,bollard,cycle_barrier,cattle_grid,toll_booth,gate,stile,kissing_gate,entrance
 tracktype/way  grade1,grade2,grade3,grade4,grade5
 junction/way   roundabout
 cycleway/way   lane,track,opposite_lane,opposite_track,opposite
@@ -16,12 +19,13 @@ aeroway/way         runway,taxiway,apron
 aeroway/POI            aerodrome,terminal,helipad
 aerialway/way  cable_car,chair_lift,drag_lift
 power/POI              tower
+power/point            tower
 power/way              line
 man_made/point works,beacon,survey_point,power_wind,power_hydro,power_fossil,power_nuclear,tower,water_tower,gasometer,reservoir_covered,lighthouse,windmill
 man_made/way   reservoir_covered,pier
 leisure/POI            sports_centre,golf_course,stadium,marina,track,pitch,water_park,fishing,nature_reserve,park,playground,garden,common,slipway
 leisure/way            sports_centre,golf_course,stadium,marina,track,pitch,water_park,fishing,nature_reserve,park,playground,garden,common
-amenity/POI            pub,biergarten,cafe,nightclub,restaurant,fast_food,parking,bicycle_parking,bicycle_rental,car_rental,car_sharing,fuel,telephone,toilets,recycling,public_building,place_of_worship,grave_yard,post_office,post_box,school,university,college,pharmacy,hospital,library,police,fire_station,bus_station,theatre,cinema,arts_centre,courthouse,prison,bank,bureau_de_change,atm,townhall
+amenity/POI            pub,biergarten,cafe,nightclub,restaurant,fast_food,parking,bicycle_parking,bicycle_rental,car_rental,car_sharing,drinking_water,fuel,telephone,toilets,recycling,public_building,place_of_worship,grave_yard,post_office,post_box,school,university,college,pharmacy,hospital,library,police,fire_station,bus_station,theatre,cinema,arts_centre,courthouse,prison,bank,bureau_de_change,atm,townhall
 amenity/way            parking,bicycle_parking,car_rental,car_sharing,public_building,grave_yard,school,university,college,hospital,townhall
 shop/POI               supermarket,convenience,bicycle,outdoor
 shop/way               supermarket
@@ -40,11 +44,12 @@ boundary/way        administrative,civil,political,national_park
 sport/POI              10pin,athletics,baseball,basketball,bowls,climbing,cricket,cricket_nets,croquet,cycling,dog_racing,equestrian,football,golf,gymnastics,hockey,horse_racing,motor,multi,pelota,racquet,rugby,skating,skateboard,soccer,swimming,skiing,table_tennis,tennis
 sport/way              10pin,athletics,baseball,basketball,bowls,climbing,cricket,cricket_nets,croquet,cycling,dog_racing,equestrian,football,golf,gymnastics,hockey,horse_racing,motor,multi,pelota,racquet,rugby,skating,skateboard,soccer,swimming,skiing,table_tennis,tennis
 abutters/way   residential,retail,industrial,commercial,mixed
-area/way               yes,no
-bridge/way             yes,no
-tunnel/way             yes,no
-cutting/way            yes,no
-embankment/way yes,no
+area/way               yes
+bridge/way             yes
+tunnel/way             yes
+cutting/way            yes
+embankment/way yes
+building/way   yes
 lanes/way              -
 layer/way              -
 surface/way            paved,unpaved,gravel,dirt,grass
@@ -91,6 +96,7 @@ postal_code/way               -
 description/point      -
 description/POI                -
 description/way                -
+traffic_calming/point  bump,chicane,cushion,hump,rumble_strip
 addr:housenumber/point -
 addr:street/point              -
 addr:full/point                        -
index ba90958..9354290 100755 (executable)
@@ -174,6 +174,7 @@ M   <u>M</u>aximise editing window
 P      Create <u>p</u>arallel way
 R      <u>R</u>epeat tags
 S      <u>S</u>ave (unless editing live)
+T      <u>T</u>idy into straight line/circle
 U      <u>U</u>ndelete (show deleted ways)
 X      Cut way in two
 Z      Undo
index 848a29f..0ddb072 100755 (executable)
 "prompt_revertversion": "Tilbakestill til tidligere lagret versjon:"
 "tip_revertversion": Velg versjonen det skal tilbakestilles til
 "action_movepoi": flytter et POI (interessant punkt)
-"tip_splitway": Del vei i valgt punkt (X)
-"tip_direction": Veiretning, trykk for å snu
-"tip_clockwise": Sirkulær vei med klokka, trykk for å snu
-"tip_anticlockwise": Sirkulær vei mot klokka, trykk for å snu
+"tip_splitway": Del linje i valgt punkt (X)
+"tip_direction": Retning på linje, trykk for å snu
+"tip_clockwise": Sirkulær linje med klokka, trykk for å snu
+"tip_anticlockwise": Sirkulær linje mot klokka, trykk for å snu
 "tip_noundo": Ingenting å angre
-"action_mergeways": slår sammen to veier
+"action_mergeways": slår sammen to linjer
 "tip_gps": Vis GPS sporlogger (G)
 "tip_options": Sett valg (velg kartbakgrunn)
 "tip_addtag": Legg til merke
 "tip_addrelation": Legg til i en relasjon
-"tip_repeattag": Gjenta merker fra sist valgte vei (R)
+"tip_repeattag": Gjenta merker fra sist valgte linje (R)
 "tip_alert": Det oppstod en feil, trykk for detaljer
-"hint_toolong": "for lang til å låse opp:\nvennligst del opp\ni mindre veier"
-"hint_loading": laster veier
+"hint_toolong": "for lang til å låse opp:\nvennligst del opp\ni kortere linjer"
+"hint_loading": laster linjer
 "prompt_welcome": Velkommen til OpenStreetMap!
 "prompt_introduction": "Velg en knapp nedenfor for å redigere. Hvis du velger 'Start' redigerer du kartet direkte, endringer blir vanligvis synlige hver torsdag. Hvis du velger 'Øve' lagres ikke endringer, så du kan øve deg på å redigere.\nHusk OpenStreetMaps gyldne regler:\n\n"
 "prompt_dontcopy": Ikke kopier fra andre kart
@@ -36,7 +36,7 @@
 "help": Hjelp
 "prompt_help": Finn ut hvordan du bruker Potlatch, programmet for kartredigering.
 "track": Spor
-"prompt_track": Overfør dine GPS-sporinger til (låste) veier for redigering.
+"prompt_track": Overfør dine GPS-sporinger til (låste) linjer for redigering.
 "action_deletepoint": sletter et punkt
 "deleting": sletter
 "action_cancelchanges": avbryter endringer av
 "option_thinlines": Bruk tynne linjer uansett forstørrelse
 "option_custompointers": Bruk penn- og håndpekere
 "tip_presettype": Velg hva slags forhåndsinstillinger som blir vist i menyen
-"action_waytags": sette merker på en vei
+"action_waytags": sette merker på en linje
 "action_pointtags": sette merker på et punkt
 "action_poitags": sette merker på et POI (interessant punkt)
-"action_addpoint": legger til et punkt på enden av en vei
+"action_addpoint": legger til et punkt på enden av en linje
 "add": Legg til
 "prompt_addtorelation": Legg $1 til en relasjon
 "prompt_selectrelation": Velg en relasjon som allerede finnes, eller lag en ny relasjon
 "createrelation": Lag en ny relasjon
 "tip_selectrelation": Legg til den valgte ruta
-"action_reverseway": snur en vei bak fram
+"action_reverseway": snur en linje bak fram
 "tip_undo": Angre $1 (Z)
-"error_noway": Fant ikke veien $1 så det er ikke mulig å angre. (Kanskje den ikke er på skjermen lenger?)
-"error_nosharedpoint": Veiene $1 og $2 deler ikke noe punkt lenger, så det er ikke mulig å angre.
+"error_noway": Fant ikke linjen $1 så det er ikke mulig å angre. (Kanskje den ikke er på skjermen lenger?)
+"error_nosharedpoint": Linjene $1 og $2 deler ikke noe punkt lenger, så det er ikke mulig å angre.
 "error_nopoi": Fant ikke POI-et, så det er ikke mulig å angre. (Kanskje den ikke er på skjermen lenger?)
-"prompt_taggedpoints": Noen av punktene på denne veien er merket. Vil du virkelig slette?
-"action_insertnode": legge til et punkt på veien
-"action_splitway": dele en vei
+"prompt_taggedpoints": Noen av punktene på denne linjen har merker. Vil du virkelig slette?
+"action_insertnode": legge til et punkt på linjen
+"action_splitway": dele en linje
 "editingmap": Redigerer kart
 "start": Start
 "play": Øve
 "delete": Slett
-"a_way": $1 en vei
+"a_way": $1 en linje
 "a_poi": $1 et POI
-"action_moveway": flytter en vei
-"way": Vei
+"action_moveway": flytter en linje
+"way": Linje
 "point": Punkt
 "ok": Ok
 "existingrelation": Legg til en relasjon som er her fra før
 "findrelation": Finn en relasjon som inneholder
 "norelations": Ingen relasjoner i området på skjermen
+"advice_toolong": For lang til å låse opp, linjen må deles i flere biter
+"advice_waydragged": Linje flyttet (Z for å angre)
+"advice_tagconflict": Ulike merker, vennligst sjekk (Z for å angre)
+"advice_nocommonpoint": Linjene deler ikke et felles punkt
+"option_warnings": Vis flytende advarsler
+"reverting": Reverserer
diff --git a/config/potlatch/localised/tr/localised.yaml b/config/potlatch/localised/tr/localised.yaml
new file mode 100644 (file)
index 0000000..73489aa
--- /dev/null
@@ -0,0 +1,85 @@
+"action_createpoi": POI oluşturuluyor
+"hint_pointselected": nokta seçili\n(shift-tıkla yeni cizgi\nbaşlatmak için)
+"action_movepoint": nokta taşınıyor
+"hint_drawmode": yeni nokta için tıkla\nçizgi sona ermek için\nçift tıkla/ENTER bas
+"hint_overendpoint": yolun son noktası\nbağlamak için tıkla\nbirleştirmek için shift-tıkla
+"hint_overpoint": nokta üzerine\nbağlamak için tıkla
+"gpxpleasewait": GPX izi işlenirken lütfen biraz bekleyin
+"revert": Geri al
+"cancel": Vazgeç
+"prompt_revertversion": "Daha önce kaydedilmiş bir sürümüne dön:"
+"tip_revertversion": Geri dönülecek sürümü seç
+"action_movepoi": POI taşınıyor
+"tip_splitway": Seçtiğin noktada yolu böl (X)
+"tip_direction": Yolun yönü - ters yöne değiştirmek için tıkla
+"tip_clockwise": saat yönünde dairesel yol - tersine dönmek için tıkla
+"tip_anticlockwise": saatin ters yönünde dairesel yol - tersine dönmek için tıkla
+"tip_noundo": Geri alınacak bir şey yok
+"action_mergeways": iki yol birleştiriliyor
+"tip_gps": GPS izlerini göster (G)
+"tip_options": Ayarları değiştir (harita arka planını seç)
+"tip_addtag": Yeni etiket ekle
+"tip_addrelation": Bir ilişkiye ekle
+"tip_repeattag": Etiketleri bir önceki seçtiğin yoldan kopyala (R)
+"tip_alert": Bir hata oluştu - ayrıntılar için tıkla
+"hint_toolong": "kilidi kaldırmak için yol fazla uzun:\nlütfen önce daha kısa\nyollara ayır"
+"hint_loading": yollar yükleniyor
+"prompt_welcome": "OpenStreetMap'e Hoşgeldin!"
+"prompt_introduction": "Düzenlemek için aşağıdaki tuşlardan birini seç. 'Başla'ya tıklarsan, ana haritayı doğrudan düzenleyeceksin - değişiklikler genellikle Perşembe günleri gözükür. 'Deneme Tahtası'nı tıklarsan, değişikliklerin kaydedilmeyecektir, böylece düzenleme alıştırması yapabilirsin.\n\nOpenStreetMap'in kuralları anımsa:\n\n"
+"prompt_dontcopy": Başka haritalardan kopyalamak kesinlikle yasaktır!
+"prompt_accuracy": Hassasiyet önemlidir - bildiğin bölgeleri haritala
+"prompt_enjoy": İyi eğlenceler!
+"dontshowagain": Bu mesaj bir daha gösterme.
+"prompt_start": OpenStreetMap ile harita çizmeye başla.
+"prompt_practise": Harita üzerinde oyna - değişiklikler kaydedilmeyecek.
+"practicemode": Deneme tahtası modu
+"help": Yardım
+"prompt_help": Potlatch, yani bu harita düzenleyici, nasıl kullanılır keşfet
+"track": İz
+"prompt_track": GPS izini, düzenlemek için (kilitli) bir yola dönüştür.
+"action_deletepoint": bir nokta siliniyor
+"deleting": siliniyor
+"action_cancelchanges": "iptal ediliyor:"
+"emailauthor": "\n\nLütfen bu hata konusunda richard\@systemeD.net'e bir e.posta at"
+"error_connectionfailed": Maalesef OpenStreetMap sunucusuyla bağlantı koptu. Son değişiklikler kaydedilmedi.\n\nBir daha denemek ister misin?
+"option_background": "Arkaplan:"
+"option_fadebackground": Arkaplanı saydamlaştır
+"option_thinlines": Tüm ölçeklerde ince çizgileri kullan
+"option_custompointers": Kalem ve el işareti kullan
+"tip_presettype": Menüde sunulan türleri seç
+"action_waytags": yoldaki etiketler ayarlanıyor
+"action_pointtags": noktadaki etiketler ayarlanıyor
+"action_poitags": "POI'nin etiketleri ayarlanıyor"
+"action_addpoint": yolun sonuna bir nokta ekleniyor
+"add": Ekle
+"prompt_addtorelation": ilişkiye $1 ekle
+"prompt_selectrelation": Eklenecek mevcut bir ilişki seç, ya da yeni bir ilişki yarat.
+"createrelation": Yeni bir ilişki yarat
+"tip_selectrelation": Seçili rotaya ekle
+"action_reverseway": yol tersine çevriliyor
+"tip_undo": $1 Geri Al (Z)
+"error_noway": $1 yolu bulunamıyor (belki atıdı) bu yüzden geri alamıyorum.
+"error_nosharedpoint": $1 ve $2 yollarının paylaştıkları ortak bir nokta artık yok, bu yüzden bölmeyi geri alamıyorum.
+"error_nopoi": "The POI cannot be found (perhaps you've panned away?) so I can't undo."
+"prompt_taggedpoints": Bu yolun birkaç noktası etiketlenmiş. Gene de silinsin mi?
+"action_insertnode": yola bir nokta ekleniyor
+"action_splitway": yol bölünüyor
+"editingmap": Harita düzenleme modu
+"start": Başla
+"play": Deneme Tahtası
+"delete": Sil
+"a_way": "yol: $1"
+"a_poi": "POI: $1"
+"action_moveway": yol taşınıyor
+"way": Yol
+"point": Nokta
+"ok": Tamam
+"existingrelation": Mevcut bir ilişkiye ekle
+"findrelation": İçeren bir ilişki bul
+"norelations": Çalışılan alanda ilişki yok
+"advice_toolong": Kilidi kaldırmak için yol fazla uzun - lütfen önce daha kısa yollara ayır
+"advice_waydragged": "Yol taşındı (geri almak için Z'ye bas)"
+"advice_tagconflict": Etiketler eşleşmiyor - lütfen kontrol et
+"advice_nocommonpoint": Yolların ortak noktası yok
+"option_warnings": Uyarıları göster
+"reverting": geri alınıyor
diff --git a/config/potlatch/localised/vi/localised.yaml b/config/potlatch/localised/vi/localised.yaml
new file mode 100644 (file)
index 0000000..ee13fed
--- /dev/null
@@ -0,0 +1,85 @@
+"action_createpoi": đang tạo địa điểm
+"hint_pointselected": đã chọn điểm\n(shift-nhấn chuột để\nbắt đầu lối mới)
+"action_movepoint": đang chuyển điểm
+"hint_drawmode": nhấn chuột để thêm điểm\nnhấn đúp/Enter\nđể kết thúc lối
+"hint_overendpoint": đang trên điểm kết thúc\nnhấn chuột để nối\nshift-nhấn chuột để hợp nhất
+"hint_overpoint": đang trên điểm\nnhấn chuột để nối"
+"gpxpleasewait": Xin chờ, đang xử lý tuyến đường GPX.
+"revert": Lùi
+"cancel": Hủy bỏ
+"prompt_revertversion": "Lùi lại phiên bản cũ hơn:"
+"tip_revertversion": Chọn phiên bản để lùi lại
+"action_movepoi": đang chuyển địa điểm
+"tip_splitway": Chia cắt lối tại điểm đã chọn (X)
+"tip_direction": Hướng của lối - nhấn để đảo ngược
+"tip_clockwise": Lối vòng theo chiều kim đồng hồ - nhấn để đảo ngược
+"tip_anticlockwise": Lối vòng ngược chiều kim đồng hồ - nhấn để đảo ngược
+"tip_noundo": Không có gì để lùi
+"action_mergeways": đang hợp nhất hai lối
+"tip_gps": Hiện các tuyến đường GPS (G)
+"tip_options": Tùy chỉnh (chọn nền bản đồ)
+"tip_addtag": Thêm thẻ mới
+"tip_addrelation": Xếp vào quan hệ
+"tip_repeattag": Chép các thẻ từ lối được chọn trước (R)
+"tip_alert": Đã gặp lỗi - nhấn để xem chi tiết
+"hint_toolong": "dài quá không thể mở khóa:\nxin chia cắt nó thành\ncác lối ngắn hơn"
+"hint_loading": đang tải các lối
+"prompt_welcome": Hoan nghênh bạn đã đến OpenStreetMap!
+"prompt_introduction": Hãy chọn cách sử dụng ở dưới để bắt đầu sửa đổi. Nút "Bắt đầu" để cho bạn sửa đổi thẳng bản đồ chính - các thay đổi thường hiện ra mỗi thứ năm. Nút 'Nghịch ngợm' để cho bạn thử sửa đổi, các thay đổi của bạn không được lưu.\n\nHãy nhớ các quy tắc vàng của OpenStreetMap:\n\n
+"prompt_dontcopy": Đừng sao chép từ bản đồ khác
+"prompt_accuracy": Cần chính xác - chỉ vẽ những nơi đã thăm
+"prompt_enjoy": Và chúc vui vẻ!
+"dontshowagain": Không hiện thông báo này lần sau
+"prompt_start": Bắt đầu đóng góp vào bản đồ OpenStreetMap.
+"prompt_practise": Thử vẽ bản đồ - các thay đổi của bạn không được lưu.
+"practicemode": Chế độ thử
+"help": Trợ giúp
+"prompt_help": Tìm hiểu cách sử dụng Potlatch, trình vẽ bản đồ này.
+"track": Tuyến đường
+"prompt_track": Chuyển đổi tuyến đường GPS thành các lối (khóa) để sửa đổi.
+"action_deletepoint": đang xóa điểm
+"deleting": đang xóa
+"action_cancelchanges": đang hủy bỏ các thay đổi
+"emailauthor": \n\nXin gửi thư điện tử cho richard\@systemeD.net báo cáo lỗi và giải thích bạn làm gì lúc khi gặp lỗi.
+"error_connectionfailed": "Rất tiếc - không thể kết nối với máy chủ OpenStreetMap. Những thay đổi gần đây có thể chưa được lưu.\n\nBạn có muốn thử lại không?"
+"option_background": "Nền:"
+"option_fadebackground": Nhạt màu nền
+"option_thinlines": Hiện đường hẹp ở các tỷ lệ
+"option_custompointers": Hiện con trỏ bút và tay
+"tip_presettype": Chọn các loại thẻ được định trước trong trình đơn.
+"action_waytags": đang gắn thẻ vào lối
+"action_pointtags": đang gắn thẻ vào điểm
+"action_poitags": đang gắn thẻ vào địa điểm
+"action_addpoint": đang thêm nốt vào cuối lối
+"add": Thêm
+"prompt_addtorelation": Xếp $1 vào quan hệ
+"prompt_selectrelation": Chọn một quan hệ đã tồn tại để xếp vào, hoặc tạo ra quan hệ mới.
+"createrelation": Tạo quan hệ mới
+"tip_selectrelation": Thêm vào tuyến đường đã chọn
+"action_reverseway": đang đảo ngược lối
+"tip_undo": Lùi $1 (Z)
+"error_noway": Không tìm thấy $1 (có lẽ bạn đã kéo ra khỏi vùng?) nên không thể lùi lại.
+"error_nosharedpoint": Các lối $1 và $2 không còn cắt ngang nhau tại điểm nào, nên không thể lùi lại việc chia cắt lối.
+"error_nopoi": Không tìm thấy địa điểm (có lẽ bạn đã kéo ra khỏi vùng?) nên không thể lùi lại.
+"prompt_taggedpoints": Một số điểm trên lối này đã được gắn thẻ. Bạn có chắc muốn xóa nó?
+"action_insertnode": đang gắn nốt vào lối
+"action_splitway": đang chia cắt lối
+"editingmap": Sửa đổi bản đồ
+"start": Bắt đầu
+"play": Nghịch ngợm
+"delete": Xóa
+"a_way": $1 lối
+"a_poi": $1 địa điểm
+"action_moveway": đang chuyển lối
+"way": Lối
+"point": Điểm
+"ok": OK
+"existingrelation": Xếp vào quan hệ đã tồn tại
+"findrelation": Tìm kiếm quan hệ chứa
+"norelations": Không có quan hệ trong vùng này
+"advice_toolong": Dài quá không thể mở khóa - xin chia cắt nó thành các lối ngắn hơn
+"advice_waydragged": Đã kéo lối (Z để lùi lại)
+"advice_tagconflict": Các thẻ không hợp - xin kiểm tra lại
+"advice_nocommonpoint": Các lối không cắt ngang nhau tại điểm nào
+"option_warnings": Nổi các cảnh báo
+"reverting": đang lùi sửa
diff --git a/config/potlatch/localised/zh-HANT/localised.yaml b/config/potlatch/localised/zh-HANT/localised.yaml
new file mode 100644 (file)
index 0000000..db3dcd7
--- /dev/null
@@ -0,0 +1,85 @@
+"action_createpoi": 建立一個 POI
+"hint_pointselected": 已選擇一個 point\n(按 shift再點選 point 可\n開始畫新的線段)
+"action_movepoint": 移動 point
+"hint_drawmode": 單擊加入新的 point\n雙擊/Enter\n可結束此線段
+"hint_overendpoint": 在結束 point 上\n單擊會製作交叉\n按 shift 再點選會合併
+"hint_overpoint": 在 point 上\n單擊會製作交叉
+"gpxpleasewait": 在處理 GPX 追蹤時請稍候。
+"revert": 回復
+"cancel": 取消
+"prompt_revertversion": "回復到較早儲存的版本:"
+"tip_revertversion": 選擇要回復的版本
+"action_movepoi": 移動 POI
+"tip_splitway": 在選取的 point 將路徑分開 (X)
+"tip_direction": 路徑的方向 - 單擊可反轉方向
+"tip_clockwise": Clockwise circular way - click to reverse
+"tip_anticlockwise": Anti-clockwise circular way - click to reverse
+"tip_noundo": 沒有可復原的項目
+"action_mergeways": 正在合併兩條路徑
+"tip_gps": 顯示 GPS 追蹤 (G)
+"tip_options": 設定選項 (選擇地圖背景)
+"tip_addtag": 加入新的標籤
+"tip_addrelation": 加入關係
+"tip_repeattag": 重複前一次選取路徑的標籤 (R)
+"tip_alert": 發生錯誤 - 點選以取得詳細資訊
+"hint_toolong": "路徑太長而無法解除鎖定:\n請將它分離為\n較短的路徑"
+"hint_loading": 正在載入路徑
+"prompt_welcome": 歡迎使用 OpenStreetMap!
+"prompt_introduction": "選擇下列按鈕進行編輯。如果您選擇「開始」,將會直接編輯地圖 - 所做的變更通常會在每週四顯示出來。如果您選擇「練習」,您的變更將不會儲存,所以可以用來練習編輯。\n\n請記得 OpenStreetMap 的黃金定律:\n\n"
+"prompt_dontcopy": 不要複製其他地圖
+"prompt_accuracy": 準確性很重要 - 只繪製您到過的地方
+"prompt_enjoy": 好好享受!
+"dontshowagain": 不要再顯示這個訊息
+"prompt_start": 開始繪製 OpenStreetMap。
+"prompt_practise": 練習製圖 - 您的變更不會被儲存。
+"practicemode": 練習模式
+"help": 求助
+"prompt_help": 了解如何使用 Potlatch,這個地圖編輯器。
+"track": 追蹤
+"prompt_track": 將您的 GPS 追蹤轉換為 (鎖定的) 路徑以便編輯。
+"action_deletepoint": 正在刪除 point
+"deleting": 刪除中
+"action_cancelchanges": 取消變更:
+"emailauthor": \n\n請寄一封程式錯誤報告的電子郵件給 richard\@systemeD.net,並說明當時您在做什麼動作。
+"error_connectionfailed": 抱歉 - 對 OpenStreetMap 伺服器的連線失敗了。任何最新的變更將不會儲存。\n\n您是否要再試一次?
+"option_background": "背景:"
+"option_fadebackground": 淡化背景
+"option_thinlines": 在所有縮放等級使用細線
+"option_custompointers": Use pen and hand pointers
+"tip_presettype": 選擇在選擇中要提供哪種類型的預先設定。
+"action_waytags": 設定路徑上的標籤
+"action_pointtags": 設定 point 上的標籤
+"action_poitags": 設定 POI 上的標籤
+"action_addpoint": 在路徑的結尾加上節點
+"add": 加入
+"prompt_addtorelation": 將 $1 加入為關係
+"prompt_selectrelation": 選擇一個既存的關係來加入,或是建立新的關係。
+"createrelation": 建立新的關係
+"tip_selectrelation": 加入到選取的路線
+"action_reverseway": 反轉路徑
+"tip_undo": 復原 $1 (Z)
+"error_noway": "找不到路徑 $1 (perhaps you've panned away?) ,因此我不能復原它。"
+"error_nosharedpoint": 路徑 $1 和 $2 不再分享共同 point,因此我無法復原此分離動作。
+"error_nopoi": "The POI cannot be found (perhaps you've panned away?) so I can't undo."
+"prompt_taggedpoints": 這個路徑上的部分 point 已有標籤。確定要刪除?
+"action_insertnode": 在路徑中加入節點
+"action_splitway": 分離一條路徑
+"editingmap": 編輯地圖
+"start": 開始
+"play": 練習
+"delete": 刪除
+"a_way": $1 路徑
+"a_poi": $1 POI
+"action_moveway": 移動路徑
+"way": 路徑
+"point": Point
+"ok": 確定
+"existingrelation": 加入既存的關係
+"findrelation": 尋找關係有包含
+"norelations": 在目前的區域中沒有此關係
+"advice_toolong": 路徑太長而無法解除鎖定 - 請將它分離為較短的路徑
+"advice_waydragged": 拖曳的路徑 (按 Z 復原)
+"advice_tagconflict": 標籤不符 - 請檢查
+"advice_nocommonpoint": 這些路徑不再分享共同 point
+"option_warnings": 顯示浮動式警示
+"reverting": 正在反轉
index b08d2dc..887346a 100644 (file)
@@ -54,7 +54,7 @@ ruins: place=,tourism=,historic=ruins,name=(type name here)
 
 way/recreation
 golf course: landuse=,leisure=golf_course
-pitch: landuse=,leisure=pitch, sport=(type sport here)
+pitch: landuse=,leisure=pitch,sport=(type sport here)
 playground: landuse=,leisure=playground
 recreation ground: landuse=recreation_ground,leisure=
 sports centre: landuse=,leisure=sports_centre
@@ -99,14 +99,15 @@ mini roundabout: place=,highway=mini_roundabout
 traffic lights: place=,highway=traffic_signals
 
 point/footway
-bridge: place=,highway=bridge
-gate: place=,highway=gate
-stile: place=,highway=stile
-cattle grid: place=,highway=cattle_grid
+gate: place=,barrier=gate
+stile: place=,barrier=stile
+cattle grid: place=,barrier=cattle_grid
 
 point/cycleway
-bike park: place=,highway=,amenity=bicycle_parking,capacity=(type number of spaces)
-gate: place=,highway=gate,amenity=,capacity=
+bike park: place=,barrier=,amenity=bicycle_parking,capacity=(type number of spaces)
+bollard: place=,barrier=bollard,amenity=,capacity=
+cycle barrier: place=,barrier=cycle_barrier,amenity=,capacity=
+gate: place=,barrier=gate,amenity=,capacity=
 
 point/waterway
 lock: place=,waterway=,lock=yes,name=(type name here)
@@ -177,7 +178,7 @@ windmill: man_made=windmill,power=,amenity=,name=,religion=,denomination=
 
 POI/recreation
 golf course: leisure=golf_course
-pitch: leisure=pitch, sport=(type sport here)
+pitch: leisure=pitch,sport=(type sport here)
 playground: leisure=playground
 recreation ground: landuse=recreation_ground,leisure=
 sports centre: leisure=sports_centre
index 59999b8..3e28e0c 100644 (file)
@@ -55,6 +55,9 @@ function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat,objtype,obj
       args.lat = lat;
       args.lon = lon;
       args.zoom = zoom;
+      if (objtype && objid) {
+        args[objtype] = objid;
+      }
       node.href = setArgs("/edit", args);
       node.style.fontStyle = 'normal';
     } else {
diff --git a/public/potlatch/photos.css b/public/potlatch/photos.css
new file mode 100644 (file)
index 0000000..cc7dd42
--- /dev/null
@@ -0,0 +1,18 @@
+h1                     { font-family: Arial,Helvetica,sans-serif; 
+                         font-size: 18px; 
+                         color: #DDDDFF; } 
+
+h2                     { font-family: Arial,Helvetica,sans-serif; 
+                         font-size: 16px; 
+                         color: #DDDDFF; } 
+
+h3                     { font-family: Arial,Helvetica,sans-serif; 
+                         font-size: 14px; 
+                         color: #DDDDFF; } 
+
+p                      { font-family: Arial,Helvetica,sans-serif; 
+                         font-size: 12px; 
+                         color: #FFFFFF; } 
+
+a:link      { color: #00FFFF; 
+              text-decoration: underline; }
index 4296d3a..cd73235 100755 (executable)
Binary files a/public/potlatch/potlatch.swf and b/public/potlatch/potlatch.swf differ
index 22af7f2..fbc0af8 100644 (file)
@@ -280,10 +280,13 @@ class AmfControllerTest < ActionController::TestCase
     # ['way',wayid,history]
     assert_equal 'way', history[0]
     assert_equal latest.id, history[1] 
-    # for some reason undocumented, the potlatch API now prefers dates
-    # over version numbers. presumably no-one edits concurrently any more?
-    assert_equal latest.timestamp.strftime("%d %b %Y, %H:%M:%S"), history[2].first[0]
-    assert_equal oldest.timestamp.strftime("%d %b %Y, %H:%M:%S"), history[2].last[0]
+    # We use dates rather than version numbers here, because you might
+    # have moved a node within a way (i.e. way version not incremented).
+    # The timestamp is +1 (timestamp.succ) because we say "give me the
+    # revision of 15:33:02", but that might actually include changes at
+    # 15:33:02.457.
+    assert_equal latest.timestamp.succ.strftime("%d %b %Y, %H:%M:%S"), history[2].first[0]
+    assert_equal oldest.timestamp.succ.strftime("%d %b %Y, %H:%M:%S"), history[2].last[0]
   end
 
   def test_getway_history_nonexistent