From 32dfa68f908b2f6b1766a3c757a596a4525749be Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 26 Jan 2015 23:03:30 +0100 Subject: [PATCH 01/15] Localisation updates from https://translatewiki.net. --- config/locales/br.yml | 7 ++- config/locales/eu.yml | 29 ++++++++++ config/locales/fi.yml | 6 +- config/locales/ko.yml | 2 + config/locales/lt.yml | 120 +++++++++++++++++++++++++++++++++++++-- config/locales/nl.yml | 4 +- config/locales/pt-BR.yml | 2 +- config/locales/zh-TW.yml | 2 +- 8 files changed, 160 insertions(+), 12 deletions(-) diff --git a/config/locales/br.yml b/config/locales/br.yml index 9d4e60737..e57a00e5f 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -547,7 +547,7 @@ br: primary_link: Pennhent proposed: Hent kinniget raceway: Redva - residential: Takad annezet + residential: Straed annezet rest_area: Leur diskuizh road: Hent secondary: Hent eil renk @@ -1278,8 +1278,12 @@ br: changeset_comment_notification: greeting: Demat, commented: + subject_own: '[OpenStreetMap] %{commenter} en deus addispleget unan eus ho + kemmoù' subject_other: '[OpenStreetMap] %{commenter} en deus addispleget unan eus ho notennoù a sell ouzhoc''h' + your_changeset: '[OpenStreetMap] %{commenter} en deus addispleget unan eus + ho holladoù kemmoù krouet d''an %{time}' partial_changeset_with_comment: gant an addispleg '%{changeset_comment}' partial_changeset_without_comment: Hep evezhiadenn message: @@ -2265,6 +2269,7 @@ br: way: Hent relation: Darempred nothing_found: Arc'hweladur ebet kavet + error: Fazi o vont e daremmpred gant %{server}:%{fazi} redaction: edit: description: Deskrivadur diff --git a/config/locales/eu.yml b/config/locales/eu.yml index cab092b77..ed687a388 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -96,8 +96,12 @@ eu: loading: Kargatzen... tag_details: tags: Etiketak + wikidata_link: '%{page} elementua Wikidatan' + wikipedia_link: '%{page} artikulua Wikipedian' note: title: 'Oharra: %{id}' + new_note: Ohar berria + description: Deskribapena changeset: changeset_paging_nav: showing_page: '%{page}. orrialdea' @@ -144,6 +148,7 @@ eu: view: Ikusi edit: Aldatu comments: + ago: Duela %{ago} newer_comments: Iruzkin berriagoak older_comments: Iruzkin zaharragoak export: @@ -153,6 +158,9 @@ eu: licence: Lizentzia export_details: OpenStreetMap-eko datuak Open Data Commons Datu-base Irekiko Lizentzia baimen baten mende daude. + too_large: + planet: + title: OSM Planeta options: Aukerak format: Formatua scale: Eskala @@ -293,6 +301,7 @@ eu: steps: Eskailera-mailak tertiary: Hirugarren mailako errepide track: Pista + unclassified: Sailkatu gabeko errepidea historic: archaeological_site: Aztarnategi arkeologiko building: Eraikina @@ -344,6 +353,7 @@ eu: cave_entrance: Kobazulo Sarrera channel: Kanal crater: Crater + dune: Duna fjord: Fiordo forest: Basoa geyser: Geiser @@ -487,6 +497,8 @@ eu: cities: Hiriak towns: Herriak places: Lekuak + results: + more_results: Emaitza gehiago distance: one: km bat inguru zero: km bat baino gutxiago @@ -512,6 +524,7 @@ eu: export: Esportatu data: Datuak export_data: Esportatu datuak + intro_header: Ongi etorri OpenStreetMapera! help: Laguntza about: Honi buruz community: Komunitatea @@ -531,6 +544,7 @@ eu: native_link: Euskara version legal_babble: title_html: Egile-eskubideak eta lizentzia + more_title_html: Jakin ezazu gehiago contributors_at_html: |- Austria: Honako iturrietatik ateratako datuak ditu: Stadt Wien (CC BY lizentziapean), @@ -538,13 +552,22 @@ eu: Land Tirol (CC BY AT zuzenketekin lizentziapean). contributors_fr_html: 'Frantzia: Direction Générale des Impôts-etik ateratako datuak ditu.' + infringement_title_html: Egile-eskubideen urraketa welcome_page: title: Ongi etorri! + introduction_html: Ongi etorri OpenStreetMapera, edonork alda dezakeen munduko + mapa askera. Orain izena eman duzula, mapak editatzen has zaitezke. Hona hemen + gida laburra jakin behar dituzun gauzarik garrantzitsuenak dituena. + whats_on_the_map: + title: Mapan dagoena questions: title: Galderarik? fixthemap: + title: Arazo baten berri eman / Mapa zuzendu how_to_help: title: Nola lagundu + other_concerns: + title: Bestelako kezkak help_page: welcome: url: /welcome @@ -552,6 +575,9 @@ eu: help: url: https://help.openstreetmap.org/ title: help.openstreetmap.org + wiki: + url: http://wiki.openstreetmap.org/wiki/Eu:Main_Page + title: wiki.openstreetmap.org about_page: next: Hurrengoa notifier: @@ -561,6 +587,8 @@ eu: hi: Kaixo %{to_user}, gpx_notification: greeting: Kaixo, + signup_confirm: + subject: '[OpenStreetMap] Ongi etorri OpenStreetMapera' email_confirm: subject: '[OpenStreetMap] Baieztatu zure eposta helbidea' email_confirm_plain: @@ -626,6 +654,7 @@ eu: motorway: Autobidea primary: Lehen mailako errepidea secondary: Bigarren mailako errepidea + unclassified: Sailkatu gabeko errepidea rail: Trenbidea subway: Metroa tram: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 24d94dcd1..c1125476e 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -2211,9 +2211,9 @@ fi: notes: new: intro: Huomasitko virheen tai puuttuvan kohteen? Ilmoita siitä muille kartoittajille, - jolloin voimme korjata asian. Siirrä merkkipiste oikeaan kohtaan ja kirjoita - selite ongelmasta. (Älä kirjoita yksityistietojasi tai tietoa tekijänoikeudella - suojatuista kartoista tai kansiolistoista.) + jolloin virhe voidaan korjata. Siirrä merkkipiste oikeaan kohtaan ja kirjoita + selite ongelmasta. (Älä kirjoita henkilötietojasi tai tietoa tekijänoikeudella + suojatuista kartoista tai muista lähteistä.) add: Lähetä ilmoitus show: anonymous_warning: Tässä karttailmoituksessa on kommentteja tunnistautumattomilta diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 7f4c599e4..0bec4d6e7 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -2146,6 +2146,7 @@ ko: subscribe: 구독 unsubscribe: 구독 해지 hide_comment: 숨기기 + unhide_comment: 숨기기 취소 notes: new: intro: 실수했거나 없는 무언가를 발견했나요? 다른 매퍼에게 알려주어 고칠 수 있게 해주세요. 마커를 올바른 위치로 옮기고, 참고를 @@ -2163,6 +2164,7 @@ ko: node: 노드 way: 길 relation: 관계 + nothing_found: 기능을 찾을 수 없습니다 redaction: edit: description: 설명 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 160e55fe0..e0702b945 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -54,7 +54,7 @@ lt: body: Tekstas diary_entry: user: Naudotojas - title: Pavadinimas + title: Antraštė latitude: Platuma longitude: Ilguma language: Kalba @@ -97,13 +97,62 @@ lt: name: nuotoliniu valdymu description: nuotolinį valdymą (JOSM arba Merkaartor) browse: + created: Sukurtas + closed: Uždarytas + created_html: Sukurtas prieš %{time} + closed_html: Uždarytas prieš %{time} + created_by_html: Sukurtas prieš %{time} naudotojo + %{user} + deleted_by_html: Ištrintas prieš %{time} naudotojo + %{user} + edited_by_html: Keistas prieš %{time} naudotojo + %{user} + closed_by_html: Uždarytas prieš %{time} naudotojo + %{user} + version: Versija + in_changeset: Pakeitimas + anonymous: anonimas + no_comment: (nėra komentaro) + part_of: Dalis + download_xml: Atsisiųsti XML + view_history: Žiūrėti istoriją + view_details: Žiūrėti detales + location: 'Vieta:' changeset: - title: Pakeitimas + title: 'Pakeitimas: %{id}' + belongs_to: Autorius + node: Taškų (%{count}) + node_paginated: Taškų (%{x}-%{y} iš %{count}) + way: Keliai (%{count}) + way_paginated: Keliai (%{x}-%{y} iš %{count}) + relation: Ryšiai (%{count}) + relation_paginated: Ryšiai (%{x}-%{y} iš %{count}) + comment: Komentarai (%{count}) + hidden_commented_by: Paslėptas naudotojo %{user} komentaras prieš + %{when} + commented_by: Naudotojo %{user} komentaras prieš + %{when} changesetxml: Pakeitimo XML osmchangexml: osmChange XML feed: title: Pakeitimas %{id} title_comment: Pakeitimas %{id} - %{comment} + join_discussion: Prisijunkite norėdami dalyvauti aptarime + discussion: Diskusija + node: + title: 'Taškas: %{name}' + history_title: 'Taško istorija: %{name}' + way: + title: 'Kelias: %{name}' + history_title: 'Kelio istorija: %{name}' + nodes: Taškai + also_part_of: + one: dalis kelio %{related_ways} + other: dalis kelių %{related_ways} + relation: + title: 'Ryšys: %{name}' + history_title: 'Ryšio istorija: %{name}' + members: Nariai relation_member: entry_role: '%{type} %{name} kaip %{role}' type: @@ -137,6 +186,8 @@ lt: way: kelias relation: ryšys start_rjs: + feature_warning: Įkeliami %{num_features} geoobjektai, todėl jūsų naršyklė gali + sulėtėti ir nesugebėti klausyti komandų. Ar tikrai norite rodyti šiuos duomenis? load_data: Kraunami duomenys loading: Kraunama... tag_details: @@ -145,11 +196,32 @@ lt: key: Žymos %{key} wiki aprašymo puslapis tag: Žymos %{key}=%{value} wiki aprašymo puslapis wikipedia_link: '%{page} straipsnis Vikipedijoje' + telephone_link: Skambinti %{phone_number} note: - title: Pastaba + title: 'Pastaba: %{id}' + new_note: Nauja pastaba description: Aprašymas open_title: 'Neišspręsta pastaba: %{note_name}' closed_title: 'Išspręsta pastaba: %{note_name}' + hidden_title: 'Paslėpta pastaba #%{note_name}' + open_by: Sukurta naudotojo %{user} prieš %{when} + open_by_anonymous: Sukurta anonimo prieš %{when} + commented_by: Naudotojo %{user} komentaras prieš + %{when} + commented_by_anonymous: Anonimo komentaras prieš + %{when} + closed_by: Išsprendė naudotojas %{user} prieš %{when} + closed_by_anonymous: Išsprendė anonimas prieš %{when} + reopened_by: Iš naujo aktyvavo naudotojas %{user} prieš + %{when} + reopened_by_anonymous: Iš naujo aktyvavo anonimas prieš + %{when} + hidden_by: Paslėpė naudotojas %{user} prieš %{when} + query: + title: Ieškoti geoobjektų + introduction: Spauskite ant žemėlapio, norėdami rasti gretimus objektus + nearby: Artimi objektai + enclosing: Gaubiantys objektai changeset: changeset_paging_nav: showing_page: Puslapis %{page} @@ -170,8 +242,22 @@ lt: title_user: Naudotojo %{user} pakeitimai title_friend: Jūsų draugų pakeitimai title_nearby: Netoliese esančių naudotojų pakeitimai + empty: Nerasta pakeitimų. + empty_area: Nėra šios vietos pakeitimų. + empty_user: Nėra šio naudotojo pakeitimų. + no_more: Daugiau pakeitimų nerasta. + no_more_area: Daugiau pakeitimų šioje vietoje nėra. + no_more_user: Daugiau šio naudotojo pakeitimų nėra. + load_more: Įkelti daugiau timeout: sorry: Atsiprašome, bet jūsų prašytų pakeitimų ištraukimas užtruko per ilgai. + rss: + title_all: OpenStreetMap pakeitimo aptarimas + title_particular: 'OpenStreetMap pakeitimo #%{changeset_id} aptarimas' + comment: 'Naujas pakeitimo #%{changeset_id} komentaras, parašytas %{author}' + commented_at_html: Pakeista prieš %{when} + commented_at_by_html: '%{user} pakeitė prieš %{when}' + full: Pilnas aptarimas diary_entry: new: title: Naujas dienoraščio įrašas @@ -248,6 +334,7 @@ lt: newer_comments: Naujesni komentarai older_comments: Senesni komentarai export: + title: Eksportuoti start: area_to_export: Eksportuotinas plotas manually_select: Rankiniu būdu parinkti kitą sritį @@ -259,8 +346,29 @@ lt: export_details: OpenStreetMap duomenų licencija - Open Data Commons Open Database License (ODbL). too_large: + advice: 'Jei aukščiau pateiktas eksportas nepavyko, pabandykite vieną iš žemiau + išvardintų šaltinių:' body: Ši sritis per didelė, kad būtų galima eksportuoti OpenStreetMap XML - duomenis. Parinkite mažesnę sritį. + duomenis. Padidinkite, parinkite mažesnę sritį arba naudokite vieną iš didelio + duomenų kiekio atsiuntimo šaltinių. + planet: + title: OSM planeta + description: Periodiškai atnaujinamos pilnos OpenStreetMap duomenų bazės + kopijos + overpass: + title: Overpass API + description: Atsisiųsti šią apimtį iš OpenStreetMap duombazės kopijos + geofabrik: + title: Geofabrik atsisiuntimai + description: Periodiškai atnaujinami kontinentų, šalių ir kai kurių miestų + duomenys. + metro: + title: Metro iškarpos + description: Pagrindinių pasaulio miestų ir aplinkinių teritorijų duomenų + iškarpos + other: + title: Kiti šaltiniai + description: Papildomi šaltiniai išvardinti OpenStreetMap wiki options: Parinktys format: Formatas scale: Mastelis @@ -284,6 +392,9 @@ lt: osm_nominatim: OpenStreetMap Nominatim rezultatai geonames: GeoNames rezultatai + osm_nominatim_reverse: Rezultatai iš OpenStreetMap + Nominatim + geonames_reverse: Rezultatai iš GeoNames search_osm_nominatim: prefix: aeroway: @@ -378,6 +489,7 @@ lt: shower: Dušas social_centre: Socialinių reikalų centras social_club: Socialinių reikalų klubas + social_facility: Socialinė įstaiga studio: Studija supermarket: Prekybos centras swimming_pool: Plaukiojimo baseinas diff --git a/config/locales/nl.yml b/config/locales/nl.yml index d5451830c..1f44345cb 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1738,14 +1738,14 @@ nl: lost password link: Wachtwoord vergeten? login_button: Aanmelden register now: Nu inschrijven - with username: 'Hebt u al een gebruiker bij OpenStreetMap? Meld aan met uw gebruikersnaam + with username: 'Hebt u al een account bij OpenStreetMap? Meld aan met uw gebruikersnaam en wachtwoord:' with openid: 'U kunt ook aanmelden met uw OpenID:' new to osm: Is OpenStreetMap nieuw voor u? to make changes: Om wijzigingen in OpenStreetMap te maken, moet u een gebruiker hebben. create account minute: Maak een gebruiker aan. Dat is snel gebeurd. - no account: Hebt u geen gebruiker? + no account: Hebt u geen account? account not active: Uw gebruiker is helaas nog niet actief.
Klik op de koppeling in de bevestiging om deze te activeren of vraag een nieuwe bevestiging per e-mail aan. diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 531120687..906a606ba 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -618,7 +618,7 @@ pt-BR: construction: Construção em progresso farm: Fazenda farmland: Área cultivada - farmyard: Curral + farmyard: Pátio de Fazenda forest: Floresta garages: Garagens grass: Gramado diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 59c680216..1c8ed0a97 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -2037,7 +2037,7 @@ zh-TW: layers: header: 地圖圖層 notes: 地圖筆記 - data: 地圖圖資 + data: 地圖資料 overlays: 啟用覆蓋層,以為地圖解決問題 title: 圖層 copyright: © OpenStreetMap貢獻者 From 16b875b271656e47ccf2dd0bf03b758a4ac312f8 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 26 Jan 2015 22:43:52 +0000 Subject: [PATCH 02/15] Fix broken interpolation --- config/locales/br.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/br.yml b/config/locales/br.yml index e57a00e5f..072eee83f 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -2269,7 +2269,7 @@ br: way: Hent relation: Darempred nothing_found: Arc'hweladur ebet kavet - error: Fazi o vont e daremmpred gant %{server}:%{fazi} + error: Fazi o vont e daremmpred gant %{server}:%{error} redaction: edit: description: Deskrivadur From 2f6f627a76a6783ba8dec0f933186e2251039b1d Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Sat, 31 Jan 2015 22:36:28 +0100 Subject: [PATCH 03/15] update list of key-value pairs for nominatim --- config/locales/en.yml | 98 ++++++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 87123f282..9424b7fde 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -375,8 +375,10 @@ en: prefix_format: "%{name}" prefix: aerialway: + cable_car: "Cable Car" chair_lift: "Chair Lift" drag_lift: "Drag Lift" + gondola: "Gondola Lift" station: "Aerialway Station" aeroway: aerodrome: "Aerodrome" @@ -387,11 +389,9 @@ en: taxiway: "Taxiway" terminal: "Terminal" amenity: - airport: "Airport" + animal_shelter: "Animal Shelter" arts_centre: "Arts Centre" - artwork: "Artwork" atm: "ATM" - auditorium: "Auditorium" bank: "Bank" bar: "Bar" bbq: "BBQ" @@ -399,6 +399,7 @@ en: bicycle_parking: "Cycle Parking" bicycle_rental: "Cycle Rental" biergarten: "Beer Garden" + boat_rental: "Boat Rental" brothel: "Brothel" bureau_de_change: "Bureau de Change" bus_station: "Bus Station" @@ -408,9 +409,10 @@ en: car_wash: "Car Wash" casino: "Casino" charging_station: "Charging Station" + childcare: "Childcare" cinema: "Cinema" clinic: "Clinic" - club: "Club" + clock: "Clock" college: "College" community_centre: "Community Centre" courthouse: "Courthouse" @@ -429,25 +431,25 @@ en: food_court: "Food Court" fountain: "Fountain" fuel: "Fuel" + gambling: "Gambling" grave_yard: "Grave Yard" gym: "Fitness Centre / Gym" - hall: "Hall" health_centre: "Health Centre" hospital: "Hospital" - hotel: "Hotel" hunting_stand: "Hunting Stand" ice_cream: "Ice Cream" kindergarten: "Kindergarten" library: "Library" market: "Market" marketplace: "Marketplace" - mountain_rescue: "Mountain Rescue" + monastery: "Monastery" + motorcycle_parking: "Motorcycle Parking" nightclub: "Night Club" nursery: "Nursery" nursing_home: "Nursing Home" office: "Office" - park: "Park" parking: "Parking" + parking_entrance: "Parking Entrance" pharmacy: "Pharmacy" place_of_worship: "Place of Worship" police: "Police" @@ -457,7 +459,6 @@ en: prison: "Prison" pub: "Pub" public_building: "Public Building" - public_market: "Public Market" reception_area: "Reception Area" recycling: "Recycling Point" restaurant: "Restaurant" @@ -466,13 +467,11 @@ en: school: "School" shelter: "Shelter" shop: "Shop" - shopping: "Shopping" shower: "Shower" social_centre: "Social Centre" social_club: "Social Club" social_facility: "Social Facility" studio: "Studio" - supermarket: "Supermarket" swimming_pool: "Swimming Pool" taxi: "Taxi" telephone: "Public Telephone" @@ -484,8 +483,7 @@ en: veterinary: "Veterinary Surgery" village_hall: "Village Hall" waste_basket: "Waste Basket" - wifi: "WiFi Access" - WLAN: "WiFi Access" + waste_disposal: "Waste Disposal" youth_centre: "Youth Centre" boundary: administrative: "Administrative Boundary" @@ -500,22 +498,35 @@ en: "yes": "Bridge" building: "yes": "Building" + craft: + brewery: "Brewery" + carpenter: "Carpenter" + electrician: "Electrician" + gardener: "Gardener" + painter: "Painter" + photographer: "Photographer" + plumber: "Plumber" + shoemaker: "Shoemaker" + tailor: "Tailor" + "yes": "Craft Shop" emergency: - fire_hydrant: "Fire Hydrant" + ambulance_station: "Ambulance Station" + defibrillator: "Defibrillator" + landing_site: "Emergency Landing Site" phone: "Emergency Phone" highway: + abandoned: "Abandoned Highway" bridleway: "Bridleway" bus_guideway: "Guided Bus Lane" bus_stop: "Bus Stop" - byway: "Byway" construction: "Highway under Construction" cycleway: "Cycle Path" + elevator: "Elevator" emergency_access_point: "Emergency Access Point" footway: "Footpath" ford: "Ford" living_street: "Living Street" milestone: "Milestone" - minor: "Minor Road" motorway: "Motorway" motorway_junction: "Motorway Junction" motorway_link: "Motorway Road" @@ -536,37 +547,44 @@ en: speed_camera: "Speed Camera" steps: "Steps" street_lamp: "Street Lamp" - stile: "Stile" tertiary: "Tertiary Road" tertiary_link: "Tertiary Road" track: "Track" + traffic_signals: "Traffic Signals" trail: "Trail" trunk: "Trunk Road" trunk_link: "Trunk Road" unclassified: "Unclassified Road" unsurfaced: "Unsurfaced Road" + "yes" : "Road" historic: archaeological_site: "Archaeological Site" battlefield: "Battlefield" boundary_stone: "Boundary Stone" - building: "Building" + building: "Historic Building" + bunker: "Bunker" castle: "Castle" church: "Church" + city_gate: "City Gate" citywalls: "City Walls" fort: "Fort" + heritage: "Heritage Site" house: "House" icon: "Icon" manor: "Manor" memorial: "Memorial" mine: "Mine" monument: "Monument" - museum: "Museum" + roman_road: "Roman Road" ruins: "Ruins" + stone: "Stone" tomb: "Tomb" tower: "Tower" wayside_cross: "Wayside Cross" wayside_shrine: "Wayside Shrine" wreck: "Wreck" + junction: + "yes": "Junction" landuse: allotments: "Allotments" basin: "Basin" @@ -588,9 +606,6 @@ en: military: "Military Area" mine: "Mine" orchard: "Orchard" - nature_reserve: "Nature Reserve" - park: "Park" - piste: "Piste" quarry: "Quarry" railway: "Railway" recreation_ground: "Recreation Ground" @@ -601,16 +616,19 @@ en: road: "Road Area" village_green: "Village Green" vineyard: "Vineyard" - wetland: "Wetland" - wood: "Wood" + "yes": "Landuse" leisure: beach_resort: "Beach Resort" bird_hide: "Bird Hide" + club: "Club" common: "Common Land" + dog_park: "Dog Park" fishing: "Fishing Area" + fitness_centre: "Fitness Centre" fitness_station: "Fitness Station" garden: "Garden" golf_course: "Golf Course" + horse_riding: "Horse Riding" ice_rink: "Ice Rink" marina: "Marina" miniature_golf: "Miniature Golf" @@ -619,6 +637,7 @@ en: pitch: "Sports Pitch" playground: "Playground" recreation_ground: "Recreation Ground" + resort: "Resort" sauna: "Sauna" slipway: "Slipway" sports_centre: "Sports Centre" @@ -626,6 +645,13 @@ en: swimming_pool: "Swimming Pool" track: "Running Track" water_park: "Water Park" + "yes": "Leisure" + man_made: + lighthouse: "Lighthouse" + pipeline: "Pipeline" + tower: "Tower" + works: "Factory" + "yes": "Man-made" military: airfield: "Military Airfield" barracks: "Barracks" @@ -637,16 +663,15 @@ en: beach: "Beach" cape: "Cape" cave_entrance: "Cave Entrance" - channel: "Channel" cliff: "Cliff" crater: "Crater" dune: "Dune" - feature: "Feature" fell: "Fell" fjord: "Fjord" forest: "Forest" geyser: "Geyser" glacier: "Glacier" + grassland: "Grassland" heath: "Heath" hill: "Hill" island: "Island" @@ -658,11 +683,11 @@ en: point: "Point" reef: "Reef" ridge: "Ridge" - river: "River" rock: "Rock" + saddle: "Saddle" + sand: "Sand" scree: "Scree" scrub: "Scrub" - shoal: "Shoal" spring: "Spring" stone: "Stone" strait: "Strait" @@ -671,10 +696,10 @@ en: volcano: "Volcano" water: "Water" wetland: "Wetland" - wetlands: "Wetlands" wood: "Wood" office: accountant: "Accountant" + administrative: "Admininstration" architect: "Architect" company: "Company" employment_agency: "Employment Agency" @@ -687,6 +712,8 @@ en: travel_agent: "Travel Agency" "yes": "Office" place: + allotments: "Allotments" + block: "Block" airport: "Airport" city: "City" country: "Country" @@ -711,6 +738,7 @@ en: town: "Town" unincorporated_area: "Unincorporated Area" village: "Village" + "yes": "Place" railway: abandoned: "Abandoned Railway" construction: "Railway under Construction" @@ -736,9 +764,6 @@ en: switch: "Railway Points" tram: "Tramway" tram_stop: "Tram Stop" - yard: "Railway Yard" - route: - bus: "Bus Route" shop: alcohol: "Off License" antiques: "Antiques" @@ -817,6 +842,7 @@ en: "yes": "Shop" tourism: alpine_hut: "Alpine Hut" + apartment: "Apartment" artwork: "Artwork" attraction: "Attraction" bed_and_breakfast: "Bed and Breakfast" @@ -824,16 +850,15 @@ en: camp_site: "Camp Site" caravan_site: "Caravan Site" chalet: "Chalet" + gallery: "Gallery" guest_house: "Guest House" hostel: "Hostel" hotel: "Hotel" information: "Information" - lean_to: "Lean To" motel: "Motel" museum: "Museum" picnic_site: "Picnic Site" theme_park: "Theme Park" - valley: "Valley" viewpoint: "Viewpoint" zoo: "Zoo" tunnel: @@ -843,7 +868,6 @@ en: artificial: "Artificial Waterway" boatyard: "Boatyard" canal: "Canal" - connector: "Waterway Connector" dam: "Dam" derelict_canal: "Derelict Canal" ditch: "Ditch" @@ -851,16 +875,14 @@ en: drain: "Drain" lock: "Lock" lock_gate: "Lock Gate" - mineral_spring: "Mineral Spring" mooring: "Mooring" rapids: "Rapids" river: "River" - riverbank: "Riverbank" stream: "Stream" wadi: "Wadi" waterfall: "Waterfall" - water_point: "Water Point" weir: "Weir" + "yes": "Waterway" admin_levels: level2: "Country Boundary" level4: "State Boundary" From d423ae91370b08dcad6ccba041c2e234659531ec Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 10:15:00 +0000 Subject: [PATCH 04/15] Default background for input fields to white Some browsers apparently default form fields to a background based on the desktop theme, and don't inherit from body. Fixes #883 --- app/assets/stylesheets/common.css.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/common.css.scss b/app/assets/stylesheets/common.css.scss index 0ca782ed5..7038bb69c 100644 --- a/app/assets/stylesheets/common.css.scss +++ b/app/assets/stylesheets/common.css.scss @@ -1871,6 +1871,7 @@ input[type="email"], input[type="url"], input[type="password"], textarea { + background-color: #fff; border: 1px solid #ccc; padding: 2px 5px; margin: 0; From 17f926fefb1329aaa41a64634d17d1dffd3ddba5 Mon Sep 17 00:00:00 2001 From: Thijs Alkemade Date: Sun, 1 Feb 2015 10:33:01 +0000 Subject: [PATCH 05/15] Fix two issues with the remember_me_openid button 1. It didn't work, the code only checked the remember_me button, not the remember_me_openid button. 2. It did not have a unique id, making the label next to it not work for selecting the checkbox. --- app/controllers/user_controller.rb | 3 ++- app/views/user/login.html.erb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index a7bf53824..ea50113e5 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -276,12 +276,13 @@ class UserController < ApplicationController def login if params[:username] or using_open_id? - session[:remember_me] ||= params[:remember_me] session[:referer] ||= params[:referer] if using_open_id? + session[:remember_me] ||= params[:remember_me_openid] openid_authentication(params[:openid_url]) else + session[:remember_me] ||= params[:remember_me] password_authentication(params[:username], params[:password]) end end diff --git a/app/views/user/login.html.erb b/app/views/user/login.html.erb index 051d270a4..a78916dcc 100644 --- a/app/views/user/login.html.erb +++ b/app/views/user/login.html.erb @@ -54,7 +54,7 @@ (<%= t 'user.account.openid.link text' %>) -
+
<%= check_box_tag "remember_me_openid", "yes", false, :tabindex => 5 %>
From 2452576333c8b0e76bf3a921d8321fbcc267f146 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 10:50:50 +0000 Subject: [PATCH 06/15] Drop redundant css extension from scss files --- app/assets/stylesheets/{browse.css.scss => browse.scss} | 0 app/assets/stylesheets/{common.css.scss => common.scss} | 0 app/assets/stylesheets/{embed.css.scss => embed.scss} | 0 .../stylesheets/{leaflet-all.css.scss => leaflet-all.scss} | 0 app/assets/stylesheets/ltr/common.css.scss | 1 - app/assets/stylesheets/ltr/common.scss | 1 + app/assets/stylesheets/ltr/small.css.scss | 1 - app/assets/stylesheets/ltr/small.scss | 1 + app/assets/stylesheets/rtl/common.css.r2.scss | 1 - app/assets/stylesheets/rtl/common.r2.scss | 1 + app/assets/stylesheets/rtl/small.css.r2.scss | 1 - app/assets/stylesheets/rtl/small.r2.scss | 1 + app/assets/stylesheets/{small.css.scss => small.scss} | 0 13 files changed, 4 insertions(+), 4 deletions(-) rename app/assets/stylesheets/{browse.css.scss => browse.scss} (100%) rename app/assets/stylesheets/{common.css.scss => common.scss} (100%) rename app/assets/stylesheets/{embed.css.scss => embed.scss} (100%) rename app/assets/stylesheets/{leaflet-all.css.scss => leaflet-all.scss} (100%) delete mode 120000 app/assets/stylesheets/ltr/common.css.scss create mode 120000 app/assets/stylesheets/ltr/common.scss delete mode 120000 app/assets/stylesheets/ltr/small.css.scss create mode 120000 app/assets/stylesheets/ltr/small.scss delete mode 120000 app/assets/stylesheets/rtl/common.css.r2.scss create mode 120000 app/assets/stylesheets/rtl/common.r2.scss delete mode 120000 app/assets/stylesheets/rtl/small.css.r2.scss create mode 120000 app/assets/stylesheets/rtl/small.r2.scss rename app/assets/stylesheets/{small.css.scss => small.scss} (100%) diff --git a/app/assets/stylesheets/browse.css.scss b/app/assets/stylesheets/browse.scss similarity index 100% rename from app/assets/stylesheets/browse.css.scss rename to app/assets/stylesheets/browse.scss diff --git a/app/assets/stylesheets/common.css.scss b/app/assets/stylesheets/common.scss similarity index 100% rename from app/assets/stylesheets/common.css.scss rename to app/assets/stylesheets/common.scss diff --git a/app/assets/stylesheets/embed.css.scss b/app/assets/stylesheets/embed.scss similarity index 100% rename from app/assets/stylesheets/embed.css.scss rename to app/assets/stylesheets/embed.scss diff --git a/app/assets/stylesheets/leaflet-all.css.scss b/app/assets/stylesheets/leaflet-all.scss similarity index 100% rename from app/assets/stylesheets/leaflet-all.css.scss rename to app/assets/stylesheets/leaflet-all.scss diff --git a/app/assets/stylesheets/ltr/common.css.scss b/app/assets/stylesheets/ltr/common.css.scss deleted file mode 120000 index b8c328296..000000000 --- a/app/assets/stylesheets/ltr/common.css.scss +++ /dev/null @@ -1 +0,0 @@ -../common.css.scss \ No newline at end of file diff --git a/app/assets/stylesheets/ltr/common.scss b/app/assets/stylesheets/ltr/common.scss new file mode 120000 index 000000000..85037a3c7 --- /dev/null +++ b/app/assets/stylesheets/ltr/common.scss @@ -0,0 +1 @@ +../common.scss \ No newline at end of file diff --git a/app/assets/stylesheets/ltr/small.css.scss b/app/assets/stylesheets/ltr/small.css.scss deleted file mode 120000 index f08fdd55f..000000000 --- a/app/assets/stylesheets/ltr/small.css.scss +++ /dev/null @@ -1 +0,0 @@ -../small.css.scss \ No newline at end of file diff --git a/app/assets/stylesheets/ltr/small.scss b/app/assets/stylesheets/ltr/small.scss new file mode 120000 index 000000000..f3fd1a025 --- /dev/null +++ b/app/assets/stylesheets/ltr/small.scss @@ -0,0 +1 @@ +../small.scss \ No newline at end of file diff --git a/app/assets/stylesheets/rtl/common.css.r2.scss b/app/assets/stylesheets/rtl/common.css.r2.scss deleted file mode 120000 index b8c328296..000000000 --- a/app/assets/stylesheets/rtl/common.css.r2.scss +++ /dev/null @@ -1 +0,0 @@ -../common.css.scss \ No newline at end of file diff --git a/app/assets/stylesheets/rtl/common.r2.scss b/app/assets/stylesheets/rtl/common.r2.scss new file mode 120000 index 000000000..85037a3c7 --- /dev/null +++ b/app/assets/stylesheets/rtl/common.r2.scss @@ -0,0 +1 @@ +../common.scss \ No newline at end of file diff --git a/app/assets/stylesheets/rtl/small.css.r2.scss b/app/assets/stylesheets/rtl/small.css.r2.scss deleted file mode 120000 index f08fdd55f..000000000 --- a/app/assets/stylesheets/rtl/small.css.r2.scss +++ /dev/null @@ -1 +0,0 @@ -../small.css.scss \ No newline at end of file diff --git a/app/assets/stylesheets/rtl/small.r2.scss b/app/assets/stylesheets/rtl/small.r2.scss new file mode 120000 index 000000000..f3fd1a025 --- /dev/null +++ b/app/assets/stylesheets/rtl/small.r2.scss @@ -0,0 +1 @@ +../small.scss \ No newline at end of file diff --git a/app/assets/stylesheets/small.css.scss b/app/assets/stylesheets/small.scss similarity index 100% rename from app/assets/stylesheets/small.css.scss rename to app/assets/stylesheets/small.scss From 959a076b50b5bce5e5d0360c80b59cbe62e3955f Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 11:29:38 +0000 Subject: [PATCH 07/15] Add some padding to select elements --- app/assets/stylesheets/common.scss | 4 + db/structure.sql | 142 ++++++++++++----------------- 2 files changed, 62 insertions(+), 84 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 7038bb69c..36e0278e6 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1861,6 +1861,10 @@ header .search_form { display: block; } +select { + padding: 2px; +} + input[type="checkbox"], input[type="radio"] { margin-right: 5px; diff --git a/db/structure.sql b/db/structure.sql index 5d52a87be..8e76de516 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -45,7 +45,8 @@ SET search_path = public, pg_catalog; CREATE TYPE format_enum AS ENUM ( 'html', - 'markdown' + 'markdown', + 'text' ); @@ -119,33 +120,6 @@ CREATE TYPE user_status_enum AS ENUM ( ); --- --- Name: maptile_for_point(bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION maptile_for_point(bigint, bigint, integer) RETURNS integer - LANGUAGE c STRICT - AS '/srv/www/next.osm.compton.nu/db/functions/libpgosm.so', 'maptile_for_point'; - - --- --- Name: tile_for_point(integer, integer); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION tile_for_point(integer, integer) RETURNS bigint - LANGUAGE c STRICT - AS '/srv/www/next.osm.compton.nu/db/functions/libpgosm.so', 'tile_for_point'; - - --- --- Name: xid_to_int4(xid); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION xid_to_int4(xid) RETURNS integer - LANGUAGE c IMMUTABLE STRICT - AS '/srv/www/next.osm.compton.nu/db/functions/libpgosm.so', 'xid_to_int4'; - - SET default_tablespace = ''; SET default_with_oids = false; @@ -157,9 +131,9 @@ SET default_with_oids = false; CREATE TABLE acls ( id integer NOT NULL, address inet, - k character varying(255) NOT NULL, - v character varying(255), - domain character varying(255) + k character varying NOT NULL, + v character varying, + domain character varying ); @@ -221,8 +195,8 @@ ALTER SEQUENCE changeset_comments_id_seq OWNED BY changeset_comments.id; CREATE TABLE changeset_tags ( changeset_id bigint NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL ); @@ -278,10 +252,10 @@ CREATE TABLE changesets_subscribers ( CREATE TABLE client_applications ( id integer NOT NULL, - name character varying(255), - url character varying(255), - support_url character varying(255), - callback_url character varying(255), + name character varying, + url character varying, + support_url character varying, + callback_url character varying, key character varying(50), secret character varying(50), user_id integer, @@ -322,8 +296,8 @@ ALTER SEQUENCE client_applications_id_seq OWNED BY client_applications.id; CREATE TABLE current_node_tags ( node_id bigint NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL ); @@ -370,7 +344,7 @@ CREATE TABLE current_relation_members ( relation_id bigint NOT NULL, member_type nwr_enum NOT NULL, member_id bigint NOT NULL, - member_role character varying(255) NOT NULL, + member_role character varying NOT NULL, sequence_id integer DEFAULT 0 NOT NULL ); @@ -381,8 +355,8 @@ CREATE TABLE current_relation_members ( CREATE TABLE current_relation_tags ( relation_id bigint NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL ); @@ -435,8 +409,8 @@ CREATE TABLE current_way_nodes ( CREATE TABLE current_way_tags ( way_id bigint NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL ); @@ -514,13 +488,13 @@ ALTER SEQUENCE diary_comments_id_seq OWNED BY diary_comments.id; CREATE TABLE diary_entries ( id bigint NOT NULL, user_id bigint NOT NULL, - title character varying(255) NOT NULL, + title character varying NOT NULL, body text NOT NULL, created_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL, latitude double precision, longitude double precision, - language_code character varying(255) DEFAULT 'en'::character varying NOT NULL, + language_code character varying DEFAULT 'en'::character varying NOT NULL, visible boolean DEFAULT true NOT NULL, body_format format_enum DEFAULT 'markdown'::format_enum NOT NULL ); @@ -596,7 +570,7 @@ CREATE TABLE gps_points ( CREATE TABLE gpx_file_tags ( gpx_id bigint DEFAULT 0 NOT NULL, - tag character varying(255) NOT NULL, + tag character varying NOT NULL, id bigint NOT NULL ); @@ -628,12 +602,12 @@ CREATE TABLE gpx_files ( id bigint NOT NULL, user_id bigint NOT NULL, visible boolean DEFAULT true NOT NULL, - name character varying(255) DEFAULT ''::character varying NOT NULL, + name character varying DEFAULT ''::character varying NOT NULL, size bigint, latitude double precision, longitude double precision, "timestamp" timestamp without time zone NOT NULL, - description character varying(255) DEFAULT ''::character varying NOT NULL, + description character varying DEFAULT ''::character varying NOT NULL, inserted boolean NOT NULL, visibility gpx_visibility_enum DEFAULT 'public'::gpx_visibility_enum NOT NULL ); @@ -663,9 +637,9 @@ ALTER SEQUENCE gpx_files_id_seq OWNED BY gpx_files.id; -- CREATE TABLE languages ( - code character varying(255) NOT NULL, - english_name character varying(255) NOT NULL, - native_name character varying(255) + code character varying NOT NULL, + english_name character varying NOT NULL, + native_name character varying ); @@ -676,7 +650,7 @@ CREATE TABLE languages ( CREATE TABLE messages ( id bigint NOT NULL, from_user_id bigint NOT NULL, - title character varying(255) NOT NULL, + title character varying NOT NULL, body text NOT NULL, sent_on timestamp without time zone NOT NULL, message_read boolean DEFAULT false NOT NULL, @@ -713,8 +687,8 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id; CREATE TABLE node_tags ( node_id bigint NOT NULL, version bigint NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL ); @@ -740,7 +714,7 @@ CREATE TABLE nodes ( -- CREATE TABLE note_comments ( - id integer NOT NULL, + id bigint NOT NULL, note_id bigint NOT NULL, visible boolean NOT NULL, created_at timestamp without time zone NOT NULL, @@ -775,7 +749,7 @@ ALTER SEQUENCE note_comments_id_seq OWNED BY note_comments.id; -- CREATE TABLE notes ( - id integer NOT NULL, + id bigint NOT NULL, latitude integer NOT NULL, longitude integer NOT NULL, tile bigint NOT NULL, @@ -811,7 +785,7 @@ ALTER SEQUENCE notes_id_seq OWNED BY notes.id; CREATE TABLE oauth_nonces ( id integer NOT NULL, - nonce character varying(255), + nonce character varying, "timestamp" integer, created_at timestamp without time zone, updated_at timestamp without time zone @@ -858,9 +832,9 @@ CREATE TABLE oauth_tokens ( allow_write_api boolean DEFAULT false NOT NULL, allow_read_gpx boolean DEFAULT false NOT NULL, allow_write_gpx boolean DEFAULT false NOT NULL, - callback_url character varying(255), + callback_url character varying, verifier character varying(20), - scope character varying(255), + scope character varying, valid_to timestamp without time zone, allow_write_notes boolean DEFAULT false NOT NULL ); @@ -891,10 +865,10 @@ ALTER SEQUENCE oauth_tokens_id_seq OWNED BY oauth_tokens.id; CREATE TABLE redactions ( id integer NOT NULL, - title character varying(255), + title character varying, description text, - created_at timestamp without time zone NOT NULL, - updated_at timestamp without time zone NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone, user_id bigint NOT NULL, description_format format_enum DEFAULT 'markdown'::format_enum NOT NULL ); @@ -927,7 +901,7 @@ CREATE TABLE relation_members ( relation_id bigint DEFAULT 0 NOT NULL, member_type nwr_enum NOT NULL, member_id bigint NOT NULL, - member_role character varying(255) NOT NULL, + member_role character varying NOT NULL, version bigint DEFAULT 0 NOT NULL, sequence_id integer DEFAULT 0 NOT NULL ); @@ -939,8 +913,8 @@ CREATE TABLE relation_members ( CREATE TABLE relation_tags ( relation_id bigint DEFAULT 0 NOT NULL, - k character varying(255) DEFAULT ''::character varying NOT NULL, - v character varying(255) DEFAULT ''::character varying NOT NULL, + k character varying DEFAULT ''::character varying NOT NULL, + v character varying DEFAULT ''::character varying NOT NULL, version bigint NOT NULL ); @@ -964,7 +938,7 @@ CREATE TABLE relations ( -- CREATE TABLE schema_migrations ( - version character varying(255) NOT NULL + version character varying NOT NULL ); @@ -1011,8 +985,8 @@ ALTER SEQUENCE user_blocks_id_seq OWNED BY user_blocks.id; CREATE TABLE user_preferences ( user_id bigint NOT NULL, - k character varying(255) NOT NULL, - v character varying(255) NOT NULL + k character varying NOT NULL, + v character varying NOT NULL ); @@ -1023,9 +997,9 @@ CREATE TABLE user_preferences ( CREATE TABLE user_roles ( id integer NOT NULL, user_id bigint NOT NULL, + role user_role_enum NOT NULL, created_at timestamp without time zone, updated_at timestamp without time zone, - role user_role_enum NOT NULL, granter_id bigint NOT NULL ); @@ -1056,7 +1030,7 @@ ALTER SEQUENCE user_roles_id_seq OWNED BY user_roles.id; CREATE TABLE user_tokens ( id bigint NOT NULL, user_id bigint NOT NULL, - token character varying(255) NOT NULL, + token character varying NOT NULL, expiry timestamp without time zone NOT NULL, referer text ); @@ -1086,36 +1060,36 @@ ALTER SEQUENCE user_tokens_id_seq OWNED BY user_tokens.id; -- CREATE TABLE users ( - email character varying(255) NOT NULL, + email character varying NOT NULL, id bigint NOT NULL, - pass_crypt character varying(255) NOT NULL, + pass_crypt character varying NOT NULL, creation_time timestamp without time zone NOT NULL, - display_name character varying(255) DEFAULT ''::character varying NOT NULL, + display_name character varying DEFAULT ''::character varying NOT NULL, data_public boolean DEFAULT false NOT NULL, description text DEFAULT ''::text NOT NULL, home_lat double precision, home_lon double precision, home_zoom smallint DEFAULT 3, nearby integer DEFAULT 50, - pass_salt character varying(255), + pass_salt character varying, image_file_name text, email_valid boolean DEFAULT false NOT NULL, - new_email character varying(255), - creation_ip character varying(255), - languages character varying(255), + new_email character varying, + creation_ip character varying, + languages character varying, status user_status_enum DEFAULT 'pending'::user_status_enum NOT NULL, terms_agreed timestamp without time zone, consider_pd boolean DEFAULT false NOT NULL, - openid_url character varying(255), - preferred_editor character varying(255), + openid_url character varying, + preferred_editor character varying, terms_seen boolean DEFAULT false NOT NULL, - image_fingerprint character varying(255), description_format format_enum DEFAULT 'markdown'::format_enum NOT NULL, + image_fingerprint character varying, changesets_count integer DEFAULT 0 NOT NULL, traces_count integer DEFAULT 0 NOT NULL, diary_entries_count integer DEFAULT 0 NOT NULL, image_use_gravatar boolean DEFAULT true NOT NULL, - image_content_type character varying(255) + image_content_type character varying ); @@ -1156,8 +1130,8 @@ CREATE TABLE way_nodes ( CREATE TABLE way_tags ( way_id bigint DEFAULT 0 NOT NULL, - k character varying(255) NOT NULL, - v character varying(255) NOT NULL, + k character varying NOT NULL, + v character varying NOT NULL, version bigint NOT NULL ); From 44a0835487875777401342b16fee73da68589cf5 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 12:15:49 +0000 Subject: [PATCH 08/15] Move routing "Go" button up alongside the dropdown --- app/assets/stylesheets/common.scss | 5 +++++ app/views/layouts/_search.html.erb | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index ff16ad66b..b7ba464c0 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -990,6 +990,11 @@ header .search_forms, margin: 0px 0px 5px 25px; } + input.routing_go { + min-width: 100px; + float: right; + } + div.line { width: 100%; margin: 0px 0px 5px 0px; diff --git a/app/views/layouts/_search.html.erb b/app/views/layouts/_search.html.erb index 02d6406cf..065190bd5 100644 --- a/app/views/layouts/_search.html.erb +++ b/app/views/layouts/_search.html.erb @@ -12,15 +12,18 @@
<%= link_to tag('span', { :class => "icon close"}), root_path, { :title => t('site.search.close_directions_title'), :class => "directions_close" } %>
- <%= image_tag "marker-green.png", :class => 'routing_marker', :id => 'marker_from', :draggable => 'true' %> + <%= image_tag "marker-green.png", :class => "routing_marker", :id => "marker_from", :draggable => "true" %> <%= text_field_tag "route_from", params[:from], :placeholder => t('site.search.from') %>
- <%= image_tag "marker-red.png" , :class => 'routing_marker', :id => 'marker_to' , :draggable => 'true' %> + <%= image_tag "marker-red.png", :class => "routing_marker", :id => "marker_to", :draggable => "true" %> <%= text_field_tag "route_to" , params[:to] , :placeholder => t('site.search.to') %>
- -
<%= submit_tag t('site.search.submit_text') %>
+
+ + <%= submit_tag t('site.search.submit_text'), :class => "routing_go" %> +
+
From a2527b79ff226c2ea7d5fc91552202a98e143bf1 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 12:50:17 +0000 Subject: [PATCH 09/15] Clear old routes when the route panel is reopened --- app/assets/javascripts/index/directions.js.erb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/index/directions.js.erb b/app/assets/javascripts/index/directions.js.erb index 93767612b..d18fba65b 100644 --- a/app/assets/javascripts/index/directions.js.erb +++ b/app/assets/javascripts/index/directions.js.erb @@ -55,12 +55,13 @@ OSM.Directions = function (map) { // make text the same in both text boxes var value = e.target.value; endpoint.setValue(value) - endpoint.getGeocode(); }); endpoint.setValue = function(value) { endpoint.value = value; + delete endpoint.latlng; input.val(value); + endpoint.getGeocode(); } endpoint.getGeocode = function() { @@ -338,6 +339,10 @@ OSM.Directions = function (map) { if (params.from) { endpoints[0].setValue(params.from); + endpoints[1].setValue(""); + } else { + endpoints[0].setValue(""); + endpoints[1].setValue(""); } var o = route[0] && L.latLng(route[0].split(',')), From 41af7f5ea79889da3a462a90f4fcdc01c31ba0cc Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 12:54:56 +0000 Subject: [PATCH 10/15] Remove unused images --- app/assets/images/search.png | Bin 391 -> 0 bytes app/assets/images/searching-small.gif | Bin 1849 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/assets/images/search.png delete mode 100644 app/assets/images/searching-small.gif diff --git a/app/assets/images/search.png b/app/assets/images/search.png deleted file mode 100644 index 15cc32e47397c475206dbf0fb23ece25edbce1e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)RNVGs1=>t(+8lZ(-xNi;1Ar&z5_cD%b$72x6NS2ND{rqju z08t_iQBI;+k+VL((*iU&ojl-Tf;k5`(Ao5h2i#0B#2|a9q}lvn`mMBaBg!2> z2jB;QbZwJB<8Pbm0PFz7)+Cx1z{|!rFQu{wx>rfl0$6Q)_dwaPgKjPA^H=un&sy@z z-aW^8_z0=vz~ZVw4LDi_oT-#5G%vrST4oLE{UoY?8xQ)0kWl~t002ovPDHLkV1kGLq;LQL diff --git a/app/assets/images/searching-small.gif b/app/assets/images/searching-small.gif deleted file mode 100644 index 06dbc2bc21dddcf0e09b566d5b211aee89570f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% From 30a39b35e55e0b83d3261720eecfa94ed769d6e3 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 12:56:51 +0000 Subject: [PATCH 11/15] Rename directions_engines to directions --- app/assets/javascripts/index/directions.js.erb | 2 +- .../index/{directions_engines => directions}/graphhopper.js | 0 .../index/{directions_engines => directions}/mapquest.js | 0 .../index/{directions_engines => directions}/osrm.js | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename app/assets/javascripts/index/{directions_engines => directions}/graphhopper.js (100%) rename app/assets/javascripts/index/{directions_engines => directions}/mapquest.js (100%) rename app/assets/javascripts/index/{directions_engines => directions}/osrm.js (100%) diff --git a/app/assets/javascripts/index/directions.js.erb b/app/assets/javascripts/index/directions.js.erb index d18fba65b..72299ea1d 100644 --- a/app/assets/javascripts/index/directions.js.erb +++ b/app/assets/javascripts/index/directions.js.erb @@ -1,5 +1,5 @@ //= require_self -//= require_tree ./directions_engines +//= require_tree ./directions OSM.Directions = function (map) { var awaitingGeocode; // true if the user has requested a route, but we're waiting on a geocode result diff --git a/app/assets/javascripts/index/directions_engines/graphhopper.js b/app/assets/javascripts/index/directions/graphhopper.js similarity index 100% rename from app/assets/javascripts/index/directions_engines/graphhopper.js rename to app/assets/javascripts/index/directions/graphhopper.js diff --git a/app/assets/javascripts/index/directions_engines/mapquest.js b/app/assets/javascripts/index/directions/mapquest.js similarity index 100% rename from app/assets/javascripts/index/directions_engines/mapquest.js rename to app/assets/javascripts/index/directions/mapquest.js diff --git a/app/assets/javascripts/index/directions_engines/osrm.js b/app/assets/javascripts/index/directions/osrm.js similarity index 100% rename from app/assets/javascripts/index/directions_engines/osrm.js rename to app/assets/javascripts/index/directions/osrm.js From 6f762ae184385413e142e5b2b1e4399007dc8a67 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 14:10:15 +0000 Subject: [PATCH 12/15] Set foreground colour for input fields --- app/assets/stylesheets/common.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 36e0278e6..c807cd311 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1,4 +1,4 @@ -@import "parameters"; +>@import "parameters"; /* Styles common to large and small screens */ @@ -1875,6 +1875,7 @@ input[type="email"], input[type="url"], input[type="password"], textarea { + color: #222; background-color: #fff; border: 1px solid #ccc; padding: 2px 5px; From c093aa481b94e4dc976716a81337355dacabe7c3 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 14:18:16 +0000 Subject: [PATCH 13/15] Remove typo --- app/assets/stylesheets/common.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index c807cd311..42616fadb 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1,4 +1,4 @@ ->@import "parameters"; +@import "parameters"; /* Styles common to large and small screens */ From fb70a89a36e42a7e439e4e99e449a109d0c3cd86 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 14:50:18 +0000 Subject: [PATCH 14/15] There is no routing.js to compile --- config/initializers/assets.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index ef7efcbb9..df86f2b9d 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -10,7 +10,6 @@ Rails.application.config.assets.version = '1.0' # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. Rails.application.config.assets.precompile += %w( index.js browse.js welcome.js fixthemap.js ) Rails.application.config.assets.precompile += %w( user.js diary_entry.js ) -Rails.application.config.assets.precompile += %w( routing.js ) Rails.application.config.assets.precompile += %w( large-ltr.css small-ltr.css print-ltr.css ) Rails.application.config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css ) Rails.application.config.assets.precompile += %w( leaflet-all.css leaflet.ie.css ) From 8adb0846b4834e393eafc68406b5391d7881da83 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 1 Feb 2015 15:09:15 +0000 Subject: [PATCH 15/15] Update to latest upstream polyline decoder --- Vendorfile | 4 + .../javascripts/index/directions/osrm.js | 8 +- vendor/assets/leaflet/leaflet.polyline.js | 322 ++++++++++++------ 3 files changed, 222 insertions(+), 112 deletions(-) mode change 100755 => 100644 vendor/assets/leaflet/leaflet.polyline.js diff --git a/Vendorfile b/Vendorfile index 6468d5067..7da31ce46 100644 --- a/Vendorfile +++ b/Vendorfile @@ -33,6 +33,10 @@ folder 'vendor/assets' do from 'git://github.com/jfirebaugh/leaflet-osm.git' do file 'leaflet.osm.js', 'leaflet-osm.js' end + + from 'git://github.com/jieter/Leaflet.encoded.git' do + file 'leaflet.polyline.js', 'Polyline.encoded.js' + end end folder 'ohauth' do diff --git a/app/assets/javascripts/index/directions/osrm.js b/app/assets/javascripts/index/directions/osrm.js index 69b78c25e..00ef24d6f 100644 --- a/app/assets/javascripts/index/directions/osrm.js +++ b/app/assets/javascripts/index/directions/osrm.js @@ -54,11 +54,9 @@ function OSRMEngine() { previousPoints = points; hintData = data.hint_data; - var line = L.PolylineUtil.decode(data.route_geometry); - for (var i = 0; i < line.length; i++) { - line[i].lat /= 10; - line[i].lng /= 10; - } + var line = L.PolylineUtil.decode(data.route_geometry, { + precision: 6 + }); var steps = []; for (i = 0; i < data.route_instructions.length; i++) { diff --git a/vendor/assets/leaflet/leaflet.polyline.js b/vendor/assets/leaflet/leaflet.polyline.js old mode 100755 new mode 100644 index b7e85d6c5..5f35ed0de --- a/vendor/assets/leaflet/leaflet.polyline.js +++ b/vendor/assets/leaflet/leaflet.polyline.js @@ -1,127 +1,235 @@ /* - * L.PolylineUtil contains utilify functions for polylines, two methods - * are added to the L.Polyline object to support creation of polylines - * from an encoded string and converting existing polylines to an - * encoded string. + * Utility functions to decode/encode numbers and array's of numbers + * to/from strings (Google maps polyline encoding) * - * - L.Polyline.fromEncoded(encoded [, options]) returns a L.Polyline - * - L.Polyline.encodePath() returns a string + * Extends the L.Polyline and L.Polygon object with methods to convert + * to and create from these strings. * - * Actual code from: - * http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/\ + * Jan Pieter Waagmeester + * + * Original code from: + * http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/ + * (which is down as of december 2014) */ -/*jshint browser:true, debug: true, strict:false, globalstrict:false, indent:4, white:true, smarttabs:true*/ -/*global L:true, console:true*/ +(function () { + 'use strict'; - -// Inject functionality into Leaflet -(function (L) { - if (!(L.Polyline.prototype.fromEncoded)) { - L.Polyline.fromEncoded = function (encoded, options) { - return new L.Polyline(L.PolylineUtil.decode(encoded), options); - }; - } - if (!(L.Polygon.prototype.fromEncoded)) { - L.Polygon.fromEncoded = function (encoded, options) { - return new L.Polygon(L.PolylineUtil.decode(encoded), options); - }; - } - - var encodeMixin = { - encodePath: function () { - return L.PolylineUtil.encode(this.getLatLngs()); + var defaultOptions = function (options) { + if (typeof options === 'number') { + // Legacy + options = { precision: options }; + } else { + options = options || {}; } + + options.precision = options.precision || 5; + options.factor = options.factor || Math.pow(10, options.precision); + options.dimension = options.dimension || 2; + return options; }; - if (!L.Polyline.prototype.encodePath) { - L.Polyline.include(encodeMixin); - } - if (!L.Polygon.prototype.encodePath) { - L.Polygon.include(encodeMixin); - } -})(L); + var PolylineUtil = { + encode: function (points, options) { + options = defaultOptions(options); -// Utility functions. -L.PolylineUtil = {}; + var flatPoints = []; + for (var i = 0, len = points.length; i < len; ++i) { + var point = points[i]; -L.PolylineUtil.encode = function (latlngs) { - var i, dlat, dlng; - var plat = 0; - var plng = 0; - var encoded_points = ""; + if (options.dimension === 2) { + flatPoints.push(point.lat || point[0]); + flatPoints.push(point.lng || point[1]); + } else { + for (var dim = 0; dim < options.dimension; ++dim) { + flatPoints.push(point[dim]); + } + } + } - for (i = 0; i < latlngs.length; i++) { - var lat = latlngs[i].lat; - var lng = latlngs[i].lng; - var late5 = Math.floor(lat * 1e5); - var lnge5 = Math.floor(lng * 1e5); - dlat = late5 - plat; - dlng = lnge5 - plng; - plat = late5; - plng = lnge5; - encoded_points += - L.PolylineUtil.encodeSignedNumber(dlat) + - L.PolylineUtil.encodeSignedNumber(dlng); - } - return encoded_points; -}; + return this.encodeDeltas(flatPoints, options); + }, -// This function is very similar to Google's, but I added -// some stuff to deal with the double slash issue. -L.PolylineUtil.encodeNumber = function (num) { - var encodeString = ""; - var nextValue, finalValue; - while (num >= 0x20) { - nextValue = (0x20 | (num & 0x1f)) + 63; - encodeString += (String.fromCharCode(nextValue)); - num >>= 5; - } - finalValue = num + 63; - encodeString += (String.fromCharCode(finalValue)); - return encodeString; -}; + decode: function (encoded, options) { + options = defaultOptions(options); -// This one is Google's verbatim. -L.PolylineUtil.encodeSignedNumber = function (num) { - var sgn_num = num << 1; - if (num < 0) { - sgn_num = ~(sgn_num); - } - return (L.PolylineUtil.encodeNumber(sgn_num)); -}; + var flatPoints = this.decodeDeltas(encoded, options); -L.PolylineUtil.decode = function (encoded) { - var len = encoded.length; - var index = 0; - var latlngs = []; - var lat = 0; - var lng = 0; + var points = []; + for (var i = 0, len = flatPoints.length; i + (options.dimension - 1) < len;) { + var point = []; - while (index < len) { - var b; - var shift = 0; - var result = 0; - do { - b = encoded.charCodeAt(index++) - 63; - result |= (b & 0x1f) << shift; - shift += 5; - } while (b >= 0x20); - var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); - lat += dlat; + for (var dim = 0; dim < options.dimension; ++dim) { + point.push(flatPoints[i++]); + } - shift = 0; - result = 0; - do { - b = encoded.charCodeAt(index++) - 63; - result |= (b & 0x1f) << shift; - shift += 5; - } while (b >= 0x20); - var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); - lng += dlng; + points.push(point); + } - latlngs.push(new L.LatLng(lat * 1e-5, lng * 1e-5)); + return points; + }, + + encodeDeltas: function(numbers, options) { + options = defaultOptions(options); + + var lastNumbers = []; + + for (var i = 0, len = numbers.length; i < len;) { + for (var d = 0; d < options.dimension; ++d, ++i) { + var num = numbers[i]; + var delta = num - (lastNumbers[d] || 0); + lastNumbers[d] = num; + + numbers[i] = delta; + } + } + + return this.encodeFloats(numbers, options); + }, + + decodeDeltas: function(encoded, options) { + options = defaultOptions(options); + + var lastNumbers = []; + + var numbers = this.decodeFloats(encoded, options); + for (var i = 0, len = numbers.length; i < len;) { + for (var d = 0; d < options.dimension; ++d, ++i) { + numbers[i] = lastNumbers[d] = numbers[i] + (lastNumbers[d] || 0); + } + } + + return numbers; + }, + + encodeFloats: function(numbers, options) { + options = defaultOptions(options); + + for (var i = 0, len = numbers.length; i < len; ++i) { + numbers[i] = Math.round(numbers[i] * options.factor); + } + + return this.encodeSignedIntegers(numbers); + }, + + decodeFloats: function(encoded, options) { + options = defaultOptions(options); + + var numbers = this.decodeSignedIntegers(encoded); + for (var i = 0, len = numbers.length; i < len; ++i) { + numbers[i] /= options.factor; + } + + return numbers; + }, + + /* jshint bitwise:false */ + + encodeSignedIntegers: function(numbers) { + for (var i = 0, len = numbers.length; i < len; ++i) { + var num = numbers[i]; + numbers[i] = (num < 0) ? ~(num << 1) : (num << 1); + } + + return this.encodeUnsignedIntegers(numbers); + }, + + decodeSignedIntegers: function(encoded) { + var numbers = this.decodeUnsignedIntegers(encoded); + + for (var i = 0, len = numbers.length; i < len; ++i) { + var num = numbers[i]; + numbers[i] = (num & 1) ? ~(num >> 1) : (num >> 1); + } + + return numbers; + }, + + encodeUnsignedIntegers: function(numbers) { + var encoded = ''; + for (var i = 0, len = numbers.length; i < len; ++i) { + encoded += this.encodeUnsignedInteger(numbers[i]); + } + return encoded; + }, + + decodeUnsignedIntegers: function(encoded) { + var numbers = []; + + var current = 0; + var shift = 0; + + for (var i = 0, len = encoded.length; i < len; ++i) { + var b = encoded.charCodeAt(i) - 63; + + current |= (b & 0x1f) << shift; + + if (b < 0x20) { + numbers.push(current); + current = 0; + shift = 0; + } else { + shift += 5; + } + } + + return numbers; + }, + + encodeSignedInteger: function (num) { + num = (num < 0) ? ~(num << 1) : (num << 1); + return this.encodeUnsignedInteger(num); + }, + + // This function is very similar to Google's, but I added + // some stuff to deal with the double slash issue. + encodeUnsignedInteger: function (num) { + var value, encoded = ''; + while (num >= 0x20) { + value = (0x20 | (num & 0x1f)) + 63; + encoded += (String.fromCharCode(value)); + num >>= 5; + } + value = num + 63; + encoded += (String.fromCharCode(value)); + + return encoded; + } + + /* jshint bitwise:true */ + }; + + // Export Node module + if (typeof module === 'object' && typeof module.exports === 'object') { + module.exports = PolylineUtil; } - return latlngs; -}; \ No newline at end of file + // Inject functionality into Leaflet + if (typeof L === 'object') { + if (!(L.Polyline.prototype.fromEncoded)) { + L.Polyline.fromEncoded = function (encoded, options) { + return new L.Polyline(PolylineUtil.decode(encoded), options); + }; + } + if (!(L.Polygon.prototype.fromEncoded)) { + L.Polygon.fromEncoded = function (encoded, options) { + return new L.Polygon(PolylineUtil.decode(encoded), options); + }; + } + + var encodeMixin = { + encodePath: function () { + return PolylineUtil.encode(this.getLatLngs()); + } + }; + + if (!L.Polyline.prototype.encodePath) { + L.Polyline.include(encodeMixin); + } + if (!L.Polygon.prototype.encodePath) { + L.Polygon.include(encodeMixin); + } + + L.PolylineUtil = PolylineUtil; + } +})();