--- loncom/homework/task_grading.js 2006/03/28 18:33:24 1.1 +++ loncom/homework/task_grading.js 2006/04/19 20:36:19 1.2 @@ -68,16 +68,24 @@ function getEventObject(e) { } //Attach an onClick event handler to a node -function attachClickEvent(node, func) { - node.onclick = func; //Add event - +function attachEvent(node, eventName, func) { + node[eventName] = func; //Add event + if (!isIE) { //Allow me to raise events - node.addEventListener("onclick", func, true); //false to get it in bubble not capture + node.addEventListener(eventName, func, true); //false to get it in bubble not capture + } + if (node.captureEvents) { + var eventMap = new Object; + eventMap["onclick"] = Event.CLICK; + eventMap["onchange"] = Event.CHANGE; + eventMap["onsubmit"] = Event.SUBMIT; + if (! eventMap[eventName]) { return false; } + node.captureEvents(eventMap[eventName]); } - if (node.captureEvents) { node.captureEvents(Event.CLICK); } } + //Fire an event on a given node function dispatchEvent(node, eventName) { if (document.createEvent) { @@ -111,7 +119,7 @@ function setupHandin() { var a = document.createElement('a'); var txt = document.createTextNode('Collapse'); a.setAttribute('href', '#'); - attachClickEvent(a, onSlideDrawer); + attachEvent(a, "onchange", onSlideDrawer); a.appendChild(txt); li.appendChild(a); @@ -149,8 +157,9 @@ function setupGrading() { for (var i = 0; i < inputs.length; i++) { if (inputs[i].type == "radio") { var val = inputs[i].value; - if (val == "pass" || val == "fail" || val == "review") { - attachClickEvent(inputs[i], onSetGrade); //Add event + if (val == "pass" || val == "fail" || val == "review" || val == "ungraded") { + attachEvent(inputs[i], "onchange", onSetGrade); + attachEvent(inputs[i], "onclick", onSetGrade); } if (inputs[i].checked) { dispatchEvent(inputs[i], 'onclick'); @@ -161,15 +170,13 @@ function setupGrading() { //Adjust the Done/Stop/Fail All button set function setupButtons() { - //Create Fail All button - var btn = document.createElement('input'); - btn.setAttribute('type', 'button'); - btn.setAttribute('value', 'Fail Rest'); - attachClickEvent(btn, onFailRest); - - //Add the button in - var div = myGetElementsByClass('div','LC_GRADING_maincontrols', 1); - if (div.length > 0) { div[0].appendChild(btn); } + //Setup the onSubmit validation + var frms = document.getElementsByTagName('form'); + for(var i=0; i < frms.length; i++ ) { + if (frms[i].name == "lonhomework") { + attachEvent(frms[i], "onsubmit", onValidate); + } + } } /* @@ -188,8 +195,7 @@ function onSlideDrawer(e) { } //Fail all ungraded criteria -function onFailRest(e) { - var obj = getEventObject(e); +function onFailRest() { var inputs = document.getElementsByTagName('input'); var graded = false; @@ -210,25 +216,46 @@ function onFailRest(e) { } } -//Set bacground for grade chosen +//Set background for grade chosen function onSetGrade( e ) { var obj = getEventObject(e); var grade; var gradediv; - //Find the Radio button and get it's value - if (obj.tagName == 'INPUT') { - grade = obj.value; - } else { - rdo = obj.getElementsByTagName('INPUT'); - if (rdo.length > 0) { grade = rdo[0].value; } - } - //Search for parent DIV gradediv = obj; while (gradediv.tagName != 'DIV') { gradediv = gradediv.parentNode; } + + rdo = gradediv.getElementsByTagName('INPUT'); + for(var i=0; i < rdo.length; i++) { + if ( rdo[i].checked ) { + grade = rdo[i].value; + break; + } + } gradediv.className = "LC_GRADING_grade LC_GRADING_" + grade; } + +//Validate form before submit +function onValidate(e) { + var obj = getEventObject(e); + var ok = true; + var inputs = document.getElementsByTagName('input'); + + var cnt = 0; + for (var i = 0; i < inputs.length; i++) { + if (inputs[i].type == "radio") { + var val = inputs[i].value; + if (val == "ungraded" && inputs[i].checked) { + cnt++; + } + } + } + if (cnt) { + ok = confirm("You have " + cnt + " questions still ungraded.\nThis will return an ungraded task to the queue?"); + } + return ok; +}