decidim-meetings 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/commands/decidim/meetings/admin/create_meeting.rb +6 -17
- data/app/commands/decidim/meetings/admin/update_meeting.rb +6 -7
- data/app/controllers/decidim/meetings/application_controller.rb +1 -0
- data/app/controllers/decidim/meetings/meetings_controller.rb +14 -9
- data/app/forms/decidim/meetings/admin/meeting_form.rb +12 -1
- data/app/helpers/decidim/meetings/admin/application_helper.rb +1 -1
- data/app/helpers/decidim/meetings/application_helper.rb +2 -1
- data/app/helpers/decidim/meetings/map_helper.rb +10 -32
- data/app/models/decidim/meetings/meeting.rb +2 -1
- data/app/services/decidim/meetings/meeting_search.rb +0 -5
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +5 -3
- data/app/views/decidim/meetings/meetings/_filters.html.erb +5 -3
- data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +11 -1
- data/app/views/decidim/meetings/meetings/_tags.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/index.html.erb +27 -32
- data/app/views/decidim/meetings/meetings/index.js.erb +2 -2
- data/app/views/decidim/meetings/meetings/show.html.erb +2 -15
- data/config/i18n-tasks.yml +1 -1
- data/config/locales/ca.yml +18 -3
- data/config/locales/en.yml +20 -3
- data/config/locales/es.yml +18 -3
- data/config/locales/eu.yml +75 -1
- data/config/locales/fi.yml +98 -0
- data/db/migrate/20170215132546_add_reference_to_meetings.rb +7 -0
- data/lib/decidim/meetings/admin_engine.rb +0 -26
- data/lib/decidim/meetings/list_engine.rb +1 -9
- metadata +14 -45
- data/app/assets/config/decidim_meetings_manifest.js +0 -2
- data/app/assets/javascripts/decidim/meetings/map.js.es6.erb +0 -97
- data/app/assets/stylesheets/decidim/meetings/map.css +0 -3
- data/app/services/decidim/meetings/static_map_generator.rb +0 -50
- data/app/views/decidim/meetings/meetings/_address_details.html.erb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d6c1f40dbb0175a5cd5c11bc88557d06d66b89c
|
4
|
+
data.tar.gz: f2da758bcd9b1737ab28eecce25eff1b37fc8f97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7079774eb36091ab6fe3efed02111e85e32673449eb6565cbb43aae81555658af56c817bc44d2d559da164358c1a75a3d48ab31efff19b97424e3591e1be16af
|
7
|
+
data.tar.gz: 55329e0fbf37991eb434095e4ae2c6facbf37d8cf41b20cfc676aefb58967de57884b5db87cb94a6dfcc9652846f004594ec0846a9c6410b85f641e97fc8c294
|
@@ -15,17 +15,14 @@ module Decidim
|
|
15
15
|
def call
|
16
16
|
return broadcast(:invalid) if @form.invalid?
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
create_meeting
|
21
|
-
|
22
|
-
broadcast(:ok)
|
18
|
+
create_meeting!
|
19
|
+
broadcast(:ok, @meeting)
|
23
20
|
end
|
24
21
|
|
25
22
|
private
|
26
23
|
|
27
|
-
def
|
28
|
-
@meeting = Meeting.
|
24
|
+
def create_meeting!
|
25
|
+
@meeting = Meeting.create!(
|
29
26
|
scope: @form.scope,
|
30
27
|
category: @form.category,
|
31
28
|
title: @form.title,
|
@@ -33,21 +30,13 @@ module Decidim
|
|
33
30
|
end_time: @form.end_time,
|
34
31
|
start_time: @form.start_time,
|
35
32
|
address: @form.address,
|
33
|
+
latitude: @form.latitude,
|
34
|
+
longitude: @form.longitude,
|
36
35
|
location: @form.location,
|
37
36
|
location_hints: @form.location_hints,
|
38
37
|
feature: @form.current_feature
|
39
38
|
)
|
40
39
|
end
|
41
|
-
|
42
|
-
def geocode_meeting
|
43
|
-
result = @meeting.geocode
|
44
|
-
@form.errors.add :address, :invalid unless result
|
45
|
-
result
|
46
|
-
end
|
47
|
-
|
48
|
-
def create_meeting
|
49
|
-
@meeting.save!
|
50
|
-
end
|
51
40
|
end
|
52
41
|
end
|
53
42
|
end
|
@@ -20,17 +20,14 @@ module Decidim
|
|
20
20
|
def call
|
21
21
|
return broadcast(:invalid) if @form.invalid?
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
update_meeting
|
26
|
-
|
27
|
-
broadcast(:ok)
|
23
|
+
update_meeting!
|
24
|
+
broadcast(:ok, @meeting)
|
28
25
|
end
|
29
26
|
|
30
27
|
private
|
31
28
|
|
32
|
-
def
|
33
|
-
@meeting.
|
29
|
+
def update_meeting!
|
30
|
+
@meeting.update_attributes!(
|
34
31
|
scope: @form.scope,
|
35
32
|
category: @form.category,
|
36
33
|
title: @form.title,
|
@@ -38,6 +35,8 @@ module Decidim
|
|
38
35
|
end_time: @form.end_time,
|
39
36
|
start_time: @form.start_time,
|
40
37
|
address: @form.address,
|
38
|
+
latitude: @form.latitude,
|
39
|
+
longitude: @form.longitude,
|
41
40
|
location: @form.location,
|
42
41
|
location_hints: @form.location_hints
|
43
42
|
)
|
@@ -8,6 +8,7 @@ module Decidim
|
|
8
8
|
# Note that it inherits from `Decidim::Components::BaseController`, which
|
9
9
|
# override its layout and provide all kinds of useful methods.
|
10
10
|
class ApplicationController < Decidim::Features::BaseController
|
11
|
+
helper Decidim::Meetings::ApplicationHelper
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
@@ -8,15 +8,24 @@ module Decidim
|
|
8
8
|
|
9
9
|
helper_method :meetings, :geocoded_meetings, :meeting
|
10
10
|
|
11
|
-
def index
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def index
|
12
|
+
if search.results.empty? && params.dig("filter", "date") != "past"
|
13
|
+
@past_meetings = search_klass.new(search_params.merge(date: "past"))
|
14
|
+
unless @past_meetings.results.empty?
|
15
|
+
params[:filter] ||= {}
|
16
|
+
params[:filter][:date] = "past"
|
17
|
+
@forced_past_meetings = true
|
18
|
+
@search = @past_meetings
|
19
|
+
end
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
private
|
19
24
|
|
25
|
+
def meeting
|
26
|
+
@meeting ||= Meeting.where(feature: current_feature).find(params[:id])
|
27
|
+
end
|
28
|
+
|
20
29
|
def meetings
|
21
30
|
@meetings ||= search.results.page(params[:page]).per(12)
|
22
31
|
end
|
@@ -25,10 +34,6 @@ module Decidim
|
|
25
34
|
@geocoded_meetings ||= search.results.select(&:geocoded?)
|
26
35
|
end
|
27
36
|
|
28
|
-
def meeting
|
29
|
-
@meeting ||= Meeting.where(feature: current_feature).find(params[:id])
|
30
|
-
end
|
31
|
-
|
32
37
|
def search_klass
|
33
38
|
MeetingSearch
|
34
39
|
end
|
@@ -11,6 +11,8 @@ module Decidim
|
|
11
11
|
translatable_attribute :location, String
|
12
12
|
translatable_attribute :location_hints, String
|
13
13
|
attribute :address, String
|
14
|
+
attribute :latitude, Float
|
15
|
+
attribute :longitude, Float
|
14
16
|
attribute :start_time, Decidim::Attributes::TimeWithZone
|
15
17
|
attribute :end_time, Decidim::Attributes::TimeWithZone
|
16
18
|
attribute :decidim_scope_id, Integer
|
@@ -20,6 +22,7 @@ module Decidim
|
|
20
22
|
validates :description, translatable_presence: true
|
21
23
|
validates :location, translatable_presence: true
|
22
24
|
validates :address, presence: true
|
25
|
+
validates :address, geocoding: true, if: -> { Decidim.geocoder.present? }
|
23
26
|
validates :start_time, presence: true, date: { before: :end_time }
|
24
27
|
validates :end_time, presence: true, date: { after: :start_time }
|
25
28
|
|
@@ -27,15 +30,23 @@ module Decidim
|
|
27
30
|
validates :scope, presence: true, if: ->(form) { form.decidim_scope_id.present? }
|
28
31
|
validates :category, presence: true, if: ->(form) { form.decidim_category_id.present? }
|
29
32
|
|
33
|
+
def process_scope
|
34
|
+
current_feature.participatory_process.scope
|
35
|
+
end
|
36
|
+
|
30
37
|
def scope
|
31
38
|
return unless current_feature
|
32
|
-
@scope ||= current_feature.scopes.where(id: decidim_scope_id).first
|
39
|
+
@scope ||= process_scope || current_feature.scopes.where(id: decidim_scope_id).first
|
33
40
|
end
|
34
41
|
|
35
42
|
def category
|
36
43
|
return unless current_feature
|
37
44
|
@category ||= current_feature.categories.where(id: decidim_category_id).first
|
38
45
|
end
|
46
|
+
|
47
|
+
def feature
|
48
|
+
current_feature
|
49
|
+
end
|
39
50
|
end
|
40
51
|
end
|
41
52
|
end
|
@@ -1,45 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Decidim
|
3
3
|
module Meetings
|
4
|
-
# This helper include some methods for rendering meetings
|
4
|
+
# This helper include some methods for rendering meetings dynamic maps.
|
5
5
|
module MapHelper
|
6
|
-
# Renders a link to openstreetmaps with the meeting latitude and longitude.
|
7
|
-
# The link's content is a static map image.
|
8
|
-
#
|
9
|
-
# meeting - A Decidim::Meetings::Meeting object
|
10
|
-
# options - An optional hash of options (default: { zoom: 17 })
|
11
|
-
# * zoom: A number to represent the zoom value of the map
|
12
|
-
def static_map_link(meeting, options = {})
|
13
|
-
if meeting.geocoded?
|
14
|
-
zoom = options[:zoom] || 17
|
15
|
-
latitude = meeting.latitude
|
16
|
-
longitude = meeting.longitude
|
17
|
-
|
18
|
-
map_url = "https://www.openstreetmap.org/?mlat=#{latitude}&mlon=#{longitude}#map=#{zoom}/#{latitude}/#{longitude}"
|
19
|
-
|
20
|
-
link_to map_url, target: "_blank" do
|
21
|
-
image_tag decidim_meetings.static_map_meeting_path(feature_id: meeting.feature,
|
22
|
-
participatory_process_id: meeting.feature.participatory_process,
|
23
|
-
id: meeting)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
6
|
# Serialize a collection of geocoded meetings to be used by the dynamic map component
|
29
7
|
#
|
30
8
|
# geocoded_meetings - A collection of geocoded meetings
|
31
9
|
def meetings_data_for_map(geocoded_meetings)
|
32
10
|
geocoded_meetings.map do |meeting|
|
33
11
|
meeting.slice(:latitude, :longitude, :address).merge(title: translated_attribute(meeting.title),
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
12
|
+
description: translated_attribute(meeting.description),
|
13
|
+
startTimeDay: l(meeting.start_time, format: "%d"),
|
14
|
+
startTimeMonth: l(meeting.start_time, format: "%B"),
|
15
|
+
startTimeYear: l(meeting.start_time, format: "%Y"),
|
16
|
+
startTime: "#{meeting.start_time.strftime("%H:%M")} - #{meeting.end_time.strftime("%H:%M")}",
|
17
|
+
icon: icon("meetings", width: 40, height: 70, remove_icon_class: true),
|
18
|
+
location: translated_attribute(meeting.location),
|
19
|
+
locationHints: translated_attribute(meeting.location_hints),
|
20
|
+
link: meeting_path(meeting))
|
43
21
|
end
|
44
22
|
end
|
45
23
|
end
|
@@ -8,6 +8,7 @@ module Decidim
|
|
8
8
|
include Decidim::Resourceable
|
9
9
|
include Decidim::HasAttachments
|
10
10
|
include Decidim::HasFeature
|
11
|
+
include Decidim::HasReference
|
11
12
|
include Decidim::HasScope
|
12
13
|
include Decidim::HasCategory
|
13
14
|
|
@@ -15,7 +16,7 @@ module Decidim
|
|
15
16
|
|
16
17
|
validates :title, presence: true
|
17
18
|
|
18
|
-
geocoded_by :address
|
19
|
+
geocoded_by :address, http_headers: lambda { |proposal| { "Referer" => proposal.feature.organization.host } }
|
19
20
|
|
20
21
|
def closed?
|
21
22
|
closed_at.present?
|
@@ -26,9 +26,11 @@
|
|
26
26
|
<%= form.datetime_field :end_time %>
|
27
27
|
</div>
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
<% if !@form.process_scope %>
|
30
|
+
<div class="field" >
|
31
|
+
<%= form.collection_select :decidim_scope_id, organization_scopes, :id, :name %>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
32
34
|
|
33
35
|
<div class="field" >
|
34
36
|
<%= form.categories_select :decidim_category_id, current_participatory_process.categories, prompt: "", disable_parents: false %>
|
@@ -12,10 +12,12 @@
|
|
12
12
|
</div>
|
13
13
|
</div>
|
14
14
|
|
15
|
-
|
15
|
+
<% unless @forced_past_meetings %>
|
16
|
+
<%= form.collection_radio_buttons :date, [["upcoming", t(".upcoming")], ["past", t(".past")]], :first, :last, legend_title: t(".date") %>
|
17
|
+
<% end %>
|
16
18
|
|
17
|
-
<% if current_organization.scopes.any? %>
|
18
|
-
<%= form.collection_check_boxes :scope_id,
|
19
|
+
<% if !current_participatory_process.scope && current_organization.scopes.any? %>
|
20
|
+
<%= form.collection_check_boxes :scope_id, search_organization_scopes, lambda {|scope| scope.id.to_s}, :name, legend_title: t(".scopes") %>
|
19
21
|
<% end %>
|
20
22
|
|
21
23
|
<% if current_feature.categories.any? %>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
<div class="reveal" id="filter-box" data-reveal>
|
9
9
|
<div class="reveal__header">
|
10
|
-
<h3 class="reveal__title"><%= t ".
|
10
|
+
<h3 class="reveal__title"><%= t ".filter_by" %>:</h3>
|
11
11
|
<button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
|
12
12
|
<span aria-hidden="true">×</span>
|
13
13
|
</button>
|
@@ -1,3 +1,13 @@
|
|
1
|
+
<% if @forced_past_meetings %>
|
2
|
+
<div class="callout warning">
|
3
|
+
<%= t ".upcoming_meetings_warning" %>
|
4
|
+
</div>
|
5
|
+
<% elsif meetings.length == 0 %>
|
6
|
+
<div class="callout warning">
|
7
|
+
<%= t ".no_meetings_warning" %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
|
1
11
|
<div class="row small-up-1 medium-up-2 card-grid">
|
2
12
|
<% meetings.each do |meeting| %>
|
3
13
|
<div class="column">
|
@@ -13,7 +23,7 @@
|
|
13
23
|
<div class="address__icon">
|
14
24
|
<%= icon "meetings", remove_icon_class: true, width: 40, height: 70 %>
|
15
25
|
</div>
|
16
|
-
<%= render partial: "address_details", locals: {
|
26
|
+
<%= render partial: "decidim/shared/address_details", locals: { icon_name: "meetings", geolocalizable: meeting } %>
|
17
27
|
</div>
|
18
28
|
</div>
|
19
29
|
</article>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<% if meeting.category.present? %>
|
4
4
|
<li><%= link_to translated_attribute(meeting.category.name), decidim_meetings.meetings_path(filter: { category_id: meeting.category.id }) %></li>
|
5
5
|
<% end %>
|
6
|
-
<% if meeting.scope.present? %>
|
6
|
+
<% if !current_participatory_process.scope && meeting.scope.present? %>
|
7
7
|
<li><%= link_to meeting.scope.name, decidim_meetings.meetings_path(filter: { scope_id: [meeting.scope.id] }) %></li>
|
8
8
|
<% end %>
|
9
9
|
</ul>
|
@@ -1,40 +1,35 @@
|
|
1
|
-
|
2
|
-
<
|
3
|
-
<div class="
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<div class="map__date-adress">
|
12
|
-
<div class="card__datetime">
|
13
|
-
<div class="card__datetime__date">
|
14
|
-
${startTimeDay} <span class="card__datetime__month">${startTimeMonth} ${startTimeYear}</span>
|
15
|
-
</div>
|
16
|
-
<div class="card__datetime__time">${starTime}</div>
|
17
|
-
</div>
|
18
|
-
<div class="address card__extra">
|
19
|
-
<div class="address__icon">{{html icon}}</div>
|
20
|
-
<div class="address__details">
|
21
|
-
<strong>{{html location}}</strong><br />
|
22
|
-
<span>${address}</span><br />
|
23
|
-
<span>{{html locationHints}}</span>
|
24
|
-
</div>
|
1
|
+
<%= dynamic_map_for meetings_data_for_map(geocoded_meetings) do %>
|
2
|
+
<template id="marker-popup">
|
3
|
+
<div class="map-info__content">
|
4
|
+
<h3>${title}</h3>
|
5
|
+
<div id="bodyContent">
|
6
|
+
<p>{{html description}}</p>
|
7
|
+
<div class="map__date-adress">
|
8
|
+
<div class="card__datetime">
|
9
|
+
<div class="card__datetime__date">
|
10
|
+
${startTimeDay} <span class="card__datetime__month">${startTimeMonth} ${startTimeYear}</span>
|
25
11
|
</div>
|
12
|
+
<div class="card__datetime__time">${starTime}</div>
|
26
13
|
</div>
|
27
|
-
<div class="
|
28
|
-
<
|
29
|
-
|
30
|
-
|
14
|
+
<div class="address card__extra">
|
15
|
+
<div class="address__icon">{{html icon}}</div>
|
16
|
+
<div class="address__details">
|
17
|
+
<strong>{{html location}}</strong><br />
|
18
|
+
<span>${address}</span><br />
|
19
|
+
<span>{{html locationHints}}</span>
|
20
|
+
</div>
|
31
21
|
</div>
|
32
22
|
</div>
|
23
|
+
<div class="map-info__button">
|
24
|
+
<a href="${link}" class="button button--sc">
|
25
|
+
<%= t('.view_meeting') %>
|
26
|
+
</a>
|
27
|
+
</div>
|
33
28
|
</div>
|
34
|
-
</
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
</div>
|
30
|
+
</template>
|
31
|
+
<%= stylesheet_link_tag "decidim/map" %>
|
32
|
+
<%= javascript_include_tag "decidim/map" %>
|
38
33
|
<% end %>
|
39
34
|
|
40
35
|
<div class="row">
|
@@ -2,7 +2,7 @@ var $meetings = $('#meetings');
|
|
2
2
|
|
3
3
|
$meetings.html('<%= j(render partial: "meetings") %>');
|
4
4
|
|
5
|
-
window.
|
6
|
-
'
|
5
|
+
window.Decidim.currentMap = window.Decidim.loadMap(
|
6
|
+
'map',
|
7
7
|
JSON.parse('<%= escape_javascript meetings_data_for_map(geocoded_meetings).to_json.html_safe %>')
|
8
8
|
);
|
@@ -45,26 +45,13 @@
|
|
45
45
|
</div>
|
46
46
|
</div>
|
47
47
|
<% end %>
|
48
|
+
<%= feature_reference(meeting) %>
|
48
49
|
<%= render partial: "decidim/shared/share_modal" %>
|
49
50
|
</div>
|
50
51
|
<div class="columns mediumlarge-8 mediumlarge-pull-4">
|
51
52
|
<div class="section">
|
52
53
|
<p><%== translated_attribute meeting.description %></p>
|
53
|
-
|
54
|
-
<div class="card__content address">
|
55
|
-
<div class="address__info">
|
56
|
-
<div class="address__icon">
|
57
|
-
<%= icon "meetings", width: 40, height: 70 %>
|
58
|
-
</div>
|
59
|
-
<%= render partial: "address_details", locals: { meeting: meeting } %>
|
60
|
-
</div>
|
61
|
-
<% if Decidim.geocoder.present? %>
|
62
|
-
<div class="address__map">
|
63
|
-
<%= static_map_link(meeting) %>
|
64
|
-
</div>
|
65
|
-
<% end %>
|
66
|
-
</div>
|
67
|
-
</div>
|
54
|
+
<%= render partial: "decidim/shared/static_map", locals: { icon_name: "meetings", geolocalizable: meeting } %>
|
68
55
|
<%= render partial: "tags", locals: { meeting: meeting } %>
|
69
56
|
</div>
|
70
57
|
<% if meeting.closed? %>
|
data/config/i18n-tasks.yml
CHANGED
data/config/locales/ca.yml
CHANGED
@@ -7,6 +7,16 @@ ca:
|
|
7
7
|
closing_report: Informe
|
8
8
|
contributions_count: Nombre de contribucions
|
9
9
|
proposal_ids: Propostes creades en una trobada
|
10
|
+
meeting:
|
11
|
+
adress: Adreça
|
12
|
+
decidim_category_id: Categoria
|
13
|
+
decidim_scope_id: Àmbit
|
14
|
+
description: Descripció
|
15
|
+
end_time: Hora de finalització
|
16
|
+
location: Ubicació
|
17
|
+
location_hints: Detalls d'ubicació
|
18
|
+
start_time: Hora d'inici
|
19
|
+
title: Editar trobada
|
10
20
|
decidim:
|
11
21
|
features:
|
12
22
|
meetings:
|
@@ -59,10 +69,13 @@ ca:
|
|
59
69
|
filters_small_view:
|
60
70
|
close_modal: Tancar finestra
|
61
71
|
filter: Filtra
|
62
|
-
|
72
|
+
filter_by: Filtra per
|
63
73
|
unfold: Desplegar
|
64
74
|
index:
|
65
75
|
view_meeting: Veure trobada
|
76
|
+
meetings:
|
77
|
+
no_meetings_warning: No hi ha trobades que coincideixin amb el criteri de cerca o no hi ha cap trobada programada.
|
78
|
+
upcoming_meetings_warning: Actualment no hi ha trobades programades, però pots veure les anteriors trobades.
|
66
79
|
show:
|
67
80
|
attendees: Nombre d'assistents
|
68
81
|
contributions: Nombre d'aportacions
|
@@ -78,6 +91,8 @@ ca:
|
|
78
91
|
title: Títol
|
79
92
|
resource_links:
|
80
93
|
meetings_through_proposals:
|
81
|
-
|
94
|
+
meeting_results: 'Resultats relacionats:'
|
95
|
+
result_meetings: 'Trobades relacionades:'
|
82
96
|
proposals_from_meeting:
|
83
|
-
|
97
|
+
meeting_proposals: 'Propostes relacionades:'
|
98
|
+
proposal_meetings: 'Trobades relacionades:'
|
data/config/locales/en.yml
CHANGED
@@ -8,6 +8,16 @@ en:
|
|
8
8
|
closing_report: Report
|
9
9
|
contributions_count: Number of contributions
|
10
10
|
proposal_ids: Proposals created in the meeting
|
11
|
+
meeting:
|
12
|
+
adress: Adress
|
13
|
+
decidim_category_id: Category
|
14
|
+
decidim_scope_id: Scope
|
15
|
+
description: Description
|
16
|
+
end_time: End Time
|
17
|
+
location: Location
|
18
|
+
location_hints: Location hints
|
19
|
+
start_time: Start Time
|
20
|
+
title: Title
|
11
21
|
decidim:
|
12
22
|
features:
|
13
23
|
meetings:
|
@@ -60,10 +70,15 @@ en:
|
|
60
70
|
filters_small_view:
|
61
71
|
close_modal: Close modal
|
62
72
|
filter: Filter
|
63
|
-
|
73
|
+
filter_by: Filter by
|
64
74
|
unfold: Unfold
|
65
75
|
index:
|
66
76
|
view_meeting: View meeting
|
77
|
+
meetings:
|
78
|
+
no_meetings_warning: No meetings match your search criteria or there isn't
|
79
|
+
any meeting scheduled.
|
80
|
+
upcoming_meetings_warning: Currently, there are no scheduled meetings, but
|
81
|
+
here you can find all the past meetings listed.
|
67
82
|
show:
|
68
83
|
attendees: Attendees count
|
69
84
|
contributions: Contributions count
|
@@ -79,6 +94,8 @@ en:
|
|
79
94
|
title: Title
|
80
95
|
resource_links:
|
81
96
|
meetings_through_proposals:
|
82
|
-
|
97
|
+
meeting_results: 'Related results:'
|
98
|
+
result_meetings: 'Related meetings:'
|
83
99
|
proposals_from_meeting:
|
84
|
-
|
100
|
+
meeting_proposals: 'Related proposals:'
|
101
|
+
proposal_meetings: 'Related meetings:'
|
data/config/locales/es.yml
CHANGED
@@ -7,6 +7,16 @@ es:
|
|
7
7
|
closing_report: Informe
|
8
8
|
contributions_count: Número de contribuciones
|
9
9
|
proposal_ids: Propuestas creadas en el encuentro
|
10
|
+
meeting:
|
11
|
+
adress: Dirección
|
12
|
+
decidim_category_id: Categoría
|
13
|
+
decidim_scope_id: Ámbito
|
14
|
+
description: Descripción
|
15
|
+
end_time: Hora de finalización
|
16
|
+
location: Ubicación
|
17
|
+
location_hints: Pistas de ubicación
|
18
|
+
start_time: Hora de inicio
|
19
|
+
title: Título
|
10
20
|
decidim:
|
11
21
|
features:
|
12
22
|
meetings:
|
@@ -59,10 +69,13 @@ es:
|
|
59
69
|
filters_small_view:
|
60
70
|
close_modal: Cerrar ventana
|
61
71
|
filter: Filtrar
|
62
|
-
|
72
|
+
filter_by: Filtrar por
|
63
73
|
unfold: Desplegar
|
64
74
|
index:
|
65
75
|
view_meeting: Ver encuentro
|
76
|
+
meetings:
|
77
|
+
no_meetings_warning: No hay encuentros que coincidan con el criterio de búsqueda o no hay ningún encuentro programado.
|
78
|
+
upcoming_meetings_warning: Actualmente no hay encuentros programados, pero puedes ver los encuentros anteriores.
|
66
79
|
show:
|
67
80
|
attendees: Número de asistentes
|
68
81
|
contributions: Número de contribuciones
|
@@ -78,6 +91,8 @@ es:
|
|
78
91
|
title: Título
|
79
92
|
resource_links:
|
80
93
|
meetings_through_proposals:
|
81
|
-
|
94
|
+
meeting_results: 'Resultados relacionados:'
|
95
|
+
result_meetings: 'Encuentros relacionados:'
|
82
96
|
proposals_from_meeting:
|
83
|
-
|
97
|
+
meeting_proposals: 'Propuestas relacionadas:'
|
98
|
+
proposal_meetings: 'Encuentros relacionados:'
|
data/config/locales/eu.yml
CHANGED
@@ -1,5 +1,79 @@
|
|
1
1
|
eu:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
close_meeting:
|
5
|
+
attendees_count: Bertaratuen kopurua
|
6
|
+
attending_organizations: 'Parte hartu duten erakundeen zerrenda:'
|
7
|
+
closing_report: Txostena
|
8
|
+
contributions_count: Ekarpen-kopurua
|
9
|
+
proposal_ids: Topaketan sortutako proposamenak
|
2
10
|
decidim:
|
11
|
+
features:
|
12
|
+
meetings:
|
13
|
+
name: Topaketa-zerrenda
|
3
14
|
meetings:
|
4
15
|
actions:
|
5
|
-
|
16
|
+
attachments: Fitxategi erantsiak
|
17
|
+
close: Itxi
|
18
|
+
confirm_destroy: Ziur zaude topaketa hau ezabatu nahi duzula?
|
19
|
+
destroy: Garbitu
|
20
|
+
edit: Editatu
|
21
|
+
new: '%{name} berria'
|
22
|
+
title: Ekintzak
|
23
|
+
admin:
|
24
|
+
meeting_closes:
|
25
|
+
edit:
|
26
|
+
close: Itxi
|
27
|
+
title: Itxi topaketa
|
28
|
+
meetings:
|
29
|
+
close:
|
30
|
+
invalid: Arazo bat izan da topaketa hau ixtean.
|
31
|
+
success: Topaketa ongi itxi da
|
32
|
+
create:
|
33
|
+
invalid: Arazo bat izan da topaketa hau sortzean.
|
34
|
+
success: Topaketa ongi sortu da
|
35
|
+
destroy:
|
36
|
+
success: Topaketa zuzen ezabatu da.
|
37
|
+
edit:
|
38
|
+
title: Editatu topaketa
|
39
|
+
update: Eguneratu topaketa
|
40
|
+
index:
|
41
|
+
title: Topaketa-zerrenda
|
42
|
+
new:
|
43
|
+
create: Sortu topaketa
|
44
|
+
title: Topaketa berria
|
45
|
+
update:
|
46
|
+
invalid: Arazo bat izan da topaketa hau eguneratzean.
|
47
|
+
success: Topaketa zuzen eguneratu da.
|
48
|
+
models:
|
49
|
+
meeting:
|
50
|
+
name: Topaketa
|
51
|
+
meetings:
|
52
|
+
filters:
|
53
|
+
category: Kategoria
|
54
|
+
date: Jaioteguna
|
55
|
+
scopes: Esparruak
|
56
|
+
search: Bilatu
|
57
|
+
filters_small_view:
|
58
|
+
close_modal: Itxi leihoa
|
59
|
+
filter: Iragazi
|
60
|
+
filter_by: 'Iragazi honen arabera:'
|
61
|
+
unfold: Zabaldu
|
62
|
+
index:
|
63
|
+
view_meeting: Ikusi topaketa
|
64
|
+
show:
|
65
|
+
attendees: Bertaratuen kopurua
|
66
|
+
contributions: Ekarpen-kopurua
|
67
|
+
meeting_report: Topaketaren txostena
|
68
|
+
organizations: Bertaratutako erakundeak
|
69
|
+
models:
|
70
|
+
meeting:
|
71
|
+
fields:
|
72
|
+
closed: Itxita
|
73
|
+
end_time: Bukaera-data
|
74
|
+
map: Mapa
|
75
|
+
start_time: Hasiera-data
|
76
|
+
title: Izenburua
|
77
|
+
resource_links:
|
78
|
+
meetings_through_proposals:
|
79
|
+
meeting_results: 'Honekin lotutako emaitzak:'
|
@@ -0,0 +1,98 @@
|
|
1
|
+
fi:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
close_meeting:
|
5
|
+
attendees_count: Osallistujien määrä
|
6
|
+
attending_organizations: Osallistuvien organisaatioiden lista
|
7
|
+
closing_report: Raportti
|
8
|
+
contributions_count: Kontribuutioiden määrä
|
9
|
+
proposal_ids: Ehdotusta luotu tapaamisessa
|
10
|
+
meeting:
|
11
|
+
adress: Adressi
|
12
|
+
decidim_category_id: Kategoria
|
13
|
+
decidim_scope_id: Konteksti
|
14
|
+
description: Kuvaus
|
15
|
+
end_time: Lopetusaika
|
16
|
+
location: Paikka
|
17
|
+
location_hints: Paikan tarkemmat tiedot
|
18
|
+
start_time: Aloitusaika
|
19
|
+
title: Otsikko
|
20
|
+
decidim:
|
21
|
+
features:
|
22
|
+
meetings:
|
23
|
+
name: Tapaamiset
|
24
|
+
meetings:
|
25
|
+
actions:
|
26
|
+
attachments: Liitteet
|
27
|
+
close: Sulje
|
28
|
+
confirm_destroy: Haluatko varmasti poistaa tämän tapaamisen?
|
29
|
+
destroy: Poista
|
30
|
+
edit: Muokkaa
|
31
|
+
new: Uusi %{name}
|
32
|
+
title: Toiminnot
|
33
|
+
admin:
|
34
|
+
meeting_closes:
|
35
|
+
edit:
|
36
|
+
close: Lopeta
|
37
|
+
title: Lopeta tapaaminen
|
38
|
+
meetings:
|
39
|
+
close:
|
40
|
+
invalid: Tapaamisen lopettamisessa tapahtui virhe
|
41
|
+
success: Tapaaminen onnistuneesti lopetettu
|
42
|
+
create:
|
43
|
+
invalid: Tapaamisen luonnissa tapahtui virhe
|
44
|
+
success: Tapaaminen onnistuneesti luotu
|
45
|
+
destroy:
|
46
|
+
success: Tapaaminen onnistuneesti poistettu
|
47
|
+
edit:
|
48
|
+
title: Muokkaa tapaamista
|
49
|
+
update: Päivitä tapaaminen
|
50
|
+
index:
|
51
|
+
title: Tapaamiset
|
52
|
+
new:
|
53
|
+
create: Luo tapaaminen
|
54
|
+
title: Uusi tapaaminen
|
55
|
+
update:
|
56
|
+
invalid: Tapaamisen luonnissa tapahtui virhe
|
57
|
+
success: Tapaaminen luotu onnistuneesti
|
58
|
+
models:
|
59
|
+
meeting:
|
60
|
+
name: Tapaaminen
|
61
|
+
meetings:
|
62
|
+
filters:
|
63
|
+
category: Kategoria
|
64
|
+
date: Päivämäärä
|
65
|
+
past: Menneet
|
66
|
+
scopes: Kontekstit
|
67
|
+
search: Etsi
|
68
|
+
upcoming: Tulevat
|
69
|
+
filters_small_view:
|
70
|
+
close_modal: Sulje ikkuna
|
71
|
+
filter: Suodata
|
72
|
+
filter_by: Suodata
|
73
|
+
unfold: Avaa
|
74
|
+
index:
|
75
|
+
view_meeting: Näytä tapaaminen
|
76
|
+
meetings:
|
77
|
+
no_meetings_warning: Yksikään tapaaminen ei vastaa hakukriteerejäsi tai yhtään tapaamista ei ole määritelty
|
78
|
+
upcoming_meetings_warning: Tällä hetkellä tapaamisia ei ole määritelty, mutta täältä löydät kaikki aikaisemmat tapaamiset.
|
79
|
+
show:
|
80
|
+
attendees: Osallistujamäärä
|
81
|
+
contributions: Kontribuutioiden määrä
|
82
|
+
meeting_report: Tapaamisraportti
|
83
|
+
organizations: Osallistuneet organisaatiot
|
84
|
+
models:
|
85
|
+
meeting:
|
86
|
+
fields:
|
87
|
+
closed: Suljettu
|
88
|
+
end_time: Lopetusaika
|
89
|
+
map: Kartta
|
90
|
+
start_time: Aloitusaika
|
91
|
+
title: Otsikko
|
92
|
+
resource_links:
|
93
|
+
meetings_through_proposals:
|
94
|
+
meeting_results: 'Liittyvät tulokset:'
|
95
|
+
result_meetings: 'Liittyvät tapaamiset:'
|
96
|
+
proposals_from_meeting:
|
97
|
+
meeting_proposals: 'Liittyvät ehdotukset:'
|
98
|
+
proposal_meetings: 'Liittyvät tapaamiset:'
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "geocoder"
|
3
2
|
|
4
3
|
module Decidim
|
5
4
|
module Meetings
|
@@ -22,31 +21,6 @@ module Decidim
|
|
22
21
|
def load_seed
|
23
22
|
nil
|
24
23
|
end
|
25
|
-
|
26
|
-
initializer "decidim_meetings.geocoder" do |_app|
|
27
|
-
if Decidim.geocoder.present?
|
28
|
-
Geocoder.configure(
|
29
|
-
# geocoding service (see below for supported options):
|
30
|
-
lookup: :here,
|
31
|
-
|
32
|
-
# IP address geocoding service (see below for supported options):
|
33
|
-
# :ip_lookup => :maxmind,
|
34
|
-
|
35
|
-
# to use an API key:
|
36
|
-
api_key: [Decidim.geocoder&.fetch(:here_app_id), Decidim.geocoder&.fetch(:here_app_code)]
|
37
|
-
|
38
|
-
# geocoding service request timeout, in seconds (default 3):
|
39
|
-
# :timeout => 5,
|
40
|
-
|
41
|
-
# set default units to kilometers:
|
42
|
-
# :units => :km,
|
43
|
-
|
44
|
-
# caching (see below for details):
|
45
|
-
# :cache => Redis.new,
|
46
|
-
# :cache_prefix => "..."
|
47
|
-
)
|
48
|
-
end
|
49
|
-
end
|
50
24
|
end
|
51
25
|
end
|
52
26
|
end
|
@@ -12,17 +12,9 @@ module Decidim
|
|
12
12
|
isolate_namespace Decidim::Meetings
|
13
13
|
|
14
14
|
routes do
|
15
|
-
resources :meetings, only: [:index, :show]
|
16
|
-
member do
|
17
|
-
get :static_map
|
18
|
-
end
|
19
|
-
end
|
15
|
+
resources :meetings, only: [:index, :show]
|
20
16
|
root to: "meetings#index"
|
21
17
|
end
|
22
|
-
|
23
|
-
initializer "decidim_meetings.assets" do |app|
|
24
|
-
app.config.assets.precompile += %w(decidim_meetings_manifest.js)
|
25
|
-
end
|
26
18
|
end
|
27
19
|
end
|
28
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-meetings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-03-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: decidim-core
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.0.
|
21
|
+
version: 0.0.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 0.0.
|
28
|
+
version: 0.0.6
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rectify
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,20 +82,6 @@ dependencies:
|
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: 1.0.1
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: geocoder
|
87
|
-
requirement: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
- - "~>"
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: 1.4.2
|
92
|
-
type: :runtime
|
93
|
-
prerelease: false
|
94
|
-
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - "~>"
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: 1.4.2
|
99
85
|
- !ruby/object:Gem::Dependency
|
100
86
|
name: httparty
|
101
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,70 +116,56 @@ dependencies:
|
|
130
116
|
requirements:
|
131
117
|
- - '='
|
132
118
|
- !ruby/object:Gem::Version
|
133
|
-
version: 0.0.
|
119
|
+
version: 0.0.6
|
134
120
|
type: :development
|
135
121
|
prerelease: false
|
136
122
|
version_requirements: !ruby/object:Gem::Requirement
|
137
123
|
requirements:
|
138
124
|
- - '='
|
139
125
|
- !ruby/object:Gem::Version
|
140
|
-
version: 0.0.
|
126
|
+
version: 0.0.6
|
141
127
|
- !ruby/object:Gem::Dependency
|
142
128
|
name: decidim-proposals
|
143
129
|
requirement: !ruby/object:Gem::Requirement
|
144
130
|
requirements:
|
145
131
|
- - '='
|
146
132
|
- !ruby/object:Gem::Version
|
147
|
-
version: 0.0.
|
133
|
+
version: 0.0.6
|
148
134
|
type: :development
|
149
135
|
prerelease: false
|
150
136
|
version_requirements: !ruby/object:Gem::Requirement
|
151
137
|
requirements:
|
152
138
|
- - '='
|
153
139
|
- !ruby/object:Gem::Version
|
154
|
-
version: 0.0.
|
140
|
+
version: 0.0.6
|
155
141
|
- !ruby/object:Gem::Dependency
|
156
142
|
name: decidim-admin
|
157
143
|
requirement: !ruby/object:Gem::Requirement
|
158
144
|
requirements:
|
159
145
|
- - '='
|
160
146
|
- !ruby/object:Gem::Version
|
161
|
-
version: 0.0.
|
147
|
+
version: 0.0.6
|
162
148
|
type: :development
|
163
149
|
prerelease: false
|
164
150
|
version_requirements: !ruby/object:Gem::Requirement
|
165
151
|
requirements:
|
166
152
|
- - '='
|
167
153
|
- !ruby/object:Gem::Version
|
168
|
-
version: 0.0.
|
169
|
-
- !ruby/object:Gem::Dependency
|
170
|
-
name: webmock
|
171
|
-
requirement: !ruby/object:Gem::Requirement
|
172
|
-
requirements:
|
173
|
-
- - "~>"
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: 2.3.2
|
176
|
-
type: :development
|
177
|
-
prerelease: false
|
178
|
-
version_requirements: !ruby/object:Gem::Requirement
|
179
|
-
requirements:
|
180
|
-
- - "~>"
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 2.3.2
|
154
|
+
version: 0.0.6
|
183
155
|
- !ruby/object:Gem::Dependency
|
184
156
|
name: decidim-results
|
185
157
|
requirement: !ruby/object:Gem::Requirement
|
186
158
|
requirements:
|
187
159
|
- - '='
|
188
160
|
- !ruby/object:Gem::Version
|
189
|
-
version: 0.0.
|
161
|
+
version: 0.0.6
|
190
162
|
type: :development
|
191
163
|
prerelease: false
|
192
164
|
version_requirements: !ruby/object:Gem::Requirement
|
193
165
|
requirements:
|
194
166
|
- - '='
|
195
167
|
- !ruby/object:Gem::Version
|
196
|
-
version: 0.0.
|
168
|
+
version: 0.0.6
|
197
169
|
description: ''
|
198
170
|
email:
|
199
171
|
- josepjaume@gmail.com
|
@@ -205,10 +177,7 @@ extra_rdoc_files: []
|
|
205
177
|
files:
|
206
178
|
- README.md
|
207
179
|
- Rakefile
|
208
|
-
- app/assets/config/decidim_meetings_manifest.js
|
209
180
|
- app/assets/images/decidim/meetings/icon.svg
|
210
|
-
- app/assets/javascripts/decidim/meetings/map.js.es6.erb
|
211
|
-
- app/assets/stylesheets/decidim/meetings/map.css
|
212
181
|
- app/commands/decidim/meetings/admin/close_meeting.rb
|
213
182
|
- app/commands/decidim/meetings/admin/create_meeting.rb
|
214
183
|
- app/commands/decidim/meetings/admin/update_meeting.rb
|
@@ -226,14 +195,12 @@ files:
|
|
226
195
|
- app/models/decidim/meetings/application_record.rb
|
227
196
|
- app/models/decidim/meetings/meeting.rb
|
228
197
|
- app/services/decidim/meetings/meeting_search.rb
|
229
|
-
- app/services/decidim/meetings/static_map_generator.rb
|
230
198
|
- app/views/decidim/meetings/admin/meeting_closes/_form.html.erb
|
231
199
|
- app/views/decidim/meetings/admin/meeting_closes/edit.html.erb
|
232
200
|
- app/views/decidim/meetings/admin/meetings/_form.html.erb
|
233
201
|
- app/views/decidim/meetings/admin/meetings/edit.html.erb
|
234
202
|
- app/views/decidim/meetings/admin/meetings/index.html.erb
|
235
203
|
- app/views/decidim/meetings/admin/meetings/new.html.erb
|
236
|
-
- app/views/decidim/meetings/meetings/_address_details.html.erb
|
237
204
|
- app/views/decidim/meetings/meetings/_datetime.html.erb
|
238
205
|
- app/views/decidim/meetings/meetings/_filters.html.erb
|
239
206
|
- app/views/decidim/meetings/meetings/_filters_small_view.html.erb
|
@@ -248,10 +215,12 @@ files:
|
|
248
215
|
- config/locales/en.yml
|
249
216
|
- config/locales/es.yml
|
250
217
|
- config/locales/eu.yml
|
218
|
+
- config/locales/fi.yml
|
251
219
|
- db/migrate/20161130121354_create_meetings.rb
|
252
220
|
- db/migrate/20170110142105_close_a_meeting.rb
|
253
221
|
- db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb
|
254
222
|
- db/migrate/20170129153716_remove_short_description_from_meetings.rb
|
223
|
+
- db/migrate/20170215132546_add_reference_to_meetings.rb
|
255
224
|
- lib/decidim/meetings.rb
|
256
225
|
- lib/decidim/meetings/admin.rb
|
257
226
|
- lib/decidim/meetings/admin_engine.rb
|
@@ -1,97 +0,0 @@
|
|
1
|
-
// = require leaflet
|
2
|
-
// = require leaflet-tilelayer-here
|
3
|
-
// = require leaflet-svg-icon
|
4
|
-
// = require leaflet.markercluster
|
5
|
-
// = require jquery-tmpl
|
6
|
-
// = require_self
|
7
|
-
|
8
|
-
/* globals L */
|
9
|
-
|
10
|
-
L.DivIcon.SVGIcon.DecidimIcon = L.DivIcon.SVGIcon.extend({
|
11
|
-
options: {
|
12
|
-
fillColor: '#ef604d',
|
13
|
-
opacity: 0
|
14
|
-
},
|
15
|
-
_createPathDescription: function() {
|
16
|
-
return 'M14 1.17a11.685 11.685 0 0 0-11.685 11.685c0 11.25 10.23 20.61 10.665 21a1.5 1.5 0 0 0 2.025 0c0.435-.435 10.665-9.81 10.665-21A11.685 11.685 0 0 0 14 1.17Zm0 17.415A5.085 5.085 0 1 1 19.085 13.5 5.085 5.085 0 0 1 14 18.585Z';
|
17
|
-
},
|
18
|
-
_createCircle: function() {
|
19
|
-
return ""
|
20
|
-
}
|
21
|
-
});
|
22
|
-
|
23
|
-
const popupTemplateId = 'meeting-popup';
|
24
|
-
$.template('meeting-popup', $(`#${popupTemplateId}`).html());
|
25
|
-
|
26
|
-
const addMarkers = (meetingsData, markerClusters, map) => {
|
27
|
-
const bounds = new L.LatLngBounds(meetingsData.map((meeting) => [meeting.latitude, meeting.longitude]));
|
28
|
-
|
29
|
-
meetingsData.forEach((meeting) => {
|
30
|
-
let marker = L.marker([meeting.latitude, meeting.longitude], {
|
31
|
-
icon: new L.DivIcon.SVGIcon.DecidimIcon()
|
32
|
-
});
|
33
|
-
let node = document.createElement('div');
|
34
|
-
|
35
|
-
$.tmpl('meeting-popup', meeting).appendTo(node);
|
36
|
-
|
37
|
-
marker.bindPopup(node, {
|
38
|
-
maxwidth: 640,
|
39
|
-
minWidth: 500,
|
40
|
-
keepInView: true,
|
41
|
-
className: 'map-info'
|
42
|
-
}).openPopup();
|
43
|
-
|
44
|
-
markerClusters.addLayer(marker);
|
45
|
-
});
|
46
|
-
|
47
|
-
map.addLayer(markerClusters);
|
48
|
-
map.fitBounds(bounds, { padding: [100, 100] });
|
49
|
-
};
|
50
|
-
|
51
|
-
const loadMap = (mapId, meetingsData) => {
|
52
|
-
let markerClusters = L.markerClusterGroup();
|
53
|
-
const { hereAppId, hereAppCode } = window.DecidimMeetings.mapConfiguration;
|
54
|
-
|
55
|
-
if (window.DecidimMeetings.currentMap) {
|
56
|
-
window.DecidimMeetings.currentMap.remove();
|
57
|
-
window.DecidimMeetings.currentMap = null;
|
58
|
-
}
|
59
|
-
|
60
|
-
const map = L.map(mapId);
|
61
|
-
|
62
|
-
L.tileLayer.here({
|
63
|
-
appId: hereAppId,
|
64
|
-
appCode: hereAppCode,
|
65
|
-
}).addTo(map);
|
66
|
-
|
67
|
-
if (meetingsData.length > 0) {
|
68
|
-
addMarkers(meetingsData, markerClusters, map);
|
69
|
-
} else {
|
70
|
-
map.fitWorld();
|
71
|
-
}
|
72
|
-
|
73
|
-
map.scrollWheelZoom.disable();
|
74
|
-
|
75
|
-
return map;
|
76
|
-
};
|
77
|
-
|
78
|
-
window.DecidimMeetings = {
|
79
|
-
loadMap,
|
80
|
-
currentMap: null,
|
81
|
-
mapConfiguration: {}
|
82
|
-
};
|
83
|
-
|
84
|
-
$(() => {
|
85
|
-
const mapId = 'meetings-map';
|
86
|
-
const $map = $(`#${mapId}`);
|
87
|
-
|
88
|
-
const meetingsData = $map.data('meetings');
|
89
|
-
const hereAppId = $map.data('here-app-id');
|
90
|
-
const hereAppCode = $map.data('here-app-code');
|
91
|
-
|
92
|
-
window.DecidimMeetings.mapConfiguration = { hereAppId, hereAppCode };
|
93
|
-
|
94
|
-
if ($map.length > 0) {
|
95
|
-
window.DecidimMeetings.currentMap = loadMap(mapId, meetingsData);
|
96
|
-
}
|
97
|
-
});
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "httparty"
|
3
|
-
|
4
|
-
module Decidim
|
5
|
-
module Meetings
|
6
|
-
# This class generates a url to create a static map image for a geocoded meeting
|
7
|
-
class StaticMapGenerator
|
8
|
-
BASE_HOST = "image.maps.cit.api.here.com"
|
9
|
-
BASE_PATH = "/mia/1.6/mapview"
|
10
|
-
|
11
|
-
def initialize(meeting, options = {})
|
12
|
-
@meeting = meeting
|
13
|
-
@options = options
|
14
|
-
|
15
|
-
@options[:zoom] ||= 15
|
16
|
-
@options[:width] ||= 120
|
17
|
-
@options[:height] ||= 120
|
18
|
-
end
|
19
|
-
|
20
|
-
def data
|
21
|
-
return if Decidim.geocoder.nil?
|
22
|
-
|
23
|
-
Rails.cache.fetch(@meeting.cache_key) do
|
24
|
-
request = HTTParty.get(uri)
|
25
|
-
request.body
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def uri
|
32
|
-
params = {
|
33
|
-
c: "#{@meeting.latitude}, #{@meeting.longitude}",
|
34
|
-
z: @options[:zoom],
|
35
|
-
w: @options[:width],
|
36
|
-
h: @options[:height],
|
37
|
-
f: "1",
|
38
|
-
app_id: Decidim.geocoder&.fetch(:here_app_id),
|
39
|
-
app_code: Decidim.geocoder&.fetch(:here_app_code)
|
40
|
-
}
|
41
|
-
|
42
|
-
uri = URI.parse("https://#{BASE_HOST}#{BASE_PATH}").tap do |uri|
|
43
|
-
uri.query = URI.encode_www_form params
|
44
|
-
end
|
45
|
-
|
46
|
-
uri
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|