diff --git a/scripts/scheduleInput.js b/scripts/scheduleInput.js
--- a/scripts/scheduleInput.js
+++ b/scripts/scheduleInput.js
@@ -62,6 +62,16 @@ var course_ajax_requests = [];
*/
var slate_permutate_course_free = -1;
+/**
+ * \brief
+ * Whether or not we should divulge the existence of course slots to
+ * the user.
+ *
+ * This will automatically be set to true as soon as a course
+ * utilizing multiple slots is added using autocomplete.
+ */
+var show_course_slots = false;
+
/*
* General Input Functions
*/
@@ -109,16 +119,20 @@ function addTips()
* \brief
* Add a section to a class.
*/
-function add_section_n(cnum, name, synonym, stime, etime, days, instructor, location, type)
+function add_section_n(cnum, name, synonym, stime, etime, days, instructor, location, type, slot)
{
var snum = last_section_i ++;
- var cssclasses = 'section class' + cnum;
+ var cssclasses = 'section class' + cnum + ' ' + safe_css_class('slot-' + slot);
+ var last_tr;
if(type == 'lab')
cssclasses += ' lab';
var section_html = '
' +
- '
' +
+ '
' +
+ ' ' +
+ ' ' +
+ '
' +
'
' +
'
';
- jQuery('tr.class' + cnum + ':last').after(section_html);
+ /*
+ * Try to append this section to the last section in its
+ * associated CourseSlot...
+ */
+ last_tr = jQuery('tr.class' + cnum + '.' + safe_css_class('slot-' + slot) + ':last');
+ if (!last_tr.length)
+ {
+ /* Also append a a new ``we are this slot'' row... */
+ course_add_slot_row(cnum, slot);
+ last_tr = jQuery('tr.class' + cnum + ':last');
+ }
+ last_tr.after(section_html);
sectionsOfClass[cnum] ++;
var section_tr = jQuery('#tr-section-' + String(snum));
@@ -199,6 +224,7 @@ function add_section_n(cnum, name, synon
*/
section_tr.find('.section-letter-entry').val(name);
section_tr.find('.section-synonym-entry').val(synonym);
+ section_tr.find('.section-slot-entry').val(slot);
section_tr.find('.profName').val(instructor);
section_tr.find('.section-location-entry').val(location);
section_tr.find('.section-type-entry').val(type);
@@ -211,7 +237,7 @@ function add_section_n(cnum, name, synon
}
function add_section(cnum)
{
- var section_i = add_section_n(cnum, '', '', '', '', {m: false, t: false, w: false, h: false, f: false, s: false}, '', '', '');
+ var section_i = add_section_n(cnum, '', '', '', '', {m: false, t: false, w: false, h: false, f: false, s: false}, '', '', '', 'default');
if (cnum == slate_permutate_course_free)
course_free_check(cnum);
return section_i;
@@ -242,7 +268,10 @@ function add_sections(cnum, data)
jQuery.each(data.sections, function(i, section)
{
- add_section_n(cnum, section.section, section.synonym, section.time_start, section.time_end, section.days, section.instructor, section.location, section.type);
+ if (!section.slot)
+ section.slot = 'default';
+
+ add_section_n(cnum, section.section, section.synonym, section.time_start, section.time_end, section.days, section.instructor, section.location, section.type, section.slot);
});
/*
@@ -262,6 +291,57 @@ function add_sections(cnum, data)
/**
* \brief
+ * Adds an identifier for a course slot.
+ *
+ * \param course_i
+ * The javascript index of the course to which a slot is being
+ * added.
+ * \param slot_id
+ * The idenfifier of the slot.
+ */
+function course_add_slot_row(course_i, slot_id)
+{
+ var extra_classes = '';
+
+ if (!show_course_slots)
+ {
+ var aclass;
+ /*
+ * Then check if this course has multiple slots and we should
+ * enable displaying them to the user.
+ */
+ aclass = jQuery('.' + safe_css_class('class' + course_i) + '.section .section-slot-entry');
+ if (aclass.length && aclass.val() != slot_id)
+ {
+ enable_course_slots();
+ }
+ }
+ if (!show_course_slots)
+ extra_classes += ' tr-slot-id-hidden';
+
+ jQuery('tr.class' + course_i + ':last').after(
+ '
\n' +
+ '
\n' +
+ '
\n' +
+ '
\n' +
+ '
\n'
+ );
+ jQuery('tr.class' + course_i + ':last .slot-id-text').text('The following are ' + slot_id + ' sections and will be scheduled as a group.');
+}
+
+/**
+ * \brief
+ * Dynamically enable the displification of course slots to the user.
+ */
+function enable_course_slots()
+{
+ show_course_slots = true;
+
+ jQuery('.tr-slot-id-hidden').removeClass('tr-slot-id-hidden');
+}
+
+/**
+ * \brief
* Adds a new class to the input.
*
* \param course_id
@@ -554,6 +634,18 @@ function prettyTime(time_str)
return hour_str + ':' + time_str.substr(2) + ' ' + m + 'm';
}
+/**
+ * \brief
+ * Takes any value classname and tries to smooth it out to a valid
+ * CSS class name.
+ *
+ * \todo STUB
+ */
+function safe_css_class(classname)
+{
+ return classname;
+}
+
//--------------------------------------------------
// Items bound to pageload/events
//--------------------------------------------------