From: Tom Hughes Date: Mon, 19 Apr 2010 20:05:54 +0000 (+0100) Subject: Merge branch 'master' into terms X-Git-Tag: live~6842^2~15 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/4b2ac2ea2b4f914a87537c099f699a5351f22d82?hp=9a9e13af901e9d66357135fb39b111fc9e26b3b2 Merge branch 'master' into terms --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..74094e8b3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +log +tmp diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index a77b0f94a..a511d67d3 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -86,11 +86,11 @@ private end rescue ActionView::TemplateError => ex if ex.original_exception.is_a?(Timeout::Error) - render :action => "timeout", :status => :request_timeout + render :action => "timeout" else raise end rescue Timeout::Error - render :action => "timeout", :status => :request_timeout + render :action => "timeout" end end diff --git a/app/models/user.rb b/app/models/user.rb index 0b8b512ee..f02c9a5cd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -85,7 +85,7 @@ class User < ActiveRecord::Base end def languages - attribute_present?(:languages) ? read_attribute(:languages).split(",") : [] + attribute_present?(:languages) ? read_attribute(:languages).split(/ *, */) : [] end def languages=(languages) diff --git a/app/views/geocoder/error.html.erb b/app/views/geocoder/error.html.erb index e2ce07b6e..c4b6f8964 100644 --- a/app/views/geocoder/error.html.erb +++ b/app/views/geocoder/error.html.erb @@ -1 +1 @@ -

<%= @error %>

+

<%= h(@error) %>

diff --git a/app/views/site/_key.html.erb b/app/views/site/_key.html.erb index 22261900d..e990071c8 100644 --- a/app/views/site/_key.html.erb +++ b/app/views/site/_key.html.erb @@ -17,7 +17,7 @@ } function updateMapKey() { - var layer = map.baseLayer.name.toLowerCase().replace(/\s+/g, "_"); + var layer = map.baseLayer.keyid; var zoom = map.getZoom(); <%= remote_function :update => "sidebar_content", diff --git a/config/.gitignore b/config/.gitignore new file mode 100644 index 000000000..b5649dd03 --- /dev/null +++ b/config/.gitignore @@ -0,0 +1 @@ +database.yml diff --git a/config/environments/test.rb b/config/environments/test.rb index 58850a797..a26b6ef92 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -20,3 +20,6 @@ config.action_controller.allow_forgery_protection = false # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test + +# Load timecop to help with testing time dependent code +config.gem 'timecop' diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 153e76665..8a0125175 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -3,6 +3,7 @@ # Export driver: syck # Author: Aude # Author: Bassem JARKAS +# Author: Grille chompa # Author: Mutarjem horr # Author: OsamaK ar: @@ -328,6 +329,10 @@ ar: recent_entries: "المدخلات اليومية الحديثة:" title: يوميات المستخدمين user_title: يومية {{user}} + location: + edit: عدّل + location: "الموقع:" + view: اعرض new: title: مدخلة يومية جديدة no_such_entry: @@ -367,6 +372,9 @@ ar: output: الخرج paste_html: ألصق HTML لتضمينه في موقع ما scale: القياس + too_large: + body: هذه المنطقة كبيرة جدًا للتصدير على هيئة بيانات إكس إم إل لخريطة الشارع المفتوحة. يرجى تكبير الخريطة أو استخدام منطقة أصغر. + heading: المنطقة كبيرة جدًا zoom: تكبير start_rjs: add_marker: أضف علامة على الخريطة @@ -852,13 +860,19 @@ ar: water_point: نقطة ماء شفة waterfall: شلال weir: هدار (سدّ منخفض) + html: + dir: rtl javascripts: map: base: cycle_map: خريطة للدراجات noname: التسمية غائبة site: + edit_disabled_tooltip: قم بالتكبير لتحرير الخريطة + edit_tooltip: عدّل الخريطة edit_zoom_alert: يجب عليك التكبير لتعديل الخريطة + history_disabled_tooltip: قم بالتكبير لعرض التعديلات في هذه المنطقة + history_tooltip: اعرض التعديلات في هذه المنطقة history_zoom_alert: يجب التكبير لرؤية تاريخ التعديل layouts: donate: ادعم خريطة الشارع المفتوحة ب{{link}} لتمويل ترقية العتاد. @@ -867,7 +881,7 @@ ar: export: صدِّر export_tooltip: صدّر بيانات الخريطة gps_traces: آثار جي بي أس - gps_traces_tooltip: عالج الآثار + gps_traces_tooltip: عالج آثار جي بي إس help_wiki: المساعدة والويكي help_wiki_tooltip: المساعدة وموقع الويكي للمشروع history: تاريخ @@ -908,7 +922,7 @@ ar: user_diaries: يوميات المستخدمين user_diaries_tooltip: اعرض يوميات المستخدمين view: اعرض - view_tooltip: اعرض الخرائط + view_tooltip: اعرض الخريطة welcome_user: مرحبًا بك، {{user_link}} welcome_user_link_tooltip: صفحة المستخدم الخاصة بك message: @@ -941,10 +955,14 @@ ar: send_message_to: أرسل رسالة جديدة إلى {{name}} subject: الموضوع title: أرسل رسالة + no_such_message: + body: عذرًا لا يوجد أي رسالة بهذا المعرف. + heading: لا توجد مثل هذه الرسالة + title: لا توجد مثل هذه الرسالة no_such_user: - body: عذرًا لا يوجد مستخدم أو رسالة بذلك الاسم أو المعرّف - heading: لا يوجد مستخدم أو رسالة - title: لا يوجد مستخدم أو رسالة + body: عذرًا لا يوجد مستخدم أو رسالة بذلك الاسم. + heading: لا يوجد مثل هذا المستخدم + title: لا يوجد مثل هذا المستخدم outbox: date: التاريخ inbox: صندوق البريد الوارد @@ -968,6 +986,9 @@ ar: title: اقرأ الرسالة to: إلى unread_button: علّم كغير مقروءة + wrong_user: أنت مسجل دخول باسم '{{user}}' ولكن الرسالة التي طلبت قراءتها لم تكن من أو إلى ذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد. + reply: + wrong_user: أنت مسجل دخول باسم '{{user}}' ولكن الرسالة التي طلبت الرد عليها لم تكن مرسلة لذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد. sent_message_summary: delete_button: احذف notifier: @@ -988,8 +1009,9 @@ ar: hopefully_you_1: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على hopefully_you_2: "{{server_url}} إلى {{new_address}}." friend_notification: + befriend_them: يمكنك أيضًا إضافتهم كصديق على {{befriendurl}}. had_added_you: "{{user}} قام بإضافتك كصديق على خريطة الشارع المفتوحة." - see_their_profile: يمكنك أن تشاهد ملفه الشخصي على {{userurl}} وإضافته كصديق أيضًا إن كنت ترغب في ذلك. + see_their_profile: يمكنك أن تشاهد ملفهم الشخصي على {{userurl}}. subject: "[خريطة الشارع المفتوحة] {{user}} أضافك كصديق." gpx_notification: and_no_tags: ولا يوجد سمات. @@ -1216,6 +1238,9 @@ ar: sidebar: close: أغلق search_results: نتائج البحث + time: + formats: + friendly: "%e %B %Y في %H:%M" trace: create: trace_uploaded: لقد تم تحميل ملفك الجي بي إكس ويتنظر الإدراج في قاعدة البيانات. وهذا يحدث عادًة خلال نصف ساعة، وسيتم إرسال رسالة إلكترونية لك عند الانتهاء. @@ -1318,15 +1343,20 @@ ar: user: account: current email address: "عنوان البريد الإلكرتروني الحالي:" + delete image: أزل الصورة الحالية email never displayed publicly: (لا يظهر علنًا) flash update success: تم تحديث معلومات المستخدم بنجاح. flash update success confirm needed: تم تحديث معلومات المستخدم بنجاح. تحقق من بريدك الإلكتروني لمذكرة تأكيد العنوان الإلكتروني الجديد. home location: "موقع المنزل:" + image: "الصورة:" + image size hint: (صورة مربعة على الأقل 100 × 100 تعمل بشكل أفضل) + keep image: احتفظ بالصورة الحالية latitude: "خط العرض:" longitude: "خط الطول:" make edits public button: اجعل جميع تعديلاتي عامة my settings: إعداداتي new email address: "عنوان البريد الإلكتروني الجديد:" + new image: أضف صورة no home location: لم تدخل موقع منزلك. preferred languages: "اللغات المفضّلة:" profile description: "وصف الملف الشخصي:" @@ -1340,6 +1370,7 @@ ar: public editing note: heading: تعديل عام text: حاليًا تعديلاتك تظهر بشكل مجهول ولا يمكن للناس إرسال رسائل لك أو رؤية موقعك. لإظهار ما قمت بتعديله وللسماح للناس بالاتصال بك من خلال الموقع، انقر على الزر أدناه. منذ التغيير إلى الأي بي أي 0.6، فقط المستخدمين العلنيين يمكنه تحرير بيانات الخريطة. (لمعرفة السبب). + replace image: استبدل الصورة الحالية return to profile: العودة إلى الملف الشخصي save changes button: احفظ التغييرات title: عدّل الحساب @@ -1370,7 +1401,12 @@ ar: lost password link: أنسيت كلمة المرور؟ password: "كلمة المرور:" please login: من فضلك لُج أو {{create_user_link}}. + remember: "تذكرني:" title: ولوج + logout: + heading: الخروج من خريطة الشارع المفتوحة + logout_button: اخرج + title: اخرج lost_password: email address: "عنوان البريد الإلكتروني:" heading: أنسيت كلمة المرور؟ @@ -1404,6 +1440,7 @@ ar: heading: المستخدم {{user}} غير موجود title: مستخدم غير موجود popup: + friend: صديق nearby mapper: مخطط بالجوار your location: موقعك remove_friend: @@ -1445,10 +1482,11 @@ ar: my edits: مساهماتي my settings: إعداداتي my traces: آثاري - nearby users: "مستخدمين بالجوار:" + nearby users: "مستخدمين أيضًا بالجوار:" new diary entry: مدخلة يومية جديدة no friends: لم تقم بإضافة أي أصدقاء بعد. - no nearby users: لا يوجد بعد مستخدمين أفصحوا عن تخطيطهم بالجوار. + no nearby users: لا يوجد بعد المزيد من المستخدمين أفصحوا عن تخطيطهم بالجوار. + oauth settings: إعدادات oauth remove as friend: أزل كصديق role: administrator: هذا المستخدم إداري diff --git a/config/locales/be-TARASK.yml b/config/locales/be-TARASK.yml index 39de27112..b41bed97c 100644 --- a/config/locales/be-TARASK.yml +++ b/config/locales/be-TARASK.yml @@ -3,6 +3,7 @@ # Export driver: syck # Author: EugeneZelenko # Author: Jim-by +# Author: Wizardist be-TARASK: activerecord: attributes: @@ -30,6 +31,8 @@ be-TARASK: version: "Вэрсія:" map: deleted: Выдаленая + larger: + way: Паказаць шлях на большай мапе loading: Загрузка… node: download_xml: Загрузіць XML @@ -76,6 +79,9 @@ be-TARASK: type: node: Вузел way: Шлях + wait: Пачакайце... + tag_details: + tags: "Меткі:" way: download: "{{download_xml_link}}, {{view_history_link}} ці {{edit_link}}" download_xml: Загрузіць XML @@ -89,6 +95,10 @@ be-TARASK: way_history: download_xml: Загрузіць XML view_details: паказаць падрабязнасьці + way_history_title: "Гісторыя зьменаў шляху: {{way_name}}" + changeset: + list: + description: Апошнія зьмены diary_entry: edit: language: "Мова:" @@ -110,9 +120,6 @@ be-TARASK: edit: Рэдагаваць export: Экспартаваць history: Гісторыя - map: - coordinates: "Каардынаты:" - edit: Рэдагаваць message: inbox: subject: Тэма @@ -132,6 +139,8 @@ be-TARASK: edit: submit: Рэдагаваць trace: + create: + upload_trace: Загрузіць GPS-трэк edit: description: "Апісаньне:" download: загрузіць @@ -168,8 +177,6 @@ be-TARASK: reset: Ачысьціць пароль title: Ачысьціць пароль view: - add image: Дадаць выяву - delete image: Выдаліць выяву description: Апісаньне edits: рэдагаваньні my settings: мае ўстаноўкі diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 47427fc54..76fbb74c5 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -4,6 +4,11 @@ # Author: DCLXVI bg: browse: + changeset_details: + belongs_to: "Принадлежи към:" + common_details: + changeset_comment: "Коментар:" + version: "Версия:" containing_relation: entry: Релация {{relation_name}} entry_role: Релация {{relation_name}} (като {{relation_role}}) @@ -31,6 +36,10 @@ bg: paging_nav: of: от showing_page: Показване на страница + relation: + download_xml: Изтегляне на XML + relation_details: + members: "Членове:" relation_history: download: "{{download_xml_link}} или {{view_details_link}}" download_xml: Изтегляне на XML @@ -39,6 +48,11 @@ bg: type: node: Възел relation: Релация + start_rjs: + details: Подробности + loading: Зареждане... + object_list: + details: Подробности way: download: "{{download_xml_link}}, {{view_history_link}} или {{edit_link}}" download_xml: Изтегляне на XML @@ -64,6 +78,9 @@ bg: view: login: Влизане save_button: Съхраняване + export: + start: + licence: Лиценз message: new: send_button: Изпращане @@ -73,3 +90,46 @@ bg: subject: Тема to: До unread_button: Отбелязване като непрочетено + notifier: + diary_comment_notification: + hi: Здравейте ((to_user)), + email_confirm: + subject: "[OpenStreetMap] Потвърждаване на вашия адрес за е-поща" + oauth_clients: + edit: + submit: Редактиране + form: + name: Име + new: + submit: Регистриране + trace: + edit: + description: "Описание:" + edit: редактиране + filename: "Име на файл:" + save_button: Съхраняване на промените + no_such_user: + title: Няма такъв потребител + trace: + edit: редактиране + in: в + trace_form: + help: Помощ + view: + edit: редактиране + filename: "Име на файл:" + user: + reset_password: + password: "Парола:" + user_block: + partial: + creator_name: Създател + display_name: Блокиран потребител + edit: Редактиране + reason: Причина за блокиране + status: Статут + user_role: + grant: + confirm: Потвърждаване + revoke: + confirm: Потвърждаване diff --git a/config/locales/br.yml b/config/locales/br.yml index 9d9f7a115..af01e66d7 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -853,8 +853,10 @@ br: cycle_map: Kelc'hiad kartenn noname: AnvEbet site: + edit_disabled_tooltip: Zoumañ da zegas kemmoù war ar gartenn edit_tooltip: Kemmañ ar gartenn edit_zoom_alert: Ret eo deoc'h zoumañ evit aozañ ar gartenn + history_disabled_tooltip: Zoumañ evit gwelet ar c'hemmoù degaset d'an takad-mañ history_tooltip: Gwelet ar c'hemmoù er zonenn-se history_zoom_alert: Ret eo deoc'h zoumañ evit gwelet istor an aozadennoù layouts: @@ -877,7 +879,7 @@ br: zero: N'eus kemennadenn anlennet ebet en ho poest resev intro_1: OpenStreetMap zo ur gartenn digoust eus ar bed a-bezh, a c'haller kemmañ. Graet eo gant tud eveldoc'h. intro_2: Gant OpenStreetMap e c'hallit gwelet, aozañ hag implijout roadennoù douaroniel eus forzh pelec'h er bed. - intro_3: Herberc'hiet eo OpenStreetMap gant {{ucl}} et {{bytemark}}. + intro_3: Herberc'hiet eo OpenStreetMap gant {{ucl}} et {{bytemark}}. Skoazellerien all eus ar raktres a vez rollet war ar {{partners}}. intro_3_partners: wiki license: title: OpenStreetMap data zo dindan an aotre-implijout Creative Commons Attribution-Share Alike 2.0 @@ -987,6 +989,7 @@ br: hopefully_you_1: Unan bennak (c'hwi moarvat) a garfe cheñch e chomlec'h postel da hopefully_you_2: "{{server_url}} da {{new_address}}." friend_notification: + befriend_them: "Tu 'zo deoc'h e ouzhpennañ evel ur mignon amañ : {{befriendurl}}." had_added_you: "{{user}} en deus hoc'h ouzhpennet evel mignon war OpenStreetMap." see_their_profile: "Gallout a rit gwelet o frofil amañ : {{userurl}}." subject: "[OpenStreetMap] {{user}} en deus hoc'h ouzhpennet evel mignon" @@ -1325,6 +1328,7 @@ br: flash update success confirm needed: Hizivaet eo bet titouroù an implijer. Gwiriit ho posteloù evit kadarnaat ho chomlec'h postel nevez. home location: "Lec'hiadur ar gêr :" image: "Skeudenn :" + image size hint: (ar skeudennoù karrezenneg gant ar stumm 100×100 pixel a zo ar re wellañ) keep image: Derc'hel ar skeudenn a-vremañ latitude: "Ledred :" longitude: "Hedred :" @@ -1460,7 +1464,7 @@ br: nearby users: "Implijerien all tost deoc'h :" new diary entry: enmoned nevez en deizlevr no friends: N'hoc'h eus ouzhpennet mignon ebet c'hoazh. - no nearby users: N'eus implijer ebet en ardremez c'hoazh. + no nearby users: N'eus implijer ebet all en ardremez c'hoazh. oauth settings: arventennoù oauth remove as friend: Lemel evel mignon role: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index ebc7afb6a..d2c1f31b3 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -86,6 +86,7 @@ ca: title: Conjunt de canvis changeset_details: belongs_to: "Pertany a:" + bounding_box: "Caixa contenidora:" box: caixa closed_at: "Tancat el:" created_at: "Creat el:" @@ -254,19 +255,27 @@ ca: diary_entry: confirm: Confirmar edit: + body: "Cos del missatge:" language: Idioma latitude: "Latitud:" + location: "Ubicació:" longitude: "Longitud:" save_button: Guardar subject: "Assumpte:" + location: + edit: Edita + location: "Ubicació:" + view: Veure view: login: Accés save_button: Desa export: start: + area_to_export: Àrea a exportar export_button: Exporta export_details: Les dades l'OpenStreetMap són publicades sota el termes de la llicència Creative Commons Attribution-ShareAlike 2.0. format: Format + format_to_export: Format d'exportació image_size: Mida de la imatge latitude: "Lat:" licence: Llicència @@ -275,6 +284,7 @@ ca: max: màx options: Opcions osm_xml_data: OpenStreetMap XML Data + osmarender_image: Imatge de Osmarender output: Sortida scale: Escala too_large: @@ -284,6 +294,9 @@ ca: export: Exporta geocoder: description: + title: + geonames: Localització des de GeoNames + osm_nominatim: Localització des de OpenStreetMap Nominatim types: cities: Ciutats places: Llocs @@ -408,6 +421,7 @@ ca: gate: Porta path: Camí primary_link: Carretera principal + residential: Residencial road: Carretera secondary: Carretera secundària secondary_link: Carretera secundària @@ -433,6 +447,7 @@ ca: landuse: cemetery: Cementiri commercial: Zona comercial + construction: Construcció farm: Granja forest: Bosc industrial: Zona industrial @@ -456,6 +471,7 @@ ca: sports_centre: Centre esportiu stadium: Estadi swimming_pool: Piscina + water_park: Parc aquàtic natural: bay: Badia beach: Platja @@ -465,9 +481,11 @@ ca: cliff: Cingle coastline: Litoral crater: Cràter + fell: Forest fjord: Fiord geyser: Guèiser glacier: Glacera + heath: Bruguerar hill: Pujol island: Illa moor: Amarratge @@ -475,11 +493,13 @@ ca: peak: Pic point: Punt reef: Escull + ridge: Cresta river: Riu rock: Roca scree: Pedregar shoal: Banc spring: Deu + strait: Estret tree: Arbre valley: Vall volcano: Volcà @@ -493,11 +513,13 @@ ca: country: País county: Comtat farm: Granja + hamlet: Aldea house: Casa houses: Cases island: Illa islet: Illot locality: Localitat + moor: Amarrador municipality: Municipi postcode: Codi postal region: Regió @@ -531,14 +553,19 @@ ca: supermarket: Supermercat travel_agency: Agència de viatges tourism: + alpine_hut: Cabanya alpina artwork: Il·lustració attraction: Atracció bed_and_breakfast: Llist i esmorzar (B&B) + cabin: Cabanya + camp_site: Campament + caravan_site: Càmping per a caravanes chalet: Xalet guest_house: Alberg hostel: Hostal hotel: Hotel information: Informació + lean_to: Nau motel: Motel museum: Museu picnic_site: Àrea de pícnic @@ -547,6 +574,7 @@ ca: viewpoint: Mirador zoo: Zoològic waterway: + canal: Canal ditch: Séquia mooring: Amarradors rapids: Ràpids @@ -569,16 +597,24 @@ ca: intro_3_partners: wiki logo: alt_text: logotip de l'OpenStreetMap + logout: sortir + logout_tooltip: Sortir + make_a_donation: + text: Fer una donació shop: Botiga user_diaries: DIaris de usuari view: Veure view_tooltip: Visualitza els mapes welcome_user: Benvingut/da, {{user_link}} + welcome_user_link_tooltip: La teva pàgina d'usuari message: + delete: + deleted: Missatge esborrat inbox: date: Data from: De outbox: sortida + subject: Assumpte title: Safata d'entrada message_summary: delete_button: Suprimeix @@ -587,8 +623,14 @@ ca: unread_button: Marca com a no llegit new: back_to_inbox: Tornar a la safata d'entrada + body: Cos + message_sent: S'ha enviat el missatge send_button: Envia subject: Assumpte + title: Enviar missatge + no_such_message: + heading: No existeix aquest missatge + title: No existeix aquest missatge outbox: date: Data inbox: Entrada @@ -602,7 +644,9 @@ ca: from: De reply_button: Respon subject: Assumpte + title: Llegir missatge to: Per a + unread_button: Marca com a no llegit sent_message_summary: delete_button: Suprimeix notifier: @@ -635,12 +679,15 @@ ca: user_page_link: pàgina d'usuari index: license: + license_name: Creative Commons Reconeixement-Compartir Igual 2.0 project_name: projecte OpenStreetMap permalink: Enllaç permanent shortlink: Enllaç curt key: table: entry: + apron: + 1: terminal cemetery: Cementiri centre: Centre esportiu farm: Granja @@ -662,6 +709,7 @@ ca: subway: Metro summit: 1: pic + track: Pista wood: Fusta search: search: Cerca @@ -785,6 +833,10 @@ ca: password: "Contrasenya:" please login: Si us plau, inicieu la sessió o {{create_user_link}}. title: Accés + logout: + heading: Sortir d'OpenStreetMap + logout_button: Sortir + title: Sortir lost_password: email address: "Adreça de correu electrònic:" heading: Heu oblidat la contrasenya? @@ -794,10 +846,13 @@ ca: success: "{{name}} ara és el vostre amic." new: confirm password: "Confirmeu la contrasenya:" + display name: "Nom en pantalla:" email address: "Adreça de correu:" heading: Crea un compte d'usuari password: "Contrasenya:" signup: Registre + no_such_user: + title: No existeix aquest usuari popup: friend: Amic your location: La teva situació @@ -809,8 +864,12 @@ ca: reset: Restablir contrasenya title: Restablir la contrasenya view: + activate_user: activa aquest usuari + add as friend: afegir com a amic + ago: (fa {{time_in_words_ago}}) confirm: Confirmeu create_block: boca aquest usuari + created from: "Creat a partir de:" deactivate_user: desactiva aquest usuari delete_user: Suprimeix aquest usuari description: Descripció @@ -818,10 +877,14 @@ ca: edits: modificacions email address: "Adreça de correu:" hide_user: amagar aquest usuari + km away: "{{count}}km de distància" + m away: "{{count}}m de distància" + mapper since: "Mapejant des de:" my diary: el meu diari my edits: les meves edicions + my settings: les meves preferències my traces: les meves traces - nearby users: "Usuaris propers:" + nearby users: Altres usuaris propers oauth settings: configuració OAuth role: administrator: Aquest usuari és administrador @@ -829,6 +892,7 @@ ca: send message: enviar missatge settings_link_text: preferències traces: traces + user location: Ubicació de l'usuari your friends: Els vostres amics user_block: partial: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 1bf7b1de9..3cf944783 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -188,6 +188,7 @@ cs: type: node: Uzel way: Cesta + private_user: anonym show_history: Zobrazit historii unable_to_load_size: "Nelze načíst: Rozměr [[bbox_size]] je příliÅ¡ velký (maximum je {{max_bbox_size}})" wait: Čekejte... @@ -361,16 +362,23 @@ cs: building: train_station: Železniční stanice highway: - steps: SchodiÅ¡tě + bus_stop: Autobusová zastávka + gate: Brána + secondary: Silnice II. třídy + steps: Schody historic: museum: Muzeum leisure: garden: Zahrada miniature_golf: Minigolf + nature_reserve: Přírodní rezervace park: Park + pitch: HřiÅ¡tě + stadium: Stadion natural: beach: Pláž glacier: Ledovec + hill: Kopec island: Ostrov tree: Strom valley: Údolí @@ -389,6 +397,7 @@ cs: region: Region sea: Moře state: Stát + suburb: Městská část town: Město village: Vesnice railway: @@ -417,7 +426,7 @@ cs: map: base: cycle_map: Cyklomapa - noname: Bezejmenné ulice + noname: Nepojmenované ulice layouts: edit: Upravit export: Export @@ -529,8 +538,8 @@ cs: permalink: Trvalý odkaz shortlink: Krátký odkaz key: - map_key: Mapový klíč - map_key_tooltip: Mapový klíč pro vykreslení mapnikem na této úrovni přiblížení + map_key: Legenda + map_key_tooltip: Legenda pro vykreslení mapnikem na této úrovni přiblížení table: entry: admin: Administrativní hranice @@ -587,13 +596,13 @@ cs: - Vrchol - hora tourist: Turistická atrakce - track: Lesní či polní cesta + track: Lesní a polní cesta tram: - Rychlodráha - tramvaj trunk: Významná silnice tunnel: Čárkované obrysy = tunel - unclassified: Silnice bez klasifikace + unclassified: Silnice unsurfaced: Nezpevněná cesta heading: Legenda pro z{{zoom_level}} search: @@ -632,6 +641,7 @@ cs: title: Uživatel nenalezen trace: ago: před {{time_in_words_ago}} + by: od count_points: "{{count}} bodů" edit: upravit edit_map: Upravit mapu @@ -718,6 +728,9 @@ cs: please login: Prosím přihlaste se, nebo si můžete {{create_user_link}}. remember: "Zapamatuj si mě:" title: Přihlásit se + logout: + logout_button: Odhlásit se + title: Odhlásit se lost_password: email address: "E-mailová adresa:" heading: Zapomněli jste heslo? @@ -788,6 +801,7 @@ cs: remove as friend: odstranit jako přítele send message: poslat zprávu settings_link_text: nastavení + traces: záznamy user location: Pozice uživatele your friends: VaÅ¡i přátelé user_role: diff --git a/config/locales/de.yml b/config/locales/de.yml index ad8cf5770..bd55882e0 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1007,9 +1007,9 @@ de: hopefully_you_1: Jemand (hoffentlich du) möchte seine E-Mail-Adresse bei hopefully_you_2: "{{server_url}} zu {{new_address}} ändern." friend_notification: - befriend_them: Du kannst sie unter {{befriendurl}} als Freund hinzufügen. + befriend_them: Du kannst sie / ihn unter {{befriendurl}} ebenfalls als Freund hinzufügen. had_added_you: "{{user}} hat dich als Freund hinzugefügt." - see_their_profile: Du kannst ihr Profil unter {{userurl}} ansehen. + see_their_profile: Du kannst sein / ihr Profil unter {{userurl}} ansehen. subject: "[OpenStreetMap] {{user}} hat dich als Freund hinzugefügt" gpx_notification: and_no_tags: und ohne Tags. @@ -1115,7 +1115,7 @@ de: no_apps: Wenn du mit einer Anwendung gerne den {{oauth}}-Standard verwenden würdest, musst du sie hier registrieren. register_new: Anwendung registrieren registered_apps: "Du hast die folgenden Client-Anwendungen registriert:" - revoke: Wiederrufen! + revoke: Widerrufen! title: Meine OAuth Details new: submit: Registrieren @@ -1403,6 +1403,10 @@ de: please login: Bitte melde dich an oder {{create_user_link}}. remember: "Anmeldedaten merken:" title: Anmelden + logout: + heading: Von OpenStreetMap abmelden + logout_button: Abmelden + title: Abmelden lost_password: email address: "E-Mail-Adresse:" heading: Passwort vergessen? diff --git a/config/locales/dsb.yml b/config/locales/dsb.yml index 3be9cb08d..c791c6f12 100644 --- a/config/locales/dsb.yml +++ b/config/locales/dsb.yml @@ -326,6 +326,10 @@ dsb: recent_entries: "NejnowÅ¡e zapiski dnjownika:" title: Dnjowniki wužywarjow user_title: dnjownik wužywarja {{user}} + location: + edit: Wobźěłaś + location: "Městno:" + view: Woglědaś se new: title: Nowy zapisk dnjownika no_such_entry: @@ -341,7 +345,7 @@ dsb: login: Pśizjawjenje login_to_leave_a_comment: "{{login_link}}, aby zawóstajił komentar" save_button: Składowaś - title: Dnjowniki | {{user}} + title: Dnjownik {{user}} | {{title}} user_title: dnjownik wužywarja {{user}} export: start: @@ -365,6 +369,8 @@ dsb: output: Wudaśe paste_html: HTML kopěrowaś, aby se zasajźił do websedła scale: Měritko + too_large: + heading: Wobłuk pśewjeliki zoom: Skalěrowanje start_rjs: add_marker: Kórśe marku pśidaś @@ -400,6 +406,7 @@ dsb: other: mjenjej ako {{count}} km zero: mjenjej ako 1 km results: + more_results: DalÅ¡ne wuslědki no_results: Žedne wuslědki namakane search: title: @@ -509,14 +516,18 @@ dsb: boundary: administrative: Zastojnstwowa granica building: + apartments: Bydleński blok chapel: Kapałka church: Cerkwja city_hall: Radnica + flats: Bydlenja + garage: Garaža hall: Hala hospital: Chórownja hotel: Hotel house: Dom industrial: Industrijowe twarjenje + school: Å ulske twarjenje shop: Wobchod stadium: Stadion terrace: Terasa @@ -563,17 +574,26 @@ dsb: unclassified: Njezarědowana droga unsurfaced: Njewobtwarźona droga historic: + archaeological_site: Archeologiske wukopowanišćo building: Twarjenje castle: Grod church: Cerkwja house: Dom + icon: Ikona monument: Pomnik museum: Muzeum + ruins: Ruiny tower: Torm + wreck: Wrak landuse: + cemetery: Kjarchob construction: Twarnišćo + farm: Farma + forest: Góla industrial: Industrijowy wobcerk mountain: Góra + park: Park + plaza: Naměstno railway: Zeleznica wood: Lěs leisure: @@ -659,8 +679,10 @@ dsb: unincorporated_area: Bźezgmejnske strony village: Wjas railway: + historic_station: Historiske dwórnišćo station: Dwórnišćo tram: Elektriska + tram_stop: Zastanišćo elektriskeje shop: alcohol: Wobchod za spirituoze apparel: Woblekarnja @@ -778,8 +800,9 @@ dsb: map: base: cycle_map: Kórta za kolesowarjow - noname: ŽedneMě + noname: ŽednoMě site: + edit_tooltip: Kórtu wobźěłaś edit_zoom_alert: MusyÅ¡ powětÅ¡yś, aby wobźěłał kórtu history_zoom_alert: MusyÅ¡ powětÅ¡yś, aby wiźeł wobźěłowańsku historiju layouts: @@ -789,7 +812,7 @@ dsb: export: Eksport export_tooltip: Kórtowe daty eksportěrowaś gps_traces: GPS-slědy - gps_traces_tooltip: Slědy zastojaś + gps_traces_tooltip: GPS-slědy zastojaś help_wiki: Pomoc & wiki help_wiki_tooltip: Pomoc & wikisedło za projekt history: Historija @@ -804,7 +827,8 @@ dsb: zero: Twój postowy kašćik njewopśimujo žedne njepśecytane powěsći intro_1: OpenStreetMap jo licho wobźěłujobna kórta cełego swěta. Jo se za luźi ako ty napórała. intro_2: OpenStreetMap śi dowólujo, geografiske daty wóte wÅ¡uźi na zemi zgromadnje se woglědaś, wobźěłaś a wužywaś. - intro_3: Hostowanje OpenStreetMap pódpěra se wót {{ucl}} a {{bytemark}} z pśijaznosću. + intro_3: Hostowanje OpenStreetMap pśijaznosću pódpěra se wót {{ucl}} a {{bytemark}}. Druge pódpěrarje projekta su w {{partners}} nalicone. + intro_3_partners: wiki license: title: Daty OpenStreetMap licencěruju se pód licencu Creative Commons Attribution-Share Alike 2.0 Generic log_in: pśizjawiś @@ -829,7 +853,7 @@ dsb: user_diaries: Dnjowniki user_diaries_tooltip: Wužywarske dnjowniki cytaś view: Kórta - view_tooltip: Kórty se woglědaś + view_tooltip: Kórtu se woglědaś welcome_user: Witaj, {{user_link}} welcome_user_link_tooltip: Twój wužywarski bok message: @@ -862,10 +886,13 @@ dsb: send_message_to: "{{name}} nowu powěsć pósłaś" subject: Temowe nadpismo title: Powěsć pósłaś + no_such_message: + heading: Powěsć njeeksistěrujo + title: Powěsć njeeksistěrujo no_such_user: - body: Bóžko njejo žeden wužywaŕ abo žedna powěsć z tym mjenim abo ID - heading: Wužywaŕ abo powěsć njeeksistěrujo - title: Wužywaŕ abo powěsć njeeksistěrujo + body: Bóžko njejo žeden wužywaŕ z tym mjenim. + heading: Wužywaŕ njeeksistěrujo + title: Wužywaŕ njeeksistěrujo outbox: date: Datum inbox: post @@ -910,7 +937,7 @@ dsb: hopefully_you_2: "{{server_url}} do {{new_address}} změniś." friend_notification: had_added_you: "{{user}} jo śi na OpenStreetMap ako pśijaśela pśidał." - see_their_profile: Jogo profil jo na {{userurl}} a móžoÅ¡ jogo teke ako pśijaśela pśidaś, jolic coÅ¡. + see_their_profile: MóžoÅ¡ profil na {{userurl}} wiźeś. subject: "[OpenStreetMap] {{user}} jo śi ako pśijaśela pśidał." gpx_notification: and_no_tags: a žedne atributy. @@ -1136,6 +1163,9 @@ dsb: sidebar: close: Zacyniś search_results: Pytańske wuslědki + time: + formats: + friendly: "%e. %B %Y %H:%M" trace: create: trace_uploaded: Twója GPX-dataja jo se nagrała a caka na zasajźenje do datoweje banki. To stawa se zwětÅ¡ego za poł góźiny a dostanjoÅ¡ e-mail za wobkÅ¡uśenje. @@ -1237,14 +1267,20 @@ dsb: trackable: Cera (jano źělona ako anonymne, zrědowane dypki z casowymi kołkami) user: account: + current email address: "Aktualna e-mailowa adresa:" + delete image: Aktualny wobraz wótpóraś email never displayed publicly: (njejo nigda widobna) flash update success: Wužywarske informacije wuspěšnje zaktualizěrowane. flash update success confirm needed: Wužywarske informacije wuspěšnje zaktualizěrowane. DostanjoÅ¡ e-mail z napominanim, twóju e-mailowu adresu wobkÅ¡uśiś. home location: "Bydlišćo:" + image: "Wobraz:" + keep image: Aktualny wobraz wobchowaś latitude: "Å yrina:" longitude: "Dlinina:" make edits public button: WÅ¡e móje změny wózjawiś my settings: Móje nastajenja + new email address: "Nowa e-mailowa adresa:" + new image: Wobraz pśidaś no home location: Njejsy swóje bydlišćo zapódał. preferred languages: "Preferěrowane rěcy:" profile description: "Profilowe wopisanje:" @@ -1258,6 +1294,7 @@ dsb: public editing note: heading: Zjawne wobźěłowanje text: Tuchylu twóje změny su anonymne a luźe njamógu śi powěsći pósłaś abo twójo městno wiźeś. Aby pokazał, což sy wobźěłał a luźam dowólił, se z tobu pśez websedło do zwiska stajiś, klikni dołojnce na tłocaÅ¡k. Wót pśeźenja do API 0.6, jano zjawne wužywarje mógu kórtowe daty wobźěłaś. (glědaj pśicyny). + replace image: Aktualny wobraz wuměniś return to profile: Slědk k profiloju save changes button: Změny składowaś title: Konto wobźěłaś @@ -1289,6 +1326,10 @@ dsb: password: "Gronidło:" please login: PÅ¡osym pśizjaw se abo {{create_user_link}}. title: Pśizjawjenje + logout: + heading: Z OpenStreetMap se wótzjawiś + logout_button: Wótzjawjenje + title: Wótzjawiś se lost_password: email address: "E-mailowa adresa:" heading: Sy gronidło zabył? @@ -1322,6 +1363,7 @@ dsb: heading: Wužywaŕ {{user}} njeeksistěrujo title: Toś ten wužywaŕ njejo popup: + friend: Pśijaśel nearby mapper: Kartěrowaŕ w bliskosći your location: Twójo městno remove_friend: @@ -1363,10 +1405,11 @@ dsb: my edits: móje změny my settings: móje nastajenja my traces: móje slědy - nearby users: "Wužywarje w bliskosći:" + nearby users: Druge wužywarje w bliskosći new diary entry: nowy dnjownikowy zapisk no friends: Hyšći njejsy žednych pśijaśelow pśidał. no nearby users: Hyšći njejsu žedne wužywarje, kótarež kartěruju w bliskosći. + oauth settings: OAUTH-nastajenja remove as friend: ako pśijaśela wótpóraś role: administrator: Toś ten wužywaŕ jo administrator diff --git a/config/locales/el.yml b/config/locales/el.yml index e086bf5a5..b2d2af9fd 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -3,6 +3,7 @@ # Export driver: syck # Author: Consta # Author: Crazymadlover +# Author: Logictheo # Author: Omnipaedista el: activerecord: @@ -97,7 +98,7 @@ el: loading: Φόρτωση... node: download: "{{download_xml_link}} ή {{view_history_link}}" - node: Σήμεο + node: Σημείο node_title: "Σήμεο: {{node_name}}" view_history: Δες ιστορία node_details: @@ -168,12 +169,12 @@ el: way: download: "{{download_xml_link}} ή {{view_history_link}}" view_history: δες ιστορία - way: Κατεύθηνση - way_title: "Κατεύθηνση: {{way_name}}" + way: Κατεύθυνση + way_title: "Κατεύθυνση: {{way_name}}" way_details: also_part_of: - one: επίσης κομμάτι κατεύθηνσης {{related_ways}} - other: επίσης κομμάτι κατεύθηνσεων {{related_ways}} + one: επίσης κομμάτι κατεύθυνσης {{related_ways}} + other: επίσης κομμάτι κατευθύνσεων {{related_ways}} nodes: "Σημεία:" part_of: Κομμάτι του way_history: @@ -186,6 +187,8 @@ el: anonymous: Ανόνυμος show_area_box: δείξε περιοχή κουτιού view_changeset_details: Δες αλλαγή συλλογής λεπτομερειών + changeset_paging_nav: + showing_page: Eμφάνιση σελίδας {{page}} changesets: area: Περιοχή comment: Σχόλιο @@ -243,7 +246,7 @@ el: area_to_export: Εξαγωγή περιοχής export_button: Εξαγωγή export_details: OpenStreetMap data are licensed under the Creative Commons Attribution-ShareAlike 2.0 license. - format: Τρόπος παρουσίασης + format: Μορφοποίηση format_to_export: Εξαγωγή τρόπου παρουσίασης image_size: Μέγεθος εικόνας latitude: "Γ. Π.:" @@ -261,10 +264,6 @@ el: export: Εξαγωγή layouts: home: κύρια σελίδα - map: - coordinates: "Συντεταγμένες:" - edit: Άλλαξε - view: Εξέτασε message: message_summary: delete_button: Διαγραφή diff --git a/config/locales/es.yml b/config/locales/es.yml index b3b01851d..e7a95265d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -5,6 +5,7 @@ # Author: McDutchie # Author: PerroVerd # Author: Peter17 +# Author: Toliño # Author: Translationista es: activerecord: @@ -345,7 +346,7 @@ es: area_to_export: Área a exportar embeddable_html: HTML para pegar export_button: Exportar - export_details: Los datos de OpenStreetMap se encuentran bajo una licencia Creative Commons Atribución-Compartir Igual 2.0. + export_details: Los datos de OpenStreetMap se encuentran bajo una licencia Creative Commons Atribución-Compartir Igual 2.0. format: Formato format_to_export: Formato de exportación image_size: Tamaño de la imagen @@ -1250,7 +1251,7 @@ es: title: Editando trazo {{name}} uploaded_at: "Subido el:" visibility: "Visibilidad:" - visibility_help: ¿Que significa esto? + visibility_help: ¿Qué significa esto? list: public_traces: Trazas GPS públicas public_traces_from: Trazas GPS Publicas de {{user}} diff --git a/config/locales/et.yml b/config/locales/et.yml new file mode 100644 index 000000000..0267cb4c1 --- /dev/null +++ b/config/locales/et.yml @@ -0,0 +1,400 @@ +# Messages for Estonian (Eesti) +# Exported from translatewiki.net +# Export driver: syck +# Author: Avjoska +et: + activerecord: + attributes: + diary_entry: + language: Keel + user: Kasutaja + friend: + friend: Sõber + user: Kasutaja + message: + recipient: Vastuvõtja + sender: Saatja + trace: + description: Kirjeldus + latitude: Laiuskraadid + longitude: Pikkuskraadid + name: Nimi + size: Suurus + user: Kasutaja + visible: Nähtav + user: + description: Kirjeldus + email: E-posti aadress + languages: Keeled + pass_crypt: Parool + models: + country: Riik + language: Keel + browse: + map: + deleted: Kustutatud + node: + edit: redigeeri + view_history: vaata redigeerimiste ajalugu + node_details: + coordinates: "Koordinaadid:" + relation_details: + members: "Liikmed:" + start_rjs: + details: Detailid + object_list: + details: Detailid + show_history: Näita ajalugu + wait: Oota... + way: + edit: redigeeri + view_history: vaata ajalugu + way_history: + view_details: vaata detaile + changeset: + changesets: + comment: Kommentaar + diary_entry: + edit: + language: "Keel:" + save_button: Salvesta + subject: "Teema:" + list: + title: Kasutajate päevikud + geocoder: + direction: + east: ida + north: põhja + north_east: kirde + north_west: loode + south: lõuna + south_east: kagu + south_west: edela + west: lääne + search_osm_nominatim: + prefix: + amenity: + airport: Lennujaam + atm: Pangaautomaat + auditorium: Auditoorium + bank: Pank + bench: Pink + bicycle_parking: Jalgrattaparkla + bicycle_rental: Jalgrattarent + bureau_de_change: Rahavahetus + bus_station: Bussijaam + cafe: Kohvik + car_rental: Autorent + car_wash: Autopesu + casino: Kasiino + cinema: Kino + clinic: Kliinik + club: Klubi + courthouse: Kohtuhoone + crematorium: Krematoorium + dentist: Hambaarst + drinking_water: Joogivesi + driving_school: Autokool + embassy: Saatkond + fast_food: Kiirtoit + fuel: Kütus + grave_yard: Surnuaed + hospital: Haigla + hotel: Hotell + ice_cream: Jäätis + kindergarten: Lasteaed + library: Raamatukogu + market: Turg + nightclub: Ööklubi + pharmacy: Apteek + police: Politsei + post_box: Postkast + post_office: Postkontor + preschool: Lasteaed + prison: Vangla + reception_area: Vastuvõtt + restaurant: Restoran + retirement_home: Vanadekodu + sauna: Saun + school: Kool + shop: Kauplus + supermarket: Supermarket + taxi: Takso + theatre: Teater + toilets: WC + university: Ülikool + waste_basket: Prügikast + wifi: WiFi + youth_centre: Noortekeskus + building: + chapel: Kabel + church: Kirik + hotel: Hotell + school: Koolihoone + shop: Kauplus + stadium: Staadion + tower: Torn + train_station: Raudteejaam + university: Ülikoolihoone + "yes": Hoone + highway: + bus_stop: Bussipeatus + cycleway: Jalgrattatee + footway: Jalgrada + pedestrian: Jalakäijatele + historic: + castle: Kindlus + church: Kirik + icon: Ikoon + manor: Mõis + museum: Muuseum + ruins: Varemed + tower: Torn + landuse: + cemetery: Surnuaed + forest: Mets + mountain: Mägi + railway: Raudtee + wetland: Soo + leisure: + garden: Aed + golf_course: Golfiväljak + ice_rink: Uisuväli + miniature_golf: Minigolf + park: Park + playground: Mänguväljak + sports_centre: Spordikeskus + stadium: Saadion + swimming_pool: Ujula + water_park: Veepark + natural: + beach: Rand + cave_entrance: Koopa sissepääs + coastline: Rannajoon + crater: Kraater + fjord: Fjord + geyser: Geiser + hill: Mägi + island: Saar + mud: Muda + peak: Mäetipp + river: Jõgi + spring: Allikas + tree: Puu + volcano: Vulkaan + water: Vesi + wetlands: Soo + place: + airport: Lennujaam + city: Linn + country: Riik + county: Maakond + house: Maja + houses: Majad + island: Saar + islet: Saareke + municipality: Vald + postcode: Sihtnumber + state: Osariik + town: Linn + village: Küla + railway: + station: Raudteejaam + tram: Trammitee + tram_stop: Trammipeatus + shop: + books: Raamatupood + car_repair: Autoparandus + carpet: Vaibakauplus + clothes: Riidepood + computer: Arvutikauplus + cosmetics: Kosmeetikapood + drugstore: Apteek + dry_cleaning: Keemiline puhastus + fish: Kalapood + food: Toidupood + furniture: Mööbel + gallery: Galerii + hairdresser: Juuksur + insurance: Kindlustus + jewelry: Juveelipood + kiosk: Kiosk + mobile_phone: Mobiiltelefonide pood + music: Muusikapood + pet: Lemmikloomapood + shoes: Kingapood + sports: Spordipood + supermarket: Supermarket + toys: Mänguasjapood + travel_agency: Reisiagentuur + tourism: + attraction: Turismiatraktsioon + camp_site: Laagriplats + guest_house: Külalistemaja + hotel: Hotell + information: Informatsioon + motel: Motell + museum: Muuseum + picnic_site: Piknikuplats + theme_park: Teemapark + zoo: Loomaaed + layouts: + edit: Redigeeri + log_in: logi sisse + logout_tooltip: Logi välja + shop: Kauplus + welcome_user_link_tooltip: Sinu kasutajaleht + message: + inbox: + date: Kuupäev + message_summary: + delete_button: Kustuta + read_button: Märgi loetuks + reply_button: Vasta + outbox: + date: Kuupäev + subject: Teema + read: + date: Kuupäev + from: Kellelt + reply_button: Vasta + subject: Teema + to: Kellele + unread_button: Märgi mitteloetuks + sent_message_summary: + delete_button: Kustuta + notifier: + email_confirm_html: + greeting: Tere, + email_confirm_plain: + greeting: Tere, + gpx_notification: + greeting: Tere, + lost_password_html: + greeting: Tere, + lost_password_plain: + greeting: Tere, + message_notification: + hi: Tere, {{to_user}}, + oauth_clients: + edit: + submit: Redigeeri + title: Redigeeri oma avaldust + index: + application: Avalduse nimi + new: + submit: Registreeri + title: Registreeri uus avaldus + site: + edit: + user_page_link: kasutajaleht + key: + table: + entry: + cemetery: Surnuaed + cycleway: Jalgrattatee + footway: Jalgtee + park: Park + search: + search: Otsi + submit_text: Otsi + where_am_i: Kus ma olen? + sidebar: + close: Sulge + search_results: Otsingu tulemused + trace: + edit: + description: "Kirjeldus:" + download: laadi alla + edit: redigeeri + filename: "Failinimi:" + map: kaart + owner: "Omanik:" + points: "Punktid:" + save_button: Salvesta muudatused + start_coord: "Alguskoordinaadid:" + visibility: "Nähtavus:" + visibility_help: mida see tähendab? + no_such_user: + title: Sellist kasutajat ei ole + trace: + view_map: Vaata kaarti + trace_form: + description: Kirjeldus + help: Abi + upload_button: Laadi üles + visibility: Nähtavus + visibility_help: mida see tähendab? + view: + description: "Kirjeldus:" + download: laadi alla + edit: redigeeri + filename: "Failinimi:" + map: kaardil + owner: "Omanik:" + points: "Punktid:" + start_coordinates: "Alguskoordinaadid:" + visibility: "Nähtavus:" + user: + account: + latitude: "Laiuskraadid:" + longitude: "Pikkuskraadid:" + preferred languages: "Eelistatud keeled:" + public editing: + disabled link text: miks ma ei saa redigeerida? + enabled link text: mis see on? + save changes button: Salvesta muudatused + confirm: + button: Kinnita + login: + create_account: loo uus kasutajanimi + email or username: "E-posti aadress või kasutajanimi:" + heading: Logi sisse + login_button: Logi sisse + password: "Parool:" + title: Sisselogimise lehekülg + lost_password: + email address: "E-posti aadress:" + heading: Parool ununenud? + make_friend: + success: "{{name}} on nüüd Sinu sõber." + new: + confirm email address: "Kinnita e-posti aadress:" + confirm password: "Kinnita parool:" + email address: "E-posti aadress:" + heading: Loo uus kasutajanimi + password: "Parool:" + reset_password: + confirm password: "Kinnita parool:" + flash changed: Sinu parool on muudetud. + password: "Parool:" + view: + activate_user: aktiveeri see kasutaja + add as friend: lisa sõbraks + create_block: blokeeri see kasutaja + delete_user: kustuta see kasutaja + description: Kirjeldus + diary: päevik + edits: muudatused + email address: "E-posti aadress:" + km away: "{{count}} kilomeetri kaugusel" + m away: "{{count}} meetri kaugusel" + my diary: minu päevik + new diary entry: uus päevikusissekanne + role: + administrator: See kasutaja on administraator + moderator: See kasutaja on moderaator + send message: saada sõnum + your friends: Sinu sõbrad + user_block: + edit: + back: Vaata kõiki blokeeringuid + new: + back: Vaata kõiki blokeeringuid + partial: + confirm: Oled Sa kindel? + show: + confirm: Oled Sa kindel? + user_role: + revoke: + confirm: Kinnita diff --git a/config/locales/fa.yml b/config/locales/fa.yml new file mode 100644 index 000000000..cda24e30a --- /dev/null +++ b/config/locales/fa.yml @@ -0,0 +1,341 @@ +# Messages for Persian (فارسی) +# Exported from translatewiki.net +# Export driver: syck +# Author: Grille chompa +fa: + activerecord: + attributes: + diary_entry: + language: زبان + latitude: عرض جغرافیایی + longitude: طول جغرافیایی + user: کاربر + friend: + friend: دوست + user: کاربر + trace: + latitude: عرض جغرافیایی + longitude: طول جغرافیایی + name: نام + user: کاربر + user: + pass_crypt: کلمه عبور + models: + country: کشور + friend: دوست + language: زبان + message: پیغام + node: گره + relation: ارتباط + user: کاربر + way: راه + browse: + common_details: + version: "نسخه :" + containing_relation: + entry: ارتباطات {{relation_name}} + node: + download: "{{download_xml_link}}، {{view_history_link}} یا {{edit_link}}" + edit: ویرایش + node: گره + node_title: "گره: {{node_name}}" + node_details: + part_of: "قسمتی از:" + not_found: + type: + node: گره + relation: ارتباط + way: راه + paging_nav: + of: از + relation: + relation: ارتباط + relation_title: "ارتباطات: {{relation_name}}" + relation_details: + part_of: "قسمتی از:" + relation_member: + entry_role: "{{type}} {{name}} به عنوان {{role}}" + type: + node: گره + relation: ارتباط + way: راه + start_rjs: + details: جزئیات + object_list: + details: جزئیات + history: + type: + node: گره [[id]] + way: راه [[id]] + selected: + type: + node: گره [[id]] + way: راه [[id]] + type: + node: گره + way: راه + tag_details: + tags: "برچسب‌ها:" + timeout: + type: + node: گره + relation: ارتباط + way: راه + way: + download: "{{download_xml_link}}، {{view_history_link}} یا {{edit_link}}" + edit: ویرایش + way: راه + way_title: "راه: {{way_name}}" + way_details: + nodes: "گره ها :" + part_of: "قسمتی از:" + changeset: + changeset: + big_area: (بزرگ) + changesets: + user: کاربر + diary_entry: + edit: + language: "زبان:" + latitude: "عرض جغرافیایی:" + longitude: "طول جغرافیایی:" + save_button: ذخیره + location: + edit: ویرایش + view: + save_button: ذخیره + export: + start: + latitude: "عرض:" + longitude: "طول:" + options: تنظیمات + geocoder: + description_osm_namefinder: + prefix: "{{distance}} {{direction}} {{type}}" + direction: + east: شرق + north: شمال + north_east: شمال شرقی + north_west: شمال غربی + south: جنوب + south_east: جنوب شرقی + south_west: جنوب غربی + west: غرب + search_osm_namefinder: + suffix_parent: "{{suffix}} ({{parentdistance}} {{parentdirection}} {{parentname}})" + suffix_place: ", {{distance}} {{direction}} {{placename}}" + search_osm_nominatim: + prefix: + amenity: + airport: فرودگاه + atm: عابر بانک + bank: بانک + bench: نیمکت + brothel: فاحشه خانه + cafe: کافه + cinema: سینما + clinic: درمانگاه + courthouse: دادگاه + dentist: دندانپزشک + dormitory: خوابگاه دانشجویی + embassy: سفارت + fire_station: آتش نشانی + fuel: پمپ بنزین + hospital: بیمارستان + hotel: هتل + kindergarten: کودکستان + library: کتابخانه + market: بازار + marketplace: بازار + office: دفتر + park: پارک + parking: پارکینگ + pharmacy: داروخانه + police: پلیس + post_box: صندوق پست + post_office: اداره پست + prison: زندان + pub: میخانه + recycling: بازیافت + restaurant: رستوران + school: مدرسه + supermarket: سوپرمارکت + taxi: تاکسی + theatre: تئاتر + townhall: شهر داری + university: دانشگاه + waste_basket: سطل اشغال + building: + garage: گاراژ + hotel: هتل + house: خانه + stadium: ورزشگاه + tower: برج + highway: + bus_stop: ایستگاه اتوبوس + motorway: اتوبان + path: مسیر + road: جاده + steps: پله + trunk: بزرگراه + historic: + castle: قلعه + museum: موزه + tower: برج + landuse: + farmland: زمین کشاورزی + forest: جنگل + mountain: کوه + park: پارک + railway: ریل + leisure: + garden: باغ + park: پارک + stadium: ورزشگاه + natural: + beach: ساحل + channel: کانال + coastline: ساحل + hill: تپه + island: جزیره + point: نقطه + river: رود خانه + rock: صخره + tree: درخت + valley: دره + volcano: کوه آتشفشان + water: اب + wood: جنگل + place: + airport: فرودگاه + city: شهر بزرگ + country: کشور + farm: مزرعه + house: خانه + island: جزیره + sea: دریا + suburb: محله + town: شهر + village: دهکده + shop: + bakery: نانوایی + butcher: قصاب + kiosk: کیوسک + market: بازار + supermarket: سوپرمارکت + tourism: + hotel: هتل + motel: متل + museum: موزه + valley: دره + zoo: باغ وحش + waterway: + canal: کانال + river: رودخانه + waterfall: ابشار + message: + inbox: + date: تاریخ + from: از + subject: عنوان + outbox: + date: تاریخ + subject: عنوان + to: به + read: + date: تاریخ + from: از + to: به + notifier: + diary_comment_notification: + hi: سلام {{to_user}} ، + email_confirm_html: + greeting: سلام ، + email_confirm_plain: + greeting: سلام ، + gpx_notification: + greeting: سلام ، + lost_password_html: + greeting: سلام ، + lost_password_plain: + greeting: سلام ، + message_notification: + hi: سلام {{to_user}}, + signup_confirm_plain: + greeting: سلام! + oauth_clients: + edit: + submit: ویرایش + form: + name: نام + site: + key: + table: + entry: + cemetery: گورستان + farm: مزرعه + forest: جنگل + lake: + - دریاچه + motorway: اتوبان + park: پارک + school: + - مدرسه + - دانشگاه + summit: + - قله + - قله + trunk: بزرگراه + sidebar: + close: بستن + trace: + edit: + edit: ویرایش + map: نقشه + tags: "برچسب‌ها:" + trace: + by: توسط + edit: ویرایش + edit_map: ویرایش نقشه + in: در + map: نقشه + more: بیشتر + trace_form: + help: راهنما + tags: برچسب‌ها + trace_optionals: + tags: برچسب‌ها + view: + edit: ویرایش + map: نقشه + tags: "برچسب‌ها:" + user: + account: + image: "تصویر :" + latitude: "عرض جغرافیایی:" + longitude: "طول جغرافیایی:" + confirm_email: + button: تأیید + login: + heading: ورود به سیستم + login_button: ورود + password: "کلمه عبور:" + title: ورود به سیستم + new: + password: "کلمه عبور:" + popup: + friend: دوست + reset_password: + password: "کلمه عبور:" + view: + settings_link_text: تنظیمات + user_block: + partial: + edit: ویرایش + show: + edit: ویرایش + user_role: + grant: + confirm: تائید + revoke: + confirm: تأیید diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 10347892e..cb579699d 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -123,7 +123,7 @@ fi: node: Näytä piste suurella kartalla relation: Näytä relaatio suurella kartalla way: Näytä polku suurella kartalla - loading: Lataa tietoja... + loading: Ladataan… node: download: "{{download_xml_link}}, {{view_history_link}} tai {{edit_link}}" download_xml: Lataa XML diff --git a/config/locales/fur.yml b/config/locales/fur.yml index 6c192ab14..2b6716314 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -243,6 +243,10 @@ fur: recent_entries: "Ultimis vôs dal diari:" title: Diaris dai utents user_title: Diari di {{user}} + location: + edit: Cambie + location: "Lûc:" + view: Viôt new: title: Gnove vôs dal diari view: @@ -328,6 +332,7 @@ fur: bureau_de_change: Ufizi di cambi bus_station: Stazion des corieris car_wash: Lavaç machinis + casino: Casinò cinema: Cine clinic: Cliniche dentist: Dentist @@ -378,17 +383,21 @@ fur: landuse: cemetery: Simiteri commercial: Aree comerciâl + construction: In costruzion industrial: Aree industriâl military: Aree militâr nature_reserve: Riserve naturâl park: Parc + railway: Ferade residential: Aree residenziâl leisure: garden: Zardin golf_course: Troi di golf miniature_golf: Minigolf + nature_reserve: Riserve naturâl park: Parc sports_centre: Centri sportîf + stadium: Stadi swimming_pool: Pissine natural: bay: Rade @@ -427,6 +436,7 @@ fur: supermarket: Supermarcjât toys: Negozi di zugatui tourism: + information: Informazions museum: Museu valley: Val viewpoint: Pont panoramic @@ -449,7 +459,7 @@ fur: export: Espuarte export_tooltip: Espuarte i dâts de mape gps_traces: Percors GPS - gps_traces_tooltip: Gjestìs i percors + gps_traces_tooltip: Gjestìs i percors GPS help_wiki: Jutori & Vichi help_wiki_tooltip: Jutori & Vichi pal progjet history: Storic @@ -487,7 +497,7 @@ fur: user_diaries: Diaris dai utents user_diaries_tooltip: Viôt i diaris dai utents view: Viôt - view_tooltip: Viôt lis mapis + view_tooltip: Viôt la mape welcome_user: Benvignût/de, {{user_link}} welcome_user_link_tooltip: La tô pagjine utent message: @@ -702,6 +712,7 @@ fur: visibility: "Visibilitât:" user: account: + current email address: "Direzion di pueste eletroniche atuâl:" email never displayed publicly: (mai mostrade in public) flash update success: Informazions dal utent inzornadis cun sucès. flash update success confirm needed: Informazions dal utent inzornadis cun sucès. Controle la tô pueste par confermâ la tô gnove direzion di pueste eletroniche. @@ -738,7 +749,12 @@ fur: login_button: Jentre lost password link: Password pierdude? please login: Jentre o {{create_user_link}}. + remember: Visiti di me title: Jentre + logout: + heading: Va fûr di OpenStreetMap + logout_button: Jes + title: Jes lost_password: email address: "Direzion di pueste:" make_friend: @@ -759,6 +775,7 @@ fur: heading: L'utent {{user}} nol esist title: Utent no cjatât popup: + friend: Amì nearby mapper: Mapadôr dongje your location: La tô posizion remove_friend: @@ -780,6 +797,7 @@ fur: edits: cambiaments email address: "Direzion di pueste:" hide_user: plate chest utent + if set location: Se tu impuestis la tô locazion, tu viodarâs culì une biele mape e altris informazions. Tu puedis impuestâ il to lûc iniziâl inte pagjine des {{settings_link}}. km away: a {{count}}km di distance m away: "{{count}}m di distance" mapper since: "Al mape dai:" @@ -788,7 +806,7 @@ fur: my edits: miei cambiaments my settings: mês impostazions my traces: percors personâi - nearby users: "Utents dongje:" + nearby users: Altris utents dongje new diary entry: gnove vôs dal diari no friends: No tu âs ancjemò nissun amì. no nearby users: Ancjemò nissun utent che al declare di mapâ dongje di te. diff --git a/config/locales/gcf.yml b/config/locales/gcf.yml index 5c0a9765c..cc62af43e 100644 --- a/config/locales/gcf.yml +++ b/config/locales/gcf.yml @@ -133,12 +133,6 @@ gcf: user_diaries: Jounal view: Vwè welcome_user: Bienvini, {{user_link}} - map: - coordinates: Sitiyasion - edit: Édité - view: Kat - notifier: - diary_comment_notification: site: edit: anon_edits_link_text: Ka y ni la. @@ -196,9 +190,6 @@ gcf: button: Konfirmé heading: Konfirmé chanjman a adres imél aw press confirm button: Apiyé asi bouton la ki an ba pou konfirmé nouvo adres imél aw. - friend_map: - nearby mapper: "Arpantè owa aw: [[nearby_user]]" - your location: Koté ou yé go_public: flash success: Tou sa ou fè jis alè ki lé piblik ou pa otorizé édité. login: @@ -229,13 +220,13 @@ gcf: signup: Enskriw no_such_user: body: Malérezman, pa ti ni pon itilisatè èvè non la sa {{user}}. Kontrolé lòtograf la ouben lien la ou kliké asiy la pa bon. + popup: + nearby mapper: Arpantè owa aw + your location: Koté ou yé set_home: flash success: La ou ka rété la bien anrèjistré view: add as friend: Ajouté on zanmi - add image: Ajouté on imaj - change your settings: Chanjé opsion aw - delete image: Woté on imaj description: Deskription diary: Jounal edits: Édision @@ -249,13 +240,10 @@ gcf: nearby users: "Itilizatè owa aw :" new diary entry: On dot nouvel an jounal la no friends: Ou poko ni pon zanmi - no home location: Pa ni pon koté défini. no nearby users: Ou poko ni itilizatè owa aw. remove as friend: Woté on zanmi send message: Voyé on mésaj settings_link_text: Opsion traces: Chimen - upload an image: Voyé on imaj - user image heading: Foto itilizatè user location: Ola itilizatè yé your friends: Kanmarad aw diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 50fc165ab..5e75c380d 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1,21 +1,99 @@ # Messages for Galician (Galego) # Exported from translatewiki.net # Export driver: syck +# Author: Gallaecio # Author: Toliño gl: activerecord: attributes: + diary_comment: + body: Corpo + diary_entry: + language: Lingua + latitude: Latitude + longitude: Lonxitude + title: Título + user: Usuario + friend: + friend: Amigo + user: Usuario + message: + body: Corpo + recipient: Destinatario + sender: Remitente + title: Título + trace: + description: Descrición + latitude: Latitude + longitude: Lonxitude + name: Nome + public: Público + size: Tamaño + user: Usuario + visible: Visible user: + active: Activo + description: Descrición + display_name: Nome mostrado + email: Correo electrónico + languages: Linguas pass_crypt: Contrasinal models: + changeset: Conxunto de cambios + changeset_tag: Etiqueta do conxunto de cambios + country: País + friend: Amigo + language: Lingua + message: Mensaxe node: Nodo + node_tag: Etiqueta do nodo + notifier: Notificador + relation: Relación + relation_tag: Etiqueta da relación + session: Sesión + user: Usuario + user_preference: Preferencia do usuario way: Camiño browse: + changeset: + changeset: "Conxunto de cambios: {{id}}" + changesetxml: Conxunto de cambios XML + download: Descargar {{changeset_xml_link}} ou {{osmchange_xml_link}} + feed: + title: Conxunto de cambios {{id}} + title_comment: Conxunto de cambios {{id}} - {{comment}} + osmchangexml: osmChange XML + title: Conxunto de cambios changeset_details: + belongs_to: "Pertence a:" + bounding_box: "Caixa de envoltura:" box: caixa + closed_at: "Pechouse o:" + created_at: "Creado o:" + has_nodes: + one: "Ten o seguinte {{count}} nodo:" + other: "Ten os seguintes {{count}} nodos:" + has_relations: + one: "Ten a seguinte relación:" + other: "Ten as seguintes {{count}} relacións:" + has_ways: + one: "Ten o seguinte camiño:" + other: "Ten os seguintes {{count}} camiños:" + no_bounding_box: Non se seleccionou ningunha caixa de envoltura para este conxunto de cambios. + show_area_box: Amosar a caixa de zona + changeset_navigation: + all: + next_tooltip: Seguinte conxunto de cambios + prev_tooltip: Conxunto de cambios anterior + user: + name_tooltip: Ver as edicións de {{user}} + next_tooltip: Seguinte edición de {{user}} + prev_tooltip: Edición anterior de {{user}} common_details: changeset_comment: "Comentario:" + edited_at: "Editado o:" edited_by: "Editado por:" + in_changeset: "No conxunto de cambios:" version: "Versión:" containing_relation: entry: Relación {{relation_name}} @@ -45,7 +123,7 @@ gl: node_history_title: "Historial do nodo: {{node_name}}" view_details: ver os detalles not_found: - sorry: Sentímolo, non se puido atopar o {{type}} co ID {{id}}. + sorry: Sentímolo, non se puido atopar o {{type}} co id {{id}}. type: changeset: conxunto de cambios node: nodo @@ -75,12 +153,20 @@ gl: node: Nodo relation: Relación way: Camiño + start: + manually_select: Escoller manualmente unha zona distinta + view_data: Ver os datos para a vista do mapa actual start_rjs: data_frame_title: Datos data_layer_name: Datos details: Detalles + drag_a_box: Arrastre unha caixa sobre o mapa para escoller unha zona + edited_by_user_at_timestamp: Editado por [[user]] o [[timestamp]] + history_for_feature: Historial de [[feature]] load_data: Cargar os datos + loaded_an_area_with_num_features: Cargou unha zona que contén [[num_features]] funcionalidades. Pode que algúns navegadores teñan problemas para amosar correctamente esta cantidade de datos. Xeralmente, os navegadores traballan mellor amosando menos de 100 funcionalidades á vez. Utilizar máis pode provocar que o navegador vaia lento ou non responda. Se está seguro de que quere amosar estes datos, pode facelo premendo no seguinte botón. loading: Cargando... + manually_select: Escoller manualmente unha zona distinta object_list: api: Obter esta área desde o API back: Mostrar a lista de obxectos @@ -97,10 +183,20 @@ gl: type: node: Nodo way: Camiño + private_user: usuario privado show_history: Mostrar o historial + unable_to_load_size: "Non se puido cargar: o tamaño [[bbox_size]] da caixa de envoltura é grande de máis (ten que ser menor de {{max_bbox_size}})" wait: Agarde... + zoom_or_select: Escolla unha zona do mapa ou achéguese a ela para vela tag_details: tags: "Etiquetas:" + timeout: + sorry: Tardouse demasiado en obter os datos para o {{type}} co id {{id}}. + type: + changeset: conxunto de cambios + node: nodo + relation: relación + way: camiño way: download: "{{download_xml_link}}, {{view_history_link}} ou {{edit_link}}" download_xml: Descargar en XML @@ -120,53 +216,477 @@ gl: view_details: ver os detalles way_history: Historial do camiño way_history_title: "Historial co camiño: {{way_name}}" + changeset: + changesets: + area: Zona + comment: Comentario + id: ID + saved_at: Gardado o + user: Usuario + list: + description: Cambios recentes + description_bbox: Conxuntos de cambios en {{bbox}} + description_user: Conxuntos de cambios por {{user}} + description_user_bbox: Conxuntos de cambios por {{user}} en {{bbox}} + heading: Conxuntos de cambios + heading_bbox: Conxuntos de cambios + heading_user: Conxuntos de cambios + heading_user_bbox: Conxuntos de cambios + title: Conxuntos de cambios + title_bbox: Conxuntos de cambios en {{bbox}} + title_user: Conxuntos de cambios por {{user}} + title_user_bbox: Conxuntos de cambios por {{user}} en {{bbox}} diary_entry: + diary_comment: + confirm: Confirmar + hide_link: Agochar este comentario + diary_entry: + comment_count: + one: 1 comentario + other: "{{count}} comentarios" + comment_link: Comentar esta entrada + confirm: Confirmar + edit_link: Editar esta entrada + hide_link: Agochar esta entrada edit: + body: "Corpo:" + language: "Lingua:" + latitude: "Latitude:" + location: "Localización:" + longitude: "Lonxitude:" save_button: Gardar + subject: "Asunto:" + location: + edit: Editar + location: "Localización:" + view: Ver view: save_button: Gardar + export: + start: + add_marker: Engadir un marcador ao mapa + area_to_export: Zona a exportar + export_button: Exportar + format: Formato + format_to_export: Formato de exportación + image_size: Tamaño da imaxe + latitude: "Lat:" + licence: Licenza + longitude: "Lon:" + mapnik_image: Imaxe de Mapnik + max: máx. + options: Opcións + osm_xml_data: Datos XML do OpenStreetMap + scale: Escala + too_large: + body: Esta zona é grande de máis para ser exportada como datos XML do OpenStreetMap. Amplíe a zona ou escolla unha menor. + heading: Zona demasiado grande + zoom: Zoom + start_rjs: + add_marker: Engadir un marcador ao mapa + change_marker: Cambiar a posición do marcador + click_add_marker: Prema sobre o mapa para engadir un marcador + drag_a_box: Arrastre unha caixa sobre o mapa para escoller unha zona + export: Exportar + manually_select: Escoller manualmente unha zona distinta + view_larger_map: Ver un mapa máis grande geocoder: description: title: geonames: Localización desde GeoNames osm_namefinder: "{{types}} desde OpenStreetMap Namefinder" + osm_nominatim: Localización desde OpenStreetMap Nominatim + types: + cities: Cidades + places: Lugares + towns: Municipios + description_osm_namefinder: + prefix: "{{distance}} ao {{direction}} de {{type}}" + direction: + east: leste + north: norte + north_east: nordés + north_west: noroeste + south: sur + south_east: sueste + south_west: suroeste + west: oeste + distance: + one: arredor de 1km + other: arredor de {{count}}km + zero: menos de 1km + results: + more_results: Máis resultados + no_results: Non se atopou ningún resultado search: title: ca_postcode: Resultados desde Geocoder.CA geonames: Resultados desde GeoNames latlon: Resultados internos osm_namefinder: Resultados desde OpenStreetMap Namefinder + osm_nominatim: Resultados desde OpenStreetMap Nominatim uk_postcode: Resultados desde NPEMap / FreeThe Postcode us_postcode: Resultados desde Geocoder.us + search_osm_namefinder: + suffix_parent: "{{suffix}} ({{parentdistance}} {{parentdirection}} de {{parentname}})" + suffix_place: ", {{distance}} ao {{direction}} de {{placename}}" + search_osm_nominatim: + prefix: + highway: + emergency_access_point: Punto de acceso de emerxencia + footway: Carreiro + motorway_junction: Cruce de autovías + primary_link: Estrada principal + secondary_link: Estrada secundaria + leisure: + beach_resort: Balneario + common: Terreo común + fishing: Área de pesca + garden: Xardín + golf_course: Campo de golf + ice_rink: Pista de patinaxe sobre xeo + marina: Porto deportivo + miniature_golf: Minigolf + nature_reserve: Reserva natural + park: Parque + pitch: Cancha deportiva + playground: Patio de recreo + recreation_ground: Área recreativa + slipway: Varadoiro + sports_centre: Centro deportivo + stadium: Estadio + swimming_pool: Piscina + track: Pista de carreiras + water_park: Parque acuático + natural: + bay: Baía + beach: Praia + cape: Cabo + cave_entrance: Entrada de cova + channel: Canal + cliff: Cantil + coastline: Litoral + crater: Cráter + feature: Elemento + fell: Brañal + fjord: Fiorde + glacier: Glaciar + hill: Outeiro + island: Illa + land: Terra + marsh: Marisma + moor: Páramo + mud: Lama + peak: Pico + point: Punto + reef: Arrecife + river: Río + rock: Rocha + scree: Pedregal + shoal: Cardume + spring: Primavera + strait: Estreito + tree: Árbore + valley: Val + volcano: Volcán + water: Auga + wetland: Pantano + wetlands: Pantano + wood: Bosque + place: + airport: Aeroporto + city: Cidade + country: País + county: Condado + farm: Granxa + hamlet: Aldea + house: Casa + houses: Casas + island: Illa + islet: Illote + locality: Localidade + moor: Páramo + municipality: Municipio + postcode: Código postal + region: Rexión + sea: Mar + state: Estado/Provincia + subdivision: Subdivisión + suburb: Barrio + town: Cidade + unincorporated_area: Área non incorporada + village: Vila + tourism: + alpine_hut: Cabana alpina + artwork: Obra de arte + attraction: Atracción + bed_and_breakfast: Cama e almorzo + cabin: Cabana + camp_site: Campamento + caravan_site: Sitio de caravanas + chalet: Chalé + guest_house: Albergue + hostel: Hostal + hotel: Hotel + information: Información + lean_to: Caseta + motel: Motel + museum: Museo + picnic_site: Sitio de pícnic + theme_park: Parque temático + valley: Val + viewpoint: Miradoiro + zoo: Zoolóxico layouts: edit: Editar - map: - coordinates: "Coordenadas:" - edit: Editar + export: Exportar + export_tooltip: Exportar os datos do mapa + history: Historial + intro_3_partners: wiki + make_a_donation: + text: Facer unha doazón + news_blog: Blogue de novas + sign_up_tooltip: Crear unha conta para editar + view: Ver + view_tooltip: Ver o mapa message: + inbox: + date: Data + subject: Asunto message_summary: delete_button: Borrar + read_button: Marcar como lido + reply_button: Responder + unread_button: Marcar como non lido + new: + body: Corpo + subject: Asunto + outbox: + date: Data + subject: Asunto + read: + date: Data + reply_button: Responder + subject: Asunto sent_message_summary: delete_button: Borrar + notifier: + email_confirm: + subject: "[OpenStreetMap] Confirme o seu enderezo de correo electrónico" oauth_clients: edit: submit: Editar + title: Editar a súa aplicación + index: + application: Nome da aplicación + register_new: Rexistrar a súa aplicación + time: + formats: + friendly: "%e %B %Y ás %H:%M" trace: edit: + description: "Descrición:" + download: descargar edit: editar + filename: "Nome do ficheiro:" + map: mapa + owner: "Propietario:" + points: "Puntos:" save_button: Gardar os cambios + start_coord: "Coordenada de inicio:" + tags: "Etiquetas:" + tags_help: separadas por comas + uploaded_at: "Cargado o:" + visibility: "Visibilidade:" + visibility_help: que significa isto? + no_such_user: + title: Non existe tal usuario trace: + ago: hai {{time_in_words_ago}} + by: por + count_points: "{{count}} puntos" edit: editar + edit_map: Editar o mapa + identifiable: IDENTIFICABLE + in: en + map: mapa + more: máis + pending: PENDENTE + private: PRIVADO + public: PÚBLICO + view_map: Ver o mapa + trace_form: + description: Descrición + help: Axuda + tags: Etiquetas + tags_help: separadas por comas + upload_button: Cargar + visibility: Visibilidade + visibility_help: que significa isto? + trace_optionals: + tags: Etiquetas + trace_paging_nav: + next: Seguinte » + previous: "« Anterior" view: + description: "Descrición:" + download: descargar edit: editar + filename: "Nome do ficheiro:" + map: mapa + none: Ningún + owner: "Propietario:" + pending: PENDENTE + points: "Puntos:" + start_coordinates: "Coordenada de inicio:" + tags: "Etiquetas:" + uploaded: "Cargado o:" + visibility: "Visibilidade:" user: account: + current email address: "Enderezo de correo electrónico actual:" + delete image: Eliminar a imaxe actual + email never displayed publicly: (nunca mostrado publicamente) + flash update success: Información de usuario actualizada correctamente. + flash update success confirm needed: Información de usuario actualizada correctamente. Busque no seu correo electrónico unha mensaxe para confirmar o seu novo enderezo. + home location: "Lugar de orixe:" + image: "Imaxe:" + keep image: Manter a imaxe actual + latitude: "Latitude:" + longitude: "Lonxitude:" + make edits public button: Facer públicas todas as miñas edicións + my settings: Os meus axustes + new email address: "Novo enderezo de correo electrónico:" + new image: Engadir unha imaxe + preferred languages: "Linguas preferidas:" + profile description: "Descrición do perfil:" + public editing: + disabled link text: por que non podo editar? + enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits + enabled link text: que é isto? + heading: "Edición pública:" + public editing note: + heading: Edición pública + replace image: Substituír a imaxe actual + return to profile: Voltar ao perfil save changes button: Gardar os cambios + title: Editar a conta + update home location on click: Quere actualizar o domicilio ao premer sobre o mapa? + confirm: + button: Confirmar + failure: Xa se confirmou unha conta de usuario con este pase. + heading: Confirmar unha conta de usuario + press confirm button: Prema sobre o botón de confirmación que aparece a continuación para activar a súa conta. + success: Confirmouse a súa conta. Grazas por se rexistrar! + confirm_email: + button: Confirmar + failure: Xa se confirmou un enderezo de correo electrónico con este pase. + heading: Confirmar o cambio do enderezo de correo electrónico + press confirm button: Prema sobre o botón de confirmación que aparece a continuación para confirmar o seu novo enderezo de correo electrónico. + success: Confirmouse o seu enderezo de correo electrónico. Grazas por se rexistrar! + filter: + not_an_administrator: Ten que ser administrador para poder levar a cabo esta acción. login: + create_account: cree unha conta + email or username: "Enderezo de correo electrónico ou nome de usuario:" + lost password link: Perdeu o seu contrasinal? password: "Contrasinal:" + please login: Identifíquese ou {{create_user_link}}. + remember: "Lembrádeme:" + lost_password: + email address: "Enderezo de correo electrónico:" + heading: Esqueceu o contrasinal? + new password button: Restablecer o contrasinal + notice email cannot find: Non se puido atopar o enderezo de correo electrónico. + notice email on way: Por desgraza perdeuno, pero hai en camiño unha mensaxe de correo electrónico coa que o poderá restablecer axiña. + title: Contrasinal perdido + make_friend: + already_a_friend: Xa é amigo de {{name}}. + failed: Houbo un erro ao engadir a {{name}} como amigo. + success: "{{name}} xa é o seu amigo." new: + confirm email address: Confirmar o enderezo de correo electrónico + confirm password: "Confirmar o contrasinal:" + display name: "Nome mostrado:" + display name description: O seu nome de usuario mostrado publicamente. Pode cambialo máis tarde nas preferencias. + email address: "Enderezo de correo electrónico:" + fill_form: Encha o formulario e axiña recibirá un correo electrónico coas instrucións para activar a súa conta. + heading: Crear unha conta de usuario + no_auto_account_create: Por desgraza, arestora non podemos crear automaticamente unha conta para vostede. password: "Contrasinal:" + title: Crear unha conta + no_such_user: + body: Non existe ningún usuario co nome "{{user}}". Comprobe a ortografía ou que a ligazón que seguiu estea ben. + heading: O usuario {{user}} non existe + title: Non existe tal usuario + popup: + friend: Amigo + your location: A súa localización + remove_friend: + not_a_friend: "{{name}} non é un dos seus amigos." + success: "{{name}} foi eliminado dos seus amigos." reset_password: + confirm password: "Confirmar o contrasinal:" + flash changed: Cambiouse o seu contrasinal. + flash token bad: Non se atopou o pase. Quizais debería comprobar o enderezo URL. + heading: Restablecer o contrasinal de {{user}} password: "Contrasinal:" + reset: Restablecer o contrasinal + title: Restablecer o contrasinal + set_home: + flash success: Gardouse o domicilio view: + activate_user: activar este usuario + add as friend: engadir como amigo + ago: (hai {{time_in_words_ago}}) + block_history: ver os bloqueos recibidos + confirm: Confirmar + create_block: bloquear este usuario + created from: "Creado a partir de:" + deactivate_user: desactivar este usuario + delete_user: borrar este usuario + description: Descrición edits: edicións + email address: "Enderezo de correo electrónico:" + hide_user: agochar este usuario + if set location: Se define a súa localización, aquí aparecerá un mapa. Pode establecer o seu lugar de orixe na súa páxina de {{settings_link}}. + km away: a {{count}}km de distancia + m away: a {{count}}m de distancia + moderator_history: ver os bloqueos dados + my edits: as miñas edicións + my settings: os meus axustes + no friends: Aínda non engadiu ningún amigo. + oauth settings: axustes OAuth + remove as friend: eliminar como amigo + role: + administrator: Este usuario é administrador + grant: + administrator: Conceder o acceso de administrador + moderator: Conceder o acceso de moderador + moderator: Este usuario é moderador + revoke: + administrator: Revogar o acceso de administrador + moderator: Revogar o acceso de moderador + send message: enviar unha mensaxe + settings_link_text: axustes + unhide_user: descubrir este usuario + user location: Localización do usuario + your friends: Os seus amigos + user_role: + filter: + already_has_role: O usuario xa ten o rol {{role}}. + doesnt_have_role: O usuario non ten o rol {{role}}. + not_a_role: A cadea "{{role}}" non é un rol correcto. + not_an_administrator: Só os administradores poden xestionar os roles dos usuarios, e vostede non é administrador. + grant: + are_you_sure: Seguro que quere concederlle o rol "{{role}}" ao usuario "{{name}}"? + confirm: Confirmar + fail: Non se lle puido conceder o rol "{{role}}" ao usuario "{{name}}". Comprobe que tanto o usuario coma o rol son correctos. + heading: Confirmar a concesión do rol + title: Confirmar a concesión do rol + revoke: + are_you_sure: Seguro que quere revogarlle o rol "{{role}}" ao usuario "{{name}}"? + confirm: Confirmar + fail: Non se lle puido revogar o rol "{{role}}" ao usuario "{{name}}". Comprobe que tanto o usuario coma o rol son correctos. + heading: Confirmar a revogación do rol + title: Confirmar a revogación do rol diff --git a/config/locales/gsw.yml b/config/locales/gsw.yml index 7baca62da..839e56cc5 100644 --- a/config/locales/gsw.yml +++ b/config/locales/gsw.yml @@ -162,6 +162,8 @@ gsw: create: trace_uploaded: Dyy GPX-Datei isch uffeglade wore un wartet uf d Ufnahm in d Datebank. Des gschiht normalerwyys innerhalb vun ere halbe Stund, derno wird Dir e Bstetigungs-E-Mail gschickt. upload_trace: E GPS-Track uffelade + delete: + scheduled_for_deletion: Track, wu zum Lesche vorgsäh isch edit: description: "Bschryybig:" download: abelade @@ -179,14 +181,111 @@ gsw: uploaded_at: "Uffegladen am:" visibility: "Sichtbarkeit:" visibility_help: Was heißt des? + list: + public_traces: Effetligi GPS-Track + public_traces_from: Effetligi GPS-Track vu {{user}} + tagged_with: Gchännzeichnet mit {{tags}} + your_traces: Dyy GPS-Track + make_public: + made_public: Track, wu vereffetligt isch + no_such_user: + body: Äxgisi, s git kei Benutzer mit em Name {{user}}. Bitte iberprief Dyy Schryybwyys, oder villicht isch s Gleich, wu Du nogange bisch, falsch. + heading: Dr Benutzer {{user}} git s nit + title: Benutzer nit gfunde trace: + ago: "{{time_in_words_ago}} här" + by: vu count_points: "{{count}} Pinkt" + edit: bearbeite edit_map: Charte bearbeite + in: in + map: Charte + more: meh pending: HÄNGIG private: PRIVAT + public: EFFETLI + trace_details: Track-Einzelheite aaluege view_map: Charten aazeige + trace_form: + description: Bschryybig + help: Hilf + tags: Markierige + tags_help: Trännig dur Komma + upload_button: Uffelade + upload_gpx: GPX-Datei uffelade + visibility: Sichtbarkeit + visibility_help: Was heißt des? trace_header: see_all_traces: Alli Tracks aaluege see_just_your_traces: Eigeni GPS-Tracks aazeige oder neji uffelade see_your_traces: Eigeni GPS-Tracks aazeige traces_waiting: "{{count}} vu Dyyne Tracks sin zur Zyt in dr Warteschlang. Bitte wart, bis die fertig sin go d Verarbeitig nit fir anderi Nutzer blockiere." + trace_optionals: + tags: Markierige + view: + delete_track: Dää Track lesche + description: "Bschryybig:" + download: abelade + edit: bearbeite + edit_track: Dää Track bearbeite + filename: "Dateiname:" + heading: Am Bschaue vum Track {{name}} + map: Charte + none: Keini + owner: "Bsitzer:" + pending: HÄNGIG + points: "Pinkt:" + start_coordinates: "Startkoordinate:" + tags: "Markierige:" + title: Am Aaluege vum Track {{name}} + trace_not_found: Track nit gfunde! + uploaded: "Uffegladen am:" + visibility: "Sichtbarkeit:" + visibility: + identifiable: Identifizierbar (wird in dr Tracklischt as anonymi, sortierti Punktfolg mit Zytstämpfel aazeigt) + private: Privat (nume as anonymi, nit sortierti Pinkt ohni Zytstämpfel aazeigt) + public: Effentlig (wird in dr Tracklischt aazeigt, aber numen as anonymi, nit sortierti Punktfolg ohni Zytstämpfel) + trackable: Track (wird in dr Tracklischt as anonymi, sortierti Punktfolg mit Zytstämpfel aazeigt) + user: + confirm_email: + button: Bstetige + failure: E E-Mail-Adräss isch scho mit däm Gleich bstetigt wore. + heading: Änderig vu dr E-Mail-Adräss bstetige + press confirm button: Druck unte uf dr „Bstetige“-Chnopf go Dyy nej E-Mail-Adräss bstetige. + success: Dyy E-Mail-Adräss isch bstetigt wore, dankschen fir s Regischtriere! + filter: + not_an_administrator: Du muesch e Administrator syy go die Aktion uusfiere. + go_public: + flash success: Alli Dyyni Bearbeitige sion jetz effetlig, un Du derfsch jetz Bearbeitige mache. + make_friend: + already_a_friend: Du bisch scho ne Frynd vu {{name}}. + failed: Excusez, {{name}} het nit as Frynd chenne zuegfiegt wäre. + success: "{{name}} isch jetz Dyy Frynd." + popup: + nearby mapper: Mapper in dr Nechi + your location: Dyy Standort + reset_password: + confirm password: "Passwort bstetige:" + flash changed: Dyy Passwort isch gänderet wore. + flash token bad: Mir hän des Chirzel leider nit chenne finde. Iberprief d URL. + heading: Passwort fir {{user}} zrucksetze + reset: Passwort zrucksetze + title: Passwort zrucksetze + user_role: + filter: + already_has_role: Dr Nutzer ghert scho zue dr Rolle {{role}}. + doesnt_have_role: Dr Nutzer het kei Roll {{role}}. + not_a_role: D Zeichechette „{{role}}“ bezeichnet kei giltigi Rolle. + not_an_administrator: Benutzerrolle chenne nume vu Adminischtratore verwaltet wäre, un Du bisch kei Adminischtrator. + grant: + are_you_sure: Bisch sicher, ass Du dr Benutzer „{{name}}“ dr Rolle „{{role}}“ witt zueordne? + confirm: Bstetige + fail: Dr Benutzer „{{name}}“ het dr Rolle „{{role}}“ nit chenne zuegordnet wären. Bitte iberprief, eb s sich um e giltige Benutzer un e giltigi Rolle handlet. + heading: Rollezueornig bstetige + title: Rollezueornig bstetige + revoke: + are_you_sure: Bisch sicher, ass Du d Zueornig vum Benutzer „{{name}}“ zue dr Rolle „{{role}}“ witt ufhebe? + confirm: Bstetige + fail: Het d Zueornig vum Benutzer „{{name}}“ zue dr Rolle „{{role}}“ nit chenne ufhebe. Bitte iberprief, eb s sich um e giltige Benutzer un e giltigi Rolle handlet. + heading: D Ufhebig vu dr Rollezueornig bstetige + title: Ufhebig vu dr Rollezueornig bstetige diff --git a/config/locales/he.yml b/config/locales/he.yml index 76f953b5a..d098292ac 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -205,7 +205,6 @@ he: zero: פחות מקילומטר layouts: edit: עריכה - edit_tooltip: עריכת מפות export: יצוא export_tooltip: ייצוא נתוני המפה gps_traces_tooltip: ניהול מסלולים @@ -235,9 +234,6 @@ he: view_tooltip: צפייה במפות welcome_user: "{{user_link}}ברוך הבא" welcome_user_link_tooltip: דף המשתמש שלך - map: - edit: עריכה - view: תצוגה message: delete: deleted: ההודעה נמחקה @@ -340,8 +336,6 @@ he: save changes button: שמירת השינויים confirm: heading: אימות חשבון משתמש - friend_map: - your location: מיקומך login: create_account: יצירת חשבון login_button: כניסה @@ -359,6 +353,8 @@ he: no_such_user: heading: המשתמש {{user}} אינו קיים title: אין משתמש כזה + popup: + your location: מיקומך reset_password: confirm password: "אימות הסיסמה:" flash changed: סיסמתך השתנתה. @@ -367,23 +363,17 @@ he: reset: איפוס הסיסמה title: reset password view: - add image: הוספת תמונה ago: (לפני {{time_in_words_ago}}) - change your settings: שינוי ההגדרות שלך - delete image: מחיקת תמונה description: תאור edits: עריכות km away: במרחק {{count}} ק"מ m away: במרחק {{count}} מ' my diary: היומן שלי my edits: העריכות שלי - my_oauth_details: צפייה בפרטי ה־OAuth שלי new diary entry: רשומה חדשה ביומן no friends: לא הוספת חברים כלל עדיין. remove as friend: הסרה כחבר send message: שליחת הודעה settings_link_text: הגדרות traces: מסלולים - upload an image: העלאת תמונה - user image heading: תמונת המשתמש your friends: החברים שלך diff --git a/config/locales/hi.yml b/config/locales/hi.yml index c6c3ee2a6..18c816efc 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -97,7 +97,7 @@ hi: node_history_title: "नोड इतिहास: {{node_name}}" view_details: विवरण देखें not_found: - sorry: क्षमा करें, ये {{type}} इस आईडी {{id}} के साथ, पाया नहीं जा सका + sorry: क्षमा करें, ये {{type}} इस आईडी {{id }} के साथ, पाया नहीं जा सका type: node: आसंधि relation: संबंध @@ -174,6 +174,8 @@ hi: no_edits: (कोई संपादित नहीं है) still_editing: (संपादित किया जा रहा है) view_changeset_details: इस changeset के विवरण देखे + changeset_paging_nav: + showing_page: "इस पृष्ठ का प्रदर्शन:" changesets: area: क्षेत्र comment: टिप्पणी @@ -239,7 +241,6 @@ hi: other: करीब {{count}} किमी zero: 1 किमी से कम layouts: - edit_tooltip: नक्शा संपादन home: गृह inbox_tooltip: other: आपके इनबॉक्स में {{count}} अपठित संदेश हैं @@ -247,10 +248,6 @@ hi: sign_up_tooltip: संपादन के लिए खाता बनाएं view_tooltip: नक्शा देखें welcome_user_link_tooltip: आपका प्रयोक्ता पन्ना - map: - coordinates: "निर्देशांक:" - edit: संपादित करें - view: दृश्य message: delete: deleted: संदेश खात्मा diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index 449f515c8..aecff5f91 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -1398,6 +1398,10 @@ hsb: please login: ProÅ¡u přizjew so abo {{create_user_link}}. remember: "Spomjatkować sej:" title: Přizjewjenje + logout: + heading: Z OpenStreetMap wotzjewić + logout_button: Wotzjewić + title: Wotzjewić lost_password: email address: "E-mejlowa adresa:" heading: Sy hesło zabył? diff --git a/config/locales/is.yml b/config/locales/is.yml index 8c63e02fb..355660b5b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -899,13 +899,15 @@ is: count_points: "{{count}} punktar" edit: breyta edit_map: Breyta kortinu með ferilin til hliðsjónar + identifiable: AUÐKENNANLEGUR in: í map: kort more: upplýsingar pending: Í BIÐ - private: BARA ÞÚ SÉRÐ + private: PRÍVAT public: ALLIR SJÁ trace_details: Sýna upplýsingar um ferilinn + trackable: REKJANLEGUR view_map: Sjá kort trace_form: description: Lýsing @@ -1012,6 +1014,10 @@ is: please login: Vinsamlegast innskráðu þig eða {{create_user_link}}. remember: "Muna innskráninguna:" title: Innskrá + logout: + heading: Útskrá + logout_button: Útskrá + title: Útskrá lost_password: email address: "Netfang:" heading: Gleymt lykilorð? diff --git a/config/locales/it.yml b/config/locales/it.yml index 37fecd410..3af1e40e8 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1007,7 +1007,7 @@ it: login: account not active: Spiacenti, il tuo profilo non è ancora attivo.
Clicca sul collegamento presente nell'email di conferma per attivare il tuo profilo. auth failure: Spiacenti, non si può accedere con questi dettagli. - create_account: crea un profilo + create_account: crealo ora email or username: "Indirizzo email o nome utente:" heading: Entra login_button: Entra diff --git a/config/locales/km.yml b/config/locales/km.yml index 68305de82..00b378a98 100644 --- a/config/locales/km.yml +++ b/config/locales/km.yml @@ -226,12 +226,10 @@ km: us_postcode: លទ្ធផលពី Geocoder.us layouts: edit: កែប្រែ​ - edit_tooltip: កែប្រែ​ផែនទី​ export: នាំចេញ​ export_tooltip: នាំចេញ​ទិន្នន័យផែនទី​ help_wiki_tooltip: ជំនួយ & តំបន់​វិគីសម្រាប់​គម្រោង​នេះ history: ប្រវត្តិ​ - history_tooltip: ប្រវត្តិនៃសំនុំ​បំលាស់ប្តូរ​ home_tooltip: ទៅទីតាំងដើម​ inbox: ប្រអប់សំបុត្រ​ ({{count}}) intro_2: OpenStreetMap អនុញ្ញាតឲ្យអ្នក​មើល កែប្រែ និងប្រើប្រាស់​ទិន្នន័យ​ភូមិសាស្រ្ត ក្នុងភាពរួមសហការគ្នា​ពីគ្រប់ទិសទី​លើផែនដី​។ @@ -245,9 +243,6 @@ km: view: មើល​ view_tooltip: មើលផែនទី welcome_user_link_tooltip: ទំព័រអ្នកប្រើប្រាស់​របស់អ្នក​ - map: - edit: កែប្រែ​ - view: មើល​ message: inbox: date: កាលបរិច្ឆេទ​ @@ -415,6 +410,4 @@ km: my edits: កំណែប្រែ​របស់ខ្ញុំ​ no friends: អ្នកមិនទាន់បានបន្ថែមមិត្តណាមួយនៅឡើយទេ​។ remove as friend: ដកចេញជាមិត្ត​ - upload an image: ផ្ទុកឡើង​រូបភាព​ - user image heading: រូបភាព​អ្នកប្រើប្រាស់​ your friends: មិត្តរបស់អ្នក​ diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 3eb677d0a..675208a6f 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -244,7 +244,6 @@ ko: layouts: donate_link_text: 기부 edit: 편집 - edit_tooltip: 지도 편집 export: 추출 export_tooltip: 맵 정보 추출 gps_traces: GPS 추적 @@ -252,7 +251,6 @@ ko: help_wiki: 도움말 & 위키 help_wiki_tooltip: 프로젝트 도움말 & 위키 history: 이력 - history_tooltip: 변경셋 이력 inbox: 받은 쪽지함 ({{count}}) inbox_tooltip: one: 한 개의 읽지 않은 쪽지가 있습니다. @@ -275,10 +273,6 @@ ko: view: 보기 view_tooltip: 지도 보기 welcome_user: "{{user_link}}님 환영합니다." - map: - coordinates: "좌표:" - edit: 편집 - view: 보기 message: inbox: date: 날짜 diff --git a/config/locales/ksh.yml b/config/locales/ksh.yml index 67765877d..ef81a0174 100644 --- a/config/locales/ksh.yml +++ b/config/locales/ksh.yml @@ -1,4 +1,4 @@ -# Messages for Ripoarisch (Ripoarisch) +# Messages for Colognian (Ripoarisch) # Exported from translatewiki.net # Export driver: syck # Author: Purodha @@ -102,12 +102,8 @@ ksh: start: osm_xml_data: OpenStreetMap sing XML Daate layouts: - edit_tooltip: Landkaate ändere view_tooltip: Landkaate beloore - map: - coordinates: "Ko'oodinate:" notifier: - diary_comment_notification: email_confirm: subject: "[OpenStreetMap] Donn Ding Addräß för de e-mail beshtääteje" email_confirm_html: @@ -116,7 +112,6 @@ ksh: hopefully_you_1: Someone (hopefully you) would like to change their Adräß för de e-mail ändere lost_password: subject: "[OpenStreetMap] Aanfrooch: Paßwoot neu säze" - message_notification: signup_confirm: subject: "[OpenStreetMap] Donn Ding Addräß för de e-mail beshtääteje" signup_confirm_html: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index af79d9193..940c50b2e 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -15,9 +15,6 @@ lt: history: Istorija news_blog: Naujienų tinklaraštis shop: Parduotuvė - map: - edit: Redaguoti - view: Žemėlapis site: key: map_key: Žemėlapio legenda diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 9943b161a..adfbf217b 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -24,6 +24,3 @@ lv: browse: common_details: version: "Versija:" - map: - edit: Labot - view: Skatīties diff --git a/config/locales/mk.yml b/config/locales/mk.yml index c466e629a..88ce24505 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -1387,6 +1387,10 @@ mk: please login: Најавете се или {{create_user_link}}. remember: "Запомни ме:" title: Најавување + logout: + heading: Одјавување од OpenStreetMap + logout_button: Одјава + title: Одјава lost_password: email address: "Е-пошта:" heading: Ја заборавивте лозинката? diff --git a/config/locales/nds.yml b/config/locales/nds.yml index e2ac2427c..b5f452384 100644 --- a/config/locales/nds.yml +++ b/config/locales/nds.yml @@ -235,7 +235,6 @@ nds: layouts: donate_link_text: Spennen edit: Ännern - edit_tooltip: Koorten ännern export: Export export_tooltip: Koortendaten exporteren help_wiki: Hülp & Wiki @@ -258,10 +257,6 @@ nds: view_tooltip: Koorten ankieken welcome_user: Willkamen, {{user_link}} welcome_user_link_tooltip: Dien Brukersied - map: - coordinates: "Koordinaten:" - edit: Ännern - view: Ankieken message: delete: deleted: Naricht wegdaan @@ -459,9 +454,6 @@ nds: return to profile: Trüch na’t Profil save changes button: Ännern spiekern title: Brukerkonto ännern - friend_map: - nearby mapper: "Koortenmaker in de Neegd: [[nearby_user]]" - your location: Dien Standoort login: create_account: Brukerkonto opstellen email or username: "E-Mail-Adress oder Brukernaam:" @@ -489,6 +481,9 @@ nds: no_such_user: heading: Den Bruker {{user}} gifft dat nich title: Bruker nich funnen + popup: + nearby mapper: Koortenmaker in de Neegd + your location: Dien Standoort remove_friend: not_a_friend: "{{name}} is keen von dien Frünn." success: "{{name}} is rutnahmen bi de Frünn." @@ -502,9 +497,7 @@ nds: flash success: Standoort is spiekert. view: add as friend: as Fründ tofögen - add image: Bild tofögen ago: (vör {{time_in_words_ago}}) - delete image: Bild wegdoon description: Beschrieven diary: Dagbook edits: Ännern @@ -516,11 +509,8 @@ nds: my edits: mien Ännern nearby users: "Brukers in de Neegd:" new diary entry: Nee Dagbook-Indrag - no home location: Keen Standoort angeven. remove as friend: as Fründ rutnehmen send message: Naricht sennen - upload an image: Bild hoochladen - user image heading: Brukerbild your friends: Dien Frünn user_block: partial: diff --git a/config/locales/ne.yml b/config/locales/ne.yml new file mode 100644 index 000000000..bb2735fd5 --- /dev/null +++ b/config/locales/ne.yml @@ -0,0 +1,300 @@ +# Messages for Nepali (नेपाली) +# Exported from translatewiki.net +# Export driver: syck +# Author: सरोज कुमार ढकाल +ne: + browse: + changeset: + changeset: "चेन्जसेट: {{id}}" + changesetxml: चेन्जसेट XML + download: डाउनलोड गर्ने {{changeset_xml_link}} वा {{osmchange_xml_link}} + feed: + title: चेन्जसेट {{id}} + title_comment: चेन्जसेट {{id}} - {{comment}} + title: चेन्जसेट + changeset_details: + belongs_to: "स्वामित्व:" + box: बाकस + closed_at: "बन्द गरिएको:" + created_at: "श्रृजना गरिएको:" + show_area_box: क्षेत्र बाकस देखाउने + changeset_navigation: + all: + next_tooltip: पछिल्लो चेन्जसेट + prev_tooltip: अघिल्लो चेन्जसेट + user: + name_tooltip: " {{user}}को सम्पादन हेर्ने" + next_tooltip: पछिल्लो सम्पादन {{user}} + prev_tooltip: पहिलो सम्पादन {{user}} + common_details: + changeset_comment: "टिप्पणी:" + edited_at: "समपादित :" + edited_by: "सम्पादक:" + in_changeset: "चेन्जसेटमा:" + version: "संस्करण:" + containing_relation: + entry: सम्बन्ध {{relation_name}} + entry_role: सम्बन्ध {{relation_name}} (as {{relation_role}}) + map: + deleted: मेटियो + larger: + area: क्षेत्र ठूलो नक्सामा हेर्ने + node: नोड ठूलो नक्सामा हेर्ने + relation: सम्बन्ध ठूलो नक्सामा हेर्ने + way: बाटो ठूलो नक्सामा हेर्ने \ + loading: लोड हुदैछ... + node: + download: "{{download_xml_link}}, {{view_history_link}} वा{{edit_link}}" + download_xml: " XML डाउनलोड गर्ने" + edit: सम्पादन + node: नोड + node_title: "नोड: {{node_name}}" + view_history: इतिहास हेर्ने + node_details: + coordinates: "अक्षांशहरु:" + part_of: "को खण्ड:" + node_history: + download: "{{download_xml_link}} वा {{view_details_link}}" + download_xml: XML डाउनलोड गर्ने + node_history: नोड इतिहास \ + node_history_title: "नोड इतिहास: {{node_name}}" + view_details: बिस्तृत जानकारी हेर्ने \ + not_found: + sorry: माफ गर्नुहोस, {{id}} आईडी भएको {{type}} , फेला पार्न सकिएन । + type: + changeset: परिवर्तनसेट \ + node: नोड + relation: सम्बन्ध + way: बाटो + paging_nav: + of: को \ + showing_page: देखाउदै पृष्ठ + relation: + download: "{{download_xml_link}} वा {{view_history_link}}" + download_xml: " XML डाउनलोड गर्ने" + relation: सम्बन्ध + relation_title: "सम्बन्ध: {{relation_name}}" + view_history: इतिहास हेर्ने + relation_details: + members: "सदस्यहरु:" + part_of: "को खण्ड:" + relation_history: + download: "{{download_xml_link}} वा {{view_details_link}}" + download_xml: XML डाउनलोड गर्ने + relation_history: सम्बन्ध इतिहास + relation_history_title: "सम्बन्ध इतिहास: {{relation_name}}" + view_details: विस्तृत जानकारी हेर्ने + relation_member: + entry_role: "{{type}} {{name}} {{role}}को रुपमा" + type: + node: नोड + relation: सम्बन्ध + way: बाटो + start: + manually_select: आफै फरक क्षेत्र छान्ने + view_data: हालको मानचित्रबाट डेटा हेर्ने + start_rjs: + data_frame_title: डेटा \ + data_layer_name: डेटा + details: विस्तृत जानकारी + drag_a_box: क्षेत्र छान्न नक्साको बाकसलाई घिसार्नुहोस + edited_by_user_at_timestamp: " [[user]]द्रारा [[timestamp]]मा सम्पादित \\" + history_for_feature: " [[feature]]को इतिहास" + load_data: डेटा लोडगर्ने + loading: लोड हुदैछ... + manually_select: आफै अर्को क्षेत्र छान्नुहोस \ + object_list: + api: यो क्षेत्र API बाट निकाल्नुहोस \ + back: वस्तु सुची देखाउने + details: विस्तृत जानकारीहरु \ + heading: वस्तु सुची + history: + type: + node: नोड [[id]] + way: बाटो [[id]] + selected: + type: + node: नोड [[id]] + way: बाटो [[id]] + type: + node: नोड + way: बाटो + private_user: निजी प्रयोगकर्ता + show_history: इतिहास देखाउने + wait: पर्खनुहोस..... + tag_details: + tags: "ट्यागहरु:" + way: + download: "{{download_xml_link}}, {{view_history_link}} वा {{edit_link}}" + download_xml: " XML डाउनलोड गर्ने" + edit: सम्पादन + view_history: इतिहास हेर्ने + way: बाटो + way_title: "बाटो: {{way_name}}" + way_details: + nodes: "नोडहरु:" + part_of: "को खण्ड:" + way_history: + download: "{{download_xml_link}} वा {{view_details_link}}" + download_xml: " XML डाउनलोड गर्ने" + view_details: विस्तृत जानकारी हेर्ने + way_history: बाटो इतिहास \ + way_history_title: "बाटो इतिहास: {{way_name}}" + diary_entry: + diary_comment: + confirm: " निश्चित गर्ने" + diary_entry: + comment_link: यो प्रविष्टीमा टिप्पणीगर्ने + confirm: निश्चित गर्ने + edit_link: यो प्रविष्टी सम्पादन गर्ने + hide_link: यो प्रविष्टी लुकाउने + reply_link: यो प्रविष्टीमा जवाफ लेख्ने + edit: + body: "मूख्य भाग:" + language: "भाषा:" + latitude: "देशान्तर:" + location: "स्थान:" + longitude: "अक्षांश:" + marker_text: दैनिकी प्रविष्ठी स्थान + save_button: संग्रह गर्ने + subject: "विषय:" + title: दैनिकी प्रविष्ठी सम्पादन गर्ने + use_map_link: नक्सा प्रयोगर्ने + view: + leave_a_comment: टिप्पणी छोड्ने + login_to_leave_a_comment: "{{login_link}} टिप्पणी छोड्नलाई" + trace: + create: + upload_trace: " GPS Trace अपलोड गर्ने" + delete: + scheduled_for_deletion: मेट्नको लागि तालिकावद्ध गरिएको ट्रेस + edit: + description: विवरण + download: डाउनलोड + edit: सम्पादन + filename: "फाइलनाम:" + heading: ट्रेस सम्पादन गर्दै {{name}} + map: नक्सा + owner: "मालिक:" + points: "बिन्दुहरु:" + save_button: परिवर्तनहरु संग्रह गर्ने + start_coord: "निर्देशंक सुरु गर्ने:" + tags: "ट्यागहरु:" + tags_help: अल्पविरामले छुट्याएको + title: ट्रेस सम्पादन गर्दै {{name}} + uploaded_at: "आध्यवधिक गरिएको:" + visibility: "दृश्यक्षमता:" + visibility_help: यसको मतलब के हो ? + list: + public_traces: सारवजनिक GPS ट्रेसहरु \ + public_traces_from: "{{user}}बाट सार्वकनिक GPS ट्रेसहरु" + tagged_with: " {{tags}}हरु द्वारा ट्याग गरिएको" + your_traces: तपाईको GPS ट्रेसहरु + make_public: + made_public: सार्वजनिक बनाइएको ट्रेस + no_such_user: + heading: प्रयोगकर्ता {{user}} अस्तित्वमा छैन \ + title: कुनै त्यस्तो प्रयोगकर्ता छैन + trace: + ago: "{{time_in_words_ago}} पहिले" + by: द्वारा + count_points: पोइन्टहरु {{count}} + edit: सम्पादन + edit_map: नक्सा सम्पादन गर्ने + in: मा + map: नक्सा + more: थप + pending: बाँकी रहेको + private: निजी + public: सार्वजनिक + trace_details: ट्रेसको विस्तृत जानकारी हेर्ने + view_map: नक्सा हेर्ने + trace_form: + description: विवरण + help: सहायता + tags: ट्यागहरु + tags_help: अल्पविरामले छुट्याएको + upload_button: अपलोड गर्ने + upload_gpx: GPX फाइल अपलोड गर्ने + visibility: दृश्यक्षमता + visibility_help: यसको मतलाब के हो ? + trace_header: + see_all_traces: सबै ट्रेसहरु हेर्ने + see_your_traces: तपाईको सबै ट्रेसहरु हेर्नुहोस \ + trace_optionals: + tags: ट्यागहरु + view: + delete_track: यो ट्रेस मेट्ने + description: "विवरण:" + download: डाउनलोड + edit: सम्पादन + edit_track: यो ट्रेस सम्पादन गर्ने + filename: "फाइलनाम:" + heading: हेर्दै ट्रेस {{name}} + map: नक्सा + none: कुनै पनि होइन + owner: "मालिक:" + pending: बाँकी + points: "विन्दुहरु:" + start_coordinates: निर्देशंक सुरु गर्ने + tags: "ट्यागहरु:" + title: हेर्दै ट्रेस {{name}} + trace_not_found: ट्रेस भेटिएन! + uploaded: "अपलोड गरिएको:" + visibility: "दृश्यक्षमता:" + user: + account: + flash update success: प्रयोगकर्ताको जानकारीहरु सफलतापूर्वक अध्यावधिक गरियो। + home location: "गृह स्थान:" + my settings: मेरो अनुकुलताहरु + no home location: तपाईले आफ्नो गृहस्थान प्रविष्ठ गर्नुभएको छैन। + preferred languages: "रुचाइएका भाषाहरु:" + public editing: + disabled link text: म किन सम्पादन गर्न सक्दिन? + enabled link text: यो के हो ? + heading: "सार्वजनिक सम्पादन:" + public editing note: + heading: सार्वजनिक सम्पादन + save changes button: परिवर्तनहरु संग्रह गर्नुहोस \ + confirm_email: + button: निश्चित + failure: यो टोकन को साथम एक इमेल पहिले नै निश्चित गरिसकिएको छ। + heading: इमेल परिवर्तन भएको निश्चित गर्नुहोस् \ + press confirm button: इमेल निश्चित गर्नको लागि निश्चितमा क्लिक गर्नुहोस् । + success: तपाईको इमेल निश्चित गर्नुहोस, ग्राह्याताको लागि धन्यवाद! + filter: + not_an_administrator: यो कार्य गर्न तपाई प्रवन्धक हुनुपर्छ . + go_public: + flash success: तपाईको सबै सम्पादनहरु सार्वाजनिक छन् ,तपाई अब सम्पान लायक हुनु भयो । + make_friend: + already_a_friend: " {{name}} सँग तपाई पहिले नै मित्रता गरिसक्नु भएको छ ।" + failed: माफ गर्नुहोला, {{name}}लाई मित्रको रुपमा थप्न सकिएन। + success: "{{name}} अब तपाईको मित्र हुनुभएको छ।" + popup: + nearby mapper: नजिकको मानचित्रकर्मी + your location: तपाईको स्थान + reset_password: + confirm password: "प्रवेशशव्द निश्चित गर्ने:" + flash changed: तपाईको प्रवेशशव्द परिवर्तन गरिएको छ। + heading: " {{name}}को लागि प्रवेशशव्द परिवर्तन गर्ने \\" + password: "प्रवेशशव्द:" + reset: नयाँ प्रवेशशव्द \ + title: प्रवेशशव्द परिवर्तन गर्ने + user_role: + filter: + already_has_role: प्रयोगकर्ता सँग {{role}} भूमिका पहिले देखि नै छ। + doesnt_have_role: " प्रयोगर्ताको {{role}}को भूमिका छैन" + not_a_role: " `{{role}}' मान्य भूमिका हैन ।" + not_an_administrator: प्रवन्धकहरुले भूमिका व्यवस्थापन गर्न सक्छन् र तपाई प्रवन्धक हैन । + grant: + are_you_sure: भूमिका `{{role}}' प्रयोगकर्ता `{{name}}'लाई प्रदान गर्न निश्चित हुनुहुन्छ? + confirm: निश्चित गर्ने + fail: भूमिका `{{role}}' प्रयोगकर्ता `{{name}}'लाई प्रदान गर्न सकिएन । कृपया प्रयोगकर्ता र भूमिका दुबै मान्य छन् भनि जाँच गर्नुहोस् । + heading: भूमिका प्रदान निश्चित गर्ने \ + title: भूमिका प्रदान निश्चित गर्ने \ + revoke: + are_you_sure: तपाईँ भूमिका `{{role}}' , `{{name}} प्रोगकर्ताबाट फिर्ता लिने कुरामा निश्चित हुनुहुन्छ'? + confirm: निश्चित गर्ने + fail: भूमिका `{{role}}' ,`{{name}}'बाट फिर्ता लिन सकिएन । प्रोगकर्ता नाम र भूमिका दुबै मान्य छन् भन्ने खुलाउनु होस् । + heading: भूमिका फिर्ता निश्चित गर्ने + title: Confirm role revoking diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 0a6376099..ef6da4da1 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1,7 +1,9 @@ # Messages for Norwegian Nynorsk (‪Norsk (nynorsk)‬) # Exported from translatewiki.net # Export driver: syck +# Author: Eirik # Author: Gunnernett +# Author: Nghtwlkr nn: activerecord: attributes: @@ -13,7 +15,75 @@ nn: friend: Ven user: Brukar browse: + changeset_details: + box: boks map: deleted: Sletta larger: area: Sjå området på eit større kart + loading: Lastar inn … + node: + download_xml: Last ned XML + view_history: vis historikk + node_history: + download_xml: Last ned XML + paging_nav: + of: av + relation_details: + members: "Medlemmar:" + relation_member: + entry_role: "{{type}} {{name}} som {{role}}" + type: + node: Punkt + relation: Relasjon + way: Veg + start_rjs: + data_frame_title: Data + data_layer_name: Data + load_data: Last data + loading: Lastar... + object_list: + back: Syn objektliste + details: Detaljer + heading: Objektliste + wait: Vent... + way: + download: "{{download_xml_link}}, {{view_history_link}} eller {{edit_link}}" + download_xml: Last ned XML + edit: rediger + view_history: vis historikk + way: Veg + way_title: "Veg: {{way_name}}" + way_details: + also_part_of: + one: også del av vegen {{related_ways}} + other: også del av vegane {{related_ways}} + nodes: Punkt + part_of: "Del av:" + way_history: + download_xml: Last ned XML + view_details: syn detaljer + geocoder: + distance: + one: omkring 1 km + other: omkring {{count}}km + zero: mindre enn 1 km + time: + formats: + friendly: "%e %B %Y kl %H:%M" + trace: + edit: + download: last ned + trace: + count_points: "{{count}} punkt" + in: i + map: kart + view: + download: last ned + filename: "Filnamn:" + map: kart + none: Inga + owner: "Eigar:" + user: + account: + image: "Bilete:" diff --git a/config/locales/no.yml b/config/locales/no.yml index 7381cdff2..8c127eea1 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -75,6 +75,11 @@ way: Vei way_node: Veinode way_tag: Veimerkelapp + application: + require_cookies: + cookies_needed: Du ser ut til å ha deaktivert informasjonskapsler. Aktiver informasjonskapsler i nettleseren din før du fortsetter. + setup_user_auth: + blocked: Din tilgang til API-et er blokkert. Logg inn på nettstedet for å finne ut mer. browse: changeset: changeset: "Endringssett: {{id}}" @@ -315,12 +320,18 @@ recent_entries: "Nye oppføringer i dagboka:" title: Brukernes dagbøker user_title: Dagboken for {{user}} + location: + edit: Rediger + location: "Posisjon:" + view: Vis new: title: Ny dagbokoppføring no_such_entry: + body: Det er ingen dagbokinnlegg eller kommentar med ID {{id}}. Sjekk om du har skrevet feil eller om lenka du klikket er feil. heading: Ingen oppføring med {{id}} title: Ingen slik dagbokoppføring no_such_user: + body: Beklager, det finnes ingen bruker med navnet {{user}}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. heading: Brukeren {{user}} finnes ikke title: Ingen bruker funnet view: @@ -352,6 +363,9 @@ output: Utdata paste_html: Lim inn HTML som skal bygges inn i nettsted scale: Skala + too_large: + body: Dette området er for stort for å bli eksportert som OpenStreetMap XML-data. Zoom inn eller velg et mindre område. + heading: For stort område zoom: Zoom start_rjs: add_marker: Legg til en markør på kartet @@ -366,6 +380,7 @@ title: geonames: Posisjon fra GeoNames osm_namefinder: "{{types}} fra OpenStreetMap Namefinder" + osm_nominatim: Sted fra OpenStreetMap Nominatim types: cities: Byer places: Steder @@ -394,6 +409,7 @@ geonames: Resultat fra GeoNames latlon: Resultat fra Internt osm_namefinder: Resultat fra OpenStreetMap Namefinder + osm_nominatim: Resultat fra OpenStreetMap Nominatim uk_postcode: Resultat fra NPEMap / FreeThe Postcode us_postcode: Resultat fra Geocoder.us search_osm_namefinder: @@ -409,23 +425,27 @@ bank: Bank bar: Bar bench: Benk + bicycle_parking: Sykkelparkering bicycle_rental: Sykkelutleie brothel: Bordell bureau_de_change: Vekslingskontor bus_station: Busstasjon cafe: Kafé car_rental: Bilutleie + car_sharing: Bildeling car_wash: Bilvask casino: Kasino cinema: Kino clinic: Klinikk club: Klubb college: Høyskole + courthouse: Rettsbygning crematorium: Krematorium dentist: Tannlege doctors: Leger dormitory: Sovesal drinking_water: Drikkevann + driving_school: Kjøreskole embassy: Ambassade emergency_phone: Nødtelefon fast_food: Hurtigmat @@ -444,6 +464,7 @@ library: Bibliotek market: Marked marketplace: Markedsplass + mountain_rescue: Fjellredning nightclub: Nattklubb office: Kontor park: Park @@ -457,9 +478,14 @@ prison: Fengsel pub: Pub public_building: Offentlig bygning + reception_area: Oppsamlingsområde + recycling: Resirkuleringspunkt restaurant: Restaurant retirement_home: Gamlehjem + sauna: Sauna school: Skole + shop: Butikk + shopping: Handel studio: Studio supermarket: Supermarked taxi: Drosje @@ -467,6 +493,8 @@ theatre: Teater toilets: Toaletter townhall: Rådhus + university: Universitet + vending_machine: Vareautomat veterinary: Veterinærklinikk wifi: WiFi-tilgangspunkt youth_centre: Ungdomssenter @@ -480,6 +508,7 @@ church: Kirke city_hall: Rådhus dormitory: Sovesal + entrance: Bygningsinngang farm: Gårdsbygg flats: Leiligheter garage: Garasje @@ -501,11 +530,25 @@ "yes": Bygning highway: bus_stop: Busstopp + construction: Motorvei under konstruksjon cycleway: Sykkelsti + distance_marker: Avstandsmarkør motorway: Motorvei + motorway_junction: Motorveikryss + path: Sti pedestrian: Gangvei + primary: Primær vei + primary_link: Primær vei road: Vei + secondary: Sekundær vei + secondary_link: Sekundær vei steps: Trapper + tertiary: Tertiær vei + track: Sti + trunk: Hovedvei + trunk_link: Hovedvei + unclassified: Uklassifisert vei + unsurfaced: Vei uten dekke historic: archaeological_site: Arkeologisk plass battlefield: Slagmark @@ -541,64 +584,92 @@ park: Park quarry: Steinbrudd railway: Jernbane + recreation_ground: Idrettsplass reservoir: Reservoar residential: Boligområde vineyard: Vingård wetland: Våtland wood: Skog leisure: + beach_resort: Strandsted + common: Allmenning fishing: Fiskeområde garden: Hage golf_course: Golfbane ice_rink: Skøytebane + marina: Båthavn miniature_golf: Minigolf nature_reserve: Naturreservat park: Park playground: Lekeplass + recreation_ground: Idrettsplass + slipway: Slipp sports_centre: Sportssenter stadium: Stadion swimming_pool: Svømmebaseng + track: Løpebane water_park: Vannpark natural: + bay: Bukt beach: Strand + cape: Nes cave_entrance: Huleinngang channel: Kanal cliff: Klippe coastline: Kystlinje crater: Krater + feature: Egenskap + fell: Fjellskrent fjord: Fjord geyser: Geysir glacier: Isbre + heath: Vidde + hill: Ås island: Øy + land: Land + marsh: Sump + moor: Myr mud: Gjørme peak: Topp + point: Punkt reef: Rev + ridge: Rygg river: Elv rock: Stein + scree: Ur scrub: Kratt + shoal: Grunning spring: Kilde + strait: Stred tree: Tre valley: Dal volcano: Vulkan water: Vann + wetland: Våtmark wetlands: Våtland wood: Skog place: airport: Flyplass city: By country: Land + county: Fylke farm: Gård + hamlet: Grend house: Hus houses: Hus island: Øy islet: Holme + locality: Plass + moor: Myr municipality: Kommune postcode: Postnummer region: Område sea: Hav + state: Delstat subdivision: Underavdeling suburb: Forstad town: Tettsted + village: Landsby railway: abandoned: Forlatt jernbane construction: Jernbane under konstruksjon @@ -606,10 +677,13 @@ disused_station: Nedlagt jernbanestasjon halt: Togstopp historic_station: Historisk jernbanestasjon + junction: Jernbanekryss platform: Jernbaneperrong station: Jernbanestasjon subway: T-banestasjon subway_entrance: T-baneinngang + tram: Sporvei + tram_stop: Trikkestopp shop: alcohol: Utenfor lisens art: Kunstbutikk @@ -675,13 +749,16 @@ alpine_hut: Fjellhytte artwork: Kunstverk attraction: Attraksjon + bed_and_breakfast: Bed and Breakfast cabin: Hytte camp_site: Teltplass caravan_site: Campingplass + chalet: Fjellhytte guest_house: Gjestehus hostel: Vandrerhjem hotel: Hotell information: Informasjon + lean_to: Lenne inntil motel: Motell museum: Museum picnic_site: Piknikplass @@ -693,8 +770,10 @@ canal: Kanal dam: Demning ditch: Grøft + mooring: Fortøyning rapids: Stryk river: Elv + riverbank: Elvebredd stream: Strøm waterfall: Foss javascripts: @@ -702,6 +781,13 @@ base: cycle_map: Sykkelkart noname: IntetNavn + site: + edit_disabled_tooltip: Zoom inn for å redigere kartet + edit_tooltip: Rediger kartet + edit_zoom_alert: Du må zoome inn for å redigere kartet + history_disabled_tooltip: Zoom inn for å vise redigeringer i dette området + history_tooltip: Vis redigeringer for dette området + history_zoom_alert: Du må zoome inn for å vise redigeringer i dette området layouts: donate: Støtt OpenStreetMap ved {{link}} til Hardware Upgrade Fund (et fond for maskinvareoppgraderinger). donate_link_text: donering @@ -709,7 +795,7 @@ export: Eksporter export_tooltip: Eksporter kartdata gps_traces: GPS-spor - gps_traces_tooltip: Behandle spor + gps_traces_tooltip: Behandle GPS-spor help_wiki: Hjelp & Wiki help_wiki_tooltip: Hjelp- & Wiki-side for prosjektet history: Historikk @@ -747,7 +833,7 @@ user_diaries: Brukerdagbok user_diaries_tooltip: Vis brukerens dagbok view: Vis - view_tooltip: Vis kart + view_tooltip: Vis kartet welcome_user: Velkommen, {{user_link}} welcome_user_link_tooltip: Din brukerside message: @@ -780,10 +866,14 @@ send_message_to: Send en ny melding til {{name}} subject: Emne title: Send melding + no_such_message: + body: Det er ingen melding med den ID-en. + heading: Ingen melding funnet + title: Ingen melding funnet no_such_user: - body: Det er ingen bruker eller melding med det navnet eller den id-en - heading: Ingen bruker eller melding funnet - title: Ingen bruker eller melding funnet + body: Det er ingen bruker med det navnet. + heading: Ingen bruker funnet + title: Ingen bruker funnet outbox: date: Dato inbox: innboks @@ -807,6 +897,9 @@ title: Les melding to: Til unread_button: Marker som ulest + wrong_user: Du er logget inn som «{{user}}», men meldingen du ønsker å lese ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å lese. + reply: + wrong_user: Du er logget inn som «{{user}}», men meldingen du ønsker å svare på ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å svare. sent_message_summary: delete_button: Slett notifier: @@ -827,8 +920,9 @@ hopefully_you_1: Noen (forhåpentligvis deg) ønsker å endre e-postadressen for hopefully_you_2: "{{server_url}} til {{new_address}}." friend_notification: + befriend_them: Du kan også legge dem til som venn på {{befriendurl}}. had_added_you: "{{user}} har lagt deg til som venn på OpenStreetMap." - see_their_profile: Du kan se profilen deres på {{userurl}} og legge dem til som venn også om du vil det. + see_their_profile: Du kan se profilen deres på {{userurl}}. subject: "[OpenStreetMap] {{user}} la deg til som en venn" gpx_notification: and_no_tags: og ingen merkelapper. @@ -840,6 +934,7 @@ subject: "[OpenStreetMap] Feil under import av GPX" greeting: Hei, success: + loaded_successfully: lastet med {{trace_points}} av {{possible_points}} mulige punkter. subject: "[OpenStreetMap] Vellykket import av GPX" with_description: med beskrivelse your_gpx_file: Det ser ut som GPX-filen din @@ -853,6 +948,7 @@ click_the_link: Om dette er deg, vennligst klikk på lenken under for å tilbakestille passordet. greeting: Hei, hopefully_you_1: Noen (muligens deg) har bedt om å tilbakestille passordet på denne + hopefully_you_2: e-postadressser for openstreetmap.org-konto. message_notification: footer1: Du kan også lese meldingen på {{readurl}} footer2: og du kan svare til {{replyurl}} @@ -862,23 +958,31 @@ signup_confirm: subject: "[OpenStreetMap] Bekreft din e-postadresse" signup_confirm_html: + click_the_link: Hvis dette er deg, så er du velkommen! Klikke lenka nedenfor for å bekrefte kontoen og les videre for mer informasjon om OpenStreetMap current_user: En liste over nåværende brukere i kategorier, basert på hvor i verden de er, er tilgjengelig fra Category:Users_by_geographical_region. + get_reading: Start å lese om OpenStreetMap på wikien, få med deg de siste nyhetene via OpenStreetMap-bloggen eller Twitter. Eller bla gjennom OpenStreetMaps grunnlegger Steve Coasts OpenGeoData-blogg for hele historien til prosjektet, som også har engelske podkaster du kan lytte til. greeting: Hei der! + hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på introductory_video: Du kan se en {{introductory_video_link}}. more_videos: Det er {{more_videos_link}}. more_videos_here: flere videoer her + user_wiki_page: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. video_to_openstreetmap: introduksjonsvideo til OpenStreetMap wiki_signup: Du vil kanskje melde deg inn i OpenStreetMap-wikien også. signup_confirm_plain: blog_and_twitter: "Få med deg de siste nyhetene gjennom OpenStreetMap-bloggen eller Twitter:" click_the_link_1: Om dette er deg, velkommen! Vennligst klikk på lenken under for å bekrefte din click_the_link_2: konto og les videre for mer informasjon om OpenStreetMap. + current_user_1: En liste over nåværende brukere i kategorier, basert på hvor i verden current_user_2: "de er, er tilgjengelig fra:" greeting: Hei der! + hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på introductory_video: "Du kan se en introduksjonsvideo for OpenStreetMap her:" more_videos: "Det er flere videoer her:" + opengeodata: "OpenGeoData.org er bloggen til OpenStreetMap-grunnlegger Steve Coast, og den har podcast-er også:" the_wiki: "Les mer om OpenStreetMap på wikien:" - user_wiki_1: Det anbefales at du oppretter en wikibrukerside som inkluderer + user_wiki_1: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer + user_wiki_2: kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. wiki_signup: "Du vil kanskje også melde deg inn i OpenStreetMap-wikien på:" oauth: oauthorize: @@ -898,11 +1002,15 @@ submit: Rediger title: Rediger ditt programvare form: + allow_read_gpx: les deres private GPS-spor. + allow_read_prefs: les brukerinnstillingene deres. allow_write_api: endre kartet. allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. allow_write_gpx: last opp GPS-spor. + allow_write_prefs: endre brukerinnstillingene deres. callback_url: "URL til sårbarhetsinformasjon:" name: Navn + requests: "Be om følgende tillatelser fra brukeren:" required: Påkrevet support_url: Støtte-URL url: "URL til sårbarhetsinformasjon:" @@ -927,19 +1035,23 @@ allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. allow_write_gpx: last opp GPS-spor. allow_write_prefs: endre brukerinnstillingene deres. - authorize_url: "URL til sårbarhetsinformasjon:" + authorize_url: "Godkjenn URL:" edit: Rediger detaljer key: "Forbrukernøkkel:" requests: "Ber om følgende tillatelser fra brukeren:" secret: "Forbrukerhemmelighet:" support_notice: Vi støtter HMAC-SHA1 (anbefalt) så vel som ren tekst i ssl-modus. title: OAuth-detaljer for {{app_name}} - url: "URL til sårbarhetsinformasjon:" + url: "URL for forespørelsnøkkel:" update: flash: Oppdaterte klientinformasjonen site: edit: anon_edits_link_text: Finn ut hvorfor dette er tilfellet. + flash_player_required: Du trenger en Flash-spiller for å kunne bruke Potlatch, Flasheditoren for OpenStreetMap. Du kan laste ned Flash Player fra Adobe.com. Flere andre alternativ er også tilgjengelig for redigering av OpenStreetMap. + not_public: Du har ikke satt dine redigeringer til å være offentlige. + not_public_description: Du kan ikke lenger redigere kartet om du ikke gjør det. Du kan gjøre dine redigeringer offentlige fra din {{user_page}}. + potlatch_unsaved_changes: Du har ulagrede endringer. (For å lagre i Potlatch, må du fjerne markeringen av gjeldende vei eller punkt hvis du redigerer i live-modues eller klikke lagre hvis du har en lagreknapp.) user_page_link: brukerside index: js_1: Du har en nettleser som ikke støtter JavaScript eller så har du slått av JavaScript. @@ -1012,6 +1124,7 @@ trunk: Hovedvei tunnel: Streket kant = tunnel unclassified: Uklassifisert vei + unsurfaced: Vei uten dekke wood: Ved heading: Legend for z{{zoom_level}} search: @@ -1060,12 +1173,18 @@ body: Beklager, det finnes ingen bruker med navnet {{user}}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. heading: Brukeren {{user}} finnes ikke title: Ingen bruker funnet + offline: + heading: GPX-lagring er utilgjengelig + message: Systemet for opplasting og lagring av GPX-filer er ikke tilgjengelig for øyeblikket. + offline_warning: + message: Systemet for opplasting av GPX-filer er ikke tilgjengelig for øyeblikket. trace: ago: "{{time_in_words_ago}} siden" by: av count_points: "{{count}} punkter" edit: rediger edit_map: Rediger kart + identifiable: IDENTIFISERBAR in: i map: kart more: mer @@ -1073,6 +1192,7 @@ private: PRIVAT public: OFFENTLIG trace_details: Vis detaljer for spor + trackable: SPORBAR view_map: Vis kart trace_form: description: Beskrivelse @@ -1141,6 +1261,7 @@ public editing: disabled: Deaktivert og kan ikke redigere data. Alle tidligere redigeringer er anonyme. disabled link text: hvorfor can jeg ikke redigere? + enabled: Aktivert. Ikke anonym og kan redigere data. enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits enabled link text: hva er dette? heading: "Offentlig redigering:" @@ -1179,6 +1300,10 @@ please login: Logg inn eller {{create_user_link}}. remember: "Huske meg:" title: Logg inn + logout: + heading: Logg ut fra OpenStreetMap + logout_button: Logg ut + title: Logg ut lost_password: email address: "E-postadresse:" heading: Glemt passord? @@ -1194,15 +1319,21 @@ new: confirm email address: "Bekreft e-postadresse:" confirm password: "Bekreft passord:" + contact_webmaster: Kontakt webmaster for å opprette en konto. Vi vil prøve å behandle forespørselen så fort som mulig. display name: "Visningsnavn:" display name description: Ditt offentlig fremviste brukernavn. Du kan endre dette senere i innstillingene. email address: "E-postadresse:" fill_form: Fyll ut skjemaet og vi vil sende deg en e-post for å aktivere kontoen din. + flash create success message: Bruker ble opprettet. Se etter er en bekreftelsesmelding i e-posten din, og du vil lage kart på null tid :-)

Legg merke til at du ikke kan logge inn før du har bekreftet e-postadresssen din.

Hvis du bruker en antispam-løsning som krever bekreftelse fra avsender, sÃ¥ mÃ¥ du hvitliste webmaster@openstreetmap.org (siden vi ikke er i stand til Ã¥ svare pÃ¥ slike forespørsler om bekreftelse). heading: Opprett en brukerkonto + license_agreement: Ved Ã¥ opprette en konto, godtar du at alle data du sender inn til OpenStreetMap-prosjektet vil bli (ikke-eksklusivt) lisensiert under denne Creative Commons-lisensen (by-sa). + no_auto_account_create: Beklageligvis kan vi for øyeblikket ikke opprette en konto for deg automatisk. + not displayed publicly: Ikke vist offentlig (se vÃ¥r personvernpolitikk) password: "Passord:" signup: Registrering title: Opprett konto no_such_user: + body: Det er ingen bruker med navnet {{user}}. Sjekk om du har skrevet navnet feil eller om lenka du klikket er feil. heading: Brukeren {{user}} finnes ikke title: Ingen bruker funnet popup: @@ -1239,6 +1370,7 @@ edits: redigeringer email address: "E-postadresse:" hide_user: skjul denne brukeren + if set location: Hvis du setter din posisjon, sÃ¥ vil et fint kart og ting vises her. Du kan sette din hjemmeposisjon pÃ¥ din {{settings_link}}-side. km away: "{{count}}km unna" m away: "{{count}}m unna" mapper since: "Bruker siden:" @@ -1251,6 +1383,7 @@ new diary entry: ny dagbokoppføring no friends: Du har ikke lagt til noen venner ennÃ¥. no nearby users: Det er ingen andre brukere som innrømmer kartlegging i ditt omrÃ¥de ennÃ¥. + oauth settings: oauth-innstillinger remove as friend: fjern som venn role: administrator: Denne brukeren er en administrator @@ -1274,6 +1407,7 @@ title: Blokkeringer av {{name}} blocks_on: empty: "{{name}} har ikke blitt blokkert ennÃ¥." + heading: Liste over blokkeringer av {{name}} title: Blokkeringer av {{name}} create: flash: Opprettet en blokkering av bruker {{name}}. @@ -1282,6 +1416,8 @@ edit: back: Vis alle blokkeringer heading: Endrer blokkering av {{name}} + needs_view: MÃ¥ brukeren logge inn før denne blokkeringen blir fjernet? + period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. reason: Årsaken til hvorfor {{name}} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og oppgi sÃ¥ mange detaljer du kan om situasjonen. Husk at ikke alle brukere forstÃ¥r felleskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. show: Vis denne blokkeringen submit: Oppdater blokkering @@ -1304,6 +1440,8 @@ new: back: Vis alle blokkeringer heading: Oppretter blokkering av {{name}} + needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. + period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. reason: Årsaken til at {{name}} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og gi sÃ¥ mange detaljer du kan om situasjonen, og husk pÃ¥ at meldingen blir synlig for offentligheten. Husk pÃ¥ at ikke alle brukere forstÃ¥r fellesskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. submit: Opprett blokkering title: Oppretter blokkering av {{name}} @@ -1311,6 +1449,7 @@ tried_waiting: Jeg har gitt brukeren rimelig med tid til Ã¥ svare pÃ¥ disse kommunikasjonene. not_found: back: Tilbake til indeksen + sorry: Beklager, brukerblokkeringen med ID {{id}} ble ikke funnet. partial: confirm: Er du sikker? creator_name: Opprettet av @@ -1334,8 +1473,12 @@ time_future: Denne blokkeringen ender i {{time}} title: Tilbakekaller blokkering pÃ¥ {{block_on}} show: + back: Vis alle blokkeringer confirm: Er du sikker? edit: Rediger + heading: "{{block_on}} blokkert av {{block_by}}" + needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. + reason: "Årsak for blokkering:" revoke: Tilbakekall! show: Vis status: Status diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 520c2fd99..2f8136e73 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1153,7 +1153,7 @@ pl: tunnel: Kreskowany obrys – tunel unclassified: Drogi niesklasyfikowane unsurfaced: Droga nieutwardzona - wood: Las + wood: Puszcza heading: Legenda dla przybliżenia {{zoom_level}} search: search: Szukaj @@ -1397,10 +1397,11 @@ pl: my edits: moje zmiany my settings: moje ustawienia my traces: moje ślady - nearby users: "Najbliżsi użytkownicy:" + nearby users: Najbliżsi użytkownicy new diary entry: nowy wpis w dzienniku no friends: Nie dodałeś/aś jeszcze żadnych znajomych. no nearby users: Nikt nie przyznał się jeszcze do mapowania w tej okolicy. + oauth settings: ustawienia oauth remove as friend: usuń ze znajomych role: administrator: Ten użytkownik jest administratorem diff --git a/config/locales/ps.yml b/config/locales/ps.yml index 85b5987af..09350f46b 100644 --- a/config/locales/ps.yml +++ b/config/locales/ps.yml @@ -10,6 +10,7 @@ ps: title: سرليک user: کارن friend: + friend: ملګری user: کارن message: title: سرليک @@ -29,5 +30,172 @@ ps: browse: map: deleted: ړنګ شو - map: + node: + edit: سمول + view_history: پېښليک کتل + node_details: + coordinates: "کوارډيناټونه:" + not_found: + type: + way: لار + relation_details: + members: "غړي:" + relation_member: + type: + way: لار + start_rjs: + object_list: + type: + way: لار + timeout: + type: + way: لار + way: + edit: سمول + view_history: پېښليک کتل + way: لار + changeset: + changesets: + user: کارن + diary_entry: + edit: + language: "ژبه:" + save_button: خوندي کول + use_map_link: نخشه کارول + location: + edit: سمول + view: کتل + view: + login: ننوتل + save_button: خوندي کول + geocoder: + description: + types: + cities: ښارونه + towns: ښارګوټي + direction: + east: ختيځ + north: سهېل + north_east: سهېل-ختيځ + north_west: سهېل-لوېديځ + south: سوېل + south_east: سوېل-ختيځ + south_west: سوېل-لوېديځ + west: لوېديځ + search_osm_nominatim: + prefix: + amenity: + bank: بانک + clinic: کلينيک + college: پوهنځی + embassy: سفارت + hospital: روغتون + hotel: هوټل + park: پارک + pharmacy: درملتون + police: پوليس + school: ښوونځی + shop: هټۍ + theatre: نندارتون + building: + hotel: هوټل + shop: هټۍ + stadium: لوبغالی + tower: برج + highway: + bus_stop: تمځای + road: واټ + historic: + castle: ماڼۍ + church: کليسا + house: کور + museum: موزيم + tower: برج + landuse: + cemetery: هديره + forest: ځنګل + park: پارک + leisure: + park: پارک + natural: + hill: غونډۍ + island: ټاپو + peak: څوکه + tree: ونه + valley: دره + water: اوبه + place: + airport: هوايي ډګر + city: ښار + country: هېواد + farm: فارم + house: کور + houses: کورونه + island: ټاپو + region: سيمه + town: ښارګوټی + village: کلی + shop: + bakery: بټيارۍ + gallery: ګالېري + tourism: + guest_house: مېلمستون + hostel: ليليه + hotel: هوټل + information: مالومات + museum: موزيم + picnic_site: مېله ځای + valley: دره + zoo: ژوبڼ + layouts: + home: کور + intro_3_partners: ويکي + log_in: ننوتل + shop: هټۍ view: کتل + message: + inbox: + date: نېټه + outbox: + date: نېټه + site: + search: + submit_text: ورځه + sidebar: + close: تړل + trace: + edit: + edit: سمول + filename: "د دوتنې نوم:" + map: نخشه + save_button: بدلونونه خوندي کول + trace: + edit: سمول + map: نخشه + view_map: نخشه کتل + view: + edit: سمول + filename: "د دوتنې نوم:" + map: نخشه + none: هېڅ + user: + account: + image: "انځور:" + login: + heading: ننوتل + login_button: ننوتل + password: "پټنوم:" + title: ننوتل + logout: + logout_button: وتل + title: وتل + new: + email address: "برېښليک پته:" + password: "پټنوم:" + popup: + friend: ملګری + reset_password: + password: "پټنوم:" + view: + email address: "برېښليک پته:" + send message: پيغام لېږل diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 4ac591b2f..1d4267646 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -98,6 +98,13 @@ pt: view_details: ver detalhes way_history: Histórico do Trajeto way_history_title: "Histórico do Trajeto: {{way_name}}" + geocoder: + search_osm_nominatim: + prefix: + historic: + ruins: Ruínas + railway: + funicular: Funicular notifier: email_confirm_plain: greeting: Olá, @@ -130,6 +137,8 @@ pt: more: mais pending: PENDENTE view_map: Ver Mapa + trace_form: + help: Ajuda view: edit: editar map: mapa diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 965d5351c..12f1956df 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -210,6 +210,8 @@ ro: show_area_box: afișează chenarul zonei still_editing: (încă se editează) view_changeset_details: Vizualizare detalii set de schimbări + changeset_paging_nav: + showing_page: Se afișează pagina changesets: area: Zonă comment: Comentariu @@ -220,10 +222,6 @@ ro: geocoder: search_osm_namefinder: prefix: "{{type}}" - map: - coordinates: "Coordonate:" - edit: Editare - view: Vizualizare message: delete: deleted: Mesaj şters diff --git a/config/locales/sk.yml b/config/locales/sk.yml index b0fed8c0d..11a55805f 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -20,6 +20,7 @@ sk: user: Užívateľ message: body: Telo + recipient: Príjemca sender: Odosielateľ trace: description: Popis @@ -33,23 +34,44 @@ sk: user: active: Aktívny description: Popis + display_name: Zobrazované meno email: E-mail languages: Jazyky pass_crypt: Heslo models: + changeset: Súbor zmien country: Krajina + diary_comment: Poznámka v denníku + diary_entry: Položka denníka friend: Priateľ language: Jazyk message: Správa - node: Uzol - node_tag: Tag uzlu - old_node: Starý uzol + node: Bod + node_tag: Tag bodu + old_node: Starý bod + old_node_tag: Stará značka bodu + old_relation: Stará relácia old_relation_member: Starý člen relácie - old_way_node: Starý uzol cesty + old_relation_tag: Stará značka relácie + old_way: Stará cesta + old_way_node: Starý bod cesty + old_way_tag: Stará značka cesty + relation: Relácia + relation_member: Člen relácie + relation_tag: Značka relácie session: Relácia + trace: Stopa + tracepoint: Bod stopy + tracetag: Značka stopy user: Užívateľ + user_preference: Osobné nastavenia way: Cesta - way_node: Uzol cesty + way_node: Bod cesty + application: + require_cookies: + cookies_needed: Vyzerá to tak, že máte zakázané cookies – prosím povoľte cookies vo vaÅ¡om prehliadači a až potom pokračujte. + setup_user_auth: + blocked: Váš prístup do API bol zablokovaný. Prosím prihláste sa na webové rozhranie pre zistenie viac informácií. browse: changeset: changeset: "Súbor zmien: {{id}}" @@ -106,8 +128,8 @@ sk: download: "{{download_xml_link}}, {{view_history_link}} alebo {{edit_link}}" download_xml: StiahnuÅ¥ XML edit: upraviÅ¥ - node: Uzol - node_title: "Uzol: {{node_name}}" + node: Bod + node_title: "Bod: {{node_name}}" view_history: zobraziÅ¥ históriu node_details: coordinates: "Súradnice:" @@ -115,19 +137,19 @@ sk: node_history: download: "{{download_xml_link}} alebo {{view_details_link}}" download_xml: StiahnuÅ¥ XML - node_history: História Uzla - node_history_title: "História Uzla: {{node_name}}" + node_history: História bodu + node_history_title: "História bodu: {{node_name}}" view_details: zobraziÅ¥ detaily not_found: sorry: Prepáčte, {{type}} s id {{id}} nebolo možné nájsÅ¥. type: changeset: počet zmien - node: uzol + node: bod relation: relácia way: cesta paging_nav: of: z - showing_page: Zobrazovanie stránky + showing_page: Strana relation: download: "{{download_xml_link}} alebo {{view_history_link}}" download_xml: StiahnuÅ¥ XML @@ -146,7 +168,7 @@ sk: relation_member: entry_role: "{{type}} {{name}} ako {{role}}" type: - node: Uzol + node: Bod relation: Relácia way: Cesta start: @@ -174,10 +196,10 @@ sk: way: Cesta [[id]] selected: type: - node: Uzol [[id]] + node: Bod [[id]] way: Cesta [[id]] type: - node: Uzol + node: Bod way: Cesta private_user: anonymný používateľ show_history: ZobraziÅ¥ Históriu @@ -190,7 +212,7 @@ sk: sorry: Prepáčte, ale načítanie dát {{type}} číslo {{id}} trvalo príliÅ¡ dlho type: changeset: zmenový súbor - node: uzol + node: bod relation: relácia way: cesta way: @@ -204,7 +226,7 @@ sk: also_part_of: one: tiež časÅ¥ou cesty {{related_ways}} other: tiež časÅ¥ou ciest {{related_ways}} - nodes: "Uzly:" + nodes: "Body:" part_of: "ČasÅ¥ z:" way_history: download: "{{download_xml_link}} alebo {{view_details_link}}" @@ -214,7 +236,13 @@ sk: way_history_title: "História Cesty: {{way_name}}" changeset: changeset: + anonymous: Anonym + big_area: (veľký) + no_comment: (žiadny) + no_edits: (bez úprav) + show_area_box: ZobraziÅ¥ Rám Oblasti still_editing: (stále sa upravuje) + view_changeset_details: ZobraziÅ¥ detaily zmenového súboru changeset_paging_nav: next: ĎalÅ¡ia » previous: "« PredoÅ¡lá" @@ -224,25 +252,88 @@ sk: comment: Komentár id: ID saved_at: Uložené - user: Používateľ + user: Užívateľ list: description: Posledné zmeny + description_bbox: Zmenové súbory vo vnútri {{bbox}} + description_user: Zmenové súbory užívateľa {{user}} + description_user_bbox: Zmenové súbory užívateľa {{user}} v {{bbox}} + heading: Zmenové súbory + heading_bbox: Zmenové súbory + heading_user: Zmenové súbory + heading_user_bbox: Zmenové súbory + title: Zmenové súbory + title_bbox: Zmenové súbory vo vnútri {{bbox}} + title_user: Zmenové súbory užívateľa {{user}} + title_user_bbox: Zmenové súbory užívateľa {{user}} v {{bbox}} diary_entry: + diary_comment: + comment_from: Poznámka od {{link_user}} na {{comment_created_at}} + confirm: PotvrdiÅ¥ + hide_link: SkryÅ¥ túto poznámku diary_entry: comment_count: few: "{{count}} komentáre" one: 1 komentár other: "{{count}} komentárov" + comment_link: Komentár k záznamu + confirm: PotvrdiÅ¥ + edit_link: UpraviÅ¥ tento záznam + hide_link: SkryÅ¥ tento záznam + posted_by: Odoslané od {{link_user}} pre {{created}} v {{language_link}} + reply_link: OdpovedaÅ¥ na tento záznam edit: + body: "Telo:" language: "Jazyk:" latitude: "Zemepisná šírka:" + location: "Poloha:" longitude: "Zemepisná dĺžka:" + marker_text: Umiestnenie položky zápisníka save_button: UložiÅ¥ subject: "Predmet:" + title: UpraviÅ¥ záznam denníka use_map_link: použiÅ¥ mapu + feed: + all: + description: Nedávna položka zápisníka od užívateľov OpenStreetMap + title: OpenStreetMap položka zápisníka + language: + description: Nedávna položka zápisníka od užívateľov OpenStreetMap v {{language_name}} + title: OpenStreetMap položka zápisníka v {{language_name}} + user: + description: Nedávna OpenStreetMap položka zápisníka od {{user}} + title: OpenStreetMap položka zápisníka pre {{user}} + list: + in_language_title: Záznamy denníka v {{language}} + new: Nový záznam denníka + new_title: NapísaÅ¥ nový záznam do svojho užívateľského denníka + newer_entries: NovÅ¡ie Príspevky + no_entries: Žiadny záznam denníka + older_entries: StarÅ¡ie záznamy + recent_entries: "Nedávne záznamy denníka:" + title: Užívateľské denníky + user_title: "{{user}}-ov denník" + location: + edit: EditovaÅ¥ + location: "Poloha:" + view: Pohľad + new: + title: Nový záznam denníka + no_such_entry: + body: Prepáčte, nie je tam žiadna položka denníka, alebo poznámka s id {{id}}. Prosím skontrolujte váš text, alebo možno že odkaz na ktorý ste klikli je zlý. + heading: "Žiadny záznam s id: {{id}}" + title: Nieto takýto záznam denníka + no_such_user: + body: Prepáčte, neexistuje užívateľ s menom {{user}}. Prosím skontrolujte váš text, alebo možno že odkaz na ktorý ste klikli je zlý. + heading: Užívateľ {{user}} neexistuje + title: Užívateľ neexistuje view: leave_a_comment: ZanechaÅ¥ komentár + login: PrihlásiÅ¥ sa + login_to_leave_a_comment: "{{login_link}} pre odchádzajúcu poznámku" save_button: UložiÅ¥ + title: "{{user}}-ov denník | {{title}}" + user_title: "{{user}} -ov denník" export: start: add_marker: PridaÅ¥ marker na mapu @@ -259,9 +350,14 @@ sk: mapnik_image: Zobrazenie Mapnik max: max options: Možnosti + osm_xml_data: OpenStreetMap XML Dáta osmarender_image: Zobrazenie Osmarender output: Výstup scale: Mierka + too_large: + body: Táto oblasÅ¥ je príliÅ¡ veľká pre export OpenStreetMap dát. Prosím priblížte, alebo vyberte menÅ¡iu oblasÅ¥. + heading: PríliÅ¡ veľká oblasÅ¥ + zoom: Zväčšenie start_rjs: add_marker: PridaÅ¥ marker na mapu change_marker: Zmena polohy markera @@ -272,6 +368,10 @@ sk: view_larger_map: ZobraziÅ¥ väčšiu mapu geocoder: description: + title: + geonames: Umiestnenie na GeoNames + osm_namefinder: "{{types}} z OpenStreetMap Namefinder" + osm_nominatim: Umiestnenie z OpenStreetMap Nominatim types: cities: Veľkomestá places: Miesta @@ -298,8 +398,14 @@ sk: title: ca_postcode: Výsledky z Geocoder.CA geonames: Výsledky z GeoNames + latlon: Výsledok z Internal osm_namefinder: Výsledky z OpenStreetMap Namefinder + osm_nominatim: Výsledok z OpenStreetMap Nominatim + uk_postcode: Výsledok z NPEMap / FreeThe Postcode us_postcode: Výsledky z Geocoder.us + search_osm_namefinder: + suffix_parent: "{{suffix}} ({{parentdistance}} {{parentdirection}} of {{parentname}})" + suffix_place: ", {{distance}} {{direction}} of {{placename}}" search_osm_nominatim: prefix: amenity: @@ -312,9 +418,11 @@ sk: bicycle_parking: Parkovisko bicyklov bicycle_rental: Požičovňa bicyklov brothel: Nevestinec + bureau_de_change: Zmenáreň bus_station: Autobusová stanica cafe: Kaviareň car_rental: Požičovňa áut + car_sharing: Autopožičovňa car_wash: Autoumývareň casino: Kasíno cinema: Kino @@ -345,11 +453,13 @@ sk: ice_cream: Zmrzlina kindergarten: Materská Å¡kola library: Knižnica + market: Obchod marketplace: Tržnica mountain_rescue: Horská služba nightclub: 'Nočný klub' nursery: Jasle nursing_home: Sanatórium + office: Úrad park: Park parking: Parkovisko pharmacy: lekáreň @@ -361,6 +471,7 @@ sk: prison: Väzenie pub: Krčma public_building: Verejná budova + recycling: Recyklačké miesto restaurant: ReÅ¡taurácia retirement_home: Domov dôchodcov sauna: Sauna @@ -375,6 +486,7 @@ sk: theatre: Divadlo toilets: WC townhall: Radnica + university: Univerzita vending_machine: Predajný automat veterinary: Veterinárna ordinácia waste_basket: Odpadkový kôš @@ -388,15 +500,21 @@ sk: chapel: Kaplnka church: Kostol,cirkev city_hall: Radnica,magistrát + commercial: Komerčné budovy dormitory: Å tudentský domov + faculty: Budovy fakulty farm: Hospodárska budova flats: Byty garage: Garáž hall: Sála + hospital: Nemocničné budovy hotel: Hotel house: Dom + industrial: Priemyselné budovy office: Administratívna budova public: Verejná budova + residential: Obytné budovy + retail: Maloobchodné budovy school: Å kola shop: Obchod stadium: Å tadión @@ -404,35 +522,43 @@ sk: terrace: Radová zástavba tower: Veža train_station: Železničná stanica + university: Univerzitné budovy "yes": Budova highway: bridleway: Cesta pre kone bus_guideway: Bus so sprievodcom bus_stop: Zastávka autobusu byway: Byway (súkromná cesta) + construction: Cesta vo výstavbe cycleway: Cyklistický chodník distance_marker: Distance Marker (kilometrovník) emergency_access_point: Stanica prvej pomoci footway: Chodník ford: Brod gate: Brána + living_street: Obytná zóna minor: VedľajÅ¡ia cesta motorway: Diaľnica motorway_junction: Motorway Junction (Diaľničná križovatka) motorway_link: Diaľnica + path: Cesta pedestrian: Chodník pre chodcov + platform: NástupiÅ¡te primary: Cesta I. triedy primary_link: Cesta I. triedy + residential: Residential(Obytný) road: Cesta secondary: Cesta II. triedy secondary_link: Cesta II. triedy service: Service Road (prístupová komunikácia) steps: Schody + stile: Schodíky cez ohradu tertiary: Cesta III. triedy track: Nespevnené cesty trunk: Cesta pre motorové vozidlá trunk_link: Cesta pre motorové vozidlá unclassified: Neklasifikovaná cesta + unsurfaced: Nespevnená cesta historic: archaeological_site: Archeologické nálezisko battlefield: Bojisko @@ -452,8 +578,11 @@ sk: wayside_shrine: Malá kaplnka pri ceste wreck: Zrúcanina landuse: + allotments: Záhradkárske osady + basin: Basin (Vodná nádrž) cemetery: Cintorín commercial: Obchodná Å¡tvrÅ¥ + construction: Stavba farm: Farma farmyard: Dvor forest: Les @@ -467,8 +596,11 @@ sk: nature_reserve: Prírodná rezervácia park: Park piste: Zjazdovka + plaza: Námestie quarry: Lom railway: Železnica + residential: Residential Area (Obytná oblasÅ¥) + retail: Retail (Obchodná zóna) village_green: Verejná zeleň vineyard: Vinica wetland: Mokrina @@ -555,7 +687,9 @@ sk: village: Obec 200-10 tis. railway: abandoned: Opustená železnica + construction: Železnica vo výstavbe disused: Nepoužívaná železnica + disused_station: Nepoužívaná železničná stanica funicular: Lanová dráha halt: Zastávka vlaku historic_station: Zastávka historickej železnice @@ -564,14 +698,18 @@ sk: light_rail: Ľahká železnica monorail: Jednokoľajka narrow_gauge: Úzkokoľajná železnica + platform: Železničné nástupiÅ¡te + preserved: Historická železnica spur: Železničná vlečka station: Železničná stanica subway: Stanica metra subway_entrance: Vchod do metra + switch: Železničná výhybka tram: Električka tram_stop: Zastávka električky yard: Železničné depo shop: + alcohol: Mimo povolenia apparel: Odevy art: Obchod s umením bakery: Pekáreň @@ -580,9 +718,12 @@ sk: bicycle: Obchod s bicylkami books: Kníhkupectvo butcher: Mäsiarstvo + car_dealer: Obchod s autami car_parts: Mototechna car_repair: Autoservis + carpet: Obchod s kobercami charity: Charitatívny obchod + chemist: Lekáreň clothes: Obchod s konfekciou computer: Obchod s počítačmi confectionery: Cukráreň @@ -592,9 +733,11 @@ sk: dry_cleaning: Chemická čistiareň electronics: Elektro estate_agent: Realitná kancelária + farm: Poľnonákup fish: Obchod s rybami florist: Kvetinárstvo food: Obchod s potravinami + funeral_directors: Pohrebníctvo furniture: Nábytok gallery: Galéria garden_centre: Záhradnícke centrum @@ -604,20 +747,29 @@ sk: grocery: Potraviny hairdresser: Kaderníctvo,holičstvo hardware: Železiarstvo + hifi: Hi-Fi insurance: PoisÅ¥ovňa jewelry: Zlatníctvo + kiosk: Novinový stánok laundry: Práčovňa mall: PeÅ¡ia zóna + mobile_phone: Obchod s mobilnými telefónmi + motorcycle: Motocyklový obchod music: Hudobniny + optician: Očná optika organic: Obchod so zdravou výživou + outdoor: Turistický obchod pet: Chovprodukt + photo: Fotokino salon: Salón shoes: Obuva + shopping_centre: Nákupné stredisko sports: Å portový obchod stationery: Papierníctvo supermarket: Supermarket toys: Hračkárstvo travel_agency: Cestovná kancelária + wine: Mimo povolenia tourism: alpine_hut: Vysokohorská chata artwork: Umelecké dielo @@ -643,12 +795,16 @@ sk: boatyard: Lodenica canal: Kanál dam: Priehrada,hrádza + derelict_canal: Opustený kanál ditch: Priekopa dock: Dok drain: Odvodňovací kanál + lock: Plavebná komora + lock_gate: Brána plavebnej komory mineral_spring: Minerálny prameň mooring: Kotvisko river: Rieka + riverbank: Breh rieky stream: Potok wadi: Občasné riečisko(Vádí) water_point: Vodný bod @@ -658,30 +814,59 @@ sk: map: base: cycle_map: Cyklomapa + noname: Bez mena + site: + edit_disabled_tooltip: PriblížiÅ¥ na editovateľnú mapu + edit_tooltip: UpraviÅ¥ mapu + edit_zoom_alert: Musíte sa priblížiÅ¥ na úpravu mapy + history_disabled_tooltip: PriblížiÅ¥ na zobrazenie úprav pre túto oblasÅ¥ + history_tooltip: ZobraziÅ¥ úpravy pre túto oblasÅ¥ + history_zoom_alert: Musíte priblížiÅ¥ na zobrazenie úprav pre túto oblasÅ¥ layouts: + donate_link_text: darovanie edit: UpraviÅ¥ export: Export export_tooltip: Export mapových dát + gps_traces: GPS Stopy + gps_traces_tooltip: Správa GPS stopy help_wiki: Pomocník & Wiki + help_wiki_tooltip: Help & Wiki stránka projektu history: História home: domov + home_tooltip: Choďte na domácu polohu inbox: správy ({{count}}) inbox_tooltip: few: V schránke máte {{count}} neprečítané správy one: V schránke máte 1 neprečítanú správu other: V schránke máte {{count}} neprečítaných správ zero: Nemáte žiadne neprečítané správy + intro_1: OpenStreetMap je volne editovateľná mapa celého sveta. Tvoria ju ľudia ako vy. + intro_2: OpenStreetMap vám dovolí prezeraÅ¥, upravovaÅ¥ a používaÅ¥ zemepisné dáta vďaka spolupráci kdekoľvek na Zemi. + intro_3_partners: wiki + license: + title: OpenStreetMap dáta sú licencované pod the Creative Commons Attribution-Share Alike 2.0 Generic License log_in: prihlásiÅ¥ sa + log_in_tooltip: Prihlásenie s existujúcim účtom logo: alt_text: Logo OpenStreetMap logout: odhlásiÅ¥ logout_tooltip: OdhlásiÅ¥ - news_blog: Novinkový blog + make_a_donation: + text: Darovanie + title: Podpora OpenStreetMap s finančnou podporou + news_blog: Novinky blog + news_blog_tooltip: Spravodajský blog o OpenStreetMap, voľné zemepisné dáta, etc. + osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ čo potrebná údržba databázy naďalej prebieha. + osm_read_only: OpenStreetMap databáza je teraz len v móde čítania (bez možnosti zapisovania), zatiaľ čo potrebná údržba databázy naďalej prebieha. shop: Obchod + shop_tooltip: Obchod so značkovým OpenStreetMap tovarom sign_up: zaregistrovaÅ¥ sa sign_up_tooltip: Vytvorte si účet pre úpravy + tag_line: Voľná Wiki Mapa sveta + user_diaries: Denník užívateľa + user_diaries_tooltip: ZobraziÅ¥ denníky užívateľa view: ZobraziÅ¥ - view_tooltip: ZobraziÅ¥ mapy + view_tooltip: ZobraziÅ¥ mapu welcome_user: Vitajte, {{user_link}} welcome_user_link_tooltip: VaÅ¡a užívateľská stránka message: @@ -690,7 +875,12 @@ sk: inbox: date: Dátum from: Od + my_inbox: Moja schránka doÅ¡lej poÅ¡ty + no_messages_yet: Nemáte žiadne správy. Prečo ste sa nespojili s niekým z {{people_mapping_nearby_link}}? + outbox: odoslaná poÅ¡ta + people_mapping_nearby: blízko mapujúci ľudia subject: Predmet + title: Prichádzajúca poÅ¡ta you_have: Máte {{new_count}} nových a {{old_count}} starých správ mark: as_read: Správa označená ako prečítaná @@ -702,54 +892,204 @@ sk: unread_button: OznačiÅ¥ ako neprečítané new: back_to_inbox: Späť do prijatých správ + body: Telo message_sent: Správa odoslaná send_button: OdoslaÅ¥ send_message_to: PoslaÅ¥ novú správu užívateľovi {{name}} subject: Predmet title: OdoslaÅ¥ správu + no_such_message: + body: Prepáčte, neexistuje správa s takým id. + heading: Zadaná správa neexistuje + title: Zadaná správa neexistuje + no_such_user: + body: Prepáčte, neexistuje žiaden užívateľ s týmto menom. + heading: Taký užívateľ nie je + title: Taký užívateľ nie je outbox: date: Dátum + inbox: prichádzajúca poÅ¡ta + my_inbox: Moja {{inbox_link}} + no_sent_messages: Nemáte odoslané správy. Prečo ste sa nespojili s niekým z {{people_mapping_nearby_link}}? + outbox: odoslaná poÅ¡ta + people_mapping_nearby: blízko mapujúci ľudia + subject: Predmet + title: Odoslaná poÅ¡ta to: Komu you_have_sent_messages: Máte {{count}} odoslaných správ read: + back_to_inbox: Späť do prijatých správ + back_to_outbox: Späť do schránky odoslanej poÅ¡ty date: Dátum from: Od + reading_your_messages: Načítavam vaÅ¡e správy + reading_your_sent_messages: Čítanie vaÅ¡ich odoslaných správ reply_button: OdpovedaÅ¥ subject: Predmet + title: ČítaÅ¥ správu to: Komu unread_button: OznačiÅ¥ ako neprečítané sent_message_summary: delete_button: ZmazaÅ¥ notifier: diary_comment_notification: + footer: Môžete si tiež prečítaÅ¥ komentár na {{readurl}} a môžete komentovaÅ¥ na {{commenturl}}, alebo odpoveď na {{replyurl}} + header: "{{from_user}} má poznámku na váš nedávny OpenStreetMap záznam v denníku s predmetom {{subject}}:" hi: Ahoj {{to_user}}, + subject: "[OpenStreetMap] {{user}} komentovaj vo vaÅ¡ej položke denníka" email_confirm: subject: "[OpenStreetMap] Potvrďte svoju e-mailovú adresu" + email_confirm_html: + click_the_link: Ak ste to vy, kliknite prosím na nižšie uvedený odkaz pre potvrdenie zmeny. + greeting: Ahoj, + hopefully_you: Niekto (dúfajme, že vy) chcel zmeniÅ¥ e-mailovú adresu na {{server_url}} do {{new_address}}. email_confirm_plain: + click_the_link: Ak je toto vaÅ¡e, kliknite prosím na nižšie uvedený odkaz pre potvrdenie zmeny. greeting: Ahoj, + hopefully_you_1: Niekto (dúfajme, že vy) chce zmeniÅ¥ svoju e-mailovú adresu, na viac ako + hopefully_you_2: "{{server_url}} do {{new_address}}." + friend_notification: + befriend_them: Môžete ich tiež pridaÅ¥ ako priateľov na {{befriendurl}}. + had_added_you: "{{user}} vás pridal ako priateľa na OpenStreetMap." + see_their_profile: Môžete vidieÅ¥ svoj profil na {{userurl}}. + subject: "[OpenStreetMap] {{user}} vás pridal ako priateľa" gpx_notification: + and_no_tags: a žiadne značky. + and_the_tags: "a nasledujúce značky:" + failure: + failed_to_import: "neúspeÅ¡ný import. Tu je chyba:" + more_info_1: Viac informácií o neúspeÅ¡ných importoch GPX a ako sa im vyhnúť + more_info_2: "nemožno nájsÅ¥ na adrese:" + subject: "[OpenStreetMap] GPX Import neúspeÅ¡ný" greeting: Ahoj, + success: + subject: "[OpenStreetMap] GPX Import uspeÅ¡ný" + with_description: s popisom + your_gpx_file: Vyzerá to ako váš GPX súbor + lost_password: + subject: "[OpenStreetMap] ŽiadosÅ¥ o reset hesla" lost_password_html: + click_the_link: Ak ste to vy, kliknite prosím na nižšie uvedený odkaz pre obnovenie vášho hesla. + greeting: Ahoj, + hopefully_you: Niekto (možno vy) požiadal, o reset hesla na tejto emailovej adrese openstreetmap.org účtu. + lost_password_plain: + click_the_link: Ak ste to vy, prosím kliknite na odkaz nižšie pre obnovenie svojho hesla. greeting: Ahoj, + hopefully_you_1: Niekto (dúfajme že vy) požiadal o obnovu hesla + hopefully_you_2: e-mailové adresy openstreetmap.org účtu. message_notification: + footer1: Môžete si tiež prečítaÅ¥ správy na {{readurl}} + footer2: a môžete odpovedaÅ¥ na {{replyurl}} + header: "{{from_user}} vám zaslal správu cez OpenStreetMap s predmetom {{subject}}:" hi: Ahoj {{to_user}}, + subject: "[OpenStreetMap] {{user}} poÅ¡leme vám novú správu" + signup_confirm: + subject: "[OpenStreetMap] Potvrďte svoju e-mailovú adresu" + signup_confirm_html: + click_the_link: Ak je to vám, vitajte! Prosím kliknite na odkaz nižšie pre potvrdenie vášho účtu a prečítajte si viac informácií o OpenStreetMap + current_user: Zoznam aktuálnych užívateľov v kategóriách, založený na tom, kde sa nachádzate, je dostupný na Category:Users_by_geographical_region. + get_reading: Poďte čítaÅ¥ o OpenStreetMap na wiki, dostanete posledné správy cez OpenStreetMap blog alebo Twitter, alebo prehliadaÅ¥ cez OpenStreetMap zakladateľa Steve Coast's OpenGeoData blog pre stručnú históriu projektu, ktorý má podcasts na počúvanie tiež! + greeting: Ahoj tam! + hopefully_you: Niekto (dúfame že vy) chcel vytvoriÅ¥ účet po dobu + introductory_video: Môžete sledovaÅ¥ {{introductory_video_link}}. + more_videos: Je tam {{more_videos_link}}. + more_videos_here: viac videí tu + user_wiki_page: Toto je doporučenie ak vytvárate užívateľskú stránku na wiki, ktorá obsahuje kategórie podľa toho kde sa nachádzate, také ako [[Category:Users_in_London]]. + video_to_openstreetmap: úvodné video do OpenStreetMap + wiki_signup: Môžete tiež potrebovaÅ¥ prihlásiÅ¥ sa do OpenStreetMap wiki. + signup_confirm_plain: + blog_and_twitter: "Dosiahnite na posledné novinky cez OpenStreetMap blog alebo Twitter:" + click_the_link_1: Ak je to vám, vitajte! Prosím kliknite na odkaz nižšie pre potvrdenie vášho + current_user_1: Zoznam aktuálnych užívateľov v kategóriách, založené na tom, kde sa vo svete nachádzajú + current_user_2: "sú k dispozícii na:" + greeting: Ahoj! + hopefully_you: Niekto (dúfame že vy) chce vytvoriÅ¥ účet po dobu + introductory_video: "Môžete sledovaÅ¥ úvodné video k OpenStreetMap tu:" + more_videos: "Existujú ďalÅ¡ie videá tu:" + the_wiki: "Poďte čítaÅ¥ o OpenStreetMap na wiki:" + user_wiki_1: Odporúča sa, aby ste vytvorili užívateľskú wiki stránku, ktorá obsahuje + user_wiki_2: obsahuje kategórie podľa toho kde sa nachádzate, také ako [[Category:Users_in_London]]. + wiki_signup: "Môžete tiež prihlásiÅ¥ do wiki OpenStreetMap na adrese:" + oauth: + oauthorize: + allow_read_gpx: čítaÅ¥ vaÅ¡e súkromné GPS stopy. + allow_read_prefs: čítaÅ¥ vaÅ¡e osobné nastavenia. + allow_to: "Klientskej aplikácie umožnia, aby:" + allow_write_api: upravovaÅ¥ mapu. + allow_write_diary: vytvoriÅ¥ položky denníka, poznámok a priateľov. + allow_write_gpx: nahraÅ¥ GPS stopy. + allow_write_prefs: upraviÅ¥ vaÅ¡e osobné nastavenia. + request_access: Aplikácia {{app_name}} požaduje prístup na váš účet. Prosím skontrolujte či aplikácia má nasledujúcu schopnosÅ¥. Môžete si vybraÅ¥ veľa alebo málo, ako sa vám páči. oauth_clients: + create: + flash: UspeÅ¡ne registrované informácie edit: submit: UpraviÅ¥ + title: Upravte vaÅ¡u žiadosÅ¥ + form: + allow_read_gpx: čítaÅ¥ svoje súkromné GPS stopy. + allow_read_prefs: čítaÅ¥ svoje užívateľské nastavenia. + allow_write_api: zmeniÅ¥ mapu. + allow_write_diary: vytvoriÅ¥ položky denníka, poznámky a vytvoriÅ¥ priateľov. + allow_write_gpx: nahraÅ¥ GPS stopy. + allow_write_prefs: upraviÅ¥ svoje užívateľské nastavenia. + callback_url: Spätná URL + name: Meno + requests: "ŽiadosÅ¥ o nasledujúce povolenia od užívateľa:" + required: Požadované + support_url: Podpora URL + url: URL Hlavnej aplikácie + index: + application: Meno žiadosti + issued_at: Vydané v + my_tokens: Moje povolené požiadavky + register_new: Zaregistrujte svoju požiadavku + revoke: ZruÅ¡iÅ¥! + new: + submit: RegistrovaÅ¥ + title: ZaregistrovaÅ¥ novú žiadosÅ¥ + not_found: + sorry: Je nám ľúto, že {{type}} nemožno nájsÅ¥. show: + allow_read_gpx: čítaÅ¥ svoje súkromné GPS stopy. + allow_read_prefs: čítaÅ¥ svoje užívateľské nastavenia. + allow_write_api: zmeniÅ¥ mapu. + allow_write_diary: vytvoriÅ¥ položky denníka, poznámky a vytvoriÅ¥ priateľov. + allow_write_gpx: nahraÅ¥ GPS stopy. + allow_write_prefs: upraviÅ¥ svoje užívateľské nastavenia. edit: UpraviÅ¥ detaily + requests: "Žiadam nasledujúce povolenia od užívateľa:" + support_notice: Podporujeme HMAC-SHA1 (odporúča sa) rovnako ako obyčajný text v ssl móde. + update: + flash: ÚspeÅ¡ne aktualizované informácie o klientovi site: + edit: + anon_edits_link_text: Zistite, prečo tomu tak je. + flash_player_required: Potrebujete Flash player pre Potlatch, the OpenStreetMap Flash editor. Môžete stiahnuÅ¥ Flash Player z Adobe.com. Niekoľko iných možností sú tiež dostupné pre úpravu OpenStreetMap. + not_public: Nemáte nastavené úpravy na verejné. + not_public_description: Nemôžete naďalej upravovaÅ¥ mapy, iba ak urobíte takto. Môžete si nastaviÅ¥ vaÅ¡e úpravy, ako verejné z vaÅ¡ej {{user_page}}. + potlatch_unsaved_changes: Nemáte uložené zmeny. (Pre uloženie v Potlatchu, mali by ste odznačiÅ¥ aktuálnu cestu, alebo bod, ak upravujete v režime naživo, alebo kliknite uložiÅ¥ ak máte tlačidlo uložiÅ¥.) + user_page_link: stránka užívateľa index: + js_1: Používate prehliadač, ktorý nepodporuje JavaScript, alebo máte vypnutý JavaScript. + js_2: OpenStreetMap využíva JavaScript pre slippy map. + js_3: Môžete skúsiÅ¥ Tiles@Home static tile browser ak sa vám nedarí povoliÅ¥ JavaScript. + license: + license_name: Creative Commons Attribution Share-Alike 2,0 + notice: Licencovaný pod {{license_name}} s {{project_name}} a jej prispievatelia. + project_name: OpenStreetMap projekt permalink: Trvalý odkaz shortlink: Krátky odkaz key: map_key: Legenda table: entry: + admin: Administratívne hranice apron: 1: terminál bridleway: Chodník pre kone building: Významná budova + byway: Súkromná cesta cable: - Lanovka - sedačková lanovka @@ -757,11 +1097,14 @@ sk: centre: Å portové centrum commercial: Komerčná oblasÅ¥ common: - 1: lúka + - Obecný + - lúka + construction: Cesta vo výstavbe cycleway: Cyklotrasa farm: Farma footway: Chodník pre peších forest: Les + golf: Golfové ihrisko heathland: Vresovisko industrial: Priemyselná oblasÅ¥ lake: @@ -770,12 +1113,16 @@ sk: military: Vojenský priestor motorway: Diaľnica park: Park + permissive: Voľný prístup pitch: Å portové ihrisko primary: Cesta prvej triedy + private: Súkromný prístup rail: Železnica reserve: Prírodná rezervácia resident: Obytná oblasÅ¥ retail: Nákupná oblasÅ¥ + runway: + 1: pojazdové dráhy school: - Å kola - univerzita @@ -784,16 +1131,26 @@ sk: subway: Metro summit: - Vrchol + - vrchol tourist: Turistická atrakcia track: Lesná, poľná cesta tram: - 1: električka + - Rýchloelektrička + - električka + trunk: Cesta pre motorové vozidlá + tunnel: Únikový kryt = tunel + unclassified: Neklasifikovaná cesta + unsurfaced: Nespevnená cesta heading: Legenda pre z{{zoom_level}} search: search: VyhľadaÅ¥ + search_help: "príklady: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', alebo 'poÅ¡ta blízko Lünen' more príklady..." + submit_text: VykonaÅ¥ where_am_i: Kde som? + where_am_i_title: Opis aktuálnej polohy pomocou vyhľadávača sidebar: close: ZavrieÅ¥ + search_results: Výsledky vyhľadávania time: formats: friendly: "%e %B %Y at %H:%M" @@ -813,7 +1170,7 @@ sk: owner: "Vlastník:" points: "Body:" save_button: UložiÅ¥ zmeny - start_coord: "Súradnice začiatku:" + start_coord: "Začiatočná súradnica:" tags: "Tagy:" tags_help: oddelené čiarkou title: Úprava stopy {{name}} @@ -823,12 +1180,12 @@ sk: list: public_traces: Verejné GPS stopy public_traces_from: Verejné GPS stopy od {{user}} - tagged_with: " označený s {{tags}}" + tagged_with: označený s {{tags}} your_traces: VaÅ¡e GPS stopy make_public: - made_public: Stopa urobená pre verejnosÅ¥ + made_public: Zverejnená stopa no_such_user: - body: Prepáčte, nie je tu užívateľ s menom {{user}}. Prosím skontrolujte váš pravopis, alebo možno odkaz na ktorý ste klikli je chybný. + body: Prepáčte, nie je tu užívateľ s menom {{user}}. Prosím skontrolujte váš text, alebo možno odkaz na ktorý ste klikli je chybný. heading: Užívateľ {{user}} neexistuje title: Nie je taký užívateľ offline: @@ -870,7 +1227,7 @@ sk: trace_paging_nav: next: Dopredu » previous: "« Naspäť" - showing_page: Predstavenie stránky {{page}} + showing_page: Strana {{page}} view: delete_track: VymazaÅ¥ túto stopu description: "Popis:" @@ -887,7 +1244,7 @@ sk: start_coordinates: "Začiatočná súradnica:" tags: "Tagy:" title: Sledovanie stopy {{name}} - trace_not_found: Stopa nenajdené! + trace_not_found: Stopa nenájdená! uploaded: "Nahraté na:" visibility: "ViditeľnosÅ¥:" visibility: @@ -897,19 +1254,20 @@ sk: trackable: Zaznamenávané stopy (zdieľané iba ako anonymné, usporiadané body s časovými značkami) user: account: - current email address: "Aktuálna Emailová Adresa:" + current email address: "Aktuálna E-mailová Adresa:" delete image: OdstrániÅ¥ aktuálny obrázok email never displayed publicly: (nezobrazovaný verejne) flash update success: Informácie používateľa boli obnovené. flash update success confirm needed: Užívateľské informácie boli úspeÅ¡ne aktualizované. Skontrolujte vaÅ¡u emailovú adresu pre správu na potvrdenie vaÅ¡ej novej emailovej adresy. home location: "Domovské miesto:" image: "Obrázok:" + image size hint: (veľkosÅ¥ obrázkov aspoň 100x100 je najlepÅ¡ia) keep image: PonechaÅ¥ aktuálny obrázok latitude: "Zem. šírka:" longitude: "Zem. dĺžka:" make edits public button: ZverejniÅ¥ vÅ¡etky moje úpravy my settings: Moje nastavenia - new email address: "Nová Emailová Adresa:" + new email address: "Nová E-mailová Adresa:" new image: "PridaÅ¥ obrázok:" no home location: Nezadali ste svoje domovské miesto. preferred languages: "Uprednostňované jazyky:" @@ -931,15 +1289,15 @@ sk: confirm: button: PotvrdiÅ¥ failure: Užívateľský účet s týmito údajmi už bol založený. - heading: PotvrdiÅ¥ používateľský účet + heading: PotvrdiÅ¥ užívateľský účet press confirm button: Stlačte tlačítko na potvrdenie dole, pre aktiváciu vášho účtu. success: Váš účet je založený, ďakujeme, že ste sa zapísali! confirm_email: button: PotvrdiÅ¥ - failure: Mailová adresa bola už potvrdená s týmto znakom. - heading: PotvrdiÅ¥ zmenu emailovej adresy - press confirm button: Stlačte tlačítko potvrdiÅ¥ dole na potvrdenie vaÅ¡ej novej emailovej adresy. - success: Potvrdením vaÅ¡ej emailovej adresy, ďakujeme za zapísanie sa! + failure: E-mailová adresa bola už potvrdená s týmto znakom. + heading: PotvrdiÅ¥ zmenu e-mailovej adresy + press confirm button: Stlačte potvrdzovacie tlačidlo nižšie a potvrďte svoju novú e-mailovú adresu. + success: Potvrdená vaÅ¡a e-mailová adresa, ďakujeme za registráciu! filter: not_an_administrator: Potrebujete byÅ¥ administrátor na vykonanie tejto akcie. go_public: @@ -948,14 +1306,18 @@ sk: account not active: Prepáčte, vaÅ¡ účet nie je eÅ¡te aktívne.
Prosím kliknite na odkaz v maile potvrdzujúcom účet na aktivovanie vášho účtu. auth failure: Prepáčte, nemohol som vás prihlásiÅ¥ s týmito údajmi. create_account: vytvoriÅ¥ účet - email or username: "Emailová adresa alebo Meno používateľa:" + email or username: "E-mailová adresa alebo Meno užívateľa:" heading: Prihlásenie login_button: PrihlásiÅ¥ lost password link: Stratili ste heslo? password: "Heslo:" please login: Prosím prihláste sa, alebo {{create_user_link}}. - remember: "PamätovaÅ¥ si ma:" + remember: "ZapamätaÅ¥:" title: PrihlásiÅ¥ sa + logout: + heading: Odhlásenie z OpenStreetMap + logout_button: Odhlásenie + title: Odhlásenie lost_password: email address: "E-mailová Adresa:" heading: Zabudli Ste Heslo? @@ -998,6 +1360,7 @@ sk: reset_password: confirm password: "PotvrdiÅ¥ Heslo:" flash changed: VaÅ¡e heslo bolo zmenené. + flash token bad: Nemôžem nájsÅ¥ také symboly, možno skontrolujte URL? heading: Resetnúť heslo pre {{user}} password: "Heslo:" reset: ZmazaÅ¥ Heslo @@ -1030,10 +1393,11 @@ sk: my edits: moje úpravy my settings: moje nastavenia my traces: moje stopy - nearby users: "Blízky užívatelia:" + nearby users: Iný blízky užívatelia new diary entry: nový údaj denníka no friends: EÅ¡te nemáte pridaných žiadnych priateľov. no nearby users: Nie je tu iný užívateľ, ktorý priznáva mapovanie v okolí. + oauth settings: Oauth nastavenia remove as friend: odstrániÅ¥ ako priateľa role: administrator: Tento užívateľ je administrátor @@ -1051,13 +1415,90 @@ sk: user location: Poloha užívateľa your friends: VaÅ¡i priatelia user_block: + blocks_by: + empty: "{{name}} nemá eÅ¡te žiadne bloky" + heading: Zoznam blokov pre {{name}} + title: Bloky {{name}} + blocks_on: + empty: "{{name}} doteraz eÅ¡te nebol blokovaný." + heading: Zoznam blokov na {{name}} + title: Bloky na {{name}} + create: + flash: ZablokovaÅ¥ užívateľa {{name}}. + try_contacting: Prosím skúste sa spojiÅ¥ s užívateľom, pred jeho zablokovaním a dajte mu primeraný čas na odpoveď. + try_waiting: Prosím skúste dávaÅ¥ užívateľovi primeraný čas na odpoveď, kým ho zablokujete. + edit: + back: ZobraziÅ¥ vÅ¡etky bloky + heading: Editácia bloku na {{name}} + needs_view: Užívateľ sa potrebuje prihlásiÅ¥ pred tým, než blok bude vymazaný? + period: Ako dlho, teraz začínajúc, bude užívateľ zablokovaný pre API. + reason: Dôvod prečo {{name}} je blokovaný. Prosím buďte kľudný a rozumný ako je možné, poskytujte mnoho detailov, koľko len môžete o situácii. Majte na pamäti, že nie vÅ¡etci užívatelia rozumejú jazyku komunity, tak prosím skúste použiÅ¥ pojmy pre laikov. + show: ZobraziÅ¥ tento blok + submit: Aktualizácia bloku + title: Editácia bloku na {{name}} + filter: + block_expired: Blok už vyprÅ¡al a nemôže byÅ¥ upravený. + block_period: Blokovacia doba musí byÅ¥ jedna z hodnôt voliteľná v roletovom menu. + not_a_moderator: Potrebujete byÅ¥ administrátor na vykonanie tejto akcie. + helper: + time_future: Ukončené v {{time}}. + time_past: Ukončené pred {{time}}. + until_login: Aktívny až do prihlásenia užívateľa. + index: + empty: Žiaden blok eÅ¡te nebol vytvorený. + heading: Zoznam užívateľských blokov + title: Užívateľské bloky + model: + non_moderator_revoke: Musíte byÅ¥ moderátorom na zruÅ¡enie bloku. + non_moderator_update: Musí byÅ¥ moderátorom na vytvorenie alebo aktualizáciu bloku. + new: + back: ZobraziÅ¥ vÅ¡etky bloky + heading: Vytvorenie bloku na {{name}} + needs_view: Užívateľ musí byÅ¥ prihlásený, aby mohol vymazaÅ¥ tento blok + period: Ako dlho, teraz začínajúc, bude užívateľ blokovaný pre API. + reason: Dôvod prečo {{name}} je blokovaný. Prosím buďte kľudný a rozumný ako je možné, poskytujte mnoho detailov, koľko len môžete o situácii. Majte na pamäti, že nie vÅ¡etci užívatelia rozumejú jazyku komunity, tak prosím skúste použiÅ¥ pojmy pre laikov. + submit: VytvoriÅ¥ blok + title: Vytváram blok na {{name}} + tried_contacting: Kontaktoval som užívateľa a požiadal ho, aby prestal. + tried_waiting: Prideľte primerané množstvo času pre odpoveď užívateľa na túto komunikáciu. + not_found: + back: Naspäť na zoznam + sorry: Prepáčte, blok užívateľa s ID {{id}} nemohol byÅ¥ nájdený. partial: confirm: Ste si istí? + display_name: Blokovaný užívateľ edit: UpraviÅ¥ + not_revoked: (nezruÅ¡ený) + reason: Dôvod pre blokovanie + revoke: ZruÅ¡iÅ¥! + revoker_name: ZruÅ¡il show: ZobraziÅ¥ status: Stav + revoke: + confirm: Ste si istí, že chcete zruÅ¡iÅ¥ tento blok? + flash: Tento blok bol zruÅ¡ený. + heading: ZruÅ¡ujem blok pre {{block_on}} podľa {{block_by}} + past: Tento blok skončil pred {{time}}a teraz nemože byÅ¥ zruÅ¡ený. + revoke: ZruÅ¡iÅ¥! + time_future: Tento blok bol ukončený v {{time}}. + title: ZruÅ¡ujem blok pre {{block_on}} show: + back: ZobraziÅ¥ vÅ¡etky blokovania + confirm: Ste si istý? edit: UpraviÅ¥ + heading: "{{block_on}} blokovaný {{block_by}}" + needs_view: Užívateľ sa potrebuje prihlásiÅ¥ predtým, ako bude toto blokovanie odstránené. + reason: "Dôvod blokovania:" + revoke: OdvolaÅ¥! + revoker: "Odvolaním:" + show: ZobraziÅ¥ + status: Postavenie + time_future: Skončené {{time}} + time_past: Ukončené pred {{time}} + title: "{{block_on}} blokovaný {{block_by}}" + update: + only_creator_can_edit: Iba moderátor, ktorý vytvoril tento blok, ho môže editovaÅ¥. + success: Blok je aktualizovaný. user_role: filter: already_has_role: Užívateľ už má úlohu {{role}}. diff --git a/config/locales/sl.yml b/config/locales/sl.yml index da3b6661b..7a878ff43 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1,6 +1,7 @@ # Messages for Slovenian (Slovenščina) # Exported from translatewiki.net # Export driver: syck +# Author: Dbc334 sl: activerecord: attributes: @@ -103,7 +104,7 @@ sl: node: Prikaz vozlišča na večjem zemljevidu relation: Prikaz relacije na večjem zemljevidu way: Prikaz poti na večjem zemljevidu - loading: Nalaganje... + loading: Nalaganje ... node: download: "{{download_xml_link}} ali {{view_history_link}}" download_xml: prenesi XML @@ -159,7 +160,7 @@ sl: history_for_feature: Zgodovina [[feature]] load_data: Naloži podatke loaded_an_area_with_num_features: "Naložili ste področje, ki vsebuje [[num_features]] elementov. Nekateri spletni brskalniki ne zmorejo prikaza takÅ¡ne količine podatkov. Na sploÅ¡no brskalniki najbolje prikazujejo 100 ali manj elementov hkrati: karkoli drugega lahko upočasni vaÅ¡ brskalnik ali ga naredi neodzivnega. Če ste prepričani, da želite prikazati vse te podatke, pritisnite na spodnji gumb." - loading: Nalaganje... + loading: Nalaganje ... manually_select: Ročno izberite drugo področje object_list: api: Pridobi področje iz programskega vmesnika (API) @@ -213,7 +214,7 @@ sl: still_editing: (Å¡e ureja) view_changeset_details: Ogled podrobnosti paketa sprememb changeset_paging_nav: - showing_page: Prikaz strani + showing_page: Prikazovanje strani {{page}} changesets: area: Področje comment: Komentar @@ -245,7 +246,7 @@ sl: reply_link: Odgovori na ta vnos edit: body: "Besedilo:" - language: "Jezki:" + language: "Jezik:" latitude: "Z. Å¡irina:" location: "Lokacija:" longitude: "Z. dolžina:" @@ -289,7 +290,7 @@ sl: login: Prijavite se login_to_leave_a_comment: "{{login_link}} za vpis komentarja" save_button: Shrani - title: Dnevnik uporabnika {{user}} + title: Dnevnik uporabnika {{user}} | {{title}} user_title: Dnevnik uporabnika {{user}} export: start: @@ -298,11 +299,11 @@ sl: embeddable_html: HTML za vključitev na spletno stran export_button: Izvozi export_details: OpenStreetMap podatki imajo licenco Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji 2.0. - format: Oblika zapisa + format: Oblika format_to_export: Oblika izvoženih podatkov image_size: Velikost slike latitude: "Å ir:" - licence: Licenca + licence: Dovoljenje longitude: "Dol:" manually_select: Ročno izberite drugo področje mapnik_image: Mapnik slika zemljevida @@ -436,9 +437,9 @@ sl: subject: Zadeva title: PoÅ¡iljanje sporočila no_such_user: - body: Oprostite, uporabnika s tem imenom ali sporočila s tem ID-jem ni - heading: Ni ustreznega uporabnika ali sporočila - title: Ni ustreznega uporabnika ali sporočila + body: Oprostite, uporabnika s tem imenom ni. + heading: Ni takega uporabnika + title: Ni takega uporabnika outbox: date: Datum inbox: prejeta @@ -805,10 +806,10 @@ sl: my edits: moji prispevki my settings: moje nastavitve my traces: moje sledi - nearby users: "Bližnji uporabniki:" + nearby users: Drugi bližnji uporabniki new diary entry: nov vnos v dnevnik no friends: Niste Å¡e dodali nobenih prijateljev. - no nearby users: Ni uporabnikov, ki bi priznali, da kartirajo v vaÅ¡i bližini. + no nearby users: Ni Å¡e drugih uporabnikov, ki bi priznali, da kartirajo v vaÅ¡i bližini. remove as friend: odstrani izmed prijateljev send message: poÅ¡lji sporočilo settings_link_text: vaÅ¡ih nastavitvah diff --git a/config/locales/sr-EC.yml b/config/locales/sr-EC.yml index 8e1090ea1..b172a9c31 100644 --- a/config/locales/sr-EC.yml +++ b/config/locales/sr-EC.yml @@ -121,7 +121,7 @@ sr-EC: map: deleted: Обрисано larger: - area: Погледај зону на већој мапи + area: Погледај област на већој мапи node: Погледај чвор на већој мапи relation: Погледај однос на већој мапи way: Погледај путању на већој мапи @@ -206,6 +206,12 @@ sr-EC: zoom_or_select: Увећајте или изаберите место на мапи које желите да погледате tag_details: tags: "Ознаке:" + timeout: + type: + changeset: скуп измена + node: чвор + relation: однос + way: путања way: download: "{{download_xml_link}}, {{view_history_link}} или {{edit_link}}" download_xml: Преузми XML @@ -379,11 +385,13 @@ sr-EC: fire_hydrant: Хидрант fire_station: Ватрогасна станица fountain: Фонтана + fuel: Гориво grave_yard: Гробље gym: Фитнес центар / Теретана health_centre: Дом здравља hospital: Болница hotel: Хотел + ice_cream: Сладолед kindergarten: Обданиште library: Библиотека marketplace: Пијаца @@ -412,6 +420,7 @@ sr-EC: toilets: Тоалети university: Универзитет waste_basket: Корпа за отпатке + wifi: Wi-Fi приступ youth_centre: Дом омладине boundary: administrative: Административна граница @@ -499,6 +508,7 @@ sr-EC: cape: Рт cave_entrance: Улаз у пећину channel: Канал + cliff: Литица crater: Кратер fjord: Фјорд geyser: Гејзир @@ -507,6 +517,7 @@ sr-EC: island: Острво marsh: Мочвара mud: Блато + peak: Врх reef: Гребен ridge: Гребен river: Река @@ -565,8 +576,10 @@ sr-EC: optician: Оптичар photo: Фотографска радња salon: Салон + shoes: Продавница ципела shopping_centre: Тржни центар supermarket: Супермаркет + toys: Продавница играчака travel_agency: Туристичка агенција tourism: artwork: Галерија @@ -668,6 +681,9 @@ sr-EC: send_message_to: Пошаљи нову поруку {{name}} subject: Тема title: Пошаљи поруку + no_such_user: + heading: Овде таквог нема + title: Овде таквог нема outbox: date: Датум inbox: примљене поруке @@ -822,16 +838,18 @@ sr-EC: save_button: Сними промене start_coord: "Почетне координате:" tags: "Ознаке:" + tags_help: раздвојене зарезима title: Мењање трага {{name}} uploaded_at: "Послато:" visibility: "Видљивост:" visibility_help: шта ово значи? list: public_traces: Јавни ГПС трагови + tagged_with: " означени са {{tags}}" your_traces: Ваши ГПС трагови no_such_user: heading: Корисник {{user}} не постоји - title: Овде таквих нема + title: Овде таквог нема trace: ago: пре {{time_in_words_ago}} by: од @@ -869,6 +887,7 @@ sr-EC: edit_track: Уреди ову стазу filename: "Име фајла:" map: мапа + none: Нема owner: "Власник:" pending: НА_ЧЕКАЊУ points: "Тачке:" @@ -877,6 +896,11 @@ sr-EC: trace_not_found: Траг није пронађен! uploaded: "Послато:" visibility: "Видљивост:" + visibility: + identifiable: Омогућавају препознавање (приказани у списку трагова и као јавне, поређане и датиране тачке) + private: Приватни (дељиви само као анонимне, непоређане тачке) + public: Јавни (приказани у списку трагова и као јавне, непоређане тачке) + trackable: Омогућавају праћење (дељиви само као анонимне, поређане и датиране тачке) user: account: current email address: "Тренутна адреса е-поште:" @@ -921,6 +945,9 @@ sr-EC: please login: Молимо пријавите се или {{create_user_link}}. remember: "Запамти ме:" title: Пријављивање + logout: + logout_button: Одјави се + title: Одјави се lost_password: email address: "Адреса е-поште:" heading: Заборављена лозинка? @@ -946,6 +973,7 @@ sr-EC: heading: Корисник {{user}} не постоји title: Овде таквог нема popup: + friend: Пријатељ your location: Ваша локација reset_password: confirm password: "Потврдите лозинку:" diff --git a/config/locales/sv.yml b/config/locales/sv.yml index b160bedda..76c6decee 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1,6 +1,7 @@ # Messages for Swedish (Svenska) # Exported from translatewiki.net # Export driver: syck +# Author: Ainali # Author: Balp # Author: Cohan # Author: Grillo @@ -208,6 +209,11 @@ sv: zoom_or_select: Zooma in eller välj arean du vill se. tag_details: tags: "Taggar:" + timeout: + type: + node: nod + relation: relation + way: väg way: download: "{{download_xml_link}}, {{view_history_link}} eller {{edit_link}}" download_xml: Ladda hem XML @@ -319,6 +325,9 @@ sv: osmarender_image: Osmarender-bild output: Utdata scale: Skala + too_large: + body: Detta omrÃ¥de är för stort för att exporteras som OpenStreetMap XML-data. Vänligen zooma in eller välja ett mindre omrÃ¥de. + heading: For stort omrÃ¥de zoom: Zooma start_rjs: add_marker: Lägg till markör pÃ¥ kartan @@ -889,6 +898,8 @@ sv: body: Det fanns ingen användare med namnet {{user}}. Kontrollera stavningen, och om länken du klickade pÃ¥ var korrekt. heading: Användaren {{user}} finns inte title: Ingen sÃ¥dan användare + offline: + message: GPX-uppladdningssystemet är för närvarande inte tillgängligt. offline_warning: message: GPX-uppladdningssystemet är för tillfället otillgängligt. trace: @@ -897,6 +908,7 @@ sv: count_points: "{{count}} punkter" edit: Redigera edit_map: Redigera karta + identifiable: IDENTIFIERBAR in: i map: karta more: mer @@ -904,6 +916,7 @@ sv: private: PRIVAT public: PUBLIK trace_details: Visa spÃ¥rdetaljer + trackable: SPÅRBAR view_map: Visa karta trace_form: description: Beskrivning @@ -921,6 +934,10 @@ sv: traces_waiting: Du har {{count}} GPS-spÃ¥r som laddas upp. Det är en bra idé att lÃ¥ta dessa bli klara innan du laddar upp fler, sÃ¥ att du inte blockerar uppladdningskön för andra användare. trace_optionals: tags: Taggar + trace_paging_nav: + next: Nästa » + previous: "« FöregÃ¥ende" + showing_page: Visar sida {{page}} view: delete_track: Radera detta spÃ¥r description: "Beskrivning:" @@ -947,14 +964,21 @@ sv: trackable: SpÃ¥rbar (delas bara som anonyma ordnade punker med tidsstämpel) user: account: + current email address: "Nuvarande E-postadress:" + delete image: Ta bort nuvarande bild email never displayed publicly: (Visas aldrig offentligt) flash update success: Användarinformation uppdaterades. flash update success confirm needed: Användarinformation uppdaterades. Kontrollera din e-post för att bekräfta din e-postadress. home location: "Hemposition:" + image: "Bild:" + image size hint: (kvadratiska bilder pÃ¥ minst 100x100 fungerar bäst) + keep image: BehÃ¥ll nuvarande bild latitude: "Breddgrad (latitud):" longitude: "Längdgrad (longitud):" make edits public button: Gör alla mina redigeringar publika my settings: Mina inställningar + new email address: "Ny e-postadress:" + new image: Lägg till en bild no home location: Du har inte angivit nÃ¥gon hemposition. preferred languages: "Föredraget sprÃ¥k:" profile description: "Profilbeskrivning:" @@ -968,6 +992,7 @@ sv: public editing note: heading: Offentlig redigering text: Dina redigeringar är för tillfället anonyma och andra användare kan inte skicka meddelanden till dig eller se din position. För att visa andra vad du redigerat och för att tillÃ¥ta andra att kontakta dig genom webbplatsen, klicka pÃ¥ knappen nedan. Sedan bytet till API av version 0.6 kan bara publika användare redigera kartdata. (ta reda pÃ¥ varför (engelska)). + replace image: Ersätt nuvarande bild return to profile: Återvänd till profil save changes button: Spara ändringar title: Redigera konto @@ -998,10 +1023,16 @@ sv: lost password link: Glömt ditt lösenord? password: "Lösenord:" please login: Logga in eller {{create_user_link}} + remember: "Kom ihÃ¥g mig:" title: Logga in + logout: + heading: Logga ut frÃ¥n OpenStreetMap + logout_button: Logga ut + title: Logga ut lost_password: email address: "E-postadress:" heading: Glömt lösenord? + help_text: Ange e-postadressen du använde för att registrera dig sÃ¥ skickar vi en länk till den som du kan använda för att Ã¥terställa ditt lösenord. new password button: Återställ lösenord notice email cannot find: Kunde inte hitta den e-postadressen. notice email on way: Synd att du förlorade det, men ett nytt är pÃ¥ väg via e-post. @@ -1013,9 +1044,15 @@ sv: new: confirm email address: "Bekräfta e-postadress:" confirm password: "Bekräfta lösenord:" + contact_webmaster: Kontakta webmastern för att fÃ¥ ett konto skapat - vi kommer att behandla ansökan sÃ¥ snabbt som möjligt. + display name: "Namn som visas:" + display name description: Ditt offentligt visade användarnamn. Du kan ändra detta senare i inställningarna. email address: "E-postadress:" fill_form: Fyll i formuläret sÃ¥ skickar vi ett e-brev för att aktivera ditt konto. heading: Skapa ett användarkonto + license_agreement: Genom att skapa ett konto accepterar du att alla uppgifter du lämnar in till OpenStreetMap projektet skall (icke-exklusivt) vara licensierat under denna Creative Commons-licens (by-sa) . + no_auto_account_create: Tyvärr kan vi för närvarande inte kan skapa ett konto Ã¥t dig automatiskt. + not displayed publicly: Visas inte offentligt (se sekretesspolicyn) password: "Lösenord:" signup: Registrering title: Skapa konto @@ -1024,6 +1061,7 @@ sv: heading: Användaren {{user}} finns inte title: Ingen sÃ¥dan användare popup: + friend: Vän nearby mapper: Användare i närheten your location: Din position remove_friend: @@ -1043,6 +1081,7 @@ sv: activate_user: aktivera denna användare add as friend: lägg till som vän ago: ({{time_in_words_ago}} sedan) + block_history: visa tilldelade blockeringar blocks by me: blockeringar av mig blocks on me: mina blockeringar confirm: Bekräfta diff --git a/config/locales/te.yml b/config/locales/te.yml index d0a520071..f80b71501 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -178,9 +178,6 @@ te: user_diaries: వాడుకరి డైరీలు welcome_user: స్వాగతం, {{user_link}} welcome_user_link_tooltip: మీ వాడుకరి పేజీ - map: - edit: మార్చు - view: చూడండి message: inbox: date: తేదీ @@ -309,8 +306,6 @@ te: button: నిర్ధారించు confirm_email: button: నిర్ధారించు - friend_map: - your location: మీ ప్రాంతం login: create_account: ఖాతాని సృష్టించుకోండి email or username: "ఈమెయిల్ చిరునామా లేదా వాడుకరిపేరు:" @@ -339,15 +334,15 @@ te: title: ఖాతా సృష్టింపు no_such_user: heading: "{{user}} వాడుకరి లేనే లేరు" + popup: + your location: మీ ప్రాంతం reset_password: confirm password: "సంకేతపదాన్ని నిర్ధారించండి:" flash changed: మీ సంకేతపదాన్ని మార్చాం. password: "సంకేతపదం:" view: - add image: చిత్రాన్ని చేర్చు ago: ({{time_in_words_ago}} క్రితం) blocks on me: నా మీద నిరోధాలు - change your settings: మీ అమరికలను మార్చుకోండి confirm: నిర్ధారించు create_block: ఈ వాడుకరిని నిరోధించు delete_user: ఈ వాడుకరిని తొలగించు @@ -364,8 +359,6 @@ te: administrator: ఈ వాడుకరి ఒక నిర్వాహకులు send message: సందేశాన్ని పంపించు settings_link_text: అమరికలు - upload an image: ఓ చిత్రాన్ని ఎక్కించండి - user image heading: వాడుకరి చిత్రం user location: వాడుకరి ప్రాంతం your friends: మీ స్నేహితులు user_block: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d8ecf6635..678fe9a02 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,6 +1,7 @@ # Messages for Turkish (Türkçe) # Exported from translatewiki.net # Export driver: syck +# Author: Alerque # Author: Katpatuka tr: activerecord: @@ -34,7 +35,30 @@ tr: browse: common_details: changeset_comment: "Yorum:" - map: - coordinates: "Koordinatları:" - edit: Düzenle - view: Görünüm + relation: + download: "{{download_xml_link}} veya {{view_history_link}}" + download_xml: XML indir + view_history: Geçmişi görüntüle + start_rjs: + data_frame_title: Veri + details: Ayrıntılar + edited_by_user_at_timestamp: "[[user]] tarafından düzenlendi ([[timestamp]])" + show_history: Geçmişi görüntüle + wait: Bekleyin... + trace: + edit: + description: "Açıklama:" + map: harita + save_button: Değişiklikleri Kaydet + tags: "Etiketler:" + tags_help: virgülle ayrılmış + trace: + ago: "{{time_in_words_ago}} önce" + count_points: "{{count}} puan" + edit: değiştir + in: içinde + map: harita + more: daha fazla + private: ÖZEL + trace_paging_nav: + previous: "« Önceki" diff --git a/config/locales/uk.yml b/config/locales/uk.yml index a459b59ba..4736b5df7 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1264,7 +1264,7 @@ uk: offline_warning: message: Доступ до системи завантаження GPX-файлів на поточний момент відсутній trace: - ago: "{{time_in_words_ago}} назад" + ago: "{{time_in_words_ago}} тому" by: "Автор:" count_points: "{{count}} точок" edit: правити @@ -1438,7 +1438,7 @@ uk: view: activate_user: активувати цього користувача add as friend: додати до списку друзів - ago: ({{time_in_words_ago}} назад) + ago: ({{time_in_words_ago}} тому) block_history: отримані блокування blocks by me: заблоковано мною blocks on me: мої блокування diff --git a/config/locales/vi.yml b/config/locales/vi.yml index d6f3f87a6..f777fdef7 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -424,6 +424,7 @@ vi: bicycle_rental: Chỗ Mướn Xe đạp cafe: Quán Cà phê car_rental: Chỗ Mướn Xe + car_sharing: Chia sẻ Xe cộ car_wash: Tiệm Rá»­a Xe casino: Sòng bạc cinema: Rạp phim @@ -478,11 +479,13 @@ vi: university: Trường Đại học waste_basket: Thùng rác wifi: Điểm Truy cập Không dây + youth_centre: Trung tâm Thanh niên boundary: administrative: Biên giới Hành chính building: bunker: Boong ke church: Nhà thờ + city_hall: Trụ sở Thành phố commercial: Tòa nhà ThÆ°Æ¡ng mại dormitory: Ký túc xá entrance: Cá»­a vào @@ -638,11 +641,13 @@ vi: monorail: Đường Một Ray station: Nhà ga subway: Trạm Xe điện Ngầm + subway_entrance: Cá»­a vào Nhà ga Xe điện ngầm tram: Đường Xe điện shop: bakery: Tiệm Bánh bicycle: Tiệm Xe đạp books: Tiệm Sách + car: Tiệm Xe hÆ¡i car_dealer: Cá»­a hàng Xe hÆ¡i car_repair: Tiệm Sá»­a Xe carpet: Tiệm Thảm @@ -655,6 +660,7 @@ vi: fashion: Tiệm Thời trang fish: Tiệm Cá florist: Tiệm Hoa + food: Tiệm Thá»±c phẩm grocery: Tiệm Tạp phẩm hairdresser: Tiệm Làm tóc insurance: Bảo hiểm @@ -690,6 +696,7 @@ vi: waterway: canal: Kênh dam: Đập + rapids: Thác ghềnh river: Sông riverbank: Bờ sông stream: Dòng suối @@ -793,10 +800,14 @@ vi: send_message_to: Gá»­i thÆ° mới cho {{name}} subject: Tiêu đề title: Gá»­i thÆ° + no_such_message: + body: Rất tiếc, không có thÆ° nào với ID đó. + heading: ThÆ° không tồn tại + title: ThÆ° không tồn tại no_such_user: - body: Rất tiếc, không có người dùng hoặc thÆ° với tên hoặc ID đó - heading: Người dùng hoặc thÆ° không tồn tại - title: Người dùng hoặc thÆ° không tồn tại + body: Rất tiếc, không có người dùng với tên đó. + heading: Người dùng không tồn tại + title: Người dùng không tồn tại outbox: date: Ngày inbox: thÆ° đến @@ -840,8 +851,9 @@ vi: hopefully_you_1: Ai (chắc bạn) muốn đổi địa chỉ thÆ° điện tá»­ bên hopefully_you_2: "{{server_url}} thành {{new_address}}." friend_notification: + befriend_them: CÅ©ng có thể thêm họ vào danh sách người bạn tại {{befriendurl}}. had_added_you: "{{user}} đã thêm bạn vào danh sách bạn tại OpenStreetMap." - see_their_profile: Có thể xem trang cá nhân của họ tại {{userurl}} và cÅ©ng thêm họ vào danh sách của bạn tùy ý. + see_their_profile: Có thể xem trang cá nhân của họ tại {{userurl}}. subject: "[OpenStreetMap] {{user}} đã thêm bạn là người bạn" gpx_notification: and_no_tags: và không có thẻ @@ -1070,6 +1082,9 @@ vi: sidebar: close: Đóng search_results: Kết quả Tìm kiếm + time: + formats: + friendly: "%e tháng %m năm %Y lúc %H:%M" trace: create: trace_uploaded: Tập tin GPX của bạn đã được tải lên và đang chờ được chèn vào cÆ¡ sở dữ liệu. Thường chỉ cần chờ đợi trong vòng ná»­a tiếng, và bạn sẽ nhận thÆ° điện tá»­ lúc khi nó xong. @@ -1179,6 +1194,7 @@ vi: flash update success confirm needed: Đã cập nhật thông tin cá nhân thành công. Kiểm tra thÆ° điện tá»­ xác nhận địa chỉ thÆ° điện tá»­ mới. home location: "Vị trí Nhà:" image: "Hình:" + image size hint: (hình vuông ít nhất 100×100 điểm ảnh là tốt nhất) keep image: Giữ hình hiện dùng latitude: "VÄ© độ:" longitude: "Kinh độ:" @@ -1230,7 +1246,12 @@ vi: lost password link: Quên mất Mật khẩu? password: "Mật khẩu:" please login: Xin hãy đăng nhập hoặc {{create_user_link}}. + remember: "Nhớ tôi:" title: Đăng nhập + logout: + heading: Đăng xuất OpenStreetMap + logout_button: Đăng xuất + title: Đăng xuất lost_password: email address: "Địa chỉ ThÆ° điện tá»­:" heading: Quên mất Mật khẩu? @@ -1264,6 +1285,7 @@ vi: heading: Người dùng {{user}} không tồn tại title: Người dùng không tồn tại popup: + friend: Người bạn nearby mapper: Người vẽ bản đồ ở gần your location: Vị trí của bạn remove_friend: @@ -1305,10 +1327,11 @@ vi: my edits: đóng góp của tôi my settings: tùy chọn my traces: tuyến đường của tôi - nearby users: "Người dùng ở gần:" + nearby users: Người dùng khác ở gần new diary entry: mục nhật ký mới no friends: Bạn chÆ°a thêm người bạn. - no nearby users: ChÆ°a có người dùng nào nhận là họ ở gần. + no nearby users: Không có người dùng nào nhận rằng họ ở gần. + oauth settings: Thiết lập OAuth remove as friend: dời người bạn role: administrator: Người dùng này là quản lý viên diff --git a/config/locales/yi.yml b/config/locales/yi.yml index 88a696a4f..37cd27e24 100644 --- a/config/locales/yi.yml +++ b/config/locales/yi.yml @@ -10,8 +10,24 @@ yi: user: באַניצער trace: user: באַניצער + user: + pass_crypt: פאַסווארט models: country: לאנד language: שפראך user: באניצער way: וועג + layouts: + history: היסטאריע + message: + message_summary: + delete_button: אויסמעקן + sent_message_summary: + delete_button: אויסמעקן + user: + login: + password: "פאַסווארט:" + new: + password: "פאַסווארט:" + reset_password: + password: "פאַסווארט:" diff --git a/config/mongrel_cluster.yml b/config/mongrel_cluster.yml index 954be24af..d6c477b9a 100644 --- a/config/mongrel_cluster.yml +++ b/config/mongrel_cluster.yml @@ -1,5 +1,5 @@ ---- -log_file: log/mongrel.log -port: 8000 -pid_file: tmp/mongrel.pid +--- +log_file: log/mongrel.log +port: 8000 +pid_file: tmp/mongrel.pid servers: 8 \ No newline at end of file diff --git a/config/potlatch/locales/ca.yml b/config/potlatch/locales/ca.yml index 6f0b2d9b1..eccc3e953 100644 --- a/config/potlatch/locales/ca.yml +++ b/config/potlatch/locales/ca.yml @@ -15,6 +15,7 @@ ca: action_insertnode: afegir un node a una via action_mergeways: fusió de dues vies action_movepoi: moure un punt d'interès (POI) + action_movepoint: Moure un punt action_moveway: moviment d'una via action_pointtags: Posa etiquetes en un punt action_poitags: Posa etiquetes en un punt d'interès (POI) @@ -31,33 +32,47 @@ ca: advanced_parallel: Via paral·lela advanced_tooltip: Accions d'edició avançades advanced_undelete: Restaura + advice_bendy: Massa corbes per a redreçar (shift per a forçar) + advice_conflict: Conflicte en el servidor - pot ser que hagi de guardar de nou advice_deletingpoi: Esborrant POI (Z per a desfer) advice_deletingway: Esborra via (Z per desfer) advice_microblogged: Actualitzat el seu estat de $1 + advice_nocommonpoint: Les vies no comparteixen un punt en comú + advice_revertingpoi: Tornant a l'últim punt d'inter'es que es va guardar. (Z per desfer) advice_revertingway: Tornant a l'última via guardada (Z per desfer) + advice_tagconflict: Les etiquetes no coincideixen - si us plau revisi'ls (Z per desfer) advice_toolong: Massa llarg per desbloquejar - si us plau, divideixi'l en vies més curtes advice_uploadempty: No hi ha gens que pujar advice_uploadfail: Pujada detinguda advice_uploadsuccess: Totes les dades han pujat correctament + advice_waydragged: Via desplaçada (Z per desfer) cancel: Cancel·la closechangeset: Tanca conjunt de canvis conflict_download: Descarrega la seva versió conflict_overwrite: Sobreescriu la seva versió conflict_poichanged: Des que va començar a editar algú ha canviat el punt $1$2. conflict_relchanged: Des que va començar a editar algú ha canviat la relació $1$2. + conflict_visitpoi: Feu clic a 'D'acord' per mostrar el punt. conflict_visitway: Cliqueu "D'acord" per a mostrar la via. + conflict_waychanged: Des que va començar a editar, algú ha canviat la via $1$2. createrelation: Crea una relació nova custom: "Personalitzat:" delete: Suprimeix deleting: eliminar + drag_pois: Arrossegar i soltar punts d'interès editinglive: Edició en viu editingoffline: Edició fora de línia + emailauthor: Si us plau, enviï un correu a richard@systemeD.net amb un informe d'error, dient que el que estava fent en aquell moment. error_anonymous: No pot contactar a un mapeador anònim + error_connectionfailed: Ho sentim - la connexió amb el servidor de OpenStreetMap va fallar. Qualsevol canvi recent no s'ha guardat. \n\nVoleu provar una altra vegada? error_microblog_long: "Enviament a $1 ha fallat:\ncodi HTTP: $2\nmissatge d'error: $3 \n$1 error: $4" error_nopoi: El POI no es pot trobar (potser hagis mogut lluny?), així que no es pot desfer. error_nosharedpoint: Les vies $1 i $2 ja no comparteixen un punt comú, així que no es pot desfer la divisió. + error_noway: La via $1 no es pot trobar (igual vostè s'ha desplaçat a una altra zona?), per tant no es pot desfer. + error_readfailed: Ho sentim - el servidor de OpenStreetMap no ha respost a la sol·licitud de dades.\n\nVoleu tornar a intentar? existingrelation: Afegir a una relació existent findrelation: Troba una relació que conté + gpxpleasewait: Si us plau, esperi mentre la traça GPX es processa. heading_drawing: Dibuixant heading_introduction: Introducció heading_pois: Com començar @@ -69,6 +84,7 @@ ca: hint_drawmode: Feu clic per afegir un punt\ndoble clic/Intro\n per finalitzar la via hint_latlon: "lat $1\nlon $2" hint_loading: carregant dades + hint_overendpoint: sobre punt final ($1)\nfeu clic per unir\nshift-click per fusionar hint_overpoint: sobre el punt ($1)\nFeu clic per unir hint_pointselected: Punt seleccionat\n(fes shift-clic en el punt per\ncomençar una nova línia) hint_saving: guardant les dades @@ -93,6 +109,7 @@ ca: login_uid: "Nom d'usuari:" mail: Correu more: Més + newchangeset: "Si us plau, provi de nou: Potlatch començarà un nou conjunt de canvis" "no": 'No' nobackground: Sense fons norelations: No hi ha relacions en l'àrea actual @@ -103,6 +120,8 @@ ca: offset_narrowcanal: Camí de sirga estret ok: D'acord openchangeset: Obrir conjunt de canvis + option_custompointers: Utilitza la ploma i la mà de punters + option_external: "Llançament extern:" option_fadebackground: Atenuar el fons option_layer_cycle_map: OSM - map ciclista option_layer_maplint: OSM - Maplint (errors) @@ -111,6 +130,7 @@ ca: option_layer_ooc_7th: "Regne Unit històric: 7th" option_layer_ooc_npe: "Regne Unit històric: NPE" option_layer_ooc_scotland: "Regne Unit històric: Escòcia" + option_layer_os_streetview: "UK: OS StreetView" option_layer_streets_haiti: "Haití: noms de carrers" option_layer_tip: Escollir el fons a mostrar option_limitways: Avisar si hi ha molta càrrega de dades @@ -128,6 +148,7 @@ ca: preset_icon_bus_stop: Parada d'autobús preset_icon_cafe: Cafè preset_icon_cinema: Cinema + preset_icon_convenience: Adrogueria preset_icon_disaster: Edifici d'Haití preset_icon_fast_food: Menjar ràpid preset_icon_ferry_terminal: Ferri @@ -155,8 +176,10 @@ ca: prompt_closechangeset: Tanca conjunt de canvis $1 prompt_createparallel: Crea via paral.lela prompt_editlive: Edició en viu + prompt_editsave: Edició amb guardar prompt_helpavailable: Nou usuari? Miri a la part inferior esquerra per obtenir ajuda. prompt_launch: Obrir URL externa + prompt_live: En el mode directe, cada canvi realitzat es guardarà instantàniament en la base de dades de OpenStreetMap - això no es recomana a principiants. Estàs segur? prompt_manyways: Aquesta àrea conté molts detalls i trigarà molt en carregar-se. Prefereixes fer un zoom? prompt_microblog: Enviat a $1 ($2 restants) prompt_revertversion: Revertir a una versió prèviament guardada @@ -171,6 +194,7 @@ ca: tags_backtolist: Torna a la llista tags_descriptions: Descripcions de '$1' tags_findatag: Troba una etiqueta + tags_findtag: Cerca una etiqueta tags_matching: Etiquetes populars que coincideixen amb '$1' tags_typesearchterm: "Introdueixi una paraula per a buscar:" tip_addrelation: Afegir a una relació @@ -183,7 +207,9 @@ ca: tip_noundo: No hi ha res a desfer tip_options: Establir opcions (triar el mapa de fons) tip_photo: Carregar fotos + tip_presettype: Escollir quin tipus de etiquetes preestablertes s'ofereixen en el menú. tip_repeattag: Repetir les etiquetes de la via seleccionada prèviament (R) + tip_revertversion: Trii la data a la qual tornar tip_selectrelation: Afegir a la ruta escollida tip_splitway: Divideix la via en el punt seleccionat (X) tip_tidy: Simplifica punts en una via (T) diff --git a/config/potlatch/locales/da.yml b/config/potlatch/locales/da.yml index 1b40f7b36..1fa4426b1 100644 --- a/config/potlatch/locales/da.yml +++ b/config/potlatch/locales/da.yml @@ -1,11 +1,14 @@ # Messages for Danish (Dansk) # Exported from translatewiki.net # Export driver: syck +# Author: Ebbe +# Author: Winbladh da: a_poi: $1 et POI a_way: $1 en vej action_addpoint: tilføjer et punkt til enden af en vej action_cancelchanges: afbryder ændringer af + action_createparallel: skaber parallelle veje action_createpoi: lave et POI (interessant punkt) action_deletepoint: sletter et punkt action_insertnode: tilføj et punkt pÃ¥ vejen @@ -16,36 +19,133 @@ da: action_pointtags: sætter tags pÃ¥ et punkt action_poitags: sætter tags pÃ¥ et POI (interessant punkt) action_reverseway: vend retningen pÃ¥ en vej + action_revertway: returnere en vej action_splitway: del en vej action_waytags: sætter tags pÃ¥ en vej + advanced: Avanceret + advanced_close: Luk Changeset + advanced_maximise: Maksimer vinduet + advanced_minimise: Minimer vindue + advanced_parallel: Parallel vej + advanced_undelete: Genopret + advice_deletingpoi: Sletning af POI (Z for at fortryde) + advice_deletingway: Sletter vej (Z for at fortryde) + advice_revertingway: Vender tilbage til sidst gemte vej (Z for at fortryde) + advice_toolong: For lang for lÃ¥se op - venligst opdel i kortere veje + advice_uploadempty: Intet at uploade + advice_uploadsuccess: Alle data uploadet succesfuldt + advice_waydragged: Way flyttet (Z for at fortryde) cancel: Afbryd + closechangeset: Lukker Changeset + conflict_overwrite: Overskriv deres version + conflict_poichanged: Siden du begyndte at redigere, har en anden ændret punkt $ 1 $ 2. + conflict_relchanged: Siden du begyndte at redigere, har en anden ændret relation $1 $2. + conflict_visitway: Klik pÃ¥ 'Ok' for at vise vejen. + conflict_waychanged: Siden du begyndte at redigere, har en anden ændret vej $1 $2. createrelation: Lav en ny relation + custom: "Custom:" delete: Slet deleting: sletter + editinglive: Live redigering + editingoffline: Redigering offline emailauthor: \n\nVenligst send en e-mail (pÃ¥ engelsk) til richard\@systemeD.net med en fejlrapport, og forklar hvad du gjorde da det skete. - error_connectionfailed: "Beklager - forbindelsen til OpenStreetMap-serveren fejlede, eventuelle nye ændringer er ikke blevet gemt.\n\nVil du prøve igen?" + error_connectionfailed: Beklager - forbindelsen til OpenStreetMap-serveren fejlede, eventuelle nye ændringer er ikke blevet gemt. \n\nVil du prøve igen? error_nopoi: Fandt ikke POI-et, sÃ¥ det er ikke muligt at fortryde. (MÃ¥ske er den ikke pÃ¥ skærmen længere?) error_nosharedpoint: Vejene $1 og $2 deler ikke noget punkt længere, sÃ¥ det er ikke muligt at fortryde delingen. error_noway: Fandt ikke vejen $1 sÃ¥ det er ikke muligt at fortryde. (MÃ¥ske er den ikke pÃ¥ skærmen længere?) + error_readfailed: Beklager - OpenStreetMap-serveren reagere ikke.\n\nVil du prøve igen? existingrelation: Føj til en eksisterende relation findrelation: Find en relation som indeholder gpxpleasewait: Vent venligst mens GPX sporet behandles. + heading_introduction: Indledning + heading_surveying: Undersøge help: Hjælp hint_drawmode: klik for at tilføje punkt\ndobbeltklik eller enter\nfor at afslutte linie hint_loading: henter veje hint_overendpoint: over endepunkt\nklik for at forbinde\nshift+klik for at slÃ¥ sammen til en hint_overpoint: over punkt\nklik for at forbinde hint_pointselected: punkt valgt\n(shift+klik punktet for at\nstarte en ny linie) + hint_saving: gemmer data + inspector: Inspektor + inspector_duplicate: Duplikat af + inspector_in_ways: I veje + inspector_locked: LÃ¥st + inspector_not_in_any_ways: Ikke pÃ¥ nogen veje (POI) + inspector_unsaved: Ikke gemt + inspector_uploading: (Uploading) + inspector_way_connects_to_principal: Forbinder til $1 $2 og $3 andre $4 + inspector_way_nodes_closed: $1 noder (lukkede) + login_pwd: "Password:" + login_retry: Dit login blev ikke genkendt. Prøv venligst igen. + login_title: Kunne ikke logge ind + login_uid: "Brugernavn:" + mail: Post + newchangeset: "Prøv venligst igen: Potlatch vil starte et nyt changeset.." + "no": Nej + nobackground: Ingen baggrund norelations: Ingen relationer i omrÃ¥det pÃ¥ skærmen + offset_choose: Vælg offset (m) + offset_dual: Dobbelt vej (D2) + ok: Ok + openchangeset: Åbner Changeset option_custompointers: Brug pen- og hÃ¥ndvisere option_fadebackground: Fjern baggrund + option_layer_cycle_map: OSM - cykel kort + option_layer_maplint: OSM - Maplint (fejl) + option_layer_nearmap: "Australien: NearMap" + option_layer_ooc_25k: "UK historisk: 1:25 k" + option_layer_os_streetview: "UK: OS StreetView" + option_layer_streets_haiti: "Haiti: gadenavne" + option_layer_tip: Vælg baggrunden til visning + option_limitways: Advar ved loading af masser af data + option_microblog_id: "Microblog navn:" + option_microblog_pwd: "Microblog password:" + option_photo: "Foto KML:" + option_thinareas: Brug tyndere linjer for omrÃ¥der option_thinlines: Brug tynde linier uanset skalering + option_tiger: Fremhæv uændret TIGER + option_warnings: Vis flydende advarsler point: Punkt + preset_icon_airport: Lufthavn + preset_icon_bar: Bar + preset_icon_cafe: Café + preset_icon_cinema: Biograf + preset_icon_disaster: Haiti bygning + preset_icon_fast_food: Fast food + preset_icon_ferry_terminal: Færge + preset_icon_fire_station: Brandstation + preset_icon_hospital: Hospital + preset_icon_hotel: Hotel + preset_icon_museum: Museum + preset_icon_parking: Parkering + preset_icon_place_of_worship: Sted for tilbedelse + preset_icon_police: Politistation + preset_icon_post_box: Postkasse + preset_icon_recycling: Genbrug + preset_icon_school: Skole + preset_icon_station: Togstation + preset_icon_taxi: Taxaholdeplads + preset_icon_telephone: Telefon + preset_tip: Vælg fra menuen af preset tags, der beskriver $1 prompt_addtorelation: Tilføj $1 til en relation + prompt_changesetcomment: "Indtast en beskrivelse af dine ændringer:" + prompt_createparallel: Opret parallel vej + prompt_editlive: Edit live + prompt_helpavailable: Ny bruger? Kig nederst til venstre for at fÃ¥ hjælp. + prompt_launch: Start ekstern URL + prompt_manyways: Dette omrÃ¥de er meget detaljerede, og vil tage lang tid at hente. Foretrækker du at zoome ind? prompt_revertversion: "Ret tilbage til tidligere lagret version:" - prompt_taggedpoints: Nogle af punktene pÃ¥ denne vej har tags. Vil du virkelig slette? + prompt_savechanges: Gem ændringer + prompt_taggedpoints: Nogle af punktene pÃ¥ denne vej har tags eller er i en relation. Vil du virkelig slette? prompt_track: Overfør dine GPS-spor til (lÃ¥ste) veje for redigering. prompt_welcome: Velkommen til OpenStreetMap! + retry: Prøv igen + revert: Fortryd + save: Gem + tags_backtolist: Tilbage til listen + tags_descriptions: Beskrivelser af '$ 1' + tags_findtag: Find tag + tags_matching: Populære tags matchende '$1' tip_addrelation: Føj til en relation tip_addtag: Tilføj et tag tip_alert: Der opstod en fejl, klik for detaljer @@ -55,10 +155,19 @@ da: tip_gps: Vis GPS spor (G) tip_noundo: Intet at fortryde tip_options: Sæt indstillinger (vælg kortbaggrund) + tip_photo: Load billeder tip_presettype: Vælg hvilke type forhÃ¥ndsinstillinger som er tilgænglige i menuen tip_repeattag: Gentag tags fra senest valgte vej (R) tip_revertversion: Vælg versionen der skal rettes tilbage til tip_selectrelation: Føj til den valgte rute tip_splitway: Del vej i valgt punkt (X) + tip_tidy: Nydeliggøre vejpunkter (T) tip_undo: Fortryd $1 (Z) + uploading: Overfører ... + uploading_deleting_ways: Sletter veje + uploading_poi: Uploading POI $1 + uploading_relation_name: Uploading relation $1, $2 + uploading_way_name: Uploading vej$ 1, $ 2 + warning: Advarsel! way: Vej + "yes": Ja diff --git a/config/potlatch/locales/de.yml b/config/potlatch/locales/de.yml index aaac63878..f4e491c02 100644 --- a/config/potlatch/locales/de.yml +++ b/config/potlatch/locales/de.yml @@ -6,6 +6,7 @@ # Author: CygnusOlor # Author: Fnolz # Author: Grille chompa +# Author: LWChris # Author: Markobr # Author: Michi # Author: Pill @@ -20,7 +21,7 @@ de: action_createpoi: Einen Ort von Interesse (POI) erstellen action_deletepoint: Punkt löschen action_insertnode: Punkt auf Weg hinzufügen - action_mergeways: Zwei Wege verschmelzen + action_mergeways: Zwei Wege zusammenlegen action_movepoi: Ort von Interesse (POI) verschieben action_movepoint: Punkt verschieben action_moveway: einen Weg verschieben @@ -191,7 +192,7 @@ de: prompt_microblog: Eintragen in $1 ($2 verbleibend) prompt_revertversion: "Frühere Version wiederherstellen:" prompt_savechanges: Änderungen speichern - prompt_taggedpoints: Einige Punkte auf diesem Weg tragen Attribute (Tags). Trotzdem löschen? + prompt_taggedpoints: Einige Punkte auf diesem Weg besitzen Attribute oder sind Bestandteil von Relationen. Wirklich löschen? prompt_track: Deine GPS-Aufzeichnungen (Tracks) in (gesperrte) Wege zum Editieren wandeln. prompt_unlock: Anklicken zum Entsperren prompt_welcome: Willkommen bei OpenStreetMap! diff --git a/config/potlatch/locales/dsb.yml b/config/potlatch/locales/dsb.yml index 56e1c8365..2d8073a03 100644 --- a/config/potlatch/locales/dsb.yml +++ b/config/potlatch/locales/dsb.yml @@ -176,7 +176,7 @@ dsb: prompt_microblog: Powěsć do 1 ($2 zbytne) prompt_revertversion: "K pjerwjejÅ¡nej skłaźonej wersiji se wrośiś:" prompt_savechanges: Změny składowaś - prompt_taggedpoints: Někotare dypki na toś tom puśu maju atributy. CoÅ¡ jen napÅ¡awdu laÅ¡owaś? + prompt_taggedpoints: Někotare dypki na toś tom puśu maju atributy abo su w relacijach. CoÅ¡ jen napÅ¡awdu laÅ¡owaś? prompt_track: GPS-ceru do puśow konwertěrowaś prompt_unlock: Klikni, aby se wótwóriło prompt_welcome: Witaj do OpenStreetMap! diff --git a/config/potlatch/locales/en.yml b/config/potlatch/locales/en.yml index 9709ebca4..5ef926f6a 100644 --- a/config/potlatch/locales/en.yml +++ b/config/potlatch/locales/en.yml @@ -138,6 +138,7 @@ en: option_layer_ooc_7th: "UK historic: 7th" option_layer_ooc_npe: "UK historic: NPE" option_layer_ooc_scotland: "UK historic: Scotland" + option_layer_os_streetview: "UK: OS StreetView" option_layer_osmarender: OSM - Osmarender option_layer_tip: Choose the background to display option_layer_yahoo: Yahoo! @@ -199,6 +200,7 @@ en: retry: Retry revert: Revert save: Save + tags_findtag: Find tag tags_findatag: Find a tag tags_typesearchterm: "Type a word to look for:" tags_matching: Popular tags matching '$1' diff --git a/config/potlatch/locales/eo.yml b/config/potlatch/locales/eo.yml index c8396d246..f3b1c9884 100644 --- a/config/potlatch/locales/eo.yml +++ b/config/potlatch/locales/eo.yml @@ -1,11 +1,14 @@ # Messages for Esperanto (Esperanto) # Exported from translatewiki.net # Export driver: syck +# Author: Cfoucher # Author: Yekrats eo: a_way: $1 vojon action_movepoint: Movante punkton + advanced_close: Malfermi ŝanĝaron advanced_undelete: Malforigi + createrelation: Krei novan rilaton custom: "Memkreita:" delete: Forigi editinglive: Aktiva redakto @@ -14,11 +17,15 @@ eo: login_pwd: Pasvorto login_uid: "Salutnomo:" option_photo: "Foto KML:" + preset_icon_cinema: Kinejo + preset_icon_station: Stacidomo + prompt_changesetcomment: "Enmetu priskribon de viaj ŝanĝoj:" prompt_editsave: Redakti kun konservo prompt_savechanges: Konservi ŝanĝojn retry: Reprovi save: Konservi tip_alert: Eraro okazis - klaku atingi detalojn + tip_direction: Vojdirekto - klaku por inversigi tip_photo: Ŝarĝi fotojn tip_undo: Malfari $1 (Z) way: Vojo diff --git a/config/potlatch/locales/es.yml b/config/potlatch/locales/es.yml index 66d026f59..e3cc0324f 100644 --- a/config/potlatch/locales/es.yml +++ b/config/potlatch/locales/es.yml @@ -35,14 +35,14 @@ es: advanced_tooltip: Acciones de edición avanzadas advanced_undelete: Restaurar advice_bendy: Muy curvo para enderezarse (presione MAYÚS para forzar) - advice_conflict: Conflicto en el servidor - puede que tenga que intentar guardar de nuevo + advice_conflict: Conflicto en el servidor - puede que tenga que guardar de nuevo advice_deletingpoi: Borrando POI (Z para deshacer) advice_deletingway: Borrando vía (Z para deshacer) advice_microblogged: Se ha actualizado tu estado $1 advice_nocommonpoint: Las vías no comparten un punto en común advice_revertingpoi: Volver al último POI guardado (Z para deshacer) advice_revertingway: Deshaciendo cambios para volver a la última versión guardada (Z para deshacer) - advice_tagconflict: Los parámetros no coinciden - Por favor revíselos (Z para deshacer) + advice_tagconflict: Las etiquetas no coinciden - Por favor revíselas (Z para deshacer) advice_toolong: Demasiado largo para desbloquear - Por favor divídalo en vías más cortas advice_uploadempty: Nada que subir advice_uploadfail: Subida detenida @@ -70,11 +70,11 @@ es: error_microblog_long: "El envío a $1 falló:\nCódigo HTTP: $2\nMensaje de error: $3\n$1 error: $4" error_nopoi: El punto de interés (POI) no se puede encontrar (igual usted se ha desplazado a otra zona?), por tanto no se puede deshacer. error_nosharedpoint: Las vías $1 y $2 ya no tienen ningún punto en común, por tanto no se pueden dividir. - error_noway: La vía $1 no se puede encontrar (igual usted se ha desplazado a otra zona?), por tanto no se puede deshacer.. + error_noway: La vía $1 no se puede encontrar (igual usted se ha desplazado a otra zona?), por tanto no se puede deshacer. error_readfailed: Lo sentimos mucho. El servidor de OpenStreetMap no ha respondido a la solicitud de información. \n\n¿Deseas intentarlo de nuevo? existingrelation: Añadir a una relación existente findrelation: Buscar una relación que contenga - gpxpleasewait: Por favor espere un poco mientras el track GPX se procesa. + gpxpleasewait: Por favor, espere mientras la traza GPX se procesa. heading_drawing: Dibujando heading_introduction: Introducción heading_pois: Primeros pasos @@ -132,6 +132,7 @@ es: option_layer_ooc_7th: "Histórico de UK: 7th" option_layer_ooc_npe: "Histórico de UK: NPE" option_layer_ooc_scotland: "UK histórico: Escocia" + option_layer_os_streetview: "UK: OS StreetView" option_layer_streets_haiti: "Haiti: nombres de calles" option_layer_tip: Elija el fondo a mostrar option_limitways: Lanza una advertencia al cargar gran cantidad de datos. @@ -194,7 +195,8 @@ es: save: Guardar tags_backtolist: Volver a la lista tags_descriptions: Descripciones de '$1' - tags_findatag: Encontrar una etiqueta + tags_findatag: Busca una etiqueta + tags_findtag: Busca una etiqueta tags_matching: Etiquetas populares que coinciden con '$1' tags_typesearchterm: "Introduzca una palabra para buscar:" tip_addrelation: Añadir a una relación @@ -207,9 +209,9 @@ es: tip_noundo: Nada que deshacer tip_options: Opciones (elegir el fondo del mapa) tip_photo: Cargar fotos - tip_presettype: Seleccionar que tipo de parámetros (tags) preestablecidos se ofrecen en el menú. + tip_presettype: Seleccionar que tipo de etiquetas preestablecidas se ofrecen en el menú. tip_repeattag: Repetir las etiquetas de la vía seleccionada previamente (R) - tip_revertversion: Elige la versión a la que volver. + tip_revertversion: Elija la fecha a la que volver. tip_selectrelation: Añadir a la ruta seleccionada tip_splitway: Divide la vía en el punto seleccionado (X) tip_tidy: Simplificar puntos en una vía (T) diff --git a/config/potlatch/locales/fr.yml b/config/potlatch/locales/fr.yml index 3e91d868d..26a11cf24 100644 --- a/config/potlatch/locales/fr.yml +++ b/config/potlatch/locales/fr.yml @@ -136,6 +136,7 @@ fr: option_layer_ooc_7th: Historique UK 7e option_layer_ooc_npe: Historique UK NPE option_layer_ooc_scotland: "Royaume-Uni historique : Ecosse" + option_layer_os_streetview: "RU : OS StreetView" option_layer_streets_haiti: "Haïti: noms des rues" option_layer_tip: Choisir l'arrière-plan à afficher option_limitways: Avertir lors du chargement d'une grande quantité de données @@ -189,7 +190,7 @@ fr: prompt_microblog: Poster sur $1 ($2 restant) prompt_revertversion: "Revenir à une version sauvegardée antérieure :" prompt_savechanges: Sauvegarder les modifications - prompt_taggedpoints: Certains points de ce chemin sont associés à des mots-clé ou dans des relations. Voulez-vous vraiment les supprimer ? + prompt_taggedpoints: Certains points de ce chemin sont associés à des balises ou dans des relations. Voulez-vous vraiment les supprimer ? prompt_track: Conversion d'une trace GPS en chemin (verrouillé) pour l'édition prompt_unlock: Cliquer pour déverrouiller prompt_welcome: Bienvenue sur OpenStreetMap ! @@ -198,8 +199,9 @@ fr: save: Sauvegarder tags_backtolist: Retour à la liste tags_descriptions: Descriptions de « $1 » - tags_findatag: Rechercher un mot-clé - tags_matching: Mots-clés populaires correspondant à « $1 » + tags_findatag: Rechercher une balise + tags_findtag: Rechercher balise + tags_matching: Balises populaires correspondant à « $1 » tags_typesearchterm: "Tapez le mot à rechercher :" tip_addrelation: Ajouter à une relation tip_addtag: Ajouter une nouvelle balise diff --git a/config/potlatch/locales/gl.yml b/config/potlatch/locales/gl.yml index 61e7a3c4f..3f4d7e75e 100644 --- a/config/potlatch/locales/gl.yml +++ b/config/potlatch/locales/gl.yml @@ -129,6 +129,7 @@ gl: option_layer_ooc_7th: "Historial UK: 7º" option_layer_ooc_npe: "Historial UK: NPE" option_layer_ooc_scotland: "RU histórico: Escocia" + option_layer_os_streetview: "RU: OS StreetView" option_layer_streets_haiti: "Haití: nomes de rúas" option_layer_tip: Escolla o fondo a mostrar option_limitways: Avisar ao cargar moitos datos @@ -174,7 +175,7 @@ gl: prompt_closechangeset: Pechar o conxunto de cambios $1 prompt_createparallel: Crear un camiño paralelo prompt_editlive: Editar en directo - prompt_editsave: Editar con garda + prompt_editsave: Editar con gardado prompt_helpavailable: É un usuario novo? Olle o canto inferior esquerdo para obter axuda. prompt_launch: Lanzar un URL externo prompt_live: No modo en directo, cada elemento que cambie gardarase instantaneamente na base de datos do OpenStreetMap; non se recomenda para os principiantes. Está seguro de querer usar este modo? @@ -192,6 +193,7 @@ gl: tags_backtolist: Voltar á lista tags_descriptions: Descricións de "$1" tags_findatag: Atopar unha etiqueta + tags_findtag: Atopar unha etiqueta tags_matching: Etiquetas populares que coinciden con "$1" tags_typesearchterm: "Escriba unha palabra a procurar:" tip_addrelation: Engadir a unha relación diff --git a/config/potlatch/locales/hsb.yml b/config/potlatch/locales/hsb.yml index bdd1eb192..7b5abd14b 100644 --- a/config/potlatch/locales/hsb.yml +++ b/config/potlatch/locales/hsb.yml @@ -130,6 +130,7 @@ hsb: option_layer_ooc_7th: "Wulka Britaniska historisce: 7th" option_layer_ooc_npe: "Wulka Britaniska historisce: NPE" option_layer_ooc_scotland: "Zjednoćene kralestwo historisce: Å otiska" + option_layer_os_streetview: "Zjednoćene kralestwo: OS StreetView" option_layer_streets_haiti: "Haiti: dróhowe mjena" option_layer_tip: Pozadk wubrać option_limitways: Warnować, hdyž so jara wjele datow začituja @@ -193,6 +194,7 @@ hsb: tags_backtolist: Wróćo k lisćinje tags_descriptions: Wopisanja wot '$1' tags_findatag: Atribut namakać + tags_findtag: Atribut namakać tags_matching: Popularne atributy za '$1' tags_typesearchterm: "Zapodaj pytanski wuraz:" tip_addrelation: Relaciji přidać diff --git a/config/potlatch/locales/hu.yml b/config/potlatch/locales/hu.yml index 6b5508c13..0748666bd 100644 --- a/config/potlatch/locales/hu.yml +++ b/config/potlatch/locales/hu.yml @@ -132,6 +132,7 @@ hu: option_layer_ooc_7th: "UK történelmi: 7th" option_layer_ooc_npe: "UK történelmi: NPE" option_layer_ooc_scotland: "UK történelmi: Skócia" + option_layer_os_streetview: "UK: OS utcanézet" option_layer_streets_haiti: "Haiti: utcanevek" option_layer_tip: Válaszd ki a megjelenítendő hátteret option_limitways: Figyelmeztetés sok adat betöltése előtt @@ -195,6 +196,7 @@ hu: tags_backtolist: Vissza a listához tags_descriptions: "'$1' leírása" tags_findatag: Címke keresése + tags_findtag: Címke keresése tags_matching: "Népszerű címkék, amelyek illeszkednek a következőre: '$1'" tags_typesearchterm: "Írj be egy szót a kereséshez:" tip_addrelation: Hozzáadás kapcsolathoz diff --git a/config/potlatch/locales/ia.yml b/config/potlatch/locales/ia.yml index b36f52c5d..b5383f1fc 100644 --- a/config/potlatch/locales/ia.yml +++ b/config/potlatch/locales/ia.yml @@ -130,6 +130,7 @@ ia: option_layer_ooc_7th: "RU historic: 7me" option_layer_ooc_npe: "RU historic: NPE" option_layer_ooc_scotland: "RU historic: Scotia" + option_layer_os_streetview: "Regno Unite: OS StreetView" option_layer_streets_haiti: "Haiti: nomines de stratas" option_layer_tip: Selige le fundo a monstrar option_limitways: Advertir si multe datos debe esser cargate @@ -183,7 +184,7 @@ ia: prompt_microblog: Publicar in $1 (il remane $2) prompt_revertversion: "Reverter a un version previemente salveguardate:" prompt_savechanges: Salveguardar modificationes - prompt_taggedpoints: Alcunes del punctos in iste via es etiquettate. Realmente deler? + prompt_taggedpoints: Alcunes del punctos in iste via ha etiquettas o relationes. Realmente deler? prompt_track: Converter tracia GPS in vias prompt_unlock: Clicca pro disblocar prompt_welcome: Benvenite a OpenStreetMap! @@ -193,6 +194,7 @@ ia: tags_backtolist: Retornar al lista tags_descriptions: Descriptiones de '$1' tags_findatag: Cercar un etiquetta + tags_findtag: Cercar etiquetta tags_matching: Etiquettas popular correspondente a '$1' tags_typesearchterm: "Entra un parola a cercar:" tip_addrelation: Adder a un relation diff --git a/config/potlatch/locales/it.yml b/config/potlatch/locales/it.yml index e951b8cd5..36224e77b 100644 --- a/config/potlatch/locales/it.yml +++ b/config/potlatch/locales/it.yml @@ -108,7 +108,7 @@ it: login_pwd: "Password:" login_retry: Il tuo login non è stato riconosciuto. Riprova login_title: Impossibile fare il login - login_uid: Nome utente + login_uid: "Nome utente:" mail: Posta more: Ancora newchangeset: "Si prega di riprovare: Potlatch aprirà un nuovo gruppo di modifiche." @@ -221,4 +221,4 @@ it: uploading_way_name: Caricamento percorso $1, $2 warning: Attenzione! way: Percorso - "yes": Si + "yes": Sì diff --git a/config/potlatch/locales/mk.yml b/config/potlatch/locales/mk.yml index 75998b12f..f13289af2 100644 --- a/config/potlatch/locales/mk.yml +++ b/config/potlatch/locales/mk.yml @@ -130,6 +130,7 @@ mk: option_layer_ooc_7th: "Историски британски: 7-ми" option_layer_ooc_npe: "Историски британски: NPE" option_layer_ooc_scotland: "Историски британски: Шкотска" + option_layer_os_streetview: "Британија: OS StreetView" option_layer_streets_haiti: "Хаити: имиња на улици" option_layer_tip: Изберете позадина option_limitways: Предупреди ме кога се вчитува голем број на податоци @@ -193,6 +194,7 @@ mk: tags_backtolist: Назад кон листата tags_descriptions: Описи на „$1“ tags_findatag: Најди ознака + tags_findtag: Најди ознака tags_matching: Популарни ознаки соодветни на „$1“ tags_typesearchterm: "Внесете збор за пребарување:" tip_addrelation: Додај во релација diff --git a/config/potlatch/locales/nl.yml b/config/potlatch/locales/nl.yml index 41a51028a..263c121b0 100644 --- a/config/potlatch/locales/nl.yml +++ b/config/potlatch/locales/nl.yml @@ -131,6 +131,7 @@ nl: option_layer_ooc_7th: "VK historisch: 7e" option_layer_ooc_npe: "VK historisch: NPE" option_layer_ooc_scotland: "VK historisch: Schotland" + option_layer_os_streetview: "VK: OS StreetView" option_layer_streets_haiti: "Haïti: straatnamen" option_layer_tip: De achtergrondweergave kiezen option_limitways: Waarschuwen als er veel gegevens geladen moeten worden @@ -194,6 +195,7 @@ nl: tags_backtolist: Terug naar de lijst tags_descriptions: Beschrijvingen van "$1" tags_findatag: Label zoeken + tags_findtag: Label zoeken tags_matching: Populaire labels voor "$1" tags_typesearchterm: "Zoeken naar:" tip_addrelation: Voeg toe aan een relatie diff --git a/config/potlatch/locales/no.yml b/config/potlatch/locales/no.yml index cc2e4f393..50afb5a68 100644 --- a/config/potlatch/locales/no.yml +++ b/config/potlatch/locales/no.yml @@ -1,6 +1,7 @@ # Messages for Norwegian (bokmÃ¥l)‬ (‪Norsk (bokmÃ¥l)‬) # Exported from translatewiki.net # Export driver: syck +# Author: Hansfn # Author: Laaknor # Author: Nghtwlkr "no": @@ -20,6 +21,7 @@ action_pointtags: sette merker pÃ¥ et punkt action_poitags: sette merker pÃ¥ et POI (interessant punkt) action_reverseway: snur en linje bak fram + action_revertway: endrer retning pÃ¥ en vei action_splitway: dele en linje action_waytags: sette merker pÃ¥ en linje advanced: Avansert @@ -32,10 +34,13 @@ advanced_tooltip: Avanserte redigeringshandlinger advanced_undelete: Ikke slett advice_bendy: For bøyd til Ã¥ rette ut (SHIFT for Ã¥ tvinge) + advice_conflict: Tjenerkonflikt - du mÃ¥ kanskje prøve Ã¥ lagre igjen advice_deletingpoi: Sletter POI (Z for Ã¥ angre) advice_deletingway: Sletter vei (Z for Ã¥ angre) advice_microblogged: Oppdaterte din $1 status advice_nocommonpoint: Linjene deler ikke et felles punkt + advice_revertingpoi: Tilbakestiller til sist lagrede POI (Z for Ã¥ angre) \ + advice_revertingway: Tilbakestiller til sist lagrede vei (Z for Ã¥ angre) \ advice_tagconflict: Ulike merker, vennligst sjekk (Z for Ã¥ angre) advice_toolong: For lang til Ã¥ lÃ¥se opp, linjen mÃ¥ deles i flere biter advice_uploadempty: Ingenting Ã¥ laste opp @@ -73,6 +78,7 @@ heading_introduction: Introduksjon heading_pois: Komme igang heading_quickref: Rask referanse + heading_surveying: Kartlegging heading_tagging: Merking heading_troubleshooting: Feilsøking help: Hjelp @@ -108,18 +114,25 @@ "no": Nei nobackground: Ingen bakgrunn norelations: Ingen relasjoner i omrÃ¥det pÃ¥ skjermen + offset_broadcanal: Bred tauningssti langs kanal + offset_choose: Endre forskyving (m) offset_motorway: Motorvei (D3) offset_narrowcanal: Smal tauningssti langs kanal ok: Ok openchangeset: Åpner endringssett option_custompointers: Bruk penn- og hÃ¥ndpekere + option_external: "Starte eksternt:" option_fadebackground: Fjern bakgrunn option_layer_cycle_map: OSM - sykkelkart option_layer_maplint: OSM - Maplint (feil) option_layer_nearmap: "Australia: NearMap" option_layer_ooc_25k: "Historiske UK kart: 1:25k" + option_layer_ooc_7th: "UK historisk: 7de" + option_layer_ooc_npe: "UK historisk: NPE" + option_layer_ooc_scotland: "UK historisk: Skottland" option_layer_streets_haiti: "Haiti: gatenavn" option_layer_tip: Velg bakgrunnen som skal vises + option_limitways: Advar nÃ¥r mye data lastes option_microblog_id: "Mikroblogg brukernavn:" option_microblog_pwd: "Mikroblog passord:" option_noname: Uthev veier uten navn @@ -134,6 +147,7 @@ preset_icon_bus_stop: Busstopp preset_icon_cafe: Kafé preset_icon_cinema: Kino + preset_icon_convenience: Nærbutikk preset_icon_disaster: Bygning i Haiti preset_icon_fast_food: Fastfood preset_icon_ferry_terminal: Ferge @@ -152,6 +166,7 @@ preset_icon_school: Skole preset_icon_station: Jernbanestasjon preset_icon_supermarket: Supermarked + preset_icon_taxi: Drosjeholdeplass preset_icon_telephone: Telefon preset_icon_theatre: Teater preset_tip: Velg fra en meny med forhÃ¥ndsdefinerte merkelapper som beskriver $1 @@ -168,7 +183,7 @@ prompt_microblog: Post til $1 ($2 igjen) prompt_revertversion: "Tilbakestill til tidligere lagret versjon:" prompt_savechanges: Lagre endringer - prompt_taggedpoints: Noen av punktene pÃ¥ denne linjen har merker. Vil du virkelig slette? + prompt_taggedpoints: Noen av punktene pÃ¥ denne veien har merker eller er med i relasjoner. Vil du virkelig slette? prompt_track: Overfør dine GPS-sporinger til (lÃ¥ste) linjer for redigering. prompt_unlock: Klikk for Ã¥ lÃ¥se opp prompt_welcome: Velkommen til OpenStreetMap! @@ -177,6 +192,10 @@ save: Lagre tags_backtolist: Tilbake til liste tags_descriptions: Beskrivelser av '$1' + tags_findatag: Finn et merke + tags_findtag: Finn merkelapp + tags_matching: Populære merker som passer '$1̈́' + tags_typesearchterm: "Skriv inn et ord Ã¥ lete etter:" tip_addrelation: Legg til i en relasjon tip_addtag: Legg til merke tip_alert: Det oppstod en feil, trykk for detaljer diff --git a/config/potlatch/locales/pms.yml b/config/potlatch/locales/pms.yml new file mode 100644 index 000000000..6c8431948 --- /dev/null +++ b/config/potlatch/locales/pms.yml @@ -0,0 +1,6 @@ +# Messages for Piedmontese (Piemontèis) +# Exported from translatewiki.net +# Export driver: syck +# Author: Borichèt +pms: + help_html: "\nBin ëvnù a Potlatch\nPotlatch a l'é l'editor ch'a l'é belfé dovresse për OpenStreetMap. A disegna stra, përcors, confin e a ampòrta da sò GPS arserche, imàgin da satélit o veje carte.\n\nSte pàgine d'agiut-sì a lo compagnëran për le fonsion ëd base ëd Potlatch, e a-j diran andoa trové pi d'anformassion. Ch'a sgnaca an sj'antestassion sì-sota për ancaminé.\n\nQuand ch'a l'ha finì, ch'a sgnaca mach an qualsëssìa àutr pòst an sla pàgina.\n\n\n\nElement ùtij da savèj\nCh'a còpia pa da dj'àutre carte!\n\nS'a sern 'Modifiché an direta', qualsëssìa cangiament ch'a farà a andrà ant la base ëd dàit man a man ch'a-j fa - visadì, dun-a. S'as sent pa sigur, ch'a serna 'Modifiché con salvatagi', e a andran andrinta mach quand ch'a sgnacrà 'Salvé'.\n\nQualsëssìa modìfica ch'a fa ëd sòlit a sarà mostrà an sla carta apress n'ora o doe (chèiche modìfiche a peulo pijé na sman-a). Pa tut a l'é mostrà an sla carta - a smijrìa tròp ancasinà. Ma dagià che ij dat d'OpenStreetMap a son a sorgiss lìbera, d'àutre përson-e a son lìbere ëd fé ëd carte ch'a mostro d'aspet diferent - com OpenCycleMap o Midnight Commander.\n\nCh'as visa che a l'é sia na bela carta (parèj ch'a disegna le curve për da bin) sia un diagrama (parèj ch'as sigura che le stra as ancontro a le crosiere).\n\nI l'oma parlà ëd copié nen da d'àutre carte?\n\n\nTreuva pi anformassion\nManual Potlatch\nLista ëd pòsta\nCiaciarada an linia (agiut dal viv)\npiassa ëd discussion an sla Ragnà\nComunità wiki\nCòdes sorgiss ëd Potlatch\n\n\n\nPër ancaminé\nAdess ch'a l'ha Potlatch duvert, ch'a sgnaca 'Modifiché con salvatagi' për ancaminé.\n\nParèj a l'é pront a disegné na carta. La manera pi bel fé për ancaminé a l'é ëd buté chèich pont d'anteresse an sla carta - o \"POI\". Costi-sì a peulo esse piòle, gesie, stassion feroviarie ... tut lòn ch'a veul.\n\nTiré e lassé andé\nPër fela motobin bel fé, a s-ciairërà na selession dij POI pi comun, pròpi sota soa carta. Për butene un an sla carta a basta tirelo da lì fin ant ël pòst giust an sla carta. E ch'as sagrin-a pa s'a lo buta nen ant ël pòst giust al prim colp: a peul tirelo fin ch'a l'é giust. Ch'a nòta che ël POI a l'é evidensià an giàun për fé vëdde ch'a l'é selessionà.\n\nNa vira ch'a l'ha fàit lòn, a vorërà deje un nòm a soa piòla (o gesia, o stassion). A vëdrà che na cita tabela a l'é comparìa sota. Un-a dj'intrade a dirà \"nòm\" seguì da \"(nòm ëd la sòrt ambelessì)\". Ch'a lo fasa - ch'a sgnaca col test, e ch'a anserissa ël nòm.\n\nCh'a sgnaca da n'àutra part an sla carta për desselessioné sò POI, e ël cit panel ëd tùit ij color a comparirà torna.\n\nBel fé, neh? Ch'a sgnaca 'Salva' (boton a drita) quand ch'a l'ha fàit.\nTramudesse\nPër tramudesse a n'àutra part ëd la carta, ch'a la tira mach an na zòna veuida. Potlatch a cariërà an automàtich ij dat neuv (ch'a varda an àut an sla drita).\n\nI l'avìo dije \"seurte sensa salvé', ma a peule ëdcò sgnaché 'Modifiché an linia'. S'a fa sòn, soe modìfiche a andran ant la base ëd dàit diretament, parèj a-i é pa ël boton 'Salvé'. Sòn a va bin për modìfiche leste e ciambree ëd cartografìa.\n\nPass apress\nContent ëd tut sòn? Bòn. Ch'a sgnaca 'Rilevament' sì-dzora për savèj com vnì un ver cartògraf!\n\nRilevament con un GPS\nL'ideja daré OpenStreetMap a l'é 'd fé na carta sensa ij drit ëd còpia restritiv ëd j'àutre carte. Sòn a veul dì ch'a peule pa copié da gnun-e part: a deuv andé e rilevé le stra chiel-midem. Për boneur, a l'é amusant! La manera pi belfé ëd fé sòn a l'é con un dispositiv GPS portàbil. Ch'a treuva na zòna ch'a l'é pa ancor cartografà, peui ch'a marcia o ch'a vada an biciclëtta për le stra con sò GPS anvisch. Ch'a pija nòta dij nòm ëd le stra, e ëd qualsëssìa àutra ròba anteressanta (piòle? gesie?), man man ch'a va.\n\nQuand ch'a va a ca, sò GPS a contnirà na registrassion ëd le marche ëd tùit ij pòst andoa a l'é stàit. A peul antlora carié sossì su OpenStreetMap.\n\nLa sòrt ëd GPS pi bon a l'é col ch'a registra la marca soens (minca second o doi) e ch'a l'ha na gran memòria. Un mucc dij nòsti cartògraf a deuvro Garmin portàtij o cite unità Bluetooth. A-i son dle recension detajà ëd GPS dzora nòsta wiki.\n\nCarié soa marcadura\nAdess, a deuv pijé soe marcadure da sò GPS. A peul esse che sò GPS a l'abia chèich programa, o a peul esse ch'a-j lassa copié j'archivi via USB. Dësnò, ch'a preuva GPSBabel. An tùit ij cas, l'archivi a deuv esse an formà GPX.\n\nPeui, ch'a deuvra l'etichëtta 'Marche GPS' për carié soa marcadura su OpenStreetMap. Ma sòn a l'é mach la prima part - a aparirà pa ancó an sla carta. A deuv disegné e deje un nòm a le stra chiel-midem, an dovrand la marcadura com guida.\nDovré toa trassadura\nCh'a treuva soa marcadura ant la lista dle 'Marche GPS', e ch'a sgnaca 'modifiché' pròpi lì da banda. Potlatch a partirà con sta marca carià, pi tùit j'àutri pont. A l'é pront për disegné!\n\nA peul ëdcò sgnaché sto boton-sì për vëdde le marcadure GPS ëd tuti (ma pa ij pont dël përcors) per la zòna corenta. Ch'agnaca Majùscole për vëdde mach soe marcadure.\nDovré fòto da satélit\nS'a l'ha pa un GPS, ch'as sagrin-a pa. An chèiche sità, i l'oma ëd fòto da satélit andoa a peul marché ansima, gentilment dàite da Yahoo! (mersì!). Ch'a seurta e ch'a pija nòta dij nòm ëd le stra, peui ch'a torna andré e ch'a-j dissegna.\n\nS'a s-ciàira nen la galarìa da satélit, ch'a sgnaca ël boton ëd j'opsion e ch'as sigura che 'Yahoo!' a sia selessionà. S'a-j vëd anco' pa, a podrìa esse nen disponìbil për soa sità, o ch'a deva torné andré un pòch con l'agrandiment.\n\nSu sto midem boton ëd j'opsion a trovrà chèich àutre sèrnie com na carta sensa drit ëd còpia dël Regn Unì, e OpenTopMap për jë Stat Unì. Coste a son tute selessionà përchè i podoma dovreje - ch'a còpia pa da gnun-e àutre carte o fòto aéree. (La lej dij drit d'autor a fa s-giaj.)\n\nDle vire le figure da satélit a son un pòch ëspostà da doa le stra a son. S'a treuva sòn, ch'a sgnaca lë Spassi e ch'a tira lë sfond fin ch'a l'é alineà. Le marcadure GPS a son sempe pi sicure che le fòto da satélit.\n\nDisegné dij përcors\nPër disegné na stra (o 'përcors') partend da në spassi bianch an sla carta, ch'a sgnaca mach ambelessì; peui su minca pont an sla stra. Quand ch'a l'ha finì, ch'a sgnaca doe vire o ch'a sgnaca su A cap - peui ch'a sgnaca da n'àutra part për desselessioné la stra.\n\nPër disegné na stra an partend da n'àutra stra, ch'a sgnaca an sla stra për selessionela; ij sò pontin a compariran an ross. Ch'a ten-a sgnacà Majùscole e ch'a sgnaca un dij pontin për fé parte na neuva stra da col pont. (S'a-i é gnun pontin ross a la crosiera, ch'a ten-a sgnacà Majùscule e cha selession-a andoa a na veul un!)\n\nSgnaché 'Salvé' (an bass a drita) quand ch'a l'ha finì. Ch'a salva soens, dle vire ël servent a l'èissa dij problema.\n\nCh'a së speta pa che soe modìfiche a sio mostrà dlongh an sla carta prinsipal. Normalment a-i va n'ora o doe, dle vire fin a na sman-a.\nFé dle crosiere\nA l'é pròpi amportant, quand che doe stra a s'ancrosio, che a condivido un pontin (o 'neu'). Ij pianificator d'itinerari a deuvro sòn për savèj andoa giré.\n\nPotlatch a soagna sòn, fin che a fa atension a sgnaché pròpe an sla stra ch'a l'é an camin ch'a ancrosia. Ch'a varda ij segn d'agiut: le crosiere a ven-o bleuve, ël pontador a cangia, e quand ch'a l'ha fàit, la crosiera a l'ha na sotliniadura nèira.\nTramudé e scancelé\nSòn a travaja pròpi com un a së speta. Për scancelé na crosiera, ch'a la selession-a e ch'a sgnaca Scancelé. Për scancelé na stra antrega, ch'a sgnaca Majùscole-Scancelé.\n\nPër sposté cheicòs, ch'a lo tira mach. (A dovrà gnaché e tnì sgnacà për un pòch antramentre che a tira na stra, parèj a lo farà pa për eror.)\nDisegn pi avansà\nSe doe part ëd na stra a l'han dij nòm diferent, a dovrà dividla. Ch'a sgnaca an sla stra; peui ch'a sgnaca a la mira andoa a dovrìa esse dividùa, e ch'a sgnaca le tisòire. (A peul fonde le stra an sgnacand con Contròl, o ël tast Apple dzora al Mac, ma ch'a fonda pa doe stra con nòm o sòrt diferent.)\n\nLe rotonde a son pròpi malfé disegné giuste. Ch'as sagrin-a pa - Potlatch a peul giutelo. Ch'a disegna mach ël riond, ch'as sicura che as sara su chiel midem a la fin, peui ch'a sgnaca sta plancia-sì për \"polidelo\". (A peul ëdcò dovré son për drissé le stra.)\nLeu d'anteresse\nLa prima còsa ch'a l'ha amparà a l'é com tiré-e-tramudé un leu d'anteresse. A peul ëdcò creene un sgnacand doe vire an sla carta: a-i ven në riond verd. Ma com a sa s'a l'é na piòla, na gesia o d'àutr? Ch'a sgnaca 'Etichëtté', sì-sota, për savèjlo!\n\nChe sòrt dë stra é-lo?\nNa vira ch'a l'has disegnà na stra, a dovrìa dì lòn ch'a l'é. A l'é na stra prinsipal, un senté o un rì? Col ch'a l'é sò nòm? J'é-lo dle régole speciaj (per esempi \"gnun-e bici\")?\n\nAn OpenStreetMap, a memorise sòn an dovrand 'etichëtte'. N'etichëtta a l'ha doe part, e a peule avèjne vàire ch'a veul. Për esempi, a peul gionté strà | camionàbil për dì ch'a l'é na stra prinsipal; stra | residensial për na stra an quartié residensial; o stra | senté për un senté. Se le bici a son vietà, a peul ëdcò gionté bici | nò. Peui për memorisé sò nòm, ch'a gionta name | Stra dël mërcà.\n\nJ'etichëtte an Potlatch as vëddo al fond ëd lë scren - ch'a sgnaca na stra esistenta, e a vëddrà che etichëtta ch'a l'ha. Ch'a sgnaca ël segn '+' (sota a drita) për gionté n'etichëtta neuva. Ël 'x' su minca etichëtta a la scancela.\n\nA peul etichëtté la strà antrega; pont an sla stra (a peulo esse na pòrta o un semàfor); e pont d'anteresse.\nDovré etichëtte preampostà\nPër ancaminé, Potlatch a l'ha dj'ampostassion già pronte contenente j'etichëtte pi popolar.\n\nCh'a selession-a na stra, peui ch'a sgnaca an sij sìmboj fin a che a na treuva un adat. Peui, ch'a serna l'opsion pi aproprià da la lista.\n\nSòn a ampinirà j'etichëtte. Cheidun-e a saran lassà bianche parsialment parèj a podrà anserì andrinta (për esempi) ël nòm ëd la stra e ël nùmer.\nStra a sens ùnich\nA peul vorèj gionté n'etichëtta com stra a sens ùnich | é! - ma com a dis la diression? A-i é na flecia an bass a snista ch'a mosta la diression ëd la stra, da l'inissi a la fin. Ch'a la sgnaca për virela.\nSerne le tichëtte pròprie\nËd sigura a l'é pa limità mach ai preampostà. An dovrand ël boton '+', a peul dovré tute j'etichëtte.\n\nA peul vardé che etichëtte j'àutre përson-e a deuvro su OSMdoc, e a-i é na longa lista d'etichëtte popolar su nòsta wiki ciamà Caraterìstiche dle carte. Ma costi a son mach ëd sugeriment, pa ëd régole. A l'é lìber d'anventé soe etichëtte o ëd pijeje da j'àutri.\n\nDagià che ij dat d'OpenStreetMap a son dovrà për fé tante carte diferente, minca carta a mostrërà (o 'rendrà') soa sèrnia d'etichëtte.\nRelassion\nChèiche vire j'etichëtte a son pa basta, e a deuv 'fonde' doe o pi stra. A peul esse ch'as peussa pa giré da na stra a n'àutra, o che 20 ëstra ansema a faso na stra marcà për le bici. A peul fé son con na possibilità avansà ciamà 'relassion'. Për savèjne ëd pi an sla wiki.\n\nScancelé j'eror\nCost-sì a l'é ël boton d'anulament (a peul ëdcò sgnaché Z) - a anulerà l'ùltima còsa ch'a l'ha fàit.\n\nA peul 'torné' a l'ùltima version salvà ëd na stra o d'un leu. Ch'a la selession-a, peui ch'a sgnaca sò ID (ël nùmer an bass a snista) - o ch'a sgnaca H (për stòria), a vëddrà na lista ëd tut lòn ch'a l'ha modificà, e quand. Ch'a serna cola andoa torné, e ch'a sgnaca buté andaré.\n\nS'a l'ha për asar scancelà na stra e salvà, ch'a sgnaca U (për 'disdëscancelé'). Tute le stra scancelà a saran mostrà. Ch'a serna cola ch'a veul; ch'a la dësblòca an sgnacand ël tast ross; e ch'a salva com al sòlit.\n\nPens-lo che cheidun d'àutri a l'abia fàit n'eror? Ch'a-j manda un mëssagi an pòsta eletrònica. Ch'a deuvra l'opsion dë stòria (H) për selessioné sò nòm, peui ch'a sgnaca 'Pòsta'.\n\nCh'a deuvra l'Ispetor (ant ël menu 'Avansà') për anformassion ùtij an sla stra o leu corent.\nFAQ\n Com i vëddo ij mé pont?\nIt pont as mostro mach s'a sgnaca 'modifiché' an sël nòm dla marcadura an 'Marcadure GPS'. L'archivi a deuv avèj sia pontin che registr dla marcadura andrinta - ël servent a arfuda tut lòn con mach ij pontin.\n\nPi FAQ për Potlatch e OpenStreetMap.\n\n\n\nTravajé pi an pressa\nPi a l'ha angrandì, pi dat Potlatch a deuv carié. Ch'a arduva prima dë sgnaché 'Modifiché'.\n\nCh'a gava 'Dovré piuma e pontador a man' (ant la fnestra dj'opsion) për n'andi pi àut.\n\nS'ël servent a gira pian, Ch'a torna andré. Ch'a contròla la wiki për problema conossù. Chèiche vire, com la Dumìnica 'd sèira, a son sempe carià.\n\nCh'a-j disa a Potlatch ëd memorisé ij sò ansema favorì d'etichëtte. Ch'a selession-a na stra o pont con cole etichëtte, peui ch'a sgnaca Ctrl, majùscole e un nùmer da 1 a 9. Peui, për apliché torna st'etichëtte-lì, ch'a sgnaca mach Majùscole e col nùmer. (A saran arcordà minca vira a deuvra Potlatch ansima a cost ordinator).\n\nCh'a converta soa marcadura GPS ant na stra trovandla ant la lista ëd 'Marcadure GPS', sgnacand 'Modìfiché' lì-da banda, peui selessionand la casela 'convertì'. A sarà blocà (ross) parèj a sarà pa salvà. Ch'a la modìfica prima, peui ch'a sgnaca ël tast ross për dësbloché quand a l'é pront a salvé.\n\nCò sgnaché\nTiré la carta për spostesse.\nSgnaché doe vire për creé un POI neuv.\nSgnaché na vira për ancaminé na stra neuva.\nSgnaché e tiré na stra o un POI për tramudelo.\nQuand as disegna na stra\nSgnaché doe vire o sgnaché Intra për finì ëd disegné.\nSgnaché n'àutra manera ëd fé na crosiera.\nMajùscole-sgnaché la fin ëd n'àutra stra për mës-cé.\nQuand na stra a l'é selessionà\nSgnaché un pontin për selessionelo.\nMajùscole-sgnaché an sla stra për anserì un pontin neuv.\nMajùscole-sgnaché un pontin për ancaminé na stra neuva da lì.\nContròl-sgnaché n'àutra stra për mës-cé.\n\nScurse da tastadura.\nB Gionté n'etichëtta sorgiss ëd lë sfond\nC Saré\nG Smon-e le marcadure GPS\nH Smon-e la stòria\nI Mostré l'ispetor\nJ Gionté dij pontin a dle stra ch'a s'ancrosio\nK Bloché/dësbloché la selession corenta\nL Mostré latitùdin/longitùdin corente\nM Massimisé la fnestra ëd modìfica\nP Creé na stra paralela\nR aRpete j'etichëtte\nS Salvé (sensa modifiché dal viv)\nT Rangé an na linia/un sercc\nU Torné andré (smon-e le stra scancelà)\nX Tajé na stra an doi\nZ Torné andré\n- Gavé ij pontin mach da sta stra-sì\n+ Gionté n'etichëtta neuva\n/ Selessioné n'àutra stra ch'a condivid sto pontin-sì\nScancelé Scancelé pontin\n (+Majùscole) Scancela na stra antrega\nA cap Finì ëd disegné na linia\nSpassi Pijé e tiré lë sfond\nEsc Fé pa sta modìfica-sì\n; carié torna dal servent\n0 Gavé tute j'etichëtte\n1-9 Selessioné j'etichëtte preampostà\n (+Majùscole) Selessioné j'etichëtte memorisà\n (+S/Ctrl) Memorisé j'etichëtte\n§ o ' Sicl tra le partìe dj'etichëtte\n\n" diff --git a/config/potlatch/locales/pt-BR.yml b/config/potlatch/locales/pt-BR.yml index 26fec4b42..974e0e2da 100644 --- a/config/potlatch/locales/pt-BR.yml +++ b/config/potlatch/locales/pt-BR.yml @@ -141,6 +141,7 @@ pt-BR: option_layer_ooc_7th: "UK histórico: 7th" option_layer_ooc_npe: "UK histórico: NPE" option_layer_ooc_scotland: "UK histórico: Escócia" + option_layer_os_streetview: "UK: OS StreetView" option_layer_osmarender: OSM - Osmarender option_layer_streets_haiti: "Haiti: nomes de ruas" option_layer_tip: Escolha o fundo a mostrar @@ -206,6 +207,7 @@ pt-BR: tags_backtolist: Voltar à lista tags_descriptions: Descrições de '$1' tags_findatag: Encontrar uma etiqueta + tags_findtag: Etiquetas tags_matching: Etiquetas populares que coincidem com '$1' tags_typesearchterm: "Digite uma palavra para buscar:" tip_addrelation: Adicionar a uma relação diff --git a/config/potlatch/locales/ro.yml b/config/potlatch/locales/ro.yml index 0963958fc..971475342 100644 --- a/config/potlatch/locales/ro.yml +++ b/config/potlatch/locales/ro.yml @@ -1,6 +1,7 @@ # Messages for Romanian (Română) # Exported from translatewiki.net # Export driver: syck +# Author: McDutchie ro: action_createpoi: creare punct de interes (POI) action_movepoi: Miscă POI diff --git a/config/potlatch/locales/ru.yml b/config/potlatch/locales/ru.yml index 4ad220ce2..f041f125b 100644 --- a/config/potlatch/locales/ru.yml +++ b/config/potlatch/locales/ru.yml @@ -139,6 +139,7 @@ ru: option_layer_ooc_7th: "UK historic: 7th" option_layer_ooc_npe: "UK historic: NPE" option_layer_ooc_scotland: "UK historic: Scotland" + option_layer_os_streetview: "UK: OS StreetView" option_layer_osmarender: OSM - Osmarender option_layer_streets_haiti: "Гаити: названия улиц" option_layer_tip: Выберите фон @@ -204,6 +205,7 @@ ru: tags_backtolist: Вернуться к списку tags_descriptions: Описание «$1» tags_findatag: Найти тег + tags_findtag: Найти тег tags_matching: Популярные теги, соответствующие «$1» tags_typesearchterm: "Введите слово для поиска:" tip_addrelation: Добавить отношение diff --git a/config/potlatch/locales/sk.yml b/config/potlatch/locales/sk.yml index b3f9e5bb2..5e14f24b9 100644 --- a/config/potlatch/locales/sk.yml +++ b/config/potlatch/locales/sk.yml @@ -33,6 +33,7 @@ sk: advanced_tooltip: Pokročilá úprava advanced_undelete: ObnoviÅ¥ advice_bendy: PríliÅ¡ krivá pre narovnanie (SHIFT pre vynútenie) + advice_conflict: Konflikt servera - možno budete musieÅ¥ skúsiÅ¥ uložiÅ¥ znovu advice_deletingpoi: Mazanie POI (Z pre obnovenie) advice_deletingway: Vymazávanie cesty (Z pre krok späť) advice_nocommonpoint: Cesty neobsahujú spoločný bod @@ -46,9 +47,11 @@ sk: advice_waydragged: Posunutá cesta (Z pre krok späť) cancel: ZruÅ¡iÅ¥ closechangeset: Zatvorenie zmenového súboru + conflict_download: Stiahnite si svoju verziu conflict_overwrite: PrepísaÅ¥ ich verziu conflict_poichanged: Počas vaÅ¡ej editácie, niekto iný zmenil bod $1$2. conflict_relchanged: Počas vaÅ¡ej editácie, niekto iný zmenil reláciu $1$2. + conflict_visitpoi: Kliknite na 'OK' pre zobrazenie bodu. conflict_visitway: Kliknutie 'Ok' ukáže cestu. conflict_waychanged: Počas vaÅ¡ej úpravy, niekto iný zmenil cestu $1$2. createrelation: VytvoriÅ¥ novú reláciu @@ -106,9 +109,11 @@ sk: "no": Nie nobackground: Žiadne pozadie norelations: V aktuálnej oblasti nie sú relácie + offset_broadcanal: Navigácia Å¡irokým prielivom offset_choose: ZvoliÅ¥ vyrovnanie (m) offset_dual: Dvojprúdová cesta (D2) offset_motorway: Dialnica (D3) + offset_narrowcanal: Navigácia úzkym prielivom ok: Ok openchangeset: Otvorenie súboru zmien option_custompointers: Použitie ukazovateľa pera a ruky @@ -118,6 +123,9 @@ sk: option_layer_maplint: OSM - Maplint (chyby) option_layer_nearmap: "Austrália: NearMap" option_layer_ooc_25k: "UK historický: 1:25k" + option_layer_ooc_7th: "UK historické: 7." + option_layer_ooc_npe: "UK historické: NPE" + option_layer_ooc_scotland: "UK historické: Å kótsko" option_layer_tip: Vyberte si pozadie pre zobrazenie option_limitways: UpozorniÅ¥ pri načítaní priveľa dát option_noname: ZvýrazniÅ¥ nepomenované komunikácie @@ -160,15 +168,19 @@ sk: prompt_editsave: UkladaÅ¥ naraz prompt_helpavailable: Nový užívateľ? Nápovedu nájdete vpravo dole. prompt_launch: OtvoriÅ¥ externú URL + prompt_live: V režime Live, každý prvok čo zmeníte bude uložený v databáze OpenStreetMap okamžite - nie je doporučené pre začiatočníkov. Ste si istí? prompt_revertversion: "VrátiÅ¥ sa k skorÅ¡ie uloženej verzii:" prompt_savechanges: UložiÅ¥ zmeny - prompt_taggedpoints: Niektoré body tejto cesty majú tagy. Naozaj vymazaÅ¥? + prompt_taggedpoints: Niektoré body tejto cesty majú tagy, alebo sú v reláciách. Naozaj vymazaÅ¥? prompt_track: ZmeniÅ¥ GPS stopy na cesty prompt_unlock: Klik pre odomknutie prompt_welcome: Vitajte na OpenStreetMap ! retry: OpakovaÅ¥ revert: VrátiÅ¥ sa save: UložiÅ¥ zmeny + tags_backtolist: Späť na zoznam + tags_findatag: Nájdite značku + tags_typesearchterm: "Zadajte slovo pre hľadanie:" tip_addrelation: PridaÅ¥ do relácie tip_addtag: PridaÅ¥ nový tag tip_alert: Nastala chyba - kliknite pre podrobnosti diff --git a/config/potlatch/locales/sr-EC.yml b/config/potlatch/locales/sr-EC.yml index cfab83162..ebefd5384 100644 --- a/config/potlatch/locales/sr-EC.yml +++ b/config/potlatch/locales/sr-EC.yml @@ -61,6 +61,7 @@ sr-EC: editinglive: Уређивање наживо editingoffline: Уређивање ван мреже error_anonymous: Не можете контактирати анонимног мапера. + error_microblog_long: "Слање на $1 није успело:\nХТТП код: $2\nПорука о грешки: $3\n$1 грешка: $4" error_nosharedpoint: Путање $1 и $2 више не деле заједничку тачку, тако да не могу да вратим раздвајање. existingrelation: Додај постојећем односу findrelation: Нађи однос који садржи @@ -98,6 +99,7 @@ sr-EC: mail: Пошта more: Још newchangeset: "Молим пробајте поново: Потлач ће почети са новим скупом измена." + "no": Не nobackground: Без позадине norelations: Нема односа̂ у тренутној области offset_broadcanal: Широки пут вучења лађа @@ -114,6 +116,7 @@ sr-EC: option_layer_ooc_7th: "УК историјски: 7." option_layer_ooc_npe: "УК историјски: NPE" option_layer_tip: Изаберите позадину која ће се приказивати + option_microblog_pwd: "Лозинка за микроблог:" option_noname: Истакни безимене путеве option_photo: "KML слике:" option_thinareas: Користи тање линије за области @@ -126,6 +129,7 @@ sr-EC: preset_icon_cafe: Кафе preset_icon_cinema: Биоскоп preset_icon_convenience: Потрепштине + preset_icon_disaster: Зграда на Хаитију preset_icon_fast_food: Брза храна preset_icon_ferry_terminal: Скела preset_icon_fire_station: Ватрогасна станица @@ -187,5 +191,6 @@ sr-EC: uploading_relation: Шаљем однос $1 uploading_relation_name: Шаљем однос $1, $2 uploading_way: Шаљем путању $1 - uploading_way_name: Шаље путању $1, $2 + uploading_way_name: Шаљем путању $1, $2 way: Путања + "yes": Да diff --git a/config/potlatch/locales/sv.yml b/config/potlatch/locales/sv.yml index 1456eef3a..0aeecd704 100644 --- a/config/potlatch/locales/sv.yml +++ b/config/potlatch/locales/sv.yml @@ -1,6 +1,7 @@ # Messages for Swedish (Svenska) # Exported from translatewiki.net # Export driver: syck +# Author: Ainali # Author: Cohan # Author: Grillo # Author: Jas @@ -99,6 +100,7 @@ sv: inspector_uploading: (laddar upp) inspector_way_connects_to: Förbunden med $1 vägar inspector_way_nodes: $1 noder + loading: Laddar... login_pwd: "Lösenord:" login_retry: Okänt användarnamn. Vänligen försök igen. login_title: Kunde inte logga in @@ -180,6 +182,7 @@ sv: retry: Försök igen revert: Återställ save: Spara + tags_backtolist: Tillbaka till listan tip_addrelation: Lägg till i en relation tip_addtag: Lägg till en ny etikett (tag) tip_alert: Ett fel har inträffat - klicka för detaljer diff --git a/config/potlatch/locales/uk.yml b/config/potlatch/locales/uk.yml index 9b144bd3d..77351131f 100644 --- a/config/potlatch/locales/uk.yml +++ b/config/potlatch/locales/uk.yml @@ -1,6 +1,7 @@ # Messages for Ukrainian (Українська) # Exported from translatewiki.net # Export driver: syck +# Author: AS # Author: Andygol # Author: Prima klasy4na uk: @@ -131,6 +132,7 @@ uk: option_layer_ooc_25k: "В.БРИТАНІЯ істор.: 1:25k" option_layer_ooc_7th: "В.БРИТАНІЯ істор.: 1:7000" option_layer_ooc_npe: "В.БРИТАНІЯ істор.: NPE" + option_layer_ooc_scotland: "Великобританія, історичний: Шотландія" option_layer_osmarender: OSM — Osmarender option_layer_streets_haiti: "Гаїті: назви вулиць" option_layer_tip: Оберіть фон @@ -195,6 +197,7 @@ uk: tags_backtolist: Повернутись до списку tags_descriptions: Опис '$1' tags_findatag: Шукати теґ + tags_matching: Популярні теґи, що підходять "$1" tags_typesearchterm: "Введіть слово для пошуку:" tip_addrelation: Додати до зв’язку tip_addtag: Додати теґ diff --git a/config/potlatch/locales/vi.yml b/config/potlatch/locales/vi.yml index 6dd1a3fec..3d48cca13 100644 --- a/config/potlatch/locales/vi.yml +++ b/config/potlatch/locales/vi.yml @@ -132,6 +132,7 @@ vi: option_layer_ooc_7th: "Anh lịch sá»­: lần in 7" option_layer_ooc_npe: "Anh lịch sá»­: NPE" option_layer_ooc_scotland: "Anh lịch sá»­: Scotland" + option_layer_os_streetview: "Anh: OS StreetView" option_layer_osmarender: OSM – Osmarender option_layer_streets_haiti: "Haiti: tên đường sá" option_layer_tip: Chọn nền để hiển thị @@ -186,7 +187,7 @@ vi: prompt_microblog: Đăng lên $1 (còn $2 chữ) prompt_revertversion: "Lùi lại phiên bản cÅ© hÆ¡n:" prompt_savechanges: LÆ°u các thay đổ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ó? + prompt_taggedpoints: Một số điểm trên lối này đã được gắn thẻ hoặc thuộc về quan hệ. Bạn có chắc muốn xóa nó? prompt_track: Chuyển đổi tuyến đường GPS thành các lối (khóa) để sá»­a đổi. prompt_unlock: Nhấn chuột để mở khóa prompt_welcome: Hoan nghênh bạn đã đến OpenStreetMap! @@ -196,6 +197,7 @@ vi: tags_backtolist: Quay lại danh sách tags_descriptions: Miêu tả “$1” tags_findatag: Tìm kiếm thẻ + tags_findtag: Tìm kiếm thẻ tags_matching: Các thẻ phổ biến trùng hợp với “$1” tags_typesearchterm: "Nhập từ để tìm kiếm:" tip_addrelation: Xếp vào quan hệ diff --git a/lib/quad_tile/.gitignore b/lib/quad_tile/.gitignore new file mode 100644 index 000000000..978f071e9 --- /dev/null +++ b/lib/quad_tile/.gitignore @@ -0,0 +1,3 @@ +Makefile +quad_tile.o +quad_tile_so.so diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 000000000..6296b76d2 --- /dev/null +++ b/public/.gitignore @@ -0,0 +1,2 @@ +stats +user diff --git a/public/javascripts/map.js b/public/javascripts/map.js index ab15198ab..fd45d9304 100644 --- a/public/javascripts/map.js +++ b/public/javascripts/map.js @@ -32,18 +32,21 @@ function createMap(divName, options) { }); var mapnik = new OpenLayers.Layer.OSM.Mapnik(i18n("javascripts.map.base.mapnik"), { + keyid: "mapnik", displayOutsideMaxExtent: true, wrapDateLine: true }); map.addLayer(mapnik); var osmarender = new OpenLayers.Layer.OSM.Osmarender(i18n("javascripts.map.base.osmarender"), { + keyid: "osmarender", displayOutsideMaxExtent: true, wrapDateLine: true }); map.addLayer(osmarender); var cyclemap = new OpenLayers.Layer.OSM.CycleMap(i18n("javascripts.map.base.cycle_map"), { + keyid: "cyclemap", displayOutsideMaxExtent: true, wrapDateLine: true }); diff --git a/public/lib/OpenLayers.js b/public/lib/OpenLayers.js deleted file mode 100644 index 57afe8530..000000000 --- a/public/lib/OpenLayers.js +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -//// -/// This blob sucks in all the files in uncompressed form for ease of use -/// - -OpenLayers = new Object(); - -OpenLayers._scriptName = ( - typeof(_OPENLAYERS_SFL_) == "undefined" ? "lib/OpenLayers.js" - : "OpenLayers.js" ); - -OpenLayers._getScriptLocation = function () { - var scriptLocation = ""; - var SCRIPT_NAME = OpenLayers._scriptName; - - var scripts = document.getElementsByTagName('script'); - for (var i = 0; i < scripts.length; i++) { - var src = scripts[i].getAttribute('src'); - if (src) { - var index = src.lastIndexOf(SCRIPT_NAME); - // is it found, at the end of the URL? - if ((index > -1) && (index + SCRIPT_NAME.length == src.length)) { - scriptLocation = src.slice(0, -SCRIPT_NAME.length); - break; - } - } - } - return scriptLocation; -} - -/* - `_OPENLAYERS_SFL_` is a flag indicating this file is being included - in a Single File Library build of the OpenLayers Library. - - When we are *not* part of a SFL build we dynamically include the - OpenLayers library code. - - When we *are* part of a SFL build we do not dynamically include the - OpenLayers library code as it will be appended at the end of this file. -*/ -if (typeof(_OPENLAYERS_SFL_) == "undefined") { - /* - The original code appeared to use a try/catch block - to avoid polluting the global namespace, - we now use a anonymous function to achieve the same result. - */ - (function() { - var jsfiles=new Array( - "Prototype.js", - "Rico/Corner.js", - "Rico/Color.js", - "OpenLayers/Util.js", - "OpenLayers/Ajax.js", - "OpenLayers/Events.js", - "OpenLayers/Map.js", - "OpenLayers/Layer.js", - "OpenLayers/Icon.js", - "OpenLayers/Marker.js", - "OpenLayers/Popup.js", - "OpenLayers/Tile.js", - "OpenLayers/Feature.js", - "OpenLayers/Feature/WFS.js", - "OpenLayers/Tile/Image.js", - "OpenLayers/Tile/WFS.js", -// "OpenLayers/Layer/Google.js", -// "OpenLayers/Layer/VirtualEarth.js", -// "OpenLayers/Layer/Yahoo.js", - "OpenLayers/Layer/Grid.js", - "OpenLayers/Layer/KaMap.js", - "OpenLayers/Layer/Markers.js", - "OpenLayers/Layer/Text.js", - "OpenLayers/Layer/WMS.js", - "OpenLayers/Layer/WFS.js", - "OpenLayers/Layer/WMS/Untiled.js", - "OpenLayers/Popup/Anchored.js", - "OpenLayers/Popup/AnchoredBubble.js", - "OpenLayers/Control.js", - "OpenLayers/Control/MouseDefaults.js", - "OpenLayers/Control/MouseToolbar.js", - "OpenLayers/Control/KeyboardDefaults.js", - "OpenLayers/Control/PanZoom.js", - "OpenLayers/Control/PanZoomBar.js", - "OpenLayers/Control/LayerSwitcher.js" - ); // etc. - - var allScriptTags = ""; - var host = OpenLayers._getScriptLocation() + "lib/"; - - // check to see if prototype.js was already loaded - // if so, skip the first dynamic include - // - var start=1; - try { x = Prototype; } - catch (e) { start=0; } - - for (var i = start; i < jsfiles.length; i++) { - var currentScriptTag = ""; - allScriptTags += currentScriptTag; - } - document.write(allScriptTags); - })(); -} diff --git a/public/lib/OpenLayers/Ajax.js b/public/lib/OpenLayers/Ajax.js deleted file mode 100644 index 5c92c1aa7..000000000 --- a/public/lib/OpenLayers/Ajax.js +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ - -OpenLayers.ProxyHost = "/proxy/?url="; -//OpenLayers.ProxyHost = "examples/proxy.cgi?url="; - -/** -* Ajax reader for OpenLayers -* -*@uri url to do remote XML http get -*@param 'get' format params (x=y&a=b...) -*@who object to handle callbacks for this request -*@complete the function to be called on success -*@failure the function to be called on failure -* -* example usage from a caller: -* -* caps: function(request) { -* -blah- -* }, -* -* OpenLayers.loadURL(url,params,this,caps); -* -* Notice the above example does not provide an error handler; a default empty -* handler is provided which merely logs the error if a failure handler is not -* supplied -* -*/ - - -/** -* @param {} request -*/ -OpenLayers.nullHandler = function(request) { - alert("Unhandled request return " + request.statusText); -}; - -/** Background load a document -* -* @param {String} uri URI of source doc -* @param {String} params Params on get (doesnt seem to work) -* @param {Object} caller object which gets callbacks -* @param {Function} onComplete callback for success -* @param {Function} onFailure callback for failure -* -* Both callbacks optional (though silly) -*/ -OpenLayers.loadURL = function(uri, params, caller, - onComplete, onFailure) { - - if (OpenLayers.ProxyHost && uri.startsWith("http")) { - uri = OpenLayers.ProxyHost + escape(uri); - - if (!params) { - params=""; - } - params += "&cachehack=" + new Date().getTime(); - } - - var success = (onComplete) ? onComplete.bind(caller) - : OpenLayers.nullHandler; - - var failure = (onFailure) ? onFailure.bind(caller) - : OpenLayers.nullHandler; - - // from prototype.js - new Ajax.Request(uri, - { method: 'get', - parameters: params, - onComplete: success, - onFailure: failure - } - ); -}; - -/** Parse XML into a doc structure -* @param {String} text -* -* @returns Parsed Ajax Response ?? -* @type ? -*/ -OpenLayers.parseXMLString = function(text) { - - //MS sucks, if the server is bad it dies - var index = text.indexOf('<'); - if (index > 0) { - text = text.substring(index); - } - - var ajaxResponse = Try.these( - function() { - var xmldom = new ActiveXObject('Microsoft.XMLDOM'); - xmldom.loadXML(text); - return xmldom; - }, - function() { - return new DOMParser().parseFromString(text, 'text/xml'); - }, - function() { - var req = new XMLHttpRequest(); - req.open("GET", "data:" + "text/xml" + - ";charset=utf-8," + encodeURIComponent(text), false); - if (req.overrideMimeType) { - req.overrideMimeType("text/xml"); - } - req.send(null); - return req.responseXML; - } - ); - - return ajaxResponse; -}; diff --git a/public/lib/OpenLayers/Control.js b/public/lib/OpenLayers/Control.js deleted file mode 100644 index 117fb26c4..000000000 --- a/public/lib/OpenLayers/Control.js +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** -* @class -*/ -OpenLayers.Control = Class.create(); -OpenLayers.Control.prototype = { - - /** this gets set in the addControl() function in OpenLayers.Map - * @type OpenLayers.Map */ - map: null, - - /** @type DOMElement */ - div: null, - - /** @type OpenLayers.Pixel */ - position: null, - - /** - * @constructor - */ - initialize: function (options) { - Object.extend(this, options); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @returns A reference to the DIV DOMElement containing the control - * @type DOMElement - */ - draw: function (px) { - if (this.div == null) { - this.div = OpenLayers.Util.createDiv(); - } - if (px != null) { - this.position = px.copyOf(); - } - this.moveTo(this.position); - return this.div; - }, - - /** - * @param {OpenLayers.Pixel} px - */ - moveTo: function (px) { - if ((px != null) && (this.div != null)) { - this.div.style.left = px.x + "px"; - this.div.style.top = px.x + "px"; - } - }, - - /** - */ - destroy: function () { - // eliminate circular references - this.map = null; - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Control" -}; diff --git a/public/lib/OpenLayers/Control/KeyboardDefaults.js b/public/lib/OpenLayers/Control/KeyboardDefaults.js deleted file mode 100644 index e93ad969d..000000000 --- a/public/lib/OpenLayers/Control/KeyboardDefaults.js +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Control.js - -/** - * @class - */ -OpenLayers.Control.KeyboardDefaults = Class.create(); -OpenLayers.Control.KeyboardDefaults.prototype = - Object.extend( new OpenLayers.Control(), { - - /** @type int */ - slideFactor: 50, - - /** - * @constructor - */ - initialize: function() { - OpenLayers.Control.prototype.initialize.apply(this, arguments); - }, - - /** - * - */ - draw: function() { - Event.observe(document, - 'keypress', - this.defaultKeyDown.bind(this)); - }, - - /** - * @param {Event} evt - */ - defaultKeyDown: function (evt) { - - var slide = this.map.getResolution() * this.slideFactor; - var center = this.map.getCenter(); - - var newCenter = center.copyOf(); - - switch(evt.keyCode) { - case Event.KEY_LEFT: - newCenter = newCenter.add( -slide, 0); - break; - case Event.KEY_RIGHT: - newCenter = newCenter.add( slide, 0); - break; - case Event.KEY_UP: - newCenter = newCenter.add( 0, slide); - break; - case Event.KEY_DOWN: - newCenter = newCenter.add( 0, -slide); - break; - } - - if (!newCenter.equals(center)) { - this.map.setCenter(newCenter); - Event.stop(evt); - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Control.KeyboardDefaults" -}); diff --git a/public/lib/OpenLayers/Control/LayerSwitcher.js b/public/lib/OpenLayers/Control/LayerSwitcher.js deleted file mode 100644 index 032763978..000000000 --- a/public/lib/OpenLayers/Control/LayerSwitcher.js +++ /dev/null @@ -1,224 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Control.js -/** -* @class -*/ -OpenLayers.Control.LayerSwitcher = Class.create(); - -/** color used in the UI to show a layer is active/displayed -* -* @final -* @type String -*/ -OpenLayers.Control.LayerSwitcher.ACTIVE_COLOR = "darkblue"; - -/** color used in the UI to show a layer is deactivated/hidden -* -* @final -* @type String -*/ -OpenLayers.Control.LayerSwitcher.NONACTIVE_COLOR = "lightblue"; - - -OpenLayers.Control.LayerSwitcher.prototype = - Object.extend( new OpenLayers.Control(), { - - /** @type String */ - activeColor: "", - - /** @type String */ - nonActiveColor: "", - - /** @type String */ - mode: "checkbox", - - /** - * @constructor - */ - initialize: function(options) { - this.activeColor = OpenLayers.Control.LayerSwitcher.ACTIVE_COLOR; - this.nonActiveColor = OpenLayers.Control.LayerSwitcher.NONACTIVE_COLOR; - this.backdrops = []; - OpenLayers.Control.prototype.initialize.apply(this, arguments); - }, - - /** - * @returns A reference to the DIV DOMElement containing the switcher tabs - * @type DOMElement - */ - draw: function() { - // initialize our internal div - OpenLayers.Control.prototype.draw.apply(this); - - this.div.style.position = "absolute"; - this.div.style.top = "10px"; - this.div.style.right = "0px"; - this.div.style.left = ""; - this.div.style.fontFamily = "sans-serif"; - this.div.style.color = "white"; - this.div.style.fontWeight = "bold"; - this.div.style.marginTop = "3px"; - this.div.style.marginLeft = "3px"; - this.div.style.marginBottom = "3px"; - this.div.style.fontSize="smaller"; - this.div.style.width = "10em"; - - this.map.events.register("addlayer", this, this.redraw); - this.map.events.register("removelayer", this, this.redraw); - return this.redraw(); - }, - - /** - * @returns A reference to the DIV DOMElement containing the switcher tabs - * @type DOMElement - */ - redraw: function() { - - //clear out previous incarnation of LayerSwitcher tabs - this.div.innerHTML = ""; - var visible = false; - for( var i = 0; i < this.map.layers.length; i++) { - if (visible && this.mode == "radio") { - this.map.layers[i].setVisibility(false); - } else { - visible = this.map.layers[i].getVisibility(); - } - this.addTab(this.map.layers[i]); - } - - return this.div; - }, - - /** - * @param {event} evt - */ - singleClick: function(evt) { - var div = Event.element(evt); - - // See comment about OL #57 fix below. - // If the click occurred on the corner spans we need - // to make sure we act on the actual label tab instead. - div = div.labelElement || div; - - var layer = div.layer; - if (this.mode == "radio") { - for(var i=0; i < this.backdrops.length; i++) { - this.setTabActivation(this.backdrops[i], false); - this.backdrops[i].layer.setVisibility(false); - } - this.setTabActivation(div, true); - layer.setVisibility(true); - } else { - var visible = layer.getVisibility(); - - this.setTabActivation(div, !visible); - layer.setVisibility(!visible); - } - Event.stop(evt); - }, - - /** - * @private - * - * @param {event} evt - */ - ignoreEvent: function(evt) { - Event.stop(evt); - return false; - }, - - /** - * @private - * - * @param {OpenLayers.Layer} layer - */ - addTab: function(layer) { - - // Outer DIV - for Rico Corners - // - var backdropLabelOuter = document.createElement('div'); - backdropLabelOuter.id = "LayerSwitcher_" + layer.name + "_Tab"; - backdropLabelOuter.style.marginTop = "4px"; - backdropLabelOuter.style.marginBottom = "4px"; - - this._setEventHandlers(backdropLabelOuter); - - // Inner Label - for Rico Corners - // - var backdropLabel = document.createElement('p'); - backdropLabel.innerHTML = layer.name; - backdropLabel.style.marginTop = "0px"; - backdropLabel.style.marginBottom = "0px"; - backdropLabel.style.paddingLeft = "10px"; - backdropLabel.style.paddingRight = "10px"; - - // add reference to layer onto the div for use in event handlers - backdropLabel.layer = layer; - - // set event handlers - this._setEventHandlers(backdropLabel); - - // add label to div - backdropLabelOuter.appendChild(backdropLabel); - - this.backdrops.append(backdropLabel); - - // add div to main LayerSwitcher Div - this.div.appendChild(backdropLabelOuter); - - Rico.Corner.round(backdropLabelOuter, {corners: "tl bl", - bgColor: "transparent", - color: "white", - blend: false}); - - // extend the event handlers to operate on the - // rounded corners as well. (Fixes OL #57.) - var spanElements=backdropLabel.parentNode.getElementsByTagName("span"); - - for (var currIdx = 0; currIdx < spanElements.length; currIdx++) { - this._setEventHandlers(spanElements[currIdx], backdropLabel); - } - - this.setTabActivation(backdropLabel, layer.getVisibility()); - }, - - /* - @private - - @param {DOMElement} div - @param {Boolean} activate - */ - _setEventHandlers : function(element, labelDiv) { - - // We only want to respond to a mousedown event. - element.onclick = this.singleClick.bindAsEventListener(this); - element.ondblclick = this.singleClick.bindAsEventListener(this); - element.onmouseup = this.ignoreEvent.bindAsEventListener(this); - element.onmousedown = this.ignoreEvent.bindAsEventListener(this); - - // If we are operating on a corner span we need to store a - // reference to the actual tab. (See comment about OL #57 fix above.) - if (labelDiv) { - element.labelElement = labelDiv; - } - }, - - /** - * @private - * - * @param {DOMElement} div - * @param {Boolean} activate - */ - setTabActivation:function(div, activate) { - var color = (activate) ? this.activeColor : this.nonActiveColor; - Rico.Corner.changeColor(div, color); - }, - - - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Control.LayerSwitcher" -}); - diff --git a/public/lib/OpenLayers/Control/MouseDefaults.js b/public/lib/OpenLayers/Control/MouseDefaults.js deleted file mode 100644 index 3ae7edd5d..000000000 --- a/public/lib/OpenLayers/Control/MouseDefaults.js +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Control.js -OpenLayers.Control.MouseDefaults = Class.create(); -OpenLayers.Control.MouseDefaults.prototype = - Object.extend( new OpenLayers.Control(), { - - performedDrag: false, - - initialize: function() { - OpenLayers.Control.prototype.initialize.apply(this, arguments); - }, - - draw: function() { - this.map.events.register( "click", this, this.defaultClick ); - this.map.events.register( "dblclick", this, this.defaultDblClick ); - this.map.events.register( "mousedown", this, this.defaultMouseDown ); - this.map.events.register( "mouseup", this, this.defaultMouseUp ); - this.map.events.register( "mousemove", this, this.defaultMouseMove ); - this.map.events.register( "mouseout", this, this.defaultMouseOut ); - }, - - defaultClick: function (evt) { - if (!Event.isLeftClick(evt)) return; - var notAfterDrag = !this.performedDrag; - this.performedDrag = false; - return notAfterDrag; - }, - - /** - * @param {Event} evt - */ - defaultDblClick: function (evt) { - var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); - this.map.setCenter(newCenter, this.map.zoom + 1); - }, - - /** - * @param {Event} evt - */ - defaultMouseDown: function (evt) { - if (!Event.isLeftClick(evt)) return; - this.mouseDragStart = evt.xy.copyOf(); - this.performedDrag = false; - if (evt.shiftKey) { - this.map.div.style.cursor = "crosshair"; - this.zoomBox = OpenLayers.Util.createDiv('zoomBox', - this.mouseDragStart, - null, - null, - "absolute", - "2px solid red"); - this.zoomBox.style.backgroundColor = "white"; - this.zoomBox.style.filter = "alpha(opacity=50)"; // IE - this.zoomBox.style.opacity = "0.50"; - this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; - this.map.viewPortDiv.appendChild(this.zoomBox); - } - document.onselectstart=function() { return false; } - Event.stop(evt); - }, - - /** - * @param {Event} evt - */ - defaultMouseMove: function (evt) { - if (this.mouseDragStart != null) { - if (this.zoomBox) { - var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x); - var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y); - this.zoomBox.style.width = deltaX+"px"; - this.zoomBox.style.height = deltaY+"px"; - if (evt.xy.x < this.mouseDragStart.x) { - this.zoomBox.style.left = evt.xy.x+"px"; - } - if (evt.xy.y < this.mouseDragStart.y) { - this.zoomBox.style.top = evt.xy.y+"px"; - } - } else { - var deltaX = this.mouseDragStart.x - evt.xy.x; - var deltaY = this.mouseDragStart.y - evt.xy.y; - var size = this.map.getSize(); - var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX, - size.h / 2 + deltaY); - var newCenter = this.map.getLonLatFromViewPortPx( newXY ); - this.map.setCenter(newCenter, null, true); - this.mouseDragStart = evt.xy.copyOf(); - this.map.div.style.cursor = "move"; - } - this.performedDrag = true; - } - }, - - /** - * @param {Event} evt - */ - defaultMouseUp: function (evt) { - if (!Event.isLeftClick(evt)) return; - if (this.zoomBox) { - var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); - var end = this.map.getLonLatFromViewPortPx( evt.xy ); - var top = Math.max(start.lat, end.lat); - var bottom = Math.min(start.lat, end.lat); - var left = Math.min(start.lon, end.lon); - var right = Math.max(start.lon, end.lon); - var bounds = new OpenLayers.Bounds(left, bottom, right, top); - var zoom = this.map.getZoomForExtent(bounds); - this.map.setCenter(new OpenLayers.LonLat( - (start.lon + end.lon) / 2, - (start.lat + end.lat) / 2 - ), zoom); - this.map.viewPortDiv.removeChild(document.getElementById("zoomBox")); - this.zoomBox = null; - } else { - this.map.setCenter(this.map.center); - } - document.onselectstart=null; - this.mouseDragStart = null; - this.map.div.style.cursor = "default"; - }, - - defaultMouseOut: function (evt) { - if (this.mouseDragStart != null - && OpenLayers.Util.mouseLeft(evt, this.map.div)) { - this.defaultMouseUp(evt); - } - } -}); - diff --git a/public/lib/OpenLayers/Control/MouseToolbar.js b/public/lib/OpenLayers/Control/MouseToolbar.js deleted file mode 100644 index 28b78d606..000000000 --- a/public/lib/OpenLayers/Control/MouseToolbar.js +++ /dev/null @@ -1,262 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Control.js -OpenLayers.Control.MouseToolbar = Class.create(); -OpenLayers.Control.MouseToolbar.X = 6; -OpenLayers.Control.MouseToolbar.Y = 300; -OpenLayers.Control.MouseToolbar.prototype = - Object.extend( new OpenLayers.Control(), { - - mode: null, - - buttons: null, - - direction: "vertical", - - initialize: function(position, direction) { - OpenLayers.Control.prototype.initialize.apply(this, arguments); - this.position = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X, - OpenLayers.Control.MouseToolbar.Y); - if (position) { - this.position = position; - } - if (direction) { - this.direction = direction; - } - this.measureDivs = []; - }, - - draw: function() { - OpenLayers.Control.prototype.draw.apply(this, arguments); - this.buttons = new Object(); - this.map.events.register( "dblclick", this, this.defaultDblClick ); - this.map.events.register( "mousedown", this, this.defaultMouseDown ); - this.map.events.register( "mouseup", this, this.defaultMouseUp ); - this.map.events.register( "mousemove", this, this.defaultMouseMove ); - this.map.events.register( "mouseout", this, this.defaultMouseOut ); - var sz = new OpenLayers.Size(28,28); - var centered = this.position; - this._addButton("zoombox", "drag-rectangle-off.png", "drag-rectangle-on.png", centered, sz, "Shift->Drag to zoom to area"); - centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0)); - this._addButton("pan", "panning-hand-off.png", "panning-hand-on.png", centered, sz, "Drag the map to pan."); - centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0)); - this._addButton("measure", "measuring-stick-off.png", "measuring-stick-on.png", centered, sz, "Hold alt when clicking to show distance between selected points"); - this.switchModeTo("pan"); - this.map.events.register("zoomend", this, function() { this.switchModeTo("pan"); }); - return this.div; - - }, - - _addButton:function(id, img, activeImg, xy, sz, title) { - var imgLocation = OpenLayers.Util.getImagesLocation() + img; - var activeImgLocation = OpenLayers.Util.getImagesLocation() + activeImg; - // var btn = new ol.AlphaImage("_"+id, imgLocation, xy, sz); - var btn = OpenLayers.Util.createAlphaImageDiv( - "OpenLayers_Control_MouseToolbar_" + id, - xy, sz, imgLocation, "absolute"); - - //we want to add the outer div - this.div.appendChild(btn); - btn.imgLocation = imgLocation; - btn.activeImgLocation = activeImgLocation; - - btn.events = new OpenLayers.Events(this, btn); - btn.events.register("mousedown", this, this.buttonClick); - btn.events.register("mouseup", this, Event.stop); - btn.action = id; - btn.title = title; - btn.alt = title; - btn.map = this.map; - - //we want to remember/reference the outer div - this.buttons[id] = btn; - return btn; - }, - - buttonClick: function(evt) { - if (!Event.isLeftClick(evt)) return; - this.switchModeTo(evt.div.action); - Event.stop(evt); - }, - - /** - * @param {Event} evt - */ - defaultDblClick: function (evt) { - this.switchModeTo("pan"); - var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); - this.map.setCenter(newCenter, this.map.zoom + 2); - }, - - /** - * @param {Event} evt - */ - defaultMouseDown: function (evt) { - if (!Event.isLeftClick(evt)) return; - this.mouseDragStart = evt.xy.copyOf(); - if (evt.shiftKey && this.mode !="zoombox") { - this.switchModeTo("zoombox"); - } else if (evt.altKey && this.mode !="measure") { - this.switchModeTo("measure"); - } else if (!this.mode) { - this.switchModeTo("pan"); - } - - switch (this.mode) { - case "zoombox": - this.map.div.style.cursor = "crosshair"; - this.zoomBox = OpenLayers.Util.createDiv('zoomBox', - this.mouseDragStart, - null, - null, - "absolute", - "2px solid red"); - this.zoomBox.style.backgroundColor = "white"; - this.zoomBox.style.filter = "alpha(opacity=50)"; // IE - this.zoomBox.style.opacity = "0.50"; - this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; - this.map.viewPortDiv.appendChild(this.zoomBox); - break; - case "measure": - var distance = ""; - if (this.measureStart) { - measureEnd = this.map.getLonLatFromViewPortPx(this.mouseDragStart); - distance = OpenLayers.Util.distVincenty(this.measureStart, measureEnd); - distance = Math.round(distance * 100) / 100; - distance = distance + "km"; - this.measureStartBox = this.measureBox; - } - this.measureStart = this.map.getLonLatFromViewPortPx(this.mouseDragStart);; - this.measureBox = OpenLayers.Util.createDiv(null, - this.mouseDragStart.add( - -2-parseInt(this.map.layerContainerDiv.style.left), - -2-parseInt(this.map.layerContainerDiv.style.top)), - null, - null, - "absolute"); - this.measureBox.style.width="4px"; - this.measureBox.style.height="4px"; - this.measureBox.style.backgroundColor="red"; - this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; - this.map.layerContainerDiv.appendChild(this.measureBox); - if (distance) { - this.measureBoxDistance = OpenLayers.Util.createDiv(null, - this.mouseDragStart.add( - -2-parseInt(this.map.layerContainerDiv.style.left), - 2-parseInt(this.map.layerContainerDiv.style.top)), - null, - null, - "absolute"); - - this.measureBoxDistance.innerHTML = distance; - this.measureBoxDistance.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; - this.map.layerContainerDiv.appendChild(this.measureBoxDistance); - this.measureDivs.append(this.measureBoxDistance); - } - this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; - this.map.layerContainerDiv.appendChild(this.measureBox); - this.measureDivs.append(this.measureBox); - break; - default: - this.map.div.style.cursor = "move"; - break; - } - document.onselectstart = function() { return false; } - Event.stop(evt); - }, - - switchModeTo: function(mode) { - if (mode != this.mode) { - if (this.mode) { - OpenLayers.Util.modifyAlphaImageDiv(this.buttons[this.mode], null, null, null, this.buttons[this.mode].imgLocation); - } - if (this.mode == "measure" && mode != "measure") { - for(var i = 0; i < this.measureDivs.length; i++) { - if (this.measureDivs[i]) { - this.map.layerContainerDiv.removeChild(this.measureDivs[i]); - } - } - this.measureDivs = []; - this.measureStart = null; - } - this.mode = mode; - OpenLayers.Util.modifyAlphaImageDiv(this.buttons[mode], null, null, null, this.buttons[mode].activeImgLocation); - } - }, - - leaveMode: function() { - this.switchModeTo("pan"); - }, - - /** - * @param {Event} evt - */ - defaultMouseMove: function (evt) { - if (this.mouseDragStart != null) { - switch (this.mode) { - case "zoombox": - var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x); - var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y); - this.zoomBox.style.width = deltaX+"px"; - this.zoomBox.style.height = deltaY+"px"; - if (evt.xy.x < this.mouseDragStart.x) { - this.zoomBox.style.left = evt.xy.x+"px"; - } - if (evt.xy.y < this.mouseDragStart.y) { - this.zoomBox.style.top = evt.xy.y+"px"; - } - break; - default: - var deltaX = this.mouseDragStart.x - evt.xy.x; - var deltaY = this.mouseDragStart.y - evt.xy.y; - var size = this.map.getSize(); - var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX, - size.h / 2 + deltaY); - var newCenter = this.map.getLonLatFromViewPortPx( newXY ); - this.map.setCenter(newCenter, null, true); - this.mouseDragStart = evt.xy.copyOf(); - } - } - }, - - /** - * @param {Event} evt - */ - defaultMouseUp: function (evt) { - if (!Event.isLeftClick(evt)) return; - switch (this.mode) { - case "zoombox": - var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); - var end = this.map.getLonLatFromViewPortPx( evt.xy ); - var top = Math.max(start.lat, end.lat); - var bottom = Math.min(start.lat, end.lat); - var left = Math.min(start.lon, end.lon); - var right = Math.max(start.lon, end.lon); - var bounds = new OpenLayers.Bounds(left, bottom, right, top); - var zoom = this.map.getZoomForExtent(bounds); - this.map.setCenter(new OpenLayers.LonLat( - (start.lon + end.lon) / 2, - (start.lat + end.lat) / 2 - ), zoom); - this.map.viewPortDiv.removeChild(document.getElementById("zoomBox")); - this.zoomBox = null; - this.leaveMode(); - break; - case "pan": - this.map.setCenter(this.map.center); - - } - document.onselectstart = null; - this.mouseDragStart = null; - this.map.div.style.cursor = "default"; - }, - - defaultMouseOut: function (evt) { - if (this.mouseDragStart != null - && OpenLayers.Util.mouseLeft(evt, this.map.div)) { - this.defaultMouseUp(evt); - } - } -}); - diff --git a/public/lib/OpenLayers/Control/PanZoom.js b/public/lib/OpenLayers/Control/PanZoom.js deleted file mode 100644 index 32eed2feb..000000000 --- a/public/lib/OpenLayers/Control/PanZoom.js +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Control.js - -/** - * @class - * - * default zoom/pan controls - */ -OpenLayers.Control.PanZoom = Class.create(); -OpenLayers.Control.PanZoom.X = 4; -OpenLayers.Control.PanZoom.Y = 4; -OpenLayers.Control.PanZoom.prototype = - Object.extend( new OpenLayers.Control(), { - - /** @type int */ - slideFactor: 50, - - /** @type Array of Button Divs */ - buttons: null, - - /** @type OpenLayers.Pixel */ - position: null, - - /** - * @constructor - */ - initialize: function() { - OpenLayers.Control.prototype.initialize.apply(this, arguments); - this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X, - OpenLayers.Control.PanZoom.Y); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @returns A reference to the container div for the PanZoom control - * @type DOMElement - */ - draw: function(px) { - // initialize our internal div - OpenLayers.Control.prototype.draw.apply(this, arguments); - px = this.position; - - // place the controls - this.buttons = new Array(); - - var sz = new OpenLayers.Size(18,18); - var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y); - - this._addButton("panup", "north-mini.png", centered, sz); - px.y = centered.y+sz.h; - this._addButton("panleft", "west-mini.png", px, sz); - this._addButton("panright", "east-mini.png", px.add(sz.w, 0), sz); - this._addButton("pandown", "south-mini.png", - centered.add(0, sz.h*2), sz); - this._addButton("zoomin", "zoom-plus-mini.png", - centered.add(0, sz.h*3+5), sz); - this._addButton("zoomworld", "zoom-world-mini.png", - centered.add(0, sz.h*4+5), sz); - this._addButton("zoomout", "zoom-minus-mini.png", - centered.add(0, sz.h*5+5), sz); - return this.div; - }, - - /** - * @param {String} id - * @param {String} img - * @param {OpenLayers.Pixel} xy - * @param {OpenLayers.Size} sz - * - * @returns A Div (an alphaImageDiv, to be precise) that contains the - * image of the button, and has all the proper event handlers - * set. - * @type DOMElement - */ - _addButton:function(id, img, xy, sz) { - var imgLocation = OpenLayers.Util.getImagesLocation() + img; - // var btn = new ol.AlphaImage("_"+id, imgLocation, xy, sz); - var btn = OpenLayers.Util.createAlphaImageDiv( - "OpenLayers_Control_PanZoom_" + id, - xy, sz, imgLocation, "absolute"); - - //we want to add the outer div - this.div.appendChild(btn); - - btn.onmousedown = this.buttonDown.bindAsEventListener(btn); - btn.ondblclick = this.doubleClick.bindAsEventListener(btn); - btn.onclick = this.doubleClick.bindAsEventListener(btn); - btn.action = id; - btn.map = this.map; - btn.slideFactor = this.slideFactor; - - //we want to remember/reference the outer div - this.buttons.push(btn); - return btn; - }, - - /** - * @param {event} evt - * - * @type Boolean - */ - doubleClick: function (evt) { - Event.stop(evt); - return false; - }, - - /** - * @param {event} evt - */ - buttonDown: function (evt) { - if (!Event.isLeftClick(evt)) return; - - var slide = this.map.getResolution() * this.slideFactor; - var center = this.map.getCenter(); - - var newCenter = center.copyOf(); - - switch (this.action) { - case "panup": - newCenter = newCenter.add( 0, slide); - break; - case "pandown": - newCenter = newCenter.add( 0, -slide); - break; - case "panleft": - newCenter = newCenter.add( -slide, 0); - break; - case "panright": - newCenter = newCenter.add( slide, 0); - break; - case "zoomin": - this.map.zoomIn(); - break; - case "zoomout": - this.map.zoomOut(); - break; - case "zoomworld": - this.map.zoomToFullExtent(); - break; - } - - if (!newCenter.equals(center)) { - this.map.setCenter(newCenter); - } - - Event.stop(evt); - }, - - /** - * - */ - destroy: function() { - OpenLayers.Control.prototype.destroy.apply(this, arguments); - for(i=0; i 0 && - (evt.clientY - offsets[1]) < parseInt(this.zoombarDiv.style.height) - 2) { - var newTop = parseInt(this.slider.style.top) - deltaY; - this.slider.style.top = newTop+"px"; - } - this.mouseDragStart = evt.xy.copyOf(); - } - Event.stop(evt); - }, - - /* - * @param evt - * Perform cleanup when a mouseup event is received -- discover new zoom level - * and switch to it. - */ - zoomBarUp:function(evt) { - if (!Event.isLeftClick(evt)) return; - if (this.zoomStart) { - this.div.style.cursor="default"; - this.map.events.remove("mousemove"); - this.map.events.remove("mouseup"); - var deltaY = this.zoomStart.y - evt.xy.y - this.map.zoomTo(this.map.zoom + Math.round(deltaY/this.zoomStopHeight)); - this.moveZoomBar(); - this.mouseDragStart = null; - Event.stop(evt); - } - }, - - /* - * Change the location of the slider to match the current zoom level. - */ - moveZoomBar:function() { - var newTop = - (this.map.getZoomLevels() - this.map.getZoom()) * this.zoomStopHeight - + this.startTop + 1; - this.slider.style.top = newTop + "px"; - }, - - CLASS_NAME: "OpenLayers.Control.PanZoomBar" -}); diff --git a/public/lib/OpenLayers/Events.js b/public/lib/OpenLayers/Events.js deleted file mode 100644 index 00e158b4f..000000000 --- a/public/lib/OpenLayers/Events.js +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -OpenLayers.Events = Class.create(); - -OpenLayers.Events.prototype = { - // Array: supported events - BROWSER_EVENTS: [ - "mouseover", "mouseout", - "mousedown", "mouseup", "mousemove", - "click", "dblclick", - "resize", "focus", "blur" - ], - - // hash of Array(Function): events listener functions - listeners: null, - - // Object: the code object issuing application events - object: null, - - // DOMElement: the DOM element receiving browser events - div: null, - - // Array: list of support application events - eventTypes: null, - - /** - * @param {OpenLayers.Map} map - * @param {DOMElement} div - */ - initialize: function (object, div, eventTypes) { - this.listeners = {}; - this.object = object; - this.div = div; - this.eventTypes = eventTypes; - if (eventTypes) { - for (var i = 0; i < this.eventTypes.length; i++) { - // create a listener list for every custom application event - this.listeners[ this.eventTypes[i] ] = []; - } - } - for (var i = 0; i < this.BROWSER_EVENTS.length; i++) { - var eventType = this.BROWSER_EVENTS[i]; - - // every browser event has a corresponding application event - // (whether it's listened for or not). - this.listeners[ eventType ] = []; - - Event.observe(div, eventType, - this.handleBrowserEvent.bindAsEventListener(this)); - } - // disable dragstart in IE so that mousedown/move/up works normally - Event.observe(div, "dragstart", Event.stop); - }, - - /** - * @param {str} type - * @param {Object} obj - * @param {Function} func - */ - register: function (type, obj, func) { - if (func == null) { - obj = this.object; - func = obj; - } - var listeners = this.listeners[type]; - listeners.push( {obj: obj, func: func} ); - }, - - unregister: function (type, obj, func) { - var listeners = this.listeners[type]; - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].obj == obj && listeners[i].type == type) { - listeners.splice(i, 1); - break; - } - } - }, - - remove: function(type) { - this.listeners[type].pop(); - }, - - /** - * @param {event} evt - */ - handleBrowserEvent: function (evt) { - evt.xy = this.getMousePosition(evt); - this.triggerEvent(evt.type, evt) - }, - - /** - * @param {event} evt - * - * @return {OpenLayers.Pixel} - */ - getMousePosition: function (evt) { - if (!this.div.offsets) { - this.div.offsets = Position.page(this.div); - } - return new OpenLayers.Pixel( - evt.clientX - this.div.offsets[0], - evt.clientY - this.div.offsets[1]); - }, - - /** - * @param {str} type - * @param {event} evt - */ - triggerEvent: function (type, evt) { - if (evt == null) { - evt = {}; - } - evt.object = this.object; - evt.div = this.div; - - var listeners = this.listeners[type]; - for (var i = 0; i < listeners.length; i++) { - var callback = listeners[i]; - var continueChain = callback.func.call(callback.obj, evt); - if (continueChain != null && !continueChain) break; - } - } -}; diff --git a/public/lib/OpenLayers/Feature.js b/public/lib/OpenLayers/Feature.js deleted file mode 100644 index a15318001..000000000 --- a/public/lib/OpenLayers/Feature.js +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** - * @class - */ -OpenLayers.Feature = Class.create(); -OpenLayers.Feature.prototype= { - - /** @type OpenLayers.Events */ - events:null, - - /** @type OpenLayers.Layer */ - layer: null, - - /** @type String */ - id: null, - - /** @type OpenLayers.LonLat */ - lonlat:null, - - /** @type Object */ - data:null, - - /** @type OpenLayers.Marker */ - marker: null, - - /** @type OpenLayers.Popup */ - popup: null, - - /** - * @constructor - * - * @param {OpenLayers.Layer} layer - * @param {String} id - * @param {OpenLayers.LonLat} lonlat - * @param {Object} data - */ - initialize: function(layer, lonlat, data, id) { - this.layer = layer; - this.lonlat = lonlat; - this.data = (data != null) ? data : new Object(); - this.id = (id ? id : 'f' + Math.random()); - }, - - /** - * - */ - destroy: function() { - - //remove the popup from the map - if ((this.layer != null) && (this.layer.map != null)) { - if (this.popup != null) { - this.layer.map.removePopup(this.popup); - } - } - - this.events = null; - this.layer = null; - this.id = null; - this.lonlat = null; - this.data = null; - if (this.marker != null) { - this.marker.destroy(); - this.marker = null; - } - if (this.popup != null) { - this.popup.destroy(); - this.popup = null; - } - }, - - - /** - * @returns A Marker Object created from the 'lonlat' and 'icon' properties - * set in this.data. If no 'lonlat' is set, returns null. If no - * 'icon' is set, OpenLayers.Marker() will load the default image - * @type OpenLayers.Marker - */ - createMarker: function() { - - var marker = null; - - if (this.lonlat != null) { - this.marker = new OpenLayers.Marker(this.lonlat, this.data.icon); - } - return this.marker; - }, - - /** - * - */ - createPopup: function() { - - if (this.lonlat != null) { - - var id = this.id + "_popup"; - var anchor = (this.marker) ? this.marker.icon : null; - - this.popup = new OpenLayers.Popup.AnchoredBubble(id, - this.lonlat, - this.data.popupSize, - this.data.popupContentHTML, - anchor); - } - return this.popup; - }, - - CLASS_NAME: "OpenLayers.Feature" -}; diff --git a/public/lib/OpenLayers/Feature/WFS.js b/public/lib/OpenLayers/Feature/WFS.js deleted file mode 100644 index b2eb0f522..000000000 --- a/public/lib/OpenLayers/Feature/WFS.js +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** - * @class - */ -OpenLayers.Feature.WFS = Class.create(); -OpenLayers.Feature.WFS.prototype = - Object.extend( new OpenLayers.Feature(), { - - /** - * @constructor - * - * @param {OpenLayers.Layer} layer - * @param {XMLNode} xmlNode - */ - initialize: function(layer, xmlNode) { - var newArguments = arguments; - if (arguments.length > 0) { - var data = this.processXMLNode(xmlNode); - newArguments = new Array(layer, data.lonlat, data, data.id) - } - OpenLayers.Feature.prototype.initialize.apply(this, newArguments); - - if (arguments.length > 0) { - this.createMarker(); - this.layer.addMarker(this.marker); - } - }, - - destroy: function() { - if (this.marker != null) { - this.layer.removeMarker(this.marker); - } - OpenLayers.Feature.prototype.destroy.apply(this, arguments); - }, - - /** - * @param {XMLNode} xmlNode - * - * @returns Data Object with 'id', 'lonlat', and private properties set - * @type Object - */ - processXMLNode: function(xmlNode) { - //this should be overridden by subclasses - // must return an Object with 'id' and 'lonlat' values set - var point = xmlNode.getElementsByTagName("Point"); - var text = point[0].textContent; - var floats = text.split(","); - - return {lonlat: new OpenLayers.LonLat(parseFloat(floats[0]), - parseFloat(floats[1])), - id: null}; - - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Feature.WFS" -}); - - - - - diff --git a/public/lib/OpenLayers/Icon.js b/public/lib/OpenLayers/Icon.js deleted file mode 100644 index 76a233899..000000000 --- a/public/lib/OpenLayers/Icon.js +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** -* @class -*/ -OpenLayers.Icon = Class.create(); -OpenLayers.Icon.prototype = { - - /** image url - * @type String */ - url: null, - - /** @type OpenLayers.Size */ - size:null, - - /** distance in pixels to offset the image when being rendered - * @type OpenLayers.Pixel */ - offset: null, - - /** Function to calculate the offset (based on the size) - * @type OpenLayers.Pixel */ - calculateOffset: null, - - /** @type DOMElement */ - imageDiv: null, - - /** @type OpenLayers.Pixel */ - px: null, - - /** - * @constructor - * - * @param {String} url - * @param {OpenLayers.Size} size - * @param {Function} calculateOffset - */ - initialize: function(url, size, offset, calculateOffset) { - this.url = url; - this.size = (size) ? size : new OpenLayers.Size(20,20); - this.offset = (offset) ? offset : new OpenLayers.Pixel(0,0); - this.calculateOffset = calculateOffset; - - this.imageDiv = OpenLayers.Util.createAlphaImageDiv(); - }, - - destroy: function() { - this.imageDiv = null; - }, - - /** - * @returns A fresh copy of the icon. - * @type OpenLayers.Icon - */ - clone: function() { - return new OpenLayers.Icon(this.size, this.url, this.offset); - }, - - /** - * @param {OpenLayers.Size} size - */ - setSize: function(size) { - if (size != null) { - this.size = size; - } - this.draw(); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @return A new DOM Image of this icon set at the location passed-in - * @type DOMElement - */ - draw: function(px) { - OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, - null, - null, - this.size, - this.url, - "absolute"); - this.moveTo(px); - return this.imageDiv; - }, - - /** - * @param {OpenLayers.Pixel} px - */ - moveTo: function (px) { - //if no px passed in, use stored location - if (px != null) { - this.px = px; - } - - if ((this.px != null) && (this.imageDiv != null)) { - if (this.calculateOffset) { - this.offset = this.calculateOffset(this.size); - } - var offsetPx = this.px.offset(this.offset); - OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, offsetPx); - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Icon" -}; \ No newline at end of file diff --git a/public/lib/OpenLayers/Layer.js b/public/lib/OpenLayers/Layer.js deleted file mode 100644 index 23da82e7d..000000000 --- a/public/lib/OpenLayers/Layer.js +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** - * @class - */ -OpenLayers.Layer = Class.create(); -OpenLayers.Layer.prototype = { - - /** @type String */ - name: null, - - /** @type DOMElement */ - div: null, - - /** This variable is set in map.addLayer, not within the layer itself - * @type OpenLayers.Map */ - map: null, - - /** - * @constructor - * - * @param {String} name - */ - initialize: function(name) { - if (arguments.length > 0) { - this.name = name; - if (this.div == null) { - this.div = OpenLayers.Util.createDiv(); - this.div.style.width = "100%"; - this.div.style.height = "100%"; - } - } - }, - - /** - * Destroy is a destructor: this is to alleviate cyclic references which - * the Javascript garbage cleaner can not take care of on its own. - */ - destroy: function() { - if (this.map != null) { - this.map.removeLayer(this); - } - this.map = null; - }, - - /** - * @params {OpenLayers.Bounds} bound - * @params {Boolean} zoomChanged tells when zoom has changed, as layers have to do some init work in that case. - */ - moveTo: function (bound, zoomChanged) { - // not implemented here - return; - }, - - /** - * @param {OpenLayers.Map} map - */ - setMap: function(map) { - this.map = map; - }, - - /** - * @returns Whether or not the layer is a base layer. This should be - * determined individually by all subclasses. - * @type Boolean - */ - isBaseLayer: function() { - //this function should be implemented by all subclasses. - }, - - /** - * @returns Whether or not the layer is visible - * @type Boolean - */ - getVisibility: function() { - return (this.div.style.display != "none"); - }, - - /** - * @param {bool} visible - */ - setVisibility: function(visible) { - this.div.style.display = (visible) ? "block" : "none"; - if ((visible) && (this.map != null)) { - this.moveTo(this.map.getExtent()); - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer" -}; diff --git a/public/lib/OpenLayers/Layer/Google.js b/public/lib/OpenLayers/Layer/Google.js deleted file mode 100644 index 6d9b9b6e4..000000000 --- a/public/lib/OpenLayers/Layer/Google.js +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer.js - -// load Google map control script -// this key was generated for: http://openlayers.python-hosting.com/testing/euzuro/ -document.write(""); - -/** - * @class - */ -OpenLayers.Layer.Google = Class.create(); -OpenLayers.Layer.Google.prototype = Object.extend( new OpenLayers.Layer(), { - - /** @type Boolean */ - viewPortLayer: true, - - /** @type GMap2 gmap stores the Google Map element */ - gmap:null, - - /** @type Boolean */ - dragging:false, - - /** - * @constructor - * - * @param {String} name - */ - initialize: function(name) { - OpenLayers.Layer.prototype.initialize.apply(this, [name]); - }, - - /** - * @param {OpenLayers.Map} map - */ - setMap:function(map) { - OpenLayers.Layer.prototype.setMap.apply(this, arguments); - - // once our layer has been added to the map, we can create the vemap - this.map.events.register("addlayer", this, this.loadGMap); - }, - - /** Google layer is always a base class. - * @type Boolean - */ - isBaseLayer: function() { - return true; - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @param {int} zoomChanged - */ - moveTo:function(bounds,zoomChanged) { - - if ((this.gmap != null) && (!this.dragging)) { - - var olCenter = this.map.getCenter(); - var gCenter = this.getGMapCenter(); - - var olZoom = this.map.getZoom(); - var gZoom = this.gmap.getZoom(); - - if ((!olCenter.equals(gCenter)) || ((olZoom +1) != gZoom)) { - this.gmap.setCenter(new GLatLng(olCenter.lat, olCenter.lon), - olZoom + 1); - } - } - }, - - /** - * - */ - loadGMap:function() { - // create div and set to same size as map - var gDiv = OpenLayers.Util.createDiv(this.name); - var sz = this.map.getSize(); - gDiv.style.width = sz.w; - gDiv.style.height = sz.h; - this.div.appendChild(gDiv); - - // create GMap, hide nav controls - this.gmap = new GMap2(this.div); - this.moveTo(); - - // catch pans and zooms from GMap - GEvent.addListener(this.gmap, - "moveend", - this.catchPanZoom.bindAsEventListener(this)); - - - // attach to the drag start and end and we´ll set a flag so that - // we dont get recursivity. this is because the events fall through - // the gmaps div and into the main layer div - GEvent.addListener(this.gmap, - "dragstart", - this.dragStart.bindAsEventListener(this)); - - GEvent.addListener(this.gmap, - "dragend", - this.dragEnd.bindAsEventListener(this)); - - }, - - /** - * @private - */ - dragStart: function() { - this.dragging = true; - }, - - /** - * @private - */ - dragEnd: function() { - this.dragging = false; - }, - - /** - * @private - * - * @param {event} e - */ - catchPanZoom: function(e) { - var olCenter = this.getGMapCenter(); - var gZoom = this.gmap.getZoom(); - - this.map.setCenter(olCenter, gZoom - 1); - - }, - - /** - * @private - * - * @returns An OpenLayers.LonLat with the center of the gmap, or null if - * the GMap has not been centered yet - * @type OpenLayers.LonLat - */ - getGMapCenter:function() { - var olCenter = null; - var gCenter = this.gmap.getCenter(); - if (gCenter != null) { - olCenter = new OpenLayers.LonLat(gCenter.lng(), gCenter.lat()); - } - return olCenter; - }, - - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.Google" -}); diff --git a/public/lib/OpenLayers/Layer/Grid.js b/public/lib/OpenLayers/Layer/Grid.js deleted file mode 100644 index 736972b30..000000000 --- a/public/lib/OpenLayers/Layer/Grid.js +++ /dev/null @@ -1,296 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer.js -// @require: OpenLayers/Util.js -OpenLayers.Layer.Grid = Class.create(); -OpenLayers.Layer.Grid.TILE_WIDTH = 256; -OpenLayers.Layer.Grid.TILE_HEIGHT = 256; -OpenLayers.Layer.Grid.prototype = Object.extend( new OpenLayers.Layer(), { - - // str: url - url: null, - - // hash: params - params: null, - - // tileSize: OpenLayers.Size - tileSize: null, - - // grid: Array(Array()) - // this is an array of rows, each row is an array of tiles - grid: null, - - /** - * @param {str} name - * @param {str} url - * @param {hash} params - */ - initialize: function(name, url, params) { - var newArguments = arguments; - if (arguments.length > 0) { - newArguments = [name]; - } - OpenLayers.Layer.prototype.initialize.apply(this, newArguments); - this.url = url; - this.params = params; - this.tileSize = new OpenLayers.Size(OpenLayers.Layer.Grid.TILE_WIDTH, - OpenLayers.Layer.Grid.TILE_HEIGHT); - }, - - /** - * - */ - destroy: function() { - this.params = null; - this.clearGrid(); - this.grid = null; - OpenLayers.Layer.prototype.destroy.apply(this, arguments); - }, - - setTileSize: function (size) { - this.tileSize = size.copyOf(); - }, - - /** - * moveTo - * moveTo is a function called whenever the map is moved. All the moving - * of actual 'tiles' is done by the map, but moveTo's role is to accept - * a bounds and make sure the data that that bounds requires is pre-loaded. - * @param {OpenLayers.Bounds} - */ - moveTo:function(bounds,zoomChanged) { - if (!this.getVisibility()) { - if (zoomChanged) { - this.grid = null; - } - return; - } - if (!this.grid || zoomChanged) { - this._initTiles(); - } else { - var i = 0; - while (this.getGridBounds().bottom > bounds.bottom) { - this.insertRow(false); - } - while (this.getGridBounds().left > bounds.left) { - this.insertColumn(true); - } - while (this.getGridBounds().top < bounds.top) { - this.insertRow(true); - } - while (this.getGridBounds().right < bounds.right) { - this.insertColumn(false); - } - } - }, - getGridBounds:function() { - var topLeftTile = this.grid[0][0]; - var bottomRightTile = this.grid[this.grid.length-1][this.grid[0].length-1]; - return new OpenLayers.Bounds(topLeftTile.bounds.left, - bottomRightTile.bounds.bottom, - bottomRightTile.bounds.right, - topLeftTile.bounds.top); - }, - - /** - */ - _initTiles:function() { - - //first of all, clear out the main div - this.div.innerHTML = ""; - - //now clear out the old grid and start a new one - this.clearGrid(); - this.grid = new Array(); - - var viewSize = this.map.getSize(); - var bounds = this.map.getExtent(); - var extent = this.map.getFullExtent(); - var resolution = this.map.getResolution(); - var tilelon = resolution*this.tileSize.w; - var tilelat = resolution*this.tileSize.h; - - var offsetlon = bounds.left - extent.left; - var tilecol = Math.floor(offsetlon/tilelon); - var tilecolremain = offsetlon/tilelon - tilecol; - var tileoffsetx = -tilecolremain * this.tileSize.w; - var tileoffsetlon = extent.left + tilecol * tilelon; - - var offsetlat = bounds.top - (extent.bottom + tilelat); - var tilerow = Math.ceil(offsetlat/tilelat); - var tilerowremain = tilerow - offsetlat/tilelat; - var tileoffsety = -tilerowremain * this.tileSize.h; - var tileoffsetlat = extent.bottom + tilerow * tilelat; - - tileoffsetx = Math.round(tileoffsetx); // heaven help us - tileoffsety = Math.round(tileoffsety); - - this.origin = new OpenLayers.Pixel(tileoffsetx,tileoffsety); - - var startX = tileoffsetx; - var startLon = tileoffsetlon; - - do { - var row = new Array(); - this.grid.append(row); - tileoffsetlon = startLon; - tileoffsetx = startX; - do { - var tileBounds = new OpenLayers.Bounds(tileoffsetlon, - tileoffsetlat, - tileoffsetlon+tilelon, - tileoffsetlat+tilelat); - - var tile = this.addTile(tileBounds, - new OpenLayers.Pixel(tileoffsetx - parseInt(this.map.layerContainerDiv.style.left), - tileoffsety - parseInt(this.map.layerContainerDiv.style.top)) - ); - tile.draw((this.params.TRANSPARENT == 'true')); - row.append(tile); - - tileoffsetlon += tilelon; - tileoffsetx += this.tileSize.w; - } while (tileoffsetlon < bounds.right) - - tileoffsetlat -= tilelat; - tileoffsety += this.tileSize.h; - } while(tileoffsetlat > bounds.bottom - tilelat) - - }, - - /** - * @param {bool} prepend - if true, prepend to beginning. - * if false, then append to end - */ - insertRow:function(prepend) { - var modelRowIndex = (prepend) ? 0 : (this.grid.length - 1); - var modelRow = this.grid[modelRowIndex]; - - var newRow = new Array(); - - var resolution = this.map.getResolution(); - var deltaY = (prepend) ? -this.tileSize.h : this.tileSize.h; - var deltaLat = resolution * -deltaY; - - for (var i=0; i < modelRow.length; i++) { - var modelTile = modelRow[i]; - var bounds = modelTile.bounds.copyOf(); - var position = modelTile.position.copyOf(); - bounds.bottom = bounds.bottom + deltaLat; - bounds.top = bounds.top + deltaLat; - position.y = position.y + deltaY; - var newTile = this.addTile(bounds, position); - newTile.draw((this.params.TRANSPARENT == 'true')); - newRow.append(newTile); - } - - if (newRow.length>0){ - if (prepend) { - this.grid.prepend(newRow); - } else { - this.grid.append(newRow); - } - } - }, - - /** - * @param {bool} prepend - if true, prepend to beginning. - * if false, then append to end - */ - insertColumn:function(prepend) { - var modelCellIndex; - var deltaX = (prepend) ? -this.tileSize.w : this.tileSize.w; - var resolution = this.map.getResolution(); - var deltaLon = resolution * deltaX; - - for (var i=0; i 0) { - var row = this.grid[0]; - while(row.length > 0) { - var tile = row[0]; - tile.destroy(); - row.remove(tile); - } - this.grid.remove(row); - } - } - }, - - /** - * addTile gives subclasses of Grid the opportunity to create an - * OpenLayer.Tile of their choosing. The implementer should initialize - * the new tile and take whatever steps necessary to display it. - * - * @param {OpenLayers.Bounds} bounds - * - * @returns The added OpenLayers.Tile - * @type OpenLayers.Tile - */ - addTile:function(bounds,position) { - // Should be implemented by subclasses - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Grid" -}); diff --git a/public/lib/OpenLayers/Layer/KaMap.js b/public/lib/OpenLayers/Layer/KaMap.js deleted file mode 100644 index e4f414541..000000000 --- a/public/lib/OpenLayers/Layer/KaMap.js +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer/Grid.js -/** -* @class -*/ -OpenLayers.Layer.KaMap = Class.create(); -OpenLayers.Layer.KaMap.prototype = - Object.extend( new OpenLayers.Layer.Grid(), { - metaTileHeight: 6, - metaTileWidth: 6, - - DEFAULT_PARAMS: { - i: 'jpeg', - map: '' - }, - - // this.cellSize = newScale/(oMap.resolution * inchesPerUnit[oMap.units]); - // kaMap.prototype.geoToPix = function( gX, gY ) { var pX = gX / this.cellSize; var pY = -1 * gY / this.cellSize; } - initialize: function(name, url, params, origin) { - this.kaOrigin = origin; - var newArguments = new Array(); - newArguments.push(name, url, params); - OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments); - this.params = (params ? params : {}); - if (arguments.length > 0 && params) { - OpenLayers.Util.applyDefaults( - this.params, - this.DEFAULT_PARAMS - ); - } - }, - addTile:function(bounds,position) { - var zoom = this.map.getZoom(); - var resolution = this.map.getResolution(); - var scale = 128000000 / Math.pow(2, zoom); - // 1280000 is an empirical value for a specific tile server, not yet figured out the right way to do this in general. - // This will probably be based on map.maxResolution. - var cellSize = new OpenLayers.Size(resolution*this.tileSize.w, resolution*this.tileSize.h); - var pX = Math.floor(((bounds.left + this.kaOrigin.lon) / cellSize.w) * this.tileSize.w); - var pY = -Math.floor(((bounds.top+this.kaOrigin.lat) / cellSize.h) * this.tileSize.h); - var url = this.getFullRequestString( - { t: pY, - l: pX, - s: scale - }); - return new OpenLayers.Tile.Image(this, position, bounds, - url, this.tileSize); - }, - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.KaMap" -}); diff --git a/public/lib/OpenLayers/Layer/Markers.js b/public/lib/OpenLayers/Layer/Markers.js deleted file mode 100644 index 173b64d7a..000000000 --- a/public/lib/OpenLayers/Layer/Markers.js +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer.js -/** -* @class -*/ -OpenLayers.Layer.Markers = Class.create(); -OpenLayers.Layer.Markers.prototype = - Object.extend( new OpenLayers.Layer(), { - - /** internal marker list - * @type Array(OpenLayers.Marker) */ - markers: null, - - /** - * @constructor - * - * @param {String} name - */ - initialize: function(name) { - OpenLayers.Layer.prototype.initialize.apply(this, arguments); - this.markers = new Array(); - }, - - /** - * - */ - destroy: function() { - this.clearMarkers(); - markers = null; - OpenLayers.Layer.prototype.destroy.apply(this, arguments); - }, - - - /** - * @param {OpenLayers.Bounds} bounds - * @param {Boolean} zoomChanged - */ - moveTo: function(bounds, zoomChanged) { - if (zoomChanged) { - this.redraw(); - } - }, - - /** WFS layer is never a base class. - * @type Boolean - */ - isBaseLayer: function() { - return false; - }, - - /** - * @param {OpenLayers.Marker} marker - */ - addMarker: function(marker) { - this.markers.append(marker); - if (this.map && this.map.getExtent()) { - marker.map = this.map; - this.drawMarker(marker); - } - }, - - /** - * @param {OpenLayers.Marker} marker - */ - removeMarker: function(marker) { - this.markers.remove(marker); - if ((marker.icon != null) && (marker.icon.imageDiv != null) && - (marker.icon.imageDiv.parentNode == this.div) ) { - this.div.removeChild(marker.icon.imageDiv); - } - }, - - /** - * - */ - clearMarkers: function() { - if (this.markers != null) { - while(this.markers.length > 0) { - this.removeMarker(this.markers[0]); - } - } - }, - - /** clear all the marker div's from the layer and then redraw all of them. - * Use the map to recalculate new placement of markers. - */ - redraw: function() { - for(i=0; i < this.markers.length; i++) { - this.drawMarker(this.markers[i]); - } - }, - - /** Calculate the pixel location for the marker, create it, and - * add it to the layer's div - * - * @private - * - * @param {OpenLayers.Marker} marker - */ - drawMarker: function(marker) { - var px = this.map.getLayerPxFromLonLat(marker.lonlat); - var markerImg = marker.draw(px); - if (!marker.drawn) { - this.div.appendChild(markerImg); - marker.drawn = true; - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.Markers" -}); diff --git a/public/lib/OpenLayers/Layer/Text.js b/public/lib/OpenLayers/Layer/Text.js deleted file mode 100644 index 4c5df8323..000000000 --- a/public/lib/OpenLayers/Layer/Text.js +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer/Markers.js - -/** -* @class -*/ -OpenLayers.Layer.Text = Class.create(); -OpenLayers.Layer.Text.prototype = - Object.extend( new OpenLayers.Layer.Markers(), { - - /** store url of text file - * @type str */ - location:null, - - /** @type Array(OpenLayers.Feature) */ - features: null, - - /** @type OpenLayers.Feature */ - selectedFeature: null, - - /** - * @constructor - * - * @param {String} name - * @param {String} location - */ - initialize: function(name, location) { - OpenLayers.Layer.Markers.prototype.initialize.apply(this, [name]); - this.location = location; - this.features = new Array(); - new Ajax.Request(location, - { method: 'get', onComplete:this.parseData.bind(this) } ); - }, - - /** - * - */ - destroy: function() { - this.clearFeatures(); - this.features = null; - OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments); - }, - - /** WFS layer is never a base class. - * @type Boolean - */ - isBaseLayer: function() { - return false; - }, - - - /** - * @param {?} ajaxRequest - */ - parseData: function(ajaxRequest) { - var text = ajaxRequest.responseText; - var lines = text.split('\n'); - var columns; - // length - 1 to allow for trailing new line - for (var lcv = 0; lcv < (lines.length - 1); lcv++) { - var currLine = lines[lcv].replace(/^\s*/,'').replace(/\s*$/,''); - - if (currLine.charAt(0) != '#') { /* not a comment */ - - if (!columns) { - //First line is columns - columns = currLine.split('\t'); - } else { - var vals = currLine.split('\t'); - var location = new OpenLayers.LonLat(0,0); - var title; var url; - var icon, iconSize, iconOffset; - var set = false; - for (var valIndex = 0; valIndex < vals.length; valIndex++) { - if (vals[valIndex]) { - if (columns[valIndex] == 'point') { - var coords = vals[valIndex].split(','); - location.lat = parseFloat(coords[0]); - location.lon = parseFloat(coords[1]); - set = true; - } else if (columns[valIndex] == 'lat') { - location.lat = parseFloat(vals[valIndex]); - set = true; - } else if (columns[valIndex] == 'lon') { - location.lon = parseFloat(vals[valIndex]); - set = true; - } else if (columns[valIndex] == 'title') - title = vals[valIndex]; - else if (columns[valIndex] == 'image' || - columns[valIndex] == 'icon') - url = vals[valIndex]; - else if (columns[valIndex] == 'iconSize') { - var size = vals[valIndex].split(','); - iconSize = new OpenLayers.Size(parseFloat(size[0]), - parseFloat(size[1])); - } else if (columns[valIndex] == 'iconOffset') { - var offset = vals[valIndex].split(','); - iconOffset = new OpenLayers.Pixel(parseFloat(offset[0]), - parseFloat(offset[1])); - } else if (columns[valIndex] == 'title') { - title = vals[valIndex]; - } else if (columns[valIndex] == 'description') { - description = vals[valIndex]; - } - } - } - if (set) { - var data = new Object(); - if (url != null) { - data.icon = new OpenLayers.Icon(url, - iconSize, - iconOffset); - } else { - data.icon = OpenLayers.Marker.defaultIcon(); - - //allows for the case where the image url is not - // specified but the size is. use a default icon - // but change the size - if (iconSize != null) { - data.icon.setSize(iconSize); - } - - } - if ((title != null) && (description != null)) { - data['popupContentHTML'] = '

'+title+'

'+description+'

'; - } - var feature = new OpenLayers.Feature(this, location, data); - this.features.append(feature); - var marker = feature.createMarker(); - marker.events.register('click', feature, this.markerClick); - this.addMarker(marker); - } - } - } - } - }, - - /** - * @param {Event} evt - */ - markerClick: function(evt) { - sameMarkerClicked = (this == this.layer.selectedFeature); - this.layer.selectedFeature = (!sameMarkerClicked) ? this : null; - for(var i=0; i < this.layer.map.popups.length; i++) { - this.layer.map.removePopup(this.layer.map.popups[i]); - } - if (!sameMarkerClicked) { - this.layer.map.addPopup(this.createPopup()); - } - Event.stop(evt); - }, - - /** - * - */ - clearFeatures: function() { - if (this.features != null) { - while(this.features.length > 0) { - var feature = this.features[0]; - this.features.remove(feature); - feature.destroy(); - } - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Text" -}); - - diff --git a/public/lib/OpenLayers/Layer/VirtualEarth.js b/public/lib/OpenLayers/Layer/VirtualEarth.js deleted file mode 100644 index 19db24817..000000000 --- a/public/lib/OpenLayers/Layer/VirtualEarth.js +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer.js - -// load VE map control script -document.write(""); - - -/** - * @class - */ -OpenLayers.Layer.VirtualEarth = Class.create(); -OpenLayers.Layer.VirtualEarth.prototype = - Object.extend( new OpenLayers.Layer(), { - - /** @type Boolean */ - viewPortLayer: true, - - /** @type VEMap */ - vemap: null, - - /** - * @constructor - * - * @param {str} name - */ - initialize:function(name) { - OpenLayers.Layer.prototype.initialize.apply(this, arguments); - }, - - /** - * @param {OpenLayers.Map} map - */ - setMap:function(map) { - OpenLayers.Layer.prototype.setMap.apply(this, arguments); - - // once our layer has been added to the map, we can create the vemap - this.map.events.register("addlayer", this, this.loadVEMap); - }, - - /** Virtual Earth layer is always a base class. - * @type Boolean - */ - isBaseLayer: function() { - return true; - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @param {int} zoomChanged - */ - moveTo:function(bounds,zoomChanged) { - - if (this.vemap != null) { - var olCenter = this.map.getCenter(); - var olZoom = this.map.getZoom(); - - this.vemap.SetCenterAndZoom(new VELatLong(olCenter.lat, olCenter.lon), - olZoom + 1); - } - }, - - - /** - * - */ - loadVEMap:function() { - // create div and set to same size as map - var veDiv = OpenLayers.Util.createDiv(this.name); - var sz = this.map.getSize(); - veDiv.style.width = sz.w; - veDiv.style.height = sz.h; - this.div.appendChild(veDiv); - - // create VEMap, hide nav controls - this.vemap = new VEMap(this.name); - this.vemap.LoadMap(); - this.vemap.HideDashboard(); - - // catch pans and zooms from VE Map - this.vemap.AttachEvent("onendcontinuouspan", - this.catchPanZoom.bindAsEventListener(this)); - this.vemap.AttachEvent("onendzoom", - this.catchPanZoom.bindAsEventListener(this)); - - - }, - - /** - * @param {event} e - */ - catchPanZoom: function(e) { - var veCenter = this.vemap.GetCenter(); - var veZoom = this.vemap.GetZoomLevel(); - - var olCenter = new OpenLayers.LonLat(veCenter.Longitude, - veCenter.Latitude); - - this.map.setCenter(olCenter, veZoom - 1); - - }, - - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.VirtualEarth" -}); \ No newline at end of file diff --git a/public/lib/OpenLayers/Layer/WFS.js b/public/lib/OpenLayers/Layer/WFS.js deleted file mode 100644 index 6885b3024..000000000 --- a/public/lib/OpenLayers/Layer/WFS.js +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer/Grid.js -// @require: OpenLayers/Layer/Markers.js -/** -* @class -*/ -OpenLayers.Layer.WFS = Class.create(); -OpenLayers.Layer.WFS.prototype = - Object.extend(new OpenLayers.Layer.Grid(), - Object.extend(new OpenLayers.Layer.Markers(), { - - /** @type Object */ - featureClass: OpenLayers.Feature.WFS, - - /** @final @type hash */ - DEFAULT_PARAMS: { service: "WFS", - version: "1.0.0", - request: "GetFeature", - typename: "docpoint" - }, - - /** - * @constructor - * - * @param {str} name - * @param {str} url - * @param {hash} params - * @param {Object} featureClass - */ - initialize: function(name, url, params, featureClass) { - if (featureClass != null) this.featureClass = featureClass; - - var newArguments = new Array(); - if (arguments.length > 0) { - //uppercase params - params = OpenLayers.Util.upperCaseObject(params); - newArguments.push(name, url, params); - } - OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments); - OpenLayers.Layer.Markers.prototype.initialize.apply(this, newArguments); - - if (arguments.length > 0) { - OpenLayers.Util.applyDefaults( - this.params, - OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS) - ); - } - }, - - - /** - * - */ - destroy: function() { - OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments); - OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments); - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @param {Boolean} zoomChanged - */ - moveTo: function(bounds, zoomChanged) { - OpenLayers.Layer.Grid.prototype.moveTo.apply(this, arguments); - OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments); - }, - - /** WFS layer is never a base class. - * @type Boolean - */ - isBaseLayer: function() { - return false; - }, - - /** - * @param {String} name - * @param {hash} params - * - * @returns A clone of this OpenLayers.Layer.WMS, with the passed-in - * parameters merged in. - * @type OpenLayers.Layer.WMS - */ - clone: function (name, params) { - var mergedParams = {} - Object.extend(mergedParams, this.params); - Object.extend(mergedParams, params); - var obj = new OpenLayers.Layer.WFS(name, this.url, mergedParams); - obj.setTileSize(this.tileSize); - return obj; - }, - - /** - * addTile creates a tile, initializes it (via 'draw' in this case), and - * adds it to the layer div. - * - * @param {OpenLayers.Bounds} bounds - * - * @returns The added OpenLayers.Tile.WFS - * @type OpenLayers.Tile.WFS - */ - addTile:function(bounds, position) { - url = this.getFullRequestString( - { BBOX:bounds.toBBOX() }); - - return new OpenLayers.Tile.WFS(this, position, bounds, - url, this.tileSize); - }, - - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.WFS" -} -) -); diff --git a/public/lib/OpenLayers/Layer/WMS.js b/public/lib/OpenLayers/Layer/WMS.js deleted file mode 100644 index d0e21f7f5..000000000 --- a/public/lib/OpenLayers/Layer/WMS.js +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer/Grid.js -/** -* @class -*/ -OpenLayers.Layer.WMS = Class.create(); -OpenLayers.Layer.WMS.prototype = - Object.extend( new OpenLayers.Layer.Grid(), { - - /** @final @type hash */ - DEFAULT_PARAMS: { service: "WMS", - version: "1.1.1", - request: "GetMap", - styles: "", - exceptions: "application/vnd.ogc.se_inimage", - format: "image/jpeg" - }, - - /** - * @constructor - * - * @param {str} name - * @param {str} url - * @param {hash} params - */ - initialize: function(name, url, params) { - var newArguments = new Array(); - if (arguments.length > 0) { - //uppercase params - params = OpenLayers.Util.upperCaseObject(params); - newArguments.push(name, url, params); - } - OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments); - - if (arguments.length > 0) { - OpenLayers.Util.applyDefaults( - this.params, - OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS) - ); - } - }, - - - /** WFS layer is never a base class. - * @type Boolean - */ - isBaseLayer: function() { - return (this.params.TRANSPARENT != 'true'); - }, - - /** - * @param {String} name - * @param {hash} params - * - * @returns A clone of this OpenLayers.Layer.WMS, with the passed-in - * parameters merged in. - * @type OpenLayers.Layer.WMS - */ - clone: function (name, params) { - var mergedParams = {}; - Object.extend(mergedParams, this.params); - Object.extend(mergedParams, params); - var obj = new OpenLayers.Layer.WMS(name, this.url, mergedParams); - obj.setTileSize(this.tileSize); - return obj; - }, - - /** - * addTile creates a tile, initializes it (via 'draw' in this case), and - * adds it to the layer div. - * - * @param {OpenLayers.Bounds} bounds - * - * @returns The added OpenLayers.Tile.Image - * @type OpenLayers.Tile.Image - */ - addTile:function(bounds,position) { - url = this.getFullRequestString( - {BBOX:bounds.toBBOX(), - WIDTH:this.tileSize.w, - HEIGHT:this.tileSize.h}); - - return new OpenLayers.Tile.Image(this, position, bounds, - url, this.tileSize); - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.WMS" -}); diff --git a/public/lib/OpenLayers/Layer/WMS/Untiled.js b/public/lib/OpenLayers/Layer/WMS/Untiled.js deleted file mode 100644 index 4486c4f02..000000000 --- a/public/lib/OpenLayers/Layer/WMS/Untiled.js +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer/Grid.js -/** -* @class -*/ -OpenLayers.Layer.WMS.Untiled = Class.create(); -OpenLayers.Layer.WMS.Untiled.prototype = - Object.extend( new OpenLayers.Layer.Grid(), { - - /** @final @type hash */ - DEFAULT_PARAMS: { service: "WMS", - version: "1.1.1", - request: "GetMap", - styles: "", - exceptions: "application/vnd.ogc.se_inimage", - format: "image/jpeg" - }, - - /** - * @constructor - * - * @param {str} name - * @param {str} url - * @param {hash} params - */ - initialize: function(name, url, params) { - var newArguments = new Array(); - if (arguments.length > 0) { - //uppercase params - params = OpenLayers.Util.upperCaseObject(params); - newArguments.push(name, url, params); - } - OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments); - - if (arguments.length > 0) { - OpenLayers.Util.applyDefaults( - this.params, - OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS) - ); - } - }, - - - /** WFS layer is never a base class. - * @type Boolean - */ - isBaseLayer: function() { - return (this.params.TRANSPARENT != true); - }, - - /** - * @param {String} name - * @param {hash} params - * - * @returns A clone of this OpenLayers.Layer.WMS, with the passed-in - * parameters merged in. - * @type OpenLayers.Layer.WMS - */ - clone: function (name, params) { - var mergedParams = {}; - Object.extend(mergedParams, this.params); - Object.extend(mergedParams, params); - var obj = new OpenLayers.Layer.WMS(name, this.url, mergedParams); - obj.setTileSize(this.tileSize); - return obj; - }, - - /** - * addTile creates a tile, initializes it (via 'draw' in this case), and - * adds it to the layer div. - * - * @param {OpenLayers.Bounds} bounds - * - * @returns The added OpenLayers.Tile.Image - * @type OpenLayers.Tile.Image - */ - addTile:function(bounds,position) { - url = this.getFullRequestString( - {BBOX:bounds.toBBOX(), - WIDTH:this.map.getSize().w, - HEIGHT:this.map.getSize().h}); - - return new OpenLayers.Tile.Image(this, position, bounds, - url, this.map.getSize()); - }, - moveTo:function(bounds,zoomChanged, minor) { - if (!minor) { - this.div.innerHTML = ""; - tile = this.addTile(bounds, new OpenLayers.Pixel(-parseInt(this.map.layerContainerDiv.style.left), -parseInt(this.map.layerContainerDiv.style.top))); - tile.draw(); - } - }, - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.WMS.Untiled" -}); diff --git a/public/lib/OpenLayers/Layer/Yahoo.js b/public/lib/OpenLayers/Layer/Yahoo.js deleted file mode 100644 index eb9fab728..000000000 --- a/public/lib/OpenLayers/Layer/Yahoo.js +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Layer.js - -// load Yahoo map control script -document.write(""); - -/** - * @class - */ -OpenLayers.Layer.Yahoo = Class.create(); -OpenLayers.Layer.Yahoo.prototype = Object.extend( new OpenLayers.Layer(), { - - /** @type Boolean */ - viewPortLayer: true, - - /** @type GMap2 gmap stores the Google Map element */ - ymap:null, - - /** @type Boolean */ - dragging:false, - - /** - * @constructor - * - * @param {String} name - */ - initialize: function(name) { - OpenLayers.Layer.prototype.initialize.apply(this, [name]); - }, - - /** - * @param {OpenLayers.Map} map - */ - setMap:function(map) { - OpenLayers.Layer.prototype.setMap.apply(this, arguments); - - // once our layer has been added to the map, we can create the vemap - this.map.events.register("addlayer", this, this.loadYMap); - }, - - /** Yahoo layer is always a base class. - * @type Boolean - */ - isBaseLayer: function() { - return true; - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @param {int} zoomChanged - */ - moveTo:function(bounds,zoomChanged) { - - if ((this.ymap != null) && (!this.dragging)) { - - var olCenter = this.map.getCenter(); - var yCenter = this.getYMapCenter(); - - var olZoom = this.map.getZoom(); - var yZoom = this.ymap.getZoomLevel(); - - if ((!olCenter.equals(yCenter)) || (( 16 - olZoom) != yZoom)) { - this.ymap.drawZoomAndCenter(new YGeoPoint(olCenter.lat, olCenter.lon), - 16 - olZoom); - } - } - }, - - /** - * - */ - loadYMap:function() { - // create div and set to same size as map - var yDiv = OpenLayers.Util.createDiv(this.name); - var sz = this.map.getSize(); - yDiv.style.width = sz.w; - yDiv.style.height = sz.h; - this.div.appendChild(yDiv); - - // create GMap, hide nav controls - this.ymap = new YMap(this.div); - - // catch pans and zooms from GMap - YEvent.Capture(this.ymap, - EventsList.endPan, - this.catchPanZoom, - this); - - // catch pans and zooms from GMap - YEvent.Capture(this.ymap, - EventsList.endAutoPan, - this.catchPanZoom, - this); - - - // attach to the drag start and end and we´ll set a flag so that - // we dont get recursivity. this is because the events fall through - // the gmaps div and into the main layer div - YEvent.Capture(this.ymap, - EventsList.startPan, - this.dragStart, - this); - - }, - - /** - * @private - */ - dragStart: function() { - this.dragging = true; - }, - - /** - * @private - * - * @param {event} e - */ - catchPanZoom: function(e) { - this.dragging = false; - - var olCenter = this.getYMapCenter(); - var yZoom = this.ymap.getZoomLevel(); - - this.map.setCenter(olCenter, 16 - yZoom); - - }, - - /** - * @private - * - * @returns An OpenLayers.LonLat with the center of the ymap, or null if - * the YMap has not been centered yet - * @type OpenLayers.LonLat - */ - getYMapCenter:function() { - var olCenter = null; - var yCenter = this.ymap.getCenterLatLon(); - if (yCenter != null) { - olCenter = new OpenLayers.LonLat(yCenter.Lon, yCenter.Lat); - } - return olCenter; - }, - - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Layer.Yahoo" -}); diff --git a/public/lib/OpenLayers/Map.js b/public/lib/OpenLayers/Map.js deleted file mode 100644 index 259175714..000000000 --- a/public/lib/OpenLayers/Map.js +++ /dev/null @@ -1,574 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Util.js -/** -* @class -* -* -*/ - -OpenLayers.Map = Class.create(); -OpenLayers.Map.prototype = { - // Hash: base z-indexes for different classes of thing - Z_INDEX_BASE: { Layer: 100, Popup: 200, Control: 1000 }, - - // Array: supported application event types - EVENT_TYPES: [ - "addlayer", "removelayer", "movestart", "move", "moveend", - "zoomend", "layerchanged", "popupopen", "popupclose", - "addmarker", "removemarker", "clearmarkers", "mouseover", - "mouseout", "mousemove", "dragstart", "drag", "dragend" ], - - // int: zoom levels, used to draw zoom dragging control and limit zooming - maxZoomLevel: 16, - - // OpenLayers.Bounds - maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90), - - /* projection */ - projection: "EPSG:4326", - - /** @type OpenLayers.Size */ - size: null, - - // float - maxResolution: 1.40625, // degrees per pixel - // Default is whole world in 256 pixels, from GMaps - - // DOMElement: the div that our map lives in - div: null, - - // HTMLDivElement: the map's view port - viewPortDiv: null, - - // HTMLDivElement: the map's layer container - layerContainerDiv: null, - - // Array(OpenLayers.Layer): ordered list of layers in the map - layers: null, - - // Array(OpenLayers.Control) - controls: null, - - // Array(OpenLayers.Popup) - popups: null, - - // OpenLayers.LonLat - center: null, - - // int - zoom: null, - - // OpenLayers.Events - events: null, - - // OpenLayers.Pixel - mouseDragStart: null, - - /** @type OpenLayers.Layer */ - baseLayer: null, - - /** - * @param {DOMElement} div - */ - initialize: function (div, options) { - Object.extend(this, options); - - this.div = div = $(div); - - // the viewPortDiv is the outermost div we modify - var id = div.id + "_OpenLayers_ViewPort"; - this.viewPortDiv = OpenLayers.Util.createDiv(id, null, null, null, - "relative", null, - "hidden"); - this.viewPortDiv.style.width = "100%"; - this.viewPortDiv.style.height = "100%"; - this.div.appendChild(this.viewPortDiv); - - // the layerContainerDiv is the one that holds all the layers - id = div.id + "_OpenLayers_Container"; - this.layerContainerDiv = OpenLayers.Util.createDiv(id); - this.viewPortDiv.appendChild(this.layerContainerDiv); - - this.events = new OpenLayers.Events(this, div, this.EVENT_TYPES); - - this.updateSize(); - // make the entire maxExtent fix in zoom level 0 by default - if (this.maxResolution == null || this.maxResolution == "auto") { - this.maxResolution = Math.max( - this.maxExtent.getWidth() / this.size.w, - this.maxExtent.getHeight() / this.size.h ); - } - // update the internal size register whenever the div is resized - this.events.register("resize", this, this.updateSize); - - this.layers = []; - - if (!this.controls) { - this.controls = []; - this.addControl(new OpenLayers.Control.MouseDefaults()); - this.addControl(new OpenLayers.Control.PanZoom()); - } - - this.popups = new Array(); - - // always call map.destroy() - Event.observe(window, 'unload', - this.destroy.bindAsEventListener(this)); - }, - - /** - * @private - */ - destroy:function() { - if (this.layers != null) { - for(var i=0; i< this.layers.length; i++) { - this.layers[i].destroy(); - } - this.layers = null; - } - if (this.controls != null) { - for(var i=0; i< this.controls.length; i++) { - this.controls[i].destroy(); - } - this.controls = null; - } - }, - - /** - * @param {OpenLayers.Layer} layer - */ - addLayer: function (layer) { - layer.setMap(this); - layer.div.style.overflow = ""; - layer.div.style.zIndex = this.Z_INDEX_BASE['Layer'] + this.layers.length; - - if (layer.viewPortLayer) { - this.viewPortDiv.appendChild(layer.div); - } else { - this.layerContainerDiv.appendChild(layer.div); - } - this.layers.push(layer); - - // hack hack hack - until we add a more robust layer switcher, - // which is able to determine which layers are base layers and - // which are not (and put baselayers in a radiobutton group and - // other layers in checkboxes) this seems to be the most straight- - // forward way of dealing with this. - // - if (layer.isBaseLayer()) { - this.baseLayer = layer; - } - this.events.triggerEvent("addlayer"); - }, - - /** Removes a layer from the map by removing its visual element (the - * layer.div property), then removing it from the map's internal list - * of layers, setting the layer's map property to null. - * - * a "removelayer" event is triggered. - * - * very worthy of mention is that simply removing a layer from a map - * will not cause the removal of any popups which may have been created - * by the layer. this is due to the fact that it was decided at some - * point that popups would not belong to layers. thus there is no way - * for us to know here to which layer the popup belongs. - * - * A simple solution to this is simply to call destroy() on the layer. - * the default OpenLayers.Layer class's destroy() function - * automatically takes care to remove itself from whatever map it has - * been attached to. - * - * The correct solution is for the layer itself to register an - * event-handler on "removelayer" and when it is called, if it - * recognizes itself as the layer being removed, then it cycles through - * its own personal list of popups, removing them from the map. - * - * @param {OpenLayers.Layer} layer - */ - removeLayer: function(layer) { - this.layerContainerDiv.removeChild(layer.div); - this.layers.remove(layer); - layer.map = null; - this.events.triggerEvent("removelayer"); - }, - - /** - * @param {Array(OpenLayers.Layer)} layers - */ - addLayers: function (layers) { - for (var i = 0; i < layers.length; i++) { - this.addLayer(layers[i]); - } - }, - - /** - * @param {OpenLayers.Control} control - * @param {OpenLayers.Pixel} px - */ - addControl: function (control, px) { - control.map = this; - this.controls.push(control); - var div = control.draw(px); - if (div) { - div.style.zIndex = this.Z_INDEX_BASE['Control'] + - this.controls.length; - this.viewPortDiv.appendChild( div ); - } - }, - - /** - * @param {OpenLayers.Popup} popup - */ - addPopup: function(popup) { - popup.map = this; - this.popups.push(popup); - var popupDiv = popup.draw(); - if (popupDiv) { - popupDiv.style.zIndex = this.Z_INDEX_BASE['Popup'] + - this.popups.length; - this.layerContainerDiv.appendChild(popupDiv); - } - }, - - /** - * @param {OpenLayers.Popup} popup - */ - removePopup: function(popup) { - this.popups.remove(popup); - if (popup.div) { - this.layerContainerDiv.removeChild(popup.div); - } - popup.map = null; - }, - - /** - * @return {float} - */ - getResolution: function () { - // return degrees per pixel - return this.maxResolution / Math.pow(2, this.zoom); - }, - - /** - * @return {int} - */ - getZoom: function () { - return this.zoom; - }, - - /** - * @returns {OpenLayers.Size} - */ - getSize: function () { - return this.size; - }, - - /** - * @private - */ - updateSize: function() { - this.size = new OpenLayers.Size( - this.div.clientWidth, this.div.clientHeight); - this.events.div.offsets = null; - // Workaround for the fact that hidden elements return 0 for size. - if (this.size.w == 0 && this.size.h == 0) { - var dim = Element.getDimensions(this.div); - this.size.w = dim.width; - this.size.h = dim.height; - } - if (this.size.w == 0 && this.size.h == 0) { - this.size.w = parseInt(this.div.style.width); - this.size.h = parseInt(this.div.style.height); - } - }, - - /** - * @return {OpenLayers.LonLat} - */ - getCenter: function () { - return this.center; - }, - - /** - * @return {OpenLayers.Bounds} - */ - getExtent: function () { - if (this.center) { - var res = this.getResolution(); - var size = this.getSize(); - var w_deg = size.w * res; - var h_deg = size.h * res; - return new OpenLayers.Bounds( - this.center.lon - w_deg / 2, - this.center.lat - h_deg / 2, - this.center.lon + w_deg / 2, - this.center.lat + h_deg / 2); - } else { - return null; - } - }, - - /** - * @return {OpenLayers.Bounds} - */ - getFullExtent: function () { - return this.maxExtent; - }, - - getZoomLevels: function() { - return this.maxZoomLevel; - }, - - /** - * @param {OpenLayers.Bounds} bounds - * - * @return {int} - */ - getZoomForExtent: function (bounds) { - var size = this.getSize(); - var width = bounds.getWidth(); - var height = bounds.getHeight(); - var deg_per_pixel = (width > height ? width / size.w : height / size.h); - var zoom = Math.log(this.maxResolution / deg_per_pixel) / Math.log(2); - return Math.floor(Math.min(Math.max(zoom, 0), this.getZoomLevels())); - }, - - /** - * @param {OpenLayers.Pixel} layerPx - * - * @returns px translated into view port pixel coordinates - * @type OpenLayers.Pixel - * @private - */ - getViewPortPxFromLayerPx:function(layerPx) { - var viewPortPx = layerPx.copyOf(); - - viewPortPx.x += parseInt(this.layerContainerDiv.style.left); - viewPortPx.y += parseInt(this.layerContainerDiv.style.top); - - return viewPortPx; - }, - - /** - * @param {OpenLayers.Pixel} viewPortPx - * - * @returns px translated into view port pixel coordinates - * @type OpenLayers.Pixel - * @private - */ - getLayerPxFromViewPortPx:function(viewPortPx) { - var layerPx = viewPortPx.copyOf(); - - layerPx.x -= parseInt(this.layerContainerDiv.style.left); - layerPx.y -= parseInt(this.layerContainerDiv.style.top); - - return layerPx; - }, - - - /** - * @param {OpenLayers.Pixel} px - * - * @return {OpenLayers.LonLat} - */ - getLonLatFromLayerPx: function (px) { - //adjust for displacement of layerContainerDiv - px = this.getViewPortPxFromLayerPx(px); - return this.getLonLatFromViewPortPx(px); - }, - - /** - * @param {OpenLayers.Pixel} viewPortPx - * - * @returns An OpenLayers.LonLat which is the passed-in view port - * OpenLayers.Pixel, translated into lon/lat given the - * current extent and resolution - * @type OpenLayers.LonLat - * @private - */ - getLonLatFromViewPortPx: function (viewPortPx) { - var center = this.getCenter(); //map center lon/lat - var res = this.getResolution(); - var size = this.getSize(); - - var delta_x = viewPortPx.x - (size.w / 2); - var delta_y = viewPortPx.y - (size.h / 2); - - return new OpenLayers.LonLat(center.lon + delta_x * res , - center.lat - delta_y * res); - }, - - // getLonLatFromPixel is a convenience function for the API - /** - * @param {OpenLayers.Pixel} pixel - * - * @returns An OpenLayers.LonLat corresponding to the given - * OpenLayers.Pixel, translated into lon/lat using the - * current extent and resolution - * @type OpenLayers.LonLat - */ - getLonLatFromPixel: function (px) { - return this.getLonLatFromViewPortPx(px); - }, - - /** - * @param {OpenLayers.LonLat} lonlat - * - * @returns An OpenLayers.Pixel which is the passed-in OpenLayers.LonLat, - * translated into layer pixels given the current extent - * and resolution - * @type OpenLayers.Pixel - */ - getLayerPxFromLonLat: function (lonlat) { - //adjust for displacement of layerContainerDiv - var px = this.getViewPortPxFromLonLat(lonlat); - return this.getLayerPxFromViewPortPx(px); - }, - - /** - * @param {OpenLayers.LonLat} lonlat - * - * @returns An OpenLayers.Pixel which is the passed-in OpenLayers.LonLat, - * translated into view port pixels given the current extent - * and resolution - * @type OpenLayers.Pixel - * @private - */ - getViewPortPxFromLonLat: function (lonlat) { - var resolution = this.getResolution(); - var extent = this.getExtent(); - return new OpenLayers.Pixel( - Math.round(1/resolution * (lonlat.lon - extent.left)), - Math.round(1/resolution * (extent.top - lonlat.lat)) - ); - }, - - // getLonLatFromPixel is a convenience function for the API - /** - * @param {OpenLayers.LonLat} lonlat - * - * @returns An OpenLayers.Pixel corresponding to the OpenLayers.LonLat - * translated into view port pixels using the current extent - * and resolution - * @type OpenLayers.Pixel - */ - getPixelFromLonLat: function (lonlat) { - return this.getViewPortPxFromLonLat(lonlat); - }, - - /** - * @param {OpenLayers.LonLat} lonlat - * @param {int} zoom - */ - setCenter: function (lonlat, zoom, minor) { - if (this.center) { // otherwise there's nothing to move yet - this.moveLayerContainer(lonlat); - } - this.center = lonlat.copyOf(); - var zoomChanged = null; - if (zoom != null && zoom != this.zoom - && zoom >= 0 && zoom <= this.getZoomLevels()) { - zoomChanged = (this.zoom == null ? 0 : this.zoom); - this.zoom = zoom; - } - - if (!minor) this.events.triggerEvent("movestart"); - this.moveToNewExtent(zoomChanged, minor); - if (!minor) this.events.triggerEvent("moveend"); - }, - - /** - * ZOOM TO BOUNDS FUNCTION - * @private - */ - moveToNewExtent: function (zoomChanged, minor) { - if (zoomChanged != null) { // reset the layerContainerDiv's location - this.layerContainerDiv.style.left = "0px"; - this.layerContainerDiv.style.top = "0px"; - - //redraw popups - for (var i = 0; i < this.popups.length; i++) { - this.popups[i].updatePosition(); - } - - } - var bounds = this.getExtent(); - for (var i = 0; i < this.layers.length; i++) { - this.layers[i].moveTo(bounds, (zoomChanged != null), minor); - } - this.events.triggerEvent("move"); - if (zoomChanged != null) - this.events.triggerEvent("zoomend", - {oldZoom: zoomChanged, newZoom: this.zoom}); - }, - - /** - * zoomIn - * Increase zoom level by one. - * @param {int} zoom - */ - zoomIn: function() { - if (this.zoom != null && this.zoom <= this.getZoomLevels()) { - this.zoomTo( this.zoom += 1 ); - } - }, - - /** - * zoomTo - * Set Zoom To int - * @param {int} zoom - */ - zoomTo: function(zoom) { - if (zoom >= 0 && zoom <= this.getZoomLevels()) { - var oldZoom = this.zoom; - this.zoom = zoom; - this.moveToNewExtent(oldZoom); - } - }, - - /** - * zoomOut - * Decrease zoom level by one. - * @param {int} zoom - */ - zoomOut: function() { - if (this.zoom != null && this.zoom > 0) { - this.zoomTo( this.zoom - 1 ); - } - }, - - /** - * zoomToFullExtent - * Zoom to the full extent and recenter. - */ - zoomToFullExtent: function() { - var fullExtent = this.getFullExtent(); - this.setCenter( - new OpenLayers.LonLat((fullExtent.left+fullExtent.right)/2, - (fullExtent.bottom+fullExtent.top)/2), - this.getZoomForExtent(fullExtent) - ); - }, - - /** - * @param {OpenLayers.LonLat} lonlat - * @private - */ - moveLayerContainer: function (lonlat) { - var container = this.layerContainerDiv; - var resolution = this.getResolution(); - - var deltaX = Math.round((this.center.lon - lonlat.lon) / resolution); - var deltaY = Math.round((this.center.lat - lonlat.lat) / resolution); - - var offsetLeft = parseInt(container.style.left); - var offsetTop = parseInt(container.style.top); - - container.style.left = (offsetLeft + deltaX) + "px"; - container.style.top = (offsetTop - deltaY) + "px"; - }, - - CLASS_NAME: "OpenLayers.Map" -}; diff --git a/public/lib/OpenLayers/Marker.js b/public/lib/OpenLayers/Marker.js deleted file mode 100644 index 0640295d7..000000000 --- a/public/lib/OpenLayers/Marker.js +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** -* @class -*/ -OpenLayers.Marker = Class.create(); -OpenLayers.Marker.prototype = { - - /** @type OpenLayers.Icon */ - icon: null, - - /** location of object - * @type OpenLayers.LonLat */ - lonlat: null, - - /** @type OpenLayers.Events*/ - events: null, - - /** @type OpenLayers.Map */ - map: null, - - /** - * @constructor - * - * @param {OpenLayers.Icon} icon - * @param {OpenLayers.LonLat lonlat - */ - initialize: function(lonlat, icon) { - this.lonlat = lonlat; - this.icon = (icon) ? icon : OpenLayers.Marker.defaultIcon(); - - this.events = new OpenLayers.Events(this, this.icon.imageDiv, null); - }, - - destroy: function() { - this.map = null; - - if (this.icon != null) { - this.icon.destroy(); - this.icon = null; - } - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @return A new DOM Image with this marker´s icon set at the - * location passed-in - * @type DOMElement - */ - draw: function(px) { - return this.icon.draw(px); - }, - - /** - * @param {OpenLayers.Pixel} px - */ - moveTo: function (px) { - if ((px != null) && (this.icon != null)) { - this.icon.moveTo(px); - } - }, - - /** - * @returns Whether or not the marker is currently visible on screen. - * @type Boolean - */ - onScreen:function() { - - var onScreen = false; - if (this.map) { - var screenBounds = this.map.getExtent(); - onScreen = screenBounds.contains(this.lonlat.lon, this.lonlat.lat); - } - return onScreen; - }, - - /** - * @param {float} inflate - */ - inflate: function(inflate) { - if (this.icon) { - var newSize = new OpenLayers.Size(this.icon.size.w * inflate, - this.icon.size.h * inflate); - this.icon.setSize(newSize); - } - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Marker" -}; - - -/** - * @returns A default OpenLayers.Icon to use for a marker - * @type OpenLayers.Icon - */ -OpenLayers.Marker.defaultIcon = function() { - var url = OpenLayers.Util.getImagesLocation() + "marker.png"; - var size = new OpenLayers.Size(21, 25); - var calculateOffset = function(size) { - return new OpenLayers.Pixel(-(size.w/2), -size.h); - }; - - return new OpenLayers.Icon(url, size, null, calculateOffset); -}; - - diff --git a/public/lib/OpenLayers/Popup.js b/public/lib/OpenLayers/Popup.js deleted file mode 100644 index 1491109c5..000000000 --- a/public/lib/OpenLayers/Popup.js +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** -* @class -*/ -OpenLayers.Popup = Class.create(); - -OpenLayers.Popup.count = 0; -OpenLayers.Popup.WIDTH = 200; -OpenLayers.Popup.HEIGHT = 200; -OpenLayers.Popup.COLOR = "white"; -OpenLayers.Popup.OPACITY = 1; -OpenLayers.Popup.BORDER = "0px"; - -OpenLayers.Popup.prototype = { - - /** @type OpenLayers.Events*/ - events: null, - - /** @type String */ - id: "", - - /** @type OpenLayers.LonLat */ - lonlat: null, - - /** @type DOMElement */ - div: null, - - /** @type OpenLayers.Size*/ - size: null, - - /** @type String */ - contentHTML: "", - - /** @type String */ - backgroundColor: "", - - /** @type float */ - opacity: "", - - /** @type String */ - border: "", - - /** this gets set in Map.js when the popup is added to the map - * @type OpenLayers.Map */ - map: null, - - /** - * @constructor - * - * @param {String} id - * @param {OpenLayers.LonLat} lonlat - * @param {OpenLayers.Size} size - * @param {String} contentHTML - */ - initialize:function(id, lonlat, size, contentHTML) { - OpenLayers.Popup.count += 1; - this.id = (id != null) ? id : "Popup" + OpenLayers.Popup.count; - this.lonlat = lonlat; - this.size = (size != null) ? size - : new OpenLayers.Size( - OpenLayers.Popup.WIDTH, - OpenLayers.Popup.HEIGHT); - if (contentHTML != null) { - this.contentHTML = contentHTML; - } - this.backgroundColor = OpenLayers.Popup.COLOR; - this.opacity = OpenLayers.Popup.OPACITY; - this.border = OpenLayers.Popup.BORDER; - - this.div = OpenLayers.Util.createDiv(this.id + "_div", null, null, - null, null, null, "hidden"); - - this.events = new OpenLayers.Events(this, this.div, null); - }, - - /** - */ - destroy: function() { - if (this.map != null) { - this.map.removePopup(this); - } - this.div = null; - this.map = null; - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @returns Reference to a div that contains the drawn popup - * @type DOMElement - */ - draw: function(px) { - if (px == null) { - if ((this.lonlat != null) && (this.map != null)) { - px = this.map.getLayerPxFromLonLat(this.lonlat); - } - } - - this.setSize(); - this.setBackgroundColor(); - this.setOpacity(); - this.setBorder(); - this.setContentHTML(); - this.moveTo(px); - - return this.div; - }, - - /** - * if the popup has a lonlat and its map members set, - * then have it move itself to its proper position - */ - updatePosition: function() { - if ((this.lonlat) && (this.map)) { - var px = this.map.getLayerPxFromLonLat(this.lonlat); - this.moveTo(px); - } - }, - - /** - * @param {OpenLayers.Pixel} px - */ - moveTo: function(px) { - if ((px != null) && (this.div != null)) { - this.div.style.left = px.x + "px"; - this.div.style.top = px.y + "px"; - } - }, - - /** - * @returns Boolean indicating whether or not the popup is visible - * @type Boolean - */ - visible: function() { - return Element.visible(this.div); - }, - - /** - * - */ - toggle: function() { - Element.toggle(this.div); - }, - - /** - * - */ - show: function() { - Element.show(this.div); - }, - - /** - * - */ - hide: function() { - Element.hide(this.div); - }, - - /** - * @param {OpenLayers.Size} size - */ - setSize:function(size) { - if (size != undefined) { - this.size = size; - } - - if (this.div != null) { - this.div.style.width = this.size.w; - this.div.style.height = this.size.h; - } - }, - - /** - * @param {String} color - */ - setBackgroundColor:function(color) { - if (color != undefined) { - this.backgroundColor = color; - } - - if (this.div != null) { - this.div.style.backgroundColor = this.backgroundColor; - } - }, - - /** - * @param {float} opacity - */ - setOpacity:function(opacity) { - if (opacity != undefined) { - this.opacity = opacity; - } - - if (this.div != null) { - // for Mozilla and Safari - this.div.style.opacity = this.opacity; - - // for IE - this.div.style.filter = 'alpha(opacity=' + this.opacity*100 + ')'; - } - }, - - /** - * @param {int} border - */ - setBorder:function(border) { - if (border != undefined) { - this.border = border; - } - - if (this.div != null) { - this.div.style.border = this.border; - } - }, - - /** - * @param {String} contentHTML - */ - setContentHTML:function(contentHTML) { - if (contentHTML != null) { - this.contentHTML = contentHTML; - } - - if (this.div != null) { - this.div.innerHTML = this.contentHTML; - } - }, - - CLASS_NAME: "OpenLayers.Popup" -}; diff --git a/public/lib/OpenLayers/Popup/Anchored.js b/public/lib/OpenLayers/Popup/Anchored.js deleted file mode 100644 index 90db91279..000000000 --- a/public/lib/OpenLayers/Popup/Anchored.js +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Popup.js - -/** -* @class -*/ -OpenLayers.Popup.Anchored = Class.create(); -OpenLayers.Popup.Anchored.prototype = - Object.extend( new OpenLayers.Popup(), { - - /** "lr", "ll", "tr", "tl" - relative position of the popup. - * @type String */ - relativePosition: null, - - /** Object which must have expose a 'size' (OpenLayers.Size) and - * 'offset' (OpenLayers.Pixel) - * @type Object */ - anchor: null, - - /** - * @constructor - * - * @param {String} id - * @param {OpenLayers.LonLat} lonlat - * @param {OpenLayers.Size} size - * @param {String} contentHTML - * @param {Object} anchor Object which must expose a - * - 'size' (OpenLayers.Size) and - * - 'offset' (OpenLayers.Pixel) - * (this is generally an OpenLayers.Icon) - */ - initialize:function(id, lonlat, size, contentHTML, anchor) { - var newArguments = new Array(id, lonlat, size, contentHTML); - OpenLayers.Popup.prototype.initialize.apply(this, newArguments); - - this.anchor = (anchor != null) ? anchor - : { size: new OpenLayers.Size(0,0), - offset: new OpenLayers.Pixel(0,0)}; - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @returns Reference to a div that contains the drawn popup - * @type DOMElement - */ - draw: function(px) { - if (px == null) { - if ((this.lonlat != null) && (this.map != null)) { - px = this.map.getLayerPxFromLonLat(this.lonlat); - } - } - - //calculate relative position - this.relativePosition = this.calculateRelativePosition(px); - - return OpenLayers.Popup.prototype.draw.apply(this, arguments); - }, - - /** - * @private - * - * @param {OpenLayers.Pixel} px - * - * @returns The relative position ("br" "tr" "tl "bl") at which the popup - * should be placed - * @type String - */ - calculateRelativePosition:function(px) { - var lonlat = this.map.getLonLatFromLayerPx(px); - - var extent = this.map.getExtent(); - var quadrant = extent.determineQuadrant(lonlat); - - return OpenLayers.Bounds.oppositeQuadrant(quadrant); - }, - - /** - * @param {OpenLayers.Pixel} px - */ - moveTo: function(px) { - - var newPx = this.calculateNewPx(px); - - var newArguments = new Array(newPx); - OpenLayers.Popup.prototype.moveTo.apply(this, newArguments); - }, - - /** - * @param {OpenLayers.Size} size - */ - setSize:function(size) { - OpenLayers.Popup.prototype.setSize.apply(this, arguments); - - if ((this.lonlat) && (this.map)) { - var px = this.map.getLayerPxFromLonLat(this.lonlat); - this.moveTo(px); - } - }, - - /** - * @private - * - * @param {OpenLayers.Pixel} px - * - * @returns The the new px position of the popup on the screen - * relative to the passed-in px - * @type OpenLayers.Pixel - */ - calculateNewPx:function(px) { - var newPx = px.offset(this.anchor.offset); - - var top = (this.relativePosition.charAt(0) == 't'); - newPx.y += (top) ? -this.size.h : this.anchor.size.h; - - var left = (this.relativePosition.charAt(1) == 'l'); - newPx.x += (left) ? -this.size.w : this.anchor.size.w; - - return newPx; - }, - - CLASS_NAME: "OpenLayers.Popup.Anchored" -}); diff --git a/public/lib/OpenLayers/Popup/AnchoredBubble.js b/public/lib/OpenLayers/Popup/AnchoredBubble.js deleted file mode 100644 index 352086dbd..000000000 --- a/public/lib/OpenLayers/Popup/AnchoredBubble.js +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Popup/Anchored.js - -/** -* @class -*/ -OpenLayers.Popup.AnchoredBubble = Class.create(); - -//Border space for the rico corners -OpenLayers.Popup.AnchoredBubble.CORNER_SIZE = 5; - -OpenLayers.Popup.AnchoredBubble.prototype = - Object.extend( new OpenLayers.Popup.Anchored(), { - - /** @type DOMElement */ - contentDiv:null, - - - /** - * @constructor - * - * @param {String} id - * @param {OpenLayers.LonLat} lonlat - * @param {OpenLayers.Size} size - * @param {String} contentHTML - * @param {Object} anchor Object which must expose a - * - 'size' (OpenLayers.Size) and - * - 'offset' (OpenLayers.Pixel) - * (this is generally an OpenLayers.Icon) - */ - initialize:function(id, lonlat, size, contentHTML, anchor) { - OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @returns Reference to a div that contains the drawn popup - * @type DOMElement - */ - draw: function(px) { - - OpenLayers.Popup.Anchored.prototype.draw.apply(this, arguments); - - // make the content Div - var contentSize = this.size.copyOf(); - contentSize.h -= (2 * OpenLayers.Popup.AnchoredBubble.CORNER_SIZE); - - var id = this.div.id + "-contentDiv"; - this.contentDiv = OpenLayers.Util.createDiv(id, null, contentSize, - null, "relative", null, - "hidden"); - this.div.appendChild(this.contentDiv); - this.setContentHTML(); - - this.setRicoCorners(true); - - //set the popup color and opacity - this.setBackgroundColor(); - this.setOpacity(); - - return this.div; - }, - - /** - * @param {OpenLayers.Size} size - */ - setSize:function(size) { - OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); - - if (this.contentDiv != null) { - - var contentSize = this.size.copyOf(); - contentSize.h -= (2 * OpenLayers.Popup.AnchoredBubble.CORNER_SIZE); - - this.contentDiv.style.height = contentSize.h + "px"; - - //size has changed - must redo corners - this.setRicoCorners(false); - } - }, - - /** - * @param {String} color - */ - setBackgroundColor:function(color) { - if (color != undefined) { - this.backgroundColor = color; - } - - if (this.div != null) { - if (this.contentDiv != null) { - this.div.style.background = "transparent"; - Rico.Corner.changeColor(this.contentDiv, this.backgroundColor); - } - } - }, - - /** - * @param {float} opacity - */ - setOpacity:function(opacity) { - if (opacity != undefined) { - this.opacity = opacity; - } - - if (this.div != null) { - if (this.contentDiv != null) { - Rico.Corner.changeOpacity(this.contentDiv, this.opacity); - } - } - }, - - /** Bubble Popups can not have a border - * - * @param {int} border - */ - setBorder:function(border) { - this.border = 0; - }, - - /** - * @param {String} contentHTML - */ - setContentHTML:function(contentHTML) { - if (contentHTML != null) { - this.contentHTML = contentHTML; - } - - if (this.contentDiv != null) { - this.contentDiv.innerHTML = this.contentHTML; - } - }, - - /** - * @private - * - * @param {Boolean} firstTime Is this the first time the corners are being - * rounded? - * - * update the rico corners according to the popup's - * current relative postion - */ - setRicoCorners:function(firstTime) { - - var corners = this.getCornersToRound(this.relativePosition); - var options = {corners: corners, - color: this.backgroundColor, - bgColor: "transparent", - blend: false}; - - if (firstTime) { - Rico.Corner.round(this.div, options); - } else { - Rico.Corner.reRound(this.contentDiv, options); - //set the popup color and opacity - this.setBackgroundColor(); - this.setOpacity(); - } - }, - - /** - * @private - * - * @returns The proper corners string ("tr tl bl br") for rico - * to round - * @type String - */ - getCornersToRound:function() { - - var corners = ['tl', 'tr', 'bl', 'br']; - - //we want to round all the corners _except_ the opposite one. - var corner = OpenLayers.Bounds.oppositeQuadrant(this.relativePosition); - corners.remove(corner); - - return corners.join(" "); - }, - - CLASS_NAME: "OpenLayers.Popup.AnchoredBubble" -}); diff --git a/public/lib/OpenLayers/SingleFile.js b/public/lib/OpenLayers/SingleFile.js deleted file mode 100644 index 857c48490..000000000 --- a/public/lib/OpenLayers/SingleFile.js +++ /dev/null @@ -1,5 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -_OPENLAYERS_SFL_=true - diff --git a/public/lib/OpenLayers/Tile.js b/public/lib/OpenLayers/Tile.js deleted file mode 100644 index eca7c0bca..000000000 --- a/public/lib/OpenLayers/Tile.js +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/* - * OpenLayers.Tile - * - * @class This is a class designed to designate a single tile, however - * it is explicitly designed to do relatively little. Tiles store information - * about themselves -- such as the URL that they are related to, and their - * size - but do not add themselves to the layer div automatically, for - * example. - */ -OpenLayers.Tile = Class.create(); -OpenLayers.Tile.prototype = { - - /** @type OpenLayers.Layer */ - layer: null, - - /** @type String url of the request */ - url:null, - - /** @type OpenLayers.Bounds */ - bounds:null, - - /** @type OpenLayers.Size */ - size:null, - - /** Top Left pixel of the tile - * @type OpenLayers.Pixel */ - position:null, - - /** - * @constructor - * - * @param {OpenLayers.Layer} layer - * @param {OpenLayers.Pixel} position - * @param {OpenLayers.Bounds} bounds - * @param {String} url - * @param {OpenLayers.Size} size - */ - initialize: function(layer, position, bounds, url, size) { - if (arguments.length > 0) { - this.layer = layer; - this.position = position; - this.bounds = bounds; - this.url = url; - this.size = size; - } - }, - - /** nullify references to prevent circular references and memory leaks - */ - destroy:function() { - this.layer = null; - this.bounds = null; - this.size = null; - }, - - /** - */ - draw:function() { - - // HACK HACK - should we make it a standard to put this sort of warning - // message in functions that are supposed to be overridden? - // - // Log.warn(this.CLASS_NAME + ": draw() not implemented"); - - }, - - /** remove this tile from the ds - */ - remove:function() { - }, - - /** - * @type OpenLayers.Pixel - */ - getPosition: function() { - return this.position; - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Tile" -}; - diff --git a/public/lib/OpenLayers/Tile/Image.js b/public/lib/OpenLayers/Tile/Image.js deleted file mode 100644 index 6a386f8c2..000000000 --- a/public/lib/OpenLayers/Tile/Image.js +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Tile.js -/** -* @class -*/ -OpenLayers.Tile.Image = Class.create(); -OpenLayers.Tile.Image.prototype = - Object.extend( new OpenLayers.Tile(), { - - /** @type DOMElement img */ - imgDiv:null, - - /** - * @constructor - * - * @param {OpenLayers.Grid} layer - * @param {OpenLayers.Pixel} position - * @param {OpenLayers.Bounds} bounds - * @param {String} url - * @param {OpenLayers.Size} size - */ - initialize: function(layer, position, bounds, url, size) { - OpenLayers.Tile.prototype.initialize.apply(this, arguments); - }, - - destroy: function() { - if ((this.imgDiv != null) && (this.imgDiv.parentNode == this.layer.div)) { - this.layer.div.removeChild(this.imgDiv); - } - this.imgDiv = null; - OpenLayers.Tile.prototype.destroy.apply(this, arguments); - }, - - /** - */ - draw:function(transparent) { - if (false) { // don't actually use the alpha PNG hack right now - // it has a fiercely bad effect on IE6's performance - // if (transparent) { - this.imgDiv = OpenLayers.Util.createAlphaImageDiv(null, - this.position, - this.size, - this.url, - "absolute"); - } else { - this.imgDiv = OpenLayers.Util.createImage(null, - this.position, - this.size, - this.url, - "absolute"); - } - this.layer.div.appendChild(this.imgDiv); - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Tile.Image" - } -); diff --git a/public/lib/OpenLayers/Tile/WFS.js b/public/lib/OpenLayers/Tile/WFS.js deleted file mode 100644 index 486d1384c..000000000 --- a/public/lib/OpenLayers/Tile/WFS.js +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -// @require: OpenLayers/Tile.js -/** -* @class -*/ -OpenLayers.Tile.WFS = Class.create(); -OpenLayers.Tile.WFS.prototype = - Object.extend( new OpenLayers.Tile(), { - - /** @type Array(OpenLayers.Feature)*/ - features: null, - - - /** - * @constructor - * - * @param {OpenLayers.Layer} layer - * @param {OpenLayers.Pixel} position - * @param {OpenLayers.Bounds} bounds - * @param {String} url - * @param {OpenLayers.Size} size - */ - initialize: function(layer, position, bounds, url, size) { - OpenLayers.Tile.prototype.initialize.apply(this, arguments); - - this.features = new Array(); - }, - - /** - * - */ - destroy: function() { - for(var i=0; i < this.features.length; i++) { - this.features[i].destroy(); - } - OpenLayers.Tile.prototype.destroy.apply(this, arguments); - }, - - /** - */ - draw:function() { - this.loadFeaturesForRegion(this.requestSuccess); - }, - - - /** get the full request string from the ds and the tile params - * and call the AJAX loadURL(). - * - * input are function pointers for what to do on success and failure. - * - * @param {function} success - * @param {function} failure - */ - loadFeaturesForRegion:function(success, failure) { - - if (!this.loaded) { - - if (this.url != "") { - - // TODO: Hmmm, this stops multiple loads of the data when a - // result isn't immediately retrieved, but it's hacky. - // Do it better. - this.loaded = true; - OpenLayers.loadURL(this.url, null, this, success, failure); - } - } - }, - - /** Return from AJAX request - * - * @param {} request - */ - requestSuccess:function(request) { - var doc = request.responseXML; - - if (!doc || request.fileType!="XML") { - doc = OpenLayers.parseXMLString(request.responseText); - } - - var resultFeatures = doc.getElementsByTagName("featureMember"); - - //clear old featureList - this.features = new Array(); - - for (var i=0; i < resultFeatures.length; i++) { - - var feature = new this.layer.featureClass(this.layer, - resultFeatures[i]); - this.features.append(feature); - } - - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Tile.WFS" - } -); - diff --git a/public/lib/OpenLayers/Util.js b/public/lib/OpenLayers/Util.js deleted file mode 100644 index 9270821e0..000000000 --- a/public/lib/OpenLayers/Util.js +++ /dev/null @@ -1,1010 +0,0 @@ -/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. - * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full - * text of the license. */ -/** -* @class -*/ -OpenLayers.Util = new Object(); - - - - -/** -* @class This class represents a screen coordinate, in x and y coordinates -*/ -OpenLayers.Pixel = Class.create(); -OpenLayers.Pixel.prototype = { - - /** @type float */ - x: 0.0, - - /** @type float */ - y: 0.0, - - /** - * @constructor - * - * @param {float} x - * @param {float} y - */ - initialize: function(x, y) { - this.x = x; - this.y = y; - }, - - /** - * @return string representation of Pixel. ex: "x=200.4,y=242.2" - * @type str - */ - toString:function() { - return ("x=" + this.x + ",y=" + this.y); - }, - - /** - * @type OpenLayers.Pixel - */ - copyOf:function() { - return new OpenLayers.Pixel(this.x, this.y); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @return whether or not the point passed in as parameter is equal to this - * note that if px passed in is null, returns false - * @type bool - */ - equals:function(px) { - var equals = false; - if (px != null) { - equals = ((this.x == px.x) && (this.y == px.y)); - } - return equals; - }, - - /** - * @param {int} x - * @param {int} y - * - * @return a new Pixel with this pixel's x&y augmented by the - * values passed in. - * @type OpenLayers.Pixel - */ - add:function(x, y) { - return new OpenLayers.Pixel(this.x + x, this.y + y); - }, - - /** - * @param {OpenLayers.Pixel} px - * - * @return a new Pixel with this pixel's x&y augmented by the - * x&y values of the pixel passed in. - * @type OpenLayers.Pixel - */ - offset:function(px) { - return this.add(px.x, px.y); - }, - - /** @final @type str */ - CLASS_NAME: "OpenLayers.Pixel" -}; - - -/** -* @class This class represents a width and height pair -*/ -OpenLayers.Size = Class.create(); -OpenLayers.Size.prototype = { - - /** @type float */ - w: 0.0, - - /** @type float */ - h: 0.0, - - - /** - * @constructor - * - * @param {float} w - * @param {float} h - */ - initialize: function(w, h) { - this.w = w; - this.h = h; - }, - - /** - * @return String representation of OpenLayers.Size object. - * (ex. "w=55,h=66") - * @type String - */ - toString:function() { - return ("w=" + this.w + ",h=" + this.h); - }, - - /** - * @return New OpenLayers.Size object with the same w and h values - * @type OpenLayers.Size - */ - copyOf:function() { - return new OpenLayers.Size(this.w, this.h); - }, - - /** - * @param {OpenLayers.Size} sz - * @returns Boolean value indicating whether the passed-in OpenLayers.Size - * object has the same w and h components as this - * note that if sz passed in is null, returns false - * - * @type bool - */ - equals:function(sz) { - var equals = false; - if (sz != null) { - equals = ((this.w == sz.w) && (this.h == sz.h)); - } - return equals; - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Size" -}; - -/** -* @class This class represents a longitude and latitude pair -*/ -OpenLayers.LonLat = Class.create(); -OpenLayers.LonLat.prototype = { - - /** @type float */ - lon: 0.0, - - /** @type float */ - lat: 0.0, - - /** - * @constructor - * - * @param {float} lon - * @param {float} lat - */ - initialize: function(lon, lat) { - this.lon = lon; - this.lat = lat; - }, - - /** - * @return String representation of OpenLayers.LonLat object. - * (ex. "lon=5,lat=42") - * @type String - */ - toString:function() { - return ("lon=" + this.lon + ",lat=" + this.lat); - }, - - /** - * @return Shortened String representation of OpenLayers.LonLat object. - * (ex. "5, 42") - * @type String - */ - toShortString:function() { - return (this.lon + ", " + this.lat); - }, - - /** - * @return New OpenLayers.LonLat object with the same lon and lat values - * @type OpenLayers.LonLat - */ - copyOf:function() { - return new OpenLayers.LonLat(this.lon, this.lat); - }, - - /** - * @param {float} lon - * @param {float} lat - * - * @return A new OpenLayers.LonLat object with the lon and lat passed-in - * added to this's. - * @type OpenLayers.LonLat - */ - add:function(lon, lat) { - return new OpenLayers.LonLat(this.lon + lon, this.lat + lat); - }, - - /** - * @param {OpenLayers.LonLat} ll - * @returns Boolean value indicating whether the passed-in OpenLayers.LonLat - * object has the same lon and lat components as this - * note that if ll passed in is null, returns false - * - * @type bool - */ - equals:function(ll) { - var equals = false; - if (ll != null) { - equals = ((this.lon == ll.lon) && (this.lat == ll.lat)); - } - return equals; - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.LonLat" -}; - -/** Alternative constructor that builds a new OpenLayers.LonLat from a -* parameter string -* -* @constructor -* -* @param {String} str Comma-separated Lon,Lat coordinate string. -* (ex. "5,40") -* -* @returns New OpenLayers.LonLat object built from the passed-in String. -* @type OpenLayers.LonLat -*/ -OpenLayers.LonLat.fromString = function(str) { - var pair = str.split(","); - return new OpenLayers.LonLat(parseFloat(pair[0]), - parseFloat(pair[1])); -}; - - - - -/** -* @class This class represents a bounding box. -* Data stored as left, bottom, right, top floats -*/ -OpenLayers.Bounds = Class.create(); -OpenLayers.Bounds.prototype = { - - /** @type float */ - left: 0.0, - - /** @type float */ - bottom: 0.0, - - /** @type float */ - right: 0.0, - - /** @type float */ - top: 0.0, - - /** - * @constructor - * - * @param {float} left - * @param {float} bottom - * @param {float} right - * @param {float} top - * - */ - initialize: function(left, bottom, right, top) { - this.left = left; - this.bottom = bottom; - this.right = right; - this.top = top; - }, - - /** - * @returns A fresh copy of the bounds - * @type OpenLayers.Bounds - */ - copyOf:function() { - return new OpenLayers.Bounds(this.left, this.bottom, - this.right, this.top); - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @returns Boolean value indicating whether the passed-in OpenLayers.Bounds - * object has the same left, right, top, bottom components as this - * note that if bounds passed in is null, returns false - * - * @type bool - */ - equals:function(bounds) { - var equals = false; - if (bounds != null) { - equals = ((this.left == bounds.left) && - (this.right == bounds.right) && - (this.top == bounds.top) && - (this.bottom == bounds.bottom)); - } - return equals; - }, - - /** - * @return String representation of OpenLayers.Bounds object. - * (ex."left-bottom=(5,42) right-top=(10,45)") - * @type String - */ - toString:function(){ - return ( "left-bottom=(" + this.left + "," + this.bottom + ")" - + " right-top=(" + this.right + "," + this.top + ")" ); - }, - - /** - * @return Simple String representation of OpenLayers.Bounds object. - * (ex. "5,42,10,45") - * @type String - */ - toBBOX:function() { - return (this.left + "," + this.bottom + "," - + this.right + "," + this.top); - }, - - /** - * @returns The width of the bounds - * @type float - */ - getWidth:function() { - return (this.right - this.left); - }, - - /** - * @returns The height of the bounds - * @type float - */ - getHeight:function() { - return (this.top - this.bottom); - }, - - /** - * @returns An OpenLayers.Size which represents the size of the box - * @type OpenLayers.Size - */ - getSize:function() { - return new OpenLayers.Size(this.getWidth(), this.getHeight()); - }, - - /** - * @returns An OpenLayers.Pixel which represents the center of the bounds - * @type OpenLayers.Pixel - */ - getCenterPixel:function() { - return new OpenLayers.Pixel( (this.left + this.right) / 2, - (this.bottom + this.top) / 2); - }, - - /** - * @returns An OpenLayers.LonLat which represents the center of the bounds - * @type OpenLayers.LonLat - */ - getCenterLonLat:function() { - return new OpenLayers.LonLat( (this.left + this.right) / 2, - (this.bottom + this.top) / 2); - }, - - /** - * @param {float} x - * @param {float} y - * - * @returns A new OpenLayers.Bounds whose coordinates are the same as this, - * but shifted by the passed-in x and y values - * @type OpenLayers.Bounds - */ - add:function(x, y){ - return new OpenLayers.Box(this.left + x, this.bottom + y, - this.right + x, this.top + y); - }, - - /** - * @param {float} x - * @param {float} y - * @param {Boolean} inclusive Whether or not to include the border. - * Default is true - * - * @return Whether or not the passed-in coordinates are within this bounds - * @type Boolean - */ - contains:function(x, y, inclusive) { - - //set default - if (inclusive == null) { - inclusive = true; - } - - var contains = false; - if (inclusive) { - contains = ((x >= this.left) && (x <= this.right) && - (y >= this.bottom) && (y <= this.top)); - } else { - contains = ((x > this.left) && (x < this.right) && - (y > this.bottom) && (y < this.top)); - } - return contains; - }, - - /** - * @param {OpenLayers.Bounds} bounds - * @param {Boolean} partial If true, only part of passed-in - * OpenLayers.Bounds needs be within this bounds. - * If false, the entire passed-in bounds must be - * within. Default is false - * @param {Boolean} inclusive Whether or not to include the border. - * Default is true - * - * @return Whether or not the passed-in OpenLayers.Bounds object is - * contained within this bounds. - * @type Boolean - */ - containsBounds:function(bounds, partial, inclusive) { - - //set defaults - if (partial == null) { - partial = false; - } - if (inclusive == null) { - inclusive = true; - } - - var inLeft; - var inTop; - var inRight; - var inBottom; - - if (inclusive) { - inLeft = (bounds.left >= this.left) && (bounds.left <= this.right); - inTop = (bounds.top >= this.bottom) && (bounds.top <= this.top); - inRight= (bounds.right >= this.left) && (bounds.right <= this.right); - inBottom = (bounds.bottom >= this.bottom) && (bounds.bottom <= this.top); - } else { - inLeft = (bounds.left > this.left) && (bounds.left < this.right); - inTop = (bounds.top > this.bottom) && (bounds.top < this.top); - inRight= (bounds.right > this.left) && (bounds.right < this.right); - inBottom = (bounds.bottom > this.bottom) && (bounds.bottom < this.top); - } - - return (partial) ? (inTop || inBottom) && (inLeft || inRight ) - : (inTop && inLeft && inBottom && inRight); - }, - - /** - * @param {OpenLayers.LonLat} lonlat - * - * @returns The quadrant ("br" "tr" "tl" "bl") of the bounds in which - * the coordinate lies. - * @type String - */ - determineQuadrant: function(lonlat) { - - var quadrant = ""; - var center = this.getCenterLonLat(); - - quadrant += (lonlat.lat < center.lat) ? "b" : "t"; - quadrant += (lonlat.lon < center.lon) ? "l" : "r"; - - return quadrant; - }, - - /** @final @type String */ - CLASS_NAME: "OpenLayers.Bounds" -}; - -/** Alternative constructor that builds a new OpenLayers.Bounds from a -* parameter string -* -* @constructor -* -* @param {String} str Comma-separated bounds string. (ex. "5,42,10,45") -* -* @returns New OpenLayers.Bounds object built from the passed-in String. -* @type OpenLayers.Bounds -*/ -OpenLayers.Bounds.fromString = function(str) { - var bounds = str.split(","); - return OpenLayers.Bounds.fromArray(bounds); -}; - -/** Alternative constructor that builds a new OpenLayers.Bounds -* from an array -* -* @constructor -* -* @param {Array} bbox Array of bounds values (ex. [5,42,10,45]) -* -* @returns New OpenLayers.Bounds object built from the passed-in Array. -* @type OpenLayers.Bounds -*/ -OpenLayers.Bounds.fromArray = function(bbox) { - return new OpenLayers.Bounds(parseFloat(bbox[0]), - parseFloat(bbox[1]), - parseFloat(bbox[2]), - parseFloat(bbox[3])); -}; - -/** Alternative constructor that builds a new OpenLayers.Bounds -* from an OpenLayers.Size -* -* @constructor -* -* @param {OpenLayers.Size} size -* -* @returns New OpenLayers.Bounds object built with top and left set to 0 and -* bottom right taken from the passed-in OpenLayers.Size. -* @type OpenLayers.Bounds -*/ -OpenLayers.Bounds.fromSize = function(size) { - return new OpenLayers.Bounds(0, - size.h, - size.w, - 0); -}; -/** - * @param {String} quadrant - * - * @returns The opposing quadrant ("br" "tr" "tl" "bl"). For Example, if - * you pass in "bl" it returns "tr", if you pass in "br" it - * returns "tl", etc. - * @type String - */ -OpenLayers.Bounds.oppositeQuadrant = function(quadrant) { - var opp = ""; - - opp += (quadrant.charAt(0) == 't') ? 'b' : 't'; - opp += (quadrant.charAt(1) == 'l') ? 'r' : 'l'; - - return opp; -}; - -// Some other helpful things - -/** -* @param {String} sStart -* -* @returns Whether or not this string starts with the string passed in. -* @type Boolean -*/ -String.prototype.startsWith = function(sStart){ - return (this.substr(0,sStart.length) == sStart); -}; - -/** -* @returns A trimmed version of the string - all leading and -* trailing spaces removed -* @type String -*/ -String.prototype.trim = function() { - - var b = 0; - while(this.substr(b,1) == " ") { - b++; - } - - var e = this.length - 1; - while(this.substr(e,1) == " ") { - e--; - } - - return this.substring(b, e+1); -}; - -/** Remove an object from an array. Iterates through the array -* to find the item, then removes it. -* -* @param {Object} item -* -* @returns A reference to the array -* @type Array -*/ -Array.prototype.remove = function(item) { - for(var i=0; i < this.length; i++) { - if(this[i] == item) { - this.splice(i,1); - //break;more than once?? - } - } - return this; -} - -/** -* @returns A fresh copy of the array -* @type Array -*/ -Array.prototype.copyOf = function() { - var copy = new Array(); - for (var i = 0; i < this.length; i++) { - copy[i] = this[i]; - } - return copy; -}; - -/** -* @param {Object} item -*/ -Array.prototype.prepend = function(item) { - this.splice(0, 0, item); -}; - -/** -* @param {Object} item -*/ -Array.prototype.append = function(item){ - this[this.length] = item; -}; - -/** -*/ -Array.prototype.clear = function() { - this.length = 0; -}; - -/** -* @param {Object} element -* -* @returns The first index of the element in the array if found. Else returns -1 -* @type int -*/ -Array.prototype.indexOf = function(element) { - var index = -1; - for(var i=0; i < this.length; i++) { - if (this[i] == element) { - index = i; - break; - } - } - return index; -} - -/** - * @param {String} id - * @param {OpenLayers.Pixel} px - * @param {OpenLayers.Size} sz - * @param {String} position - * @param {String} border - * @param {String} overflow - */ -OpenLayers.Util.modifyDOMElement = function(element, id, px, sz, position, - border, overflow) { - - if (id) { - element.id = id; - } - if (px) { - element.style.left = px.x + "px"; - element.style.top = px.y + "px"; - } - if (sz) { - element.style.width = sz.w + "px"; - element.style.height = sz.h + "px"; - } - if (position) { - element.style.position = position; - } - if (border) { - element.style.border = border; - } - if (overflow) { - element.style.overflow = overflow; - } -}; - -/** -* zIndex is NOT set -* -* @param {String} id -* @param {OpenLayers.Pixel} px -* @param {OpenLayers.Size} sz -* @param {String} imgURL -* @param {String} position -* @param {String} border -* @param {String} overflow -* -* @returns A DOM Div created with the specified attributes. -* @type DOMElement -*/ -OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position, - border, overflow) { - - var dom = document.createElement('div'); - - //set specific properties - dom.style.padding = "0"; - dom.style.margin = "0"; - if (imgURL) { - dom.style.backgroundImage = 'url(' + imgURL + ')'; - } - - //set generic properties - if (!id) { - id = "OpenLayersDiv" + (Math.random() * 10000 % 10000); - } - if (!position) { - position = "absolute"; - } - OpenLayers.Util.modifyDOMElement(dom, id, px, sz, - position, border, overflow); - - return dom; -}; - -/** -* @param {String} id -* @param {OpenLayers.Pixel} px -* @param {OpenLayers.Size} sz -* @param {String} imgURL -* @param {String} position -* @param {String} border -* -* @returns A DOM Image created with the specified attributes. -* @type DOMElement -*/ -OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border) { - - image = document.createElement("img"); - - //set special properties - image.style.alt = id; - image.galleryImg = "no"; - if (imgURL) { - image.src = imgURL; - } - - //set generic properties - if (!id) { - id = "OpenLayersDiv" + (Math.random() * 10000 % 10000); - } - if (!position) { - position = "relative"; - } - OpenLayers.Util.modifyDOMElement(image, id, px, sz, position, border); - - return image; -}; - -OpenLayers.Util.alphaHack = function() { - var arVersion = navigator.appVersion.split("MSIE"); - var version = parseFloat(arVersion[1]); - - return ( (document.body.filters) && - (version >= 5.5) && (version < 7) ); -} - -/** -* @param {DOMElement} div Div containing Alpha-adjusted Image -* @param {String} id -* @param {OpenLayers.Pixel} px -* @param {OpenLayers.Size} sz -* @param {String} imgURL -* @param {String} position -* @param {String} border -* @param {String} sizing 'crop', 'scale', or 'image'. Default is "scale" -*/ -OpenLayers.Util.modifyAlphaImageDiv = function(div, id, px, sz, imgURL, - position, border, sizing) { - - OpenLayers.Util.modifyDOMElement(div, id, px, sz); - - var img = div.childNodes[0]; - - if (imgURL) { - img.src = imgURL; - } - OpenLayers.Util.modifyDOMElement(img, div.id + "_innerImage", null, sz, - "relative", border); - - if (OpenLayers.Util.alphaHack()) { - div.style.display = "inline-block"; - if (sizing == null) { - sizing = "scale"; - } - div.style.filter = "progid:DXImageTransform.Microsoft" + - ".AlphaImageLoader(src='" + img.src + "', " + - "sizingMethod='" + sizing + "')"; - img.style.filter = "progid:DXImageTransform.Microsoft" + - ".Alpha(opacity=0)"; - } -}; - -/** -* @param {String} id -* @param {OpenLayers.Pixel} px -* @param {OpenLayers.Size} sz -* @param {String} imgURL -* @param {String} position -* @param {String} border -* @param {String} sizing 'crop', 'scale', or 'image'. Default is "scale" -* -* @returns A DOM Div created with a DOM Image inside it. If the hack is -* needed for transparency in IE, it is added. -* @type DOMElement -*/ -OpenLayers.Util.createAlphaImageDiv = function(id, px, sz, imgURL, - position, border, sizing) { - - var div = OpenLayers.Util.createDiv(); - var img = OpenLayers.Util.createImage(); - div.appendChild(img); - - OpenLayers.Util.modifyAlphaImageDiv(div, id, px, sz, imgURL, - position, border, sizing); - - return div; -}; - - -/** Creates a new hash and copies over all the keys from the -* passed-in object, but storing them under an uppercased -* version of the key at which they were stored. -* -* @param {Object} object -* -* @returns A new Object with all the same keys but uppercased -* @type Object -*/ -OpenLayers.Util.upperCaseObject = function (object) { - var uObject = new Object(); - for (var key in object) { - uObject[key.toUpperCase()] = object[key]; - } - return uObject; -}; - -/** Takes a hash and copies any keys that don't exist from -* another hash, by analogy with Object.extend() from -* Prototype.js. -* -* @param {Object} to -* @param {Object} from -* -* @type Object -*/ -OpenLayers.Util.applyDefaults = function (to, from) { - for (var key in from) { - if (to[key] == null) { - to[key] = from[key]; - } - } - return to; -}; - -/** -* @param {Object} params -* -* @returns a concatenation of the properties of an object in -* http parameter notation. -* (ex. "key1=value1&key2=value2&key3=value3") -* @type String -*/ -OpenLayers.Util.getParameterString = function(params) { - paramsArray = new Array(); - - for (var key in params) { - var value = params[key]; - //skip functions - if (typeof value == 'function') continue; - - paramsArray.push(key + "=" + value); - } - - return paramsArray.join("&"); -}; - -/** -* @returns The fully formatted image location string -* @type String -*/ -OpenLayers.Util.getImagesLocation = function() { - return OpenLayers._getScriptLocation() + "img/"; -}; - - - -/** These could/should be made namespace aware? -* -* @param {} p -* @param {str} tagName -* -* @return {Array} -*/ -OpenLayers.Util.getNodes=function(p, tagName) { - var nodes = Try.these( - function () { - return OpenLayers.Util._getNodes(p.documentElement.childNodes, - tagName); - }, - function () { - return OpenLayers.Util._getNodes(p.childNodes, tagName); - } - ); - return nodes; -}; - -/** -* @param {Array} nodes -* @param {str} tagName -* -* @return {Array} -*/ -OpenLayers.Util._getNodes=function(nodes, tagName) { - var retArray = new Array(); - for (var i=0;i 0)) - { - if (!index) { - index=0; - } - if (result[index].childNodes.length > 1) { - return result.childNodes[1].nodeValue; - } - else if (result[index].childNodes.length == 1) { - return result[index].firstChild.nodeValue; - } - } else { - return ""; - } -}; - -/** -* @param {Event} evt -* @param {HTMLDivElement} div -* -* @return {boolean} -*/ -OpenLayers.Util.mouseLeft = function (evt, div) { - // start with the element to which the mouse has moved - var target = (evt.relatedTarget) ? evt.relatedTarget : evt.toElement; - // walk up the DOM tree. - while (target != div && target != null) { - target = target.parentNode; - } - // if the target we stop at isn't the div, then we've left the div. - return (target != div); -}; - -OpenLayers.Util.rad = function(x) {return x*Math.PI/180;}; -OpenLayers.Util.distVincenty=function(p1, p2) { - var a = 6378137, b = 6356752.3142, f = 1/298.257223563; - var L = OpenLayers.Util.rad(p2.lon - p1.lon); - var U1 = Math.atan((1-f) * Math.tan(OpenLayers.Util.rad(p1.lat))); - var U2 = Math.atan((1-f) * Math.tan(OpenLayers.Util.rad(p2.lat))); - var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); - var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); - var lambda = L, lambdaP = 2*Math.PI; - var iterLimit = 20; - while (Math.abs(lambda-lambdaP) > 1e-12 && --iterLimit>0) { - var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); - var sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + - (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda)); - if (sinSigma==0) return 0; // co-incident points - var cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda; - var sigma = Math.atan2(sinSigma, cosSigma); - var alpha = Math.asin(cosU1 * cosU2 * sinLambda / sinSigma); - var cosSqAlpha = Math.cos(alpha) * Math.cos(alpha); - var cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha; - var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); - lambdaP = lambda; - lambda = L + (1-C) * f * Math.sin(alpha) * - (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))); - } - if (iterLimit==0) return NaN // formula failed to converge - var uSq = cosSqAlpha * (a*a - b*b) / (b*b); - var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); - var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))); - var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- - B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))); - var s = b*A*(sigma-deltaSigma); - var d = s.toFixed(3)/1000; // round to 1mm precision - return d; -}; diff --git a/public/lib/Prototype.js b/public/lib/Prototype.js deleted file mode 100644 index 07baf1030..000000000 --- a/public/lib/Prototype.js +++ /dev/null @@ -1,1781 +0,0 @@ -/* Prototype JavaScript framework, version 1.4.0 - * (c) 2005 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://prototype.conio.net/ - * -/*--------------------------------------------------------------------------*/ - -var Prototype = { - Version: '1.4.0', - ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', - - emptyFunction: function() {}, - K: function(x) {return x} -} - -var Class = { - create: function() { - return function() { - this.initialize.apply(this, arguments); - } - } -} - -var Abstract = new Object(); - -Object.extend = function(destination, source) { - for (property in source) { - destination[property] = source[property]; - } - return destination; -} - -Object.inspect = function(object) { - try { - if (object == undefined) return 'undefined'; - if (object == null) return 'null'; - return object.inspect ? object.inspect() : object.toString(); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } -} - -Function.prototype.bind = function() { - var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); - } -} - -Function.prototype.bindAsEventListener = function(object) { - var __method = this; - return function(event) { - return __method.call(object, event || window.event); - } -} - -Object.extend(Number.prototype, { - toColorPart: function() { - var digits = this.toString(16); - if (this < 16) return '0' + digits; - return digits; - }, - - succ: function() { - return this + 1; - }, - - times: function(iterator) { - $R(0, this, true).each(iterator); - return this; - } -}); - -var Try = { - these: function() { - var returnValue; - - for (var i = 0; i < arguments.length; i++) { - var lambda = arguments[i]; - try { - returnValue = lambda(); - break; - } catch (e) {} - } - - return returnValue; - } -} - -/*--------------------------------------------------------------------------*/ - -var PeriodicalExecuter = Class.create(); -PeriodicalExecuter.prototype = { - initialize: function(callback, frequency) { - this.callback = callback; - this.frequency = frequency; - this.currentlyExecuting = false; - - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - if (!this.currentlyExecuting) { - try { - this.currentlyExecuting = true; - this.callback(); - } finally { - this.currentlyExecuting = false; - } - } - } -} - -/*--------------------------------------------------------------------------*/ - -function $() { - var elements = new Array(); - - for (var i = 0; i < arguments.length; i++) { - var element = arguments[i]; - if (typeof element == 'string') - element = document.getElementById(element); - - if (arguments.length == 1) - return element; - - elements.push(element); - } - - return elements; -} -Object.extend(String.prototype, { - stripTags: function() { - return this.replace(/<\/?[^>]+>/gi, ''); - }, - - stripScripts: function() { - return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - }, - - extractScripts: function() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); - var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); - return (this.match(matchAll) || []).map(function(scriptTag) { - return (scriptTag.match(matchOne) || ['', ''])[1]; - }); - }, - - evalScripts: function() { - return this.extractScripts().map(eval); - }, - - escapeHTML: function() { - var div = document.createElement('div'); - var text = document.createTextNode(this); - div.appendChild(text); - return div.innerHTML; - }, - - unescapeHTML: function() { - var div = document.createElement('div'); - div.innerHTML = this.stripTags(); - return div.childNodes[0] ? div.childNodes[0].nodeValue : ''; - }, - - toQueryParams: function() { - var pairs = this.match(/^\??(.*)$/)[1].split('&'); - return pairs.inject({}, function(params, pairString) { - var pair = pairString.split('='); - params[pair[0]] = pair[1]; - return params; - }); - }, - - toArray: function() { - return this.split(''); - }, - - camelize: function() { - var oStringList = this.split('-'); - if (oStringList.length == 1) return oStringList[0]; - - var camelizedString = this.indexOf('-') == 0 - ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) - : oStringList[0]; - - for (var i = 1, len = oStringList.length; i < len; i++) { - var s = oStringList[i]; - camelizedString += s.charAt(0).toUpperCase() + s.substring(1); - } - - return camelizedString; - }, - - inspect: function() { - return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'"; - } -}); - -String.prototype.parseQuery = String.prototype.toQueryParams; - -var $break = new Object(); -var $continue = new Object(); - -var Enumerable = { - each: function(iterator) { - var index = 0; - try { - this._each(function(value) { - try { - iterator(value, index++); - } catch (e) { - if (e != $continue) throw e; - } - }); - } catch (e) { - if (e != $break) throw e; - } - }, - - all: function(iterator) { - var result = true; - this.each(function(value, index) { - result = result && !!(iterator || Prototype.K)(value, index); - if (!result) throw $break; - }); - return result; - }, - - any: function(iterator) { - var result = true; - this.each(function(value, index) { - if (result = !!(iterator || Prototype.K)(value, index)) - throw $break; - }); - return result; - }, - - collect: function(iterator) { - var results = []; - this.each(function(value, index) { - results.push(iterator(value, index)); - }); - return results; - }, - - detect: function (iterator) { - var result; - this.each(function(value, index) { - if (iterator(value, index)) { - result = value; - throw $break; - } - }); - return result; - }, - - findAll: function(iterator) { - var results = []; - this.each(function(value, index) { - if (iterator(value, index)) - results.push(value); - }); - return results; - }, - - grep: function(pattern, iterator) { - var results = []; - this.each(function(value, index) { - var stringValue = value.toString(); - if (stringValue.match(pattern)) - results.push((iterator || Prototype.K)(value, index)); - }) - return results; - }, - - include: function(object) { - var found = false; - this.each(function(value) { - if (value == object) { - found = true; - throw $break; - } - }); - return found; - }, - - inject: function(memo, iterator) { - this.each(function(value, index) { - memo = iterator(memo, value, index); - }); - return memo; - }, - - invoke: function(method) { - var args = $A(arguments).slice(1); - return this.collect(function(value) { - return value[method].apply(value, args); - }); - }, - - max: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (value >= (result || value)) - result = value; - }); - return result; - }, - - min: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (value <= (result || value)) - result = value; - }); - return result; - }, - - partition: function(iterator) { - var trues = [], falses = []; - this.each(function(value, index) { - ((iterator || Prototype.K)(value, index) ? - trues : falses).push(value); - }); - return [trues, falses]; - }, - - pluck: function(property) { - var results = []; - this.each(function(value, index) { - results.push(value[property]); - }); - return results; - }, - - reject: function(iterator) { - var results = []; - this.each(function(value, index) { - if (!iterator(value, index)) - results.push(value); - }); - return results; - }, - - sortBy: function(iterator) { - return this.collect(function(value, index) { - return {value: value, criteria: iterator(value, index)}; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }).pluck('value'); - }, - - toArray: function() { - return this.collect(Prototype.K); - }, - - zip: function() { - var iterator = Prototype.K, args = $A(arguments); - if (typeof args.last() == 'function') - iterator = args.pop(); - - var collections = [this].concat(args).map($A); - return this.map(function(value, index) { - iterator(value = collections.pluck(index)); - return value; - }); - }, - - inspect: function() { - return '#'; - } -} - -Object.extend(Enumerable, { - map: Enumerable.collect, - find: Enumerable.detect, - select: Enumerable.findAll, - member: Enumerable.include, - entries: Enumerable.toArray -}); -var $A = Array.from = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) { - return iterable.toArray(); - } else { - var results = []; - for (var i = 0; i < iterable.length; i++) - results.push(iterable[i]); - return results; - } -} - -Object.extend(Array.prototype, Enumerable); - -Array.prototype._reverse = Array.prototype.reverse; - -Object.extend(Array.prototype, { - _each: function(iterator) { - for (var i = 0; i < this.length; i++) - iterator(this[i]); - }, - - clear: function() { - this.length = 0; - return this; - }, - - first: function() { - return this[0]; - }, - - last: function() { - return this[this.length - 1]; - }, - - compact: function() { - return this.select(function(value) { - return value != undefined || value != null; - }); - }, - - flatten: function() { - return this.inject([], function(array, value) { - return array.concat(value.constructor == Array ? - value.flatten() : [value]); - }); - }, - - without: function() { - var values = $A(arguments); - return this.select(function(value) { - return !values.include(value); - }); - }, - - indexOf: function(object) { - for (var i = 0; i < this.length; i++) - if (this[i] == object) return i; - return -1; - }, - - reverse: function(inline) { - return (inline !== false ? this : this.toArray())._reverse(); - }, - - shift: function() { - var result = this[0]; - for (var i = 0; i < this.length - 1; i++) - this[i] = this[i + 1]; - this.length--; - return result; - }, - - inspect: function() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - } -}); -var Hash = { - _each: function(iterator) { - for (key in this) { - var value = this[key]; - if (typeof value == 'function') continue; - - var pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - }, - - keys: function() { - return this.pluck('key'); - }, - - values: function() { - return this.pluck('value'); - }, - - merge: function(hash) { - return $H(hash).inject($H(this), function(mergedHash, pair) { - mergedHash[pair.key] = pair.value; - return mergedHash; - }); - }, - - toQueryString: function() { - return this.map(function(pair) { - return pair.map(encodeURIComponent).join('='); - }).join('&'); - }, - - inspect: function() { - return '#'; - } -} - -function $H(object) { - var hash = Object.extend({}, object || {}); - Object.extend(hash, Enumerable); - Object.extend(hash, Hash); - return hash; -} -ObjectRange = Class.create(); -Object.extend(ObjectRange.prototype, Enumerable); -Object.extend(ObjectRange.prototype, { - initialize: function(start, end, exclusive) { - this.start = start; - this.end = end; - this.exclusive = exclusive; - }, - - _each: function(iterator) { - var value = this.start; - do { - iterator(value); - value = value.succ(); - } while (this.include(value)); - }, - - include: function(value) { - if (value < this.start) - return false; - if (this.exclusive) - return value < this.end; - return value <= this.end; - } -}); - -var $R = function(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -} - -var Ajax = { - getTransport: function() { - return Try.these( - function() {return new ActiveXObject('Msxml2.XMLHTTP')}, - function() {return new ActiveXObject('Microsoft.XMLHTTP')}, - function() {return new XMLHttpRequest()} - ) || false; - }, - - activeRequestCount: 0 -} - -Ajax.Responders = { - responders: [], - - _each: function(iterator) { - this.responders._each(iterator); - }, - - register: function(responderToAdd) { - if (!this.include(responderToAdd)) - this.responders.push(responderToAdd); - }, - - unregister: function(responderToRemove) { - this.responders = this.responders.without(responderToRemove); - }, - - dispatch: function(callback, request, transport, json) { - this.each(function(responder) { - if (responder[callback] && typeof responder[callback] == 'function') { - try { - responder[callback].apply(responder, [request, transport, json]); - } catch (e) {} - } - }); - } -}; - -Object.extend(Ajax.Responders, Enumerable); - -Ajax.Responders.register({ - onCreate: function() { - Ajax.activeRequestCount++; - }, - - onComplete: function() { - Ajax.activeRequestCount--; - } -}); - -Ajax.Base = function() {}; -Ajax.Base.prototype = { - setOptions: function(options) { - this.options = { - method: 'post', - asynchronous: true, - parameters: '' - } - Object.extend(this.options, options || {}); - }, - - responseIsSuccess: function() { - return this.transport.status == undefined - || this.transport.status == 0 - || (this.transport.status >= 200 && this.transport.status < 300); - }, - - responseIsFailure: function() { - return !this.responseIsSuccess(); - } -} - -Ajax.Request = Class.create(); -Ajax.Request.Events = - ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; - -Ajax.Request.prototype = Object.extend(new Ajax.Base(), { - initialize: function(url, options) { - this.transport = Ajax.getTransport(); - this.setOptions(options); - this.request(url); - }, - - request: function(url) { - var parameters = this.options.parameters || ''; - if (parameters.length > 0) parameters += '&_='; - - try { - this.url = url; - if (this.options.method == 'get' && parameters.length > 0) - this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; - - Ajax.Responders.dispatch('onCreate', this, this.transport); - - this.transport.open(this.options.method, this.url, - this.options.asynchronous); - - if (this.options.asynchronous) { - this.transport.onreadystatechange = this.onStateChange.bind(this); - setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); - } - - this.setRequestHeaders(); - - var body = this.options.postBody ? this.options.postBody : parameters; - this.transport.send(this.options.method == 'post' ? body : null); - - } catch (e) { - this.dispatchException(e); - } - }, - - setRequestHeaders: function() { - var requestHeaders = - ['X-Requested-With', 'XMLHttpRequest', - 'X-Prototype-Version', Prototype.Version]; - - if (this.options.method == 'post') { - requestHeaders.push('Content-type', - 'application/x-www-form-urlencoded'); - - /* Force "Connection: close" for Mozilla browsers to work around - * a bug where XMLHttpReqeuest sends an incorrect Content-length - * header. See Mozilla Bugzilla #246651. - */ - if (this.transport.overrideMimeType) - requestHeaders.push('Connection', 'close'); - } - - if (this.options.requestHeaders) - requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); - - for (var i = 0; i < requestHeaders.length; i += 2) - this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); - }, - - onStateChange: function() { - var readyState = this.transport.readyState; - if (readyState != 1) - this.respondToReadyState(this.transport.readyState); - }, - - header: function(name) { - try { - return this.transport.getResponseHeader(name); - } catch (e) {} - }, - - evalJSON: function() { - try { - return eval(this.header('X-JSON')); - } catch (e) {} - }, - - evalResponse: function() { - try { - return eval(this.transport.responseText); - } catch (e) { - this.dispatchException(e); - } - }, - - respondToReadyState: function(readyState) { - var event = Ajax.Request.Events[readyState]; - var transport = this.transport, json = this.evalJSON(); - - if (event == 'Complete') { - try { - (this.options['on' + this.transport.status] - || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] - || Prototype.emptyFunction)(transport, json); - } catch (e) { - this.dispatchException(e); - } - - if ((this.header('Content-type') || '').match(/^text\/javascript/i)) - this.evalResponse(); - } - - try { - (this.options['on' + event] || Prototype.emptyFunction)(transport, json); - Ajax.Responders.dispatch('on' + event, this, transport, json); - } catch (e) { - this.dispatchException(e); - } - - /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ - if (event == 'Complete') - this.transport.onreadystatechange = Prototype.emptyFunction; - }, - - dispatchException: function(exception) { - (this.options.onException || Prototype.emptyFunction)(this, exception); - Ajax.Responders.dispatch('onException', this, exception); - } -}); - -Ajax.Updater = Class.create(); - -Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { - initialize: function(container, url, options) { - this.containers = { - success: container.success ? $(container.success) : $(container), - failure: container.failure ? $(container.failure) : - (container.success ? null : $(container)) - } - - this.transport = Ajax.getTransport(); - this.setOptions(options); - - var onComplete = this.options.onComplete || Prototype.emptyFunction; - this.options.onComplete = (function(transport, object) { - this.updateContent(); - onComplete(transport, object); - }).bind(this); - - this.request(url); - }, - - updateContent: function() { - var receiver = this.responseIsSuccess() ? - this.containers.success : this.containers.failure; - var response = this.transport.responseText; - - if (!this.options.evalScripts) - response = response.stripScripts(); - - if (receiver) { - if (this.options.insertion) { - new this.options.insertion(receiver, response); - } else { - Element.update(receiver, response); - } - } - - if (this.responseIsSuccess()) { - if (this.onComplete) - setTimeout(this.onComplete.bind(this), 10); - } - } -}); - -Ajax.PeriodicalUpdater = Class.create(); -Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { - initialize: function(container, url, options) { - this.setOptions(options); - this.onComplete = this.options.onComplete; - - this.frequency = (this.options.frequency || 2); - this.decay = (this.options.decay || 1); - - this.updater = {}; - this.container = container; - this.url = url; - - this.start(); - }, - - start: function() { - this.options.onComplete = this.updateComplete.bind(this); - this.onTimerEvent(); - }, - - stop: function() { - this.updater.onComplete = undefined; - clearTimeout(this.timer); - (this.onComplete || Prototype.emptyFunction).apply(this, arguments); - }, - - updateComplete: function(request) { - if (this.options.decay) { - this.decay = (request.responseText == this.lastText ? - this.decay * this.options.decay : 1); - - this.lastText = request.responseText; - } - this.timer = setTimeout(this.onTimerEvent.bind(this), - this.decay * this.frequency * 1000); - }, - - onTimerEvent: function() { - this.updater = new Ajax.Updater(this.container, this.url, this.options); - } -}); -document.getElementsByClassName = function(className, parentElement) { - var children = ($(parentElement) || document.body).getElementsByTagName('*'); - return $A(children).inject([], function(elements, child) { - if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) - elements.push(child); - return elements; - }); -} - -/*--------------------------------------------------------------------------*/ - -if (!window.Element) { - var Element = new Object(); -} - -Object.extend(Element, { - visible: function(element) { - return $(element).style.display != 'none'; - }, - - toggle: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $(arguments[i]); - Element[Element.visible(element) ? 'hide' : 'show'](element); - } - }, - - hide: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $(arguments[i]); - element.style.display = 'none'; - } - }, - - show: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $(arguments[i]); - element.style.display = ''; - } - }, - - remove: function(element) { - element = $(element); - element.parentNode.removeChild(element); - }, - - update: function(element, html) { - $(element).innerHTML = html.stripScripts(); - setTimeout(function() {html.evalScripts()}, 10); - }, - - getHeight: function(element) { - element = $(element); - return element.offsetHeight; - }, - - classNames: function(element) { - return new Element.ClassNames(element); - }, - - hasClassName: function(element, className) { - if (!(element = $(element))) return; - return Element.classNames(element).include(className); - }, - - addClassName: function(element, className) { - if (!(element = $(element))) return; - return Element.classNames(element).add(className); - }, - - removeClassName: function(element, className) { - if (!(element = $(element))) return; - return Element.classNames(element).remove(className); - }, - - // removes whitespace-only text node children - cleanWhitespace: function(element) { - element = $(element); - for (var i = 0; i < element.childNodes.length; i++) { - var node = element.childNodes[i]; - if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) - Element.remove(node); - } - }, - - empty: function(element) { - return $(element).innerHTML.match(/^\s*$/); - }, - - scrollTo: function(element) { - element = $(element); - var x = element.x ? element.x : element.offsetLeft, - y = element.y ? element.y : element.offsetTop; - window.scrollTo(x, y); - }, - - getStyle: function(element, style) { - element = $(element); - var value = element.style[style.camelize()]; - if (!value) { - if (document.defaultView && document.defaultView.getComputedStyle) { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css.getPropertyValue(style) : null; - } else if (element.currentStyle) { - value = element.currentStyle[style.camelize()]; - } - } - - if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) - if (Element.getStyle(element, 'position') == 'static') value = 'auto'; - - return value == 'auto' ? null : value; - }, - - setStyle: function(element, style) { - element = $(element); - for (name in style) - element.style[name.camelize()] = style[name]; - }, - - getDimensions: function(element) { - element = $(element); - if (Element.getStyle(element, 'display') != 'none') - return {width: element.offsetWidth, height: element.offsetHeight}; - - // All *Width and *Height properties give 0 on elements with display none, - // so enable the element temporarily - var els = element.style; - var originalVisibility = els.visibility; - var originalPosition = els.position; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = ''; - var originalWidth = element.clientWidth; - var originalHeight = element.clientHeight; - els.display = 'none'; - els.position = originalPosition; - els.visibility = originalVisibility; - return {width: originalWidth, height: originalHeight}; - }, - - makePositioned: function(element) { - element = $(element); - var pos = Element.getStyle(element, 'position'); - if (pos == 'static' || !pos) { - element._madePositioned = true; - element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, when an - // element is position relative but top and left have not been defined - if (window.opera) { - element.style.top = 0; - element.style.left = 0; - } - } - }, - - undoPositioned: function(element) { - element = $(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = - element.style.top = - element.style.left = - element.style.bottom = - element.style.right = ''; - } - }, - - makeClipping: function(element) { - element = $(element); - if (element._overflow) return; - element._overflow = element.style.overflow; - if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') - element.style.overflow = 'hidden'; - }, - - undoClipping: function(element) { - element = $(element); - if (element._overflow) return; - element.style.overflow = element._overflow; - element._overflow = undefined; - } -}); - -var Toggle = new Object(); -Toggle.display = Element.toggle; - -/*--------------------------------------------------------------------------*/ - -Abstract.Insertion = function(adjacency) { - this.adjacency = adjacency; -} - -Abstract.Insertion.prototype = { - initialize: function(element, content) { - this.element = $(element); - this.content = content.stripScripts(); - - if (this.adjacency && this.element.insertAdjacentHTML) { - try { - this.element.insertAdjacentHTML(this.adjacency, this.content); - } catch (e) { - if (this.element.tagName.toLowerCase() == 'tbody') { - this.insertContent(this.contentFromAnonymousTable()); - } else { - throw e; - } - } - } else { - this.range = this.element.ownerDocument.createRange(); - if (this.initializeRange) this.initializeRange(); - this.insertContent([this.range.createContextualFragment(this.content)]); - } - - setTimeout(function() {content.evalScripts()}, 10); - }, - - contentFromAnonymousTable: function() { - var div = document.createElement('div'); - div.innerHTML = '' + this.content + '
'; - return $A(div.childNodes[0].childNodes[0].childNodes); - } -} - -var Insertion = new Object(); - -Insertion.Before = Class.create(); -Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { - initializeRange: function() { - this.range.setStartBefore(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, this.element); - }).bind(this)); - } -}); - -Insertion.Top = Class.create(); -Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(true); - }, - - insertContent: function(fragments) { - fragments.reverse(false).each((function(fragment) { - this.element.insertBefore(fragment, this.element.firstChild); - }).bind(this)); - } -}); - -Insertion.Bottom = Class.create(); -Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.appendChild(fragment); - }).bind(this)); - } -}); - -Insertion.After = Class.create(); -Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { - initializeRange: function() { - this.range.setStartAfter(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, - this.element.nextSibling); - }).bind(this)); - } -}); - -/*--------------------------------------------------------------------------*/ - -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { - initialize: function(element) { - this.element = $(element); - }, - - _each: function(iterator) { - this.element.className.split(/\s+/).select(function(name) { - return name.length > 0; - })._each(iterator); - }, - - set: function(className) { - this.element.className = className; - }, - - add: function(classNameToAdd) { - if (this.include(classNameToAdd)) return; - this.set(this.toArray().concat(classNameToAdd).join(' ')); - }, - - remove: function(classNameToRemove) { - if (!this.include(classNameToRemove)) return; - this.set(this.select(function(className) { - return className != classNameToRemove; - }).join(' ')); - }, - - toString: function() { - return this.toArray().join(' '); - } -} - -Object.extend(Element.ClassNames.prototype, Enumerable); -var Field = { - clear: function() { - for (var i = 0; i < arguments.length; i++) - $(arguments[i]).value = ''; - }, - - focus: function(element) { - $(element).focus(); - }, - - present: function() { - for (var i = 0; i < arguments.length; i++) - if ($(arguments[i]).value == '') return false; - return true; - }, - - select: function(element) { - $(element).select(); - }, - - activate: function(element) { - element = $(element); - element.focus(); - if (element.select) - element.select(); - } -} - -/*--------------------------------------------------------------------------*/ - -var Form = { - serialize: function(form) { - var elements = Form.getElements($(form)); - var queryComponents = new Array(); - - for (var i = 0; i < elements.length; i++) { - var queryComponent = Form.Element.serialize(elements[i]); - if (queryComponent) - queryComponents.push(queryComponent); - } - - return queryComponents.join('&'); - }, - - getElements: function(form) { - form = $(form); - var elements = new Array(); - - for (tagName in Form.Element.Serializers) { - var tagElements = form.getElementsByTagName(tagName); - for (var j = 0; j < tagElements.length; j++) - elements.push(tagElements[j]); - } - return elements; - }, - - getInputs: function(form, typeName, name) { - form = $(form); - var inputs = form.getElementsByTagName('input'); - - if (!typeName && !name) - return inputs; - - var matchingInputs = new Array(); - for (var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - if ((typeName && input.type != typeName) || - (name && input.name != name)) - continue; - matchingInputs.push(input); - } - - return matchingInputs; - }, - - disable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.blur(); - element.disabled = 'true'; - } - }, - - enable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.disabled = ''; - } - }, - - findFirstElement: function(form) { - return Form.getElements(form).find(function(element) { - return element.type != 'hidden' && !element.disabled && - ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); - }); - }, - - focusFirstElement: function(form) { - Field.activate(Form.findFirstElement(form)); - }, - - reset: function(form) { - $(form).reset(); - } -} - -Form.Element = { - serialize: function(element) { - element = $(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) { - var key = encodeURIComponent(parameter[0]); - if (key.length == 0) return; - - if (parameter[1].constructor != Array) - parameter[1] = [parameter[1]]; - - return parameter[1].map(function(value) { - return key + '=' + encodeURIComponent(value); - }).join('&'); - } - }, - - getValue: function(element) { - element = $(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) - return parameter[1]; - } -} - -Form.Element.Serializers = { - input: function(element) { - switch (element.type.toLowerCase()) { - case 'submit': - case 'hidden': - case 'password': - case 'text': - return Form.Element.Serializers.textarea(element); - case 'checkbox': - case 'radio': - return Form.Element.Serializers.inputSelector(element); - } - return false; - }, - - inputSelector: function(element) { - if (element.checked) - return [element.name, element.value]; - }, - - textarea: function(element) { - return [element.name, element.value]; - }, - - select: function(element) { - return Form.Element.Serializers[element.type == 'select-one' ? - 'selectOne' : 'selectMany'](element); - }, - - selectOne: function(element) { - var value = '', opt, index = element.selectedIndex; - if (index >= 0) { - opt = element.options[index]; - value = opt.value; - if (!value && !('value' in opt)) - value = opt.text; - } - return [element.name, value]; - }, - - selectMany: function(element) { - var value = new Array(); - for (var i = 0; i < element.length; i++) { - var opt = element.options[i]; - if (opt.selected) { - var optValue = opt.value; - if (!optValue && !('value' in opt)) - optValue = opt.text; - value.push(optValue); - } - } - return [element.name, value]; - } -} - -/*--------------------------------------------------------------------------*/ - -var $F = Form.Element.getValue; - -/*--------------------------------------------------------------------------*/ - -Abstract.TimedObserver = function() {} -Abstract.TimedObserver.prototype = { - initialize: function(element, frequency, callback) { - this.frequency = frequency; - this.element = $(element); - this.callback = callback; - - this.lastValue = this.getValue(); - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - } -} - -Form.Element.Observer = Class.create(); -Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.Observer = Class.create(); -Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); - -/*--------------------------------------------------------------------------*/ - -Abstract.EventObserver = function() {} -Abstract.EventObserver.prototype = { - initialize: function(element, callback) { - this.element = $(element); - this.callback = callback; - - this.lastValue = this.getValue(); - if (this.element.tagName.toLowerCase() == 'form') - this.registerFormCallbacks(); - else - this.registerCallback(this.element); - }, - - onElementEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - }, - - registerFormCallbacks: function() { - var elements = Form.getElements(this.element); - for (var i = 0; i < elements.length; i++) - this.registerCallback(elements[i]); - }, - - registerCallback: function(element) { - if (element.type) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - Event.observe(element, 'click', this.onElementEvent.bind(this)); - break; - case 'password': - case 'text': - case 'textarea': - case 'select-one': - case 'select-multiple': - Event.observe(element, 'change', this.onElementEvent.bind(this)); - break; - } - } - } -} - -Form.Element.EventObserver = Class.create(); -Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.EventObserver = Class.create(); -Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); -if (!window.Event) { - var Event = new Object(); -} - -Object.extend(Event, { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - - element: function(event) { - return event.target || event.srcElement; - }, - - isLeftClick: function(event) { - return (((event.which) && (event.which == 1)) || - ((event.button) && (event.button == 1))); - }, - - pointerX: function(event) { - return event.pageX || (event.clientX + - (document.documentElement.scrollLeft || document.body.scrollLeft)); - }, - - pointerY: function(event) { - return event.pageY || (event.clientY + - (document.documentElement.scrollTop || document.body.scrollTop)); - }, - - stop: function(event) { - if (event.preventDefault) { - event.preventDefault(); - event.stopPropagation(); - } else { - event.returnValue = false; - event.cancelBubble = true; - } - }, - - // find the first node with the given tagName, starting from the - // node the event was triggered on; traverses the DOM upwards - findElement: function(event, tagName) { - var element = Event.element(event); - while (element.parentNode && (!element.tagName || - (element.tagName.toUpperCase() != tagName.toUpperCase()))) - element = element.parentNode; - return element; - }, - - observers: false, - - _observeAndCache: function(element, name, observer, useCapture) { - if (!this.observers) this.observers = []; - if (element.addEventListener) { - this.observers.push([element, name, observer, useCapture]); - element.addEventListener(name, observer, useCapture); - } else if (element.attachEvent) { - this.observers.push([element, name, observer, useCapture]); - element.attachEvent('on' + name, observer); - } - }, - - unloadCache: function() { - if (!Event.observers) return; - for (var i = 0; i < Event.observers.length; i++) { - Event.stopObserving.apply(this, Event.observers[i]); - Event.observers[i][0] = null; - } - Event.observers = false; - }, - - observe: function(elementParam, name, observer, useCapture) { - var element = $(elementParam); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.attachEvent)) - name = 'keydown'; - - this._observeAndCache(element, name, observer, useCapture); - }, - - stopObserving: function(elementParam, name, observer, useCapture) { - var element = $(elementParam); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.detachEvent)) - name = 'keydown'; - - if (element.removeEventListener) { - element.removeEventListener(name, observer, useCapture); - } else if (element.detachEvent) { - element.detachEvent('on' + name, observer); - } - } -}); - -/* prevent memory leaks in IE */ -Event.observe(window, 'unload', Event.unloadCache, false); -var Position = { - // set to true if needed, warning: firefox performance problems - // NOT neeeded for page scrolling, only if draggable contained in - // scrollable elements - includeScrollOffsets: false, - - // must be called before calling withinIncludingScrolloffset, every time the - // page is scrolled - prepare: function() { - this.deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - this.deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - }, - - realOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return [valueL, valueT]; - }, - - cumulativeOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return [valueL, valueT]; - }, - - positionedOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - p = Element.getStyle(element, 'position'); - if (p == 'relative' || p == 'absolute') break; - } - } while (element); - return [valueL, valueT]; - }, - - offsetParent: function(element) { - if (element.offsetParent) return element.offsetParent; - if (element == document.body) return element; - - while ((element = element.parentNode) && element != document.body) - if (Element.getStyle(element, 'position') != 'static') - return element; - - return document.body; - }, - - // caches x/y coordinate pair to use with overlap - within: function(element, x, y) { - if (this.includeScrollOffsets) - return this.withinIncludingScrolloffsets(element, x, y); - this.xcomp = x; - this.ycomp = y; - this.offset = this.cumulativeOffset(element); - - return (y >= this.offset[1] && - y < this.offset[1] + element.offsetHeight && - x >= this.offset[0] && - x < this.offset[0] + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function(element, x, y) { - var offsetcache = this.realOffset(element); - - this.xcomp = x + offsetcache[0] - this.deltaX; - this.ycomp = y + offsetcache[1] - this.deltaY; - this.offset = this.cumulativeOffset(element); - - return (this.ycomp >= this.offset[1] && - this.ycomp < this.offset[1] + element.offsetHeight && - this.xcomp >= this.offset[0] && - this.xcomp < this.offset[0] + element.offsetWidth); - }, - - // within must be called directly before - overlap: function(mode, element) { - if (!mode) return 0; - if (mode == 'vertical') - return ((this.offset[1] + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - if (mode == 'horizontal') - return ((this.offset[0] + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - }, - - clone: function(source, target) { - source = $(source); - target = $(target); - target.style.position = 'absolute'; - var offsets = this.cumulativeOffset(source); - target.style.top = offsets[1] + 'px'; - target.style.left = offsets[0] + 'px'; - target.style.width = source.offsetWidth + 'px'; - target.style.height = source.offsetHeight + 'px'; - }, - - page: function(forElement) { - var valueT = 0, valueL = 0; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - // Safari fix - if (element.offsetParent==document.body) - if (Element.getStyle(element,'position')=='absolute') break; - - } while (element = element.offsetParent); - - element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - - return [valueL, valueT]; - }, - - clone: function(source, target) { - var options = Object.extend({ - setLeft: true, - setTop: true, - setWidth: true, - setHeight: true, - offsetTop: 0, - offsetLeft: 0 - }, arguments[2] || {}) - - // find page position of source - source = $(source); - var p = Position.page(source); - - // find coordinate system to use - target = $(target); - var delta = [0, 0]; - var parent = null; - // delta [0,0] will do fine with position: fixed elements, - // position:absolute needs offsetParent deltas - if (Element.getStyle(target,'position') == 'absolute') { - parent = Position.offsetParent(target); - delta = Position.page(parent); - } - - // correct by body offsets (fixes Safari) - if (parent == document.body) { - delta[0] -= document.body.offsetLeft; - delta[1] -= document.body.offsetTop; - } - - // set position - if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; - if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; - if(options.setWidth) target.style.width = source.offsetWidth + 'px'; - if(options.setHeight) target.style.height = source.offsetHeight + 'px'; - }, - - absolutize: function(element) { - element = $(element); - if (element.style.position == 'absolute') return; - Position.prepare(); - - var offsets = Position.positionedOffset(element); - var top = offsets[1]; - var left = offsets[0]; - var width = element.clientWidth; - var height = element.clientHeight; - - element._originalLeft = left - parseFloat(element.style.left || 0); - element._originalTop = top - parseFloat(element.style.top || 0); - element._originalWidth = element.style.width; - element._originalHeight = element.style.height; - - element.style.position = 'absolute'; - element.style.top = top + 'px';; - element.style.left = left + 'px';; - element.style.width = width + 'px';; - element.style.height = height + 'px';; - }, - - relativize: function(element) { - element = $(element); - if (element.style.position == 'relative') return; - Position.prepare(); - - element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); - var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); - - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.height = element._originalHeight; - element.style.width = element._originalWidth; - } -} - -// Safari returns margins on body which is incorrect if the child is absolutely -// positioned. For performance reasons, redefine Position.cumulativeOffset for -// KHTML/WebKit only. -if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - Position.cumulativeOffset = function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == document.body) - if (Element.getStyle(element, 'position') == 'absolute') break; - - element = element.offsetParent; - } while (element); - - return [valueL, valueT]; - } -} diff --git a/public/lib/Rico/Color.js b/public/lib/Rico/Color.js deleted file mode 100644 index e61ae2942..000000000 --- a/public/lib/Rico/Color.js +++ /dev/null @@ -1,232 +0,0 @@ -Rico.Color = Class.create(); - -Rico.Color.prototype = { - - initialize: function(red, green, blue) { - this.rgb = { r: red, g : green, b : blue }; - }, - - setRed: function(r) { - this.rgb.r = r; - }, - - setGreen: function(g) { - this.rgb.g = g; - }, - - setBlue: function(b) { - this.rgb.b = b; - }, - - setHue: function(h) { - - // get an HSB model, and set the new hue... - var hsb = this.asHSB(); - hsb.h = h; - - // convert back to RGB... - this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); - }, - - setSaturation: function(s) { - // get an HSB model, and set the new hue... - var hsb = this.asHSB(); - hsb.s = s; - - // convert back to RGB and set values... - this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); - }, - - setBrightness: function(b) { - // get an HSB model, and set the new hue... - var hsb = this.asHSB(); - hsb.b = b; - - // convert back to RGB and set values... - this.rgb = Rico.Color.HSBtoRGB( hsb.h, hsb.s, hsb.b ); - }, - - darken: function(percent) { - var hsb = this.asHSB(); - this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.max(hsb.b - percent,0)); - }, - - brighten: function(percent) { - var hsb = this.asHSB(); - this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.min(hsb.b + percent,1)); - }, - - blend: function(other) { - this.rgb.r = Math.floor((this.rgb.r + other.rgb.r)/2); - this.rgb.g = Math.floor((this.rgb.g + other.rgb.g)/2); - this.rgb.b = Math.floor((this.rgb.b + other.rgb.b)/2); - }, - - isBright: function() { - var hsb = this.asHSB(); - return this.asHSB().b > 0.5; - }, - - isDark: function() { - return ! this.isBright(); - }, - - asRGB: function() { - return "rgb(" + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")"; - }, - - asHex: function() { - return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart(); - }, - - asHSB: function() { - return Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b); - }, - - toString: function() { - return this.asHex(); - } - -}; - -Rico.Color.createFromHex = function(hexCode) { - if(hexCode.length==4) { - var shortHexCode = hexCode; - var hexCode = '#'; - for(var i=1;i<4;i++) hexCode += (shortHexCode.charAt(i) + -shortHexCode.charAt(i)); - } - if ( hexCode.indexOf('#') == 0 ) - hexCode = hexCode.substring(1); - var red = hexCode.substring(0,2); - var green = hexCode.substring(2,4); - var blue = hexCode.substring(4,6); - return new Rico.Color( parseInt(red,16), parseInt(green,16), parseInt(blue,16) ); -} - -/** - * Factory method for creating a color from the background of - * an HTML element. - */ -Rico.Color.createColorFromBackground = function(elem) { - - var actualColor = RicoUtil.getElementsComputedStyle($(elem), "backgroundColor", "background-color"); - - if ( actualColor == "transparent" && elem.parentNode ) - return Rico.Color.createColorFromBackground(elem.parentNode); - - if ( actualColor == null ) - return new Rico.Color(255,255,255); - - if ( actualColor.indexOf("rgb(") == 0 ) { - var colors = actualColor.substring(4, actualColor.length - 1 ); - var colorArray = colors.split(","); - return new Rico.Color( parseInt( colorArray[0] ), - parseInt( colorArray[1] ), - parseInt( colorArray[2] ) ); - - } - else if ( actualColor.indexOf("#") == 0 ) { - return Rico.Color.createFromHex(actualColor); - } - else - return new Rico.Color(255,255,255); -} - -Rico.Color.HSBtoRGB = function(hue, saturation, brightness) { - - var red = 0; - var green = 0; - var blue = 0; - - if (saturation == 0) { - red = parseInt(brightness * 255.0 + 0.5); - green = red; - blue = red; - } - else { - var h = (hue - Math.floor(hue)) * 6.0; - var f = h - Math.floor(h); - var p = brightness * (1.0 - saturation); - var q = brightness * (1.0 - saturation * f); - var t = brightness * (1.0 - (saturation * (1.0 - f))); - - switch (parseInt(h)) { - case 0: - red = (brightness * 255.0 + 0.5); - green = (t * 255.0 + 0.5); - blue = (p * 255.0 + 0.5); - break; - case 1: - red = (q * 255.0 + 0.5); - green = (brightness * 255.0 + 0.5); - blue = (p * 255.0 + 0.5); - break; - case 2: - red = (p * 255.0 + 0.5); - green = (brightness * 255.0 + 0.5); - blue = (t * 255.0 + 0.5); - break; - case 3: - red = (p * 255.0 + 0.5); - green = (q * 255.0 + 0.5); - blue = (brightness * 255.0 + 0.5); - break; - case 4: - red = (t * 255.0 + 0.5); - green = (p * 255.0 + 0.5); - blue = (brightness * 255.0 + 0.5); - break; - case 5: - red = (brightness * 255.0 + 0.5); - green = (p * 255.0 + 0.5); - blue = (q * 255.0 + 0.5); - break; - } - } - - return { r : parseInt(red), g : parseInt(green) , b : parseInt(blue) }; -} - -Rico.Color.RGBtoHSB = function(r, g, b) { - - var hue; - var saturation; - var brightness; - - var cmax = (r > g) ? r : g; - if (b > cmax) - cmax = b; - - var cmin = (r < g) ? r : g; - if (b < cmin) - cmin = b; - - brightness = cmax / 255.0; - if (cmax != 0) - saturation = (cmax - cmin)/cmax; - else - saturation = 0; - - if (saturation == 0) - hue = 0; - else { - var redc = (cmax - r)/(cmax - cmin); - var greenc = (cmax - g)/(cmax - cmin); - var bluec = (cmax - b)/(cmax - cmin); - - if (r == cmax) - hue = bluec - greenc; - else if (g == cmax) - hue = 2.0 + redc - bluec; - else - hue = 4.0 + greenc - redc; - - hue = hue / 6.0; - if (hue < 0) - hue = hue + 1.0; - } - - return { h : hue, s : saturation, b : brightness }; -} - diff --git a/public/lib/Rico/Corner.js b/public/lib/Rico/Corner.js deleted file mode 100644 index b3a2970a1..000000000 --- a/public/lib/Rico/Corner.js +++ /dev/null @@ -1,314 +0,0 @@ -/** -* -* Copyright 2005 Sabre Airline Solutions -* -* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this -* file except in compliance with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software distributed under the -* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -* either express or implied. See the License for the specific language governing permissions -* and limitations under the License. -**/ - - -var Rico = new Object(); -Rico.Corner = { - - round: function(e, options) { - var e = $(e); - this._setOptions(options); - - var color = this.options.color; - if ( this.options.color == "fromElement" ) - color = this._background(e); - - var bgColor = this.options.bgColor; - if ( this.options.bgColor == "fromParent" ) - bgColor = this._background(e.offsetParent); - - this._roundCornersImpl(e, color, bgColor); - }, - - /** This is a helper function to change the background - * color of
that has had Rico rounded corners added. - * - * It seems we cannot just set the background color for the - * outer
so each element used to create the - * corners must have its background color set individually. - * - * @param {DOM} theDiv - A child of the outer
that was - * supplied to the `round` method. - * - * @param {str} newColor - The new background color to use. - */ - changeColor: function(theDiv, newColor) { - - theDiv.style.backgroundColor = newColor; - - var spanElements = theDiv.parentNode.getElementsByTagName("span"); - - for (var currIdx = 0; currIdx < spanElements.length; currIdx++) { - spanElements[currIdx].style.backgroundColor = newColor; - } - }, - - - /** This is a helper function to change the background - * opacity of
that has had Rico rounded corners added. - * - * See changeColor (above) for algorithm explanation - * - * @param {DOM} theDiv A child of the outer
that was - * supplied to the `round` method. - * - * @param {int} newOpacity The new opacity to use (0-1). - */ - changeOpacity: function(theDiv, newOpacity) { - - var mozillaOpacity = newOpacity; - var ieOpacity = 'alpha(opacity=' + newOpacity * 100 + ')'; - - theDiv.style.opacity = mozillaOpacity; - theDiv.style.filter = ieOpacity; - - var spanElements = theDiv.parentNode.getElementsByTagName("span"); - - for (var currIdx = 0; currIdx < spanElements.length; currIdx++) { - spanElements[currIdx].style.opacity = mozillaOpacity; - spanElements[currIdx].style.filter = ieOpacity; - } - - }, - - /** this function takes care of redoing the rico cornering - * - * you can't just call updateRicoCorners() again and pass it a - * new options string. you have to first remove the divs that - * rico puts on top and below the content div. - * - * @param {DOM} theDiv - A child of the outer
that was - * supplied to the `round` method. - * - * @param {Array} options - list of options - */ - reRound: function(theDiv, options) { - - var topRico = theDiv.parentNode.childNodes[0]; - //theDiv would be theDiv.parentNode.childNodes[1] - var bottomRico = theDiv.parentNode.childNodes[2]; - - theDiv.parentNode.removeChild(topRico); - theDiv.parentNode.removeChild(bottomRico); - - this.round(theDiv.parentNode, options); - }, - - _roundCornersImpl: function(e, color, bgColor) { - if(this.options.border) - this._renderBorder(e,bgColor); - if(this._isTopRounded()) - this._roundTopCorners(e,color,bgColor); - if(this._isBottomRounded()) - this._roundBottomCorners(e,color,bgColor); - }, - - _renderBorder: function(el,bgColor) { - var borderValue = "1px solid " + this._borderColor(bgColor); - var borderL = "border-left: " + borderValue; - var borderR = "border-right: " + borderValue; - var style = "style='" + borderL + ";" + borderR + "'"; - el.innerHTML = "
" + el.innerHTML + "
" - }, - - _roundTopCorners: function(el, color, bgColor) { - var corner = this._createCorner(bgColor); - for(var i=0 ; i < this.options.numSlices ; i++ ) - corner.appendChild(this._createCornerSlice(color,bgColor,i,"top")); - el.style.paddingTop = 0; - el.insertBefore(corner,el.firstChild); - }, - - _roundBottomCorners: function(el, color, bgColor) { - var corner = this._createCorner(bgColor); - for(var i=(this.options.numSlices-1) ; i >= 0 ; i-- ) - corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom")); - el.style.paddingBottom = 0; - el.appendChild(corner); - }, - - _createCorner: function(bgColor) { - var corner = document.createElement("div"); - corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor); - return corner; - }, - - _createCornerSlice: function(color,bgColor, n, position) { - var slice = document.createElement("span"); - - var inStyle = slice.style; - inStyle.backgroundColor = color; - inStyle.display = "block"; - inStyle.height = "1px"; - inStyle.overflow = "hidden"; - inStyle.fontSize = "1px"; - - var borderColor = this._borderColor(color,bgColor); - if ( this.options.border && n == 0 ) { - inStyle.borderTopStyle = "solid"; - inStyle.borderTopWidth = "1px"; - inStyle.borderLeftWidth = "0px"; - inStyle.borderRightWidth = "0px"; - inStyle.borderBottomWidth = "0px"; - inStyle.height = "0px"; // assumes css compliant box model - inStyle.borderColor = borderColor; - } - else if(borderColor) { - inStyle.borderColor = borderColor; - inStyle.borderStyle = "solid"; - inStyle.borderWidth = "0px 1px"; - } - - if ( !this.options.compact && (n == (this.options.numSlices-1)) ) - inStyle.height = "2px"; - - this._setMargin(slice, n, position); - this._setBorder(slice, n, position); - return slice; - }, - - _setOptions: function(options) { - this.options = { - corners : "all", - color : "fromElement", - bgColor : "fromParent", - blend : true, - border : false, - compact : false - } - Object.extend(this.options, options || {}); - - this.options.numSlices = this.options.compact ? 2 : 4; - if ( this._isTransparent() ) - this.options.blend = false; - }, - - _whichSideTop: function() { - if ( this._hasString(this.options.corners, "all", "top") ) - return ""; - - if ( this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0 ) - return ""; - - if (this.options.corners.indexOf("tl") >= 0) - return "left"; - else if (this.options.corners.indexOf("tr") >= 0) - return "right"; - return ""; - }, - - _whichSideBottom: function() { - if ( this._hasString(this.options.corners, "all", "bottom") ) - return ""; - - if ( this.options.corners.indexOf("bl")>=0 && this.options.corners.indexOf("br")>=0 ) - return ""; - - if(this.options.corners.indexOf("bl") >=0) - return "left"; - else if(this.options.corners.indexOf("br")>=0) - return "right"; - return ""; - }, - - _borderColor : function(color,bgColor) { - if ( color == "transparent" ) - return bgColor; - else if ( this.options.border ) - return this.options.border; - else if ( this.options.blend ) - return this._blend( bgColor, color ); - else - return ""; - }, - - - _setMargin: function(el, n, corners) { - var marginSize = this._marginSize(n); - var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); - - if ( whichSide == "left" ) { - el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px"; - } - else if ( whichSide == "right" ) { - el.style.marginRight = marginSize + "px"; el.style.marginLeft = "0px"; - } - else { - el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px"; - } - }, - - _setBorder: function(el,n,corners) { - var borderSize = this._borderSize(n); - var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); - if ( whichSide == "left" ) { - el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px"; - } - else if ( whichSide == "right" ) { - el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth = "0px"; - } - else { - el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; - } - if (this.options.border != false) - el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; - }, - - _marginSize: function(n) { - if ( this._isTransparent() ) - return 0; - - var marginSizes = [ 5, 3, 2, 1 ]; - var blendedMarginSizes = [ 3, 2, 1, 0 ]; - var compactMarginSizes = [ 2, 1 ]; - var smBlendedMarginSizes = [ 1, 0 ]; - - if ( this.options.compact && this.options.blend ) - return smBlendedMarginSizes[n]; - else if ( this.options.compact ) - return compactMarginSizes[n]; - else if ( this.options.blend ) - return blendedMarginSizes[n]; - else - return marginSizes[n]; - }, - - _borderSize: function(n) { - var transparentBorderSizes = [ 5, 3, 2, 1 ]; - var blendedBorderSizes = [ 2, 1, 1, 1 ]; - var compactBorderSizes = [ 1, 0 ]; - var actualBorderSizes = [ 0, 2, 0, 0 ]; - - if ( this.options.compact && (this.options.blend || this._isTransparent()) ) - return 1; - else if ( this.options.compact ) - return compactBorderSizes[n]; - else if ( this.options.blend ) - return blendedBorderSizes[n]; - else if ( this.options.border ) - return actualBorderSizes[n]; - else if ( this._isTransparent() ) - return transparentBorderSizes[n]; - return 0; - }, - - _hasString: function(str) { for(var i=1 ; i= 0) return true; return false; }, - _blend: function(c1, c2) { var cc1 = Rico.Color.createFromHex(c1); cc1.blend(Rico.Color.createFromHex(c2)); return cc1; }, - _background: function(el) { try { return Rico.Color.createColorFromBackground(el).asHex(); } catch(err) { return "#ffffff"; } }, - _isTransparent: function() { return this.options.color == "transparent"; }, - _isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); }, - _isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); }, - _hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; } -} diff --git a/public/opensearch/osm.xml b/public/opensearch/osm.xml index a060ce7ee..754d78e5d 100644 --- a/public/opensearch/osm.xml +++ b/public/opensearch/osm.xml @@ -1,17 +1,17 @@ - - - OpenStreetMap - OpenStreetMap Search - Search for a place in OpenStreetMap, the Wiki World Map - UTF-8 - UTF-8 - data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%19tEXtSoftware%00www.inkscape.org%9B%EE%3C%1A%00%00%01'IDATx%9C%9D%93%B1q%C30%0CE%1F%5Dd%80l%90I%C4*%A7%22%95%CF%85J%97%AE%B2%82%3DC%CE%03%A0%B3%9B%B8f%95%A3%17H%93%05%5C%A7%C8%0A%3F%05E%8A%92l%E7.%D0%E9N%02%81%07%E0Cr%FCaf%A6%FC%BC%5E%AF%DD%F4%3C%3Bt%C5%87%99)%84P%0E%DA%B6%BD%0AI%00%A1%A8%A8%1E%263S%D7u%C9'F%FE%9B%80%0C%C9%C9%22%BD'%B0%0A%AC%86%2CJ%DB%0E%22%11%8F%2F%D4%B3%22%8D%F34%CE%13u%06R%0C%40%D7u%AA%01%C5r%40%0Dq%88%C6%F9i%E8%7C%8CX%5D%A9M%95%D6%A3%A2Ti%C3Xx%CA%9C%F5mf3h%11%B6%07%B8%0APh%97%DD%1E%9E%5E%08!%D0%B6m%F1%87%108%1E%8EY5%007%03%5Cv%7B%00%3E%BF%3E%F8~x%1E%CD%B89l%00%F0I%0FWw%00%20%DB%AEJr%B6%E5%FB%09%80%C6y%CE%7D%91%1AP%B6p%2B%D9%BB%06%18V%3A%B5E%9F%AC%5B%95%AFY%3F%EE%20%A2mW%AA%93%DFN%3F%A0%E1%9B%F0u%E5%BC%BC%89%88%BC.%1F%D5'%DF%FD%C1%EE%F8%FFg%BFp%96%DF%E2%DCw%25%2B%00%00%00%00IEND%AEB%60%82 - - - - - Jonathan Bennett - false - Data &copy; OpenStreetMap contributors, Some Rights Reserved. CC by-sa 2.0. Geolocation provided by npemap.org.uk, geocoder.us, geocoder.ca and geonames.org. - + + + OpenStreetMap + OpenStreetMap Search + Search for a place in OpenStreetMap, the Wiki World Map + UTF-8 + UTF-8 + data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%19tEXtSoftware%00www.inkscape.org%9B%EE%3C%1A%00%00%01'IDATx%9C%9D%93%B1q%C30%0CE%1F%5Dd%80l%90I%C4*%A7%22%95%CF%85J%97%AE%B2%82%3DC%CE%03%A0%B3%9B%B8f%95%A3%17H%93%05%5C%A7%C8%0A%3F%05E%8A%92l%E7.%D0%E9N%02%81%07%E0Cr%FCaf%A6%FC%BC%5E%AF%DD%F4%3C%3Bt%C5%87%99)%84P%0E%DA%B6%BD%0AI%00%A1%A8%A8%1E%263S%D7u%C9'F%FE%9B%80%0C%C9%C9%22%BD'%B0%0A%AC%86%2CJ%DB%0E%22%11%8F%2F%D4%B3%22%8D%F34%CE%13u%06R%0C%40%D7u%AA%01%C5r%40%0Dq%88%C6%F9i%E8%7C%8CX%5D%A9M%95%D6%A3%A2Ti%C3Xx%CA%9C%F5mf3h%11%B6%07%B8%0APh%97%DD%1E%9E%5E%08!%D0%B6m%F1%87%108%1E%8EY5%007%03%5Cv%7B%00%3E%BF%3E%F8~x%1E%CD%B89l%00%F0I%0FWw%00%20%DB%AEJr%B6%E5%FB%09%80%C6y%CE%7D%91%1AP%B6p%2B%D9%BB%06%18V%3A%B5E%9F%AC%5B%95%AFY%3F%EE%20%A2mW%AA%93%DFN%3F%A0%E1%9B%F0u%E5%BC%BC%89%88%BC.%1F%D5'%DF%FD%C1%EE%F8%FFg%BFp%96%DF%E2%DCw%25%2B%00%00%00%00IEND%AEB%60%82 + + + + + Jonathan Bennett + false + Data &copy; OpenStreetMap contributors, Some Rights Reserved. CC by-sa 2.0. Geolocation provided by npemap.org.uk, geocoder.us, geocoder.ca and geonames.org. + diff --git a/public/potlatch/potlatch.swf b/public/potlatch/potlatch.swf index 46a6f5203..24f2012aa 100644 Binary files a/public/potlatch/potlatch.swf and b/public/potlatch/potlatch.swf differ diff --git a/test/functional/api_controller_test.rb b/test/functional/api_controller_test.rb index ce4020ca7..e1543726f 100644 --- a/test/functional/api_controller_test.rb +++ b/test/functional/api_controller_test.rb @@ -199,17 +199,18 @@ class ApiControllerTest < ActionController::TestCase # http://wiki.openstreetmap.org/wiki/Rails#Installing_the_quadtile_functions # or by looking at the readme in db/README def test_changes_simple + Timecop.freeze(Time.parse('2010-04-03 10:55:00')) get :changes assert_response :success #print @response.body # As we have loaded the fixtures, we can assume that there are no - # changes recently + # changes at the time we have frozen at now = Time.now.getutc hourago = now - 1.hour - # Note that this may fail on a very slow machine, so isn't a great test assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']:root", :count => 1 do assert_select "changes[starttime='#{hourago.xmlschema}'][endtime='#{now.xmlschema}']", :count => 1 end + Timecop.return end def test_changes_zoom_invalid diff --git a/vendor/gems/composite_primary_keys-2.2.2/README.txt b/vendor/gems/composite_primary_keys-2.2.2/README.txt index 11daeb922..b0d8c12d6 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/README.txt +++ b/vendor/gems/composite_primary_keys-2.2.2/README.txt @@ -1,41 +1,41 @@ -= Composite Primary Keys for ActiveRecords - -== Summary - -ActiveRecords/Rails famously doesn't support composite primary keys. -This RubyGem extends the activerecord gem to provide CPK support. - -== Installation - - gem install composite_primary_keys - -== Usage - - require 'composite_primary_keys' - class ProductVariation - set_primary_keys :product_id, :variation_seq - end - - pv = ProductVariation.find(345, 12) - -It even supports composite foreign keys for associations. - -See http://compositekeys.rubyforge.org for more. - -== Running Tests - -See test/README.tests.txt - -== Url - -http://compositekeys.rubyforge.org - -== Questions, Discussion and Contributions - -http://groups.google.com/compositekeys - -== Author - -Written by Dr Nic Williams, drnicwilliams@gmail -Contributions by many! - += Composite Primary Keys for ActiveRecords + +== Summary + +ActiveRecords/Rails famously doesn't support composite primary keys. +This RubyGem extends the activerecord gem to provide CPK support. + +== Installation + + gem install composite_primary_keys + +== Usage + + require 'composite_primary_keys' + class ProductVariation + set_primary_keys :product_id, :variation_seq + end + + pv = ProductVariation.find(345, 12) + +It even supports composite foreign keys for associations. + +See http://compositekeys.rubyforge.org for more. + +== Running Tests + +See test/README.tests.txt + +== Url + +http://compositekeys.rubyforge.org + +== Questions, Discussion and Contributions + +http://groups.google.com/compositekeys + +== Author + +Written by Dr Nic Williams, drnicwilliams@gmail +Contributions by many! + diff --git a/vendor/gems/composite_primary_keys-2.2.2/Rakefile b/vendor/gems/composite_primary_keys-2.2.2/Rakefile index fe0b8fd78..e5bebdb97 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/Rakefile +++ b/vendor/gems/composite_primary_keys-2.2.2/Rakefile @@ -1,65 +1,65 @@ -require 'rubygems' -require 'rake' -require 'rake/clean' -require 'rake/testtask' -require 'rake/rdoctask' -require 'rake/packagetask' -require 'rake/gempackagetask' -require 'rake/contrib/rubyforgepublisher' -require 'fileutils' -require 'hoe' -include FileUtils -require File.join(File.dirname(__FILE__), 'lib', 'composite_primary_keys', 'version') - -AUTHOR = "Dr Nic Williams" -EMAIL = "drnicwilliams@gmail.com" -DESCRIPTION = "Composite key support for ActiveRecords" -GEM_NAME = "composite_primary_keys" # what ppl will type to install your gem -if File.exists?("~/.rubyforge/user-config.yml") - # TODO this should prob go in a local/ file - config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) - RUBYFORGE_USERNAME = config["username"] -end -RUBYFORGE_PROJECT = "compositekeys" -HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org" - -REV = nil #File.read(".svn/entries")[/committed-rev="(\d+)"/, 1] rescue nil -VERS = ENV['VERSION'] || (CompositePrimaryKeys::VERSION::STRING + (REV ? ".#{REV}" : "")) -CLEAN.include ['**/.*.sw?', '*.gem', '.config','debug.log','*.db','logfile','log/**/*','**/.DS_Store', '.project'] -RDOC_OPTS = ['--quiet', '--title', "newgem documentation", - "--opname", "index.html", - "--line-numbers", - "--main", "README", - "--inline-source"] - -class Hoe - def extra_deps - @extra_deps.reject { |x| Array(x).first == 'hoe' } - end -end - -# Generate all the Rake tasks -# Run 'rake -T' to see list of generated tasks (from gem root directory) -hoe = Hoe.new(GEM_NAME, VERS) do |p| - p.author = AUTHOR - p.description = DESCRIPTION - p.email = EMAIL - p.summary = DESCRIPTION - p.url = HOMEPATH - p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT - p.test_globs = ["test/**/test*.rb"] - p.clean_globs |= CLEAN #An array of file patterns to delete on clean. - - # == Optional - p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n") - p.extra_deps = [['activerecord', '>= 2.2.0']] #An array of rubygem dependencies. - #p.spec_extras - A hash of extra values to set in the gemspec. -end - -CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n") -PATH = RUBYFORGE_PROJECT -hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc') - -PROJECT_ROOT = File.expand_path(".") - -require 'loader' +require 'rubygems' +require 'rake' +require 'rake/clean' +require 'rake/testtask' +require 'rake/rdoctask' +require 'rake/packagetask' +require 'rake/gempackagetask' +require 'rake/contrib/rubyforgepublisher' +require 'fileutils' +require 'hoe' +include FileUtils +require File.join(File.dirname(__FILE__), 'lib', 'composite_primary_keys', 'version') + +AUTHOR = "Dr Nic Williams" +EMAIL = "drnicwilliams@gmail.com" +DESCRIPTION = "Composite key support for ActiveRecords" +GEM_NAME = "composite_primary_keys" # what ppl will type to install your gem +if File.exists?("~/.rubyforge/user-config.yml") + # TODO this should prob go in a local/ file + config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) + RUBYFORGE_USERNAME = config["username"] +end +RUBYFORGE_PROJECT = "compositekeys" +HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org" + +REV = nil #File.read(".svn/entries")[/committed-rev="(\d+)"/, 1] rescue nil +VERS = ENV['VERSION'] || (CompositePrimaryKeys::VERSION::STRING + (REV ? ".#{REV}" : "")) +CLEAN.include ['**/.*.sw?', '*.gem', '.config','debug.log','*.db','logfile','log/**/*','**/.DS_Store', '.project'] +RDOC_OPTS = ['--quiet', '--title', "newgem documentation", + "--opname", "index.html", + "--line-numbers", + "--main", "README", + "--inline-source"] + +class Hoe + def extra_deps + @extra_deps.reject { |x| Array(x).first == 'hoe' } + end +end + +# Generate all the Rake tasks +# Run 'rake -T' to see list of generated tasks (from gem root directory) +hoe = Hoe.new(GEM_NAME, VERS) do |p| + p.author = AUTHOR + p.description = DESCRIPTION + p.email = EMAIL + p.summary = DESCRIPTION + p.url = HOMEPATH + p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT + p.test_globs = ["test/**/test*.rb"] + p.clean_globs |= CLEAN #An array of file patterns to delete on clean. + + # == Optional + p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n") + p.extra_deps = [['activerecord', '>= 2.2.0']] #An array of rubygem dependencies. + #p.spec_extras - A hash of extra values to set in the gemspec. +end + +CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n") +PATH = RUBYFORGE_PROJECT +hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc') + +PROJECT_ROOT = File.expand_path(".") + +require 'loader' diff --git a/vendor/gems/composite_primary_keys-2.2.2/install.rb b/vendor/gems/composite_primary_keys-2.2.2/install.rb index 5be89cf10..7d021ce1d 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/install.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/install.rb @@ -1,30 +1,30 @@ -require 'rbconfig' -require 'find' -require 'ftools' - -include Config - -# this was adapted from rdoc's install.rb by ways of Log4r - -$sitedir = CONFIG["sitelibdir"] -unless $sitedir - version = CONFIG["MAJOR"] + "." + CONFIG["MINOR"] - $libdir = File.join(CONFIG["libdir"], "ruby", version) - $sitedir = $:.find {|x| x =~ /site_ruby/ } - if !$sitedir - $sitedir = File.join($libdir, "site_ruby") - elsif $sitedir !~ Regexp.quote(version) - $sitedir = File.join($sitedir, version) - end -end - -# the acual gruntwork -Dir.chdir("lib") - -Find.find("composite_primary_keys", "composite_primary_keys.rb") { |f| - if f[-3..-1] == ".rb" - File::install(f, File.join($sitedir, *f.split(/\//)), 0644, true) - else - File::makedirs(File.join($sitedir, *f.split(/\//))) - end -} +require 'rbconfig' +require 'find' +require 'ftools' + +include Config + +# this was adapted from rdoc's install.rb by ways of Log4r + +$sitedir = CONFIG["sitelibdir"] +unless $sitedir + version = CONFIG["MAJOR"] + "." + CONFIG["MINOR"] + $libdir = File.join(CONFIG["libdir"], "ruby", version) + $sitedir = $:.find {|x| x =~ /site_ruby/ } + if !$sitedir + $sitedir = File.join($libdir, "site_ruby") + elsif $sitedir !~ Regexp.quote(version) + $sitedir = File.join($sitedir, version) + end +end + +# the acual gruntwork +Dir.chdir("lib") + +Find.find("composite_primary_keys", "composite_primary_keys.rb") { |f| + if f[-3..-1] == ".rb" + File::install(f, File.join($sitedir, *f.split(/\//)), 0644, true) + else + File::makedirs(File.join($sitedir, *f.split(/\//))) + end +} diff --git a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys.rb b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys.rb index 99b61407e..64f7e14b3 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys.rb @@ -1,55 +1,55 @@ -#-- -# Copyright (c) 2006 Nic Williams -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#++ - -$:.unshift(File.dirname(__FILE__)) unless - $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) - -unless defined?(ActiveRecord) - begin - require 'active_record' - rescue LoadError - require 'rubygems' - require_gem 'activerecord' - end -end - -require 'composite_primary_keys/fixtures' -require 'composite_primary_keys/composite_arrays' -require 'composite_primary_keys/associations' -require 'composite_primary_keys/association_preload' -require 'composite_primary_keys/reflection' -require 'composite_primary_keys/base' -require 'composite_primary_keys/calculations' -require 'composite_primary_keys/migration' -require 'composite_primary_keys/attribute_methods' - -ActiveRecord::Base.class_eval do - include CompositePrimaryKeys::ActiveRecord::Base -end - -Dir[File.dirname(__FILE__) + '/composite_primary_keys/connection_adapters/*.rb'].each do |adapter| - begin - require adapter.gsub('.rb','') - rescue MissingSourceFile - end -end +#-- +# Copyright (c) 2006 Nic Williams +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#++ + +$:.unshift(File.dirname(__FILE__)) unless + $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) + +unless defined?(ActiveRecord) + begin + require 'active_record' + rescue LoadError + require 'rubygems' + require_gem 'activerecord' + end +end + +require 'composite_primary_keys/fixtures' +require 'composite_primary_keys/composite_arrays' +require 'composite_primary_keys/associations' +require 'composite_primary_keys/association_preload' +require 'composite_primary_keys/reflection' +require 'composite_primary_keys/base' +require 'composite_primary_keys/calculations' +require 'composite_primary_keys/migration' +require 'composite_primary_keys/attribute_methods' + +ActiveRecord::Base.class_eval do + include CompositePrimaryKeys::ActiveRecord::Base +end + +Dir[File.dirname(__FILE__) + '/composite_primary_keys/connection_adapters/*.rb'].each do |adapter| + begin + require adapter.gsub('.rb','') + rescue MissingSourceFile + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/base.rb b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/base.rb index a4c7ff93a..4558f97a3 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/base.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/base.rb @@ -1,341 +1,341 @@ -module CompositePrimaryKeys - module ActiveRecord #:nodoc: - class CompositeKeyError < StandardError #:nodoc: - end - - module Base #:nodoc: - - INVALID_FOR_COMPOSITE_KEYS = 'Not appropriate for composite primary keys' - NOT_IMPLEMENTED_YET = 'Not implemented for composite primary keys yet' - - def self.append_features(base) - super - base.send(:include, InstanceMethods) - base.extend(ClassMethods) - end - - module ClassMethods - def set_primary_keys(*keys) - keys = keys.first if keys.first.is_a?(Array) - keys = keys.map { |k| k.to_sym } - cattr_accessor :primary_keys - self.primary_keys = keys.to_composite_keys - - class_eval <<-EOV - extend CompositeClassMethods - include CompositeInstanceMethods - - include CompositePrimaryKeys::ActiveRecord::Associations - include CompositePrimaryKeys::ActiveRecord::AssociationPreload - include CompositePrimaryKeys::ActiveRecord::Calculations - include CompositePrimaryKeys::ActiveRecord::AttributeMethods - EOV - end - - def composite? - false - end - end - - module InstanceMethods - def composite?; self.class.composite?; end - end - - module CompositeInstanceMethods - - # A model instance's primary keys is always available as model.ids - # whether you name it the default 'id' or set it to something else. - def id - attr_names = self.class.primary_keys - CompositeIds.new(attr_names.map { |attr_name| read_attribute(attr_name) }) - end - alias_method :ids, :id - - def to_param - id.to_s - end - - def id_before_type_cast #:nodoc: - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::NOT_IMPLEMENTED_YET - end - - def quoted_id #:nodoc: - [self.class.primary_keys, ids]. - transpose. - map {|attr_name,id| quote_value(id, column_for_attribute(attr_name))}. - to_composite_ids - end - - # Sets the primary ID. - def id=(ids) - ids = ids.split(ID_SEP) if ids.is_a?(String) - ids.flatten! - unless ids.is_a?(Array) and ids.length == self.class.primary_keys.length - raise "#{self.class}.id= requires #{self.class.primary_keys.length} ids" - end - [primary_keys, ids].transpose.each {|key, an_id| write_attribute(key , an_id)} - id - end - - # Returns a clone of the record that hasn't been assigned an id yet and - # is treated as a new record. Note that this is a "shallow" clone: - # it copies the object's attributes only, not its associations. - # The extent of a "deep" clone is application-specific and is therefore - # left to the application to implement according to its need. - def clone - attrs = self.attributes_before_type_cast - self.class.primary_keys.each {|key| attrs.delete(key.to_s)} - self.class.new do |record| - record.send :instance_variable_set, '@attributes', attrs - end - end - - - private - # The xx_without_callbacks methods are overwritten as that is the end of the alias chain - - # Creates a new record with values matching those of the instance attributes. - def create_without_callbacks - unless self.id - raise CompositeKeyError, "Composite keys do not generated ids from sequences, you must provide id values" - end - attributes_minus_pks = attributes_with_quotes(false) - quoted_pk_columns = self.class.primary_key.map { |col| connection.quote_column_name(col) } - cols = quoted_column_names(attributes_minus_pks) << quoted_pk_columns - vals = attributes_minus_pks.values << quoted_id - connection.insert( - "INSERT INTO #{self.class.quoted_table_name} " + - "(#{cols.join(', ')}) " + - "VALUES (#{vals.join(', ')})", - "#{self.class.name} Create", - self.class.primary_key, - self.id - ) - @new_record = false - return true - end - - # Updates the associated record with values matching those of the instance attributes. - def update_without_callbacks - where_clause_terms = [self.class.primary_key, quoted_id].transpose.map do |pair| - "(#{connection.quote_column_name(pair[0])} = #{pair[1]})" - end - where_clause = where_clause_terms.join(" AND ") - connection.update( - "UPDATE #{self.class.quoted_table_name} " + - "SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false))} " + - "WHERE #{where_clause}", - "#{self.class.name} Update" - ) - return true - end - - # Deletes the record in the database and freezes this instance to reflect that no changes should - # be made (since they can't be persisted). - def destroy_without_callbacks - where_clause_terms = [self.class.primary_key, quoted_id].transpose.map do |pair| - "(#{connection.quote_column_name(pair[0])} = #{pair[1]})" - end - where_clause = where_clause_terms.join(" AND ") - unless new_record? - connection.delete( - "DELETE FROM #{self.class.quoted_table_name} " + - "WHERE #{where_clause}", - "#{self.class.name} Destroy" - ) - end - freeze - end - end - - module CompositeClassMethods - def primary_key; primary_keys; end - def primary_key=(keys); primary_keys = keys; end - - def composite? - true - end - - #ids_to_s([[1,2],[7,3]]) -> "(1,2),(7,3)" - #ids_to_s([[1,2],[7,3]], ',', ';') -> "1,2;7,3" - def ids_to_s(many_ids, id_sep = CompositePrimaryKeys::ID_SEP, list_sep = ',', left_bracket = '(', right_bracket = ')') - many_ids.map {|ids| "#{left_bracket}#{ids}#{right_bracket}"}.join(list_sep) - end - - # Creates WHERE condition from list of composited ids - # User.update_all({:role => 'admin'}, :conditions => composite_where_clause([[1, 2], [2, 2]])) #=> UPDATE admins SET admin.role='admin' WHERE (admin.type=1 AND admin.type2=2) OR (admin.type=2 AND admin.type2=2) - # User.find(:all, :conditions => composite_where_clause([[1, 2], [2, 2]])) #=> SELECT * FROM admins WHERE (admin.type=1 AND admin.type2=2) OR (admin.type=2 AND admin.type2=2) - def composite_where_clause(ids) - if ids.is_a?(String) - ids = [[ids]] - elsif not ids.first.is_a?(Array) # if single comp key passed, turn into an array of 1 - ids = [ids.to_composite_ids] - end - - ids.map do |id_set| - [primary_keys, id_set].transpose.map do |key, id| - "#{table_name}.#{key.to_s}=#{sanitize(id)}" - end.join(" AND ") - end.join(") OR (") - end - - # Returns true if the given +ids+ represents the primary keys of a record in the database, false otherwise. - # Example: - # Person.exists?(5,7) - def exists?(ids) - if ids.is_a?(Array) && ids.first.is_a?(String) - count(:conditions => ids) > 0 - else - obj = find(ids) rescue false - !obj.nil? and obj.is_a?(self) - end - end - - # Deletes the record with the given +ids+ without instantiating an object first, e.g. delete(1,2) - # If an array of ids is provided (e.g. delete([1,2], [3,4]), all of them - # are deleted. - def delete(*ids) - unless ids.is_a?(Array); raise "*ids must be an Array"; end - ids = [ids.to_composite_ids] if not ids.first.is_a?(Array) - where_clause = ids.map do |id_set| - [primary_keys, id_set].transpose.map do |key, id| - "#{quoted_table_name}.#{connection.quote_column_name(key.to_s)}=#{sanitize(id)}" - end.join(" AND ") - end.join(") OR (") - delete_all([ "(#{where_clause})" ]) - end - - # Destroys the record with the given +ids+ by instantiating the object and calling #destroy (all the callbacks are the triggered). - # If an array of ids is provided, all of them are destroyed. - def destroy(*ids) - unless ids.is_a?(Array); raise "*ids must be an Array"; end - if ids.first.is_a?(Array) - ids = ids.map{|compids| compids.to_composite_ids} - else - ids = ids.to_composite_ids - end - ids.first.is_a?(CompositeIds) ? ids.each { |id_set| find(id_set).destroy } : find(ids).destroy - end - - # Returns an array of column objects for the table associated with this class. - # Each column that matches to one of the primary keys has its - # primary attribute set to true - def columns - unless @columns - @columns = connection.columns(table_name, "#{name} Columns") - @columns.each {|column| column.primary = primary_keys.include?(column.name.to_sym)} - end - @columns - end - - ## DEACTIVATED METHODS ## - public - # Lazy-set the sequence name to the connection's default. This method - # is only ever called once since set_sequence_name overrides it. - def sequence_name #:nodoc: - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS - end - - def reset_sequence_name #:nodoc: - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS - end - - def set_primary_key(value = nil, &block) - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS - end - - private - def find_one(id, options) - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS - end - - def find_some(ids, options) - raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS - end - - def find_from_ids(ids, options) - ids = ids.first if ids.last == nil - conditions = " AND (#{sanitize_sql(options[:conditions])})" if options[:conditions] - # if ids is just a flat list, then its size must = primary_key.length (one id per primary key, in order) - # if ids is list of lists, then each inner list must follow rule above - if ids.first.is_a? String - # find '2,1' -> ids = ['2,1'] - # find '2,1;7,3' -> ids = ['2,1;7,3'] - ids = ids.first.split(ID_SET_SEP).map {|id_set| id_set.split(ID_SEP).to_composite_ids} - # find '2,1;7,3' -> ids = [['2','1'],['7','3']], inner [] are CompositeIds - end - ids = [ids.to_composite_ids] if not ids.first.kind_of?(Array) - ids.each do |id_set| - unless id_set.is_a?(Array) - raise "Ids must be in an Array, instead received: #{id_set.inspect}" - end - unless id_set.length == primary_keys.length - raise "#{id_set.inspect}: Incorrect number of primary keys for #{class_name}: #{primary_keys.inspect}" - end - end - - # Let keys = [:a, :b] - # If ids = [[10, 50], [11, 51]], then :conditions => - # "(#{quoted_table_name}.a, #{quoted_table_name}.b) IN ((10, 50), (11, 51))" - - conditions = ids.map do |id_set| - [primary_keys, id_set].transpose.map do |key, id| - col = columns_hash[key.to_s] - val = quote_value(id, col) - "#{quoted_table_name}.#{connection.quote_column_name(key.to_s)}=#{val}" - end.join(" AND ") - end.join(") OR (") - - options.update :conditions => "(#{conditions})" - - result = find_every(options) - - if result.size == ids.size - ids.size == 1 ? result[0] : result - else - raise ::ActiveRecord::RecordNotFound, "Couldn't find all #{name.pluralize} with IDs (#{ids.inspect})#{conditions}" - end - end - end - end - end -end - - -module ActiveRecord - ID_SEP = ',' - ID_SET_SEP = ';' - - class Base - # Allows +attr_name+ to be the list of primary_keys, and returns the id - # of the object - # e.g. @object[@object.class.primary_key] => [1,1] - def [](attr_name) - if attr_name.is_a?(String) and attr_name != attr_name.split(ID_SEP).first - attr_name = attr_name.split(ID_SEP) - end - attr_name.is_a?(Array) ? - attr_name.map {|name| read_attribute(name)} : - read_attribute(attr_name) - end - - # Updates the attribute identified by attr_name with the specified +value+. - # (Alias for the protected write_attribute method). - def []=(attr_name, value) - if attr_name.is_a?(String) and attr_name != attr_name.split(ID_SEP).first - attr_name = attr_name.split(ID_SEP) - end - - if attr_name.is_a? Array - value = value.split(ID_SEP) if value.is_a? String - unless value.length == attr_name.length - raise "Number of attr_names and values do not match" - end - #breakpoint - [attr_name, value].transpose.map {|name,val| write_attribute(name.to_s, val)} - else - write_attribute(attr_name, value) - end - end - end -end +module CompositePrimaryKeys + module ActiveRecord #:nodoc: + class CompositeKeyError < StandardError #:nodoc: + end + + module Base #:nodoc: + + INVALID_FOR_COMPOSITE_KEYS = 'Not appropriate for composite primary keys' + NOT_IMPLEMENTED_YET = 'Not implemented for composite primary keys yet' + + def self.append_features(base) + super + base.send(:include, InstanceMethods) + base.extend(ClassMethods) + end + + module ClassMethods + def set_primary_keys(*keys) + keys = keys.first if keys.first.is_a?(Array) + keys = keys.map { |k| k.to_sym } + cattr_accessor :primary_keys + self.primary_keys = keys.to_composite_keys + + class_eval <<-EOV + extend CompositeClassMethods + include CompositeInstanceMethods + + include CompositePrimaryKeys::ActiveRecord::Associations + include CompositePrimaryKeys::ActiveRecord::AssociationPreload + include CompositePrimaryKeys::ActiveRecord::Calculations + include CompositePrimaryKeys::ActiveRecord::AttributeMethods + EOV + end + + def composite? + false + end + end + + module InstanceMethods + def composite?; self.class.composite?; end + end + + module CompositeInstanceMethods + + # A model instance's primary keys is always available as model.ids + # whether you name it the default 'id' or set it to something else. + def id + attr_names = self.class.primary_keys + CompositeIds.new(attr_names.map { |attr_name| read_attribute(attr_name) }) + end + alias_method :ids, :id + + def to_param + id.to_s + end + + def id_before_type_cast #:nodoc: + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::NOT_IMPLEMENTED_YET + end + + def quoted_id #:nodoc: + [self.class.primary_keys, ids]. + transpose. + map {|attr_name,id| quote_value(id, column_for_attribute(attr_name))}. + to_composite_ids + end + + # Sets the primary ID. + def id=(ids) + ids = ids.split(ID_SEP) if ids.is_a?(String) + ids.flatten! + unless ids.is_a?(Array) and ids.length == self.class.primary_keys.length + raise "#{self.class}.id= requires #{self.class.primary_keys.length} ids" + end + [primary_keys, ids].transpose.each {|key, an_id| write_attribute(key , an_id)} + id + end + + # Returns a clone of the record that hasn't been assigned an id yet and + # is treated as a new record. Note that this is a "shallow" clone: + # it copies the object's attributes only, not its associations. + # The extent of a "deep" clone is application-specific and is therefore + # left to the application to implement according to its need. + def clone + attrs = self.attributes_before_type_cast + self.class.primary_keys.each {|key| attrs.delete(key.to_s)} + self.class.new do |record| + record.send :instance_variable_set, '@attributes', attrs + end + end + + + private + # The xx_without_callbacks methods are overwritten as that is the end of the alias chain + + # Creates a new record with values matching those of the instance attributes. + def create_without_callbacks + unless self.id + raise CompositeKeyError, "Composite keys do not generated ids from sequences, you must provide id values" + end + attributes_minus_pks = attributes_with_quotes(false) + quoted_pk_columns = self.class.primary_key.map { |col| connection.quote_column_name(col) } + cols = quoted_column_names(attributes_minus_pks) << quoted_pk_columns + vals = attributes_minus_pks.values << quoted_id + connection.insert( + "INSERT INTO #{self.class.quoted_table_name} " + + "(#{cols.join(', ')}) " + + "VALUES (#{vals.join(', ')})", + "#{self.class.name} Create", + self.class.primary_key, + self.id + ) + @new_record = false + return true + end + + # Updates the associated record with values matching those of the instance attributes. + def update_without_callbacks + where_clause_terms = [self.class.primary_key, quoted_id].transpose.map do |pair| + "(#{connection.quote_column_name(pair[0])} = #{pair[1]})" + end + where_clause = where_clause_terms.join(" AND ") + connection.update( + "UPDATE #{self.class.quoted_table_name} " + + "SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false))} " + + "WHERE #{where_clause}", + "#{self.class.name} Update" + ) + return true + end + + # Deletes the record in the database and freezes this instance to reflect that no changes should + # be made (since they can't be persisted). + def destroy_without_callbacks + where_clause_terms = [self.class.primary_key, quoted_id].transpose.map do |pair| + "(#{connection.quote_column_name(pair[0])} = #{pair[1]})" + end + where_clause = where_clause_terms.join(" AND ") + unless new_record? + connection.delete( + "DELETE FROM #{self.class.quoted_table_name} " + + "WHERE #{where_clause}", + "#{self.class.name} Destroy" + ) + end + freeze + end + end + + module CompositeClassMethods + def primary_key; primary_keys; end + def primary_key=(keys); primary_keys = keys; end + + def composite? + true + end + + #ids_to_s([[1,2],[7,3]]) -> "(1,2),(7,3)" + #ids_to_s([[1,2],[7,3]], ',', ';') -> "1,2;7,3" + def ids_to_s(many_ids, id_sep = CompositePrimaryKeys::ID_SEP, list_sep = ',', left_bracket = '(', right_bracket = ')') + many_ids.map {|ids| "#{left_bracket}#{ids}#{right_bracket}"}.join(list_sep) + end + + # Creates WHERE condition from list of composited ids + # User.update_all({:role => 'admin'}, :conditions => composite_where_clause([[1, 2], [2, 2]])) #=> UPDATE admins SET admin.role='admin' WHERE (admin.type=1 AND admin.type2=2) OR (admin.type=2 AND admin.type2=2) + # User.find(:all, :conditions => composite_where_clause([[1, 2], [2, 2]])) #=> SELECT * FROM admins WHERE (admin.type=1 AND admin.type2=2) OR (admin.type=2 AND admin.type2=2) + def composite_where_clause(ids) + if ids.is_a?(String) + ids = [[ids]] + elsif not ids.first.is_a?(Array) # if single comp key passed, turn into an array of 1 + ids = [ids.to_composite_ids] + end + + ids.map do |id_set| + [primary_keys, id_set].transpose.map do |key, id| + "#{table_name}.#{key.to_s}=#{sanitize(id)}" + end.join(" AND ") + end.join(") OR (") + end + + # Returns true if the given +ids+ represents the primary keys of a record in the database, false otherwise. + # Example: + # Person.exists?(5,7) + def exists?(ids) + if ids.is_a?(Array) && ids.first.is_a?(String) + count(:conditions => ids) > 0 + else + obj = find(ids) rescue false + !obj.nil? and obj.is_a?(self) + end + end + + # Deletes the record with the given +ids+ without instantiating an object first, e.g. delete(1,2) + # If an array of ids is provided (e.g. delete([1,2], [3,4]), all of them + # are deleted. + def delete(*ids) + unless ids.is_a?(Array); raise "*ids must be an Array"; end + ids = [ids.to_composite_ids] if not ids.first.is_a?(Array) + where_clause = ids.map do |id_set| + [primary_keys, id_set].transpose.map do |key, id| + "#{quoted_table_name}.#{connection.quote_column_name(key.to_s)}=#{sanitize(id)}" + end.join(" AND ") + end.join(") OR (") + delete_all([ "(#{where_clause})" ]) + end + + # Destroys the record with the given +ids+ by instantiating the object and calling #destroy (all the callbacks are the triggered). + # If an array of ids is provided, all of them are destroyed. + def destroy(*ids) + unless ids.is_a?(Array); raise "*ids must be an Array"; end + if ids.first.is_a?(Array) + ids = ids.map{|compids| compids.to_composite_ids} + else + ids = ids.to_composite_ids + end + ids.first.is_a?(CompositeIds) ? ids.each { |id_set| find(id_set).destroy } : find(ids).destroy + end + + # Returns an array of column objects for the table associated with this class. + # Each column that matches to one of the primary keys has its + # primary attribute set to true + def columns + unless @columns + @columns = connection.columns(table_name, "#{name} Columns") + @columns.each {|column| column.primary = primary_keys.include?(column.name.to_sym)} + end + @columns + end + + ## DEACTIVATED METHODS ## + public + # Lazy-set the sequence name to the connection's default. This method + # is only ever called once since set_sequence_name overrides it. + def sequence_name #:nodoc: + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS + end + + def reset_sequence_name #:nodoc: + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS + end + + def set_primary_key(value = nil, &block) + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS + end + + private + def find_one(id, options) + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS + end + + def find_some(ids, options) + raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::INVALID_FOR_COMPOSITE_KEYS + end + + def find_from_ids(ids, options) + ids = ids.first if ids.last == nil + conditions = " AND (#{sanitize_sql(options[:conditions])})" if options[:conditions] + # if ids is just a flat list, then its size must = primary_key.length (one id per primary key, in order) + # if ids is list of lists, then each inner list must follow rule above + if ids.first.is_a? String + # find '2,1' -> ids = ['2,1'] + # find '2,1;7,3' -> ids = ['2,1;7,3'] + ids = ids.first.split(ID_SET_SEP).map {|id_set| id_set.split(ID_SEP).to_composite_ids} + # find '2,1;7,3' -> ids = [['2','1'],['7','3']], inner [] are CompositeIds + end + ids = [ids.to_composite_ids] if not ids.first.kind_of?(Array) + ids.each do |id_set| + unless id_set.is_a?(Array) + raise "Ids must be in an Array, instead received: #{id_set.inspect}" + end + unless id_set.length == primary_keys.length + raise "#{id_set.inspect}: Incorrect number of primary keys for #{class_name}: #{primary_keys.inspect}" + end + end + + # Let keys = [:a, :b] + # If ids = [[10, 50], [11, 51]], then :conditions => + # "(#{quoted_table_name}.a, #{quoted_table_name}.b) IN ((10, 50), (11, 51))" + + conditions = ids.map do |id_set| + [primary_keys, id_set].transpose.map do |key, id| + col = columns_hash[key.to_s] + val = quote_value(id, col) + "#{quoted_table_name}.#{connection.quote_column_name(key.to_s)}=#{val}" + end.join(" AND ") + end.join(") OR (") + + options.update :conditions => "(#{conditions})" + + result = find_every(options) + + if result.size == ids.size + ids.size == 1 ? result[0] : result + else + raise ::ActiveRecord::RecordNotFound, "Couldn't find all #{name.pluralize} with IDs (#{ids.inspect})#{conditions}" + end + end + end + end + end +end + + +module ActiveRecord + ID_SEP = ',' + ID_SET_SEP = ';' + + class Base + # Allows +attr_name+ to be the list of primary_keys, and returns the id + # of the object + # e.g. @object[@object.class.primary_key] => [1,1] + def [](attr_name) + if attr_name.is_a?(String) and attr_name != attr_name.split(ID_SEP).first + attr_name = attr_name.split(ID_SEP) + end + attr_name.is_a?(Array) ? + attr_name.map {|name| read_attribute(name)} : + read_attribute(attr_name) + end + + # Updates the attribute identified by attr_name with the specified +value+. + # (Alias for the protected write_attribute method). + def []=(attr_name, value) + if attr_name.is_a?(String) and attr_name != attr_name.split(ID_SEP).first + attr_name = attr_name.split(ID_SEP) + end + + if attr_name.is_a? Array + value = value.split(ID_SEP) if value.is_a? String + unless value.length == attr_name.length + raise "Number of attr_names and values do not match" + end + #breakpoint + [attr_name, value].transpose.map {|name,val| write_attribute(name.to_s, val)} + else + write_attribute(attr_name, value) + end + end + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/composite_arrays.rb b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/composite_arrays.rb index 030c416f3..dab39142b 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/composite_arrays.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/composite_arrays.rb @@ -1,30 +1,30 @@ -module CompositePrimaryKeys - ID_SEP = ',' - ID_SET_SEP = ';' - - module ArrayExtension - def to_composite_keys - CompositeKeys.new(self) - end - - def to_composite_ids - CompositeIds.new(self) - end - end - - class CompositeArray < Array - def to_s - join(ID_SEP) - end - end - - class CompositeKeys < CompositeArray - - end - - class CompositeIds < CompositeArray - - end -end - -Array.send(:include, CompositePrimaryKeys::ArrayExtension) +module CompositePrimaryKeys + ID_SEP = ',' + ID_SET_SEP = ';' + + module ArrayExtension + def to_composite_keys + CompositeKeys.new(self) + end + + def to_composite_ids + CompositeIds.new(self) + end + end + + class CompositeArray < Array + def to_s + join(ID_SEP) + end + end + + class CompositeKeys < CompositeArray + + end + + class CompositeIds < CompositeArray + + end +end + +Array.send(:include, CompositePrimaryKeys::ArrayExtension) diff --git a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/reflection.rb b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/reflection.rb index 309baf118..2d82d9c8a 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/reflection.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/reflection.rb @@ -1,19 +1,19 @@ -module ActiveRecord - module Reflection - class AssociationReflection - def primary_key_name - return @primary_key_name if @primary_key_name - case - when macro == :belongs_to - @primary_key_name = options[:foreign_key] || class_name.foreign_key - when options[:as] - @primary_key_name = options[:foreign_key] || "#{options[:as]}_id" - else - @primary_key_name = options[:foreign_key] || active_record.name.foreign_key - end - @primary_key_name = @primary_key_name.to_composite_keys.to_s if @primary_key_name.is_a? Array - @primary_key_name - end - end - end +module ActiveRecord + module Reflection + class AssociationReflection + def primary_key_name + return @primary_key_name if @primary_key_name + case + when macro == :belongs_to + @primary_key_name = options[:foreign_key] || class_name.foreign_key + when options[:as] + @primary_key_name = options[:foreign_key] || "#{options[:as]}_id" + else + @primary_key_name = options[:foreign_key] || active_record.name.foreign_key + end + @primary_key_name = @primary_key_name.to_composite_keys.to_s if @primary_key_name.is_a? Array + @primary_key_name + end + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/version.rb b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/version.rb index 0b83ba692..49a11be2a 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/version.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/lib/composite_primary_keys/version.rb @@ -1,8 +1,8 @@ -module CompositePrimaryKeys - module VERSION #:nodoc: - MAJOR = 2 - MINOR = 2 - TINY = 2 - STRING = [MAJOR, MINOR, TINY].join('.') - end -end +module CompositePrimaryKeys + module VERSION #:nodoc: + MAJOR = 2 + MINOR = 2 + TINY = 2 + STRING = [MAJOR, MINOR, TINY].join('.') + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/article.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/article.rb index 7233f8126..7fae392bd 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/article.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/article.rb @@ -1,5 +1,5 @@ -class Article < ActiveRecord::Base - has_many :readings - has_many :users, :through => :readings -end - +class Article < ActiveRecord::Base + has_many :readings + has_many :users, :through => :readings +end + diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/articles.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/articles.yml index e51060463..f4cb4778a 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/articles.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/articles.yml @@ -1,6 +1,6 @@ -first: - id: 1 - name: Article One -second: - id: 2 +first: + id: 1 + name: Article One +second: + id: 2 name: Article Two \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product.rb index 5466dcabe..e780fd2f4 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product.rb @@ -1,7 +1,7 @@ -class Product < ActiveRecord::Base - set_primary_keys :id # redundant - has_many :product_tariffs, :foreign_key => :product_id - has_one :product_tariff, :foreign_key => :product_id - - has_many :tariffs, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] -end +class Product < ActiveRecord::Base + set_primary_keys :id # redundant + has_many :product_tariffs, :foreign_key => :product_id + has_one :product_tariff, :foreign_key => :product_id + + has_many :tariffs, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariff.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariff.rb index cbabee7c5..d5c9befbb 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariff.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariff.rb @@ -1,5 +1,5 @@ -class ProductTariff < ActiveRecord::Base - set_primary_keys :product_id, :tariff_id, :tariff_start_date - belongs_to :product, :foreign_key => :product_id - belongs_to :tariff, :foreign_key => [:tariff_id, :tariff_start_date] -end +class ProductTariff < ActiveRecord::Base + set_primary_keys :product_id, :tariff_id, :tariff_start_date + belongs_to :product, :foreign_key => :product_id + belongs_to :tariff, :foreign_key => [:tariff_id, :tariff_start_date] +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariffs.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariffs.yml index 27a464fb3..72be1e7ad 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariffs.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/product_tariffs.yml @@ -1,12 +1,12 @@ -first_flat: - product_id: 1 - tariff_id: 1 - tariff_start_date: <%= Date.today.to_s(:db) %> -first_free: - product_id: 1 - tariff_id: 2 - tariff_start_date: <%= Date.today.to_s(:db) %> -second_free: - product_id: 2 - tariff_id: 2 - tariff_start_date: <%= Date.today.to_s(:db) %> +first_flat: + product_id: 1 + tariff_id: 1 + tariff_start_date: <%= Date.today.to_s(:db) %> +first_free: + product_id: 1 + tariff_id: 2 + tariff_start_date: <%= Date.today.to_s(:db) %> +second_free: + product_id: 2 + tariff_id: 2 + tariff_start_date: <%= Date.today.to_s(:db) %> diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/products.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/products.yml index 3c38a5ba0..c436c296b 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/products.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/products.yml @@ -1,6 +1,6 @@ -first_product: - id: 1 - name: Product One -second_product: - id: 2 +first_product: + id: 1 + name: Product One +second_product: + id: 2 name: Product Two \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reading.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reading.rb index 2e8197062..014d8b810 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reading.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reading.rb @@ -1,4 +1,4 @@ -class Reading < ActiveRecord::Base - belongs_to :article - belongs_to :user -end +class Reading < ActiveRecord::Base + belongs_to :article + belongs_to :user +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/readings.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/readings.yml index e3afaa9cd..36e9ac300 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/readings.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/readings.yml @@ -1,10 +1,10 @@ -santiago_first: - id: 1 - user_id: 1 - article_id: 1 - rating: 4 -santiago_second: - id: 2 - user_id: 1 - article_id: 2 +santiago_first: + id: 1 + user_id: 1 + article_id: 1 + rating: 4 +santiago_second: + id: 2 + user_id: 1 + article_id: 2 rating: 5 \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_code.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_code.rb index 594d8d8be..e20fb0644 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_code.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_code.rb @@ -1,7 +1,7 @@ -class ReferenceCode < ActiveRecord::Base - set_primary_keys :reference_type_id, :reference_code - - belongs_to :reference_type, :foreign_key => "reference_type_id" - - validates_presence_of :reference_code, :code_label, :abbreviation -end +class ReferenceCode < ActiveRecord::Base + set_primary_keys :reference_type_id, :reference_code + + belongs_to :reference_type, :foreign_key => "reference_type_id" + + validates_presence_of :reference_code, :code_label, :abbreviation +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_codes.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_codes.yml index 397938199..f4d88bc86 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_codes.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_codes.yml @@ -1,28 +1,28 @@ -name_prefix_mr: - reference_type_id: 1 - reference_code: 1 - code_label: MR - abbreviation: Mr -name_prefix_mrs: - reference_type_id: 1 - reference_code: 2 - code_label: MRS - abbreviation: Mrs -name_prefix_ms: - reference_type_id: 1 - reference_code: 3 - code_label: MS - abbreviation: Ms - -gender_male: - reference_type_id: 2 - reference_code: 1 - code_label: MALE - abbreviation: Male -gender_female: - reference_type_id: 2 - reference_code: 2 - code_label: FEMALE - abbreviation: Female - +name_prefix_mr: + reference_type_id: 1 + reference_code: 1 + code_label: MR + abbreviation: Mr +name_prefix_mrs: + reference_type_id: 1 + reference_code: 2 + code_label: MRS + abbreviation: Mrs +name_prefix_ms: + reference_type_id: 1 + reference_code: 3 + code_label: MS + abbreviation: Ms + +gender_male: + reference_type_id: 2 + reference_code: 1 + code_label: MALE + abbreviation: Male +gender_female: + reference_type_id: 2 + reference_code: 2 + code_label: FEMALE + abbreviation: Female + \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_type.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_type.rb index 5b2b12b4e..c09bd2f20 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_type.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_type.rb @@ -1,7 +1,7 @@ -class ReferenceType < ActiveRecord::Base - set_primary_key :reference_type_id - has_many :reference_codes, :foreign_key => "reference_type_id" - - validates_presence_of :type_label, :abbreviation - validates_uniqueness_of :type_label -end +class ReferenceType < ActiveRecord::Base + set_primary_key :reference_type_id + has_many :reference_codes, :foreign_key => "reference_type_id" + + validates_presence_of :type_label, :abbreviation + validates_uniqueness_of :type_label +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_types.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_types.yml index 0520ba9f9..9c5e3d347 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_types.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/reference_types.yml @@ -1,9 +1,9 @@ -name_prefix: - reference_type_id: 1 - type_label: NAME_PREFIX - abbreviation: Name Prefix - -gender: - reference_type_id: 2 - type_label: GENDER - abbreviation: Gender +name_prefix: + reference_type_id: 1 + type_label: NAME_PREFIX + abbreviation: Name Prefix + +gender: + reference_type_id: 2 + type_label: GENDER + abbreviation: Gender diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburb.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburb.rb index 93045350e..f2eb181c3 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburb.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburb.rb @@ -1,6 +1,6 @@ -class Suburb < ActiveRecord::Base - set_primary_keys :city_id, :suburb_id - has_many :streets, :foreign_key => [:city_id, :suburb_id] - has_many :first_streets, :foreign_key => [:city_id, :suburb_id], - :class_name => 'Street', :conditions => "streets.name = 'First Street'" +class Suburb < ActiveRecord::Base + set_primary_keys :city_id, :suburb_id + has_many :streets, :foreign_key => [:city_id, :suburb_id] + has_many :first_streets, :foreign_key => [:city_id, :suburb_id], + :class_name => 'Street', :conditions => "streets.name = 'First Street'" end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburbs.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburbs.yml index efae0c0a2..d230fbae4 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburbs.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/suburbs.yml @@ -1,9 +1,9 @@ -first: - city_id: 1 - suburb_id: 1 - name: First Suburb -second: - city_id: 2 - suburb_id: 1 - name: Second Suburb +first: + city_id: 1 + suburb_id: 1 + name: First Suburb +second: + city_id: 2 + suburb_id: 1 + name: Second Suburb \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariff.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariff.rb index d5cb07da1..3feba4434 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariff.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariff.rb @@ -1,6 +1,6 @@ -class Tariff < ActiveRecord::Base - set_primary_keys [:tariff_id, :start_date] - has_many :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] - has_one :product_tariff, :foreign_key => [:tariff_id, :tariff_start_date] - has_many :products, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] -end +class Tariff < ActiveRecord::Base + set_primary_keys [:tariff_id, :start_date] + has_many :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] + has_one :product_tariff, :foreign_key => [:tariff_id, :tariff_start_date] + has_many :products, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date] +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariffs.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariffs.yml index 7346fc510..997ebb8f1 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariffs.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/tariffs.yml @@ -1,13 +1,13 @@ -flat: - tariff_id: 1 - start_date: <%= Date.today.to_s(:db) %> - amount: 50 -free: - tariff_id: 2 - start_date: <%= Date.today.to_s(:db) %> - amount: 0 -flat_future: - tariff_id: 1 - start_date: <%= Date.today.next.to_s(:db) %> - amount: 100 +flat: + tariff_id: 1 + start_date: <%= Date.today.to_s(:db) %> + amount: 50 +free: + tariff_id: 2 + start_date: <%= Date.today.to_s(:db) %> + amount: 0 +flat_future: + tariff_id: 1 + start_date: <%= Date.today.next.to_s(:db) %> + amount: 100 \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/user.rb b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/user.rb index a8487c49f..674481835 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/user.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/user.rb @@ -1,10 +1,10 @@ -class User < ActiveRecord::Base - has_many :readings - has_many :articles, :through => :readings - has_many :comments, :as => :person - has_many :hacks, :through => :comments, :source => :hack - - def find_custom_articles - articles.find(:all, :conditions => ["name = ?", "Article One"]) - end -end +class User < ActiveRecord::Base + has_many :readings + has_many :articles, :through => :readings + has_many :comments, :as => :person + has_many :hacks, :through => :comments, :source => :hack + + def find_custom_articles + articles.find(:all, :conditions => ["name = ?", "Article One"]) + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/users.yml b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/users.yml index d33a38a4a..858c47cab 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/users.yml +++ b/vendor/gems/composite_primary_keys-2.2.2/test/fixtures/users.yml @@ -1,6 +1,6 @@ -santiago: - id: 1 - name: Santiago -drnic: - id: 2 +santiago: + id: 1 + name: Santiago +drnic: + id: 2 name: Dr Nic \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/hash_tricks.rb b/vendor/gems/composite_primary_keys-2.2.2/test/hash_tricks.rb index b37bbbbf1..856fc5fea 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/hash_tricks.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/hash_tricks.rb @@ -1,34 +1,34 @@ -# From: -# http://www.bigbold.com/snippets/posts/show/2178 -# http://blog.caboo.se/articles/2006/06/11/stupid-hash-tricks -# -# An example utilisation of these methods in a controller is: -# def some_action -# # some script kiddie also passed in :bee, which we don't want tampered with _here_. -# @model = Model.create(params.pass(:foo, :bar)) -# end -class Hash - - # lets through the keys in the argument - # >> {:one => 1, :two => 2, :three => 3}.pass(:one) - # => {:one=>1} - def pass(*keys) - keys = keys.first if keys.first.is_a?(Array) - tmp = self.clone - tmp.delete_if {|k,v| ! keys.include?(k.to_sym) } - tmp.delete_if {|k,v| ! keys.include?(k.to_s) } - tmp - end - - # blocks the keys in the arguments - # >> {:one => 1, :two => 2, :three => 3}.block(:one) - # => {:two=>2, :three=>3} - def block(*keys) - keys = keys.first if keys.first.is_a?(Array) - tmp = self.clone - tmp.delete_if {|k,v| keys.include?(k.to_sym) } - tmp.delete_if {|k,v| keys.include?(k.to_s) } - tmp - end - -end +# From: +# http://www.bigbold.com/snippets/posts/show/2178 +# http://blog.caboo.se/articles/2006/06/11/stupid-hash-tricks +# +# An example utilisation of these methods in a controller is: +# def some_action +# # some script kiddie also passed in :bee, which we don't want tampered with _here_. +# @model = Model.create(params.pass(:foo, :bar)) +# end +class Hash + + # lets through the keys in the argument + # >> {:one => 1, :two => 2, :three => 3}.pass(:one) + # => {:one=>1} + def pass(*keys) + keys = keys.first if keys.first.is_a?(Array) + tmp = self.clone + tmp.delete_if {|k,v| ! keys.include?(k.to_sym) } + tmp.delete_if {|k,v| ! keys.include?(k.to_s) } + tmp + end + + # blocks the keys in the arguments + # >> {:one => 1, :two => 2, :three => 3}.block(:one) + # => {:two=>2, :three=>3} + def block(*keys) + keys = keys.first if keys.first.is_a?(Array) + tmp = self.clone + tmp.delete_if {|k,v| keys.include?(k.to_sym) } + tmp.delete_if {|k,v| keys.include?(k.to_s) } + tmp + end + +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_associations.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_associations.rb index 78302f86c..4c69ce57b 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_associations.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_associations.rb @@ -1,160 +1,160 @@ -require 'abstract_unit' -require 'fixtures/article' -require 'fixtures/product' -require 'fixtures/tariff' -require 'fixtures/product_tariff' -require 'fixtures/suburb' -require 'fixtures/street' -require 'fixtures/restaurant' -require 'fixtures/dorm' -require 'fixtures/room' -require 'fixtures/room_attribute' -require 'fixtures/room_attribute_assignment' -require 'fixtures/student' -require 'fixtures/room_assignment' -require 'fixtures/user' -require 'fixtures/reading' - -class TestAssociations < Test::Unit::TestCase - fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs, - :dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users, :readings - - def test_has_many_through_with_conditions_when_through_association_is_not_composite - user = User.find(:first) - assert_equal 1, user.articles.find(:all, :conditions => ["articles.name = ?", "Article One"]).size - end - - def test_has_many_through_with_conditions_when_through_association_is_composite - room = Room.find(:first) - assert_equal 0, room.room_attributes.find(:all, :conditions => ["room_attributes.name != ?", "keg"]).size - end - - def test_has_many_through_on_custom_finder_when_through_association_is_composite_finder_when_through_association_is_not_composite - user = User.find(:first) - assert_equal 1, user.find_custom_articles.size - end - - def test_has_many_through_on_custom_finder_when_through_association_is_composite - room = Room.find(:first) - assert_equal 0, room.find_custom_room_attributes.size - end - - def test_count - assert_equal 2, Product.count(:include => :product_tariffs) - assert_equal 3, Tariff.count(:include => :product_tariffs) - assert_equal 2, Tariff.count(:group => :start_date).size - end - - def test_products - assert_not_nil products(:first_product).product_tariffs - assert_equal 2, products(:first_product).product_tariffs.length - assert_not_nil products(:first_product).tariffs - assert_equal 2, products(:first_product).tariffs.length - assert_not_nil products(:first_product).product_tariff - end - - def test_product_tariffs - assert_not_nil product_tariffs(:first_flat).product - assert_not_nil product_tariffs(:first_flat).tariff - assert_equal Product, product_tariffs(:first_flat).product.class - assert_equal Tariff, product_tariffs(:first_flat).tariff.class - end - - def test_tariffs - assert_not_nil tariffs(:flat).product_tariffs - assert_equal 1, tariffs(:flat).product_tariffs.length - assert_not_nil tariffs(:flat).products - assert_equal 1, tariffs(:flat).products.length - assert_not_nil tariffs(:flat).product_tariff - end - - # Its not generating the instances of associated classes from the rows - def test_find_includes_products - assert @products = Product.find(:all, :include => :product_tariffs) - assert_equal 2, @products.length - assert_not_nil @products.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array' - assert_equal 3, @products.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, - "Incorrect number of product_tariffs returned" - end - - def test_find_includes_tariffs - assert @tariffs = Tariff.find(:all, :include => :product_tariffs) - assert_equal 3, @tariffs.length - assert_not_nil @tariffs.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array' - assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, - "Incorrect number of product_tariffs returnedturned" - end - - def test_find_includes_product - assert @product_tariffs = ProductTariff.find(:all, :include => :product) - assert_equal 3, @product_tariffs.length - assert_not_nil @product_tariffs.first.instance_variable_get('@product'), '@product not set' - end - - def test_find_includes_comp_belongs_to_tariff - assert @product_tariffs = ProductTariff.find(:all, :include => :tariff) - assert_equal 3, @product_tariffs.length - assert_not_nil @product_tariffs.first.instance_variable_get('@tariff'), '@tariff not set' - end - - def test_find_includes_extended - assert @products = Product.find(:all, :include => {:product_tariffs => :tariff}) - assert_equal 3, @products.inject(0) {|sum, product| sum + product.instance_variable_get('@product_tariffs').length}, - "Incorrect number of product_tariffs returned" - - assert @tariffs = Tariff.find(:all, :include => {:product_tariffs => :product}) - assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, - "Incorrect number of product_tariffs returned" - end - - def test_join_where_clause - @product = Product.find(:first, :include => :product_tariffs) - where_clause = @product.product_tariffs.composite_where_clause( - ['foo','bar'], [1,2] - ) - assert_equal('(foo=1 AND bar=2)', where_clause) - end - - def test_has_many_through - @products = Product.find(:all, :include => :tariffs) - assert_equal 3, @products.inject(0) {|sum, product| sum + product.instance_variable_get('@tariffs').length}, - "Incorrect number of tariffs returned" - end - - def test_has_many_through_when_not_pre_loaded - student = Student.find(:first) - rooms = student.rooms - assert_equal 1, rooms.size - assert_equal 1, rooms.first.dorm_id - assert_equal 1, rooms.first.room_id - end - - def test_has_many_through_when_through_association_is_composite - dorm = Dorm.find(:first) - assert_equal 1, dorm.rooms.length - assert_equal 1, dorm.rooms.first.room_attributes.length - assert_equal 'keg', dorm.rooms.first.room_attributes.first.name - end - - def test_associations_with_conditions - @suburb = Suburb.find([2, 1]) - assert_equal 2, @suburb.streets.size - - @suburb = Suburb.find([2, 1]) - assert_equal 1, @suburb.first_streets.size - - @suburb = Suburb.find([2, 1], :include => :streets) - assert_equal 2, @suburb.streets.size - - @suburb = Suburb.find([2, 1], :include => :first_streets) - assert_equal 1, @suburb.first_streets.size - end - - def test_has_and_belongs_to_many - @restaurant = Restaurant.find([1,1]) - assert_equal 2, @restaurant.suburbs.size - - @restaurant = Restaurant.find([1,1], :include => :suburbs) - assert_equal 2, @restaurant.suburbs.size - end -end +require 'abstract_unit' +require 'fixtures/article' +require 'fixtures/product' +require 'fixtures/tariff' +require 'fixtures/product_tariff' +require 'fixtures/suburb' +require 'fixtures/street' +require 'fixtures/restaurant' +require 'fixtures/dorm' +require 'fixtures/room' +require 'fixtures/room_attribute' +require 'fixtures/room_attribute_assignment' +require 'fixtures/student' +require 'fixtures/room_assignment' +require 'fixtures/user' +require 'fixtures/reading' + +class TestAssociations < Test::Unit::TestCase + fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs, + :dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users, :readings + + def test_has_many_through_with_conditions_when_through_association_is_not_composite + user = User.find(:first) + assert_equal 1, user.articles.find(:all, :conditions => ["articles.name = ?", "Article One"]).size + end + + def test_has_many_through_with_conditions_when_through_association_is_composite + room = Room.find(:first) + assert_equal 0, room.room_attributes.find(:all, :conditions => ["room_attributes.name != ?", "keg"]).size + end + + def test_has_many_through_on_custom_finder_when_through_association_is_composite_finder_when_through_association_is_not_composite + user = User.find(:first) + assert_equal 1, user.find_custom_articles.size + end + + def test_has_many_through_on_custom_finder_when_through_association_is_composite + room = Room.find(:first) + assert_equal 0, room.find_custom_room_attributes.size + end + + def test_count + assert_equal 2, Product.count(:include => :product_tariffs) + assert_equal 3, Tariff.count(:include => :product_tariffs) + assert_equal 2, Tariff.count(:group => :start_date).size + end + + def test_products + assert_not_nil products(:first_product).product_tariffs + assert_equal 2, products(:first_product).product_tariffs.length + assert_not_nil products(:first_product).tariffs + assert_equal 2, products(:first_product).tariffs.length + assert_not_nil products(:first_product).product_tariff + end + + def test_product_tariffs + assert_not_nil product_tariffs(:first_flat).product + assert_not_nil product_tariffs(:first_flat).tariff + assert_equal Product, product_tariffs(:first_flat).product.class + assert_equal Tariff, product_tariffs(:first_flat).tariff.class + end + + def test_tariffs + assert_not_nil tariffs(:flat).product_tariffs + assert_equal 1, tariffs(:flat).product_tariffs.length + assert_not_nil tariffs(:flat).products + assert_equal 1, tariffs(:flat).products.length + assert_not_nil tariffs(:flat).product_tariff + end + + # Its not generating the instances of associated classes from the rows + def test_find_includes_products + assert @products = Product.find(:all, :include => :product_tariffs) + assert_equal 2, @products.length + assert_not_nil @products.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array' + assert_equal 3, @products.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, + "Incorrect number of product_tariffs returned" + end + + def test_find_includes_tariffs + assert @tariffs = Tariff.find(:all, :include => :product_tariffs) + assert_equal 3, @tariffs.length + assert_not_nil @tariffs.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array' + assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, + "Incorrect number of product_tariffs returnedturned" + end + + def test_find_includes_product + assert @product_tariffs = ProductTariff.find(:all, :include => :product) + assert_equal 3, @product_tariffs.length + assert_not_nil @product_tariffs.first.instance_variable_get('@product'), '@product not set' + end + + def test_find_includes_comp_belongs_to_tariff + assert @product_tariffs = ProductTariff.find(:all, :include => :tariff) + assert_equal 3, @product_tariffs.length + assert_not_nil @product_tariffs.first.instance_variable_get('@tariff'), '@tariff not set' + end + + def test_find_includes_extended + assert @products = Product.find(:all, :include => {:product_tariffs => :tariff}) + assert_equal 3, @products.inject(0) {|sum, product| sum + product.instance_variable_get('@product_tariffs').length}, + "Incorrect number of product_tariffs returned" + + assert @tariffs = Tariff.find(:all, :include => {:product_tariffs => :product}) + assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length}, + "Incorrect number of product_tariffs returned" + end + + def test_join_where_clause + @product = Product.find(:first, :include => :product_tariffs) + where_clause = @product.product_tariffs.composite_where_clause( + ['foo','bar'], [1,2] + ) + assert_equal('(foo=1 AND bar=2)', where_clause) + end + + def test_has_many_through + @products = Product.find(:all, :include => :tariffs) + assert_equal 3, @products.inject(0) {|sum, product| sum + product.instance_variable_get('@tariffs').length}, + "Incorrect number of tariffs returned" + end + + def test_has_many_through_when_not_pre_loaded + student = Student.find(:first) + rooms = student.rooms + assert_equal 1, rooms.size + assert_equal 1, rooms.first.dorm_id + assert_equal 1, rooms.first.room_id + end + + def test_has_many_through_when_through_association_is_composite + dorm = Dorm.find(:first) + assert_equal 1, dorm.rooms.length + assert_equal 1, dorm.rooms.first.room_attributes.length + assert_equal 'keg', dorm.rooms.first.room_attributes.first.name + end + + def test_associations_with_conditions + @suburb = Suburb.find([2, 1]) + assert_equal 2, @suburb.streets.size + + @suburb = Suburb.find([2, 1]) + assert_equal 1, @suburb.first_streets.size + + @suburb = Suburb.find([2, 1], :include => :streets) + assert_equal 2, @suburb.streets.size + + @suburb = Suburb.find([2, 1], :include => :first_streets) + assert_equal 1, @suburb.first_streets.size + end + + def test_has_and_belongs_to_many + @restaurant = Restaurant.find([1,1]) + assert_equal 2, @restaurant.suburbs.size + + @restaurant = Restaurant.find([1,1], :include => :suburbs) + assert_equal 2, @restaurant.suburbs.size + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_clone.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_clone.rb index 822974430..26e7970d5 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_clone.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_clone.rb @@ -1,34 +1,34 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -class TestClone < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_truth - testing_with do - clone = @first.clone - assert_equal @first.attributes.block(@klass.primary_key), clone.attributes - if composite? - @klass.primary_key.each {|key| assert_nil clone[key], "Primary key '#{key}' should be nil"} - else - assert_nil clone[@klass.primary_key], "Sole primary key should be nil" - end - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +class TestClone < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_truth + testing_with do + clone = @first.clone + assert_equal @first.attributes.block(@klass.primary_key), clone.attributes + if composite? + @klass.primary_key.each {|key| assert_nil clone[key], "Primary key '#{key}' should be nil"} + else + assert_nil clone[@klass.primary_key], "Sole primary key should be nil" + end + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_delete.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_delete.rb index cd79bbd72..2bd0d2abe 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_delete.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_delete.rb @@ -1,96 +1,96 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' -require 'fixtures/department' -require 'fixtures/employee' - -class TestDelete < Test::Unit::TestCase - fixtures :reference_types, :reference_codes, :departments, :employees - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_destroy_one - testing_with do - #assert @first.destroy - assert true - end - end - - def test_destroy_one_via_class - testing_with do - assert @klass.destroy(*@first.id) - end - end - - def test_destroy_one_alone_via_class - testing_with do - assert @klass.destroy(@first.id) - end - end - - def test_delete_one - testing_with do - assert @klass.delete(*@first.id) if composite? - end - end - - def test_delete_one_alone - testing_with do - assert @klass.delete(@first.id) - end - end - - def test_delete_many - testing_with do - to_delete = @klass.find(:all)[0..1] - assert_equal 2, to_delete.length - end - end - - def test_delete_all - testing_with do - @klass.delete_all - end - end - - def test_clear_association - department = Department.find(1,1) - assert_equal 2, department.employees.size, "Before clear employee count should be 2." - department.employees.clear - assert_equal 0, department.employees.size, "After clear employee count should be 0." - department.reload - assert_equal 0, department.employees.size, "After clear and a reload from DB employee count should be 0." - end - - def test_delete_association - department = Department.find(1,1) - assert_equal 2, department.employees.size , "Before delete employee count should be 2." - first_employee = department.employees[0] - department.employees.delete(first_employee) - assert_equal 1, department.employees.size, "After delete employee count should be 1." - department.reload - assert_equal 1, department.employees.size, "After delete and a reload from DB employee count should be 1." - end - - def test_delete_records_for_has_many_association_with_composite_primary_key - reference_type = ReferenceType.find(1) - codes_to_delete = reference_type.reference_codes[0..1] - assert_equal 3, reference_type.reference_codes.size, "Before deleting records reference_code count should be 3." - reference_type.reference_codes.delete_records(codes_to_delete) - reference_type.reload - assert_equal 1, reference_type.reference_codes.size, "After deleting 2 records and a reload from DB reference_code count should be 1." - end -end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' +require 'fixtures/department' +require 'fixtures/employee' + +class TestDelete < Test::Unit::TestCase + fixtures :reference_types, :reference_codes, :departments, :employees + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_destroy_one + testing_with do + #assert @first.destroy + assert true + end + end + + def test_destroy_one_via_class + testing_with do + assert @klass.destroy(*@first.id) + end + end + + def test_destroy_one_alone_via_class + testing_with do + assert @klass.destroy(@first.id) + end + end + + def test_delete_one + testing_with do + assert @klass.delete(*@first.id) if composite? + end + end + + def test_delete_one_alone + testing_with do + assert @klass.delete(@first.id) + end + end + + def test_delete_many + testing_with do + to_delete = @klass.find(:all)[0..1] + assert_equal 2, to_delete.length + end + end + + def test_delete_all + testing_with do + @klass.delete_all + end + end + + def test_clear_association + department = Department.find(1,1) + assert_equal 2, department.employees.size, "Before clear employee count should be 2." + department.employees.clear + assert_equal 0, department.employees.size, "After clear employee count should be 0." + department.reload + assert_equal 0, department.employees.size, "After clear and a reload from DB employee count should be 0." + end + + def test_delete_association + department = Department.find(1,1) + assert_equal 2, department.employees.size , "Before delete employee count should be 2." + first_employee = department.employees[0] + department.employees.delete(first_employee) + assert_equal 1, department.employees.size, "After delete employee count should be 1." + department.reload + assert_equal 1, department.employees.size, "After delete and a reload from DB employee count should be 1." + end + + def test_delete_records_for_has_many_association_with_composite_primary_key + reference_type = ReferenceType.find(1) + codes_to_delete = reference_type.reference_codes[0..1] + assert_equal 3, reference_type.reference_codes.size, "Before deleting records reference_code count should be 3." + reference_type.reference_codes.delete_records(codes_to_delete) + reference_type.reload + assert_equal 1, reference_type.reference_codes.size, "After deleting 2 records and a reload from DB reference_code count should be 1." + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_dummy.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_dummy.rb index 44386685b..da21c4716 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_dummy.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_dummy.rb @@ -1,28 +1,28 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -class TestDummy < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - classes = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - } - - def setup - self.class.classes = classes - end - - def test_truth - testing_with do - assert true - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +class TestDummy < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + classes = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + } + + def setup + self.class.classes = classes + end + + def test_truth + testing_with do + assert true + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_find.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_find.rb index a07d30a64..c8c1af7dc 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_find.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_find.rb @@ -1,73 +1,73 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -# Testing the find action on composite ActiveRecords with two primary keys -class TestFind < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => [:reference_type_id], - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - :dual_strs => { - :class => ReferenceCode, - :primary_keys => ['reference_type_id', 'reference_code'], - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_find_first - testing_with do - obj = @klass.find(:first) - assert obj - assert_equal @klass, obj.class - end - end - - def test_find - testing_with do - found = @klass.find(*first_id) # e.g. find(1,1) or find 1,1 - assert found - assert_equal @klass, found.class - assert_equal found, @klass.find(found.id) - assert_equal found, @klass.find(found.to_param) - end - end - - def test_find_composite_ids - testing_with do - found = @klass.find(first_id) # e.g. find([1,1].to_composite_ids) - assert found - assert_equal @klass, found.class - assert_equal found, @klass.find(found.id) - assert_equal found, @klass.find(found.to_param) - end - end - - def test_to_param - testing_with do - assert_equal first_id_str, @first.to_param.to_s - end - end - - def things_to_look_at - testing_with do - assert_equal found, @klass.find(found.id.to_s) # fails for 2+ keys - end - end - - def test_not_found - assert_raise(::ActiveRecord::RecordNotFound) do - ReferenceCode.send :find, '999,999' - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +# Testing the find action on composite ActiveRecords with two primary keys +class TestFind < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => [:reference_type_id], + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + :dual_strs => { + :class => ReferenceCode, + :primary_keys => ['reference_type_id', 'reference_code'], + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_find_first + testing_with do + obj = @klass.find(:first) + assert obj + assert_equal @klass, obj.class + end + end + + def test_find + testing_with do + found = @klass.find(*first_id) # e.g. find(1,1) or find 1,1 + assert found + assert_equal @klass, found.class + assert_equal found, @klass.find(found.id) + assert_equal found, @klass.find(found.to_param) + end + end + + def test_find_composite_ids + testing_with do + found = @klass.find(first_id) # e.g. find([1,1].to_composite_ids) + assert found + assert_equal @klass, found.class + assert_equal found, @klass.find(found.id) + assert_equal found, @klass.find(found.to_param) + end + end + + def test_to_param + testing_with do + assert_equal first_id_str, @first.to_param.to_s + end + end + + def things_to_look_at + testing_with do + assert_equal found, @klass.find(found.id.to_s) # fails for 2+ keys + end + end + + def test_not_found + assert_raise(::ActiveRecord::RecordNotFound) do + ReferenceCode.send :find, '999,999' + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_ids.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_ids.rb index 9ba2d92a7..3cd4f3c9e 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_ids.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_ids.rb @@ -1,97 +1,97 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -class TestIds < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => [:reference_type_id], - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - :dual_strs => { - :class => ReferenceCode, - :primary_keys => ['reference_type_id', 'reference_code'], - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_id - testing_with do - assert_equal @first.id, @first.ids if composite? - end - end - - def test_id_to_s - testing_with do - assert_equal first_id_str, @first.id.to_s - assert_equal first_id_str, "#{@first.id}" - end - end - - def test_ids_to_s - testing_with do - order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',') - to_test = @klass.find(:all, :order => order)[0..1].map(&:id) - assert_equal '(1,1),(1,2)', @klass.ids_to_s(to_test) if @key_test == :dual - assert_equal '1,1;1,2', @klass.ids_to_s(to_test, ',', ';', '', '') if @key_test == :dual - end - end - - def test_composite_where_clause - testing_with do - where = 'reference_codes.reference_type_id=1 AND reference_codes.reference_code=2) OR (reference_codes.reference_type_id=2 AND reference_codes.reference_code=2' - assert_equal(where, @klass.composite_where_clause([[1, 2], [2, 2]])) if @key_test == :dual - end - end - - def test_set_ids_string - testing_with do - array = @primary_keys.collect {|key| 5} - expected = composite? ? array.to_composite_keys : array.first - @first.id = expected.to_s - assert_equal expected, @first.id - end - end - - def test_set_ids_array - testing_with do - array = @primary_keys.collect {|key| 5} - expected = composite? ? array.to_composite_keys : array.first - @first.id = expected - assert_equal expected, @first.id - end - end - - def test_set_ids_comp - testing_with do - array = @primary_keys.collect {|key| 5} - expected = composite? ? array.to_composite_keys : array.first - @first.id = expected - assert_equal expected, @first.id - end - end - - def test_primary_keys - testing_with do - if composite? - assert_not_nil @klass.primary_keys - assert_equal @primary_keys.map {|key| key.to_sym}, @klass.primary_keys - assert_equal @klass.primary_keys, @klass.primary_key - else - assert_not_nil @klass.primary_key - assert_equal @primary_keys, [@klass.primary_key.to_sym] - end - assert_equal @primary_keys.join(','), @klass.primary_key.to_s - # Need a :primary_keys should be Array with to_s overridden - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +class TestIds < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => [:reference_type_id], + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + :dual_strs => { + :class => ReferenceCode, + :primary_keys => ['reference_type_id', 'reference_code'], + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_id + testing_with do + assert_equal @first.id, @first.ids if composite? + end + end + + def test_id_to_s + testing_with do + assert_equal first_id_str, @first.id.to_s + assert_equal first_id_str, "#{@first.id}" + end + end + + def test_ids_to_s + testing_with do + order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',') + to_test = @klass.find(:all, :order => order)[0..1].map(&:id) + assert_equal '(1,1),(1,2)', @klass.ids_to_s(to_test) if @key_test == :dual + assert_equal '1,1;1,2', @klass.ids_to_s(to_test, ',', ';', '', '') if @key_test == :dual + end + end + + def test_composite_where_clause + testing_with do + where = 'reference_codes.reference_type_id=1 AND reference_codes.reference_code=2) OR (reference_codes.reference_type_id=2 AND reference_codes.reference_code=2' + assert_equal(where, @klass.composite_where_clause([[1, 2], [2, 2]])) if @key_test == :dual + end + end + + def test_set_ids_string + testing_with do + array = @primary_keys.collect {|key| 5} + expected = composite? ? array.to_composite_keys : array.first + @first.id = expected.to_s + assert_equal expected, @first.id + end + end + + def test_set_ids_array + testing_with do + array = @primary_keys.collect {|key| 5} + expected = composite? ? array.to_composite_keys : array.first + @first.id = expected + assert_equal expected, @first.id + end + end + + def test_set_ids_comp + testing_with do + array = @primary_keys.collect {|key| 5} + expected = composite? ? array.to_composite_keys : array.first + @first.id = expected + assert_equal expected, @first.id + end + end + + def test_primary_keys + testing_with do + if composite? + assert_not_nil @klass.primary_keys + assert_equal @primary_keys.map {|key| key.to_sym}, @klass.primary_keys + assert_equal @klass.primary_keys, @klass.primary_key + else + assert_not_nil @klass.primary_key + assert_equal @primary_keys, [@klass.primary_key.to_sym] + end + assert_equal @primary_keys.join(','), @klass.primary_key.to_s + # Need a :primary_keys should be Array with to_s overridden + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_miscellaneous.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_miscellaneous.rb index 25f6096fe..e5de57021 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_miscellaneous.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_miscellaneous.rb @@ -1,39 +1,39 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -class TestMiscellaneous < Test::Unit::TestCase - fixtures :reference_types, :reference_codes, :products - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_composite_class - testing_with do - assert_equal composite?, @klass.composite? - end - end - - def test_composite_instance - testing_with do - assert_equal composite?, @first.composite? - end - end - - def test_count - assert_equal 2, Product.count - end - +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +class TestMiscellaneous < Test::Unit::TestCase + fixtures :reference_types, :reference_codes, :products + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_composite_class + testing_with do + assert_equal composite?, @klass.composite? + end + end + + def test_composite_instance + testing_with do + assert_equal composite?, @first.composite? + end + end + + def test_count + assert_equal 2, Product.count + end + end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_pagination.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_pagination.rb index fa19d95a6..4952ff207 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_pagination.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_pagination.rb @@ -1,38 +1,38 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' -require 'plugins/pagination' - -class TestPagination < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - include ActionController::Pagination - DEFAULT_PAGE_SIZE = 2 - - attr_accessor :params - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - :table => :reference_types, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - :table => :reference_codes, - }, - } - - def setup - self.class.classes = CLASSES - @params = {} - end - - def test_paginate_all - testing_with do - @object_pages, @objects = paginate @klass_info[:table], :per_page => DEFAULT_PAGE_SIZE - assert_equal 2, @objects.length, "Each page should have #{DEFAULT_PAGE_SIZE} items" - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' +require 'plugins/pagination' + +class TestPagination < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + include ActionController::Pagination + DEFAULT_PAGE_SIZE = 2 + + attr_accessor :params + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + :table => :reference_types, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + :table => :reference_codes, + }, + } + + def setup + self.class.classes = CLASSES + @params = {} + end + + def test_paginate_all + testing_with do + @object_pages, @objects = paginate @klass_info[:table], :per_page => DEFAULT_PAGE_SIZE + assert_equal 2, @objects.length, "Each page should have #{DEFAULT_PAGE_SIZE} items" + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_santiago.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_santiago.rb index 4b5f433e4..771c414a7 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_santiago.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_santiago.rb @@ -1,27 +1,27 @@ -# Test cases devised by Santiago that broke the Composite Primary Keys -# code at one point in time. But no more!!! - -require 'abstract_unit' -require 'fixtures/user' -require 'fixtures/article' -require 'fixtures/reading' - -class TestSantiago < Test::Unit::TestCase - fixtures :suburbs, :streets, :users, :articles, :readings - - def test_normal_and_composite_associations - assert_not_nil @suburb = Suburb.find(1,1) - assert_equal 1, @suburb.streets.length - - assert_not_nil @street = Street.find(1) - assert_not_nil @street.suburb - end - - def test_single_keys - @santiago = User.find(1) - assert_not_nil @santiago.articles - assert_equal 2, @santiago.articles.length - assert_not_nil @santiago.readings - assert_equal 2, @santiago.readings.length - end -end +# Test cases devised by Santiago that broke the Composite Primary Keys +# code at one point in time. But no more!!! + +require 'abstract_unit' +require 'fixtures/user' +require 'fixtures/article' +require 'fixtures/reading' + +class TestSantiago < Test::Unit::TestCase + fixtures :suburbs, :streets, :users, :articles, :readings + + def test_normal_and_composite_associations + assert_not_nil @suburb = Suburb.find(1,1) + assert_equal 1, @suburb.streets.length + + assert_not_nil @street = Street.find(1) + assert_not_nil @street.suburb + end + + def test_single_keys + @santiago = User.find(1) + assert_not_nil @santiago.articles + assert_equal 2, @santiago.articles.length + assert_not_nil @santiago.readings + assert_equal 2, @santiago.readings.length + end +end diff --git a/vendor/gems/composite_primary_keys-2.2.2/test/test_update.rb b/vendor/gems/composite_primary_keys-2.2.2/test/test_update.rb index d612c92a8..87ca8f5f4 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/test/test_update.rb +++ b/vendor/gems/composite_primary_keys-2.2.2/test/test_update.rb @@ -1,40 +1,40 @@ -require 'abstract_unit' -require 'fixtures/reference_type' -require 'fixtures/reference_code' - -class TestUpdate < Test::Unit::TestCase - fixtures :reference_types, :reference_codes - - CLASSES = { - :single => { - :class => ReferenceType, - :primary_keys => :reference_type_id, - :update => { :description => 'RT Desc' }, - }, - :dual => { - :class => ReferenceCode, - :primary_keys => [:reference_type_id, :reference_code], - :update => { :description => 'RT Desc' }, - }, - } - - def setup - self.class.classes = CLASSES - end - - def test_setup - testing_with do - assert_not_nil @klass_info[:update] - end - end - - def test_update_attributes - testing_with do - assert @first.update_attributes(@klass_info[:update]) - assert @first.reload - @klass_info[:update].each_pair do |attr_name, new_value| - assert_equal new_value, @first[attr_name], "Attribute #{attr_name} is incorrect" - end - end - end +require 'abstract_unit' +require 'fixtures/reference_type' +require 'fixtures/reference_code' + +class TestUpdate < Test::Unit::TestCase + fixtures :reference_types, :reference_codes + + CLASSES = { + :single => { + :class => ReferenceType, + :primary_keys => :reference_type_id, + :update => { :description => 'RT Desc' }, + }, + :dual => { + :class => ReferenceCode, + :primary_keys => [:reference_type_id, :reference_code], + :update => { :description => 'RT Desc' }, + }, + } + + def setup + self.class.classes = CLASSES + end + + def test_setup + testing_with do + assert_not_nil @klass_info[:update] + end + end + + def test_update_attributes + testing_with do + assert @first.update_attributes(@klass_info[:update]) + assert @first.reload + @klass_info[:update].each_pair do |attr_name, new_value| + assert_equal new_value, @first[attr_name], "Attribute #{attr_name} is incorrect" + end + end + end end \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/website/stylesheets/screen.css b/vendor/gems/composite_primary_keys-2.2.2/website/stylesheets/screen.css index 3f2d8f951..cfa43425b 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/website/stylesheets/screen.css +++ b/vendor/gems/composite_primary_keys-2.2.2/website/stylesheets/screen.css @@ -1,126 +1,126 @@ -body { - background-color: #2F30EE; - font-family: "Georgia", sans-serif; - font-size: 16px; - line-height: 1.6em; - padding: 1.6em 0 0 0; - color: #eee; -} -h1, h2, h3, h4, h5, h6 { - color: #FFEDFA; -} -h1 { - font-family: sans-serif; - font-weight: normal; - font-size: 4em; - line-height: 0.8em; - letter-spacing: -0.1ex; - margin: 5px; -} -li { - padding: 0; - margin: 0; - list-style-type: square; -} -a { - color: #99f; - font-weight: normal; - text-decoration: underline; -} -blockquote { - font-size: 90%; - font-style: italic; - border-left: 1px solid #eee; - padding-left: 1em; -} -.caps { - font-size: 80%; -} - -#main { - width: 45em; - padding: 0; - margin: 0 auto; -} -.coda { - text-align: right; - color: #77f; - font-size: smaller; -} - -table { - font-size: 90%; - line-height: 1.4em; - color: #ff8; - background-color: #111; - padding: 2px 10px 2px 10px; - border-style: dashed; -} - -th { - color: #fff; -} - -td { - padding: 2px 10px 2px 10px; -} - -.success { - color: #0CC52B; -} - -.failed { - color: #E90A1B; -} - -.unknown { - color: #995000; -} -pre, code { - font-family: monospace; - font-size: 90%; - line-height: 1.4em; - color: #ff8; - background-color: #111; - padding: 2px 10px 2px 10px; -} -.comment { color: #aaa; font-style: italic; } -.keyword { color: #eff; font-weight: bold; } -.punct { color: #eee; font-weight: bold; } -.symbol { color: #0bb; } -.string { color: #6b4; } -.ident { color: #ff8; } -.constant { color: #66f; } -.regex { color: #ec6; } -.number { color: #F99; } -.expr { color: #227; } - -#version { - float: right; - text-align: right; - font-family: sans-serif; - font-weight: normal; - background-color: #ff8; - color: #66f; - padding: 15px 20px 10px 20px; - margin: 0 auto; - margin-top: 15px; - border: 3px solid #66f; -} - -#version .numbers { - display: block; - font-size: 4em; - line-height: 0.8em; - letter-spacing: -0.1ex; -} - -#version a { - text-decoration: none; -} - -.clickable { - cursor: pointer; - cursor: hand; -} - +body { + background-color: #2F30EE; + font-family: "Georgia", sans-serif; + font-size: 16px; + line-height: 1.6em; + padding: 1.6em 0 0 0; + color: #eee; +} +h1, h2, h3, h4, h5, h6 { + color: #FFEDFA; +} +h1 { + font-family: sans-serif; + font-weight: normal; + font-size: 4em; + line-height: 0.8em; + letter-spacing: -0.1ex; + margin: 5px; +} +li { + padding: 0; + margin: 0; + list-style-type: square; +} +a { + color: #99f; + font-weight: normal; + text-decoration: underline; +} +blockquote { + font-size: 90%; + font-style: italic; + border-left: 1px solid #eee; + padding-left: 1em; +} +.caps { + font-size: 80%; +} + +#main { + width: 45em; + padding: 0; + margin: 0 auto; +} +.coda { + text-align: right; + color: #77f; + font-size: smaller; +} + +table { + font-size: 90%; + line-height: 1.4em; + color: #ff8; + background-color: #111; + padding: 2px 10px 2px 10px; + border-style: dashed; +} + +th { + color: #fff; +} + +td { + padding: 2px 10px 2px 10px; +} + +.success { + color: #0CC52B; +} + +.failed { + color: #E90A1B; +} + +.unknown { + color: #995000; +} +pre, code { + font-family: monospace; + font-size: 90%; + line-height: 1.4em; + color: #ff8; + background-color: #111; + padding: 2px 10px 2px 10px; +} +.comment { color: #aaa; font-style: italic; } +.keyword { color: #eff; font-weight: bold; } +.punct { color: #eee; font-weight: bold; } +.symbol { color: #0bb; } +.string { color: #6b4; } +.ident { color: #ff8; } +.constant { color: #66f; } +.regex { color: #ec6; } +.number { color: #F99; } +.expr { color: #227; } + +#version { + float: right; + text-align: right; + font-family: sans-serif; + font-weight: normal; + background-color: #ff8; + color: #66f; + padding: 15px 20px 10px 20px; + margin: 0 auto; + margin-top: 15px; + border: 3px solid #66f; +} + +#version .numbers { + display: block; + font-size: 4em; + line-height: 0.8em; + letter-spacing: -0.1ex; +} + +#version a { + text-decoration: none; +} + +.clickable { + cursor: pointer; + cursor: hand; +} + diff --git a/vendor/gems/composite_primary_keys-2.2.2/website/version-raw.txt b/vendor/gems/composite_primary_keys-2.2.2/website/version-raw.txt index 74ca3ac67..9059e938d 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/website/version-raw.txt +++ b/vendor/gems/composite_primary_keys-2.2.2/website/version-raw.txt @@ -1,2 +1,2 @@ -h1. Announcement JS file +h1. Announcement JS file MagicAnnouncement.show('compositekeys', version); \ No newline at end of file diff --git a/vendor/gems/composite_primary_keys-2.2.2/website/version.js b/vendor/gems/composite_primary_keys-2.2.2/website/version.js index d0a9dab1d..3225547c9 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/website/version.js +++ b/vendor/gems/composite_primary_keys-2.2.2/website/version.js @@ -1,4 +1,4 @@ // Version JS file var version = "2.2.2"; - + document.write(" - " + version); diff --git a/vendor/gems/composite_primary_keys-2.2.2/website/version.txt b/vendor/gems/composite_primary_keys-2.2.2/website/version.txt index d0ac6a7ac..6054d2f4b 100644 --- a/vendor/gems/composite_primary_keys-2.2.2/website/version.txt +++ b/vendor/gems/composite_primary_keys-2.2.2/website/version.txt @@ -1,3 +1,3 @@ -h1. Version JS file - +h1. Version JS file + document.write(" - " + version); \ No newline at end of file diff --git a/vendor/plugins/rails-i18n/locale/dsb.yml b/vendor/plugins/rails-i18n/locale/dsb.yml index e3fdad824..6fd2c7a64 100644 --- a/vendor/plugins/rails-i18n/locale/dsb.yml +++ b/vendor/plugins/rails-i18n/locale/dsb.yml @@ -1,182 +1,182 @@ -# Lower Sorbian translations for Ruby on Rails -# by Michael Wolf (preklady@wolfmicha.de) - -dsb: - # ActiveSupport - support: - array: - words_connector: ", " - two_words_connector: " a " - last_word_connector: " a " - sentence_connector: "a" - skip_last_comma: true - - # Date - date: - formats: - default: "%d. %m. %Y" - short: "%d %b" - long: "%d. %B %Y" - day_names: [njeźela, pónjeźele, wałtora, srjoda, stwórtk, pětk, sobota] - abbr_day_names: [Nj, Pó, Wu, Sr, St, Pě, So] - month_names: [~, Januar, Februar, Měrc, Apryl, Maj, Junij, Julij, Awgust, September, Oktober, Nowember, December] - abbr_month_names: [~, jan, feb, měr, apr, maj, jun, jul, awg, sep, okt, now, dec] - order: [:day, :month, :year] - - # Time - time: - formats: - default: "%A, %d. %B %Y, %H:%M hodź" - short: "%d. %B, %H:%M hodź." - long: "%A, %d. %B %Y, %H:%M hodź." - am: "dopołdnja" - pm: "wótpołdnja" - - - # Numbers - number: - format: - precision: 3 - separator: "," - delimiter: "." - currency: - format: - unit: "€" - precision: 2 - format: "%n %u" - separator: "," - delimiter: " " - human: - format: - precision: 1 - delimiter: "" - storage_units: - format: "%n %u" - units: - byte: - one: "bajt" - two: "bajta" - few: "bajty" - other: "bajtow" - kb: "KB" - mb: "MB" - gb: "GB" - tb: "TB" - - percentage: - format: - delimiter: "" - - precision: - format: - delimiter: "" - - - # Distance of time ... helper - # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() - datetime: - distance_in_words: - half_a_minute: "poł minuty" - less_than_x_seconds: - one: "mjenjej ako 1 sekundu" - two: "mjenjej ako {{count}} sekundoma" - few: "mjenjej ako {{count}} sekundami" - other: "mjenjej ako {{count}} sekundami" - x_seconds: - one: "1 sekundu" - two: "{{count}} sekundoma" - few: "{{count}} sekundami" - other: "{{count}} sekundami" - less_than_x_minutes: - one: "mjenjej ako 1 minutu" - two: "mjenjej ako {{count}} minutoma" - few: "mjenjej ako {{count}} minutami" - other: "mjenjej ako {{count}} minutami" - x_minutes: - one: "1 minutu" - two: "{{count}} minutoma" - few: "{{count}} minutami" - other: "{{count}} minutami" - about_x_hours: - one: "něźi 1 góźinu" - two: "něźi {{count}} góźinoma" - few: "něźi {{count}} góźinami" - other: "něźi {{count}} góźinami" - x_days: - one: "1 dnjom" - two: "{{count}} dnjoma" - few: "{{count}} dnjami" - other: "{{count}} dnjami" - about_x_months: - one: "něźi 1 mjasecom" - two: "něźi {{count}} mjasecoma" - few: "něźi {{count}} mjasecami" - other: "něźi {{count}} mjasecami" - x_months: - one: "1 mjasecom" - two: "{{count}} mjasecoma" - few: "{{count}} mjasecami" - other: "{{count}} mjasecami" - about_x_years: - one: "něźi 1 lětom" - two: "něźi {{count}} lětoma" - few: "něźi {{count}} lětami" - other: "něźi {{count}} lětami" - over_x_years: - one: "wěcej ako 1 lětom" - two: "wěcej ako {{count}} lětoma" - few: "wěcej ako {{count}} lětami" - other: "wěcej ako {{count}} lětami" - prompts: - year: "Lěto" - month: "Mjasec" - day: "Źeń" - hour: "Góźina" - minute: "Minuta" - second: "Sekunda" - - # ActiveRecord validation messages - activerecord: - errors: - messages: - inclusion: "njejo płaśiwa gódnota" - exclusion: "njestoj k dispoziciji" - invalid: "njejo płaśiwy" - confirmation: "njejo se wobkšuśiło" - accepted: "musy se wobkšuśiś" - empty: "njesmějo prozny byś" - blank: "jo trěbny" - too_long: - one: "jo pśedłujki (maks. 1 znamješko)" - two: "jo pśedłujki (maks. {{count}} znamješce)" - few: "jo pśedłujki (maks. {{count}} znamješka)" - other: "jo pśedłujki (maks. {{count}} znamješkow)" - too_short: - one: "jo překrotki (min. 1 znamješko)" - two: "jo překrotki (min. {{count}} znamješće)" - few: "jo překrotki (min. {{count}} znamješka)" - other: "jo překrotki (min. {{count}} znamješkow)" - wrong_length: - one: "njama pšawu dłujkosć (1 znamješko wócakane)" - two: "njama pšawu dłujkosć ({{count}} znamješce wócakanej)" - few: "njama pšawu dłujkosć ({{count}} znamješka wócakane)" - other: "njama pšawu dłujkosć ({{count}} znamješkow wócakanych)" - taken: "jo južo w datowej bance" - not_a_number: "njejo licba" - greater_than: "musy wětšy ako {{count}} byś" - greater_than_or_equal_to: "musy wětšy abo jadnak {{count}} być" - equal_to: "musy jadnak {{count}} byś" - less_than: "musy mjeńšy ako {{count}} byś" - less_than_or_equal_to: "musy mjeńšy abo jadnak {{count}} byś" - odd: "musy njerowna licba byś" - even: "musy rowna licba byś" - - template: - header: - one: "Pśi składowanju objekta {{model}} jo k zmólce dojšło a njejo było móžno składowaś" - two: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" - few: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" - other: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" - body: "Pšosym pśeglědaj slědujuce póla:" - - models: +# Lower Sorbian translations for Ruby on Rails +# by Michael Wolf (preklady@wolfmicha.de) + +dsb: + # ActiveSupport + support: + array: + words_connector: ", " + two_words_connector: " a " + last_word_connector: " a " + sentence_connector: "a" + skip_last_comma: true + + # Date + date: + formats: + default: "%d. %m. %Y" + short: "%d %b" + long: "%d. %B %Y" + day_names: [njeźela, pónjeźele, wałtora, srjoda, stwórtk, pětk, sobota] + abbr_day_names: [Nj, Pó, Wu, Sr, St, Pě, So] + month_names: [~, Januar, Februar, Měrc, Apryl, Maj, Junij, Julij, Awgust, September, Oktober, Nowember, December] + abbr_month_names: [~, jan, feb, měr, apr, maj, jun, jul, awg, sep, okt, now, dec] + order: [:day, :month, :year] + + # Time + time: + formats: + default: "%A, %d. %B %Y, %H:%M hodź" + short: "%d. %B, %H:%M hodź." + long: "%A, %d. %B %Y, %H:%M hodź." + am: "dopołdnja" + pm: "wótpołdnja" + + + # Numbers + number: + format: + precision: 3 + separator: "," + delimiter: "." + currency: + format: + unit: "€" + precision: 2 + format: "%n %u" + separator: "," + delimiter: " " + human: + format: + precision: 1 + delimiter: "" + storage_units: + format: "%n %u" + units: + byte: + one: "bajt" + two: "bajta" + few: "bajty" + other: "bajtow" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + + percentage: + format: + delimiter: "" + + precision: + format: + delimiter: "" + + + # Distance of time ... helper + # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() + datetime: + distance_in_words: + half_a_minute: "poł minuty" + less_than_x_seconds: + one: "mjenjej ako 1 sekundu" + two: "mjenjej ako {{count}} sekundoma" + few: "mjenjej ako {{count}} sekundami" + other: "mjenjej ako {{count}} sekundami" + x_seconds: + one: "1 sekundu" + two: "{{count}} sekundoma" + few: "{{count}} sekundami" + other: "{{count}} sekundami" + less_than_x_minutes: + one: "mjenjej ako 1 minutu" + two: "mjenjej ako {{count}} minutoma" + few: "mjenjej ako {{count}} minutami" + other: "mjenjej ako {{count}} minutami" + x_minutes: + one: "1 minutu" + two: "{{count}} minutoma" + few: "{{count}} minutami" + other: "{{count}} minutami" + about_x_hours: + one: "něźi 1 góźinu" + two: "něźi {{count}} góźinoma" + few: "něźi {{count}} góźinami" + other: "něźi {{count}} góźinami" + x_days: + one: "1 dnjom" + two: "{{count}} dnjoma" + few: "{{count}} dnjami" + other: "{{count}} dnjami" + about_x_months: + one: "něźi 1 mjasecom" + two: "něźi {{count}} mjasecoma" + few: "něźi {{count}} mjasecami" + other: "něźi {{count}} mjasecami" + x_months: + one: "1 mjasecom" + two: "{{count}} mjasecoma" + few: "{{count}} mjasecami" + other: "{{count}} mjasecami" + about_x_years: + one: "něźi 1 lětom" + two: "něźi {{count}} lětoma" + few: "něźi {{count}} lětami" + other: "něźi {{count}} lětami" + over_x_years: + one: "wěcej ako 1 lětom" + two: "wěcej ako {{count}} lětoma" + few: "wěcej ako {{count}} lětami" + other: "wěcej ako {{count}} lětami" + prompts: + year: "Lěto" + month: "Mjasec" + day: "Źeń" + hour: "Góźina" + minute: "Minuta" + second: "Sekunda" + + # ActiveRecord validation messages + activerecord: + errors: + messages: + inclusion: "njejo płaśiwa gódnota" + exclusion: "njestoj k dispoziciji" + invalid: "njejo płaśiwy" + confirmation: "njejo se wobkšuśiło" + accepted: "musy se wobkšuśiś" + empty: "njesmějo prozny byś" + blank: "jo trěbny" + too_long: + one: "jo pśedłujki (maks. 1 znamješko)" + two: "jo pśedłujki (maks. {{count}} znamješce)" + few: "jo pśedłujki (maks. {{count}} znamješka)" + other: "jo pśedłujki (maks. {{count}} znamješkow)" + too_short: + one: "jo překrotki (min. 1 znamješko)" + two: "jo překrotki (min. {{count}} znamješće)" + few: "jo překrotki (min. {{count}} znamješka)" + other: "jo překrotki (min. {{count}} znamješkow)" + wrong_length: + one: "njama pšawu dłujkosć (1 znamješko wócakane)" + two: "njama pšawu dłujkosć ({{count}} znamješce wócakanej)" + few: "njama pšawu dłujkosć ({{count}} znamješka wócakane)" + other: "njama pšawu dłujkosć ({{count}} znamješkow wócakanych)" + taken: "jo južo w datowej bance" + not_a_number: "njejo licba" + greater_than: "musy wětšy ako {{count}} byś" + greater_than_or_equal_to: "musy wětšy abo jadnak {{count}} być" + equal_to: "musy jadnak {{count}} byś" + less_than: "musy mjeńšy ako {{count}} byś" + less_than_or_equal_to: "musy mjeńšy abo jadnak {{count}} byś" + odd: "musy njerowna licba byś" + even: "musy rowna licba byś" + + template: + header: + one: "Pśi składowanju objekta {{model}} jo k zmólce dojšło a njejo było móžno składowaś" + two: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" + few: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" + other: "Pśi składowanju objekta {{model}} jo k {{count}} zmólkam dojšło a njejo było móžno składowaś" + body: "Pšosym pśeglědaj slědujuce póla:" + + models: diff --git a/vendor/plugins/rails-i18n/locale/es.yml b/vendor/plugins/rails-i18n/locale/es.yml index 54bd3d9e9..779279c06 100644 --- a/vendor/plugins/rails-i18n/locale/es.yml +++ b/vendor/plugins/rails-i18n/locale/es.yml @@ -7,9 +7,9 @@ es: # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' format: # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) - separator: "," + separator: "," # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) - delimiter: "." + delimiter: "." # Number of decimals, behind the separator (1 with a precision of 2 gives: 1.00) precision: 3 @@ -17,35 +17,35 @@ es: currency: format: # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) - format: "%n %u" - unit: "€" + format: "%n %u" + unit: "€" # These three are to override number.format and are optional - separator: "," - delimiter: "." + separator: "," + delimiter: "." precision: 2 # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: + # separator: + delimiter: "" + # precision: # Used in number_to_precision() precision: format: # These three are to override number.format and are optional # separator: - delimiter: "" + delimiter: "" # precision: # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: - delimiter: "" + # separator: + delimiter: "" precision: 1 # Rails <= v2.2.2 # storage_units: [Bytes, KB, MB, GB, TB] @@ -64,37 +64,37 @@ es: # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: - half_a_minute: "medio minuto" + half_a_minute: "medio minuto" less_than_x_seconds: - one: "menos de 1 segundo" + one: "menos de 1 segundo" other: "menos de {{count}} segundos" x_seconds: - one: "1 segundo" - other: "{{count}} segundos" + one: "1 segundo" + other: "{{count}} segundos" less_than_x_minutes: - one: "menos de 1 minuto" - other: "menos de {{count}} minutos" + one: "menos de 1 minuto" + other: "menos de {{count}} minutos" x_minutes: - one: "1 minuto" - other: "{{count}} minutos" + one: "1 minuto" + other: "{{count}} minutos" about_x_hours: - one: "alrededor de 1 hora" - other: "alrededor de {{count}} horas" + one: "alrededor de 1 hora" + other: "alrededor de {{count}} horas" x_days: - one: "1 día" - other: "{{count}} días" + one: "1 día" + other: "{{count}} días" about_x_months: - one: "alrededor de 1 mes" - other: "alrededor de {{count}} meses" + one: "alrededor de 1 mes" + other: "alrededor de {{count}} meses" x_months: - one: "1 mes" - other: "{{count}} meses" + one: "1 mes" + other: "{{count}} meses" about_x_years: - one: "alrededor de 1 año" - other: "alrededor de {{count}} años" + one: "alrededor de 1 año" + other: "alrededor de {{count}} años" over_x_years: - one: "más de 1 año" - other: "más de {{count}} años" + one: "más de 1 año" + other: "más de {{count}} años" almost_x_years: one: "casi 1 año" other: "casi {{count}} años" @@ -110,17 +110,17 @@ es: errors: template: header: - one: "no se pudo guardar este {{model}} porque se encontró 1 error" - other: "no se pudo guardar este {{model}} porque se encontraron {{count}} errores" + one: "No se pudo guardar este/a {{model}} porque se encontró 1 error" + other: "No se pudo guardar este/a {{model}} porque se encontraron {{count}} errores" # The variable :count is also available - body: "Se encontraron problemas con los siguientes campos:" + body: "Se encontraron problemas con los siguientes campos:" # The values :model, :attribute and :value are always available for interpolation # The value :count is available when applicable. Can be used for pluralization. messages: - inclusion: "no está incluido en la lista" - exclusion: "está reservado" - invalid: "no es válido" + inclusion: "no está incluido en la lista" + exclusion: "está reservado" + invalid: "no es válido" confirmation: "no coincide con la confirmación" accepted: "debe ser aceptado" empty: "no puede estar vacío" @@ -140,6 +140,9 @@ es: record_invalid: "La validación falló: {{errors}}" # Append your own errors here or at the model/attributes scope. + full_messages: + format: "{{attribute}} {{message}}" + models: # Overrides default messages @@ -152,8 +155,8 @@ es: # When no format has been given, it uses default. # You can provide other formats here if you like! default: "%e/%m/%Y" - short: "%e de %b" - long: "%e de %B de %Y" + short: "%e de %b" + long: "%e de %B de %Y" day_names: [Domingo, Lunes, Martes, Miércoles, Jueves, Viernes, Sábado] abbr_day_names: [Dom, Lun, Mar, Mie, Jue, Vie, Sab] @@ -167,10 +170,10 @@ es: time: formats: default: "%A, %e de %B de %Y %H:%M:%S %z" - short: "%e de %b %H:%M" - long: "%e de %B de %Y %H:%M" - am: "am" - pm: "pm" + short: "%e de %b %H:%M" + long: "%e de %B de %Y %H:%M" + am: "am" + pm: "pm" # Used in array.to_sentence. support: diff --git a/vendor/plugins/rails-i18n/locale/fa.yml b/vendor/plugins/rails-i18n/locale/fa.yml index e6102aaf9..288bab185 100644 --- a/vendor/plugins/rails-i18n/locale/fa.yml +++ b/vendor/plugins/rails-i18n/locale/fa.yml @@ -34,7 +34,7 @@ fa: only_day: "%e" day_names: [یکشنبه, دوشنبه, سه‌شنبه, چهارشنبه, پنج‌شنبه, جمعه, شنبه] - abbr_day_names: [ی, د, س, چ, پ, ج] + abbr_day_names: [ی, د, س, چ, پ, ج, ش] month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر] abbr_month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر] order: [ :day, :month, :year ] @@ -116,4 +116,4 @@ fa: odd: "باید فرد باشد" even: "باید زوج باشد" presence: "را فراموش کرده‌اید" - format: "فرمت مشکل دارد" \ No newline at end of file + format: "فرمت مشکل دارد" diff --git a/vendor/plugins/rails-i18n/locale/fi.yml b/vendor/plugins/rails-i18n/locale/fi.yml index f823eafa9..9bcd10952 100644 --- a/vendor/plugins/rails-i18n/locale/fi.yml +++ b/vendor/plugins/rails-i18n/locale/fi.yml @@ -30,6 +30,8 @@ fi: words_connector: ", " two_words_connector: " ja " last_word_connector: " ja " + select: + prompt: "Valitse" number: format: @@ -116,10 +118,6 @@ fi: minute: "Minuutti" second: "Sekunti" - support: - select: - prompt: "Valitse" - # which one should it be #activemodel: activerecord: diff --git a/vendor/plugins/rails-i18n/locale/hsb.yml b/vendor/plugins/rails-i18n/locale/hsb.yml index 2e4275d2f..dde340af0 100644 --- a/vendor/plugins/rails-i18n/locale/hsb.yml +++ b/vendor/plugins/rails-i18n/locale/hsb.yml @@ -1,190 +1,190 @@ -# Upper Sorbian translations for Ruby on Rails -# by Michael Wolf (preklady@wolfmicha.de) - -hsb: - - # ActiveSupport - support: - array: - words_connector: ", " - two_words_connector: " a " - last_word_connector: " a " - sentence_connector: "a" - skip_last_comma: true - - - - # Date - date: - formats: - default: "%d. %m. %Y" - short: "%d %b" - long: "%d. %B %Y" - - day_names: [njedźela, póndźela, wutora, srjeda, štwórtk, pjatk, sobota] - abbr_day_names: [Nj, Pó, Wu, Sr, Št, Pj, So] - month_names: [~, Januar, Februar, Měrc, Apryl, Meja, Junij, Julij, Awgust, September, Oktober, Nowember, December] - abbr_month_names: [~, jan, feb, měr, apr, mej, jun, jul, awg, sep, okt, now, dec] - order: [:day, :month, :year] - - # Time - time: - formats: - default: "%A, %d. %B %Y, %H:%M hodź" - short: "%d. %B, %H:%M hodź." - long: "%A, %d. %B %Y, %H:%M hodź." - - am: "dopołdnja" - pm: "popołdnju" - - - # Numbers - number: - format: - precision: 3 - separator: "," - delimiter: "." - - currency: - format: - unit: "€" - precision: 2 - format: "%n %u" - separator: "," - delimiter: " " - - human: - format: - precision: 1 - delimiter: "" - - storage_units: - format: "%n %u" - units: - byte: - one: "bajt" - two: "bajtaj" - few: "bajty" - other: "bajtow" - kb: "KB" - mb: "MB" - gb: "GB" - tb: "TB" - - percentage: - format: - delimiter: "" - - precision: - format: - delimiter: "" - - - # Distance of time ... helper - # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() - datetime: - distance_in_words: - half_a_minute: "poł mjeńšiny" - less_than_x_seconds: - one: "mjenje hač 1 sekundu" - two: "mjenje hač {{count}} sekundomaj" - few: "mjenje hač {{count}} sekundami" - other: "mjenje hač {{count}} sekundami" - x_seconds: - one: "1 sekundu" - two: "{{count}} sekundomaj" - few: "{{count}} sekundami" - other: "{{count}} sekundami" - less_than_x_minutes: - one: "mjenje hač 1 mjeńšinu" - two: "mjenje hač {{count}} mjeńšinomaj" - few: "mjenje hač {{count}} mjeńšinami" - other: "mjenje hač {{count}} mjeńšinami" - x_minutes: - one: "1 mjeńšinu" - two: "{{count}} mjeńšinomaj" - few: "{{count}} mjeńšinami" - other: "{{count}} mjeńšinami" - about_x_hours: - one: "něhdźe 1 hodźinu" - two: "něhdźe {{count}} hodźinomaj" - few: "něhdźe {{count}} hodźinami" - other: "něhdźe {{count}} hodźinami" - x_days: - one: "1 dnjom" - two: "{{count}} dnjomaj" - few: "{{count}} dnjemi" - other: "{{count}} dnjemi" - about_x_months: - one: "něhdźe 1 měsacom" - two: "něhdźe {{count}} měsacomaj" - few: "něhdźe {{count}} měsacami" - other: "něhdźe {{count}} měsacami" - x_months: - one: "1 měsacom" - two: "{{count}} měsacomaj" - few: "{{count}} měsacami" - other: "{{count}} měsacami" - about_x_years: - one: "něhdźe 1 lětom" - two: "něhdźe {{count}} lětomaj" - few: "něhdźe {{count}} lětami" - other: "něhdźe {{count}} lětami" - over_x_years: - one: "přez 1 lětom" - two: "přez {{count}} lětomaj" - few: "přez {{count}} lětami" - other: "přez {{count}} lětami" - prompts: - year: "Lěto" - month: "Měsac" - day: "Dźeń" - hour: "Hodźina" - minute: "Mjeńšina" - second: "Sekunda" - - # ActiveRecord validation messages - activerecord: - errors: - messages: - inclusion: "njeje płaćiwa hódnota" - exclusion: "njesteji k dispoziciji" - invalid: "njeje płaćiwy" - confirmation: "njebu wobkrućene" - accepted: "dyrbi so wobkrućić" - empty: "njesmě prózdny być" - blank: "je trěbny" - too_long: - one: "je předołhi (maks. 1 znamješko)" - two: "je předołhi (maks. {{count}} znamješce)" - few: "je předołhi (maks. {{count}} znamješka)" - other: "je předołhi (maks. {{count}} znamješkow)" - too_short: - one: "je překrótki (min. 1 znamješko)" - two: "je překrótki (min. {{count}} znamješće)" - few: "je překrótki (min. {{count}} znamješka)" - other: "je překrótki (min. {{count}} znamješkow)" - wrong_length: - one: "nima prawu dołhosć (1 znamješko wočakowane)" - two: "nima prawu dołhosć ({{count}} znamješce wočakowanej)" - few: "nima prawu dołhosć ({{count}} znamješka wočakowane)" - other: "nima prawu dołhosć ({{count}} znamješkow wočakowanych)" - taken: "je hižo w datowej bance" - not_a_number: "njeje ličba" - greater_than: "dyrbi wjetši hač {{count}} być" - greater_than_or_equal_to: "dyrbi wjetši abo runja {{count}} być" - equal_to: "dyrbi runja {{count}} być" - less_than: "dyrbi mjenje hač {{count}} być" - less_than_or_equal_to: "dyrbi mjenje abo runja {{count}} być" - odd: "dyrbi njeruna ličby być" - even: "dyrbi runa ličba być" - - template: - header: - one: "Při składowanju objekta {{model}} je k zmylkej dóšło a njebě móžno składować" - two: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" - few: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" - other: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" - body: "Prošu přepruwuj slědowace pola:" - - models: +# Upper Sorbian translations for Ruby on Rails +# by Michael Wolf (preklady@wolfmicha.de) + +hsb: + + # ActiveSupport + support: + array: + words_connector: ", " + two_words_connector: " a " + last_word_connector: " a " + sentence_connector: "a" + skip_last_comma: true + + + + # Date + date: + formats: + default: "%d. %m. %Y" + short: "%d %b" + long: "%d. %B %Y" + + day_names: [njedźela, póndźela, wutora, srjeda, štwórtk, pjatk, sobota] + abbr_day_names: [Nj, Pó, Wu, Sr, Št, Pj, So] + month_names: [~, Januar, Februar, Měrc, Apryl, Meja, Junij, Julij, Awgust, September, Oktober, Nowember, December] + abbr_month_names: [~, jan, feb, měr, apr, mej, jun, jul, awg, sep, okt, now, dec] + order: [:day, :month, :year] + + # Time + time: + formats: + default: "%A, %d. %B %Y, %H:%M hodź" + short: "%d. %B, %H:%M hodź." + long: "%A, %d. %B %Y, %H:%M hodź." + + am: "dopołdnja" + pm: "popołdnju" + + + # Numbers + number: + format: + precision: 3 + separator: "," + delimiter: "." + + currency: + format: + unit: "€" + precision: 2 + format: "%n %u" + separator: "," + delimiter: " " + + human: + format: + precision: 1 + delimiter: "" + + storage_units: + format: "%n %u" + units: + byte: + one: "bajt" + two: "bajtaj" + few: "bajty" + other: "bajtow" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + + percentage: + format: + delimiter: "" + + precision: + format: + delimiter: "" + + + # Distance of time ... helper + # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() + datetime: + distance_in_words: + half_a_minute: "poł mjeńšiny" + less_than_x_seconds: + one: "mjenje hač 1 sekundu" + two: "mjenje hač {{count}} sekundomaj" + few: "mjenje hač {{count}} sekundami" + other: "mjenje hač {{count}} sekundami" + x_seconds: + one: "1 sekundu" + two: "{{count}} sekundomaj" + few: "{{count}} sekundami" + other: "{{count}} sekundami" + less_than_x_minutes: + one: "mjenje hač 1 mjeńšinu" + two: "mjenje hač {{count}} mjeńšinomaj" + few: "mjenje hač {{count}} mjeńšinami" + other: "mjenje hač {{count}} mjeńšinami" + x_minutes: + one: "1 mjeńšinu" + two: "{{count}} mjeńšinomaj" + few: "{{count}} mjeńšinami" + other: "{{count}} mjeńšinami" + about_x_hours: + one: "něhdźe 1 hodźinu" + two: "něhdźe {{count}} hodźinomaj" + few: "něhdźe {{count}} hodźinami" + other: "něhdźe {{count}} hodźinami" + x_days: + one: "1 dnjom" + two: "{{count}} dnjomaj" + few: "{{count}} dnjemi" + other: "{{count}} dnjemi" + about_x_months: + one: "něhdźe 1 měsacom" + two: "něhdźe {{count}} měsacomaj" + few: "něhdźe {{count}} měsacami" + other: "něhdźe {{count}} měsacami" + x_months: + one: "1 měsacom" + two: "{{count}} měsacomaj" + few: "{{count}} měsacami" + other: "{{count}} měsacami" + about_x_years: + one: "něhdźe 1 lětom" + two: "něhdźe {{count}} lětomaj" + few: "něhdźe {{count}} lětami" + other: "něhdźe {{count}} lětami" + over_x_years: + one: "přez 1 lětom" + two: "přez {{count}} lětomaj" + few: "přez {{count}} lětami" + other: "přez {{count}} lětami" + prompts: + year: "Lěto" + month: "Měsac" + day: "Dźeń" + hour: "Hodźina" + minute: "Mjeńšina" + second: "Sekunda" + + # ActiveRecord validation messages + activerecord: + errors: + messages: + inclusion: "njeje płaćiwa hódnota" + exclusion: "njesteji k dispoziciji" + invalid: "njeje płaćiwy" + confirmation: "njebu wobkrućene" + accepted: "dyrbi so wobkrućić" + empty: "njesmě prózdny być" + blank: "je trěbny" + too_long: + one: "je předołhi (maks. 1 znamješko)" + two: "je předołhi (maks. {{count}} znamješce)" + few: "je předołhi (maks. {{count}} znamješka)" + other: "je předołhi (maks. {{count}} znamješkow)" + too_short: + one: "je překrótki (min. 1 znamješko)" + two: "je překrótki (min. {{count}} znamješće)" + few: "je překrótki (min. {{count}} znamješka)" + other: "je překrótki (min. {{count}} znamješkow)" + wrong_length: + one: "nima prawu dołhosć (1 znamješko wočakowane)" + two: "nima prawu dołhosć ({{count}} znamješce wočakowanej)" + few: "nima prawu dołhosć ({{count}} znamješka wočakowane)" + other: "nima prawu dołhosć ({{count}} znamješkow wočakowanych)" + taken: "je hižo w datowej bance" + not_a_number: "njeje ličba" + greater_than: "dyrbi wjetši hač {{count}} być" + greater_than_or_equal_to: "dyrbi wjetši abo runja {{count}} być" + equal_to: "dyrbi runja {{count}} być" + less_than: "dyrbi mjenje hač {{count}} być" + less_than_or_equal_to: "dyrbi mjenje abo runja {{count}} być" + odd: "dyrbi njeruna ličby być" + even: "dyrbi runa ličba być" + + template: + header: + one: "Při składowanju objekta {{model}} je k zmylkej dóšło a njebě móžno składować" + two: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" + few: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" + other: "Při składowanju objekta {{model}} je k {{count}} zmylkam dóšło a njebě móžno składować" + body: "Prošu přepruwuj slědowace pola:" + + models: diff --git a/vendor/plugins/rails-i18n/locale/sk.yml b/vendor/plugins/rails-i18n/locale/sk.yml index 14c6a282e..af659f50a 100644 --- a/vendor/plugins/rails-i18n/locale/sk.yml +++ b/vendor/plugins/rails-i18n/locale/sk.yml @@ -1,139 +1,139 @@ -# Sample localization file for English. Add more files in this directory for other locales. -# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. - -# Slovak translations for Ruby on Rails (inspired by the Czech localization - thanx to Karel Minařík) -# by Jozef Fulop (jofi-rails@silake.com) - -sk: - # ActiveSupport - support: - array: - words_connector: ', ' - two_words_connector: ' a ' - last_word_connector: ' a ' - - # Date - date: - formats: - default: "%d. %m. %Y" - short: "%d %b" - long: "%d. %B %Y" - day_names: [Nedeľa, Pondelok, Utorok, Streda, Štvrtok, Piatok, Sobota] - abbr_day_names: [Ne, Po, Ut, St, Št, Pi, So] - month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December] - abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec] - order: [:day, :month, :year] - - # Time - time: - formats: - default: "%a %d. %B %Y %H:%M %z" - short: "%d. %m. %H:%M" - long: "%A %d. %B %Y %H:%M" - am: 'dopoludnia' - pm: 'popoludní' - - # Numbers - number: - format: - precision: 3 - separator: '.' - delimiter: ',' - currency: - format: - unit: '€' - precision: 2 - format: '%n %u' - separator: "," - delimiter: " " - human: - format: - precision: 1 - delimiter: '' - storage_units: - format: "%n %u" - units: - byte: - other: "B" - one: "B" - kb: "KB" - mb: "MB" - gb: "GB" - tb: "TB" - percentage: - format: - delimiter: '' - precision: - format: - delimiter: '' - - # Distance of time ... helper - datetime: - prompts: - second: "Sekunda" - minute: "Minúta" - hour: "Hodina" - day: "Deň" - month: "Mesiac" - year: "Rok" - distance_in_words: - half_a_minute: 'pol minutou' - less_than_x_seconds: - one: 'asi pred sekundou' - other: 'asi pred {{count}} sekundami' - x_seconds: - one: 'sekundou' - other: '{{count}} sekundami' - less_than_x_minutes: - one: 'pred necelou minútou' - other: 'pred ani nie {{count}} minútami' - x_minutes: - one: 'minútou' - other: '{{count}} minútami' - about_x_hours: - one: 'asi hodinou' - other: 'asi {{count}} hodinami' - x_days: - one: '24 hodinami' - other: '{{count}} dňami' - about_x_months: - one: 'asi mesiacom' - other: 'asi {{count}} mesiacmi' - x_months: - one: 'mesiacom' - other: '{{count}} mesiacmi' - about_x_years: - one: 'asi rokom' - other: 'asi {{count}} rokmi' - over_x_years: - one: 'pred viac ako rokom' - other: 'viac ako {{count}} rokmi' - - # ActiveRecord validation messages - activerecord: - errors: - messages: - inclusion: "nie je v zozname povolených hodnôt" - exclusion: "je vyhradené pre iný účel" - invalid: "nie je platná hodnota" - confirmation: "nebolo potvrdené" - accepted: "musí byť potvrdené" - empty: "nesmie byť prázdný/é" - blank: "je povinná položka" - too_long: "je príliš dlhá/ý (max. {{count}} znakov)" - too_short: "je príliš krátký/á (min. {{count}} znakov)" - wrong_length: "nemá správnu dĺžku (očakáva sa {{count}} znakov)" - taken: "sa už nachádza v databáze" - not_a_number: "nie je číslo" - greater_than: "musí byť väčšíe ako {{count}}" - greater_than_or_equal_to: "musí byť väčšie alebo rovnaké ako {{count}}" - equal_to: "sa musí rovnať {{count}}" - less_than: "musí byť menšie ako {{count}}" - less_than_or_equal_to: "musí byť menšie ako {{count}}" - odd: "musí byť nepárne číslo" - even: "musí byť párne číslo" - template: - header: - one: "Pri ukladaní objektu {{model}} došlo k chybám a nebolo možné objekt uložiť" - other: "Pri ukladaní objektu {{model}} došlo ku {{count}} chybe/ám a nebolo možné objekt uložiť" - body: "Nasledujúce polia obsahujú chybne vyplnené údaje:" +# Sample localization file for English. Add more files in this directory for other locales. +# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +# Slovak translations for Ruby on Rails (inspired by the Czech localization - thanx to Karel Minařík) +# by Jozef Fulop (jofi-rails@silake.com) + +sk: + # ActiveSupport + support: + array: + words_connector: ', ' + two_words_connector: ' a ' + last_word_connector: ' a ' + + # Date + date: + formats: + default: "%d. %m. %Y" + short: "%d %b" + long: "%d. %B %Y" + day_names: [Nedeľa, Pondelok, Utorok, Streda, Štvrtok, Piatok, Sobota] + abbr_day_names: [Ne, Po, Ut, St, Št, Pi, So] + month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December] + abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec] + order: [:day, :month, :year] + + # Time + time: + formats: + default: "%a %d. %B %Y %H:%M %z" + short: "%d. %m. %H:%M" + long: "%A %d. %B %Y %H:%M" + am: 'dopoludnia' + pm: 'popoludní' + + # Numbers + number: + format: + precision: 3 + separator: '.' + delimiter: ',' + currency: + format: + unit: '€' + precision: 2 + format: '%n %u' + separator: "," + delimiter: " " + human: + format: + precision: 1 + delimiter: '' + storage_units: + format: "%n %u" + units: + byte: + other: "B" + one: "B" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + percentage: + format: + delimiter: '' + precision: + format: + delimiter: '' + + # Distance of time ... helper + datetime: + prompts: + second: "Sekunda" + minute: "Minúta" + hour: "Hodina" + day: "Deň" + month: "Mesiac" + year: "Rok" + distance_in_words: + half_a_minute: 'pol minutou' + less_than_x_seconds: + one: 'asi pred sekundou' + other: 'asi pred {{count}} sekundami' + x_seconds: + one: 'sekundou' + other: '{{count}} sekundami' + less_than_x_minutes: + one: 'pred necelou minútou' + other: 'pred ani nie {{count}} minútami' + x_minutes: + one: 'minútou' + other: '{{count}} minútami' + about_x_hours: + one: 'asi hodinou' + other: 'asi {{count}} hodinami' + x_days: + one: '24 hodinami' + other: '{{count}} dňami' + about_x_months: + one: 'asi mesiacom' + other: 'asi {{count}} mesiacmi' + x_months: + one: 'mesiacom' + other: '{{count}} mesiacmi' + about_x_years: + one: 'asi rokom' + other: 'asi {{count}} rokmi' + over_x_years: + one: 'pred viac ako rokom' + other: 'viac ako {{count}} rokmi' + + # ActiveRecord validation messages + activerecord: + errors: + messages: + inclusion: "nie je v zozname povolených hodnôt" + exclusion: "je vyhradené pre iný účel" + invalid: "nie je platná hodnota" + confirmation: "nebolo potvrdené" + accepted: "musí byť potvrdené" + empty: "nesmie byť prázdný/é" + blank: "je povinná položka" + too_long: "je príliš dlhá/ý (max. {{count}} znakov)" + too_short: "je príliš krátký/á (min. {{count}} znakov)" + wrong_length: "nemá správnu dĺžku (očakáva sa {{count}} znakov)" + taken: "sa už nachádza v databáze" + not_a_number: "nie je číslo" + greater_than: "musí byť väčšíe ako {{count}}" + greater_than_or_equal_to: "musí byť väčšie alebo rovnaké ako {{count}}" + equal_to: "sa musí rovnať {{count}}" + less_than: "musí byť menšie ako {{count}}" + less_than_or_equal_to: "musí byť menšie ako {{count}}" + odd: "musí byť nepárne číslo" + even: "musí byť párne číslo" + template: + header: + one: "Pri ukladaní objektu {{model}} došlo k chybám a nebolo možné objekt uložiť" + other: "Pri ukladaní objektu {{model}} došlo ku {{count}} chybe/ám a nebolo možné objekt uložiť" + body: "Nasledujúce polia obsahujú chybne vyplnené údaje:" diff --git a/vendor/plugins/validates_email_format_of/MIT-LICENSE b/vendor/plugins/validates_email_format_of/MIT-LICENSE index 1bae24d25..c94752595 100644 --- a/vendor/plugins/validates_email_format_of/MIT-LICENSE +++ b/vendor/plugins/validates_email_format_of/MIT-LICENSE @@ -1,20 +1,20 @@ -Copyright (c) 2006 Alex Dunae - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Copyright (c) 2006 Alex Dunae + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/plugins/validates_email_format_of/rails/init.rb b/vendor/plugins/validates_email_format_of/rails/init.rb index a30177232..bdc8b5794 100644 --- a/vendor/plugins/validates_email_format_of/rails/init.rb +++ b/vendor/plugins/validates_email_format_of/rails/init.rb @@ -1 +1 @@ -require 'validates_email_format_of' +require 'validates_email_format_of'