This change locks down the schedule of any meeting that is fully in the past. It leaves open sessions that have finished for meetings that have not yet finished. Addresses (partially) issue #3083. Commit ready for merge. - Legacy-Id: 19030
389 lines
15 KiB
HTML
389 lines
15 KiB
HTML
{% extends "base.html" %}
|
|
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
|
{% load origin %}
|
|
{% load static %}
|
|
{% load ietf_filters %}
|
|
{% load humanize %}
|
|
|
|
{% block morecss %}
|
|
{% for area in area_list %}
|
|
.{{ area.upcase_acronym}}-scheme, .meeting_event th.{{ area.upcase_acronym}}-scheme, #{{ area.upcase_acronym }}-groups, #selector-{{ area.upcase_acronym }} { color:{{ area.fg_color }}; background-color: {{ area.bg_color }} }
|
|
.director-mark-{{ area.upcase_acronym}} {
|
|
border: 2px solid {{ area.fg_color}};
|
|
color:{{ area.fg_color }};
|
|
background-color: {{ area.bg_color }}
|
|
}
|
|
{% endfor %}
|
|
{% endblock morecss %}
|
|
|
|
{% block title %}IETF {{ meeting.number }} Meeting Agenda{% endblock %}
|
|
{% load agenda_custom_tags %}
|
|
{% block pagehead %}
|
|
<link rel='stylesheet' type='text/css' href="{% static 'ietf/css/agenda/jquery-ui-themes/jquery-ui-1.8.11.custom.css' %}" />
|
|
<link rel='stylesheet' type='text/css' href="{% static 'ietf/css/agenda/agenda.css' %}" />
|
|
{% endblock pagehead %}
|
|
|
|
{% block js %}
|
|
<script type="text/javascript" src="{% static 'ietf/js/agenda/jquery-1.8.2.min.js' %}"></script>
|
|
<script src="{% static 'js-cookie/src/js.cookie.js' %}"></script>
|
|
<script>
|
|
jQuery.ajaxSetup({
|
|
crossDomain: false, // obviates need for sameOrigin test
|
|
beforeSend: function(xhr, settings) {
|
|
if (!csrfSafeMethod(settings.type)) {
|
|
xhr.setRequestHeader("X-CSRFToken", Cookies.get('csrftoken'));
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery-ui.custom.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery.ui.widget.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery.ui.droppable.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery.ui.sortable.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery.ui.accordion.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/jquery-ui-1.9.0.custom/minified/jquery.ui.draggable.min.js' %}"></script>
|
|
|
|
<script type='text/javascript' src="{% static 'spin.js/spin.min.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/agenda_edit.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/agenda_helpers.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/agenda_objects.js' %}"></script>
|
|
<script type='text/javascript' src="{% static 'ietf/js/agenda/agenda_listeners.js' %}"></script>
|
|
|
|
|
|
<script type='text/javascript'>
|
|
|
|
|
|
var meeting_number = "{{ meeting.number }}";
|
|
var schedule_id = {{ schedule.id }};
|
|
var schedule_owner_href = "{{ schedule.owner_email }}";
|
|
var schedule_name = "{{ schedule.name }}";
|
|
var meeting_base_url = "{{ meeting_base_url }}";
|
|
var schedule_owner_email = "{{ schedule.owner_email }}";
|
|
var site_base_url = "{{ site_base_url }}";
|
|
var assignments_post_href = "{% url "ietf.meeting.ajax.assignments_json" meeting.number schedule.owner_email schedule.name %}";
|
|
var total_days = {{time_slices|length}};
|
|
var total_rooms = {{rooms|length}};
|
|
|
|
function setup_slots(promiselist){
|
|
{% for day in time_slices %}
|
|
days.push("{{day}}");
|
|
{% endfor %}
|
|
|
|
{% for ad in area_directors %}
|
|
area_directors["{{ad.group.acronym}}"] = [];
|
|
{% endfor %}
|
|
{% for ad in area_directors %}
|
|
area_directors["{{ad.group.acronym}}"].push(find_person_by_href("{{ad.person.defurl}}"));
|
|
{% endfor %}
|
|
|
|
var ts_promise = load_timeslots("{% url "ietf.meeting.ajax.timeslot_slotsurl" meeting.number %}");
|
|
var sess_promise = load_sessions("{% url "ietf.meeting.ajax.sessions_json" meeting.number %}");
|
|
promiselist.push(ts_promise);
|
|
promiselist.push(sess_promise);
|
|
|
|
var ss_promise = load_assignments(ts_promise, sess_promise, assignments_post_href);
|
|
promiselist.push(ss_promise);
|
|
|
|
console.log("setup_slots run");
|
|
|
|
{% for area in area_list %}
|
|
legend_status["{{area.upcase_acronym}}"] = true;
|
|
{% endfor %}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
</script>
|
|
<style type='text/css'>
|
|
|
|
</style>
|
|
{% endblock js %}
|
|
|
|
|
|
{% block content %}
|
|
{% origin %}
|
|
<div id="read_only">
|
|
<p>You do not have write permission to agenda: {{schedule.name}}</p>
|
|
{% if schedule.is_official_record %}
|
|
<p>This is the official schedule for a meeting in the past.</p>
|
|
{% endif %}
|
|
<p>Please save this agenda to your account first.</p>
|
|
</div>
|
|
|
|
<div class="content"> {% comment %} For preserving styling across the facelift {% endcomment %}
|
|
|
|
<div class="wrapper custom_text_stuff">
|
|
|
|
|
|
<div id="unassigned-items">
|
|
<div id="all_agendas" class="events_bar_buttons">
|
|
<a href="{% url "ietf.meeting.views.list_schedules" meeting.number %}">
|
|
<button class="styled_button">all agendas</button>
|
|
</a>
|
|
</div>
|
|
<div id="hidden_room" class="hide_buttons events_bar_buttons">
|
|
<div class="very_small left">hidden rooms:<span id="hidden_rooms" >0/{{rooms|length}}</span></div>
|
|
<div><button class="small_button" id="show_hidden_rooms">Show</button></div>
|
|
</div>
|
|
<div id="hidden_day" class="hide_buttons events_bar_buttons">
|
|
<div class="very_small left">hidden days:<span id="hidden_days" >0/{{time_slices|length}}</span></div>
|
|
<div><button class="small_button" id="show_hidden_days">Show</button></div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="unassigned_order" class="events_bar_buttons">
|
|
<select id="unassigned_sort_button" class="dialog">
|
|
<option id="unassigned_alpha" value="alphaname" selected>Alphabetical</option>
|
|
<option id="unassigned_area" value="area">By Area</option>
|
|
<option id="unassigned_duration" value="duration">By Duration</option>
|
|
<option id="unassigned_special" value="special">Special Request</option>
|
|
</select>
|
|
</div>
|
|
<div class="agenda_slot_title" >
|
|
<div style="ui-icon ui-icon-arrow-1-w" id="close_ietf_menubar">
|
|
<
|
|
</div>
|
|
<b>Unassigned Events:</b>
|
|
<span id="schedule_name">name: {{schedule.name}}</span>
|
|
</div>
|
|
<div id="sortable-list" class="ui-droppable bucket-list room_title">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="agenda_div">
|
|
|
|
<div id="dialog-confirm" title="" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
Are you sure you want to put two sessions into the same slot?
|
|
</p>
|
|
</div>
|
|
|
|
<div id="can-extend-dialog" title="" class="ui-dialog dialog" style="display:none">
|
|
</div>
|
|
|
|
<div id="can-not-extend-dialog" title="" class="ui-dialog dialog" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
You can not extend this session. The slot is not available.
|
|
</p>
|
|
</div>
|
|
|
|
|
|
<div id="dialog-confirm" title="" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
Are you sure you want to put two sessions into the same slot?
|
|
</p>
|
|
</div>
|
|
|
|
<!-- some boxes for dialogues -->
|
|
<div id="dialog-confirm-two" title="" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
<span class="dialog-confirm-text">Are you sure you want to put two sessions into the same slot?</span>
|
|
</p>
|
|
</div>
|
|
|
|
<div id="dialog-confirm-toosmall" title="" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
<span class="dialog-confirm-text">The room you are moving to has a lower
|
|
room capacity then the requested capacity,<br>
|
|
Are you sure you want to continue?
|
|
</span>
|
|
</p>
|
|
</div>
|
|
|
|
<div id="dialog-confirm-twotoosmall" title="" style="display:none">
|
|
<p>
|
|
<span class="ui-icon ui-icon-alert" style="background: white; float: left; margin: 0 7px 20px 0;"></span>
|
|
<span class="dialog-confirm-text">
|
|
The slot you are moving to already has a session in it, <br>
|
|
the room is also smaller than the requested amount.<br>
|
|
Are you sure you want to continue?
|
|
</span>
|
|
</p>
|
|
</div>
|
|
|
|
|
|
{%comment%}<table id="meetings" class="ietf-navbar" style="width:100%">{%endcomment%}
|
|
<table id="meetings" class="ietf-navbar" >
|
|
<tr>
|
|
<th class="schedule_title"><div id="pageloaded" style="display:none">loaded</div><div id="spinner"><!-- spinney goes here --></div></th>
|
|
{% comment %}<th></th>{% endcomment %}
|
|
{% for day in time_slices %}
|
|
<th colspan="{{date_slices|colWidth:day}}" id="{{day|date:'Y-m-d'}}-btn" class=" day_{{day}} agenda_slot_title agenda_slot_unavailable">
|
|
<div id="close_{{day|date:'Y-m-d'}}" class="close top_left very_small close_day">x</div>
|
|
{{day|date:'D'}} ({{day}})
|
|
|
|
</th>
|
|
<th class="day_{{day}} spacer {{day|date:'Y-m-d'}}-spacer" id="">
|
|
<div class="ui-widget-content ui-resizable" id="resize-{{day|date:'Y-m-d'}}-spacer">
|
|
<div class="spacer_grip ui-resizable-handle ui-resizable-e"></div>
|
|
</div>
|
|
</th>
|
|
{% endfor %}
|
|
</tr>
|
|
|
|
<tr>
|
|
<th class="th_column"><button id="show_all_button" class="styled_button">show all</button></th>
|
|
{% comment %}<th><!-- resources --></th>{% endcomment %}
|
|
{% for day in time_slices %}
|
|
{% for slot in date_slices|lookup:day %}
|
|
<th class="day_{{day}}-{{slot.0|date:'Hi'}} day_{{day}} room_title ">{{slot.0|date:'Hi'}}-{{slot.1|date:'Hi'}} </th>
|
|
|
|
{% endfor %}
|
|
<th class="day_{{day}} spacer {{day|date:'Y-m-d'}}-spacer"></th>
|
|
|
|
{% endfor %}
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
{% for r in rooms %}
|
|
<tr id="{{r.name|to_acceptable_id}}" class="{% cycle 'agenda_row_alt' '' %} agenda_slot">
|
|
<th class="vert_time">
|
|
<div class="close very_small close_room top_left small_button" id="close_{{r.name|to_acceptable_id}}">X</div>
|
|
<div class="right room_name">{{r.name}} <span class="capacity">({{r.capacity}})</span></div>
|
|
</th>
|
|
{% comment 'The secretariat is not using these features' %}
|
|
<th class="room_features">
|
|
<div class="resource_list">
|
|
{% for resource in r.resources.all %}
|
|
<span class="resource_image">
|
|
<img src="{% static 'ietf/images/{{ resource.icon }}' %}" height=24 alt="{{resource.desc}}" title="{{resource.desc}}"/>
|
|
</span>
|
|
{% endfor %}
|
|
</div>
|
|
</th>
|
|
{% endcomment %}
|
|
{% for day in time_slices %}
|
|
{% for slot in date_slices|lookup:day %}
|
|
<td id="{{r.dom_id}}_{{day}}_{{slot.0|date:'Hi'}}" class="day_{{day}} agenda-column-{{day}}-{{slot.0|date:'Hi'}} agenda_slot agenda_slot_unavailable" capacity="{{r.capacity}}" ></td>
|
|
{% endfor %}
|
|
<td class="day_{{day}} spacer {{day|date:'Y-m-d'}}-spacer"></td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% endfor %}
|
|
</table>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="session-info" class="ui-droppable bucket-list room_title">
|
|
<div class="agenda_slot_title"><b>Session Information:</b></div>
|
|
|
|
<div class="ss_info_box">
|
|
<div class="ss_info ss_info_left">
|
|
<table>
|
|
<tr><td class="ss_info_name_short">Group:</td><td><span id="info_grp"></span>
|
|
<!-- <button id="agenda_sreq_button" class="right">Edit Request</button> --></tr>
|
|
<tr><td class="ss_info_name_short">Name:</td> <td id="info_name"></td></tr>
|
|
<tr><td class="ss_info_name_short">Area:</td> <td><span id="info_area"></span>
|
|
<button id="show_all_area" class="right">Show All</button></td></tr>
|
|
<tr>
|
|
<td colspan=2>
|
|
<div class="agenda_nice_button" id="agenda_find_free">
|
|
<button class="agenda_selected_buttons small_button" id="find_free">Find Free</button>
|
|
</div>
|
|
<div class="agenda_nice_button button_disabled" id="agenda_double_slot">
|
|
<button class="agenda_selected_buttons small_button" disabled id="double_slot">Extend</button>
|
|
</div>
|
|
<div id="agenda_pin_slot" class="agenda_nice_button button_disabled">
|
|
<button class="agenda_selected_buttons small_button" disabled id="pin_slot">Pin</button>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
|
|
</table>
|
|
</div>
|
|
|
|
<div class="ss_info ss_info_right">
|
|
<table>
|
|
<tr><td class="ss_info_name_long">Duration/Capacity:</td>
|
|
<td class="info_split"><span id="info_duration"></span>
|
|
<span style="right" id="grp_type"></span></td>
|
|
<td class="info_split" id="info_capacity"></td></tr>
|
|
<tr><td class="ss_info_name_long">Location:</td><td colspan=2 id="info_location"></td></tr>
|
|
<tr><td class="ss_info_name_long">Responsible AD:</td><td colspan=2 id="info_responsible"></td></tr>
|
|
<tr><td class="ss_info_name_long">Requested By:</td><td colspan=2 id="info_requestedby"></td></tr>
|
|
<tr>
|
|
<td colspan=3>
|
|
<div class="agenda_nice_button button_disabled" id="agenda_prev_session">
|
|
<button class="agenda_selected_buttons small_button" disabled id="prev_session">Prev</button>
|
|
</div>
|
|
<div class="agenda_nice_button button_disabled" id="agenda_show">
|
|
<button class="agenda_selected_buttons small_button" disabled id="show_session">Show</button>
|
|
</div>
|
|
<div class="agenda_nice_button button_disabled" id="agenda_next_session">
|
|
<button class="agenda_selected_buttons small_button" disabled id="next_session">Next</button>
|
|
</div>
|
|
|
|
<div class="request_features" id="agenda_requested_features">
|
|
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div id="conflict_table">
|
|
<div id="special_requests">Special Requests</div>
|
|
<table>
|
|
<tbody id="conflict_table_body">
|
|
<tr class="conflict_list_row">
|
|
<td class="conflict_list_title">
|
|
Group conflicts
|
|
</td>
|
|
<td id="conflict_group_list">
|
|
<ul>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
<tr class="conflict_list_row">
|
|
<td class="conflict_list_title">
|
|
<b>be present</b>
|
|
</td>
|
|
<td id="conflict_people_list">
|
|
<ul>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="color_legend">
|
|
{% for area in area_list %}
|
|
<span class="{{area.upcase_acronym}}-scheme"><input class='color_checkboxes' type="checkbox" id="{{area.upcase_acronym}}" value="{{area.upcase_acronym}}-value" checked>{{area.upcase_acronym}}</span>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="agenda_save_box">
|
|
|
|
<div id="agenda_title"><b>Agenda name: </b><span>{{schedule.name}}</span></div>
|
|
{% if can_edit_properties %}
|
|
<div><b>Properties</b> <a href="{% url "ietf.meeting.views.edit_schedule_properties" schedule.meeting.number schedule.owner_email schedule.name %}">Edit</a></div>
|
|
{% endif %}
|
|
<div id="agenda_saveas">
|
|
<form action="{{saveasurl}}" method="post">{% csrf_token %}
|
|
{{ saveas.as_p }}
|
|
<input id="saveasbutton" type="submit" name="saveas" value="saveas">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div> {% comment %} End of .content div {% endcomment %}
|
|
|
|
{% endblock %}
|