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 //--------------------------------------------------