decidim-meetings 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|