Skip to content

Commit b6ac3d4

Browse files
Allow hiding/blurring sessions and timeslots based on TimeSlotType in the schedule editor
- Legacy-Id: 19438
1 parent 3e3d681 commit b6ac3d4

7 files changed

Lines changed: 84 additions & 31 deletions

File tree

ietf/meeting/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def _session_name_keyword(self, session):
310310

311311
@property
312312
def filterable_purposes(self):
313-
return SessionPurposeName.objects.exclude(slug='session').order_by('name')
313+
return SessionPurposeName.objects.exclude(slug='regular').order_by('name')
314314

315315

316316
class AgendaFilterOrganizer(AgendaKeywordTool):

ietf/meeting/views.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,14 @@ def cubehelix(i, total, hue=1.2, start_angle=0.5):
991991
p.light_scheduling_color = "rgb({}, {}, {})".format(*tuple(int(round((0.9 + 0.1 * x) * 255)) for x in rgb_color))
992992

993993
session_purposes = sorted(set(s.purpose for s in sessions if s.purpose), key=lambda p: p.name)
994+
timeslot_types = sorted(
995+
set(
996+
s.type for s in sessions if s.type
997+
).union(
998+
t.type for t in timeslots_qs.all()
999+
),
1000+
key=lambda tstype: tstype.name,
1001+
)
9941002

9951003
return render(request, "meeting/edit_meeting_schedule.html", {
9961004
'meeting': meeting,
@@ -1003,6 +1011,7 @@ def cubehelix(i, total, hue=1.2, start_angle=0.5):
10031011
'unassigned_sessions': unassigned_sessions,
10041012
'session_parents': session_parents,
10051013
'session_purposes': session_purposes,
1014+
'timeslot_types': timeslot_types,
10061015
'hide_menu': True,
10071016
'lock_time': lock_time,
10081017
})

ietf/secr/sreq/forms.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ def __init__(self, group, meeting, data=None, *args, **kwargs):
9494
self.session_forms = formset_class(group=self.group, meeting=meeting, data=data)
9595
super(SessionForm, self).__init__(data=data, *args, **kwargs)
9696

97+
# Allow additional sessions for non-wg-like groups
9798
if not self.group.features.acts_like_wg:
9899
self.fields['num_session'].choices = ((n, str(n)) for n in range(1, 13))
100+
99101
self.fields['comments'].widget = forms.Textarea(attrs={'rows':'3','cols':'65'})
100102

101103
other_groups = list(allowed_conflicting_groups().exclude(pk=group.pk).values_list('acronym', 'acronym').order_by('acronym'))

ietf/static/ietf/css/ietf.css

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,10 +1333,20 @@ a.fc-event, .fc-event, .fc-content, .fc-title, .fc-event-container {
13331333

13341334
.edit-meeting-schedule .scheduling-panel .preferences {
13351335
margin: 0.5em 0;
1336+
display: flex;
1337+
align-items: flex-start;
13361338
}
13371339

1338-
.edit-meeting-schedule .scheduling-panel .preferences > span {
1340+
.edit-meeting-schedule .scheduling-panel .preferences > div {
1341+
display: flex;
1342+
flex-direction: column;
1343+
align-items: flex-start;
1344+
}
1345+
1346+
.edit-meeting-schedule .scheduling-panel .preferences > div > span {
1347+
margin-top: 0;
13391348
margin-right: 1em;
1349+
white-space: nowrap;
13401350
}
13411351

13421352
.edit-meeting-schedule .sort-unassigned select {
@@ -1363,7 +1373,7 @@ a.fc-event, .fc-event, .fc-content, .fc-title, .fc-event-container {
13631373
margin-top: 1em;
13641374
}
13651375

1366-
.edit-meeting-schedule .session-parent-toggles label {
1376+
.edit-meeting-schedule .toggle-inputs label {
13671377
font-weight: normal;
13681378
margin-right: 1em;
13691379
padding: 0 1em;

ietf/static/ietf/js/edit-meeting-schedule.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,23 @@ jQuery(document).ready(function () {
724724
sessionParentInputs.on("click", updateSessionParentToggling);
725725
updateSessionParentToggling();
726726

727+
// Toggling timeslot types
728+
let timeSlotTypeInputs = content.find('.timeslot-type-toggles input');
729+
function updateTimeSlotTypeToggling() {
730+
let checked = [];
731+
timeSlotTypeInputs.filter(":checked").each(function () {
732+
checked.push("[data-type=" + this.value + "]");
733+
});
734+
735+
sessions.filter(checked.join(",")).removeClass('hidden-timeslot-type');
736+
sessions.not(checked.join(",")).addClass('hidden-timeslot-type');
737+
timeslots.filter(checked.join(",")).removeClass('hidden-timeslot-type');
738+
timeslots.not(checked.join(",")).addClass('hidden-timeslot-type');
739+
}
740+
741+
timeSlotTypeInputs.on("click", updateTimeSlotTypeToggling);
742+
updateTimeSlotTypeToggling();
743+
727744
// Toggling session purposes
728745
let sessionPurposeInputs = content.find('.session-purpose-toggles input');
729746
function updateSessionPurposeToggling() {

ietf/static/ietf/js/meeting/session_details_form.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
function update_name_field_visibility(name_elt, purpose) {
5757
const row = name_elt.closest('tr');
58-
if (purpose === 'session') {
58+
if (purpose === 'regular') {
5959
row.setAttribute('hidden', 'hidden');
6060
} else {
6161
row.removeAttribute('hidden');

ietf/templates/meeting/edit_meeting_schedule.html

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
.edit-meeting-schedule .past-flag { visibility: hidden; font-size: smaller; }
1818
.edit-meeting-schedule .edit-grid .timeslot.past .past-flag { visibility: visible; color: #aaaaaa; }
1919
{# type and purpose styling #}
20-
.edit-meeting-schedule .edit-grid .timeslot.wrong-timeslot-type { background-color: transparent; ); }
21-
.edit-meeting-schedule .edit-grid .timeslot.wrong-timeslot-type .time-label { color: transparent; ); }
22-
.edit-meeting-schedule .session.hidden-purpose { filter: blur(3px); }
20+
.edit-meeting-schedule .edit-grid .timeslot.wrong-timeslot-type,
21+
.edit-meeting-schedule .edit-grid .timeslot.hidden-timeslot-type { background-color: transparent; ); }
22+
.edit-meeting-schedule .edit-grid .timeslot.wrong-timeslot-type .time-label,
23+
.edit-meeting-schedule .edit-grid .timeslot.hidden-timeslot-type .time-label { color: transparent; ); }
24+
.edit-meeting-schedule .session.hidden-purpose,
25+
.edit-meeting-schedule .session.hidden-timeslot-type { filter: blur(3px); }
2326
{% endblock morecss %}
2427

2528
{% block title %}{{ schedule.name }}: IETF {{ meeting.number }} meeting agenda{% endblock %}
@@ -172,32 +175,44 @@
172175
</div>
173176

174177
<div class="preferences">
175-
<span class="sort-unassigned">
176-
Sort unassigned:
177-
<select name="sort_unassigned" class="form-control">
178-
<option value="name" selected="selected">By name</option>
179-
<option value="parent">By area</option>
180-
<option value="duration">By duration</option>
181-
<option value="comments">Special requests</option>
182-
</select>
183-
</span>
184-
185-
<span class="session-parent-toggles">
186-
Show:
187-
{% for p in session_parents %}
188-
<label class="parent-{{ p.acronym }}"><input type="checkbox" checked value="{{ p.acronym }}"> {{ p.acronym }}</label>
189-
{% endfor %}
190-
</span>
178+
<div>
179+
<span class="sort-unassigned">
180+
Sort unassigned:
181+
<select name="sort_unassigned" class="form-control">
182+
<option value="name" selected="selected">By name</option>
183+
<option value="parent">By area</option>
184+
<option value="duration">By duration</option>
185+
<option value="comments">Special requests</option>
186+
</select>
187+
</span>
188+
189+
<span class="timeslot-group-toggles">
190+
<button class="btn btn-default" data-toggle="modal" data-target="#timeslot-group-toggles-modal"><input type="checkbox" checked="checked" disabled> Timeslots</button>
191+
</span>
192+
</div>
191193

192-
<span class="session-purpose-toggles">
193-
{% for purpose in session_purposes %}
194-
<label class="purpose-{{ purpose.slug }}"><input type="checkbox" checked value="{{ purpose.slug }}"> {{ purpose }}</label>
195-
{% endfor %}
196-
</span>
194+
<div>
195+
<span class="toggle-inputs session-parent-toggles">
196+
Show:
197+
{% for p in session_parents %}
198+
<label class="parent-{{ p.acronym }}"><input type="checkbox" checked value="{{ p.acronym }}"> {{ p.acronym }}</label>
199+
{% endfor %}
200+
</span>
197201

198-
<span class="timeslot-group-toggles">
199-
<button class="btn btn-default" data-toggle="modal" data-target="#timeslot-group-toggles-modal"><input type="checkbox" checked="checked" disabled> Timeslots</button>
200-
</span>
202+
<span class="toggle-inputs session-purpose-toggles">
203+
Purpose:
204+
{% for purpose in session_purposes %}
205+
<label class="purpose-{{ purpose.slug }}"><input type="checkbox" checked value="{{ purpose.slug }}"> {{ purpose }}</label>
206+
{% endfor %}
207+
</span>
208+
209+
<span class="toggle-inputs timeslot-type-toggles">
210+
Type:
211+
{% for type in timeslot_types %}
212+
<label class="timeslot-type-{{ type.slug }}"><input type="checkbox" checked value="{{ type.slug }}"> {{ type }}</label>
213+
{% endfor %}
214+
</span>
215+
</div>
201216
</div>
202217
</div>
203218

0 commit comments

Comments
 (0)