Changeset - 1dcff9f4286f
[Not reviewed]
default
0 1 0
Nathan Brink (binki) - 15 years ago 2010-11-02 01:07:42
ohnobinki@ohnopublishing.net
Fix up validation to not require a class/course name if the class/course has had not sections added to it.
1 file changed with 38 insertions and 2 deletions:
0 comments (0 inline, 0 general)
scripts/scheduleInput.js
Show inline comments
 
@@ -40,33 +40,70 @@ var sectionsOfClass = new Array();
 
			var checkedCount = 0;
 
			jQuery(element).parent().parent().children().children('.daysRequired:checked').each( function() {
 
				checkedCount++;
 
			});
 
			if (checkedCount == 0) { 
 
				return false; 
 
			} 
 
			else return true; 
 
		}, 
 
		"<p class=\"error\">Select a day!</p>" 
 
	); 
 

	
 
/**
 
 * Class name validation: only require a class name if it has at least
 
 * one section. Backend throws out empty classes and it's more
 
 * convenient if we can let the user have one extra, empty class. This
 
 * is because we automatically add a new class each time we do an
 
 * autofill to make the life of the user easier and less confusing.
 
 */
 
jQuery.validator.addMethod('classRequired',
 
			   function(value, element)
 
			   {
 
			       if (value.length)
 
				   return true;
 

	
 
			       var css_classes = jQuery(element).attr('class');
 
			       var cnum_pos = css_classes.indexOf('className');
 
			       var cnum = css_classes.substr(cnum_pos + 'className'.length, css_classes.indexOf(' ', cnum_pos) - cnum_pos - 'className'.length) * 1;
 
			       if (cnum < 0 || cnum > classNum)
 
				   alert('JS error: ' + cnum + ' is an invalid class number.');
 

	
 
			       /*
 
				* ignore the class with no
 
				* sections. This only works when the
 
				* class was added and the user _never_
 
				* clicked the Add Section button. Once
 
				* the user clicks that button, he has
 
				* to delete the class because of how
 
				* our numbering works.
 
				*/
 
			       if (!sectionsOfClass[cnum])
 
				   return true;
 

	
 
			       return false;
 
			   },
 
			   '<p class="error">Enter Class Name.</p>'
 
			   );
 

	
 
	//--------------------------------------------------
 
	// Add validation rules
 
	//--------------------------------------------------
 
	jQuery.validator.addClassRules("selectRequired", {
 
		selectNone: true
 
	});
 
	jQuery.validator.addClassRules("daysRequired", {
 
		daysRequired: true
 
	});
 
jQuery.validator.addClassRules('classRequired', { classRequired: true });
 

	
 

	
 
    //--------------------------------------------------
 
    // General Input Functions
 
    //--------------------------------------------------
 

	
 
/**
 
 * \brief
 
 * Returns the common inputs for each new section.
 
 */
 
function genSectionHtml(cnum)
 
{
 
@@ -184,25 +221,25 @@ function add_sections(cnum, data)
 
	{
 
	    section = data.sections[i];
 
	    add_section_n(cnum, section.section, section.synonym, section.time_start, section.time_end, section.days, section.prof, section.location);
 
	}
 
}
 

	
 
	//--------------------------------------------------
 
	// Adds a new class to the input.
 
	//--------------------------------------------------
 
	function add_class_n(name)
 
	{
 
		sectionsOfClass[classNum] = 0; // Initialize at 0
 
		jQuery('#jsrows').append('<tr title="' + classNum + '" class="class class' + classNum + ' pclass' + classNum + '"><td><input type="text" class="className required defText className'+classNum+'" title="Class Name" name="postData[' + classNum + '][name]" value="' + name + '" /></td><td colspan="9"></td><td class="tdInput"><div class="addSection"><input type="button" value="Add Section" class="gray" /></div></td><td class="tdInput"><div class="deleteClass"><input type="button" value="Remove" class="gray" /></div></td></tr>');
 
		jQuery('#jsrows').append('<tr title="' + classNum + '" class="class class' + classNum + ' pclass' + classNum + '"><td><input type="text" class="classRequired defText className'+classNum+' className" title="Class Name" name="postData[' + classNum + '][name]" value="' + name + '" /></td><td colspan="9"></td><td class="tdInput"><div class="addSection"><input type="button" value="Add Section" class="gray" /></div></td><td class="tdInput"><div class="deleteClass"><input type="button" value="Remove" class="gray" /></div></td></tr>');
 

	
 
		jQuery('.className' + classNum).autocomplete({ source: "auto.php" });
 
		jQuery('.className' + classNum).bind('autocompleteselect', {'class_num': classNum},
 
			function(event, ui)
 
			    {
 
				if (ui.item && ui.item.value.indexOf('-'))
 
				    {
 
					jQuery.ajax(
 
						      {
 
							  url: 'auto.php',
 
							  data: {'getsections': 1, 'term': ui.item.value},
 
							  context: {'class_num': event.data.class_num},
 
@@ -265,25 +302,24 @@ function prettyTime(time_str)
 

	
 
    return hour_str + ':' + time_str.substr(2) + ' ' + m + 'm';
 
}
 

	
 
//--------------------------------------------------
 
// Items bound to pageload/events
 
//--------------------------------------------------
 
jQuery(document).ready(function() {
 

	
 
	//--------------------------------------------------
 
	// Validates the form (pre-submission check)
 
	//--------------------------------------------------
 
	/* don't call if IE doesn't think the function exists */
 
	jQuery('#scheduleForm').validate({ debug: false });
 

	
 
	//--------------------------------------------------
 
	// Bind the class-adding method
 
	//--------------------------------------------------
 
	jQuery('#addclass').click(function() {
 
		add_class();
 
	});
 

	
 
	//--------------------------------------------------
 
	// Deletes the selected class from input
 
	//--------------------------------------------------
0 comments (0 inline, 0 general)