decidim-meetings 0.11.2 → 0.12.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/config/admin/decidim_meetings_manifest.js +2 -0
- data/app/assets/javascripts/decidim/meetings/admin/agendas.js.es6 +158 -0
- data/app/assets/javascripts/decidim/meetings/admin/meetings_form.js.es6 +19 -0
- data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +15 -0
- data/app/cells/decidim/meetings/join_meeting_button/show.erb +27 -0
- data/app/cells/decidim/meetings/join_meeting_button_cell.rb +37 -0
- data/app/cells/decidim/meetings/meeting_cell.rb +2 -13
- data/app/cells/decidim/meetings/meeting_list_item_cell.rb +8 -0
- data/app/cells/decidim/meetings/meeting_m/address.erb +14 -0
- data/app/cells/decidim/meetings/meeting_m/data.erb +2 -0
- data/app/cells/decidim/meetings/meeting_m/date.erb +8 -0
- data/app/cells/decidim/meetings/meeting_m/footer.erb +9 -0
- data/app/cells/decidim/meetings/meeting_m/multiple_dates.erb +17 -0
- data/app/cells/decidim/meetings/meeting_m/single_date.erb +9 -0
- data/app/cells/decidim/meetings/meeting_m/tags.erb +1 -0
- data/app/cells/decidim/meetings/meeting_m_cell.rb +37 -4
- data/app/commands/decidim/meetings/admin/copy_meeting.rb +3 -0
- data/app/commands/decidim/meetings/admin/create_agenda.rb +93 -0
- data/app/commands/decidim/meetings/admin/create_meeting.rb +3 -0
- data/app/commands/decidim/meetings/admin/create_minutes.rb +55 -0
- data/app/commands/decidim/meetings/admin/update_agenda.rb +90 -0
- data/app/commands/decidim/meetings/admin/update_meeting.rb +4 -1
- data/app/commands/decidim/meetings/admin/update_minutes.rb +62 -0
- data/app/controllers/decidim/meetings/admin/agenda_controller.rb +75 -0
- data/app/controllers/decidim/meetings/admin/attachments_controller.rb +1 -1
- data/app/controllers/decidim/meetings/admin/invites_controller.rb +4 -0
- data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +4 -0
- data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +4 -0
- data/app/controllers/decidim/meetings/admin/meetings_controller.rb +10 -0
- data/app/controllers/decidim/meetings/admin/minutes_controller.rb +69 -0
- data/app/controllers/decidim/meetings/admin/registrations_controller.rb +6 -0
- data/app/controllers/decidim/meetings/meetings_controller.rb +7 -1
- data/app/controllers/decidim/meetings/registrations_controller.rb +12 -6
- data/app/forms/decidim/meetings/admin/meeting_agenda_form.rb +54 -0
- data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +33 -0
- data/app/forms/decidim/meetings/admin/meeting_copy_form.rb +8 -0
- data/app/forms/decidim/meetings/admin/meeting_form.rb +8 -0
- data/app/forms/decidim/meetings/admin/meeting_registration_invite_form.rb +2 -1
- data/app/forms/decidim/meetings/admin/minutes_form.rb +20 -0
- data/app/helpers/decidim/meetings/admin/application_helper.rb +13 -0
- data/{lib/decidim/meetings/view_model.rb → app/helpers/decidim/meetings/meeting_cells_helper.rb} +7 -1
- data/app/helpers/decidim/meetings/meetings_helper.rb +67 -0
- data/app/models/decidim/meetings/agenda.rb +19 -0
- data/app/models/decidim/meetings/agenda_item.rb +35 -0
- data/app/models/decidim/meetings/meeting.rb +52 -3
- data/app/models/decidim/meetings/minutes.rb +19 -0
- data/app/permissions/decidim/meetings/admin/permissions.rb +69 -0
- data/app/permissions/decidim/meetings/permissions.rb +41 -0
- data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +4 -1
- data/app/presenters/decidim/meetings/admin_log/minutes_presenter.rb +42 -0
- data/app/presenters/decidim/meetings/admin_log/value_types/organizer_presenter.rb +69 -0
- data/app/types/decidim/meetings/meeting_type.rb +4 -4
- data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +50 -0
- data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +26 -0
- data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +19 -0
- data/app/views/decidim/meetings/admin/agenda/_form.html.erb +66 -0
- data/app/views/decidim/meetings/admin/agenda/edit.html.erb +7 -0
- data/app/views/decidim/meetings/admin/agenda/new.html.erb +8 -0
- data/app/views/decidim/meetings/admin/agenda/show.html.erb +0 -0
- data/app/views/decidim/meetings/admin/meeting_copies/_form.html.erb +15 -1
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +15 -0
- data/app/views/decidim/meetings/admin/meetings/index.html.erb +9 -7
- data/app/views/decidim/meetings/admin/minutes/_form.html.erb +23 -0
- data/app/views/decidim/meetings/admin/minutes/edit.html.erb +7 -0
- data/app/views/decidim/meetings/admin/minutes/new.html.erb +7 -0
- data/app/views/decidim/meetings/admin/registrations/_form.html.erb +11 -9
- data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +0 -1
- data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +31 -0
- data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +48 -0
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/show.html.erb +23 -12
- data/app/views/decidim/participatory_spaces/_meeting.html.erb +1 -1
- data/app/views/decidim/participatory_spaces/_upcoming_meeting_for_card.html.erb +6 -0
- data/config/locales/ca.yml +106 -4
- data/config/locales/en.yml +106 -4
- data/config/locales/es.yml +106 -4
- data/config/locales/eu.yml +106 -4
- data/config/locales/fi.yml +106 -4
- data/config/locales/fr.yml +106 -4
- data/config/locales/gl.yml +106 -4
- data/config/locales/it.yml +106 -4
- data/config/locales/nl.yml +106 -4
- data/config/locales/pl.yml +112 -4
- data/config/locales/pt-BR.yml +106 -4
- data/config/locales/pt.yml +106 -4
- data/config/locales/ru.yml +97 -4
- data/config/locales/sv.yml +106 -4
- data/config/locales/uk.yml +112 -4
- data/db/migrate/20180403145218_add_meeting_types.rb +8 -0
- data/db/migrate/20180404075312_add_organizer_to_meetings.rb +7 -0
- data/db/migrate/20180406080619_create_meetings_minutes.rb +15 -0
- data/db/migrate/20180419131924_create_decidim_agendas.rb +13 -0
- data/db/migrate/20180419132104_create_decidim_agenda_items.rb +16 -0
- data/db/migrate/20180516102301_index_meetings_as_searchable_resources.rb +24 -0
- data/lib/decidim/meetings/admin_engine.rb +2 -0
- data/lib/decidim/meetings/component.rb +3 -2
- data/lib/decidim/meetings/engine.rb +16 -6
- data/lib/decidim/meetings/test/factories.rb +44 -0
- data/lib/decidim/meetings/version.rb +1 -1
- metadata +63 -21
- data/app/cells/decidim/meetings/meeting_m/header.erb +0 -5
- data/app/cells/decidim/meetings/meeting_m/show.erb +0 -21
- data/app/models/decidim/meetings/abilities/current_user_ability.rb +0 -43
- data/app/views/decidim/meetings/meetings/_registration_confirm.html.erb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba1d143141173018ffc39b1c91fc371339fc2d65e40127c3578a1b5d32f8a0a3
|
4
|
+
data.tar.gz: 2b0020c3c8cf0d12b8ab02f1e5919e5d3ee723be8f03536baae7e5fc02f121a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdfc43c0090c3c23543027eb1a113a75f87a40cc64dc17f8181727114aec8e64c36146e7d26fea5e411b19e3d39c9a26c63c853683cc9977af45785f893f09d1
|
7
|
+
data.tar.gz: edb9298e91ef4c5c89faa78c04368fc86f27dd3d336948bca0213ad147f1d44f96a302e71cfdae2704f297e6a717a929ff0e8db542adc3c26f2353b6ae6dab51
|
@@ -0,0 +1,158 @@
|
|
1
|
+
((exports) => {
|
2
|
+
const { AutoLabelByPositionComponent, AutoButtonsByPositionComponent, createDynamicFields, createSortList } = exports.DecidimAdmin;
|
3
|
+
const { createQuillEditor } = exports.Decidim;
|
4
|
+
|
5
|
+
const wrapperSelector = ".meeting-agenda-items";
|
6
|
+
const fieldSelector = ".meeting-agenda-item";
|
7
|
+
const childsWrapperSelector = ".meeting-agenda-item-childs";
|
8
|
+
const childFieldSelector = ".meeting-agenda-item-child";
|
9
|
+
|
10
|
+
const autoLabelByPosition = new AutoLabelByPositionComponent({
|
11
|
+
listSelector: ".meeting-agenda-item:not(.hidden)",
|
12
|
+
labelSelector: ".card-title span:first",
|
13
|
+
onPositionComputed: (el, idx) => {
|
14
|
+
$(el).find("input[name$=\\[position\\]]").val(idx);
|
15
|
+
}
|
16
|
+
});
|
17
|
+
|
18
|
+
const autoButtonsByPosition = new AutoButtonsByPositionComponent({
|
19
|
+
listSelector: ".meeting-agenda-item:not(.hidden)",
|
20
|
+
hideOnFirstSelector: ".move-up-agenda-item",
|
21
|
+
hideOnLastSelector: ".move-down-agenda-item"
|
22
|
+
});
|
23
|
+
|
24
|
+
const createSortableList = () => {
|
25
|
+
createSortList(".meeting-agenda-items-list:not(.published)", {
|
26
|
+
handle: ".agenda-item-divider",
|
27
|
+
placeholder: '<div style="border-style: dashed; border-color: #000"></div>',
|
28
|
+
forcePlaceholderSize: true,
|
29
|
+
onSortUpdate: () => { autoLabelByPosition.run() }
|
30
|
+
});
|
31
|
+
};
|
32
|
+
|
33
|
+
const createSortableListChild = () => {
|
34
|
+
createSortList(".meeting-agenda-item-childs-list:not(.published)", {
|
35
|
+
handle: ".agenda-item-child-divider",
|
36
|
+
placeholder: '<div style="border-style: dashed; border-color: #000"></div>',
|
37
|
+
forcePlaceholderSize: true,
|
38
|
+
onSortUpdate: () => { autoLabelByPosition.run() }
|
39
|
+
});
|
40
|
+
};
|
41
|
+
|
42
|
+
const autoLabelByPositionChild = new AutoLabelByPositionComponent({
|
43
|
+
listSelector: ".meeting-agenda-item-child:not(.hidden)",
|
44
|
+
labelSelector: ".card-title span:first",
|
45
|
+
onPositionComputed: (el, idx) => {
|
46
|
+
$(el).find("input[name$=\\[position\\]]").val(idx);
|
47
|
+
}
|
48
|
+
});
|
49
|
+
|
50
|
+
const autoButtonsByPositionChild = new AutoButtonsByPositionComponent({
|
51
|
+
listSelector: ".meeting-agenda-item-child:not(.hidden)",
|
52
|
+
hideOnFirstSelector: ".move-up-agenda-item-child",
|
53
|
+
hideOnLastSelector: ".move-down-agenda-item-child"
|
54
|
+
});
|
55
|
+
|
56
|
+
const createDynamicFieldsForAgendaItemChilds = (fieldId) => {
|
57
|
+
return createDynamicFields({
|
58
|
+
placeholderId: "meeting-agenda-item-child-id",
|
59
|
+
wrapperSelector: `#${fieldId} ${childsWrapperSelector}`,
|
60
|
+
containerSelector: ".meeting-agenda-item-childs-list",
|
61
|
+
fieldSelector: childFieldSelector,
|
62
|
+
addFieldButtonSelector: ".add-agenda-item-child",
|
63
|
+
removeFieldButtonSelector: ".remove-agenda-item-child",
|
64
|
+
moveUpFieldButtonSelector: ".move-up-agenda-item-child",
|
65
|
+
moveDownFieldButtonSelector: ".move-down-agenda-item-child",
|
66
|
+
|
67
|
+
onAddField: ($field) => {
|
68
|
+
createSortableListChild();
|
69
|
+
|
70
|
+
$field.find(".editor-container").each((idx, el) => {
|
71
|
+
createQuillEditor(el);
|
72
|
+
});
|
73
|
+
|
74
|
+
autoLabelByPositionChild.run();
|
75
|
+
autoButtonsByPositionChild.run();
|
76
|
+
},
|
77
|
+
onRemoveField: () => {
|
78
|
+
autoLabelByPositionChild.run();
|
79
|
+
autoButtonsByPositionChild.run();
|
80
|
+
},
|
81
|
+
onMoveUpField: () => {
|
82
|
+
autoLabelByPositionChild.run();
|
83
|
+
autoButtonsByPositionChild.run();
|
84
|
+
},
|
85
|
+
onMoveDownField: () => {
|
86
|
+
autoLabelByPositionChild.run();
|
87
|
+
autoButtonsByPositionChild.run();
|
88
|
+
}
|
89
|
+
});
|
90
|
+
};
|
91
|
+
|
92
|
+
const dynamicFieldsForAgendaItemChilds = {};
|
93
|
+
|
94
|
+
const setupInitialAgendaItemChildAttributes = ($target) => {
|
95
|
+
const fieldId = $target.attr("id");
|
96
|
+
|
97
|
+
dynamicFieldsForAgendaItemChilds[fieldId] = createDynamicFieldsForAgendaItemChilds(fieldId);
|
98
|
+
|
99
|
+
}
|
100
|
+
|
101
|
+
const hideDeletedAgendaItem = ($target) => {
|
102
|
+
const inputDeleted = $target.find("input[name$=\\[deleted\\]]").val();
|
103
|
+
|
104
|
+
if (inputDeleted === "true") {
|
105
|
+
$target.addClass("hidden");
|
106
|
+
$target.hide();
|
107
|
+
}
|
108
|
+
};
|
109
|
+
|
110
|
+
createDynamicFields({
|
111
|
+
placeholderId: "meeting-agenda-item-id",
|
112
|
+
wrapperSelector: wrapperSelector,
|
113
|
+
containerSelector: ".meeting-agenda-items-list",
|
114
|
+
fieldSelector: fieldSelector,
|
115
|
+
addFieldButtonSelector: ".add-agenda-item",
|
116
|
+
removeFieldButtonSelector: ".remove-agenda-item",
|
117
|
+
moveUpFieldButtonSelector: ".move-up-agenda-item",
|
118
|
+
moveDownFieldButtonSelector: ".move-down-agenda-item",
|
119
|
+
onAddField: ($field) => {
|
120
|
+
// createDynamicFieldsForAgendaItemChilds($field);
|
121
|
+
setupInitialAgendaItemChildAttributes($field);
|
122
|
+
createSortableList();
|
123
|
+
|
124
|
+
$field.find(".editor-container").each((idx, el) => {
|
125
|
+
createQuillEditor(el);
|
126
|
+
});
|
127
|
+
|
128
|
+
autoLabelByPosition.run();
|
129
|
+
autoButtonsByPosition.run();
|
130
|
+
},
|
131
|
+
onRemoveField: () => {
|
132
|
+
autoLabelByPosition.run();
|
133
|
+
autoButtonsByPosition.run();
|
134
|
+
},
|
135
|
+
onMoveUpField: () => {
|
136
|
+
autoLabelByPosition.run();
|
137
|
+
autoButtonsByPosition.run();
|
138
|
+
},
|
139
|
+
onMoveDownField: () => {
|
140
|
+
autoLabelByPosition.run();
|
141
|
+
autoButtonsByPosition.run();
|
142
|
+
}
|
143
|
+
});
|
144
|
+
|
145
|
+
createSortableList();
|
146
|
+
|
147
|
+
$(fieldSelector).each((idx, el) => {
|
148
|
+
const $target = $(el);
|
149
|
+
|
150
|
+
hideDeletedAgendaItem($target);
|
151
|
+
setupInitialAgendaItemChildAttributes($target);
|
152
|
+
});
|
153
|
+
|
154
|
+
autoLabelByPosition.run();
|
155
|
+
autoButtonsByPosition.run();
|
156
|
+
autoLabelByPositionChild.run();
|
157
|
+
autoButtonsByPositionChild.run();
|
158
|
+
})(window);
|
@@ -75,4 +75,23 @@
|
|
75
75
|
|
76
76
|
autoLabelByPosition.run();
|
77
77
|
autoButtonsByPosition.run();
|
78
|
+
|
79
|
+
const $form = $(".edit_meeting, .new_meeting, .copy_meetings");
|
80
|
+
|
81
|
+
if ($form.length > 0) {
|
82
|
+
const $privateMeeting = $form.find("#private_meeting");
|
83
|
+
const $transparent = $form.find("#transparent");
|
84
|
+
|
85
|
+
const toggleDisabledHiddenFields = () => {
|
86
|
+
const enabledPrivateSpace = $privateMeeting.find("input[type='checkbox']").prop("checked");
|
87
|
+
$transparent.find("input[type='checkbox']").attr("disabled", "disabled");
|
88
|
+
|
89
|
+
if (enabledPrivateSpace) {
|
90
|
+
$transparent.find("input[type='checkbox']").attr("disabled", !enabledPrivateSpace);
|
91
|
+
}
|
92
|
+
};
|
93
|
+
|
94
|
+
$privateMeeting.on("change", toggleDisabledHiddenFields);
|
95
|
+
toggleDisabledHiddenFields();
|
96
|
+
}
|
78
97
|
})(window);
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="reveal" data-reveal id="meeting-registration-confirm-<%= model.id %>">
|
2
|
+
<div class="row">
|
3
|
+
<div class="columns medium-10 medium-offset-1 help-text">
|
4
|
+
<%= decidim_sanitize translated_attribute(model.registration_terms) %>
|
5
|
+
</div>
|
6
|
+
</div>
|
7
|
+
<div class="row">
|
8
|
+
<div class="columns medium-8 medium-offset-2">
|
9
|
+
<%= button_to t("confirm", scope: "decidim.meetings.meetings.registration_confirm"), meeting_registration_path(model), class: "button expanded", data: { disable: true } %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="text-center">
|
13
|
+
<button class="link" data-close><%= t("cancel", scope: "decidim.meetings.meetings.registration_confirm") %></button>
|
14
|
+
</div>
|
15
|
+
</div>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<% if model.can_be_joined_by?(current_user) %>
|
2
|
+
<% if model.has_registration_for? current_user %>
|
3
|
+
<%= action_authorized_button_to(
|
4
|
+
:join,
|
5
|
+
meeting_registration_path(model),
|
6
|
+
method: :delete,
|
7
|
+
class: "#{button_classes} secondary light",
|
8
|
+
data: { disable: true }
|
9
|
+
) do %>
|
10
|
+
<%= icon("check", class: "icon--small") %>
|
11
|
+
<%= t("going", scope: "decidim.meetings.meetings.show") %>
|
12
|
+
<% end %>
|
13
|
+
<% else %>
|
14
|
+
<%= render :registration_confirm %>
|
15
|
+
<%= action_authorized_button_to(
|
16
|
+
:join,
|
17
|
+
i18n_join_text,
|
18
|
+
"",
|
19
|
+
class: button_classes,
|
20
|
+
disabled: !model.has_available_slots?,
|
21
|
+
data: { open: current_user.present? ? "meeting-registration-confirm-#{model.id}" : "loginModal" }
|
22
|
+
) %>
|
23
|
+
<% end %>
|
24
|
+
<% if shows_remaining_slots? %>
|
25
|
+
<span><%= t("remaining_slots", scope: "decidim.meetings.meetings.show", count: model.remaining_slots) %></span>
|
26
|
+
<% end %>
|
27
|
+
<% end %>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
# This cell renders the button to join a meeting.
|
6
|
+
class JoinMeetingButtonCell < Decidim::ViewModel
|
7
|
+
include MeetingCellsHelper
|
8
|
+
include Decidim::SanitizeHelper
|
9
|
+
|
10
|
+
def show
|
11
|
+
render
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
delegate :current_user, :current_component, to: :controller, prefix: false
|
17
|
+
|
18
|
+
def button_classes
|
19
|
+
return "button expanded button--sc" if big_button?
|
20
|
+
"button card__button button--sc small"
|
21
|
+
end
|
22
|
+
|
23
|
+
def big_button?
|
24
|
+
options[:big_button]
|
25
|
+
end
|
26
|
+
|
27
|
+
def shows_remaining_slots?
|
28
|
+
options[:show_remaining_slots] && model.available_slots.positive?
|
29
|
+
end
|
30
|
+
|
31
|
+
def i18n_join_text
|
32
|
+
return I18n.t("join", scope: "decidim.meetings.meetings.show") if model.has_available_slots?
|
33
|
+
I18n.t("no_slots_available", scope: "decidim.meetings.meetings.show")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -5,7 +5,8 @@ module Decidim
|
|
5
5
|
# This cell renders the meeting card for an instance of a Meeting
|
6
6
|
# the default size is the Medium Card (:m)
|
7
7
|
# also available the List Item Card (:list_item)
|
8
|
-
class MeetingCell < Decidim::
|
8
|
+
class MeetingCell < Decidim::ViewModel
|
9
|
+
include MeetingCellsHelper
|
9
10
|
include Cell::ViewModel::Partial
|
10
11
|
|
11
12
|
def show
|
@@ -14,14 +15,6 @@ module Decidim
|
|
14
15
|
|
15
16
|
private
|
16
17
|
|
17
|
-
def title
|
18
|
-
translated_attribute model.title
|
19
|
-
end
|
20
|
-
|
21
|
-
def description
|
22
|
-
decidim_sanitize meeting_description(model)
|
23
|
-
end
|
24
|
-
|
25
18
|
def card_size
|
26
19
|
case @options[:size]
|
27
20
|
when :list_item
|
@@ -35,10 +28,6 @@ module Decidim
|
|
35
28
|
icon "meetings", remove_icon_class: true, width: 40, height: 70
|
36
29
|
end
|
37
30
|
|
38
|
-
def resource_path
|
39
|
-
resource_locator(model).path
|
40
|
-
end
|
41
|
-
|
42
31
|
def current_component
|
43
32
|
model.component
|
44
33
|
end
|
@@ -13,6 +13,14 @@ module Decidim
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
+
def resource_path
|
17
|
+
resource_locator(model).path
|
18
|
+
end
|
19
|
+
|
20
|
+
def title
|
21
|
+
translated_attribute model.title
|
22
|
+
end
|
23
|
+
|
16
24
|
def resource_date_time
|
17
25
|
str = l model.start_time, format: :decidim_day_of_year
|
18
26
|
str += " - "
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="card__icondata">
|
2
|
+
<ul class="card-data">
|
3
|
+
<li class="card-data__item">
|
4
|
+
<%= resource_icon %>
|
5
|
+
</li>
|
6
|
+
<li class="card-data__item">
|
7
|
+
<div class="text-left">
|
8
|
+
<div class="card__icondata--address">
|
9
|
+
<%= render partial: "decidim/shared/address_details.html", locals: { geolocalizable: model } %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</li>
|
13
|
+
</ul>
|
14
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="card__footer">
|
2
|
+
<div class="card__support">
|
3
|
+
<% if can_join? %>
|
4
|
+
<%= cell "decidim/meetings/join_meeting_button", model %>
|
5
|
+
<% else %>
|
6
|
+
<%= link_to t("view", scope: "decidim.meetings.meetings.show"), resource_path, class: "card__button button secondary button--sc small light" %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
9
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<li class="card-data__item">
|
2
|
+
<div class="card-data__item--multiple">
|
3
|
+
<div>
|
4
|
+
<strong>
|
5
|
+
<%= l start_date, format: :decidim_with_month_name %>
|
6
|
+
</strong>
|
7
|
+
<%= formatted_start_time %>
|
8
|
+
</div>
|
9
|
+
<%= icon "arrow-thin-right", class: "icon--big muted" %>
|
10
|
+
<div>
|
11
|
+
<strong>
|
12
|
+
<%= l end_date, format: :decidim_with_month_name %>
|
13
|
+
</strong>
|
14
|
+
<%= formatted_end_time %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: "decidim/shared/tags.html", locals: { resource: model, tags_class_extra: "tags--meeting" } %>
|
@@ -4,13 +4,46 @@ module Decidim
|
|
4
4
|
module Meetings
|
5
5
|
# This cell renders the Medium (:m) meeting card
|
6
6
|
# for an given instance of a Meeting
|
7
|
-
class MeetingMCell < Decidim::
|
8
|
-
|
7
|
+
class MeetingMCell < Decidim::CardMCell
|
8
|
+
include MeetingCellsHelper
|
9
|
+
|
10
|
+
def date
|
9
11
|
render
|
10
12
|
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
private
|
15
|
+
|
16
|
+
def resource_icon
|
17
|
+
icon "meetings", class: "icon--big"
|
18
|
+
end
|
19
|
+
|
20
|
+
def spans_multiple_dates?
|
21
|
+
start_date != end_date
|
22
|
+
end
|
23
|
+
|
24
|
+
def meeting_date
|
25
|
+
return render(:multiple_dates) if spans_multiple_dates?
|
26
|
+
render(:single_date)
|
27
|
+
end
|
28
|
+
|
29
|
+
def formatted_start_time
|
30
|
+
model.start_time.strftime("%H:%M")
|
31
|
+
end
|
32
|
+
|
33
|
+
def formatted_end_time
|
34
|
+
model.end_time.strftime("%H:%M")
|
35
|
+
end
|
36
|
+
|
37
|
+
def start_date
|
38
|
+
model.start_time.to_date
|
39
|
+
end
|
40
|
+
|
41
|
+
def end_date
|
42
|
+
model.end_time.to_date
|
43
|
+
end
|
44
|
+
|
45
|
+
def can_join?
|
46
|
+
model.can_be_joined_by?(current_user)
|
14
47
|
end
|
15
48
|
end
|
16
49
|
end
|