Merge remote-tracking branch 'upstream/pull/2204'
authorTom Hughes <tom@compton.nu>
Mon, 10 Jun 2019 20:29:38 +0000 (21:29 +0100)
committerTom Hughes <tom@compton.nu>
Mon, 10 Jun 2019 20:29:38 +0000 (21:29 +0100)
397 files changed:
.rubocop.yml
.rubocop_todo.yml
.travis.yml
Gemfile
Gemfile.lock
Vendorfile
app/abilities/ability.rb
app/abilities/api_ability.rb
app/abilities/api_capability.rb
app/assets/javascripts/application.js
app/assets/javascripts/diary_entry.js
app/assets/javascripts/fixthemap.js
app/assets/javascripts/id.js
app/assets/javascripts/index.js
app/assets/javascripts/index/browse.js
app/assets/javascripts/index/changeset.js
app/assets/javascripts/index/contextmenu.js
app/assets/javascripts/index/directions.js
app/assets/javascripts/index/directions/fossgis.js
app/assets/javascripts/index/directions/graphhopper.js
app/assets/javascripts/index/export.js
app/assets/javascripts/index/history.js
app/assets/javascripts/index/new_note.js
app/assets/javascripts/index/note.js
app/assets/javascripts/index/notes.js
app/assets/javascripts/index/query.js
app/assets/javascripts/index/search.js
app/assets/javascripts/leaflet.key.js
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/leaflet.map.js
app/assets/javascripts/leaflet.note.js
app/assets/javascripts/leaflet.query.js
app/assets/javascripts/leaflet.share.js
app/assets/javascripts/leaflet.sidebar.js
app/assets/javascripts/leaflet.zoom.js
app/assets/javascripts/login.js
app/assets/javascripts/oauth.js
app/assets/javascripts/piwik.js
app/assets/javascripts/richtext.js
app/assets/javascripts/router.js
app/assets/javascripts/user.js
app/assets/javascripts/welcome.js
app/assets/stylesheets/common.scss
app/controllers/api/amf_controller.rb
app/controllers/api/changesets_controller.rb
app/controllers/api/map_controller.rb
app/controllers/api/tracepoints_controller.rb
app/controllers/api/traces_controller.rb
app/controllers/api/users_controller.rb
app/controllers/application_controller.rb
app/controllers/diary_entries_controller.rb
app/controllers/geocoder_controller.rb
app/controllers/traces_controller.rb
app/controllers/users_controller.rb
app/helpers/user_blocks_helper.rb
app/jobs/trace_importer_job.rb
app/models/acl.rb
app/models/changeset.rb
app/models/changeset_comment.rb
app/models/changeset_tag.rb
app/models/diary_comment.rb
app/models/diary_entry.rb
app/models/diary_entry_subscription.rb
app/models/friend.rb
app/models/message.rb
app/models/node.rb
app/models/node_tag.rb
app/models/note.rb
app/models/note_comment.rb
app/models/old_node.rb
app/models/old_node_tag.rb
app/models/old_relation.rb
app/models/old_relation_member.rb
app/models/old_relation_tag.rb
app/models/old_way.rb
app/models/old_way_node.rb
app/models/old_way_tag.rb
app/models/redaction.rb
app/models/relation.rb
app/models/relation_member.rb
app/models/relation_tag.rb
app/models/trace.rb
app/models/tracepoint.rb
app/models/tracetag.rb
app/models/user.rb
app/models/user_block.rb
app/models/user_preference.rb
app/models/user_role.rb
app/models/user_token.rb
app/models/way.rb
app/models/way_node.rb
app/models/way_tag.rb
app/views/api/users/_api_user.builder [deleted file]
app/views/api/users/_user.builder [new file with mode: 0644]
app/views/api/users/index.builder [moved from app/views/api/users/api_users.builder with 59% similarity]
app/views/api/users/show.builder [moved from app/views/api/users/api_read.builder with 61% similarity]
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/_form.html.erb [new file with mode: 0644]
app/views/diary_entries/edit.html.erb
app/views/diary_entries/index.html.erb
app/views/diary_entries/new.html.erb [new file with mode: 0644]
app/views/diary_entries/show.html.erb
app/views/layouts/_header.html.erb
app/views/site/about.html.erb
app/views/user_blocks/edit.html.erb
app/views/user_blocks/new.html.erb
app/views/users/show.html.erb
app/views/users/terms.html.erb
config/eslint.json [new file with mode: 0644]
config/initializers/eslint.rb [new file with mode: 0644]
config/initializers/i18n.rb
config/initializers/strong_migrations.rb [new file with mode: 0644]
config/jshint.yml [deleted file]
config/locales/af.yml
config/locales/aln.yml
config/locales/ar.yml
config/locales/arz.yml
config/locales/ast.yml
config/locales/az.yml
config/locales/be-Tarask.yml
config/locales/be.yml
config/locales/bg.yml
config/locales/bn.yml
config/locales/br.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cs.yml
config/locales/cy.yml
config/locales/da.yml
config/locales/de.yml
config/locales/diq.yml
config/locales/dsb.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/et.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/fur.yml
config/locales/ga.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/id.yml
config/locales/is.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ka.yml
config/locales/kab.yml
config/locales/km.yml
config/locales/ko.yml
config/locales/ku-Latn.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mo.yml
config/locales/mr.yml
config/locales/ms.yml
config/locales/nb.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/nn.yml
config/locales/oc.yml
config/locales/pa.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt-PT.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/scn.yml
config/locales/sco.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sq.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/ta.yml
config/locales/te.yml
config/locales/th.yml
config/locales/tl.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/routes.rb
config/settings.yml
config/settings/test.yml
db/migrate/001_create_osm_db.rb
db/migrate/002_cleanup_osm_db.rb
db/migrate/003_sql_session_store_setup.rb
db/migrate/004_user_enhancements.rb
db/migrate/005_tile_tracepoints.rb
db/migrate/006_tile_nodes.rb
db/migrate/007_add_relations.rb
db/migrate/008_remove_segments.rb
db/migrate/009_way_nodes_node_idx.rb
db/migrate/010_diary_comments.rb
db/migrate/011_add_user_image.rb
db/migrate/012_add_admin_flag.rb
db/migrate/013_add_email_valid.rb
db/migrate/014_add_new_email.rb
db/migrate/015_add_user_visible.rb
db/migrate/016_add_creation_ip.rb
db/migrate/017_add_gpx_indexes.rb
db/migrate/018_create_acls.rb
db/migrate/019_add_timestamp_indexes.rb
db/migrate/020_populate_node_tags_and_remove.rb
db/migrate/021_move_to_innodb.rb
db/migrate/022_key_constraints.rb
db/migrate/023_add_changesets.rb
db/migrate/024_order_relation_members.rb
db/migrate/025_add_end_time_to_changesets.rb
db/migrate/026_add_changeset_user_index.rb
db/migrate/027_add_changeset_indexes.rb
db/migrate/028_add_more_changeset_indexes.rb
db/migrate/029_add_user_foreign_keys.rb
db/migrate/030_add_foreign_keys.rb
db/migrate/031_create_countries.rb
db/migrate/032_add_user_locale.rb
db/migrate/033_change_diary_entries_language.rb
db/migrate/034_create_languages.rb
db/migrate/035_change_user_locale.rb
db/migrate/036_add_visible_to_message.rb
db/migrate/037_add_sender_visible_to_message.rb
db/migrate/038_add_message_sender_index.rb
db/migrate/039_add_more_controls_to_gpx_files.rb
db/migrate/040_create_oauth_tables.rb
db/migrate/041_add_fine_o_auth_permissions.rb
db/migrate/042_add_foreign_keys_to_oauth_tables.rb
db/migrate/043_add_referer_to_user_token.rb
db/migrate/044_create_user_roles.rb
db/migrate/045_create_user_blocks.rb
db/migrate/046_alter_user_roles_and_blocks.rb
db/migrate/047_add_visible_to_diaries.rb
db/migrate/048_add_diary_creation_indexes.rb
db/migrate/049_improve_changeset_user_index.rb
db/migrate/050_add_user_index_to_diary_comments.rb
db/migrate/051_add_status_to_user.rb
db/migrate/052_add_contributor_terms_to_user.rb
db/migrate/053_add_map_bug_tables.rb
db/migrate/054_refactor_map_bug_tables.rb
db/migrate/055_change_map_bug_comment_type.rb
db/migrate/056_add_date_closed.rb
db/migrate/057_add_map_bug_comment_event.rb
db/migrate/20100513171259_add_user_date_index_to_changeset.rb
db/migrate/20100516124737_add_open_id.rb
db/migrate/20100910084426_add_callback_to_oauth_tokens.rb
db/migrate/20101114011429_add_editor_preference_to_user.rb
db/migrate/20110322001319_add_terms_seen_to_user.rb
db/migrate/20110508145337_cleanup_bug_tables.rb
db/migrate/20110521142405_rename_bugs_to_notes.rb
db/migrate/20110925112722_rename_ids.rb
db/migrate/20111116184519_update_oauth.rb
db/migrate/20111212183945_add_lowercase_user_indexes.rb
db/migrate/20120123184321_switch_to_paperclip.rb
db/migrate/20120208122334_merge_acl_address_and_mask.rb
db/migrate/20120208194454_add_domain_to_acl.rb
db/migrate/20120214210114_add_text_format.rb
db/migrate/20120219161649_add_user_image_fingerprint.rb
db/migrate/20120318201948_create_redactions.rb
db/migrate/20120328090602_drop_session_table.rb
db/migrate/20120404205604_add_user_and_description_to_redaction.rb
db/migrate/20120808231205_add_counter_caches.rb
db/migrate/20121005195010_add_diary_entry_counter_caches.rb
db/migrate/20121012044047_add_image_use_gravatar_to_users.rb
db/migrate/20121119165817_drop_nearby_place_from_notes.rb
db/migrate/20121202155309_remove_author_name_from_note_comment.rb
db/migrate/20121203124841_change_note_address_to_inet.rb
db/migrate/20130328184137_add_write_notes_permission.rb
db/migrate/20131212124700_add_created_at_index_to_note_comments.rb
db/migrate/20140115192822_add_text_index_to_note_comments.rb
db/migrate/20140117185510_drop_countries.rb
db/migrate/20140210003018_add_user_image_content_type.rb
db/migrate/20140507110937_create_changeset_comments.rb
db/migrate/20140519141742_add_join_table_between_users_and_changesets.rb
db/migrate/20150110152606_change_default_formats.rb
db/migrate/20150111192335_subscribe_old_changesets.rb
db/migrate/20150222101847_rename_openid_url.rb
db/migrate/20150818224516_set_default_gravatar_to_false_for_privacy.rb
db/migrate/20161002153425_add_join_table_between_users_and_diary_entries.rb
db/migrate/20161011010929_subscribe_authors_to_diary_entries.rb
db/migrate/20170222134109_add_user_indexes.rb
db/migrate/20181020114000_add_user_tou_agreed.rb [new file with mode: 0644]
db/migrate/20190518115041_add_acl_indexes.rb [new file with mode: 0644]
db/structure.sql
lib/diff_reader.rb
public/robots.txt
test/controllers/api/changesets_controller_test.rb
test/controllers/api/old_nodes_controller_test.rb
test/controllers/api/traces_controller_test.rb
test/controllers/api/users_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/controllers/users_controller_test.rb
test/integration/user_creation_test.rb
test/integration/user_diaries_test.rb
test/models/message_test.rb
test/system/diary_entry_test.rb
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/community-sprite.svg
vendor/assets/iD/iD/img/fa-sprite.svg
vendor/assets/iD/iD/img/iD-sprite.svg
vendor/assets/iD/iD/img/temaki-sprite.svg
vendor/assets/iD/iD/img/tnp-sprite.svg [new file with mode: 0644]
vendor/assets/iD/iD/locales/af.json
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/bg.json
vendor/assets/iD/iD/locales/bn.json
vendor/assets/iD/iD/locales/bs.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/ckb.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/cy.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/dv.json
vendor/assets/iD/iD/locales/el.json
vendor/assets/iD/iD/locales/en-AU.json
vendor/assets/iD/iD/locales/en-GB.json
vendor/assets/iD/iD/locales/en.json
vendor/assets/iD/iD/locales/eo.json
vendor/assets/iD/iD/locales/es.json
vendor/assets/iD/iD/locales/et.json
vendor/assets/iD/iD/locales/eu.json
vendor/assets/iD/iD/locales/fa.json
vendor/assets/iD/iD/locales/fi.json
vendor/assets/iD/iD/locales/fr.json
vendor/assets/iD/iD/locales/gl.json
vendor/assets/iD/iD/locales/gu.json
vendor/assets/iD/iD/locales/he.json
vendor/assets/iD/iD/locales/hi.json
vendor/assets/iD/iD/locales/hr.json
vendor/assets/iD/iD/locales/hu.json
vendor/assets/iD/iD/locales/hy.json
vendor/assets/iD/iD/locales/id.json
vendor/assets/iD/iD/locales/is.json
vendor/assets/iD/iD/locales/it.json
vendor/assets/iD/iD/locales/ja.json
vendor/assets/iD/iD/locales/kn.json
vendor/assets/iD/iD/locales/ko.json
vendor/assets/iD/iD/locales/ku.json
vendor/assets/iD/iD/locales/lt.json
vendor/assets/iD/iD/locales/lv.json
vendor/assets/iD/iD/locales/mg.json
vendor/assets/iD/iD/locales/mk.json
vendor/assets/iD/iD/locales/ml.json
vendor/assets/iD/iD/locales/ms.json
vendor/assets/iD/iD/locales/ne.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/no.json
vendor/assets/iD/iD/locales/pap.json [new file with mode: 0644]
vendor/assets/iD/iD/locales/pl.json
vendor/assets/iD/iD/locales/pt-BR.json
vendor/assets/iD/iD/locales/pt.json
vendor/assets/iD/iD/locales/ro.json
vendor/assets/iD/iD/locales/ru.json
vendor/assets/iD/iD/locales/si.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/so.json
vendor/assets/iD/iD/locales/sq.json
vendor/assets/iD/iD/locales/sr.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/ta.json
vendor/assets/iD/iD/locales/te.json
vendor/assets/iD/iD/locales/th.json
vendor/assets/iD/iD/locales/tl.json
vendor/assets/iD/iD/locales/tr.json
vendor/assets/iD/iD/locales/uk.json
vendor/assets/iD/iD/locales/vi.json
vendor/assets/iD/iD/locales/yue.json
vendor/assets/iD/iD/locales/zh-CN.json
vendor/assets/iD/iD/locales/zh-HK.json
vendor/assets/iD/iD/locales/zh-TW.json
vendor/assets/iD/iD/locales/zh.json
vendor/assets/iD/iD/mapillary-js/mapillary.js
vendor/assets/iD/iD/mapillary-js/mapillary.js.map
vendor/assets/iD/iD/mapillary-js/mapillary.min.css
vendor/assets/iD/iD/mapillary-js/mapillary.min.js
vendor/assets/leaflet/leaflet.css
vendor/assets/leaflet/leaflet.js
vendor/assets/polyfill/es5.js
vendor/assets/polyfill/es6.js

index 690d984f74ad8c94962a24c2224c2107fcbe4841..7d2df0445445ab5f25f560eeb0cdea58a474f0c2 100644 (file)
@@ -1,5 +1,9 @@
 inherit_from: .rubocop_todo.yml
 
+require:
+  - rubocop-performance
+  - rubocop-rails
+
 AllCops:
   TargetRubyVersion: 2.5
 
@@ -15,6 +19,10 @@ Lint/PercentStringArray:
     - 'app/controllers/application_controller.rb'
     - 'app/controllers/site_controller.rb'
 
+Metrics/BlockLength:
+  Exclude:
+    - 'config/routes.rb'
+
 Naming/FileName:
   Exclude:
     - 'script/deliver-message'
index 25a30bf40099b15ac1326ca0bcccd3568322472c..26b5aa64b8402baec153a5c6358fe5b37c596b3c 100644 (file)
@@ -1,79 +1,79 @@
 # This configuration was generated by
 # `rubocop --auto-gen-config`
-# on 2018-09-19 14:24:02 +0100 using RuboCop version 0.58.2.
+# on 2019-06-05 09:04:25 +0100 using RuboCop version 0.71.0.
 # The point is for the user to remove these configuration records
 # one by one as the offenses are removed from the code base.
 # Note that changes in the inspected code, or installation of new
 # versions of RuboCop, may require this file to be generated again.
 
-# Offense count: 32
+# Offense count: 33
 # Configuration parameters: AllowSafeAssignment.
 Lint/AssignmentInCondition:
   Exclude:
+    - 'app/controllers/api/traces_controller.rb'
+    - 'app/controllers/api/user_preferences_controller.rb'
     - 'app/controllers/application_controller.rb'
     - 'app/controllers/geocoder_controller.rb'
     - 'app/controllers/notes_controller.rb'
-    - 'app/controllers/api/traces_controller.rb'
     - 'app/controllers/traces_controller.rb'
     - 'app/controllers/users_controller.rb'
-    - 'app/controllers/api/user_preferences_controller.rb'
     - 'app/helpers/application_helper.rb'
-    - 'app/helpers/browse_helper.rb'
     - 'app/helpers/browse_tags_helper.rb'
-    - 'app/models/client_application.rb'
     - 'app/mailers/notifier.rb'
+    - 'app/models/client_application.rb'
     - 'lib/nominatim.rb'
     - 'lib/osm.rb'
     - 'script/deliver-message'
 
 # Offense count: 4
+# Configuration parameters: AllowComments.
 Lint/HandleExceptions:
   Exclude:
     - 'app/controllers/api/amf_controller.rb'
     - 'app/controllers/users_controller.rb'
 
-# Offense count: 692
+# Offense count: 703
 Metrics/AbcSize:
-  Max: 283
+  Max: 279
 
 # Offense count: 40
 # Configuration parameters: CountComments, ExcludedMethods.
 # ExcludedMethods: refine
 Metrics/BlockLength:
-  Max: 262
+  Max: 71
 
-# Offense count: 11
+# Offense count: 15
 # Configuration parameters: CountBlocks.
 Metrics/BlockNesting:
   Max: 5
 
-# Offense count: 63
+# Offense count: 68
 # Configuration parameters: CountComments.
 Metrics/ClassLength:
-  Max: 1627
+  Max: 1397
 
-# Offense count: 72
+# Offense count: 73
 Metrics/CyclomaticComplexity:
-  Max: 23
+  Max: 22
 
-# Offense count: 691
-# Configuration parameters: CountComments.
+# Offense count: 714
+# Configuration parameters: CountComments, ExcludedMethods.
 Metrics/MethodLength:
   Max: 179
 
-# Offense count: 2
+# Offense count: 1
 # Configuration parameters: CountComments.
 Metrics/ModuleLength:
-  Max: 135
+  Max: 107
 
 # Offense count: 4
 # Configuration parameters: CountKeywordArgs.
 Metrics/ParameterLists:
   Max: 9
 
-# Offense count: 72
+# Offense count: 71
 Metrics/PerceivedComplexity:
-  Max: 23
+  Max: 25
 
 # Offense count: 6
 Naming/AccessorMethodName:
@@ -111,14 +111,6 @@ Rails/BulkChangeTable:
     - 'db/migrate/20120208194454_add_domain_to_acl.rb'
     - 'db/migrate/20120404205604_add_user_and_description_to_redaction.rb'
 
-# Offense count: 2
-# Configuration parameters: Include.
-# Include: app/**/*.rb, config/**/*.rb, lib/**/*.rb
-Rails/Exit:
-  Exclude:
-    - 'lib/**/*.rake'
-    - 'lib/daemons/gpx_import.rb'
-
 # Offense count: 2
 # Configuration parameters: Include.
 # Include: app/models/**/*.rb
@@ -127,6 +119,15 @@ Rails/HasAndBelongsToMany:
     - 'app/models/changeset.rb'
     - 'app/models/user.rb'
 
+# Offense count: 11
+# Configuration parameters: Include.
+# Include: app/helpers/**/*.rb
+Rails/HelperInstanceVariable:
+  Exclude:
+    - 'app/helpers/application_helper.rb'
+    - 'app/helpers/title_helper.rb'
+    - 'app/helpers/trace_helper.rb'
+
 # Offense count: 5
 # Configuration parameters: Include.
 # Include: db/migrate/*.rb
@@ -138,7 +139,7 @@ Rails/NotNullColumn:
     - 'db/migrate/025_add_end_time_to_changesets.rb'
     - 'db/migrate/20120404205604_add_user_and_description_to_redaction.rb'
 
-# Offense count: 20
+# Offense count: 18
 Rails/OutputSafety:
   Exclude:
     - 'app/controllers/users_controller.rb'
@@ -148,11 +149,11 @@ Rails/OutputSafety:
     - 'app/helpers/note_helper.rb'
     - 'app/helpers/open_graph_helper.rb'
     - 'app/helpers/user_blocks_helper.rb'
-    - 'app/helpers/user_roles_helper.rb'
     - 'lib/rich_text.rb'
     - 'test/helpers/application_helper_test.rb'
 
-# Offense count: 86
+# Offense count: 94
+# Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle.
 # SupportedStyles: strict, flexible
 Rails/TimeZone:
@@ -164,14 +165,14 @@ Style/AsciiComments:
   Exclude:
     - 'test/models/message_test.rb'
 
-# Offense count: 230
+# Offense count: 255
 Style/Documentation:
   Enabled: false
 
-# Offense count: 462
+# Offense count: 503
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle.
-# SupportedStyles: when_needed, always, never
+# SupportedStyles: always, never
 Style/FrozenStringLiteralComment:
   Enabled: false
 
@@ -181,14 +182,15 @@ Style/IfUnlessModifier:
   Exclude:
     - 'app/controllers/api/ways_controller.rb'
 
-# Offense count: 70
+# Offense count: 74
 # Cop supports --auto-correct.
 # Configuration parameters: Strict.
 Style/NumericLiterals:
   MinDigits: 11
 
-# Offense count: 3080
-# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
+# Offense count: 3320
+# Cop supports --auto-correct.
+# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
 # URISchemes: http, https
 Metrics/LineLength:
   Max: 1073
index 9b848200fb127855e839de0d0b7adfbb07dee7f5..459c36f4fa2362245eb84734c97559ff6f4af8cf 100644 (file)
@@ -1,8 +1,9 @@
-sudo: false
+dist: xenial
 language: ruby
 rvm:
-  - 2.5.1
-cache: bundler
+  - 2.5.3
+cache:
+  - bundler
 addons:
   postgresql: 9.5
   apt:
@@ -14,6 +15,7 @@ env:
   global:
     - OSM_MEMCACHE_SERVERS="127.0.0.1"
 before_script:
+  - sed -e "/idle_in_transaction_session_timeout/d" -e 's/ IMMUTABLE / /' -e "s/AS '.*libpgosm.*',/AS 'libpgosm',/" -e "/^--/d" db/structure.sql > db/structure.expected
   - psql -U postgres -c "CREATE DATABASE openstreetmap"
   - psql -U postgres -c "CREATE EXTENSION btree_gist" openstreetmap
   - make -C db/functions libpgosm.so
@@ -27,6 +29,9 @@ before_script:
   - bundle exec rake i18n:js:export
 script:
   - bundle exec rubocop -f fuubar
-  - bundle exec rake jshint
+  - bundle exec rake eslint:run_all
   - bundle exec erblint .
+  - bundle exec rake db:structure:dump
+  - sed -e "/idle_in_transaction_session_timeout/d" -e 's/ IMMUTABLE / /' -e "s/AS '.*libpgosm.*',/AS 'libpgosm',/" -e "/^--/d" db/structure.sql > db/structure.actual
+  - diff -uw db/structure.expected db/structure.actual
   - bundle exec rake test:db
diff --git a/Gemfile b/Gemfile
index 6c867193c8e240e5934c75074df3d1e56a7ef330..dc1615ffc47508cecd75556cd260902d0a366b46 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -13,7 +13,7 @@ gem "psych", :platforms => :ruby_20
 gem "json"
 
 # Use postgres as the database
-gem "pg", "~> 0.18"
+gem "pg"
 
 # Use SCSS for stylesheets
 gem "sassc-rails"
@@ -60,7 +60,8 @@ gem "paperclip", "~> 5.2"
 gem "rack-cors"
 gem "rails-i18n", "~> 4.0.0"
 gem "record_tag_helper"
-gem "rinku", "= 2.0.4", :require => "rails_rinku"
+gem "rinku", ">= 2.0.6", :require => "rails_rinku"
+gem "strong_migrations"
 gem "validates_email_format_of", ">= 1.5.1"
 
 # Native OSM extensions
@@ -137,6 +138,8 @@ group :test do
   gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
   gem "rails-controller-testing"
   gem "rubocop"
+  gem "rubocop-performance"
+  gem "rubocop-rails"
   gem "webmock"
 end
 
@@ -145,8 +148,10 @@ group :development, :test do
   gem "capybara", "~> 2.13"
   gem "coveralls", :require => false
   gem "erb_lint", :require => false
+  gem "eslint-rails-ee"
+  gem "execjs"
   gem "factory_bot_rails"
-  gem "jshint"
   gem "poltergeist"
   gem "puma", "~> 3.7"
+  gem "therubyracer", :platforms => :ruby
 end
index a696aaaa94b562cb7aeb5ccb751720b952df46d2..4798189389fd0e70d89c2011ad14788e2c14c9df 100644 (file)
@@ -2,7 +2,7 @@ GEM
   remote: https://rubygems.org/
   specs:
     SystemTimer (1.2.3)
-    aasm (5.0.2)
+    aasm (5.0.5)
       concurrent-ruby (~> 1.0)
     actioncable (5.2.3)
       actionpack (= 5.2.3)
@@ -40,7 +40,7 @@ GEM
       activemodel (= 5.2.3)
       activesupport (= 5.2.3)
       arel (>= 9.0)
-    activerecord-import (1.0.1)
+    activerecord-import (1.0.2)
       activerecord (>= 3.2)
     activestorage (5.2.3)
       actionpack (= 5.2.3)
@@ -53,8 +53,8 @@ GEM
       tzinfo (~> 1.1)
     addressable (2.6.0)
       public_suffix (>= 2.0.2, < 4.0)
-    annotate (2.7.4)
-      activerecord (>= 3.2, < 6.0)
+    annotate (2.7.5)
+      activerecord (>= 3.2, < 7.0)
       rake (>= 10.4, < 13.0)
     arel (9.0.0)
     ast (2.4.0)
@@ -75,11 +75,11 @@ GEM
     bigdecimal (1.1.0)
     binding_of_caller (0.8.0)
       debug_inspector (>= 0.0.1)
-    bootsnap (1.4.2)
+    bootsnap (1.4.4)
       msgpack (~> 1.0)
     browser (2.5.3)
     builder (3.2.3)
-    cancancan (2.3.0)
+    cancancan (3.0.1)
     canonical-rails (0.2.5)
       rails (>= 4.1, < 6.1)
     capybara (2.18.0)
@@ -99,6 +99,7 @@ GEM
       coffee-script-source
       execjs
     coffee-script-source (1.12.2)
+    colorize (0.8.1)
     composite_primary_keys (11.1.0)
       activerecord (~> 5.2.1)
     concurrent-ruby (1.1.5)
@@ -106,11 +107,11 @@ GEM
       activesupport (>= 3.0)
       deep_merge (~> 1.2.1)
       dry-validation (>= 0.12.2)
-    coveralls (0.8.22)
+    coveralls (0.8.23)
       json (>= 1.8, < 3)
       simplecov (~> 0.16.1)
       term-ansicolor (~> 1.3)
-      thor (~> 0.19.4)
+      thor (>= 0.19.4, < 2.0)
       tins (~> 1.6)
     crack (0.4.3)
       safe_yaml (~> 1.0.0)
@@ -124,7 +125,7 @@ GEM
       activerecord (>= 3.0, < 5.3)
       delayed_job (>= 3.0, < 5)
     docile (1.3.1)
-    dry-configurable (0.8.2)
+    dry-configurable (0.8.3)
       concurrent-ruby (~> 1.0)
       dry-core (~> 0.4, >= 0.4.7)
     dry-container (0.7.0)
@@ -134,8 +135,8 @@ GEM
       concurrent-ruby (~> 1.0)
     dry-equalizer (0.2.2)
     dry-inflector (0.1.2)
-    dry-logic (0.5.0)
-      dry-container (~> 0.2, >= 0.2.6)
+    dry-logic (0.6.1)
+      concurrent-ruby (~> 1.0)
       dry-core (~> 0.2)
       dry-equalizer (~> 0.2)
     dry-types (0.14.1)
@@ -145,7 +146,7 @@ GEM
       dry-equalizer (~> 0.2)
       dry-inflector (~> 0.1, >= 0.1.2)
       dry-logic (~> 0.5, >= 0.5)
-    dry-validation (0.13.1)
+    dry-validation (0.13.3)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 0.1, >= 0.1.3)
       dry-core (~> 0.2, >= 0.2.1)
@@ -161,60 +162,60 @@ GEM
       rubocop (~> 0.51)
       smart_properties
     erubi (1.8.0)
+    eslint-rails-ee (1.0.2)
+      colorize
+      execjs
+      railties (>= 3.2)
     execjs (2.7.0)
     exifr (1.3.6)
     factory_bot (5.0.2)
       activesupport (>= 4.2.0)
-    factory_bot_rails (5.0.1)
-      factory_bot (~> 5.0.0)
+    factory_bot_rails (5.0.2)
+      factory_bot (~> 5.0.2)
       railties (>= 4.2.0)
-    fakefs (0.20.0)
+    fakefs (0.20.1)
     faraday (0.15.4)
       multipart-post (>= 1.2, < 3)
-    ffi (1.10.0)
-    fspath (3.1.0)
+    ffi (1.11.1)
+    fspath (3.1.1)
     gd2-ffij (0.4.0)
       ffi (>= 1.0.0)
     geoip (1.6.4)
     globalid (0.4.2)
       activesupport (>= 4.2.0)
-    hashdiff (0.3.8)
+    hashdiff (0.4.0)
     hashie (3.6.0)
     html_tokenizer (0.0.7)
     htmlentities (4.3.4)
     http_accept_language (2.0.5)
     i18n (0.9.5)
       concurrent-ruby (~> 1.0)
-    i18n-js (3.2.1)
+    i18n-js (3.2.3)
       i18n (>= 0.6.6)
-    image_optim (0.26.3)
+    image_optim (0.26.4)
       exifr (~> 1.2, >= 1.2.2)
       fspath (~> 3.0)
       image_size (>= 1.5, < 3)
       in_threads (~> 1.3)
       progress (~> 3.0, >= 3.0.1)
-    image_optim_rails (0.4.1)
+    image_optim_rails (0.4.2)
       image_optim (~> 0.24)
       rails
       sprockets
-    image_size (2.0.0)
-    in_threads (1.5.1)
+    image_size (2.0.1)
+    in_threads (1.5.2)
     jaro_winkler (1.5.2)
     jquery-rails (4.3.3)
       rails-dom-testing (>= 1, < 3)
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
-    jshint (1.5.0)
-      execjs (>= 1.4.0)
-      multi_json (~> 1.0)
-      therubyracer (~> 0.12.1)
     json (2.2.0)
     jsonify (0.3.1)
       multi_json (~> 1.0)
     jsonify-rails (0.3.2)
       actionpack
       jsonify (< 0.4.0)
-    jwt (2.1.0)
+    jwt (2.2.1)
     kgio (2.11.2)
     kramdown (2.1.0)
     libv8 (3.16.14.19)
@@ -238,17 +239,17 @@ GEM
     method_source (0.9.2)
     mime-types (3.2.2)
       mime-types-data (~> 3.2015)
-    mime-types-data (3.2018.0812)
+    mime-types-data (3.2019.0331)
     mimemagic (0.3.3)
     mini_mime (1.0.1)
     mini_portile2 (2.4.0)
     minitest (5.11.3)
-    msgpack (1.2.9)
+    msgpack (1.2.10)
     multi_json (1.13.1)
     multi_xml (0.6.0)
-    multipart-post (2.0.0)
+    multipart-post (2.1.1)
     nio4r (2.3.1)
-    nokogiri (1.10.2)
+    nokogiri (1.10.3)
       mini_portile2 (~> 2.4.0)
     nokogumbo (2.0.1)
       nokogiri (~> 1.8, >= 1.8.4)
@@ -272,7 +273,7 @@ GEM
     omniauth-github (1.3.0)
       omniauth (~> 1.5)
       omniauth-oauth2 (>= 1.4.0, < 2.0)
-    omniauth-google-oauth2 (0.6.1)
+    omniauth-google-oauth2 (0.7.0)
       jwt (>= 2.0)
       omniauth (>= 1.1.1)
       omniauth-oauth2 (>= 1.5)
@@ -298,21 +299,21 @@ GEM
       mime-types
       mimemagic (~> 0.3.0)
       terrapin (~> 0.6.0)
-    parallel (1.16.0)
-    parser (2.6.2.0)
+    parallel (1.17.0)
+    parser (2.6.3.0)
       ast (~> 2.4.0)
-    pg (0.21.0)
+    pg (1.1.4)
     poltergeist (1.18.1)
       capybara (>= 2.1, < 4)
       cliver (~> 0.3.1)
       websocket-driver (>= 0.2.0)
-    progress (3.5.0)
+    progress (3.5.1)
     psych (3.1.0)
-    public_suffix (3.0.3)
+    public_suffix (3.1.0)
     puma (3.12.1)
     quad_tile (1.0.1)
     r2 (0.2.7)
-    rack (2.0.6)
+    rack (2.0.7)
     rack-cors (1.0.3)
     rack-openid (1.3.1)
       rack (>= 1.1.0)
@@ -361,19 +362,23 @@ GEM
     ref (2.0.0)
     request_store (1.4.1)
       rack (>= 1.4)
-    rinku (2.0.4)
-    rotp (4.1.0)
+    rinku (2.0.6)
+    rotp (5.0.0)
       addressable (~> 2.5)
-    rubocop (0.66.0)
+    rubocop (0.71.0)
       jaro_winkler (~> 1.5.1)
       parallel (~> 1.10)
-      parser (>= 2.5, != 2.5.1.1)
-      psych (>= 3.1.0)
+      parser (>= 2.6)
       rainbow (>= 2.2.2, < 4.0)
       ruby-progressbar (~> 1.7)
-      unicode-display_width (>= 1.4.0, < 1.6)
+      unicode-display_width (>= 1.4.0, < 1.7)
+    rubocop-performance (1.3.0)
+      rubocop (>= 0.68.0)
+    rubocop-rails (2.0.0)
+      rack (>= 2.0)
+      rubocop (>= 0.70.0)
     ruby-openid (2.7.0)
-    ruby-progressbar (1.10.0)
+    ruby-progressbar (1.10.1)
     ruby_dep (1.5.0)
     safe_yaml (1.0.5)
     sanitize (5.0.0)
@@ -383,7 +388,7 @@ GEM
     sassc (2.0.1)
       ffi (~> 1.9)
       rake
-    sassc-rails (2.1.0)
+    sassc-rails (2.1.1)
       railties (>= 4.0.0)
       sassc (>= 2.0)
       sprockets (> 3.0)
@@ -395,7 +400,7 @@ GEM
       json (>= 1.8, < 3)
       simplecov-html (~> 0.10.0)
     simplecov-html (0.10.2)
-    smart_properties (1.13.1)
+    smart_properties (1.14.0)
     sprockets (3.7.2)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
@@ -403,6 +408,8 @@ GEM
       actionpack (>= 4.0)
       activesupport (>= 4.0)
       sprockets (>= 3.0.0)
+    strong_migrations (0.4.0)
+      activerecord (>= 5)
     term-ansicolor (1.7.1)
       tins (~> 1.0)
     terrapin (0.6.0)
@@ -410,22 +417,22 @@ GEM
     therubyracer (0.12.3)
       libv8 (~> 3.16.14.15)
       ref
-    thor (0.19.4)
+    thor (0.20.3)
     thread_safe (0.3.6)
     tilt (2.0.9)
-    tins (1.20.2)
+    tins (1.20.3)
     tzinfo (1.2.5)
       thread_safe (~> 0.1)
     uglifier (4.1.20)
       execjs (>= 0.3.0, < 3)
-    unicode-display_width (1.5.0)
+    unicode-display_width (1.6.0)
     validates_email_format_of (1.6.3)
       i18n
     vendorer (0.2.0)
-    webmock (3.5.1)
+    webmock (3.6.0)
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
-      hashdiff
+      hashdiff (>= 0.4.0, < 2.0.0)
     websocket-driver (0.7.0)
       websocket-extensions (>= 0.1.0)
     websocket-extensions (0.1.3)
@@ -459,6 +466,8 @@ DEPENDENCIES
   delayed_job_active_record
   dynamic_form
   erb_lint
+  eslint-rails-ee
+  execjs
   factory_bot_rails
   fakefs
   faraday
@@ -469,7 +478,6 @@ DEPENDENCIES
   i18n-js (>= 3.0.0)
   image_optim_rails
   jquery-rails
-  jshint
   json
   jsonify-rails
   kgio
@@ -488,7 +496,7 @@ DEPENDENCIES
   omniauth-windowslive
   openstreetmap-deadlock_retry (>= 1.3.0)
   paperclip (~> 5.2)
-  pg (~> 0.18)
+  pg
   poltergeist
   psych
   puma (~> 3.7)
@@ -500,12 +508,16 @@ DEPENDENCIES
   rails-controller-testing
   rails-i18n (~> 4.0.0)
   record_tag_helper
-  rinku (= 2.0.4)
+  rinku (>= 2.0.6)
   rotp
   rubocop
+  rubocop-performance
+  rubocop-rails
   sanitize
   sassc-rails
   secure_headers
+  strong_migrations
+  therubyracer
   uglifier (>= 1.3.0)
   validates_email_format_of (>= 1.5.1)
   vendorer
index 22a6ae422b4355efb15e4edbb5fa8bea337a6cc1..ad59f91ebea6aef14b73f8295c84aeeb14993c05 100644 (file)
@@ -11,13 +11,13 @@ folder 'vendor/assets' do
   end
 
   folder 'leaflet' do
-    file 'leaflet.js', 'https://unpkg.com/leaflet@1.4.0/dist/leaflet-src.js'
-    file 'leaflet.css', 'https://unpkg.com/leaflet@1.4.0/dist/leaflet.css'
+    file 'leaflet.js', 'https://unpkg.com/leaflet@1.5.1/dist/leaflet-src.js'
+    file 'leaflet.css', 'https://unpkg.com/leaflet@1.5.1/dist/leaflet.css'
 
     [ 'layers.png', 'layers-2x.png',
       'marker-icon.png', 'marker-icon-2x.png',
       'marker-shadow.png' ].each do |image|
-      file "images/#{image}", "https://unpkg.com/leaflet@1.4.0/dist/images/#{image}"
+      file "images/#{image}", "https://unpkg.com/leaflet@1.5.1/dist/images/#{image}"
     end
 
     from 'git://github.com/aratcliffe/Leaflet.contextmenu.git', :tag => 'v1.5.0' do
index d2864e452ab975c06ba98c4d2b6ac221f67ee693..28380392df1aaaba9500b1724e047e8c71f70826 100644 (file)
@@ -36,7 +36,7 @@ class Ability
 
       if Settings.status != "database_offline"
         can [:index, :new, :create, :show, :edit, :update, :destroy], ClientApplication
-        can [:create, :edit, :comment, :subscribe, :unsubscribe], DiaryEntry
+        can [:new, :create, :edit, :update, :comment, :subscribe, :unsubscribe], DiaryEntry
         can [:new, :create, :reply, :show, :inbox, :outbox, :mark, :destroy], Message
         can [:close, :reopen], Note
         can [:new, :create], Report
@@ -51,7 +51,7 @@ class Ability
         end
 
         if user.administrator?
-          can [:hide, :hidecomment], [DiaryEntry, DiaryComment]
+          can [:hide, :unhide, :hidecomment, :unhidecomment], [DiaryEntry, DiaryComment]
           can [:index, :show, :resolve, :ignore, :reopen], Issue
           can :create, IssueComment
           can [:set_status, :delete, :index], User
index 54bc8fb4c4cbaddbbbbd9a3332b4d6789ef4aa88..a71d05d75c27dabf548d4a4d06c06153aed7b267 100644 (file)
@@ -15,7 +15,7 @@ class ApiAbility
       can [:show, :download, :query], Changeset
       can [:index, :create, :comment, :feed, :show, :search], Note
       can :index, Tracepoint
-      can [:api_users, :api_read], User
+      can [:index, :show], User
       can [:index, :show], Node
       can [:index, :show, :full, :ways_for_node], Way
       can [:index, :show, :full, :relations_for_node, :relations_for_way, :relations_for_relation], Relation
@@ -33,8 +33,8 @@ class ApiAbility
         can [:new, :create, :reply, :show, :inbox, :outbox, :mark, :destroy], Message
         can [:close, :reopen], Note
         can [:new, :create], Report
-        can [:api_create, :api_read, :api_update, :api_delete, :api_data], Trace
-        can [:api_details, :api_gpx_files], User
+        can [:create, :show, :update, :destroy, :data], Trace
+        can [:details, :gpx_files], User
         can [:read, :read_one, :update, :update_one, :delete_one], UserPreference
 
         if user.terms_agreed?
index 9f59b1f2442f3568f67395e629b393563dc8e34b..7d8a13364c8fec33c091ebd32516a297b51c6050 100644 (file)
@@ -6,10 +6,10 @@ class ApiCapability
   def initialize(token)
     if Settings.status != "database_offline"
       can [:create, :comment, :close, :reopen], Note if capability?(token, :allow_write_notes)
-      can [:api_read, :api_data], Trace if capability?(token, :allow_read_gpx)
-      can [:api_create, :api_update, :api_delete], Trace if capability?(token, :allow_write_gpx)
-      can [:api_details], User if capability?(token, :allow_read_prefs)
-      can [:api_gpx_files], User if capability?(token, :allow_read_gpx)
+      can [:show, :data], Trace if capability?(token, :allow_read_gpx)
+      can [:create, :update, :destroy], Trace if capability?(token, :allow_write_gpx)
+      can [:details], User if capability?(token, :allow_read_prefs)
+      can [:gpx_files], User if capability?(token, :allow_read_gpx)
       can [:read, :read_one], UserPreference if capability?(token, :allow_read_prefs)
       can [:update, :update_one, :delete_one], UserPreference if capability?(token, :allow_write_prefs)
 
index ebb0ff5808b65c6cd7d287d7e9dd40a2c83757aa..4a310f22bb8856778e85481e834f7f9fbe6de1dc 100644 (file)
 //= require richtext
 //= require querystring
 
-var querystring = require('querystring-component');
+var querystring = require("querystring-component");
 
 /*
  * Called as the user scrolls/zooms around to maniplate hrefs of the
  * view tab and various other links
  */
 window.updateLinks = function (loc, zoom, layers, object) {
-  $(".geolink").each(function(index, link) {
+  $(".geolink").each(function (index, link) {
     var href = link.href.split(/[?#]/)[0],
       args = querystring.parse(link.search.substring(1)),
       editlink = $(link).hasClass("editlink");
@@ -39,11 +39,11 @@ window.updateLinks = function (loc, zoom, layers, object) {
     }
 
     var query = querystring.stringify(args);
-    if (query) href += '?' + query;
+    if (query) href += "?" + query;
 
     args = {
       lat: loc.lat,
-      lon: 'lon' in loc ? loc.lon : loc.lng,
+      lon: "lon" in loc ? loc.lon : loc.lng,
       zoom: zoom
     };
 
@@ -57,13 +57,13 @@ window.updateLinks = function (loc, zoom, layers, object) {
   });
 
   var editDisabled = zoom < 13;
-  $('#edit_tab')
-    .tooltip({placement: 'bottom'})
-    .off('click.minzoom')
-    .on('click.minzoom', function() { return !editDisabled; })
-    .toggleClass('disabled', editDisabled)
-    .attr('data-original-title', editDisabled ?
-      I18n.t('javascripts.site.edit_disabled_tooltip') : '');
+  $("#edit_tab")
+    .tooltip({ placement: "bottom" })
+    .off("click.minzoom")
+    .on("click.minzoom", function () { return !editDisabled; })
+    .toggleClass("disabled", editDisabled)
+    .attr("data-original-title", editDisabled ?
+      I18n.t("javascripts.site.edit_disabled_tooltip") : "");
 };
 
 window.maximiseMap = function () {
@@ -97,13 +97,13 @@ $(document).ready(function () {
    * to defer the measurement slightly as a workaround.
    */
   setTimeout(function () {
-    $("header").children(":visible").each(function (i,e) {
+    $("header").children(":visible").each(function (i, e) {
       headerWidth = headerWidth + $(e).outerWidth();
     });
 
     $("body").addClass("compact");
 
-    $("header").children(":visible").each(function (i,e) {
+    $("header").children(":visible").each(function (i, e) {
       compactWidth = compactWidth + $(e).outerWidth();
     });
 
@@ -114,12 +114,12 @@ $(document).ready(function () {
     $(window).resize(updateHeader);
   }, 0);
 
-  $("#menu-icon").on("click", function(e) {
+  $("#menu-icon").on("click", function (e) {
     e.preventDefault();
     $("header").toggleClass("closed");
   });
 
-  $("nav.primary li a").on("click", function() {
+  $("nav.primary li a").on("click", function () {
     $("header").toggleClass("closed");
   });
 
index f13706971a43264139ff4c27871973ed59c60c9e..625d43a5228f0b07a391f988a43cae3327364e67 100644 (file)
@@ -9,8 +9,8 @@ $(document).ready(function () {
       map.removeLayer(marker);
     }
 
-    marker = L.marker(e.latlng, {icon: OSM.getUserIcon()}).addTo(map)
-      .bindPopup(I18n.t('diary_entries.edit.marker_text'));
+    marker = L.marker(e.latlng, { icon: OSM.getUserIcon() }).addTo(map)
+      .bindPopup(I18n.t("diary_entries.edit.marker_text"));
   }
 
   $("#usemap").click(function (e) {
@@ -21,21 +21,21 @@ $(document).ready(function () {
 
     var params = $("#map").data();
     var centre = [params.lat, params.lon];
-    var position = $('html').attr('dir') === 'rtl' ? 'topleft' : 'topright';
+    var position = $("html").attr("dir") === "rtl" ? "topleft" : "topright";
 
     map = L.map("map", {
       attributionControl: false,
       zoomControl: false
     }).addLayer(new L.OSM.Mapnik());
 
-    L.OSM.zoom({position: position})
+    L.OSM.zoom({ position: position })
       .addTo(map);
 
     map.setView(centre, params.zoom);
 
     if ($("#latitude").val() && $("#longitude").val()) {
-      marker = L.marker(centre, {icon: OSM.getUserIcon()}).addTo(map)
-        .bindPopup(I18n.t('diary_entries.edit.marker_text'));
+      marker = L.marker(centre, { icon: OSM.getUserIcon() }).addTo(map)
+        .bindPopup(I18n.t("diary_entries.edit.marker_text"));
     }
 
     map.on("click", setLocation);
index e2a503ad319ba06d3541eb376a433d3e4c69fccb..47ba9baf4da556ea4b30dfd38d173575dec960f3 100644 (file)
@@ -1,12 +1,12 @@
-$(document).ready(function() {
+$(document).ready(function () {
   var params = OSM.params();
 
-  var url = '/note/new';
+  var url = "/note/new";
   if (params.lat && params.lon) {
     params.lat = parseFloat(params.lat);
     params.lon = parseFloat(params.lon);
     params.zoom = params.zoom || 17;
     url += OSM.formatHash(params);
   }
-  $('.icon.note').attr('href', url);
+  $(".icon.note").attr("href", url);
 });
index dd7cd3325f10f293311e79435cec6633a3d1f8ac..0aae749f7d2fbece85bb2713d853d8aab5ec04dc 100644 (file)
@@ -2,14 +2,14 @@
 
 /* globals iD */
 
-document.addEventListener("DOMContentLoaded", function() {
+document.addEventListener("DOMContentLoaded", function () {
   var container = document.getElementById("id-container");
 
-  if (typeof iD === 'undefined' || !iD.Detect().support) {
-    container.innerHTML = 'This editor is supported ' +
-      'in Firefox, Chrome, Safari, Opera, Edge, and Internet Explorer 11. ' +
-      'Please upgrade your browser or use Potlatch 2 to edit the map.';
-    container.className = 'unsupported';
+  if (typeof iD === "undefined" || !iD.Detect().support) {
+    container.innerHTML = "This editor is supported " +
+      "in Firefox, Chrome, Safari, Opera, Edge, and Internet Explorer 11. " +
+      "Please upgrade your browser or use Potlatch 2 to edit the map.";
+    container.className = "unsupported";
   } else {
     var id = iD.Context()
       .embed(true)
@@ -24,7 +24,7 @@ document.addEventListener("DOMContentLoaded", function() {
         oauth_token_secret: container.dataset.tokenSecret
       });
 
-    id.map().on('move.embed', parent.$.throttle(250, function() {
+    id.map().on("move.embed", parent.$.throttle(250, function () {
       if (id.inIntro()) return;
       var zoom = ~~id.map().zoom(),
         center = id.map().center(),
@@ -46,7 +46,7 @@ document.addEventListener("DOMContentLoaded", function() {
 
       // 0ms timeout to avoid iframe JS context weirdness.
       // http://bl.ocks.org/jfirebaugh/5439412
-      setTimeout(function() {
+      setTimeout(function () {
         id.map().centerZoom(
           [data.lon, data.lat],
           Math.max(data.zoom || 15, 13));
index e8e566f53a2ca698ae09000cb73d54118282fd8d..6228b2376cd58fe81093f5a4cf9924482fc07eed 100644 (file)
 $(document).ready(function () {
   var loaderTimeout;
 
-  OSM.loadSidebarContent = function(path, callback) {
+  var map = new L.OSM.Map("map", {
+    zoomControl: false,
+    layerControl: false,
+    contextmenu: true
+  });
+
+  OSM.loadSidebarContent = function (path, callback) {
     map.setSidebarOverlaid(false);
 
     clearTimeout(loaderTimeout);
 
-    loaderTimeout = setTimeout(function() {
-      $('#sidebar_loader').show();
+    loaderTimeout = setTimeout(function () {
+      $("#sidebar_loader").show();
     }, 200);
 
     // IE<10 doesn't respect Vary: X-Requested-With header, so
     // prevent caching the XHR response as a full-page URL.
-    if (path.indexOf('?') >= 0) {
-      path += '&xhr=1';
+    if (path.indexOf("?") >= 0) {
+      path += "&xhr=1";
     } else {
-      path += '?xhr=1';
+      path += "?xhr=1";
     }
 
-    $('#sidebar_content')
+    $("#sidebar_content")
       .empty();
 
     $.ajax({
       url: path,
       dataType: "html",
-      complete: function(xhr) {
+      complete: function (xhr) {
         clearTimeout(loaderTimeout);
-        $('#flash').empty();
-        $('#sidebar_loader').hide();
+        $("#flash").empty();
+        $("#sidebar_loader").hide();
 
         var content = $(xhr.responseText);
 
-        if (xhr.getResponseHeader('X-Page-Title')) {
-          var title = xhr.getResponseHeader('X-Page-Title');
+        if (xhr.getResponseHeader("X-Page-Title")) {
+          var title = xhr.getResponseHeader("X-Page-Title");
           document.title = decodeURIComponent(title);
         }
 
-        $('head')
-          .find('link[type="application/atom+xml"]')
+        $("head")
+          .find("link[type=\"application/atom+xml\"]")
           .remove();
 
-        $('head')
-          .append(content.filter('link[type="application/atom+xml"]'));
+        $("head")
+          .append(content.filter("link[type=\"application/atom+xml\"]"));
 
-        $('#sidebar_content').html(content.not('link[type="application/atom+xml"]'));
+        $("#sidebar_content").html(content.not("link[type=\"application/atom+xml\"]"));
 
         if (callback) {
           callback();
@@ -78,13 +84,7 @@ $(document).ready(function () {
 
   var params = OSM.mapParams();
 
-  var map = new L.OSM.Map("map", {
-    zoomControl: false,
-    layerControl: false,
-    contextmenu: true
-  });
-
-  map.attributionControl.setPrefix('');
+  map.attributionControl.setPrefix("");
 
   map.updateLayers(params.layers);
 
@@ -94,32 +94,32 @@ $(document).ready(function () {
     }
   });
 
-  var position = $('html').attr('dir') === 'rtl' ? 'topleft' : 'topright';
+  var position = $("html").attr("dir") === "rtl" ? "topleft" : "topright";
 
-  L.OSM.zoom({position: position})
+  L.OSM.zoom({ position: position })
     .addTo(map);
 
   var locate = L.control.locate({
     position: position,
-    icon: 'icon geolocate',
-    iconLoading: 'icon geolocate',
+    icon: "icon geolocate",
+    iconLoading: "icon geolocate",
     strings: {
-      title: I18n.t('javascripts.map.locate.title'),
-      popup: I18n.t('javascripts.map.locate.popup')
+      title: I18n.t("javascripts.map.locate.title"),
+      popup: I18n.t("javascripts.map.locate.popup")
     }
   }).addTo(map);
 
   var locateContainer = locate.getContainer();
 
   $(locateContainer)
-    .removeClass('leaflet-control-locate leaflet-bar')
-    .addClass('control-locate')
+    .removeClass("leaflet-control-locate leaflet-bar")
+    .addClass("control-locate")
     .children("a")
-    .attr('href', '#')
-    .removeClass('leaflet-bar-part leaflet-bar-part-single')
-    .addClass('control-button');
+    .attr("href", "#")
+    .removeClass("leaflet-bar-part leaflet-bar-part-single")
+    .addClass("control-button");
 
-  var sidebar = L.OSM.sidebar('#map-ui')
+  var sidebar = L.OSM.sidebar("#map-ui")
     .addTo(map);
 
   L.OSM.layers({
@@ -134,9 +134,9 @@ $(document).ready(function () {
   }).addTo(map);
 
   L.OSM.share({
-    position: position,
-    sidebar: sidebar,
-    short: true
+    "position": position,
+    "sidebar": sidebar,
+    "short": true
   }).addTo(map);
 
   L.OSM.note({
@@ -154,7 +154,7 @@ $(document).ready(function () {
 
   OSM.initializeContextMenu(map);
 
-  if (OSM.STATUS !== 'api_offline' && OSM.STATUS !== 'database_offline') {
+  if (OSM.STATUS !== "api_offline" && OSM.STATUS !== "database_offline") {
     OSM.initializeNotes(map);
     if (params.layers.indexOf(map.noteLayer.options.code) >= 0) {
       map.addLayer(map.noteLayer);
@@ -170,51 +170,51 @@ $(document).ready(function () {
     }
   }
 
-  var placement = $('html').attr('dir') === 'rtl' ? 'right' : 'left';
-  $('.leaflet-control .control-button').tooltip({placement: placement, container: 'body'});
+  var placement = $("html").attr("dir") === "rtl" ? "right" : "left";
+  $(".leaflet-control .control-button").tooltip({ placement: placement, container: "body" });
 
   var expiry = new Date();
   expiry.setYear(expiry.getFullYear() + 10);
 
-  map.on('moveend layeradd layerremove', function() {
+  map.on("moveend layeradd layerremove", function () {
     updateLinks(
       map.getCenter().wrap(),
       map.getZoom(),
       map.getLayersCode(),
       map._object);
 
-    $.removeCookie('_osm_location');
-    $.cookie('_osm_location', OSM.locationCookie(map), { expires: expiry, path: '/' });
+    $.removeCookie("_osm_location");
+    $.cookie("_osm_location", OSM.locationCookie(map), { expires: expiry, path: "/" });
   });
 
-  if ($.cookie('_osm_welcome') !== 'hide') {
-    $('.welcome').addClass('visible');
+  if ($.cookie("_osm_welcome") !== "hide") {
+    $(".welcome").addClass("visible");
   }
 
-  $('.welcome .close-wrap').on('click', function() {
-    $('.welcome').removeClass('visible');
-    $.cookie('_osm_welcome', 'hide', { expires: expiry, path: '/' });
+  $(".welcome .close-wrap").on("click", function () {
+    $(".welcome").removeClass("visible");
+    $.cookie("_osm_welcome", "hide", { expires: expiry, path: "/" });
   });
 
   var bannerExpiry = new Date();
   bannerExpiry.setYear(bannerExpiry.getFullYear() + 1);
 
-  $('#banner .close-wrap').on('click', function(e) {
+  $("#banner .close-wrap").on("click", function (e) {
     var cookieId = e.target.id;
-    $('#banner').hide();
+    $("#banner").hide();
     e.preventDefault();
     if (cookieId) {
-      $.cookie(cookieId, 'hide', { expires: bannerExpiry, path: '/' });
+      $.cookie(cookieId, "hide", { expires: bannerExpiry, path: "/" });
     }
   });
 
   if (OSM.PIWIK) {
-    map.on('layeradd', function (e) {
+    map.on("layeradd", function (e) {
       if (e.layer.options) {
         var goal = OSM.PIWIK.goals[e.layer.options.keyid];
 
         if (goal) {
-          $('body').trigger('piwikgoal', goal);
+          $("body").trigger("piwikgoal", goal);
         }
       }
     });
@@ -230,14 +230,14 @@ $(document).ready(function () {
     L.marker([params.mlat, params.mlon]).addTo(map);
   }
 
-  $("#homeanchor").on("click", function(e) {
+  $("#homeanchor").on("click", function (e) {
     e.preventDefault();
 
     var data = $(this).data(),
       center = L.latLng(data.lat, data.lon);
 
     map.setView(center, data.zoom);
-    L.marker(center, {icon: OSM.getUserIcon()}).addTo(map);
+    L.marker(center, { icon: OSM.getUserIcon() }).addTo(map);
   });
 
   function remoteEditHandler(bbox, object) {
@@ -250,8 +250,8 @@ $(document).ready(function () {
           bottom: bbox.getSouth() - 0.0001
         };
 
-    if (location.protocol === 'http' ||
-        bowser.check({chrome: "53", firefox: "55"})) {
+    if (location.protocol === "http" ||
+        bowser.check({ chrome: "53", firefox: "55" })) {
       url = "http://127.0.0.1:8111/load_and_zoom?";
     } else {
       url = "https://127.0.0.1:8112/load_and_zoom?";
@@ -259,18 +259,18 @@ $(document).ready(function () {
 
     if (object) query.select = object.type + object.id;
 
-    var iframe = $('<iframe>')
+    var iframe = $("<iframe>")
         .hide()
-        .appendTo('body')
+        .appendTo("body")
         .attr("src", url + querystring.stringify(query))
-        .on('load', function() {
+        .on("load", function () {
           $(this).remove();
           loaded = true;
         });
 
     setTimeout(function () {
       if (!loaded) {
-        alert(I18n.t('site.index.remote_failed'));
+        alert(I18n.t("site.index.remote_failed"));
         iframe.remove();
       }
     }, 1000);
@@ -278,35 +278,35 @@ $(document).ready(function () {
     return false;
   }
 
-  $("a[data-editor=remote]").click(function(e) {
+  $("a[data-editor=remote]").click(function (e) {
     var params = OSM.mapParams(this.search);
     remoteEditHandler(map.getBounds(), params.object);
     e.preventDefault();
   });
 
   if (OSM.params().edit_help) {
-    $('#editanchor')
-      .removeAttr('title')
+    $("#editanchor")
+      .removeAttr("title")
       .tooltip({
-        placement: 'bottom',
-        title: I18n.t('javascripts.edit_help')
+        placement: "bottom",
+        title: I18n.t("javascripts.edit_help")
       })
-      .tooltip('show');
+      .tooltip("show");
 
-    $('body').one('click', function() {
-      $('#editanchor').tooltip('hide');
+    $("body").one("click", function () {
+      $("#editanchor").tooltip("hide");
     });
   }
 
-  OSM.Index = function(map) {
+  OSM.Index = function (map) {
     var page = {};
 
-    page.pushstate = page.popstate = function() {
+    page.pushstate = page.popstate = function () {
       map.setSidebarOverlaid(true);
-      document.title = I18n.t('layouts.project_name.title');
+      document.title = I18n.t("layouts.project_name.title");
     };
 
-    page.load = function() {
+    page.load = function () {
       var params = querystring.parse(location.search.substring(1));
       if (params.query) {
         $("#sidebar .search_form input[name=query]").value(params.query);
@@ -320,21 +320,21 @@ $(document).ready(function () {
     return page;
   };
 
-  OSM.Browse = function(map, type) {
+  OSM.Browse = function (map, type) {
     var page = {};
 
-    page.pushstate = page.popstate = function(path, id) {
-      OSM.loadSidebarContent(path, function() {
+    page.pushstate = page.popstate = function (path, id) {
+      OSM.loadSidebarContent(path, function () {
         addObject(type, id);
       });
     };
 
-    page.load = function(path, id) {
+    page.load = function (path, id) {
       addObject(type, id, true);
     };
 
     function addObject(type, id, center) {
-      map.addObject({type: type, id: parseInt(id)}, function(bounds) {
+      map.addObject({ type: type, id: parseInt(id, 10) }, function (bounds) {
         if (!window.location.hash && bounds.isValid() &&
             (center || !map.getBounds().contains(bounds))) {
           OSM.router.withoutMoveListener(function () {
@@ -344,7 +344,7 @@ $(document).ready(function () {
       });
     }
 
-    page.unload = function() {
+    page.unload = function () {
       map.removeObject();
     };
 
@@ -354,21 +354,21 @@ $(document).ready(function () {
   var history = OSM.History(map);
 
   OSM.router = OSM.Router(map, {
-    "/":                           OSM.Index(map),
-    "/search":                     OSM.Search(map),
-    "/directions":                 OSM.Directions(map),
-    "/export":                     OSM.Export(map),
-    "/note/new":                   OSM.NewNote(map),
-    "/history/friends":            history,
-    "/history/nearby":             history,
-    "/history":                    history,
+    "/": OSM.Index(map),
+    "/search": OSM.Search(map),
+    "/directions": OSM.Directions(map),
+    "/export": OSM.Export(map),
+    "/note/new": OSM.NewNote(map),
+    "/history/friends": history,
+    "/history/nearby": history,
+    "/history": history,
     "/user/:display_name/history": history,
-    "/note/:id":                   OSM.Note(map),
-    "/node/:id(/history)":         OSM.Browse(map, 'node'),
-    "/way/:id(/history)":          OSM.Browse(map, 'way'),
-    "/relation/:id(/history)":     OSM.Browse(map, 'relation'),
-    "/changeset/:id":              OSM.Changeset(map),
-    "/query":                      OSM.Query(map)
+    "/note/:id": OSM.Note(map),
+    "/node/:id(/history)": OSM.Browse(map, "node"),
+    "/way/:id(/history)": OSM.Browse(map, "way"),
+    "/relation/:id(/history)": OSM.Browse(map, "relation"),
+    "/changeset/:id": OSM.Changeset(map),
+    "/query": OSM.Query(map)
   });
 
   if (OSM.preferred_editor === "remote" && document.location.pathname === "/edit") {
@@ -378,19 +378,23 @@ $(document).ready(function () {
 
   OSM.router.load();
 
-  $(document).on("click", "a", function(e) {
-    if (e.isDefaultPrevented() || e.isPropagationStopped())
+  $(document).on("click", "a", function (e) {
+    if (e.isDefaultPrevented() || e.isPropagationStopped()) {
       return;
+    }
 
     // Open links in a new tab as normal.
-    if (e.which > 1 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
+    if (e.which > 1 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {
       return;
+    }
 
     // Ignore cross-protocol and cross-origin links.
-    if (location.protocol !== this.protocol || location.host !== this.host)
+    if (location.protocol !== this.protocol || location.host !== this.host) {
       return;
+    }
 
-    if (OSM.router.route(this.pathname + this.search + this.hash))
+    if (OSM.router.route(this.pathname + this.search + this.hash)) {
       e.preventDefault();
+    }
   });
 });
index 28a830858f2534168629fb1f86385b0d19285a69..6309444110a1206f7f22e57a2d54f02c3d5422ee 100644 (file)
@@ -26,17 +26,17 @@ OSM.initializeBrowse = function (map) {
     onSelect(e.layer);
   });
 
-  map.on('layeradd', function (e) {
+  map.on("layeradd", function (e) {
     if (e.layer === dataLayer) {
       map.on("moveend", updateData);
       updateData();
     }
   });
 
-  map.on('layerremove', function (e) {
+  map.on("layerremove", function (e) {
     if (e.layer === dataLayer) {
       map.off("moveend", updateData);
-      $('#browse_status').empty();
+      $("#browse_status").empty();
     }
   });
 
@@ -48,7 +48,7 @@ OSM.initializeBrowse = function (map) {
   }
 
   function displayFeatureWarning(count, limit, add, cancel) {
-    $('#browse_status').html(
+    $("#browse_status").html(
       $("<p class='warning'></p>")
         .text(I18n.t("browse.start_rjs.feature_warning", { num_features: count, max_features: limit }))
         .prepend(
@@ -56,7 +56,7 @@ OSM.initializeBrowse = function (map) {
             .click(cancel))
         .append(
           $("<input type='submit'>")
-            .val(I18n.t('browse.start_rjs.load_data'))
+            .val(I18n.t("browse.start_rjs.load_data"))
             .click(add)));
   }
 
@@ -92,13 +92,13 @@ OSM.initializeBrowse = function (map) {
         var features = dataLayer.buildFeatures(xml);
 
         function addFeatures() {
-          $('#browse_status').empty();
+          $("#browse_status").empty();
           dataLayer.addData(features);
           browseBounds = bounds;
         }
 
         function cancelAddFeatures() {
-          $('#browse_status').empty();
+          $("#browse_status").empty();
         }
 
         if (features.length < maxFeatures) {
@@ -120,9 +120,9 @@ OSM.initializeBrowse = function (map) {
 
     // Redraw in selected style
     layer.originalStyle = layer.options;
-    layer.setStyle({color: '#0000ff', weight: 8});
+    layer.setStyle({ color: "#0000ff", weight: 8 });
 
-    OSM.router.route('/' + layer.feature.type + '/' + layer.feature.id);
+    OSM.router.route("/" + layer.feature.type + "/" + layer.feature.id);
 
     // Stash the currently drawn feature
     selectedLayer = layer;
index fa9e1874d92e86fa26d005b1636fce64f1542c37..5ff8edc7103adc5ffc6b58554461d635e2344456 100644 (file)
@@ -1,23 +1,22 @@
 OSM.Changeset = function (map) {
   var page = {},
-    content = $('#sidebar_content'),
+    content = $("#sidebar_content"),
     currentChangesetId;
 
-  page.pushstate = page.popstate = function(path, id) {
-    OSM.loadSidebarContent(path, function() {
+  page.pushstate = page.popstate = function (path, id) {
+    OSM.loadSidebarContent(path, function () {
       page.load(path, id);
     });
   };
 
-  page.load = function(path, id) {
-    if(id)
-      currentChangesetId = id;
+  page.load = function (path, id) {
+    if (id) currentChangesetId = id;
     initialize();
     addChangeset(currentChangesetId, true);
   };
 
   function addChangeset(id, center) {
-    map.addObject({type: 'changeset', id: parseInt(id)}, function(bounds) {
+    map.addObject({ type: "changeset", id: parseInt(id, 10) }, function (bounds) {
       if (!window.location.hash && bounds.isValid() &&
           (center || !map.getBounds().contains(bounds))) {
         OSM.router.withoutMoveListener(function () {
@@ -32,8 +31,8 @@ OSM.Changeset = function (map) {
 
     $(form).find("input[type=submit]").prop("disabled", true);
 
-    if(include_data) {
-      data = {text: $(form.text).val()};
+    if (include_data) {
+      data = { text: $(form.text).val() };
     } else {
       data = {};
     }
@@ -72,10 +71,10 @@ OSM.Changeset = function (map) {
       }
     });
 
-    content.find("textarea").val('').trigger("input");
+    content.find("textarea").val("").trigger("input");
   }
 
-  page.unload = function() {
+  page.unload = function () {
     map.removeObject();
   };
 
index 080a4de72b14691b5328a8b12976f061901b23db..e3e30ce6bbe859a643f2064bfea6c90c5b4a461a 100644 (file)
@@ -77,7 +77,7 @@ OSM.initializeContextMenu = function (map) {
     else map.contextmenu.enable();
   });
 
-  var updateMenu = function updateMenu () {
+  var updateMenu = function updateMenu() {
     map.contextmenu.setDisabled(2, map.getZoom() < 12);
     map.contextmenu.setDisabled(4, map.getZoom() < 14);
   };
index bdba41ec25c2aca44f7c439a639abda38f036d27..4283ef5aa7ef5ca7f57208fcc7fab8b4dd15e604 100644 (file)
@@ -6,16 +6,16 @@ OSM.Directions = function (map) {
   var awaitingRoute;   // true if we've asked the engine for a route and are waiting to hear back
   var chosenEngine;
 
-  var popup = L.popup({autoPanPadding: [100, 100]});
+  var popup = L.popup({ autoPanPadding: [100, 100] });
 
   var polyline = L.polyline([], {
-    color: '#03f',
+    color: "#03f",
     opacity: 0.3,
     weight: 10
   });
 
   var highlight = L.polyline([], {
-    color: '#ff0',
+    color: "#ff0",
     opacity: 0.5,
     weight: 12
   });
@@ -28,6 +28,20 @@ OSM.Directions = function (map) {
   var expiry = new Date();
   expiry.setYear(expiry.getFullYear() + 10);
 
+  var engines = OSM.Directions.engines;
+
+  engines.sort(function (a, b) {
+    a = I18n.t("javascripts.directions.engines." + a.id);
+    b = I18n.t("javascripts.directions.engines." + b.id);
+    return a.localeCompare(b);
+  });
+
+  var select = $("select.routing_engines");
+
+  engines.forEach(function (engine, i) {
+    select.append("<option value='" + i + "'>" + I18n.t("javascripts.directions.engines." + engine.id) + "</option>");
+  });
+
   function Endpoint(input, iconUrl) {
     var endpoint = {};
 
@@ -44,8 +58,8 @@ OSM.Directions = function (map) {
       autoPan: true
     });
 
-    endpoint.marker.on('drag dragend', function (e) {
-      var dragging = (e.type === 'drag');
+    endpoint.marker.on("drag dragend", function (e) {
+      var dragging = (e.type === "drag");
       if (dragging && !chosenEngine.draggable) return;
       if (dragging && awaitingRoute) return;
       endpoint.setLatLng(e.target.getLatLng());
@@ -54,19 +68,19 @@ OSM.Directions = function (map) {
       }
     });
 
-    input.on("keydown", function() {
+    input.on("keydown", function () {
       input.removeClass("error");
     });
 
     input.on("change", function (e) {
       awaitingGeocode = true;
-      
+
       // make text the same in both text boxes
       var value = e.target.value;
       endpoint.setValue(value);
     });
 
-    endpoint.setValue = function(value, latlng) {
+    endpoint.setValue = function (value, latlng) {
       endpoint.value = value;
       delete endpoint.latlng;
       input.removeClass("error");
@@ -79,7 +93,7 @@ OSM.Directions = function (map) {
       }
     };
 
-    endpoint.getGeocode = function() {
+    endpoint.getGeocode = function () {
       // if no one has entered a value yet, then we can't geocode, so don't
       // even try.
       if (!endpoint.value) {
@@ -88,12 +102,12 @@ OSM.Directions = function (map) {
 
       endpoint.awaitingGeocode = true;
 
-      $.getJSON(OSM.NOMINATIM_URL + 'search?q=' + encodeURIComponent(endpoint.value) + '&format=json', function (json) {
+      $.getJSON(OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json", function (json) {
         endpoint.awaitingGeocode = false;
         endpoint.hasGeocode = true;
         if (json.length === 0) {
           input.addClass("error");
-          alert(I18n.t('javascripts.directions.errors.no_place', {place: endpoint.value}));
+          alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
           return;
         }
 
@@ -121,7 +135,7 @@ OSM.Directions = function (map) {
     return endpoint;
   }
 
-  $(".directions_form .reverse_directions").on("click", function() {
+  $(".directions_form .reverse_directions").on("click", function () {
     var from = endpoints[0].latlng,
         to = endpoints[1].latlng;
 
@@ -132,7 +146,7 @@ OSM.Directions = function (map) {
     }));
   });
 
-  $(".directions_form .close").on("click", function(e) {
+  $(".directions_form .close").on("click", function (e) {
     e.preventDefault();
     var route_from = endpoints[0].value;
     if (route_from) {
@@ -156,11 +170,11 @@ OSM.Directions = function (map) {
     var m = Math.round(s / 60);
     var h = Math.floor(m / 60);
     m -= h * 60;
-    return h + ":" + (m < 10 ? '0' : '') + m;
+    return h + ":" + (m < 10 ? "0" : "") + m;
   }
 
   function findEngine(id) {
-    return engines.findIndex(function(engine) {
+    return engines.findIndex(function (engine) {
       return engine.id === id;
     });
   }
@@ -198,14 +212,14 @@ OSM.Directions = function (map) {
 
     OSM.router.replace("/directions?" + querystring.stringify({
       engine: chosenEngine.id,
-      route: o.lat.toFixed(precision) + ',' + o.lng.toFixed(precision) + ';' +
-             d.lat.toFixed(precision) + ',' + d.lng.toFixed(precision)
+      route: o.lat.toFixed(precision) + "," + o.lng.toFixed(precision) + ";" +
+             d.lat.toFixed(precision) + "," + d.lng.toFixed(precision)
     }));
 
     // copy loading item to sidebar and display it. we copy it, rather than
     // just using it in-place and replacing it in case it has to be used
     // again.
-    $('#sidebar_content').html($('.directions_form .loader_copy').html());
+    $("#sidebar_content").html($(".directions_form .loader_copy").html());
     map.setSidebarOverlaid(false);
 
     awaitingRoute = chosenEngine.getRoute([o, d], function (err, route) {
@@ -215,7 +229,7 @@ OSM.Directions = function (map) {
         map.removeLayer(polyline);
 
         if (reportErrors) {
-          $('#sidebar_content').html('<p class="search_results_error">' + I18n.t('javascripts.directions.errors.no_route') + '</p>');
+          $("#sidebar_content").html("<p class=\"search_results_error\">" + I18n.t("javascripts.directions.errors.no_route") + "</p>");
         }
 
         return;
@@ -229,23 +243,22 @@ OSM.Directions = function (map) {
         map.fitBounds(polyline.getBounds().pad(0.05));
       }
 
-      var html = '<h2><a class="geolink" href="#">' +
-        '<span class="icon close"></span></a>' + I18n.t('javascripts.directions.directions') +
-        '</h2><p id="routing_summary">' +
-        I18n.t('javascripts.directions.distance') + ': ' + formatDistance(route.distance) + '. ' +
-        I18n.t('javascripts.directions.time') + ': ' + formatTime(route.time) + '.';
-      if (typeof route.ascend !== 'undefined' && typeof route.descend !== 'undefined') {
-        html += '<br />' +
-          I18n.t('javascripts.directions.ascend') + ': ' + Math.round(route.ascend) + 'm. ' +
-          I18n.t('javascripts.directions.descend') + ': ' + Math.round(route.descend) +'m.';
+      var html = "<h2><a class=\"geolink\" href=\"#\">" +
+        "<span class=\"icon close\"></span></a>" + I18n.t("javascripts.directions.directions") +
+        "</h2><p id=\"routing_summary\">" +
+        I18n.t("javascripts.directions.distance") + ": " + formatDistance(route.distance) + ". " +
+        I18n.t("javascripts.directions.time") + ": " + formatTime(route.time) + ".";
+      if (typeof route.ascend !== "undefined" && typeof route.descend !== "undefined") {
+        html += "<br />" +
+          I18n.t("javascripts.directions.ascend") + ": " + Math.round(route.ascend) + "m. " +
+          I18n.t("javascripts.directions.descend") + ": " + Math.round(route.descend) + "m.";
       }
-      html += '</p><table id="turnbyturn" />';
+      html += "</p><table id=\"turnbyturn\" />";
 
-      $('#sidebar_content')
+      $("#sidebar_content")
         .html(html);
 
       // Add each row
-      var cumulative = 0;
       route.steps.forEach(function (step) {
         var ll        = step[0],
           direction   = step[1],
@@ -253,18 +266,16 @@ OSM.Directions = function (map) {
           dist        = step[3],
           lineseg     = step[4];
 
-        cumulative += dist;
-
         if (dist < 5) {
           dist = "";
         } else if (dist < 200) {
-          dist = Math.round(dist / 10) * 10 + "m";
+          dist = String(Math.round(dist / 10) * 10) + "m";
         } else if (dist < 1500) {
-          dist = Math.round(dist / 100) * 100 + "m";
+          dist = String(Math.round(dist / 100) * 100) + "m";
         } else if (dist < 5000) {
-          dist = Math.round(dist / 100) / 10 + "km";
+          dist = String(Math.round(dist / 100) / 10) + "km";
         } else {
-          dist = Math.round(dist / 1000) + "km";
+          dist = String(Math.round(dist / 1000)) + "km";
         }
 
         var row = $("<tr class='turn'/>");
@@ -272,7 +283,7 @@ OSM.Directions = function (map) {
         row.append("<td class='instruction'>" + instruction);
         row.append("<td class='distance'>" + dist);
 
-        row.on('click', function () {
+        row.on("click", function () {
           popup
             .setLatLng(ll)
             .setContent("<p>" + instruction + "</p>")
@@ -287,61 +298,47 @@ OSM.Directions = function (map) {
           map.removeLayer(highlight);
         });
 
-        $('#turnbyturn').append(row);
+        $("#turnbyturn").append(row);
       });
 
-      $('#sidebar_content').append('<p id="routing_credit">' +
-        I18n.t('javascripts.directions.instructions.courtesy', {link: chosenEngine.creditline}) +
-        '</p>');
+      $("#sidebar_content").append("<p id=\"routing_credit\">" +
+        I18n.t("javascripts.directions.instructions.courtesy", { link: chosenEngine.creditline }) +
+        "</p>");
 
-      $('#sidebar_content a.geolink').on('click', function(e) {
+      $("#sidebar_content a.geolink").on("click", function (e) {
         e.preventDefault();
         map.removeLayer(polyline);
-        $('#sidebar_content').html('');
+        $("#sidebar_content").html("");
         map.setSidebarOverlaid(true);
         // TODO: collapse width of sidebar back to previous
       });
     });
   }
 
-  var engines = OSM.Directions.engines;
-
-  engines.sort(function (a, b) {
-    a = I18n.t('javascripts.directions.engines.' + a.id);
-    b = I18n.t('javascripts.directions.engines.' + b.id);
-    return a.localeCompare(b);
-  });
-
-  var select = $('select.routing_engines');
-
-  engines.forEach(function(engine, i) {
-    select.append("<option value='" + i + "'>" + I18n.t('javascripts.directions.engines.' + engine.id) + "</option>");
-  });
-
-  var chosenEngineIndex = findEngine('fossgis_osrm_car');
-  if ($.cookie('_osm_directions_engine')) {
-    chosenEngineIndex = findEngine($.cookie('_osm_directions_engine'));
+  var chosenEngineIndex = findEngine("fossgis_osrm_car");
+  if ($.cookie("_osm_directions_engine")) {
+    chosenEngineIndex = findEngine($.cookie("_osm_directions_engine"));
   }
   setEngine(chosenEngineIndex);
 
   select.on("change", function (e) {
     chosenEngine = engines[e.target.selectedIndex];
-    $.cookie('_osm_directions_engine', chosenEngine.id, { expires: expiry, path: '/' });
+    $.cookie("_osm_directions_engine", chosenEngine.id, { expires: expiry, path: "/" });
     if (map.hasLayer(polyline)) {
       getRoute(true, true);
     }
   });
 
-  $(".directions_form").on("submit", function(e) {
+  $(".directions_form").on("submit", function (e) {
     e.preventDefault();
     getRoute(true, true);
   });
 
-  $(".routing_marker").on('dragstart', function (e) {
+  $(".routing_marker").on("dragstart", function (e) {
     var dt = e.originalEvent.dataTransfer;
-    dt.effectAllowed = 'move';
-    var dragData = { type: $(this).data('type') };
-    dt.setData('text', JSON.stringify(dragData));
+    dt.effectAllowed = "move";
+    var dragData = { type: $(this).data("type") };
+    dt.setData("text", JSON.stringify(dragData));
     if (dt.setDragImage) {
       var img = $("<img>").attr("src", $(e.originalEvent.target).attr("src"));
       dt.setDragImage(img.get(0), 12, 21);
@@ -350,30 +347,30 @@ OSM.Directions = function (map) {
 
   var page = {};
 
-  page.pushstate = page.popstate = function() {
+  page.pushstate = page.popstate = function () {
     $(".search_form").hide();
     $(".directions_form").show();
 
-    $("#map").on('dragend dragover', function (e) {
+    $("#map").on("dragend dragover", function (e) {
       e.preventDefault();
     });
 
-    $("#map").on('drop', function (e) {
+    $("#map").on("drop", function (e) {
       e.preventDefault();
       var oe = e.originalEvent;
-      var dragData = JSON.parse(oe.dataTransfer.getData('text'));
+      var dragData = JSON.parse(oe.dataTransfer.getData("text"));
       var type = dragData.type;
       var pt = L.DomEvent.getMousePosition(oe, map.getContainer());  // co-ordinates of the mouse pointer at present
       pt.y += 20;
       var ll = map.containerPointToLatLng(pt);
-      endpoints[type === 'from' ? 0 : 1].setLatLng(ll);
+      endpoints[type === "from" ? 0 : 1].setLatLng(ll);
       getRoute(true, true);
     });
 
     var params = querystring.parse(location.search.substring(1)),
-        route = (params.route || '').split(';'),
-        from = route[0] && L.latLng(route[0].split(',')),
-        to = route[1] && L.latLng(route[1].split(','));
+        route = (params.route || "").split(";"),
+        from = route[0] && L.latLng(route[0].split(",")),
+        to = route[1] && L.latLng(route[1].split(","));
 
     if (params.engine) {
       var engineIndex = findEngine(params.engine);
@@ -391,14 +388,14 @@ OSM.Directions = function (map) {
     getRoute(true, true);
   };
 
-  page.load = function() {
+  page.load = function () {
     page.pushstate();
   };
 
-  page.unload = function() {
+  page.unload = function () {
     $(".search_form").show();
     $(".directions_form").hide();
-    $("#map").off('dragend dragover drop');
+    $("#map").off("dragend dragover drop");
 
     map
       .removeLayer(popup)
index a1a7624acb4a574f6c2e75e017af4f71aa3608e3..8e5e8e621d6d8b194e9ecc7f254c43287cb077ab 100644 (file)
@@ -6,89 +6,89 @@ function FOSSGISEngine(id, vehicleType) {
 
   return {
     id: id,
-    creditline: '<a href="https://routing.openstreetmap.de/about.html" target="_blank">FOSSGIS Routing Service</a>',
+    creditline: "<a href=\"https://routing.openstreetmap.de/about.html\" target=\"_blank\">FOSSGIS Routing Service</a>",
     draggable: true,
 
-    _transformSteps: function(input_steps, line) {
+    _transformSteps: function (input_steps, line) {
       var INSTRUCTION_TEMPLATE = {
-        'continue': 'javascripts.directions.instructions.continue',
-        'merge right': 'javascripts.directions.instructions.merge_right',
-        'merge left': 'javascripts.directions.instructions.merge_left',
-        'off ramp right': 'javascripts.directions.instructions.offramp_right',
-        'off ramp left': 'javascripts.directions.instructions.offramp_left',
-        'on ramp right': 'javascripts.directions.instructions.onramp_right',
-        'on ramp left': 'javascripts.directions.instructions.onramp_left',
-        'fork right': 'javascripts.directions.instructions.fork_right',
-        'fork left': 'javascripts.directions.instructions.fork_left',
-        'end of road right': 'javascripts.directions.instructions.endofroad_right',
-        'end of road left': 'javascripts.directions.instructions.endofroad_left',
-        'turn straight': 'javascripts.directions.instructions.continue',
-        'turn slight right': 'javascripts.directions.instructions.slight_right',
-        'turn right': 'javascripts.directions.instructions.turn_right',
-        'turn sharp right': 'javascripts.directions.instructions.sharp_right',
-        'turn uturn': 'javascripts.directions.instructions.uturn',
-        'turn sharp left': 'javascripts.directions.instructions.sharp_left',
-        'turn left': 'javascripts.directions.instructions.turn_left',
-        'turn slight left': 'javascripts.directions.instructions.slight_left',
-        'roundabout': 'javascripts.directions.instructions.roundabout',
-        'rotary': 'javascripts.directions.instructions.roundabout',
-        'exit roundabout': 'javascripts.directions.instructions.exit_roundabout',
-        'exit rotary': 'javascripts.directions.instructions.exit_roundabout',
-        'depart': 'javascripts.directions.instructions.start',
-        'arrive': 'javascripts.directions.instructions.destination',
+        "continue": "javascripts.directions.instructions.continue",
+        "merge right": "javascripts.directions.instructions.merge_right",
+        "merge left": "javascripts.directions.instructions.merge_left",
+        "off ramp right": "javascripts.directions.instructions.offramp_right",
+        "off ramp left": "javascripts.directions.instructions.offramp_left",
+        "on ramp right": "javascripts.directions.instructions.onramp_right",
+        "on ramp left": "javascripts.directions.instructions.onramp_left",
+        "fork right": "javascripts.directions.instructions.fork_right",
+        "fork left": "javascripts.directions.instructions.fork_left",
+        "end of road right": "javascripts.directions.instructions.endofroad_right",
+        "end of road left": "javascripts.directions.instructions.endofroad_left",
+        "turn straight": "javascripts.directions.instructions.continue",
+        "turn slight right": "javascripts.directions.instructions.slight_right",
+        "turn right": "javascripts.directions.instructions.turn_right",
+        "turn sharp right": "javascripts.directions.instructions.sharp_right",
+        "turn uturn": "javascripts.directions.instructions.uturn",
+        "turn sharp left": "javascripts.directions.instructions.sharp_left",
+        "turn left": "javascripts.directions.instructions.turn_left",
+        "turn slight left": "javascripts.directions.instructions.slight_left",
+        "roundabout": "javascripts.directions.instructions.roundabout",
+        "rotary": "javascripts.directions.instructions.roundabout",
+        "exit roundabout": "javascripts.directions.instructions.exit_roundabout",
+        "exit rotary": "javascripts.directions.instructions.exit_roundabout",
+        "depart": "javascripts.directions.instructions.start",
+        "arrive": "javascripts.directions.instructions.destination"
       };
       var ICON_MAP = {
-        'continue': 0,
-        'merge right': 21,
-        'merge left': 20,
-        'off ramp right': 24,
-        'off ramp left': 25,
-        'on ramp right': 2,
-        'on ramp left': 6,
-        'fork right': 18,
-        'fork left': 19,
-        'end of road right': 22,
-        'end of road left': 23,
-        'turn straight': 0,
-        'turn slight right': 1,
-        'turn right': 2,
-        'turn sharp right': 3,
-        'turn uturn': 4,
-        'turn slight left': 5,
-        'turn left': 6,
-        'turn sharp left': 7,
-        'roundabout': 10,
-        'rotary': 10,
-        'exit roundabout': 10,
-        'exit rotary': 10,
-        'depart': 8,
-        'arrive': 14
+        "continue": 0,
+        "merge right": 21,
+        "merge left": 20,
+        "off ramp right": 24,
+        "off ramp left": 25,
+        "on ramp right": 2,
+        "on ramp left": 6,
+        "fork right": 18,
+        "fork left": 19,
+        "end of road right": 22,
+        "end of road left": 23,
+        "turn straight": 0,
+        "turn slight right": 1,
+        "turn right": 2,
+        "turn sharp right": 3,
+        "turn uturn": 4,
+        "turn slight left": 5,
+        "turn left": 6,
+        "turn sharp left": 7,
+        "roundabout": 10,
+        "rotary": 10,
+        "exit roundabout": 10,
+        "exit rotary": 10,
+        "depart": 8,
+        "arrive": 14
       };
-      var numToWord = function(num) {
-        return ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"][num-1];
+      var numToWord = function (num) {
+        return ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"][num - 1];
       };
-      var transformed_steps = input_steps.map(function(step, idx) {
+      var transformed_steps = input_steps.map(function (step, idx) {
         var maneuver_id;
 
         // special case handling
         switch (step.maneuver.type) {
-          case 'on ramp':
-          case 'off ramp':
-          case 'merge':
-          case 'end of road':
-          case 'fork':
-            maneuver_id = step.maneuver.type + ' ' + (step.maneuver.modifier.indexOf('left') >= 0 ? 'left' : 'right');
+          case "on ramp":
+          case "off ramp":
+          case "merge":
+          case "end of road":
+          case "fork":
+            maneuver_id = step.maneuver.type + " " + (step.maneuver.modifier.indexOf("left") >= 0 ? "left" : "right");
             break;
-          case 'depart':
-          case 'arrive':
-          case 'roundabout':
-          case 'rotary':
-          case 'exit roundabout':
-          case 'exit rotary':
+          case "depart":
+          case "arrive":
+          case "roundabout":
+          case "rotary":
+          case "exit roundabout":
+          case "exit rotary":
             maneuver_id = step.maneuver.type;
             break;
-          case 'roundabout turn':
-          case 'turn':
+          case "roundabout turn":
+          case "turn":
             maneuver_id = "turn " + step.maneuver.modifier;
             break;
           // for unknown types the fallback is turn
@@ -99,7 +99,7 @@ function FOSSGISEngine(id, vehicleType) {
         var template = INSTRUCTION_TEMPLATE[maneuver_id];
 
         // convert lat,lng pairs to LatLng objects
-        var step_geometry = L.PolylineUtil.decode(step.geometry, { precision: 5 }).map(function(a) { return L.latLng(a); }) ;
+        var step_geometry = L.PolylineUtil.decode(step.geometry, { precision: 5 }).map(function (a) { return L.latLng(a); });
         // append step_geometry on line
         Array.prototype.push.apply(line, step_geometry);
 
@@ -115,7 +115,7 @@ function FOSSGISEngine(id, vehicleType) {
         } else if (step.ref) {
           name = "<b>" + step.ref + "</b>";
         } else {
-          name = I18n.t('javascripts.directions.instructions.unnamed');
+          name = I18n.t("javascripts.directions.instructions.unnamed");
           namedRoad = false;
         }
 
@@ -124,12 +124,12 @@ function FOSSGISEngine(id, vehicleType) {
         } else if (step.maneuver.type.match(/^(rotary|roundabout)$/)) {
           if (step.maneuver.exit) {
             if (step.maneuver.exit <= 10) {
-              instText += I18n.t(template + '_with_exit_ordinal', { exit: I18n.t('javascripts.directions.instructions.exit_counts.' + numToWord(step.maneuver.exit)), name: name });
+              instText += I18n.t(template + "_with_exit_ordinal", { exit: I18n.t("javascripts.directions.instructions.exit_counts." + numToWord(step.maneuver.exit)), name: name });
             } else {
-              instText += I18n.t(template + '_with_exit', { exit: step.maneuver.exit, name: name });
+              instText += I18n.t(template + "_with_exit", { exit: step.maneuver.exit, name: name });
             }
           } else {
-            instText += I18n.t(template + '_without_exit', { name: name });
+            instText += I18n.t(template + "_without_exit", { name: name });
           }
         } else if (step.maneuver.type.match(/^(on ramp|off ramp)$/)) {
           var params = {};
@@ -141,7 +141,7 @@ function FOSSGISEngine(id, vehicleType) {
           }
           instText += I18n.t(template, params);
         } else {
-          instText += I18n.t(template + '_without_exit', { name: name });
+          instText += I18n.t(template + "_without_exit", { name: name });
         }
         return [[step.maneuver.location[1], step.maneuver.location[0]], ICON_MAP[maneuver_id], instText, step.distance, step_geometry];
       });
@@ -150,7 +150,6 @@ function FOSSGISEngine(id, vehicleType) {
     },
 
     getRoute: function (points, callback) {
-
       var params = [
         { name: "overview", value: "false" },
         { name: "geometries", value: "polyline" },
@@ -159,23 +158,24 @@ function FOSSGISEngine(id, vehicleType) {
 
 
       if (cachedHints.length === points.length) {
-        params.push({name: "hints", value: cachedHints.join(";")});
+        params.push({ name: "hints", value: cachedHints.join(";") });
       } else {
         // invalidate cache
         cachedHints = [];
       }
 
-      var encoded_coords = points.map(function(p) {
-        return p.lng + ',' + p.lat;
-      }).join(';');
+      var encoded_coords = points.map(function (p) {
+        return p.lng + "," + p.lat;
+      }).join(";");
 
       var req_url = OSM.FOSSGIS_OSRM_URL + "routed-" + vehicleType + "/route/v1/driving/" + encoded_coords;
 
       var onResponse = function (data) {
-        if (data.code !== 'Ok')
+        if (data.code !== "Ok") {
           return callback(true);
+        }
 
-        cachedHints = data.waypoints.map(function(wp) {
+        cachedHints = data.waypoints.map(function (wp) {
           return wp.hint;
         });
 
index ce568409d5052628aa8532b148ab56354ca88849..6bd430c06021612ccb086a8b58b6c14f97a9d6af 100644 (file)
@@ -3,18 +3,18 @@ function GraphHopperEngine(id, vehicleType) {
     "-3": 7, // sharp left
     "-2": 6, // left
     "-1": 5, // slight left
-    0: 0, // straight
-    1: 1, // slight right
-    2: 2, // right
-    3: 3, // sharp right
-    4: 14, // finish reached
-    5: 14, // via reached
-    6: 10 // roundabout
+    "0": 0, // straight
+    "1": 1, // slight right
+    "2": 2, // right
+    "3": 3, // sharp right
+    "4": 14, // finish reached
+    "5": 14, // via reached
+    "6": 10 // roundabout
   };
 
   return {
     id: id,
-    creditline: '<a href="https://www.graphhopper.com/" target="_blank">Graphhopper</a>',
+    creditline: "<a href=\"https://www.graphhopper.com/\" target=\"_blank\">Graphhopper</a>",
     draggable: false,
 
     getRoute: function (points, callback) {
@@ -23,19 +23,20 @@ function GraphHopperEngine(id, vehicleType) {
       return $.ajax({
         url: OSM.GRAPHHOPPER_URL,
         data: {
-          vehicle: vehicleType,
-          locale: I18n.currentLocale(),
-          key: "LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn",
+          "vehicle": vehicleType,
+          "locale": I18n.currentLocale(),
+          "key": "LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn",
           "ch.disable": vehicleType === "car",
-          elevation: false,
-          instructions: true,
-          point: points.map(function (p) { return p.lat + "," + p.lng; })
+          "elevation": false,
+          "instructions": true,
+          "point": points.map(function (p) { return p.lat + "," + p.lng; })
         },
         traditional: true,
         dataType: "json",
         success: function (data) {
-          if (!data.paths || data.paths.length === 0)
+          if (!data.paths || data.paths.length === 0) {
             return callback(true);
+          }
 
           var path = data.paths[0];
           var line = L.PolylineUtil.decode(path.points);
@@ -51,10 +52,10 @@ function GraphHopperEngine(id, vehicleType) {
             var distInMeter = instr.distance;
             var lineseg = [];
             for (var j = instr.interval[0]; j <= instr.interval[1]; j++) {
-              lineseg.push({lat: line[j][0], lng: line[j][1]});
+              lineseg.push({ lat: line[j][0], lng: line[j][1] });
             }
             steps.push([
-              {lat: latLng[0], lng: latLng[1]},
+              { lat: latLng[0], lng: latLng[1] },
               instrCode,
               instrText,
               distInMeter,
index 48e950b2137870f88e4aac912781cf3b94d17a70..67530370dc525cd9ca026545e2a31e121f56ba3f 100644 (file)
@@ -1,4 +1,4 @@
-OSM.Export = function(map) {
+OSM.Export = function (map) {
   var page = {};
 
   var locationFilter = new L.LocationFilter({
@@ -57,12 +57,12 @@ OSM.Export = function(map) {
     if (getBounds().getSize() > OSM.MAX_REQUEST_AREA) e.preventDefault();
   }
 
-  page.pushstate = page.popstate = function(path) {
+  page.pushstate = page.popstate = function (path) {
     $("#export_tab").addClass("current");
     OSM.loadSidebarContent(path, page.load);
   };
 
-  page.load = function() {
+  page.load = function () {
     map
       .addLayer(locationFilter)
       .on("moveend", update);
@@ -75,7 +75,7 @@ OSM.Export = function(map) {
     return map.getState();
   };
 
-  page.unload = function() {
+  page.unload = function () {
     map
       .removeLayer(locationFilter)
       .off("moveend", update);
index 38d0b249ac23cecfd89363207785035f7dd30043..a0c68e84017b5a9bc5e95aa70658457530e5dc84 100644 (file)
@@ -1,6 +1,6 @@
 //= require jquery.simulate
 
-OSM.History = function(map) {
+OSM.History = function (map) {
   var page = {};
 
   $("#sidebar_content")
@@ -13,13 +13,15 @@ OSM.History = function(map) {
     })
     .on("mousedown", "[data-changeset]", function () {
       var moved = false;
-      $(this).one("click", function (e) {
-        if (!moved && !$(e.target).is('a')) {
-          clickChangeset($(this).data("changeset").id, e);
-        }
-      }).one("mousemove", function () {
-        moved = true;
-      });
+      $(this)
+        .one("click", function (e) {
+          if (!moved && !$(e.target).is("a")) {
+            clickChangeset($(this).data("changeset").id, e);
+          }
+        })
+        .one("mousemove", function () {
+          moved = true;
+        });
     });
 
   var group = L.featureGroup()
@@ -33,17 +35,17 @@ OSM.History = function(map) {
       clickChangeset(e.layer.id, e);
     });
 
-  group.getLayerId = function(layer) {
+  group.getLayerId = function (layer) {
     return layer.id;
   };
 
   function highlightChangeset(id) {
-    group.getLayer(id).setStyle({fillOpacity: 0.3, color: "#FF6600", weight: 3});
+    group.getLayer(id).setStyle({ fillOpacity: 0.3, color: "#FF6600", weight: 3 });
     $("#changeset_" + id).addClass("selected");
   }
 
   function unHighlightChangeset(id) {
-    group.getLayer(id).setStyle({fillOpacity: 0, color: "#FF9500", weight: 2});
+    group.getLayer(id).setStyle({ fillOpacity: 0, color: "#FF9500", weight: 2 });
     $("#changeset_" + id).removeClass("selected");
   }
 
@@ -52,9 +54,9 @@ OSM.History = function(map) {
   }
 
   function update() {
-    var data = {list: '1'};
+    var data = { list: "1" };
 
-    if (window.location.pathname === '/history') {
+    if (window.location.pathname === "/history") {
       data.bbox = map.getBounds().wrap().toBBoxString();
     }
 
@@ -62,16 +64,16 @@ OSM.History = function(map) {
       url: window.location.pathname,
       method: "GET",
       data: data,
-      success: function(html) {
-        $('#sidebar_content .changesets').html(html);
+      success: function (html) {
+        $("#sidebar_content .changesets").html(html);
         updateMap();
       }
     });
 
-    var feedLink = $('link[type="application/atom+xml"]'),
-      feedHref = feedLink.attr('href').split('?')[0];
+    var feedLink = $("link[type=\"application/atom+xml\"]"),
+      feedHref = feedLink.attr("href").split("?")[0];
 
-    feedLink.attr('href', feedHref + '?bbox=' + data.bbox);
+    feedLink.attr("href", feedHref + "?bbox=" + data.bbox);
   }
 
   function loadMore(e) {
@@ -83,7 +85,7 @@ OSM.History = function(map) {
     $(this).hide();
     div.find(".loader").show();
 
-    $.get($(this).attr("href"), function(data) {
+    $.get($(this).attr("href"), function (data) {
       div.replaceWith(data);
       updateMap();
     });
@@ -94,7 +96,7 @@ OSM.History = function(map) {
   function updateBounds() {
     group.clearLayers();
 
-    changesets.forEach(function(changeset) {
+    changesets.forEach(function (changeset) {
       var bottomLeft = map.project(L.latLng(changeset.bbox.minlat, changeset.bbox.minlon)),
           topRight = map.project(L.latLng(changeset.bbox.maxlat, changeset.bbox.maxlon)),
           width = topRight.x - bottomLeft.x,
@@ -122,36 +124,36 @@ OSM.History = function(map) {
     for (var i = 0; i < changesets.length; ++i) {
       var changeset = changesets[i],
         rect = L.rectangle(changeset.bounds,
-          {weight: 2, color: "#FF9500", opacity: 1, fillColor: "#FFFFAF", fillOpacity: 0});
+          { weight: 2, color: "#FF9500", opacity: 1, fillColor: "#FFFFAF", fillOpacity: 0 });
       rect.id = changeset.id;
       rect.addTo(group);
     }
   }
 
   function updateMap() {
-    changesets = $("[data-changeset]").map(function (index,element) {
-      return $(element).data('changeset');
+    changesets = $("[data-changeset]").map(function (index, element) {
+      return $(element).data("changeset");
     }).get().filter(function (changeset) {
       return changeset.bbox;
     });
 
     updateBounds();
 
-    if (window.location.pathname !== '/history') {
+    if (window.location.pathname !== "/history") {
       var bounds = group.getBounds();
       if (bounds.isValid()) map.fitBounds(bounds);
     }
   }
 
-  page.pushstate = page.popstate = function(path) {
+  page.pushstate = page.popstate = function (path) {
     $("#history_tab").addClass("current");
     OSM.loadSidebarContent(path, page.load);
   };
 
-  page.load = function() {
+  page.load = function () {
     map.addLayer(group);
 
-    if (window.location.pathname === '/history') {
+    if (window.location.pathname === "/history") {
       map.on("moveend", update);
     }
 
@@ -160,7 +162,7 @@ OSM.History = function(map) {
     update();
   };
 
-  page.unload = function() {
+  page.unload = function () {
     map.removeLayer(group);
     map.off("moveend", update);
 
index fa2872f456b572a515a17498bc2d2db30d7f0eb0..7196a779bf5ef2d1020c1e51c41d6c8c5f9a211d 100644 (file)
@@ -1,6 +1,6 @@
-OSM.NewNote = function(map) {
+OSM.NewNote = function (map) {
   var noteLayer = map.noteLayer,
-    content = $('#sidebar_content'),
+    content = $("#sidebar_content"),
     page = {},
     addNoteButton = $(".control-note .control-button"),
     newNote,
@@ -28,9 +28,9 @@ OSM.NewNote = function(map) {
     e.preventDefault();
     e.stopPropagation();
 
-    if ($(this).hasClass('disabled')) return;
+    if ($(this).hasClass("disabled")) return;
 
-    OSM.router.route('/note/new');
+    OSM.router.route("/note/new");
   });
 
   function createNote(marker, form, url) {
@@ -61,7 +61,7 @@ OSM.NewNote = function(map) {
       newNote = null;
       noteLayer.removeLayer(marker);
       addNoteButton.removeClass("active");
-      OSM.router.route('/note/' + feature.properties.id);
+      OSM.router.route("/note/" + feature.properties.id);
     }
   }
 
@@ -83,7 +83,7 @@ OSM.NewNote = function(map) {
   };
 
   function newHalo(loc, a) {
-    if (a === 'dragstart' && map.hasLayer(halo)) {
+    if (a === "dragstart" && map.hasLayer(halo)) {
       map.removeLayer(halo);
     } else {
       if (map.hasLayer(halo)) map.removeLayer(halo);
@@ -107,7 +107,7 @@ OSM.NewNote = function(map) {
 
     map.addLayer(noteLayer);
 
-    var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+    var params = querystring.parse(path.substring(path.indexOf("?") + 1));
     var markerLatlng;
 
     if (params.lat && params.lon) {
@@ -121,12 +121,12 @@ OSM.NewNote = function(map) {
     });
 
     newNote = L.marker(markerLatlng, {
-      icon: noteIcons["new"],
+      icon: noteIcons.new,
       opacity: 0.9,
       draggable: true
     });
 
-    newNote.on("dragstart dragend", function(a) {
+    newNote.on("dragstart dragend", function (a) {
       newHalo(newNote.getLatLng(), a.type);
     });
 
@@ -135,7 +135,7 @@ OSM.NewNote = function(map) {
 
     newNote.on("remove", function () {
       addNoteButton.removeClass("active");
-    }).on("dragstart",function () {
+    }).on("dragstart", function () {
       $(newNote).stopTime("removenote");
     }).on("dragend", function () {
       content.find("textarea").focus();
@@ -149,9 +149,9 @@ OSM.NewNote = function(map) {
       $(e.target.form.add).prop("disabled", $(e.target).val() === "");
     }
 
-    content.find('input[type=submit]').on('click', function (e) {
+    content.find("input[type=submit]").on("click", function (e) {
       e.preventDefault();
-      createNote(newNote, e.target.form, '/api/0.6/notes.json');
+      createNote(newNote, e.target.form, "/api/0.6/notes.json");
     });
 
     return map.getState();
index 3973420bdd3d3536682aa0b87b6720c65b7e9874..52bb1c90958c0aefcdcf87caab6e5d2019cf7664 100644 (file)
@@ -1,5 +1,5 @@
 OSM.Note = function (map) {
-  var content = $('#sidebar_content'),
+  var content = $("#sidebar_content"),
     page = {},
     halo, currentNote;
 
@@ -28,7 +28,7 @@ OSM.Note = function (map) {
       url: url,
       type: method,
       oauth: true,
-      data: {text: $(form.text).val()},
+      data: { text: $(form.text).val() },
       success: function () {
         OSM.loadSidebarContent(window.location.pathname, page.load);
       }
@@ -36,16 +36,16 @@ OSM.Note = function (map) {
   }
 
   page.pushstate = page.popstate = function (path) {
-    OSM.loadSidebarContent(path, function() {
-      initialize(function() {
-        var data = $('.details').data(),
-          latLng = L.latLng(data.coordinates.split(','));
-        if (!map.getBounds().contains(latLng)) moveToNote();        
+    OSM.loadSidebarContent(path, function () {
+      initialize(function () {
+        var data = $(".details").data(),
+          latLng = L.latLng(data.coordinates.split(","));
+        if (!map.getBounds().contains(latLng)) moveToNote();
       });
     });
   };
 
-  page.load = function() {
+  page.load = function () {
     initialize(moveToNote);
   };
 
@@ -68,10 +68,10 @@ OSM.Note = function (map) {
       }
     });
 
-    content.find("textarea").val('').trigger("input");
+    content.find("textarea").val("").trigger("input");
 
-    var data = $('.details').data(),
-      latLng = L.latLng(data.coordinates.split(','));
+    var data = $(".details").data(),
+      latLng = L.latLng(data.coordinates.split(","));
 
     if (!map.hasLayer(halo)) {
       halo = L.circleMarker(latLng, {
@@ -96,12 +96,12 @@ OSM.Note = function (map) {
   }
 
   function moveToNote() {
-    var data = $('.details').data(),
-      latLng = L.latLng(data.coordinates.split(','));
+    var data = $(".details").data(),
+      latLng = L.latLng(data.coordinates.split(","));
 
     if (!window.location.hash || window.location.hash.match(/^#?c[0-9]+$/)) {
       OSM.router.withoutMoveListener(function () {
-        map.setView(latLng, 15, {reset: true});
+        map.setView(latLng, 15, { reset: true });
       });
     }
   }
index 9feee888c1daca1820ad5cb3baee03b6f30c27e8..4890a2687d1a86a69811ad46d54a1a870227c1a4 100644 (file)
@@ -33,9 +33,9 @@ OSM.initializeNotes = function (map) {
     }
   });
 
-  noteLayer.on('click', function(e) {
+  noteLayer.on("click", function (e) {
     if (e.layer.id) {
-      OSM.router.route('/note/' + e.layer.id);
+      OSM.router.route("/note/" + e.layer.id);
     }
   });
 
@@ -55,7 +55,7 @@ OSM.initializeNotes = function (map) {
     return marker;
   }
 
-  noteLayer.getLayerId = function(marker) {
+  noteLayer.getLayerId = function (marker) {
     return marker.id;
   };
 
index 3da84c7d90e46b214575cf44212070bcbe4217c2..6869e19f63835f44366e1a68d6ba4a18487b2d7a 100644 (file)
@@ -1,9 +1,9 @@
 //= require jquery.simulate
 
-OSM.Query = function(map) {
+OSM.Query = function (map) {
   var url = OSM.OVERPASS_URL,
     queryButton = $(".control-query .control-button"),
-    uninterestingTags = ['source', 'source_ref', 'source:ref', 'history', 'attribution', 'created_by', 'tiger:county', 'tiger:tlid', 'tiger:upload_uuid', 'KSJ2:curve_id', 'KSJ2:lat', 'KSJ2:lon', 'KSJ2:coordinate', 'KSJ2:filename', 'note:ja'],
+    uninterestingTags = ["source", "source_ref", "source:ref", "history", "attribution", "created_by", "tiger:county", "tiger:tlid", "tiger:upload_uuid", "KSJ2:curve_id", "KSJ2:lat", "KSJ2:lon", "KSJ2:coordinate", "KSJ2:filename", "note:ja"],
     marker;
 
   var featureStyle = {
@@ -55,7 +55,7 @@ OSM.Query = function(map) {
           var geometry = $(this).data("geometry");
           if (geometry) map.removeLayer(geometry);
 
-          if (!$(e.target).is('a')) {
+          if (!$(e.target).is("a")) {
             $(this).find("a").simulate("click", e);
           }
         }
@@ -178,9 +178,9 @@ OSM.Query = function(map) {
       url: url,
       method: "POST",
       data: {
-        data: "[timeout:10][out:json];" + query,
+        data: "[timeout:10][out:json];" + query
       },
-      success: function(results) {
+      success: function (results) {
         var elements;
 
         $section.find(".loader").stopTime("loading").hide();
@@ -237,7 +237,7 @@ OSM.Query = function(map) {
             .appendTo($ul);
         }
       },
-      error: function(xhr, status, error) {
+      error: function (xhr, status, error) {
         $section.find(".loader").stopTime("loading").hide();
 
         $("<li>")
@@ -301,8 +301,8 @@ OSM.Query = function(map) {
         map.removeLayer(marker);
       } else {
         marker.setStyle({
-          opacity: 1 - i * 0.1,
-          fillOpacity: 0.5 - i * 0.05
+          opacity: 1 - (i * 0.1),
+          fillOpacity: 0.5 - (i * 0.05)
         });
       }
     }, 10);
@@ -335,14 +335,14 @@ OSM.Query = function(map) {
 
   var page = {};
 
-  page.pushstate = page.popstate = function(path) {
+  page.pushstate = page.popstate = function (path) {
     OSM.loadSidebarContent(path, function () {
       page.load(path, true);
     });
   };
 
-  page.load = function(path, noCentre) {
-    var params = querystring.parse(path.substring(path.indexOf('?') + 1)),
+  page.load = function (path, noCentre) {
+    var params = querystring.parse(path.substring(path.indexOf("?") + 1)),
       latlng = L.latLng(params.lat, params.lon);
 
     if (!window.location.hash && !noCentre && !map.getBounds().contains(latlng)) {
@@ -354,7 +354,7 @@ OSM.Query = function(map) {
     queryOverpass(params.lat, params.lon);
   };
 
-  page.unload = function(sameController) {
+  page.unload = function (sameController) {
     if (!sameController) {
       disableQueryMode();
     }
index ea6140e582db78dea993eccdbde6eb1659124bb9..fa9546f4e27fee974c202a10f20e2588e5d48ebc 100644 (file)
@@ -1,7 +1,7 @@
 //= require jquery.simulate
 
-OSM.Search = function(map) {
-  $(".search_form input[name=query]").on("input", function(e) {
+OSM.Search = function (map) {
+  $(".search_form input[name=query]").on("input", function (e) {
     if ($(e.target).val() === "") {
       $(".describe_location").fadeIn(100);
     } else {
@@ -9,7 +9,7 @@ OSM.Search = function(map) {
     }
   });
 
-  $(".search_form a.button.switch_link").on("click", function(e) {
+  $(".search_form a.button.switch_link").on("click", function (e) {
     e.preventDefault();
     var query = $(e.target).parent().parent().find("input[name=query]").val();
     if (query) {
@@ -19,7 +19,7 @@ OSM.Search = function(map) {
     }
   });
 
-  $(".search_form").on("submit", function(e) {
+  $(".search_form").on("submit", function (e) {
     e.preventDefault();
     $("header").addClass("closed");
     var query = $(this).find("input[name=query]").val();
@@ -30,7 +30,7 @@ OSM.Search = function(map) {
     }
   });
 
-  $(".describe_location").on("click", function(e) {
+  $(".describe_location").on("click", function (e) {
     e.preventDefault();
     var center = map.getCenter().wrap(),
       precision = OSM.zoomPrecision(map.getZoom());
@@ -47,7 +47,7 @@ OSM.Search = function(map) {
     .on("mousedown", "p.search_results_entry:has(a.set_position)", function () {
       var moved = false;
       $(this).one("click", function (e) {
-        if (!moved && !$(e.target).is('a')) {
+        if (!moved && !$(e.target).is("a")) {
           $(this).find("a.set_position").simulate("click", e);
         }
       }).one("mousemove", function () {
@@ -55,6 +55,8 @@ OSM.Search = function(map) {
       });
     });
 
+  var markers = L.layerGroup().addTo(map);
+
   function clickSearchMore(e) {
     e.preventDefault();
     e.stopPropagation();
@@ -64,7 +66,7 @@ OSM.Search = function(map) {
     $(this).hide();
     div.find(".loader").show();
 
-    $.get($(this).attr("href"), function(data) {
+    $.get($(this).attr("href"), function (data) {
       div.replaceWith(data);
     });
   }
@@ -75,7 +77,7 @@ OSM.Search = function(map) {
     if (!marker) {
       var data = $(this).find("a.set_position").data();
 
-      marker = L.marker([data.lat, data.lon], {icon: OSM.getUserIcon()});
+      marker = L.marker([data.lat, data.lon], { icon: OSM.getUserIcon() });
 
       $(this).data("marker", marker);
     }
@@ -115,23 +117,21 @@ OSM.Search = function(map) {
     e.stopPropagation();
   }
 
-  var markers = L.layerGroup().addTo(map);
-
   var page = {};
 
-  page.pushstate = page.popstate = function(path) {
-    var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+  page.pushstate = page.popstate = function (path) {
+    var params = querystring.parse(path.substring(path.indexOf("?") + 1));
     $(".search_form input[name=query]").val(params.query);
     $(".describe_location").hide();
     OSM.loadSidebarContent(path, page.load);
   };
 
-  page.load = function() {
-    $(".search_results_entry").each(function(index) {
+  page.load = function () {
+    $(".search_results_entry").each(function (index) {
       var entry = $(this);
       $.ajax({
         url: entry.data("href"),
-        method: 'GET',
+        method: "GET",
         data: {
           zoom: map.getZoom(),
           minlon: map.getBounds().getWest(),
@@ -139,11 +139,11 @@ OSM.Search = function(map) {
           maxlon: map.getBounds().getEast(),
           maxlat: map.getBounds().getNorth()
         },
-        success: function(html) {
+        success: function (html) {
           entry.html(html);
           // go to first result of first geocoder
           if (index === 0) {
-            var firstResult = entry.find('*[data-lat][data-lon]:first').first();
+            var firstResult = entry.find("*[data-lat][data-lon]:first").first();
             if (firstResult.length) {
               panToSearchResult(firstResult.data());
             }
@@ -155,7 +155,7 @@ OSM.Search = function(map) {
     return map.getState();
   };
 
-  page.unload = function() {
+  page.unload = function () {
     markers.clearLayers();
     $(".search_form input[name=query]").val("");
     $(".describe_location").fadeIn(100);
index 5223b1420523fd58770177ea66dca42946483d17..321f937db3fc74b94013be51a69a2f28388e6ea7 100644 (file)
@@ -2,78 +2,78 @@ L.OSM.key = function (options) {
   var control = L.control(options);
 
   control.onAdd = function (map) {
-    var $container = $('<div>')
-      .attr('class', 'control-key');
-
-    var button = $('<a>')
-      .attr('class', 'control-button')
-      .attr('href', '#')
-      .html('<span class="icon key"></span>')
-      .on('click', toggle)
+    var $container = $("<div>")
+      .attr("class", "control-key");
+
+    var button = $("<a>")
+      .attr("class", "control-button")
+      .attr("href", "#")
+      .html("<span class=\"icon key\"></span>")
+      .on("click", toggle)
       .appendTo($container);
 
-    var $ui = $('<div>')
-      .attr('class', 'key-ui');
+    var $ui = $("<div>")
+      .attr("class", "key-ui");
 
-    $('<div>')
-      .attr('class', 'sidebar_heading')
+    $("<div>")
+      .attr("class", "sidebar_heading")
       .appendTo($ui)
       .append(
-        $('<span>')
-          .text(I18n.t('javascripts.close'))
-          .attr('class', 'icon close')
-          .bind('click', toggle))
+        $("<span>")
+          .text(I18n.t("javascripts.close"))
+          .attr("class", "icon close")
+          .bind("click", toggle))
       .append(
-        $('<h4>')
-          .text(I18n.t('javascripts.key.title')));
+        $("<h4>")
+          .text(I18n.t("javascripts.key.title")));
 
-    var $section = $('<div>')
-      .attr('class', 'section')
+    var $section = $("<div>")
+      .attr("class", "section")
       .appendTo($ui);
 
     options.sidebar.addPane($ui);
 
     $ui
-      .on('show', shown)
-      .on('hide', hidden);
+      .on("show", shown)
+      .on("hide", hidden);
 
-    map.on('baselayerchange', updateButton);
+    map.on("baselayerchange", updateButton);
 
     updateButton();
 
     function shown() {
-      map.on('zoomend baselayerchange', update);
-      $section.load('/key', update);
+      map.on("zoomend baselayerchange", update);
+      $section.load("/key", update);
     }
 
     function hidden() {
-      map.off('zoomend baselayerchange', update);
+      map.off("zoomend baselayerchange", update);
     }
 
     function toggle(e) {
       e.stopPropagation();
       e.preventDefault();
-      if (!button.hasClass('disabled')) {
+      if (!button.hasClass("disabled")) {
         options.sidebar.togglePane($ui, button);
       }
-      $('.leaflet-control .control-button').tooltip('hide');
+      $(".leaflet-control .control-button").tooltip("hide");
     }
 
     function updateButton() {
-      var disabled = ['mapnik', 'cyclemap'].indexOf(map.getMapBaseLayerId()) === -1;
+      var disabled = ["mapnik", "cyclemap"].indexOf(map.getMapBaseLayerId()) === -1;
       button
-        .toggleClass('disabled', disabled)
-        .attr('data-original-title',
+        .toggleClass("disabled", disabled)
+        .attr("data-original-title",
               I18n.t(disabled ?
-                     'javascripts.key.tooltip_disabled' :
-                     'javascripts.key.tooltip'));
+                     "javascripts.key.tooltip_disabled" :
+                     "javascripts.key.tooltip"));
     }
 
     function update() {
       var layer = map.getMapBaseLayerId(),
         zoom = map.getZoom();
 
-      $('.mapkey-table-entry').each(function () {
+      $(".mapkey-table-entry").each(function () {
         var data = $(this).data();
         if (layer === data.layer && zoom >= data.zoomMin && zoom <= data.zoomMax) {
           $(this).show();
index a465e144993d8470a82c31f740fb09b273d8f5b2..b12c0c89d79bc56500a445cd242a1f223692e4ef 100644 (file)
@@ -1,55 +1,55 @@
-L.OSM.layers = function(options) {
+L.OSM.layers = function (options) {
   var control = L.control(options);
 
   control.onAdd = function (map) {
     var layers = options.layers;
 
-    var $container = $('<div>')
-      .attr('class', 'control-layers');
+    var $container = $("<div>")
+      .attr("class", "control-layers");
 
-    var button = $('<a>')
-      .attr('class', 'control-button')
-      .attr('href', '#')
-      .attr('title', I18n.t('javascripts.map.layers.title'))
-      .html('<span class="icon layers"></span>')
-      .on('click', toggle)
+    var button = $("<a>")
+      .attr("class", "control-button")
+      .attr("href", "#")
+      .attr("title", I18n.t("javascripts.map.layers.title"))
+      .html("<span class=\"icon layers\"></span>")
+      .on("click", toggle)
       .appendTo($container);
 
-    var $ui = $('<div>')
-      .attr('class', 'layers-ui');
+    var $ui = $("<div>")
+      .attr("class", "layers-ui");
 
-    $('<div>')
-      .attr('class', 'sidebar_heading')
+    $("<div>")
+      .attr("class", "sidebar_heading")
       .appendTo($ui)
       .append(
-        $('<span>')
-          .text(I18n.t('javascripts.close'))
-          .attr('class', 'icon close')
-          .bind('click', toggle))
+        $("<span>")
+          .text(I18n.t("javascripts.close"))
+          .attr("class", "icon close")
+          .bind("click", toggle))
       .append(
-        $('<h4>')
-          .text(I18n.t('javascripts.map.layers.header')));
+        $("<h4>")
+          .text(I18n.t("javascripts.map.layers.header")));
 
-    var baseSection = $('<div>')
-      .attr('class', 'section base-layers')
+    var baseSection = $("<div>")
+      .attr("class", "section base-layers")
       .appendTo($ui);
 
-    var baseLayers = $('<ul>')
+    var baseLayers = $("<ul>")
       .appendTo(baseSection);
 
-    layers.forEach(function(layer) {
-      var item = $('<li>')
+    layers.forEach(function (layer) {
+      var item = $("<li>")
         .appendTo(baseLayers);
 
       if (map.hasLayer(layer)) {
-        item.addClass('active');
+        item.addClass("active");
       }
 
-      var div = $('<div>')
+      var div = $("<div>")
         .appendTo(item);
 
-      map.whenReady(function() {
-        var miniMap = L.map(div[0], {attributionControl: false, zoomControl: false, keyboard: false})
+      map.whenReady(function () {
+        var miniMap = L.map(div[0], { attributionControl: false, zoomControl: false, keyboard: false })
           .addLayer(new layer.constructor({ apikey: layer.options.apikey }));
 
         miniMap.dragging.disable();
@@ -58,17 +58,17 @@ L.OSM.layers = function(options) {
         miniMap.scrollWheelZoom.disable();
 
         $ui
-          .on('show', shown)
-          .on('hide', hide);
+          .on("show", shown)
+          .on("hide", hide);
 
         function shown() {
           miniMap.invalidateSize();
-          setView({animate: false});
-          map.on('moveend', moved);
+          setView({ animate: false });
+          map.on("moveend", moved);
         }
 
         function hide() {
-          map.off('moveend', moved);
+          map.off("moveend", moved);
         }
 
         function moved() {
@@ -80,103 +80,103 @@ L.OSM.layers = function(options) {
         }
       });
 
-      var label = $('<label>')
+      var label = $("<label>")
         .appendTo(item);
 
-      var input = $('<input>')
-         .attr('type', 'radio')
-         .prop('checked', map.hasLayer(layer))
+      var input = $("<input>")
+         .attr("type", "radio")
+         .prop("checked", map.hasLayer(layer))
          .appendTo(label);
 
       label.append(layer.options.name);
 
-      item.on('click', function() {
-        layers.forEach(function(other) {
+      item.on("click", function () {
+        layers.forEach(function (other) {
           if (other === layer) {
             map.addLayer(other);
           } else {
             map.removeLayer(other);
           }
         });
-        map.fire('baselayerchange', {layer: layer});
+        map.fire("baselayerchange", { layer: layer });
       });
 
-      item.on('dblclick', toggle);
+      item.on("dblclick", toggle);
 
-      map.on('layeradd layerremove', function() {
-        item.toggleClass('active', map.hasLayer(layer));
-        input.prop('checked', map.hasLayer(layer));
+      map.on("layeradd layerremove", function () {
+        item.toggleClass("active", map.hasLayer(layer));
+        input.prop("checked", map.hasLayer(layer));
       });
     });
 
-    if (OSM.STATUS !== 'api_offline' && OSM.STATUS !== 'database_offline') {
-      var overlaySection = $('<div>')
-        .attr('class', 'section overlay-layers')
+    if (OSM.STATUS !== "api_offline" && OSM.STATUS !== "database_offline") {
+      var overlaySection = $("<div>")
+        .attr("class", "section overlay-layers")
         .appendTo($ui);
 
-      $('<p>')
-        .text(I18n.t('javascripts.map.layers.overlays'))
+      $("<p>")
+        .text(I18n.t("javascripts.map.layers.overlays"))
         .attr("class", "deemphasize")
         .appendTo(overlaySection);
 
-      var overlays = $('<ul>')
+      var overlays = $("<ul>")
         .appendTo(overlaySection);
 
       var addOverlay = function (layer, name, maxArea) {
-        var item = $('<li>')
+        var item = $("<li>")
           .tooltip({
-            placement: 'top'
+            placement: "top"
           })
           .appendTo(overlays);
 
-        var label = $('<label>')
+        var label = $("<label>")
           .appendTo(item);
 
         var checked = map.hasLayer(layer);
 
-        var input = $('<input>')
-          .attr('type', 'checkbox')
-          .prop('checked', checked)
+        var input = $("<input>")
+          .attr("type", "checkbox")
+          .prop("checked", checked)
           .appendTo(label);
 
-        label.append(I18n.t('javascripts.map.layers.' + name));
+        label.append(I18n.t("javascripts.map.layers." + name));
 
-        input.on('change', function() {
-          checked = input.is(':checked');
+        input.on("change", function () {
+          checked = input.is(":checked");
           if (checked) {
             map.addLayer(layer);
           } else {
             map.removeLayer(layer);
           }
-          map.fire('overlaylayerchange', {layer: layer});
+          map.fire("overlaylayerchange", { layer: layer });
         });
 
-        map.on('layeradd layerremove', function() {
-          input.prop('checked', map.hasLayer(layer));
+        map.on("layeradd layerremove", function () {
+          input.prop("checked", map.hasLayer(layer));
         });
 
-        map.on('zoomend', function() {
+        map.on("zoomend", function () {
           var disabled = map.getBounds().getSize() >= maxArea;
-          $(input).prop('disabled', disabled);
+          $(input).prop("disabled", disabled);
 
-          if (disabled && $(input).is(':checked')) {
-            $(input).prop('checked', false)
-              .trigger('change');
+          if (disabled && $(input).is(":checked")) {
+            $(input).prop("checked", false)
+              .trigger("change");
             checked = true;
-          } else if (!disabled && !$(input).is(':checked') && checked) {
-            $(input).prop('checked', true)
-              .trigger('change');
+          } else if (!disabled && !$(input).is(":checked") && checked) {
+            $(input).prop("checked", true)
+              .trigger("change");
           }
 
-          $(item).attr('class', disabled ? 'disabled' : '');
-          item.attr('data-original-title', disabled ?
-            I18n.t('javascripts.site.map_' + name + '_zoom_in_tooltip') : '');
+          $(item).attr("class", disabled ? "disabled" : "");
+          item.attr("data-original-title", disabled ?
+            I18n.t("javascripts.site.map_" + name + "_zoom_in_tooltip") : "");
         });
       };
 
-      addOverlay(map.noteLayer, 'notes', OSM.MAX_NOTE_REQUEST_AREA);
-      addOverlay(map.dataLayer, 'data', OSM.MAX_REQUEST_AREA);
-      addOverlay(map.gpsLayer, 'gps', Number.POSITIVE_INFINITY);
+      addOverlay(map.noteLayer, "notes", OSM.MAX_NOTE_REQUEST_AREA);
+      addOverlay(map.dataLayer, "data", OSM.MAX_REQUEST_AREA);
+      addOverlay(map.gpsLayer, "gps", Number.POSITIVE_INFINITY);
     }
 
     options.sidebar.addPane($ui);
@@ -185,7 +185,7 @@ L.OSM.layers = function(options) {
       e.stopPropagation();
       e.preventDefault();
       options.sidebar.togglePane($ui, button);
-      $('.leaflet-control .control-button').tooltip('hide');
+      $(".leaflet-control .control-button").tooltip("hide");
     }
 
     return $container[0];
index e712a8d1f415719e14746ad6ef279694c5eedc23..fe8d74af5405bff40d7682d3279e820d2c279ab3 100644 (file)
@@ -10,16 +10,17 @@ L.extend(L.LatLngBounds.prototype, {
 });
 
 L.OSM.Map = L.Map.extend({
-  initialize: function(id, options) {
+  initialize: function (id, options) {
     L.Map.prototype.initialize.call(this, id, options);
 
-    var copyright = I18n.t('javascripts.map.copyright', {copyright_url: '/copyright'});
-    var donate = I18n.t('javascripts.map.donate_link_text', {donate_url: 'https://donate.openstreetmap.org'});
+    var copyright = I18n.t("javascripts.map.copyright", { copyright_url: "/copyright" });
+    var donate = I18n.t("javascripts.map.donate_link_text", { donate_url: "https://donate.openstreetmap.org" });
+    var terms = I18n.t("javascripts.map.terms", { terms_url: "https://wiki.osmfoundation.org/wiki/Terms_of_Use" });
 
     this.baseLayers = [];
 
     this.baseLayers.push(new L.OSM.Mapnik({
-      attribution: copyright + " &hearts; " + donate,
+      attribution: copyright + " &hearts; " + donate + ". " + terms,
       code: "M",
       keyid: "mapnik",
       name: I18n.t("javascripts.map.base.standard")
@@ -27,7 +28,7 @@ L.OSM.Map = L.Map.extend({
 
     if (OSM.THUNDERFOREST_KEY) {
       this.baseLayers.push(new L.OSM.CycleMap({
-        attribution: copyright + ". Tiles courtesy of <a href='https://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
+        attribution: copyright + ". Tiles courtesy of <a href='https://www.thunderforest.com/' target='_blank'>Andy Allan</a>. " + terms,
         apikey: OSM.THUNDERFOREST_KEY,
         code: "C",
         keyid: "cyclemap",
@@ -35,7 +36,7 @@ L.OSM.Map = L.Map.extend({
       }));
 
       this.baseLayers.push(new L.OSM.TransportMap({
-        attribution: copyright + ". Tiles courtesy of <a href='https://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
+        attribution: copyright + ". Tiles courtesy of <a href='https://www.thunderforest.com/' target='_blank'>Andy Allan</a>. " + terms,
         apikey: OSM.THUNDERFOREST_KEY,
         code: "T",
         keyid: "transportmap",
@@ -44,17 +45,17 @@ L.OSM.Map = L.Map.extend({
     }
 
     this.baseLayers.push(new L.OSM.HOT({
-      attribution: copyright + ". Tiles style by <a href='https://www.hotosm.org/' target='_blank'>Humanitarian OpenStreetMap Team</a>" + " hosted by <a href='https://openstreetmap.fr/' target='_blank'>OpenStreetMap France</a>",
+      attribution: copyright + ". Tiles style by <a href='https://www.hotosm.org/' target='_blank'>Humanitarian OpenStreetMap Team</a> hosted by <a href='https://openstreetmap.fr/' target='_blank'>OpenStreetMap France</a>. " + terms,
       code: "H",
       keyid: "hot",
       name: I18n.t("javascripts.map.base.hot")
     }));
 
     this.noteLayer = new L.FeatureGroup();
-    this.noteLayer.options = {code: 'N'};
+    this.noteLayer.options = { code: "N" };
 
     this.dataLayer = new L.OSM.DataLayer(null);
-    this.dataLayer.options.code = 'D';
+    this.dataLayer.options.code = "D";
 
     this.gpsLayer = new L.OSM.GPS({
       pane: "overlayPane",
@@ -69,7 +70,7 @@ L.OSM.Map = L.Map.extend({
     });
   },
 
-  updateLayers: function(layerParam) {
+  updateLayers: function (layerParam) {
     layerParam = layerParam || "M";
     var layersAdded = "";
 
@@ -86,24 +87,24 @@ L.OSM.Map = L.Map.extend({
   },
 
   getLayersCode: function () {
-    var layerConfig = '';
-    for (var i in this._layers) { // TODO: map.eachLayer
-      var layer = this._layers[i];
+    var layerConfig = "";
+    this.eachLayer(function (layer) {
       if (layer.options && layer.options.code) {
         layerConfig += layer.options.code;
       }
-    }
+    });
     return layerConfig;
   },
 
   getMapBaseLayerId: function () {
-    for (var i in this._layers) { // TODO: map.eachLayer
-      var layer = this._layers[i];
-      if (layer.options && layer.options.keyid) return layer.options.keyid;
-    }
+    var baseLayerId;
+    this.eachLayer(function (layer) {
+      if (layer.options && layer.options.keyid) baseLayerId = layer.options.keyid;
+    });
+    return baseLayerId;
   },
 
-  getUrl: function(marker) {
+  getUrl: function (marker) {
     var precision = OSM.zoomPrecision(this.getZoom()),
         params = {};
 
@@ -113,22 +114,22 @@ L.OSM.Map = L.Map.extend({
       params.mlon = latLng.lng.toFixed(precision);
     }
 
-    var url = window.location.protocol + '//' + OSM.SERVER_URL + '/',
+    var url = window.location.protocol + "//" + OSM.SERVER_URL + "/",
       query = querystring.stringify(params),
       hash = OSM.formatHash(this);
 
-    if (query) url += '?' + query;
+    if (query) url += "?" + query;
     if (hash) url += hash;
 
     return url;
   },
 
-  getShortUrl: function(marker) {
+  getShortUrl: function (marker) {
     var zoom = this.getZoom(),
       latLng = marker && this.hasLayer(marker) ? marker.getLatLng().wrap() : this.getCenter().wrap(),
       str = window.location.hostname.match(/^www\.openstreetmap\.org/i) ?
-        window.location.protocol + '//osm.org/go/' :
-        window.location.protocol + '//' + window.location.hostname + '/go/',
+        window.location.protocol + "//osm.org/go/" :
+        window.location.protocol + "//" + window.location.hostname + "/go/",
       char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_~",
       x = Math.round((latLng.lng + 180.0) * ((1 << 30) / 90.0)),
       y = Math.round((latLng.lat + 90.0) * ((1 << 30) / 45.0)),
@@ -136,14 +137,15 @@ L.OSM.Map = L.Map.extend({
       // done in two parts. each of the parts c1/c2 has 30 bits of the total in it
       // and drops the last 4 bits of the full 64 bit Morton code.
       c1 = interlace(x >>> 17, y >>> 17), c2 = interlace((x >>> 2) & 0x7fff, (y >>> 2) & 0x7fff),
-      digit;
+      digit,
+      i;
 
-    for (var i = 0; i < Math.ceil((zoom + 8) / 3.0) && i < 5; ++i) {
-      digit = (c1 >> (24 - 6 * i)) & 0x3f;
+    for (i = 0; i < Math.ceil((zoom + 8) / 3.0) && i < 5; ++i) {
+      digit = (c1 >> (24 - (6 * i))) & 0x3f;
       str += char_array.charAt(digit);
     }
     for (i = 5; i < Math.ceil((zoom + 8) / 3.0); ++i) {
-      digit = (c2 >> (24 - 6 * (i - 5))) & 0x3f;
+      digit = (c2 >> (24 - (6 * (i - 5)))) & 0x3f;
       str += char_array.charAt(digit);
     }
     for (i = 0; i < ((zoom + 8) % 3); ++i) str += "-";
@@ -162,14 +164,14 @@ L.OSM.Map = L.Map.extend({
     }
 
     var params = {};
-    var layers = this.getLayersCode().replace('M', '');
+    var layers = this.getLayersCode().replace("M", "");
 
     if (layers) {
       params.layers = layers;
     }
 
     if (marker && this.hasLayer(marker)) {
-      params.m = '';
+      params.m = "";
     }
 
     if (this._object) {
@@ -178,13 +180,13 @@ L.OSM.Map = L.Map.extend({
 
     var query = querystring.stringify(params);
     if (query) {
-      str += '?' + query;
+      str += "?" + query;
     }
 
     return str;
   },
 
-  getGeoUri: function(marker) {
+  getGeoUri: function (marker) {
     var precision = OSM.zoomPrecision(this.getZoom()),
         latLng,
         params = {};
@@ -199,10 +201,10 @@ L.OSM.Map = L.Map.extend({
     params.lon = latLng.lng.toFixed(precision);
     params.zoom = this.getZoom();
 
-    return 'geo:' + params.lat + ',' + params.lon + '?z=' + params.zoom;
+    return "geo:" + params.lat + "," + params.lon + "?z=" + params.zoom;
   },
 
-  addObject: function(object, callback) {
+  addObject: function (object, callback) {
     var objectStyle = {
       color: "#FF6200",
       weight: 4,
@@ -212,7 +214,7 @@ L.OSM.Map = L.Map.extend({
 
     var changesetStyle = {
       weight: 4,
-      color: '#FF9500',
+      color: "#FF9500",
       opacity: 1,
       fillOpacity: 0,
       interactive: false
@@ -240,9 +242,9 @@ L.OSM.Map = L.Map.extend({
           if (object.type === "node") {
             return true;
           } else if (object.type === "relation") {
-            for (var i = 0; i < relations.length; i++)
-              if (relations[i].members.indexOf(node) !== -1)
-                return true;
+            for (var i = 0; i < relations.length; i++) {
+              if (relations[i].members.indexOf(node) !== -1) return true;
+            }
           } else {
             return false;
           }
@@ -256,13 +258,13 @@ L.OSM.Map = L.Map.extend({
     });
   },
 
-  removeObject: function() {
+  removeObject: function () {
     this._object = null;
     if (this._objectLoader) this._objectLoader.abort();
     if (this._objectLayer) this.removeLayer(this._objectLayer);
   },
 
-  getState: function() {
+  getState: function () {
     return {
       center: this.getCenter().wrap(),
       zoom: this.getZoom(),
@@ -270,20 +272,20 @@ L.OSM.Map = L.Map.extend({
     };
   },
 
-  setState: function(state, options) {
+  setState: function (state, options) {
     if (state.center) this.setView(state.center, state.zoom, options);
     if (state.layers) this.updateLayers(state.layers);
   },
 
-  setSidebarOverlaid: function(overlaid) {
+  setSidebarOverlaid: function (overlaid) {
     if (overlaid && !$("#content").hasClass("overlay-sidebar")) {
       $("#content").addClass("overlay-sidebar");
-      this.invalidateSize({pan: false})
-        .panBy([-350, 0], {animate: false});
+      this.invalidateSize({ pan: false })
+        .panBy([-350, 0], { animate: false });
     } else if (!overlaid && $("#content").hasClass("overlay-sidebar")) {
-      this.panBy([350, 0], {animate: false});
+      this.panBy([350, 0], { animate: false });
       $("#content").removeClass("overlay-sidebar");
-      this.invalidateSize({pan: false});
+      this.invalidateSize({ pan: false });
     }
     return this;
   }
@@ -300,7 +302,7 @@ L.Icon.Default.imageUrls = {
 L.extend(L.Icon.Default.prototype, {
   _oldGetIconUrl: L.Icon.Default.prototype._getIconUrl,
 
-  _getIconUrl:  function (name) {
+  _getIconUrl: function (name) {
     var url = this._oldGetIconUrl(name);
     return L.Icon.Default.imageUrls[url];
   }
index 8451e9b72eb3742c3d4a08cfcfa708641d45a23b..86c4554996007bae71f9b3ac37bc7105c5b1e662 100644 (file)
@@ -2,24 +2,24 @@ L.OSM.note = function (options) {
   var control = L.control(options);
 
   control.onAdd = function (map) {
-    var $container = $('<div>')
-      .attr('class', 'control-note');
+    var $container = $("<div>")
+      .attr("class", "control-note");
 
-    var link = $('<a>')
-      .attr('class', 'control-button')
-      .attr('href', '#')
-      .html('<span class="icon note"></span>')
+    var link = $("<a>")
+      .attr("class", "control-button")
+      .attr("href", "#")
+      .html("<span class=\"icon note\"></span>")
       .appendTo($container);
 
-    map.on('zoomend', update);
+    map.on("zoomend", update);
 
     function update() {
       var disabled = OSM.STATUS === "database_offline" || map.getZoom() < 12;
       link
-        .toggleClass('disabled', disabled)
-        .attr('data-original-title', I18n.t(disabled ?
-          'javascripts.site.createnote_disabled_tooltip' :
-          'javascripts.site.createnote_tooltip'));
+        .toggleClass("disabled", disabled)
+        .attr("data-original-title", I18n.t(disabled ?
+          "javascripts.site.createnote_disabled_tooltip" :
+          "javascripts.site.createnote_tooltip"));
     }
 
     update();
index 9064872740b797888c90fc4520d8dca00321d97f..8e45014a3ebab98c357e7058711a4db141dfbffb 100644 (file)
@@ -2,32 +2,32 @@ L.OSM.query = function (options) {
   var control = L.control(options);
 
   control.onAdd = function (map) {
-    var $container = $('<div>')
-      .attr('class', 'control-query');
+    var $container = $("<div>")
+      .attr("class", "control-query");
 
-    var link = $('<a>')
-      .attr('class', 'control-button')
-      .attr('href', '#')
-      .html('<span class="icon query"></span>')
+    var link = $("<a>")
+      .attr("class", "control-button")
+      .attr("href", "#")
+      .html("<span class=\"icon query\"></span>")
       .appendTo($container);
 
-    map.on('zoomend', update);
+    map.on("zoomend", update);
 
     update();
 
     function update() {
-      var wasDisabled = link.hasClass('disabled'),
+      var wasDisabled = link.hasClass("disabled"),
         isDisabled = map.getZoom() < 14;
       link
-        .toggleClass('disabled', isDisabled)
-        .attr('data-original-title', I18n.t(isDisabled ?
-          'javascripts.site.queryfeature_disabled_tooltip' :
-          'javascripts.site.queryfeature_tooltip'));
+        .toggleClass("disabled", isDisabled)
+        .attr("data-original-title", I18n.t(isDisabled ?
+          "javascripts.site.queryfeature_disabled_tooltip" :
+          "javascripts.site.queryfeature_tooltip"));
 
       if (isDisabled && !wasDisabled) {
-        link.trigger('disabled');
+        link.trigger("disabled");
       } else if (wasDisabled && !isDisabled) {
-        link.trigger('enabled');
+        link.trigger("enabled");
       }
     }
 
index 044c767cf30485e3c41cb7c2b28fcb7596514307..69100e4202c3c9a9ccdca6884a4aa95e697a62db 100644 (file)
 L.OSM.share = function (options) {
   var control = L.control(options),
-    marker = L.marker([0, 0], {draggable: true}),
+    marker = L.marker([0, 0], { draggable: true }),
     locationFilter = new L.LocationFilter({
       enableButton: false,
       adjustButton: false
     });
 
   control.onAdd = function (map) {
-    var $container = $('<div>')
-      .attr('class', 'control-share');
-
-    var button = $('<a>')
-      .attr('class', 'control-button')
-      .attr('href', '#')
-      .attr('title', I18n.t('javascripts.share.title'))
-      .html('<span class="icon share"></span>')
-      .on('click', toggle)
+    var $container = $("<div>")
+      .attr("class", "control-share");
+
+    var button = $("<a>")
+      .attr("class", "control-button")
+      .attr("href", "#")
+      .attr("title", I18n.t("javascripts.share.title"))
+      .html("<span class=\"icon share\"></span>")
+      .on("click", toggle)
       .appendTo($container);
 
-    var $ui = $('<div>')
-      .attr('class', 'share-ui');
+    var $ui = $("<div>")
+      .attr("class", "share-ui");
 
-    $('<div>')
-      .attr('class', 'sidebar_heading')
+    $("<div>")
+      .attr("class", "sidebar_heading")
       .appendTo($ui)
       .append(
-        $('<span>')
-          .text(I18n.t('javascripts.close'))
-          .attr('class', 'icon close')
-          .bind('click', toggle))
+        $("<span>")
+          .text(I18n.t("javascripts.close"))
+          .attr("class", "icon close")
+          .bind("click", toggle))
       .append(
-        $('<h4>')
-          .text(I18n.t('javascripts.share.title')));
+        $("<h4>")
+          .text(I18n.t("javascripts.share.title")));
 
     // Link / Embed
 
-    var $linkSection = $('<div>')
-      .attr('class', 'section share-link')
+    var $linkSection = $("<div>")
+      .attr("class", "section share-link")
       .appendTo($ui);
 
-    $('<h4>')
-      .text(I18n.t('javascripts.share.link'))
+    $("<h4>")
+      .text(I18n.t("javascripts.share.link"))
       .appendTo($linkSection);
 
-    var $form = $('<form>')
-      .attr('class', 'standard-form')
+    var $form = $("<form>")
+      .attr("class", "standard-form")
       .appendTo($linkSection);
 
-    $('<div>')
-      .attr('class', 'form-row')
+    $("<div>")
+      .attr("class", "form-row")
       .appendTo($form)
       .append(
-        $('<label>')
-          .attr('for', 'link_marker')
+        $("<label>")
+          .attr("for", "link_marker")
           .append(
-            $('<input>')
-              .attr('id', 'link_marker')
-              .attr('type', 'checkbox')
-              .bind('change', toggleMarker))
-          .append(I18n.t('javascripts.share.include_marker')));
-
-    $('<div>')
-      .attr('class', 'share-tabs')
+            $("<input>")
+              .attr("id", "link_marker")
+              .attr("type", "checkbox")
+              .bind("change", toggleMarker))
+          .append(I18n.t("javascripts.share.include_marker")));
+
+    $("<div>")
+      .attr("class", "share-tabs")
       .appendTo($form)
-      .append($('<a>')
-        .attr('class', 'active')
-        .attr('for', 'long_input')
-        .attr('id', 'long_link')
-        .text(I18n.t('javascripts.share.long_link')))
-      .append($('<a>')
-        .attr('for', 'short_input')
-        .attr('id', 'short_link')
-        .text(I18n.t('javascripts.share.short_link')))
-      .append($('<a>')
-        .attr('for', 'embed_html')
-        .attr('href', '#')
-        .text(I18n.t('javascripts.share.embed')))
-      .on('click', 'a', function(e) {
+      .append($("<a>")
+        .attr("class", "active")
+        .attr("for", "long_input")
+        .attr("id", "long_link")
+        .text(I18n.t("javascripts.share.long_link")))
+      .append($("<a>")
+        .attr("for", "short_input")
+        .attr("id", "short_link")
+        .text(I18n.t("javascripts.share.short_link")))
+      .append($("<a>")
+        .attr("for", "embed_html")
+        .attr("href", "#")
+        .text(I18n.t("javascripts.share.embed")))
+      .on("click", "a", function (e) {
         e.preventDefault();
-        var id = '#' + $(this).attr('for');
-        $linkSection.find('.share-tabs a')
-          .removeClass('active');
-        $(this).addClass('active');
-        $linkSection.find('.share-tab')
+        var id = "#" + $(this).attr("for");
+        $linkSection.find(".share-tabs a")
+          .removeClass("active");
+        $(this).addClass("active");
+        $linkSection.find(".share-tab")
           .hide();
-        $linkSection.find('.share-tab:has(' + id + ')')
+        $linkSection.find(".share-tab:has(" + id + ")")
           .show()
-          .find('input, textarea')
+          .find("input, textarea")
           .select();
       });
 
-    $('<div>')
-      .attr('class', 'form-row share-tab')
-      .css('display', 'block')
+    $("<div>")
+      .attr("class", "form-row share-tab")
+      .css("display", "block")
       .appendTo($form)
-      .append($('<input>')
-        .attr('id', 'long_input')
-        .attr('type', 'text')
-        .on('click', select));
+      .append($("<input>")
+        .attr("id", "long_input")
+        .attr("type", "text")
+        .on("click", select));
 
-    $('<div>')
-      .attr('class', 'form-row share-tab')
+    $("<div>")
+      .attr("class", "form-row share-tab")
       .appendTo($form)
-      .append($('<input>')
-        .attr('id', 'short_input')
-        .attr('type', 'text')
-        .on('click', select));
+      .append($("<input>")
+        .attr("id", "short_input")
+        .attr("type", "text")
+        .on("click", select));
 
-    $('<div>')
-      .attr('class', 'form-row share-tab')
+    $("<div>")
+      .attr("class", "form-row share-tab")
       .appendTo($form)
       .append(
-        $('<textarea>')
-          .attr('id', 'embed_html')
-          .on('click', select))
+        $("<textarea>")
+          .attr("id", "embed_html")
+          .on("click", select))
       .append(
-        $('<p>')
-          .attr('class', 'deemphasize')
-          .text(I18n.t('javascripts.share.paste_html'))
+        $("<p>")
+          .attr("class", "deemphasize")
+          .text(I18n.t("javascripts.share.paste_html"))
           .appendTo($linkSection));
 
     // Geo URI
 
-    var $geoUriSection = $('<div>')
-      .attr('class', 'section share-geo-uri')
+    var $geoUriSection = $("<div>")
+      .attr("class", "section share-geo-uri")
       .appendTo($ui);
 
-    $('<h4>')
-      .text(I18n.t('javascripts.share.geo_uri'))
+    $("<h4>")
+      .text(I18n.t("javascripts.share.geo_uri"))
       .appendTo($geoUriSection);
 
-    $('<div>')
+    $("<div>")
       .appendTo($geoUriSection)
-      .append($('<a>')
-        .attr('id', 'geo_uri'));
+      .append($("<a>")
+        .attr("id", "geo_uri"));
 
     // Image
 
-    var $imageSection = $('<div>')
-      .attr('class', 'section share-image')
+    var $imageSection = $("<div>")
+      .attr("class", "section share-image")
       .appendTo($ui);
 
-    $('<h4>')
-      .text(I18n.t('javascripts.share.image'))
+    $("<h4>")
+      .text(I18n.t("javascripts.share.image"))
       .appendTo($imageSection);
 
-    $('<div>')
-      .attr('id', 'export-warning')
-      .attr('class', 'deemphasize')
-      .text(I18n.t('javascripts.share.only_standard_layer'))
+    $("<div>")
+      .attr("id", "export-warning")
+      .attr("class", "deemphasize")
+      .text(I18n.t("javascripts.share.only_standard_layer"))
       .appendTo($imageSection);
 
-    $form = $('<form>')
-      .attr('id', 'export-image')
-      .attr('class', 'standard-form')
-      .attr('action', '/export/finish')
-      .attr('method', 'post')
+    $form = $("<form>")
+      .attr("id", "export-image")
+      .attr("class", "standard-form")
+      .attr("action", "/export/finish")
+      .attr("method", "post")
       .appendTo($imageSection);
 
-    $('<div>')
-      .attr('class', 'form-row')
+    $("<div>")
+      .attr("class", "form-row")
       .appendTo($form)
       .append(
-        $('<label>')
-          .attr('for', 'image_filter')
+        $("<label>")
+          .attr("for", "image_filter")
           .append(
-            $('<input>')
-              .attr('id', 'image_filter')
-              .attr('type', 'checkbox')
-              .bind('change', toggleFilter))
-          .append(I18n.t('javascripts.share.custom_dimensions')));
-
-    $('<div>')
-      .attr('class', 'form-row')
+            $("<input>")
+              .attr("id", "image_filter")
+              .attr("type", "checkbox")
+              .bind("change", toggleFilter))
+          .append(I18n.t("javascripts.share.custom_dimensions")));
+
+    $("<div>")
+      .attr("class", "form-row")
       .appendTo($form)
       .append(
-        $('<label>')
-          .attr('for', 'mapnik_format')
-          .text(I18n.t('javascripts.share.format')))
-      .append($('<select>')
-        .attr('name', 'mapnik_format')
-        .attr('id', 'mapnik_format')
-        .append($('<option>').val('png').text('PNG').prop('selected', true))
-        .append($('<option>').val('jpeg').text('JPEG'))
-        .append($('<option>').val('svg').text('SVG'))
-        .append($('<option>').val('pdf').text('PDF')));
-
-    $('<div>')
-      .attr('class', 'form-row')
+        $("<label>")
+          .attr("for", "mapnik_format")
+          .text(I18n.t("javascripts.share.format")))
+      .append($("<select>")
+        .attr("name", "mapnik_format")
+        .attr("id", "mapnik_format")
+        .append($("<option>").val("png").text("PNG").prop("selected", true))
+        .append($("<option>").val("jpeg").text("JPEG"))
+        .append($("<option>").val("svg").text("SVG"))
+        .append($("<option>").val("pdf").text("PDF")));
+
+    $("<div>")
+      .attr("class", "form-row")
       .appendTo($form)
-      .append($('<label>')
-        .attr('for', 'mapnik_scale')
-        .text(I18n.t('javascripts.share.scale')))
-      .append('1 : ')
-      .append($('<input>')
-        .attr('name', 'mapnik_scale')
-        .attr('id', 'mapnik_scale')
-        .attr('type', 'text')
-        .on('change', update));
-
-    ['minlon', 'minlat', 'maxlon', 'maxlat'].forEach(function(name) {
-      $('<input>')
-        .attr('id', 'mapnik_' + name)
-        .attr('name', name)
-        .attr('type', 'hidden')
+      .append($("<label>")
+        .attr("for", "mapnik_scale")
+        .text(I18n.t("javascripts.share.scale")))
+      .append("1 : ")
+      .append($("<input>")
+        .attr("name", "mapnik_scale")
+        .attr("id", "mapnik_scale")
+        .attr("type", "text")
+        .on("change", update));
+
+    ["minlon", "minlat", "maxlon", "maxlat"].forEach(function (name) {
+      $("<input>")
+        .attr("id", "mapnik_" + name)
+        .attr("name", name)
+        .attr("type", "hidden")
         .appendTo($form);
     });
 
-    $('<input>')
-      .attr('name', 'format')
-      .attr('value', 'mapnik')
-      .attr('type', 'hidden')
+    $("<input>")
+      .attr("name", "format")
+      .attr("value", "mapnik")
+      .attr("type", "hidden")
       .appendTo($form);
 
     var csrf_param = $("meta[name=csrf-param]").attr("content"),
         csrf_token = $("meta[name=csrf-token]").attr("content");
 
-    $('<input>')
-      .attr('name', csrf_param)
-      .attr('value', csrf_token)
-      .attr('type', 'hidden')
+    $("<input>")
+      .attr("name", csrf_param)
+      .attr("value", csrf_token)
+      .attr("type", "hidden")
       .appendTo($form);
 
-    $('<p>')
-      .attr('class', 'deemphasize')
-      .html(I18n.t('javascripts.share.image_size') + ' <span id="mapnik_image_width"></span> x <span id="mapnik_image_height"></span>')
+    $("<p>")
+      .attr("class", "deemphasize")
+      .html(I18n.t("javascripts.share.image_size") + " <span id=\"mapnik_image_width\"></span> x <span id=\"mapnik_image_height\"></span>")
       .appendTo($form);
 
-    $('<input>')
-      .attr('type', 'submit')
-      .attr('value', I18n.t('javascripts.share.download'))
+    $("<input>")
+      .attr("type", "submit")
+      .attr("value", I18n.t("javascripts.share.download"))
       .appendTo($form);
 
     locationFilter
-      .on('change', update)
+      .on("change", update)
       .addTo(map);
 
-    marker.on('dragend', movedMarker);
-    map.on('move', movedMap);
-    map.on('moveend layeradd layerremove', update);
+    marker.on("dragend", movedMarker);
+    map.on("move", movedMap);
+    map.on("moveend layeradd layerremove", update);
 
     options.sidebar.addPane($ui);
 
     $ui
-      .on('hide', hidden);
+      .on("hide", hidden);
 
     function hidden() {
       map.removeLayer(marker);
@@ -256,19 +256,19 @@ L.OSM.share = function (options) {
       e.stopPropagation();
       e.preventDefault();
 
-      $('#mapnik_scale').val(getScale());
+      $("#mapnik_scale").val(getScale());
       marker.setLatLng(map.getCenter());
 
       update();
       options.sidebar.togglePane($ui, button);
-      $('.leaflet-control .control-button').tooltip('hide');
+      $(".leaflet-control .control-button").tooltip("hide");
     }
 
     function toggleMarker() {
-      if ($(this).is(':checked')) {
+      if ($(this).is(":checked")) {
         marker.setLatLng(map.getCenter());
         map.addLayer(marker);
-        map.options.scrollWheelZoom = map.options.doubleClickZoom = 'center';
+        map.options.scrollWheelZoom = map.options.doubleClickZoom = "center";
       } else {
         map.removeLayer(marker);
         map.options.scrollWheelZoom = map.options.doubleClickZoom = true;
@@ -277,7 +277,7 @@ L.OSM.share = function (options) {
     }
 
     function toggleFilter() {
-      if ($(this).is(':checked')) {
+      if ($(this).is(":checked")) {
         locationFilter.setBounds(map.getBounds().pad(-0.2));
         locationFilter.enable();
       } else {
@@ -293,27 +293,27 @@ L.OSM.share = function (options) {
 
     function movedMarker() {
       if (map.hasLayer(marker)) {
-        map.off('move', movedMap);
-        map.on('moveend', updateOnce);
+        map.off("move", movedMap);
+        map.on("moveend", updateOnce);
         map.panTo(marker.getLatLng());
       }
     }
 
     function updateOnce() {
-      map.off('moveend', updateOnce);
-      map.on('move', movedMap);
+      map.off("moveend", updateOnce);
+      map.on("move", movedMap);
       update();
     }
 
     function escapeHTML(string) {
       var htmlEscapes = {
-        '&': '&amp;',
-        '<': '&lt;',
-        '>': '&gt;',
-        '"': '&quot;',
-        "'": '&#x27;'
+        "&": "&amp;",
+        "<": "&lt;",
+        ">": "&gt;",
+        "\"": "&quot;",
+        "'": "&#x27;"
       };
-      return string === null ? '' : (string + '').replace(/[&<>"']/g, function(match) {
+      return string === null ? "" : String(string).replace(/[&<>"']/g, function (match) {
         return htmlEscapes[match];
       });
     }
@@ -321,18 +321,18 @@ L.OSM.share = function (options) {
     function update() {
       var bounds = map.getBounds();
 
-      $('#link_marker')
-        .prop('checked', map.hasLayer(marker));
+      $("#link_marker")
+        .prop("checked", map.hasLayer(marker));
 
-      $('#image_filter')
-        .prop('checked', locationFilter.isEnabled());
+      $("#image_filter")
+        .prop("checked", locationFilter.isEnabled());
 
       // Link / Embed
 
-      $('#short_input').val(map.getShortUrl(marker));
-      $('#long_input').val(map.getUrl(marker));
-      $('#short_link').attr('href', map.getShortUrl(marker));
-      $('#long_link').attr('href', map.getUrl(marker));
+      $("#short_input").val(map.getShortUrl(marker));
+      $("#long_input").val(map.getUrl(marker));
+      $("#short_link").attr("href", map.getShortUrl(marker));
+      $("#long_link").attr("href", map.getUrl(marker));
 
       var params = {
         bbox: bounds.toBBoxString(),
@@ -341,20 +341,20 @@ L.OSM.share = function (options) {
 
       if (map.hasLayer(marker)) {
         var latLng = marker.getLatLng().wrap();
-        params.marker = latLng.lat + ',' + latLng.lng;
+        params.marker = latLng.lat + "," + latLng.lng;
       }
 
-      $('#embed_html').val(
-        '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="' +
-          escapeHTML(OSM.SERVER_PROTOCOL + '://' + OSM.SERVER_URL + '/export/embed.html?' + $.param(params)) +
-          '" style="border: 1px solid black"></iframe><br/>' +
-          '<small><a href="' + escapeHTML(map.getUrl(marker)) + '">' +
-          escapeHTML(I18n.t('javascripts.share.view_larger_map')) + '</a></small>');
+      $("#embed_html").val(
+        "<iframe width=\"425\" height=\"350\" frameborder=\"0\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" src=\"" +
+          escapeHTML(OSM.SERVER_PROTOCOL + "://" + OSM.SERVER_URL + "/export/embed.html?" + $.param(params)) +
+          "\" style=\"border: 1px solid black\"></iframe><br/>" +
+          "<small><a href=\"" + escapeHTML(map.getUrl(marker)) + "\">" +
+          escapeHTML(I18n.t("javascripts.share.view_larger_map")) + "</a></small>");
 
       // Geo URI
 
-      $('#geo_uri')
-        .attr('href', map.getGeoUri(marker))
+      $("#geo_uri")
+        .attr("href", map.getGeoUri(marker))
         .html(map.getGeoUri(marker));
 
       // Image
@@ -368,10 +368,10 @@ L.OSM.share = function (options) {
                         L.CRS.EPSG3857.project(bounds.getNorthEast())).getSize(),
         maxScale = Math.floor(Math.sqrt(size.x * size.y / 0.3136));
 
-      $('#mapnik_minlon').val(bounds.getWest());
-      $('#mapnik_minlat').val(bounds.getSouth());
-      $('#mapnik_maxlon').val(bounds.getEast());
-      $('#mapnik_maxlat').val(bounds.getNorth());
+      $("#mapnik_minlon").val(bounds.getWest());
+      $("#mapnik_minlat").val(bounds.getSouth());
+      $("#mapnik_maxlon").val(bounds.getEast());
+      $("#mapnik_maxlat").val(bounds.getNorth());
 
       if (scale < maxScale) {
         scale = roundScale(maxScale);
@@ -381,12 +381,12 @@ L.OSM.share = function (options) {
       $("#mapnik_image_width").text(Math.round(size.x / scale / 0.00028));
       $("#mapnik_image_height").text(Math.round(size.y / scale / 0.00028));
 
-      if (map.getMapBaseLayerId() === 'mapnik') {
-        $('#export-image').show();
-        $('#export-warning').hide();
+      if (map.getMapBaseLayerId() === "mapnik") {
+        $("#export-image").show();
+        $("#export-warning").hide();
       } else {
-        $('#export-image').hide();
-        $('#export-warning').show();
+        $("#export-image").hide();
+        $("#export-warning").show();
       }
     }
 
index db9e7aef2505228010751b145e38771e48cc7564..bb046f99ad13ae029c840912e7a7be611494a365 100644 (file)
@@ -1,8 +1,8 @@
-L.OSM.sidebar = function(selector) {
+L.OSM.sidebar = function (selector) {
   var control = {},
     sidebar = $(selector),
     current = $(),
-    currentButton  = $(),
+    currentButton = $(),
     map;
 
   control.addTo = function (_) {
@@ -10,19 +10,19 @@ L.OSM.sidebar = function(selector) {
     return control;
   };
 
-  control.addPane = function(pane) {
+  control.addPane = function (pane) {
     pane
       .hide()
       .appendTo(sidebar);
   };
 
-  control.togglePane = function(pane, button) {
+  control.togglePane = function (pane, button) {
     current
       .hide()
-      .trigger('hide');
+      .trigger("hide");
 
     currentButton
-      .removeClass('active');
+      .removeClass("active");
 
     if (current === pane) {
       $(sidebar).hide();
@@ -33,14 +33,14 @@ L.OSM.sidebar = function(selector) {
       currentButton = button || $();
     }
 
-    map.invalidateSize({pan: false, animate: false});
+    map.invalidateSize({ pan: false, animate: false });
 
     current
       .show()
-      .trigger('show');
+      .trigger("show");
 
     currentButton
-      .addClass('active');
+      .addClass("active");
   };
 
   return control;
index 0ef0f64dec5e13b461c0a5aaebb5f69ad76955e6..e7c048b2d933c568f8eacfa5c7fcd987c85f9f7b 100644 (file)
@@ -1,26 +1,26 @@
 L.OSM.Zoom = L.Control.extend({
        options: {
-               position: 'topright'
+               position: "topright"
        },
 
        onAdd: function (map) {
-               var zoomName = 'zoom',
-                   container = L.DomUtil.create('div', zoomName);
+               var zoomName = "zoom",
+                   container = L.DomUtil.create("div", zoomName);
 
                this._map = map;
 
-               this._zoomInButton  = this._createButton(
-                       '', I18n.t('javascripts.map.zoom.in'),  zoomName + 'in',  container, this._zoomIn,  this);
+               this._zoomInButton = this._createButton(
+                       "", I18n.t("javascripts.map.zoom.in"), zoomName + "in", container, this._zoomIn, this);
                this._zoomOutButton = this._createButton(
-                       '', I18n.t('javascripts.map.zoom.out'), zoomName + 'out', container, this._zoomOut, this);
+                       "", I18n.t("javascripts.map.zoom.out"), zoomName + "out", container, this._zoomOut, this);
 
-               map.on('zoomend zoomlevelschange', this._updateDisabled, this);
+               map.on("zoomend zoomlevelschange", this._updateDisabled, this);
 
                return container;
        },
 
        onRemove: function (map) {
-               map.off('zoomend zoomlevelschange', this._updateDisabled, this);
+               map.off("zoomend zoomlevelschange", this._updateDisabled, this);
        },
 
        _zoomIn: function (e) {
@@ -32,28 +32,28 @@ L.OSM.Zoom = L.Control.extend({
        },
 
        _createButton: function (html, title, className, container, fn, context) {
-               var link = L.DomUtil.create('a', 'control-button ' + className, container);
+               var link = L.DomUtil.create("a", "control-button " + className, container);
                link.innerHTML = html;
-               link.href = '#';
+               link.href = "#";
                link.title = title;
 
-               L.DomUtil.create('span', 'icon ' + className, link);
+               L.DomUtil.create("span", "icon " + className, link);
 
                var stop = L.DomEvent.stopPropagation;
 
                L.DomEvent
-                   .on(link, 'click', stop)
-                   .on(link, 'mousedown', stop)
-                   .on(link, 'dblclick', stop)
-                   .on(link, 'click', L.DomEvent.preventDefault)
-                   .on(link, 'click', fn, context);
+                   .on(link, "click", stop)
+                   .on(link, "mousedown", stop)
+                   .on(link, "dblclick", stop)
+                   .on(link, "click", L.DomEvent.preventDefault)
+                   .on(link, "click", fn, context);
 
                return link;
        },
 
        _updateDisabled: function () {
                var map = this._map,
-                       className = 'disabled';
+                       className = "disabled";
 
                L.DomUtil.removeClass(this._zoomInButton, className);
                L.DomUtil.removeClass(this._zoomOutButton, className);
index 3496587b49848cadbd8d7f96c40cf70db970f905..853db34a978b22e2ce368d5c0990250c29d7ae13 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+$(document).ready(function () {
   // Preserve location hash in referer
   if (window.location.hash) {
     $("#referer").val($("#referer").val() + window.location.hash);
@@ -12,7 +12,7 @@ $(document).ready(function() {
   });
 
   // Add click handler to show OpenID field
-  $("#openid_open_url").click(function() {
+  $("#openid_open_url").click(function () {
     $("#openid_url").val("http://");
     $("#login_auth_buttons").hide();
     $("#login_openid_url").show();
@@ -24,7 +24,7 @@ $(document).ready(function() {
   $("#login_openid_submit").hide();
 
   // Handle OpenID submission by redirecting to omniauth
-  $("#openid_login_form").submit(function() {
+  $("#openid_login_form").submit(function () {
     var action = $(this).prop("action"),
         openid_url = $(this).find("#openid_url").val(),
         referer = $(this).find("#openid_referer").val(),
index 037e1d730c7d65badd47205fa32c5ff20c24f9af..411f7fc349194a599b39f6579559ef25a3b73841 100644 (file)
@@ -4,7 +4,7 @@ $(document).ready(function () {
   var application_data = $("head").data();
 
   function makeAbsolute(url) {
-    var a = document.createElement('a');
+    var a = document.createElement("a");
     a.href = url;
     return a.href;
   }
@@ -17,7 +17,7 @@ $(document).ready(function () {
       token_secret: application_data.tokenSecret
     });
 
-    $.ajaxPrefilter(function(options, jqxhr) {
+    $.ajaxPrefilter(function (options, jqxhr) {
       if (options.oauth) {
         options.headers = options.headers || {};
         options.headers.Authorization = headerGenerator(options.type, makeAbsolute(options.url), jqxhr.data);
index 19b5619a2558cef99ab7deec512841dd487d9eff..5353a99ac199609cd763903e953083625501cdc0 100644 (file)
@@ -9,14 +9,14 @@ if (OSM.PIWIK) {
       cache: true,
       success: function () {
         piwikTracker = Piwik.getTracker(base + "piwik.php", OSM.PIWIK.site);
-      
+
         if (OSM.user) {
           piwikTracker.setUserId(OSM.user.toString());
         }
 
         piwikTracker.trackPageView();
         piwikTracker.enableLinkTracking();
-      
+
         $("meta[name=piwik-goal]").each(function () {
           piwikTracker.trackGoal($(this).attr("content"));
         });
index a5323bc0774c3adcd81ba28a191c27c88ffcce0f..ea2efcfadc33b74e5b7f11a4988ed47ada2e0f68 100644 (file)
@@ -2,12 +2,12 @@ $(document).ready(function () {
   /* Hide the preview panes */
   $(".richtext_preview").hide();
 
-  /* 
+  /*
    * When the text in an edit pane is changed, clear the contents of
    * the associated preview pne so that it will be regenerated when
    * the user next switches to it.
    */
-  $(".richtext_content textarea").change(function () { 
+  $(".richtext_content textarea").change(function () {
     $(this).parents(".richtext_container").find(".richtext_preview").empty();
   });
 
index 0f37e32f1747107a06dd22d76fa2464b9a441484..08a6c7268579f65ca341de933c02ca66c2336964 100644 (file)
    `OSM.router.withoutMoveListener` to run a block of code that may update
    move the map without the hash changing.
  */
-OSM.Router = function(map, rts) {
+OSM.Router = function (map, rts) {
   var escapeRegExp  = /[\-{}\[\]+?.,\\\^$|#\s]/g;
   var optionalParam = /\((.*?)\)/g;
   var namedParam    = /(\(\?)?:\w+/g;
   var splatParam    = /\*\w+/g;
 
   function Route(path, controller) {
-    var regexp = new RegExp('^' +
-      path.replace(escapeRegExp, '\\$&')
-        .replace(optionalParam, '(?:$1)?')
-        .replace(namedParam, function(match, optional){
-          return optional ? match : '([^\/]+)';
+    var regexp = new RegExp("^" +
+      path.replace(escapeRegExp, "\\$&")
+        .replace(optionalParam, "(?:$1)?")
+        .replace(namedParam, function (match, optional) {
+          return optional ? match : "([^\/]+)";
         })
-        .replace(splatParam, '(.*?)') + '(?:\\?.*)?$');
+        .replace(splatParam, "(.*?)") + "(?:\\?.*)?$");
 
     var route = {};
 
-    route.match = function(path) {
+    route.match = function (path) {
       return regexp.test(path);
     };
 
-    route.run = function(action, path) {
+    route.run = function (action, path) {
       var params = [];
 
       if (path) {
-        params = regexp.exec(path).map(function(param, i) {
+        params = regexp.exec(path).map(function (param, i) {
           return (i > 0 && param) ? decodeURIComponent(param) : param;
         });
       }
@@ -85,45 +85,46 @@ OSM.Router = function(map, rts) {
   }
 
   var routes = [];
-  for (var r in rts)
+  for (var r in rts) {
     routes.push(new Route(r, rts[r]));
+  }
 
-  routes.recognize = function(path) {
+  routes.recognize = function (path) {
     for (var i = 0; i < this.length; i++) {
       if (this[i].match(path)) return this[i];
     }
   };
 
-  var currentPath = window.location.pathname.replace(/(.)\/$/, '$1') + window.location.search,
+  var currentPath = window.location.pathname.replace(/(.)\/$/, "$1") + window.location.search,
     currentRoute = routes.recognize(currentPath),
     currentHash = location.hash || OSM.formatHash(map);
 
   var router = {};
 
   if (window.history && window.history.pushState) {
-    $(window).on('popstate', function(e) {
+    $(window).on("popstate", function (e) {
       if (!e.originalEvent.state) return; // Is it a real popstate event or just a hash change?
       var path = window.location.pathname + window.location.search,
         route = routes.recognize(path);
       if (path === currentPath) return;
-      currentRoute.run('unload', null, route === currentRoute);
+      currentRoute.run("unload", null, route === currentRoute);
       currentPath = path;
       currentRoute = route;
-      currentRoute.run('popstate', currentPath);
-      map.setState(e.originalEvent.state, {animate: false});
+      currentRoute.run("popstate", currentPath);
+      map.setState(e.originalEvent.state, { animate: false });
     });
 
     router.route = function (url) {
-      var path = url.replace(/#.*/, ''),
+      var path = url.replace(/#.*/, ""),
         route = routes.recognize(path);
       if (!route) return false;
-      currentRoute.run('unload', null, route === currentRoute);
+      currentRoute.run("unload", null, route === currentRoute);
       var state = OSM.parseHash(url);
       map.setState(state);
       window.history.pushState(state, document.title, url);
       currentPath = path;
       currentRoute = route;
-      currentRoute.run('pushstate', currentPath);
+      currentRoute.run("pushstate", currentPath);
       return true;
     };
 
@@ -131,7 +132,7 @@ OSM.Router = function(map, rts) {
       window.history.replaceState(OSM.parseHash(url), document.title, url);
     };
 
-    router.stateChange = function(state) {
+    router.stateChange = function (state) {
       if (state.center) {
         window.history.replaceState(state, document.title, OSM.formatHash(state));
       } else {
@@ -143,19 +144,19 @@ OSM.Router = function(map, rts) {
       window.location.assign(url);
     };
 
-    router.stateChange = function(state) {
+    router.stateChange = function (state) {
       if (state.center) window.location.replace(OSM.formatHash(state));
     };
   }
 
-  router.updateHash = function() {
+  router.updateHash = function () {
     var hash = OSM.formatHash(map);
     if (hash === currentHash) return;
     currentHash = hash;
     router.stateChange(OSM.parseHash(hash));
   };
 
-  router.hashUpdated = function() {
+  router.hashUpdated = function () {
     var hash = location.hash;
     if (hash === currentHash) return;
     currentHash = hash;
@@ -166,19 +167,19 @@ OSM.Router = function(map, rts) {
 
   router.withoutMoveListener = function (callback) {
     function disableMoveListener() {
-      map.off('moveend', router.updateHash);
-      map.once('moveend', function () {
-        map.on('moveend', router.updateHash);
+      map.off("moveend", router.updateHash);
+      map.once("moveend", function () {
+        map.on("moveend", router.updateHash);
       });
     }
 
-    map.once('movestart', disableMoveListener);
+    map.once("movestart", disableMoveListener);
     callback();
-    map.off('movestart', disableMoveListener);
+    map.off("movestart", disableMoveListener);
   };
 
-  router.load = function() {
-    var loadState = currentRoute.run('load', currentPath);
+  router.load = function () {
+    var loadState = currentRoute.run("load", currentPath);
     router.stateChange(loadState || {});
   };
 
@@ -187,8 +188,8 @@ OSM.Router = function(map, rts) {
     currentRoute = routes.recognize(currentPath);
   };
 
-  map.on('moveend baselayerchange overlaylayerchange', router.updateHash);
-  $(window).on('hashchange', router.hashUpdated);
+  map.on("moveend baselayerchange overlaylayerchange", router.updateHash);
+  $(window).on("hashchange", router.hashUpdated);
 
   return router;
 };
index bdf0443056329df566e07fbc880dd8ea3153b79c..69cc259f0c9e0195ecf5157ebb8d20d3e7703cac 100644 (file)
@@ -7,30 +7,30 @@ $(document).ready(function () {
       zoomControl: false
     }).addLayer(new L.OSM.Mapnik());
 
-    var position = $('html').attr('dir') === 'rtl' ? 'topleft' : 'topright';
+    var position = $("html").attr("dir") === "rtl" ? "topleft" : "topright";
 
-    L.OSM.zoom({position: position})
+    L.OSM.zoom({ position: position })
       .addTo(map);
 
     var locate = L.control.locate({
       position: position,
-      icon: 'icon geolocate',
-      iconLoading: 'icon geolocate',
+      icon: "icon geolocate",
+      iconLoading: "icon geolocate",
       strings: {
-        title: I18n.t('javascripts.map.locate.title'),
-        popup: I18n.t('javascripts.map.locate.popup')
+        title: I18n.t("javascripts.map.locate.title"),
+        popup: I18n.t("javascripts.map.locate.popup")
       }
     }).addTo(map);
 
     var locateContainer = locate.getContainer();
 
     $(locateContainer)
-      .removeClass('leaflet-control-locate leaflet-bar')
-      .addClass('control-locate')
+      .removeClass("leaflet-control-locate leaflet-bar")
+      .addClass("control-locate")
       .children("a")
-      .attr('href', '#')
-      .removeClass('leaflet-bar-part leaflet-bar-part-single')
-      .addClass('control-button');
+      .attr("href", "#")
+      .removeClass("leaflet-bar-part leaflet-bar-part-single")
+      .addClass("control-button");
 
     if (OSM.home) {
       map.setView([OSM.home.lat, OSM.home.lon], 12);
@@ -39,7 +39,7 @@ $(document).ready(function () {
     }
 
     if ($("#map").hasClass("set_location")) {
-      var marker = L.marker([0, 0], {icon: OSM.getUserIcon()});
+      var marker = L.marker([0, 0], { icon: OSM.getUserIcon() });
 
       if (OSM.home) {
         marker.setLatLng([OSM.home.lat, OSM.home.lon]);
@@ -47,14 +47,14 @@ $(document).ready(function () {
       }
 
       map.on("click", function (e) {
-        if ($('#updatehome').is(':checked')) {
+        if ($("#updatehome").is(":checked")) {
           var zoom = map.getZoom(),
               precision = OSM.zoomPrecision(zoom),
               location = e.latlng.wrap();
 
-          $('#homerow').removeClass();
-          $('#home_lat').val(location.lat.toFixed(precision));
-          $('#home_lon').val(location.lng.toFixed(precision));
+          $("#homerow").removeClass();
+          $("#home_lat").val(location.lat.toFixed(precision));
+          $("#home_lon").val(location.lng.toFixed(precision));
 
           marker.setLatLng(e.latlng);
           marker.addTo(map);
@@ -62,9 +62,9 @@ $(document).ready(function () {
       });
     } else {
       $("[data-user]").each(function () {
-        var user = $(this).data('user');
+        var user = $(this).data("user");
         if (user.lon && user.lat) {
-          L.marker([user.lat, user.lon], {icon: OSM.getUserIcon(user.icon)}).addTo(map)
+          L.marker([user.lat, user.lon], { icon: OSM.getUserIcon(user.icon) }).addTo(map)
             .bindPopup(user.description);
         }
       });
@@ -124,4 +124,12 @@ $(document).ready(function () {
     $("#contributorTerms").html("<img src='" + OSM.SEARCHING + "' />");
     $("#contributorTerms").load(url);
   });
+
+  $("#read_ct").on("click", function () {
+    $("#continue").prop("disabled", !($(this).prop("checked") && $("#read_tou").prop("checked")));
+  });
+
+  $("#read_tou").on("click", function () {
+    $("#continue").prop("disabled", !($(this).prop("checked") && $("#read_ct").prop("checked")));
+  });
 });
index 5ba0d7cd2183e28f3ffcbaa88d5901eefece4531..35a1fdc4bdfc6a864e05ea52a2f5a37859f05daf 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+$(document).ready(function () {
   var params = OSM.params();
 
   if (params.lat && params.lon) {
@@ -6,28 +6,27 @@ $(document).ready(function() {
     params.lon = parseFloat(params.lon);
     params.zoom = params.zoom || 17;
 
-    var url = '/edit';
+    var url = "/edit";
 
     if (params.editor) {
-      url += '?editor=' + params.editor;
+      url += "?editor=" + params.editor;
     }
 
     url += OSM.formatHash(params);
 
-    $('.start-mapping').attr('href', url);
-
+    $(".start-mapping").attr("href", url);
   } else {
     var geoSuccess = function (position) {
-      window.location = '/edit' + OSM.formatHash({
+      window.location = "/edit" + OSM.formatHash({
         zoom: 17,
         lat: position.coords.latitude,
         lon: position.coords.longitude
       });
     };
 
-    $('.start-mapping').on('click', function(e) {
+    $(".start-mapping").on("click", function (e) {
       e.preventDefault();
-      $('.start-mapping').addClass('loading');
+      $(".start-mapping").addClass("loading");
 
       if (navigator.geolocation) {
         // handle firefox's weird implementation
@@ -42,6 +41,6 @@ $(document).ready(function() {
   }
 
   function manualEdit() {
-    window.location = '/?edit_help=1';
+    window.location = "/?edit_help=1";
   }
 });
index 71df217b3b5426a2ce5271d13ffdc1a5225b2166..d3488fe73766cc15e3f04bbdc8fa9d604223d3dd 100644 (file)
@@ -1664,10 +1664,18 @@ tr.turn:hover {
 
 .diary_post {
   position: relative;
-  margin-top: $lineheight/2;
   padding-top: $lineheight;
+  padding-bottom: $lineheight/2;
   border-top: 1px solid #ccc;
 
+  &:first-of-type {
+    margin-top: $lineheight/2;
+  }
+
+  &.deemphasize {
+    background-color: #fee;
+  }
+
   .post_heading {
     margin-bottom: $lineheight;
 
@@ -1712,14 +1720,17 @@ tr.turn:hover {
     max-width: 740px;
   }
   .diary-comment {
-    margin-top: $lineheight/2;
     border-top: 1px dashed #ccc;
     padding-top: $lineheight/2;
+    padding-bottom: $lineheight/2;
     &:first-child {
-      margin-top: $lineheight;
+      margin-top: $lineheight/2;
       padding-top: $lineheight;
       border-top: 1px solid #ccc;
     }
+    &.deemphasize {
+      background-color: #fee;
+    }
     p {
       margin-bottom: $lineheight/2;
     }
index 0cf511d76333cb7ba9d0975c9019fd3fabbc91b3..0f368c3dc009c7fdd0ea47014cdf0a043b2b1ecd 100644 (file)
@@ -114,18 +114,18 @@ module Api
 
     def amf_handle_error(call, rootobj, rootid)
       yield
-    rescue OSM::APIAlreadyDeletedError => ex
-      [-4, ex.object, ex.object_id]
-    rescue OSM::APIVersionMismatchError => ex
-      [-3, [rootobj, rootid], [ex.type.downcase, ex.id, ex.latest]]
-    rescue OSM::APIUserChangesetMismatchError => ex
-      [-2, ex.to_s]
-    rescue OSM::APIBadBoundingBox => ex
-      [-2, "Sorry - I can't get the map for that area. The server said: #{ex}"]
-    rescue OSM::APIError => ex
-      [-1, ex.to_s]
-    rescue StandardError => ex
-      [-2, "An unusual error happened (in #{call}). The server said: #{ex}"]
+    rescue OSM::APIAlreadyDeletedError => e
+      [-4, e.object, e.object_id]
+    rescue OSM::APIVersionMismatchError => e
+      [-3, [rootobj, rootid], [e.type.downcase, e.id, e.latest]]
+    rescue OSM::APIUserChangesetMismatchError => e
+      [-2, e.to_s]
+    rescue OSM::APIBadBoundingBox => e
+      [-2, "Sorry - I can't get the map for that area. The server said: #{e}"]
+    rescue OSM::APIError => e
+      [-1, e.to_s]
+    rescue StandardError => e
+      [-2, "An unusual error happened (in #{call}). The server said: #{e}"]
     end
 
     def amf_handle_error_with_timeout(call, rootobj, rootid)
index fb6523f4e0065a1dd9c508fc2c9e490e68cbfaaa..ffd9a112bb433048e55380b593fac7ecae0e7494 100644 (file)
@@ -364,10 +364,10 @@ module Api
       end
       # stupid Time seems to throw both of these for bad parsing, so
       # we have to catch both and ensure the correct code path is taken.
-    rescue ArgumentError => ex
-      raise OSM::APIBadUserInput, ex.message.to_s
-    rescue RuntimeError => ex
-      raise OSM::APIBadUserInput, ex.message.to_s
+    rescue ArgumentError => e
+      raise OSM::APIBadUserInput, e.message.to_s
+    rescue RuntimeError => e
+      raise OSM::APIBadUserInput, e.message.to_s
     end
 
     ##
index 27d6f3667410b13504851e0298e1eb67257c4154..e1d1a3b37844878661c9458fd41dd282a3396b81 100644 (file)
@@ -22,8 +22,8 @@ module Api
         bbox = BoundingBox.from_bbox_params(params)
         bbox.check_boundaries
         bbox.check_size
-      rescue StandardError => err
-        report_error(err.message)
+      rescue StandardError => e
+        report_error(e.message)
         return
       end
 
index b22bcfaeaff994508a4a7d2272035157e0867473..5fbece05b7a1eb08638cb6b8c64acad0897113ad 100644 (file)
@@ -25,8 +25,8 @@ module Api
         bbox = BoundingBox.from_bbox_params(params)
         bbox.check_boundaries
         bbox.check_size
-      rescue StandardError => err
-        report_error(err.message)
+      rescue StandardError => e
+        report_error(e.message)
         return
       end
 
index 5e95892e1b01924c30d219a421b0c7677a9452a0..86f1370f64d8e1d7198c3bb64e17ba7a6c13f24e 100644 (file)
@@ -8,14 +8,14 @@ module Api
 
     authorize_resource
 
-    before_action :check_database_readable, :except => [:api_read, :api_data]
-    before_action :check_database_writable, :only => [:api_create, :api_update, :api_delete]
-    before_action :check_api_readable, :only => [:api_read, :api_data]
-    before_action :check_api_writable, :only => [:api_create, :api_update, :api_delete]
-    before_action :offline_redirect, :only => [:api_create, :api_delete, :api_data]
+    before_action :check_database_readable, :except => [:show, :data]
+    before_action :check_database_writable, :only => [:create, :update, :destroy]
+    before_action :check_api_readable, :only => [:show, :data]
+    before_action :check_api_writable, :only => [:create, :update, :destroy]
+    before_action :offline_redirect, :only => [:create, :destroy, :data]
     around_action :api_call_handle_error
 
-    def api_read
+    def show
       trace = Trace.visible.find(params[:id])
 
       if trace.public? || trace.user == current_user
@@ -25,7 +25,7 @@ module Api
       end
     end
 
-    def api_update
+    def update
       trace = Trace.visible.find(params[:id])
 
       if trace.user == current_user
@@ -38,7 +38,7 @@ module Api
       end
     end
 
-    def api_delete
+    def destroy
       trace = Trace.visible.find(params[:id])
 
       if trace.user == current_user
@@ -52,7 +52,7 @@ module Api
       end
     end
 
-    def api_data
+    def data
       trace = Trace.visible.find(params[:id])
 
       if trace.public? || trace.user == current_user
@@ -68,7 +68,7 @@ module Api
       end
     end
 
-    def api_create
+    def create
       tags = params[:tags] || ""
       description = params[:description] || ""
       visibility = params[:visibility]
@@ -85,7 +85,7 @@ module Api
         trace = do_create(params[:file], tags, description, visibility)
 
         if trace.id
-          TraceImporterJob.perform_later(@trace) if Settings.trace_use_job_queue
+          TraceImporterJob.perform_later(trace) if Settings.trace_use_job_queue
           render :plain => trace.id.to_s
         elsif trace.valid?
           head :internal_server_error
index f24d50cf101d2525c8054a642cf6b8e5d68df858..3180cabccc7cac28ab8c51b808762a55116b58d9 100644 (file)
@@ -2,29 +2,29 @@ module Api
   class UsersController < ApiController
     layout "site", :except => [:api_details]
 
-    before_action :disable_terms_redirect, :only => [:api_details]
-    before_action :authorize, :only => [:api_details, :api_gpx_files]
+    before_action :disable_terms_redirect, :only => [:details]
+    before_action :authorize, :only => [:details, :gpx_files]
 
     authorize_resource
 
     before_action :check_api_readable
     around_action :api_call_handle_error
-    before_action :lookup_user_by_id, :only => [:api_read]
+    before_action :lookup_user_by_id, :only => [:show]
 
-    def api_read
+    def show
       if @user.visible?
-        render :action => :api_read, :content_type => "text/xml"
+        render :action => :show, :content_type => "text/xml"
       else
         head :gone
       end
     end
 
-    def api_details
+    def details
       @user = current_user
-      render :action => :api_read, :content_type => "text/xml"
+      render :action => :show, :content_type => "text/xml"
     end
 
-    def api_users
+    def index
       raise OSM::APIBadUserInput, "The parameter users is required, and must be of the form users=id[,id[,id...]]" unless params["users"]
 
       ids = params["users"].split(",").collect(&:to_i)
@@ -33,10 +33,10 @@ module Api
 
       @users = User.visible.find(ids)
 
-      render :action => :api_users, :content_type => "text/xml"
+      render :action => :index, :content_type => "text/xml"
     end
 
-    def api_gpx_files
+    def gpx_files
       doc = OSM::API.new.get_xml_doc
       current_user.traces.reload.each do |trace|
         doc.root << trace.to_xml_node
index c880e6add00d756ec0b0d6c061a76d00bfa4e40c..bee5e8169a4709d05f5d36ead2c6924a03f2db6a 100644 (file)
@@ -37,8 +37,8 @@ class ApplicationController < ActionController::Base
     elsif session[:token]
       session[:user] = current_user.id if self.current_user = User.authenticate(:token => session[:token])
     end
-  rescue StandardError => ex
-    logger.info("Exception authorizing user: #{ex}")
+  rescue StandardError => e
+    logger.info("Exception authorizing user: #{e}")
     reset_session
     self.current_user = nil
   end
@@ -185,22 +185,22 @@ class ApplicationController < ActionController::Base
 
   def api_call_handle_error
     yield
-  rescue ActiveRecord::RecordNotFound => ex
+  rescue ActiveRecord::RecordNotFound => e
     head :not_found
-  rescue LibXML::XML::Error, ArgumentError => ex
-    report_error ex.message, :bad_request
-  rescue ActiveRecord::RecordInvalid => ex
-    message = "#{ex.record.class} #{ex.record.id}: "
-    ex.record.errors.each { |attr, msg| message << "#{attr}: #{msg} (#{ex.record[attr].inspect})" }
+  rescue LibXML::XML::Error, ArgumentError => e
+    report_error e.message, :bad_request
+  rescue ActiveRecord::RecordInvalid => e
+    message = "#{e.record.class} #{e.record.id}: "
+    e.record.errors.each { |attr, msg| message << "#{attr}: #{msg} (#{e.record[attr].inspect})" }
     report_error message, :bad_request
-  rescue OSM::APIError => ex
-    report_error ex.message, ex.status
-  rescue AbstractController::ActionNotFound => ex
+  rescue OSM::APIError => e
+    report_error e.message, e.status
+  rescue AbstractController::ActionNotFound => e
     raise
-  rescue StandardError => ex
-    logger.info("API threw unexpected #{ex.class} exception: #{ex.message}")
-    ex.backtrace.each { |l| logger.info(l) }
-    report_error "#{ex.class}: #{ex.message}", :internal_server_error
+  rescue StandardError => e
+    logger.info("API threw unexpected #{e.class} exception: #{e.message}")
+    e.backtrace.each { |l| logger.info(l) }
+    report_error "#{e.class}: #{e.message}", :internal_server_error
   end
 
   ##
@@ -227,11 +227,11 @@ class ApplicationController < ActionController::Base
     OSM::Timer.timeout(Settings.web_timeout, Timeout::Error) do
       yield
     end
-  rescue ActionView::Template::Error => ex
-    ex = ex.cause
+  rescue ActionView::Template::Error => e
+    e = e.cause
 
-    if ex.is_a?(Timeout::Error) ||
-       (ex.is_a?(ActiveRecord::StatementInvalid) && ex.message =~ /execution expired/)
+    if e.is_a?(Timeout::Error) ||
+       (e.is_a?(ActiveRecord::StatementInvalid) && e.message =~ /execution expired/)
       render :action => "timeout"
     else
       raise
index fb1e7b702a6aa92250f24eb914be3633c4ca4cfc..f827bac3f165a00d1f94313975c291fbcf329979 100644 (file)
@@ -8,38 +8,40 @@ class DiaryEntriesController < ApplicationController
   authorize_resource
 
   before_action :lookup_user, :only => [:show, :comments]
-  before_action :check_database_writable, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
-  before_action :allow_thirdparty_images, :only => [:new, :edit, :index, :show, :comments]
+  before_action :check_database_writable, :only => [:new, :create, :edit, :update, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
+  before_action :allow_thirdparty_images, :only => [:new, :create, :edit, :update, :index, :show, :comments]
 
   def new
     @title = t "diary_entries.new.title"
 
-    if request.post?
-      @diary_entry = DiaryEntry.new(entry_params)
-      @diary_entry.user = current_user
+    default_lang = current_user.preferences.where(:k => "diary.default_language").first
+    lang_code = default_lang ? default_lang.v : current_user.preferred_language
+    @diary_entry = DiaryEntry.new(entry_params.merge(:language_code => lang_code))
+    set_map_location
+    render :action => "new"
+  end
 
-      if @diary_entry.save
-        default_lang = current_user.preferences.where(:k => "diary.default_language").first
-        if default_lang
-          default_lang.v = @diary_entry.language_code
-          default_lang.save!
-        else
-          current_user.preferences.create(:k => "diary.default_language", :v => @diary_entry.language_code)
-        end
+  def create
+    @title = t "diary_entries.new.title"
 
-        # Subscribe user to diary comments
-        @diary_entry.subscriptions.create(:user => current_user)
+    @diary_entry = DiaryEntry.new(entry_params)
+    @diary_entry.user = current_user
 
-        redirect_to :action => "index", :display_name => current_user.display_name
+    if @diary_entry.save
+      default_lang = current_user.preferences.where(:k => "diary.default_language").first
+      if default_lang
+        default_lang.v = @diary_entry.language_code
+        default_lang.save!
       else
-        render :action => "edit"
+        current_user.preferences.create(:k => "diary.default_language", :v => @diary_entry.language_code)
       end
+
+      # Subscribe user to diary comments
+      @diary_entry.subscriptions.create(:user => current_user)
+
+      redirect_to :action => "index", :display_name => current_user.display_name
     else
-      default_lang = current_user.preferences.where(:k => "diary.default_language").first
-      lang_code = default_lang ? default_lang.v : current_user.preferred_language
-      @diary_entry = DiaryEntry.new(entry_params.merge(:language_code => lang_code))
-      set_map_location
-      render :action => "edit"
+      render :action => "new"
     end
   end
 
@@ -47,19 +49,32 @@ class DiaryEntriesController < ApplicationController
     @title = t "diary_entries.edit.title"
     @diary_entry = DiaryEntry.find(params[:id])
 
+    redirect_to diary_entry_path(@diary_entry.user, @diary_entry) if current_user != @diary_entry.user
+
+    set_map_location
+  rescue ActiveRecord::RecordNotFound
+    render :action => "no_such_entry", :status => :not_found
+  end
+
+  def update
+    @title = t "diary_entries.edit.title"
+    @diary_entry = DiaryEntry.find(params[:id])
+
     if current_user != @diary_entry.user
       redirect_to diary_entry_path(@diary_entry.user, @diary_entry)
     elsif params[:diary_entry] && @diary_entry.update(entry_params)
       redirect_to diary_entry_path(@diary_entry.user, @diary_entry)
+    else
+      set_map_location
+      render :action => "edit"
     end
-
-    set_map_location
   rescue ActiveRecord::RecordNotFound
     render :action => "no_such_entry", :status => :not_found
   end
 
   def comment
     @entry = DiaryEntry.find(params[:id])
+    @comments = @entry.visible_comments
     @diary_comment = @entry.comments.build(comment_params)
     @diary_comment.user = current_user
     if @diary_comment.save
@@ -143,7 +158,7 @@ class DiaryEntriesController < ApplicationController
     @page = (params[:page] || 1).to_i
     @page_size = 20
 
-    @entries = @entries.visible
+    @entries = @entries.visible unless current_user&.administrator?
     @entries = @entries.order("created_at DESC")
     @entries = @entries.offset((@page - 1) * @page_size)
     @entries = @entries.limit(@page_size)
@@ -166,6 +181,10 @@ class DiaryEntriesController < ApplicationController
     else
       @entries = DiaryEntry.joins(:user).where(:users => { :status => %w[active confirmed] })
 
+      # Items can't be flagged as deleted in the RSS format.
+      # For the general feeds, allow a delay before publishing, to help spam fighting
+      @entries = @entries.where("created_at < :time", :time => Settings.diary_feed_delay.hours.ago)
+
       if params[:language]
         @entries = @entries.where(:language_code => params[:language])
         @title = t("diary_entries.feed.language.title", :language_name => Language.find(params[:language]).english_name)
@@ -177,7 +196,6 @@ class DiaryEntriesController < ApplicationController
         @link = url_for :action => "index", :host => Settings.server_url, :protocol => Settings.server_protocol
       end
     end
-
     @entries = @entries.visible.includes(:user).order("created_at DESC").limit(20)
   end
 
@@ -185,6 +203,7 @@ class DiaryEntriesController < ApplicationController
     @entry = @user.diary_entries.visible.where(:id => params[:id]).first
     if @entry
       @title = t "diary_entries.show.title", :user => params[:display_name], :title => @entry.title
+      @comments = current_user&.administrator? ? @entry.comments : @entry.visible_comments
     else
       @title = t "diary_entries.no_such_entry.title", :id => params[:id]
       render :action => "no_such_entry", :status => :not_found
@@ -197,12 +216,24 @@ class DiaryEntriesController < ApplicationController
     redirect_to :action => "index", :display_name => entry.user.display_name
   end
 
+  def unhide
+    entry = DiaryEntry.find(params[:id])
+    entry.update(:visible => true)
+    redirect_to :action => "index", :display_name => entry.user.display_name
+  end
+
   def hidecomment
     comment = DiaryComment.find(params[:comment])
     comment.update(:visible => false)
     redirect_to diary_entry_path(comment.diary_entry.user, comment.diary_entry)
   end
 
+  def unhidecomment
+    comment = DiaryComment.find(params[:comment])
+    comment.update(:visible => true)
+    redirect_to diary_entry_path(comment.diary_entry.user, comment.diary_entry)
+  end
+
   def comments
     @comment_pages, @comments = paginate(:diary_comments,
                                          :conditions => {
index 4a8f7765065ab11c7f6db3caa668f37826f2fc4e..d1af43a724e17ea75778648cf7054a765bccc6ce 100644 (file)
@@ -98,8 +98,8 @@ class GeocoderController < ApplicationController
     end
 
     render :action => "results"
-  rescue StandardError => ex
-    @error = "Error contacting geocoder.ca: #{ex}"
+  rescue StandardError => e
+    @error = "Error contacting geocoder.ca: #{e}"
     render :action => "error"
   end
 
@@ -166,8 +166,8 @@ class GeocoderController < ApplicationController
     end
 
     render :action => "results"
-  rescue StandardError => ex
-    @error = "Error contacting nominatim.openstreetmap.org: #{ex}"
+  rescue StandardError => e
+    @error = "Error contacting nominatim.openstreetmap.org: #{e}"
     render :action => "error"
   end
 
@@ -198,8 +198,8 @@ class GeocoderController < ApplicationController
     end
 
     render :action => "results"
-  rescue StandardError => ex
-    @error = "Error contacting api.geonames.org: #{ex}"
+  rescue StandardError => e
+    @error = "Error contacting api.geonames.org: #{e}"
     render :action => "error"
   end
 
@@ -230,8 +230,8 @@ class GeocoderController < ApplicationController
     end
 
     render :action => "results"
-  rescue StandardError => ex
-    @error = "Error contacting nominatim.openstreetmap.org: #{ex}"
+  rescue StandardError => e
+    @error = "Error contacting nominatim.openstreetmap.org: #{e}"
     render :action => "error"
   end
 
@@ -261,8 +261,8 @@ class GeocoderController < ApplicationController
     end
 
     render :action => "results"
-  rescue StandardError => ex
-    @error = "Error contacting api.geonames.org: #{ex}"
+  rescue StandardError => e
+    @error = "Error contacting api.geonames.org: #{e}"
     render :action => "error"
   end
 
index 334aa2aa654fecbd13a3453e1fd53c076154ce57..3497e92d5fdc9348e80e3c9b6bbaf40036bd9a7f 100644 (file)
@@ -113,8 +113,8 @@ class TracesController < ApplicationController
       begin
         @trace = do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
                            params[:trace][:description], params[:trace][:visibility])
-      rescue StandardError => ex
-        logger.debug ex
+      rescue StandardError => e
+        logger.debug e
       end
 
       if @trace.id
index 9b97fa0a1f08af46d9d5657c12c75ad070acc052..e41330c4b40306e808423796c70bf6ef5053a93f 100644 (file)
@@ -36,7 +36,7 @@ class UsersController < ApplicationController
   def save
     @title = t "users.new.title"
 
-    if params[:decline]
+    if params[:decline] || !(params[:read_tou] && params[:read_ct])
       if current_user
         current_user.terms_seen = true
 
@@ -47,12 +47,15 @@ class UsersController < ApplicationController
         else
           redirect_to :action => :account, :display_name => current_user.display_name
         end
-      else
+      elsif params[:decline]
         redirect_to t("users.terms.declined")
+      else
+        redirect_to :action => :terms
       end
     elsif current_user
       unless current_user.terms_agreed?
         current_user.consider_pd = params[:user][:consider_pd]
+        current_user.tou_agreed = Time.now.getutc
         current_user.terms_agreed = Time.now.getutc
         current_user.terms_seen = true
 
@@ -73,6 +76,7 @@ class UsersController < ApplicationController
         current_user.creation_ip = request.remote_ip
         current_user.languages = http_accept_language.user_preferred_languages
         current_user.terms_agreed = Time.now.getutc
+        current_user.tou_agreed = Time.now.getutc
         current_user.terms_seen = true
 
         if current_user.auth_uid.blank?
index 668eeb0e5aa66668ee1118c43bbf36fa14600040..ed9997f6d778f7744a66d8ab02abe3c28c6ddb1d 100644 (file)
@@ -22,4 +22,19 @@ module UserBlocksHelper
       I18n.t("user_blocks.helper.time_past", :time => friendly_date(last_time)).html_safe
     end
   end
+
+  def block_duration_in_words(duration)
+    parts = ActiveSupport::Duration.build(duration).parts
+    if duration < 1.day
+      I18n.t("user_blocks.helper.block_duration.hours", :count => parts[:hours])
+    elsif duration < 1.week
+      I18n.t("user_blocks.helper.block_duration.days", :count => parts[:days])
+    elsif duration < 1.month
+      I18n.t("user_blocks.helper.block_duration.weeks", :count => parts[:weeks])
+    elsif duration < 1.year
+      I18n.t("user_blocks.helper.block_duration.months", :count => parts[:months])
+    else
+      I18n.t("user_blocks.helper.block_duration.years", :count => parts[:years])
+    end
+  end
 end
index 6b8943aa20f2dc5dca20dfdd979429f6f0096bbc..e4395bf3d378356f06fb9bd896e8e90862cbf8d9 100644 (file)
@@ -10,10 +10,10 @@ class TraceImporterJob < ApplicationJob
       Notifier.gpx_failure(trace, "0 points parsed ok. Do they all have lat,lng,alt,timestamp?").deliver_later
       trace.destroy
     end
-  rescue StandardError => ex
-    logger.info ex.to_s
-    ex.backtrace.each { |l| logger.info l }
-    Notifier.gpx_failure(trace, ex.to_s + "\n" + ex.backtrace.join("\n")).deliver_later
+  rescue StandardError => e
+    logger.info e.to_s
+    e.backtrace.each { |l| logger.info l }
+    Notifier.gpx_failure(trace, e.to_s + "\n" + e.backtrace.join("\n")).deliver_later
     trace.destroy
   end
 end
index 095bad89b942d07e62ee74b18e999100905c456b..cf83e673c0ecfbcfdf48dd82c73d74104eae7516 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: acls
 #
-#  id      :integer          not null, primary key
+#  id      :bigint(8)        not null, primary key
 #  address :inet
 #  k       :string           not null
 #  v       :string
@@ -10,7 +10,9 @@
 #
 # Indexes
 #
-#  acls_k_idx  (k)
+#  acls_k_idx             (k)
+#  index_acls_on_address  (address) USING gist
+#  index_acls_on_domain   (domain)
 #
 
 class Acl < ActiveRecord::Base
index 3ca719f6cc663dff860a2157817d34966edb172c..d57086a8e040062af55313a99cbb8b8dd477ab60 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: changesets
 #
-#  id          :integer          not null, primary key
-#  user_id     :integer          not null
+#  id          :bigint(8)        not null, primary key
+#  user_id     :bigint(8)        not null
 #  created_at  :datetime         not null
 #  min_lat     :integer
 #  max_lat     :integer
@@ -14,7 +14,7 @@
 #
 # Indexes
 #
-#  changesets_bbox_idx                (min_lat,max_lat,min_lon,max_lon)
+#  changesets_bbox_idx                (min_lat,max_lat,min_lon,max_lon) USING gist
 #  changesets_closed_at_idx           (closed_at)
 #  changesets_created_at_idx          (created_at)
 #  changesets_user_id_created_at_idx  (user_id,created_at)
@@ -88,8 +88,8 @@ class Changeset < ActiveRecord::Base
       return Changeset.from_xml_node(pt, create)
     end
     raise OSM::APIBadXMLError.new("changeset", xml, "XML doesn't contain an osm/changeset element.")
-  rescue LibXML::XML::Error, ArgumentError => ex
-    raise OSM::APIBadXMLError.new("changeset", xml, ex.message)
+  rescue LibXML::XML::Error, ArgumentError => e
+    raise OSM::APIBadXMLError.new("changeset", xml, e.message)
   end
 
   def self.from_xml_node(pt, create = false)
index a0ad6f2ea4a17dc5f3db58d3d01c1bb4d646886b..529641c7e94ffb968be8fd31e0532e0e4eb97c81 100644 (file)
@@ -3,8 +3,8 @@
 # Table name: changeset_comments
 #
 #  id           :integer          not null, primary key
-#  changeset_id :integer          not null
-#  author_id    :integer          not null
+#  changeset_id :bigint(8)        not null
+#  author_id    :bigint(8)        not null
 #  body         :text             not null
 #  created_at   :datetime         not null
 #  visible      :boolean          not null
index 942fafb2a34d61646d2e38d9f2fd4044d34c81b5..751029e03995c60835dc1d7eb0ab79a21fb48b3e 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: changeset_tags
 #
-#  changeset_id :integer          not null, primary key
+#  changeset_id :bigint(8)        not null, primary key
 #  k            :string           default(""), not null, primary key
 #  v            :string           default(""), not null
 #
index ade7a64ea317fd38d00dc5b5ef6d5318068bc904..4ae21be8881922e49c799ba0868e93ba0f5e77f5 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: diary_comments
 #
-#  id             :integer          not null, primary key
-#  diary_entry_id :integer          not null
-#  user_id        :integer          not null
+#  id             :bigint(8)        not null, primary key
+#  diary_entry_id :bigint(8)        not null
+#  user_id        :bigint(8)        not null
 #  body           :text             not null
 #  created_at     :datetime         not null
 #  updated_at     :datetime         not null
index d6124199352481895af958f7ae5c25b7e8c02c1a..4affe8b597f1269e92839fa201ba9bc683ee93e7 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: diary_entries
 #
-#  id            :integer          not null, primary key
-#  user_id       :integer          not null
+#  id            :bigint(8)        not null, primary key
+#  user_id       :bigint(8)        not null
 #  title         :string           not null
 #  body          :text             not null
 #  created_at    :datetime         not null
index 6d24c4598c42af2eb22c98732c05f605f1d6a166..6e9a103adafac0d1315ecd1e956ff32cfc0abc2e 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: diary_entry_subscriptions
 #
-#  user_id        :integer          not null, primary key
-#  diary_entry_id :integer          not null, primary key
+#  user_id        :bigint(8)        not null, primary key
+#  diary_entry_id :bigint(8)        not null, primary key
 #
 # Indexes
 #
index 86da87b932ac99b332e95c864f346c12cc8a7ba4..615da10767c1a9c08bf9e2895b8859df195ae239 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: friends
 #
-#  id             :integer          not null, primary key
-#  user_id        :integer          not null
-#  friend_user_id :integer          not null
+#  id             :bigint(8)        not null, primary key
+#  user_id        :bigint(8)        not null
+#  friend_user_id :bigint(8)        not null
 #
 # Indexes
 #
index e3a3ec921b62f25cdfa13713aabb2b2c2490f371..4ab129e9184f6593012bacd98c3de504ca06662c 100644 (file)
@@ -2,13 +2,13 @@
 #
 # Table name: messages
 #
-#  id                :integer          not null, primary key
-#  from_user_id      :integer          not null
+#  id                :bigint(8)        not null, primary key
+#  from_user_id      :bigint(8)        not null
 #  title             :string           not null
 #  body              :text             not null
 #  sent_on           :datetime         not null
 #  message_read      :boolean          default(FALSE), not null
-#  to_user_id        :integer          not null
+#  to_user_id        :bigint(8)        not null
 #  to_user_visible   :boolean          default(TRUE), not null
 #  from_user_visible :boolean          default(TRUE), not null
 #  body_format       :enum             default("markdown"), not null
index 989cdee5cd20cc4a5b86d910cfedd9d54eda79ca..91a1dbc41c3bec52c9813ae66d95dbe888b4f20a 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: current_nodes
 #
-#  id           :integer          not null, primary key
+#  id           :bigint(8)        not null, primary key
 #  latitude     :integer          not null
 #  longitude    :integer          not null
-#  changeset_id :integer          not null
+#  changeset_id :bigint(8)        not null
 #  visible      :boolean          not null
 #  timestamp    :datetime         not null
-#  tile         :integer          not null
-#  version      :integer          not null
+#  tile         :bigint(8)        not null
+#  version      :bigint(8)        not null
 #
 # Indexes
 #
@@ -79,8 +79,8 @@ class Node < ActiveRecord::Base
       return Node.from_xml_node(pt, create)
     end
     raise OSM::APIBadXMLError.new("node", xml, "XML doesn't contain an osm/node element.")
-  rescue LibXML::XML::Error, ArgumentError => ex
-    raise OSM::APIBadXMLError.new("node", xml, ex.message)
+  rescue LibXML::XML::Error, ArgumentError => e
+    raise OSM::APIBadXMLError.new("node", xml, e.message)
   end
 
   def self.from_xml_node(pt, create = false)
index 43915bc1265df1155f31dc51bf8b457620600bbe..86404599b266de54e2896473cbb4abfdb0b10697 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: current_node_tags
 #
-#  node_id :integer          not null, primary key
+#  node_id :bigint(8)        not null, primary key
 #  k       :string           default(""), not null, primary key
 #  v       :string           default(""), not null
 #
index d96addbe789f3d7f62314c0d68a12e5228fae97d..d4f9a801f41642877a0e1ca13cdb609fe11f9405 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: notes
 #
-#  id         :integer          not null, primary key
+#  id         :bigint(8)        not null, primary key
 #  latitude   :integer          not null
 #  longitude  :integer          not null
-#  tile       :integer          not null
+#  tile       :bigint(8)        not null
 #  updated_at :datetime         not null
 #  created_at :datetime         not null
 #  status     :enum             not null
index f94032e1e3e785a398b6e5f1d06afe195f06d331..388f890a67c4fb5ea0939be59cef429475e2ca0a 100644 (file)
@@ -2,18 +2,18 @@
 #
 # Table name: note_comments
 #
-#  id         :integer          not null, primary key
-#  note_id    :integer          not null
+#  id         :bigint(8)        not null, primary key
+#  note_id    :bigint(8)        not null
 #  visible    :boolean          not null
 #  created_at :datetime         not null
 #  author_ip  :inet
-#  author_id  :integer
+#  author_id  :bigint(8)
 #  body       :text
 #  event      :enum
 #
 # Indexes
 #
-#  index_note_comments_on_body        (to_tsvector('english'::regconfig, body))
+#  index_note_comments_on_body        (to_tsvector('english'::regconfig, body)) USING gin
 #  index_note_comments_on_created_at  (created_at)
 #  note_comments_note_id_idx          (note_id)
 #
index 9690dc46ca807106f7080f41e88e9e94048d6e78..cc2327d0883f9b1ef2034d7957c1f62c84057542 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: nodes
 #
-#  node_id      :integer          not null, primary key
+#  node_id      :bigint(8)        not null, primary key
 #  latitude     :integer          not null
 #  longitude    :integer          not null
-#  changeset_id :integer          not null
+#  changeset_id :bigint(8)        not null
 #  visible      :boolean          not null
 #  timestamp    :datetime         not null
-#  tile         :integer          not null
-#  version      :integer          not null, primary key
+#  tile         :bigint(8)        not null
+#  version      :bigint(8)        not null, primary key
 #  redaction_id :integer
 #
 # Indexes
index 77b78751b4684a81a720ebe3069cf441a1a6fab4..a3e1c3aaf4a49d4a22d291ab942c7cc84b4e0f32 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: node_tags
 #
-#  node_id :integer          not null, primary key
-#  version :integer          not null, primary key
+#  node_id :bigint(8)        not null, primary key
+#  version :bigint(8)        not null, primary key
 #  k       :string           default(""), not null, primary key
 #  v       :string           default(""), not null
 #
index 3470561cee4df036a318d2901a7c59752ae19bbd..109f7d968da1eba835f1fbcd557048ce7cd8207b 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: relations
 #
-#  relation_id  :integer          default(0), not null, primary key
-#  changeset_id :integer          not null
+#  relation_id  :bigint(8)        default(0), not null, primary key
+#  changeset_id :bigint(8)        not null
 #  timestamp    :datetime         not null
-#  version      :integer          not null, primary key
+#  version      :bigint(8)        not null, primary key
 #  visible      :boolean          default(TRUE), not null
 #  redaction_id :integer
 #
index a746374357d6b47a74b750e191a297646cce43ca..f8d4a359f920cfca74818bb20c935b69deaf8af6 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: relation_members
 #
-#  relation_id :integer          default(0), not null, primary key
+#  relation_id :bigint(8)        default(0), not null, primary key
 #  member_type :enum             not null
-#  member_id   :integer          not null
+#  member_id   :bigint(8)        not null
 #  member_role :string           not null
-#  version     :integer          default(0), not null, primary key
+#  version     :bigint(8)        default(0), not null, primary key
 #  sequence_id :integer          default(0), not null, primary key
 #
 # Indexes
index 4a247949c48c90d298e84c4c9e6034ddaf5e4bb3..c674f708bc0214a097ccc27172a7bea0d7a2e488 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: relation_tags
 #
-#  relation_id :integer          default(0), not null, primary key
+#  relation_id :bigint(8)        default(0), not null, primary key
 #  k           :string           default(""), not null, primary key
 #  v           :string           default(""), not null
-#  version     :integer          not null, primary key
+#  version     :bigint(8)        not null, primary key
 #
 # Foreign Keys
 #
index baca05d33549738c391d373602782515a7a94eff..31e230c3869e2ee197f46a8de823834319536c5f 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: ways
 #
-#  way_id       :integer          default(0), not null, primary key
-#  changeset_id :integer          not null
+#  way_id       :bigint(8)        default(0), not null, primary key
+#  changeset_id :bigint(8)        not null
 #  timestamp    :datetime         not null
-#  version      :integer          not null, primary key
+#  version      :bigint(8)        not null, primary key
 #  visible      :boolean          default(TRUE), not null
 #  redaction_id :integer
 #
index e1627d3faa3091c002bef4fbb2b0f07a56fd2492..836e76e47eb112e2764e6fc4c8876ab30cbdff17 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: way_nodes
 #
-#  way_id      :integer          not null, primary key
-#  node_id     :integer          not null
-#  version     :integer          not null, primary key
-#  sequence_id :integer          not null, primary key
+#  way_id      :bigint(8)        not null, primary key
+#  node_id     :bigint(8)        not null
+#  version     :bigint(8)        not null, primary key
+#  sequence_id :bigint(8)        not null, primary key
 #
 # Indexes
 #
index 5832f6d4fa2bad0addb1b093cfd83d53124ce051..ae4ad605e70b1365f27d64c714b3085ec8f16603 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: way_tags
 #
-#  way_id  :integer          default(0), not null, primary key
+#  way_id  :bigint(8)        default(0), not null, primary key
 #  k       :string           not null, primary key
 #  v       :string           not null
-#  version :integer          not null, primary key
+#  version :bigint(8)        not null, primary key
 #
 # Foreign Keys
 #
index e6d7487066fed12e879442d8e2cae74b9b3c1f81..d9b2a5579c5bf3b72831649b5d4d04cc5ca41326 100644 (file)
@@ -7,7 +7,7 @@
 #  description        :text
 #  created_at         :datetime
 #  updated_at         :datetime
-#  user_id            :integer          not null
+#  user_id            :bigint(8)        not null
 #  description_format :enum             default("markdown"), not null
 #
 # Foreign Keys
index f55711a69bb75b060ae7a0ec61a120afbf852657..bcac9d04bb6a3ad2cbe75ad2fe81cd57147c36b5 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: current_relations
 #
-#  id           :integer          not null, primary key
-#  changeset_id :integer          not null
+#  id           :bigint(8)        not null, primary key
+#  changeset_id :bigint(8)        not null
 #  timestamp    :datetime         not null
 #  visible      :boolean          not null
-#  version      :integer          not null
+#  version      :bigint(8)        not null
 #
 # Indexes
 #
@@ -62,8 +62,8 @@ class Relation < ActiveRecord::Base
       return Relation.from_xml_node(pt, create)
     end
     raise OSM::APIBadXMLError.new("node", xml, "XML doesn't contain an osm/relation element.")
-  rescue LibXML::XML::Error, ArgumentError => ex
-    raise OSM::APIBadXMLError.new("relation", xml, ex.message)
+  rescue LibXML::XML::Error, ArgumentError => e
+    raise OSM::APIBadXMLError.new("relation", xml, e.message)
   end
 
   def self.from_xml_node(pt, create = false)
index 3e5cdfca27e1513856f12c4adf04fc89e95c5bd6..7c399c3a88936b1769bb1657cf23c3db232d9e92 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: current_relation_members
 #
-#  relation_id :integer          not null, primary key
+#  relation_id :bigint(8)        not null, primary key
 #  member_type :enum             not null
-#  member_id   :integer          not null
+#  member_id   :bigint(8)        not null
 #  member_role :string           not null
 #  sequence_id :integer          default(0), not null, primary key
 #
index 151615f72b06272f4f634be0fba3eeed3c6ae9b7..b186f505d13142bc751f28428f2f29ce8fc7b53f 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: current_relation_tags
 #
-#  relation_id :integer          not null, primary key
+#  relation_id :bigint(8)        not null, primary key
 #  k           :string           default(""), not null, primary key
 #  v           :string           default(""), not null
 #
index 0e876332874487acbafb3c5b17013e0cbb2b579b..7c97b4e96b64cc2c672ebafb9ebd4511b6a69dce 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: gpx_files
 #
-#  id          :integer          not null, primary key
-#  user_id     :integer          not null
+#  id          :bigint(8)        not null, primary key
+#  user_id     :bigint(8)        not null
 #  visible     :boolean          default(TRUE), not null
 #  name        :string           default(""), not null
-#  size        :integer
+#  size        :bigint(8)
 #  latitude    :float
 #  longitude   :float
 #  timestamp   :datetime         not null
@@ -43,12 +43,7 @@ class Trace < ActiveRecord::Base
   validates :timestamp, :presence => true
   validates :visibility, :inclusion => %w[private public trackable identifiable]
 
-  def destroy
-    super
-    FileUtils.rm_f(trace_name)
-    FileUtils.rm_f(icon_picture_name)
-    FileUtils.rm_f(large_picture_name)
-  end
+  after_destroy :remove_files
 
   def tagstring
     tags.collect(&:tag).join(", ")
@@ -208,8 +203,8 @@ class Trace < ActiveRecord::Base
     end
 
     raise OSM::APIBadXMLError.new("trace", xml, "XML doesn't contain an osm/gpx_file element.")
-  rescue LibXML::XML::Error, ArgumentError => ex
-    raise OSM::APIBadXMLError.new("trace", xml, ex.message)
+  rescue LibXML::XML::Error, ArgumentError => e
+    raise OSM::APIBadXMLError.new("trace", xml, e.message)
   end
 
   def update_from_xml_node(pt, create = false)
@@ -343,4 +338,12 @@ class Trace < ActiveRecord::Base
 
     gpx
   end
+
+  private
+
+  def remove_files
+    FileUtils.rm_f(trace_name)
+    FileUtils.rm_f(icon_picture_name)
+    FileUtils.rm_f(large_picture_name)
+  end
 end
index 445688c5554389e66aa90b6e77fb8dca6b354c67..6473c943031134e87a1a9d99189a07614a9066ff 100644 (file)
@@ -6,9 +6,9 @@
 #  trackid   :integer          not null
 #  latitude  :integer          not null
 #  longitude :integer          not null
-#  gpx_id    :integer          not null
+#  gpx_id    :bigint(8)        not null
 #  timestamp :datetime
-#  tile      :integer
+#  tile      :bigint(8)
 #
 # Indexes
 #
index 84b6c6dfa8394404c3757a20145e1a77a6791c82..8d2f4ffface4d307c0d1013ec212781010c8879d 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: gpx_file_tags
 #
-#  gpx_id :integer          default(0), not null
+#  gpx_id :bigint(8)        default(0), not null
 #  tag    :string           not null
-#  id     :integer          not null, primary key
+#  id     :bigint(8)        not null, primary key
 #
 # Indexes
 #
index 9f13108434793d9f027fe67ac7eab81c19324cd5..2979b13d75309cb89a392db02df4fdef3fa6dcb0 100644 (file)
@@ -3,7 +3,7 @@
 # Table name: users
 #
 #  email               :string           not null
-#  id                  :integer          not null, primary key
+#  id                  :bigint(8)        not null, primary key
 #  pass_crypt          :string           not null
 #  creation_time       :datetime         not null
 #  display_name        :string           default(""), not null
@@ -33,7 +33,8 @@
 #  image_use_gravatar  :boolean          default(FALSE), not null
 #  image_content_type  :string
 #  auth_provider       :string
-#  home_tile           :integer
+#  home_tile           :bigint(8)
+#  tou_agreed          :datetime
 #
 # Indexes
 #
index 27bc40498b90ba455006ffd054a2eadbb3e7d60f..92cee16cd6e96bcc57e4718042c00a9cc7d57d59 100644 (file)
@@ -3,12 +3,12 @@
 # Table name: user_blocks
 #
 #  id            :integer          not null, primary key
-#  user_id       :integer          not null
-#  creator_id    :integer          not null
+#  user_id       :bigint(8)        not null
+#  creator_id    :bigint(8)        not null
 #  reason        :text             not null
 #  ends_at       :datetime         not null
 #  needs_view    :boolean          default(FALSE), not null
-#  revoker_id    :integer
+#  revoker_id    :bigint(8)
 #  created_at    :datetime
 #  updated_at    :datetime
 #  reason_format :enum             default("markdown"), not null
index 3963bd02aeb47ade7f6b47faf15293412b63c604..583ced3c56d19ed15de8dd2a4ff6922b37312de8 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: user_preferences
 #
-#  user_id :integer          not null, primary key
+#  user_id :bigint(8)        not null, primary key
 #  k       :string           not null, primary key
 #  v       :string           not null
 #
index adf569a03fe79a5d5827a5e33ddf4cdddb12e94d..f3d48cade4bcfeb53df717b509cc0ab90ac45d39 100644 (file)
@@ -3,11 +3,11 @@
 # Table name: user_roles
 #
 #  id         :integer          not null, primary key
-#  user_id    :integer          not null
+#  user_id    :bigint(8)        not null
 #  role       :enum             not null
 #  created_at :datetime
 #  updated_at :datetime
-#  granter_id :integer          not null
+#  granter_id :bigint(8)        not null
 #
 # Indexes
 #
index 0d1e16e8acead524674dbca9aafb58398fe6cb14..844357d8d0242000db462047ea6be54bd01342c1 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: user_tokens
 #
-#  id      :integer          not null, primary key
-#  user_id :integer          not null
+#  id      :bigint(8)        not null, primary key
+#  user_id :bigint(8)        not null
 #  token   :string           not null
 #  expiry  :datetime         not null
 #  referer :text
index 6573b9805ecc449aac0b365e5a9a31798b86f2c2..6fcaf39cc7c021801adc22e054820834430b7353 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: current_ways
 #
-#  id           :integer          not null, primary key
-#  changeset_id :integer          not null
+#  id           :bigint(8)        not null, primary key
+#  changeset_id :bigint(8)        not null
 #  timestamp    :datetime         not null
 #  visible      :boolean          not null
-#  version      :integer          not null
+#  version      :bigint(8)        not null
 #
 # Indexes
 #
@@ -60,8 +60,8 @@ class Way < ActiveRecord::Base
       return Way.from_xml_node(pt, create)
     end
     raise OSM::APIBadXMLError.new("node", xml, "XML doesn't contain an osm/way element.")
-  rescue LibXML::XML::Error, ArgumentError => ex
-    raise OSM::APIBadXMLError.new("way", xml, ex.message)
+  rescue LibXML::XML::Error, ArgumentError => e
+    raise OSM::APIBadXMLError.new("way", xml, e.message)
   end
 
   def self.from_xml_node(pt, create = false)
index 5c09cd740cefc92b442ed4dcff59733e6c310aa6..0788a631c8c9c3969ea79dc84988d81fd61f58b6 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: current_way_nodes
 #
-#  way_id      :integer          not null, primary key
-#  node_id     :integer          not null
-#  sequence_id :integer          not null, primary key
+#  way_id      :bigint(8)        not null, primary key
+#  node_id     :bigint(8)        not null
+#  sequence_id :bigint(8)        not null, primary key
 #