--- rat/client/parameter.html 2006/12/06 21:09:35 1.41 +++ rat/client/parameter.html 2017/07/13 15:30:01 1.76 @@ -1,9 +1,11 @@ -<html> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <!-- The LearningOnline Network with CAPA Parameter Input Window // -// $Id: parameter.html,v 1.41 2006/12/06 21:09:35 www Exp $ +// $Id: parameter.html,v 1.76 2017/07/13 15:30:01 raeburn Exp $ // // Copyright Michigan State University Board of Trustees // @@ -29,18 +31,27 @@ Parameter Input Window // --> <head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>LON-CAPA</title> -</head> -<script> +<script type="text/javascript"> +// <![CDATA[ var ptype=''; var pvalue=''; +var pmodval=''; +var pextraval=''; +var pextravaltwo=''; var preturn=''; var pcode=''; var pscat=''; var pmarker=''; +var pmodal=''; var pname=''; +var precursive=''; +var pnonreccol=''; +var pmarkerst=''; +var pparm=''; var defhour=0; var defmin=0; @@ -67,8 +78,26 @@ function selwrite(text) { } function choicestart() { - this.window.choices.document.clear(); - choicewrite('<html><body bgcolor="#FFFFFF">'); + this.window.choices.document.open(); + choicewrite('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'); + choicewrite('<html xmlns="http://www.w3.org/1999/xhtml">'); + choicewrite('<head>'); + choicewrite('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'); + choicewrite('<title>LON-CAPA</title>'); + choicewrite('<style type="text/css">'); + choicewrite('<!--'); + choicewrite('body {'); + choicewrite('font-family: Verdana,Arial,Helvetica,sans-serif;'); + choicewrite('line-height:130%;'); + choicewrite('font-size:0.83em;'); + choicewrite('background: #FFFFFF;'); + choicewrite('}'); + choicewrite('table.LC_parmsel_table {font-size: 90%;}'); + choicewrite('table.LC_parmsel_table tr td { padding: 5px; border: 1px solid #C8C8C8;}'); + choicewrite('-->'); + choicewrite('</style>'); + choicewrite('</head>'); + choicewrite('<body>'); } function choiceend() { @@ -81,15 +110,23 @@ function choicewrite(text) { } function tablestart(headtext) { - choicewrite('<table><tr bgcolor="#AAFFAA"><th colspan=3>'+ + choicewrite('<table class="LC_parmsel_table"><tr bgcolor="#C5DB99"><th colspan="3">'+ headtext+'</th></tr>'); } function valline(text,id1,id2) { - choicewrite('<tr bgcolor="#AAFFAA"><td>'+text+ - '</td><td><input type=text size=4 name=val'+ - id1+'></td><td>incl:<input type=checkbox name=val'+ - id2+'></td></tr>'); + choicewrite('<tr><td>'+text+ + '</td><td><input type="text" size="4" name="val'+ + id1+'" /></td><td>incl:<input type="checkbox" name="val'+ + id2+'" /></td></tr>'); +} + +function escapeHTML(text) { + text = text.replace(/&/g, '&'); + text = text.replace(/"/g, '"'); + text = text.replace(/</g, '<'); + text = text.replace(/>/g, '>'); + return text; } function datecalc() { @@ -108,11 +145,11 @@ function datecalc() { function hour() { var thishour=cdate.getHours(); var i; var j; - choicewrite('<select name=hours onChange="parent.datecalc();">'); + choicewrite('<select name="hours" onchange="parent.datecalc();">'); for (i=0;i<=23;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thishour) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'); if (i==12) { choicewrite('noon'); } else { @@ -132,11 +169,11 @@ function hour() { function minute() { var thisminutes=cdate.getMinutes(); var i; - choicewrite('<select name=minutes onChange="parent.datecalc();">'); + choicewrite('<select name="minutes" onchange="parent.datecalc();">'); for (i=0;i<=59;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thisminutes) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'+i+'</option>'); } @@ -146,11 +183,11 @@ function minute() { function second() { var thisseconds=cdate.getSeconds(); var i; - choicewrite('<select name=seconds onChange="parent.datecalc();">'); + choicewrite('<select name="seconds" onchange="parent.datecalc();">'); for (i=0;i<=59;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thisseconds) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'+i+'</option>'); } @@ -161,11 +198,11 @@ function second() { function date() { var thisdate=cdate.getDate(); var i; - choicewrite('<select name=date onChange="parent.datecalc();">'); + choicewrite('<select name="date" onchange="parent.datecalc();">'); for (i=1;i<=31;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thisdate) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'+i+'</option>'); } @@ -182,11 +219,11 @@ function year() { if (thisyear>nowyear) { loweryear=nowyear-2; } if (thisyear<nowyear) { upperyear=nowyear+5; } var i; - choicewrite('<select name=year onChange="parent.datecalc();">'); + choicewrite('<select name="year" onchange="parent.datecalc();">'); for (i=loweryear;i<=upperyear;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thisyear) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'+i+'</option>'); } @@ -196,11 +233,11 @@ function year() { function month() { var thismonth=cdate.getMonth(); var i; - choicewrite('<select name=month onChange="parent.datecalc();">'); + choicewrite('<select name="month" onchange="parent.datecalc();">'); for (i=0;i<=11;i++) { - choicewrite('<option value='+i); + choicewrite('<option value="'+i+'"'); if (i==thismonth) { - choicewrite(' selected'); + choicewrite(' selected="selected"'); } choicewrite('>'+months[i]+'</option>'); } @@ -211,58 +248,66 @@ function month() { function intminute() { var thisminutes=cmins; var i; - choicewrite('<select name=minutes onChange="parent.intcalc();">'); + var result = ''; + result += '<select name="minutes" onchange="parent.intcalc();">'; for (i=0;i<=59;i++) { - choicewrite('<option value='+i); + result += '<option value="'+i+'"'; if (i==thisminutes) { - choicewrite(' selected'); + result += ' selected="selected"'; } - choicewrite('>'+i+'</option>'); + result += '>'+i+'</option>'; } - choicewrite('</select>'); + result += '</select>'; + return result; } function inthour() { var thishours=chours; var i; - choicewrite('<select name=hours onChange="parent.intcalc();">'); + var result = ''; + result += '<select name="hours" onchange="parent.intcalc();">'; for (i=0;i<=23;i++) { - choicewrite('<option value='+i); + result += '<option value="'+i+'"'; if (i==thishours) { - choicewrite(' selected'); + result += ' selected="selected"'; } - choicewrite('>'+i+'</option>'); + result += '>'+i+'</option>'; } - choicewrite('</select>'); -} + result += '</select>'; + return result; +} function intsecond() { - var thisseconds=csecs; + var thisseconds=csecs; var i; - choicewrite('<select name=seconds onChange="parent.intcalc();">'); + var result = ''; + result += '<select name="seconds" onchange="parent.intcalc();">'; for (i=0;i<=59;i++) { - choicewrite('<option value='+i); + result += '<option value="'+i+'"'; if (i==thisseconds) { - choicewrite(' selected'); + result += ' selected="selected"'; } - choicewrite('>'+i+'</option>'); + result += '>'+i+'</option>'; } - choicewrite('</select>'); + result += '</select>'; + return result; } function intday() { var thisdate=cdays; var i; - choicewrite('<select name=date onChange="parent.intcalc();">'); + var result =''; + result += '<select name="date" onchange="parent.intcalc();">'; for (i=0;i<=31;i++) { - choicewrite('<option value='+i); + result += '<option value="'+i+'"'; if (i==thisdate) { - choicewrite(' selected'); + result += ' selected="selected"'; } - choicewrite('>'+i+'</option>'); + result += '>'+i+'</option>'; } - choicewrite('</select>'); + result += '</select>'; + return result; } function intcalc() { @@ -271,7 +316,100 @@ function intcalc() { sform.hours.options[sform.hours.selectedIndex].value*1)*60+ sform.minutes.options[sform.minutes.selectedIndex].value*1)*60+ sform.seconds.options[sform.seconds.selectedIndex].value*1; - draw(); + if ((ptype=='date') && (pscat=='interval')) { + var newpmodval = ''; + var newpextraval = ''; + var newpextravaltwo = 'Done'; + if (sform.donebutton.length) { + for (var i=0; i<sform.donebutton.length; i++) { + if (sform.donebutton[i].checked) { + if (sform.donebutton[i].value == '_done') { + newpmodval = sform.donebutton[i].value; + newpextravaltwo = sform.donebutton_text.value; + } else { + if (sform.donebutton[i].value == '_done_proctor') { + newpmodval = sform.donebutton[i].value; + newpextraval = sform.donebutton_proctorkey.value; + newpextravaltwo = sform.donebutton_text.value; + newpextravaltwo = newpextravaltwo.replace(/:/g,''); + } + } + } + } + } + pmodval = newpmodval; + pextraval = newpextraval; + pextravaltwo = newpextravaltwo; + draw(); + if (pmodval) { + var doneRegExp = /^(_done)(|_proctor)$/; + var donevals = pmodval.match(doneRegExp); + if (donevals.length == 3) { + svalue += donevals[1]; + } + if (newpextravaltwo) { + if (newpextravaltwo != 'Done') { + svalue += ':'+newpextravaltwo+':'; + } + } + if (donevals[2] != '') { + svalue += donevals[2]; + if (pextraval != '') { + svalue += '_'+pextraval; + } + } + } + } else { + draw(); + } +} + +function toggleSecret() { + var sform=choices.document.forms.sch; + if (sform.donebutton.length) { + for (var i=0; i<sform.donebutton.length; i++) { + if (sform.donebutton[i].checked) { + if (sform.donebutton[i].value == '') { + if (document.getElementById('donebuttontextdiv')) { + document.getElementById('donebuttontextdiv').style.display='none'; + } + } else { + if (document.getElementById('donebuttontextdiv')) { + document.getElementById('donebuttontextdiv').style.display='block'; + } + } + if (sform.donebutton[i].value == '_done_proctor') { + if (document.getElementById('done_proctorkey')) { + document.getElementById('done_proctorkey').type='text'; + } + } else { + if (document.getElementById('done_proctorkey')) { + document.getElementById('done_proctorkey').type='hidden'; + document.getElementById('done_proctorkey').value=''; + } + } + } + } + } +} + +function validateInterval() { + var sform=choices.document.forms.sch; + if (sform.donebutton.length) { + for (var i=0; i<sform.donebutton.length; i++) { + if (sform.donebutton[i].checked) { + if (sform.donebutton[i].value == '_done_proctor') { + if ((sform.donebutton_proctorkey.value == '') || + (sform.donebutton_proctorkey.value == null)) { + alert('Please provide a key for a proctor to enter when a student uses the "Done" button.'); + return; + } + } + } + } + } + intcalc(); + assemble(); } function integereval() { @@ -306,17 +444,113 @@ function stringeval() { draw(); } +function ipstringeval() { + var patternIp = /^([\[\]a-zA-Z\.\d\*\-]+)$/; + var acctypes = new Array; + acctypes = ['allow','deny']; + svalue = ''; + for (var i=0; i<acctypes.length; i++) { + var items = choices.document.getElementsByName('setip'+acctypes[i]); + if (items.length > 0) { + for (var j=0; j<items.length; j++) { + if (items[j].type == "text") { + var possip = items[j].value + possip = possip.replace(/^\s+|\s+$/g,''); + if (patternIp.test(possip)) { + if (acctypes[i] == 'deny') { + possip = '!'+possip; + } + if (svalue == '') { + svalue = possip; + } else { + svalue += ','+possip; + } + } + } + } + } + } +} + +function addIpRule(iptype) { + var frame = window.frames["choices"]; + if (frame.document.getElementById('LC_string_ipacc_inner_'+iptype)) { + var innerDiv = frame.document.getElementById('LC_string_ipacc_inner_'+iptype); + var count = innerDiv.childNodes.length + var ipDiv = frame.document.createElement('div'); + ipDiv.innerHTML = '<input type="text" size="10" name="setip'+iptype+'" onblur="parent.ipstringeval();" />'+ + '<a href="#" onclick="parent.removeIpRule(\''+iptype+'\',\''+count+'\')">Remove</a>'; + frame.document.getElementById('LC_string_ipacc_inner_'+iptype).appendChild(ipDiv); + } + return false; +} + +function removeIpRule(iptype,num) { + var frame = window.frames["choices"]; + if (frame.document.getElementById('LC_string_ipacc_inner_'+iptype)) { + var innerDiv = frame.document.getElementById('LC_string_ipacc_inner_'+iptype); + for (var i=0; i<innerDiv.childNodes.length; i++) { + if (i==num) { + innerDiv.removeChild(innerDiv.childNodes[i]); + ipstringeval(); + break; + } + } + } +} + function radiostringeval(newval) { svalue=newval; draw(); } function callradiostringeval(newval) { - return 'onChange="parent.radiostringeval(\'' - +newval+'\')" onClick="parent.radiostringeval(\'' - +newval+'\')"'; + return 'onclick="parent.radiostringeval(\''+newval+'\')"'; } +function lenienteval(newval) { + if (newval == 'weighted') { + if (document.getElementById('lenientweighteddiv')) { + document.getElementById('lenientweighteddiv').style.display='block'; + } + var patternRelWeight = /^\-?[\d.]+$/; + var sform=choices.document.forms.sch; + if ((sform.lenientrelwt.length != 'undefined') && (sform.lenientrelwt.length) != 'null') { + for (var i=0; i<sform.lenientrelwt.length; i++) { + var relweight = sform.lenientrelwt[i].value; + relweight = relweight.replace(/^\s+|\s+$/g,''); + if (!patternRelWeight.test(relweight)) { + if (i<2) { + relweight = '1.0'; + } else { + relweight = '0.0'; + } + } + sform.lenientrelwt[i].value = relweight; + if (i==0) { + svalue = relweight; + } else { + svalue += ','+relweight; + } + } + } + } else { + if (document.getElementById('lenientweighteddiv')) { + document.getElementById('lenientweighteddiv').style.display='none'; + } + svalue=newval; + } + draw(); +} + +function calllenientradioeval(newval) { + return 'onclick="parent.lenienteval(\''+newval+'\')"'; +} + +function callintervalpmodval() { + return 'onclick="parent.intcalc();parent.toggleSecret()"'; +} + function intervaldis() { csecs=svalue; cdays=Math.floor(csecs/86400); @@ -325,8 +559,7 @@ function intervaldis() { csecs-=chours*3600; cmins=Math.floor(csecs/60); csecs-=cmins*60; - choicewrite(cdays+' days '+chours+' hours ' - +cmins+' mins '+csecs+' secs'); + return cdays+' days '+chours+' hours '+cmins+' mins '+csecs+' secs'; } function pickcolor(picked) { @@ -347,7 +580,7 @@ function colorfield(ir,ig,ib) { function draw() { choicestart(); - choicewrite('<form name=sch'); + choicewrite('<form name="sch"'); if (ptype=='int') { choicewrite(' action="javascript:integereval();"'); } @@ -355,7 +588,14 @@ function draw() { choicewrite(' action="javascript:floateval();"'); } if (ptype=='string') { - choicewrite(' action="javascript:stringeval();"'); + if (pscat == 'ip') { + choicewrite(' action="javascript:ipstringeval();"'); + } else { + choicewrite(' action="javascript:stringeval();"'); + } + } + if (ptype != 'int' && ptype != 'float' && ptype != 'string') { + choicewrite(' action=""'); } choicewrite('>'); if (ptype=='tolerance') { @@ -439,22 +679,60 @@ function draw() { tablestart('Date and time'); } if (pscat=='interval') { + var proctorkeytype = 'hidden'; + var donebuttontext = 'none'; + if (pmodval == '_done_proctor') { + proctorkeytype = 'text'; + donebuttontext = 'block'; + } + if (pmodval == '_done') { + donebuttontext = 'block'; + } tablestart('Time interval'); - choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>'); - intervaldis(); - choicewrite('</td></tr><tr bgcolor="#AAFFAA"><td>Time:' - +'</td><td colspan=2>'); - intday();choicewrite('days '); - inthour();choicewrite('hours '); - intminute(); choicewrite('mins '); intsecond(); - choicewrite('secs</td></tr></table>'); - } else { - choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>' + choicewrite( [ + '<tr><td colspan="3">'+intervaldis()+'</td></tr>', + '<tr><td>Time:</td><td colspan="2">', + '<span style="white-space:nowrap">'+intday()+' days </span>', + '<span style="white-space:nowrap">'+inthour()+' hours</span>', + '<span style="white-space:nowrap">'+intminute()+' mins</span>', + '<span style="white-space:nowrap">'+intsecond()+' secs</span>', + '</td></tr>', + '</table>', + '<br />', + ].join("\n")); + tablestart('Provide a "Done" button to students?'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="donebutton" value=""'+ + ' type="radio" '+callintervalpmodval()); + if (pmodval == '') { choicewrite(' checked="checked"'); } + choicewrite(' /> No</label><br />'); + choicewrite('<label><input name="donebutton" value="_done"'+ + ' type="radio" '+callintervalpmodval()); + if (pmodval == '_done') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes</label><br />'); + choicewrite('<span style="white-space:nowrap">'+ + '<label><input name="donebutton" value="_done_proctor"'+ + ' type="radio" '+callintervalpmodval()); + if (pmodval == '_done_proctor') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, with proctor key</label>'); + choicewrite(' <input name="donebutton_proctorkey" value='+ + '"'+escapeHTML(pextraval)+'" type="'+proctorkeytype+ + '" id="done_proctorkey" size="10"'+ + ' onblur="parent.intcalc();" /></span><br />'+ + '<div id="donebuttontextdiv" style="display:'+donebuttontext+'">'+ + '<br /><span style="white-space:nowrap">'+ + 'Button text:'+ + '<input name="donebutton_text" value='+ + '"'+escapeHTML(pextravaltwo)+'" type="text" '+ + 'size="10" onblur="parent.intcalc();" /></span></div>'); + choicewrite('</td></tr></table>'); + } else { + choicewrite('<tr><td colspan="3">' +cdate.toString()+ - '</td></tr><tr bgcolor="#AAFFAA"><td>Date:</td><td colspan=2>'); + '</td></tr><tr><td>Date:</td><td colspan="2">'); month();date();year(); - choicewrite('</td></tr><tr bgcolor="#AAFFAA"><td>Time:' - +'</td><td colspan=2>');hour();choicewrite('h ');minute(); + choicewrite('</td></tr><tr><td>Time:' + +'</td><td colspan="2">');hour();choicewrite('h ');minute(); choicewrite('m ');second(); choicewrite('s</td></tr></table>'); } @@ -471,12 +749,12 @@ function draw() { } else { if (pscat=='range') { tablestart('Integer range'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Lower Value:'+ - '</td><td colspan=2><input type=text size=4 name=val2'+ - '></td></tr>'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Upper Value:'+ - '</td><td colspan=2><input type=text size=4 name=val4'+ - '></td></tr></table>'); + choicewrite('<tr><td>Lower Value:'+ + '</td><td colspan="2"><input type="text" size="4" name="val2'+ + '" /></td></tr>'); + choicewrite('<tr><td>Upper Value:'+ + '</td><td colspan="2"><input type="text" size="4" name="val4'+ + '" /></td></tr></table>'); var range=new Array; if ((svalue!='') && (typeof(svalue)!="undefined")) { range=svalue.split(','); @@ -499,10 +777,10 @@ function draw() { if (pscat=='any') { tablestart('Integer'); } - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); - choicewrite('<input name=intval size=10 value="'+svalue+ - '" name=intval onChange="parent.integereval()">'); - choicewrite('</td></table>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<input name="intval" size="10" value="'+escapeHTML(svalue)+ + '" onchange="parent.integereval()" />'); + choicewrite('</td></tr></table>'); } } } @@ -521,129 +799,265 @@ function draw() { if (pscat=='any') { tablestart('Floating point number'); } - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); - choicewrite('<input name=floatval size=10 value="'+svalue+ - '" name=floatval onChange="parent.floateval()">'); - choicewrite('</td></table>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<input name="floatval" size="10" value="'+escapeHTML(svalue)+ + '" onchange="parent.floateval()" />'); + choicewrite('</td></tr></table>'); } } if (ptype=='string') { - if (pscat=='default') { - tablestart('Default value or none'); - choicewrite('</table>'); - } else { - if ((pscat=='any') || (pscat=='') || (typeof(pscat)=='undefined')) { + if ((pscat=='any') || (pscat=='') || (pscat=='default') || + (typeof(pscat)=='undefined')) { tablestart('Text'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); - choicewrite('<input name="stringval" size="20" value="'+svalue+ - '" type="text" onChange="parent.stringeval()">'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<input name="stringval" size="20" value="'+escapeHTML(svalue)+ + '" type="text" onchange="parent.stringeval()" />'); } if (pscat=='yesno') { tablestart('Yes/No'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="yes"'+ + ' type="radio" '+callradiostringeval('yes')); + if (svalue=='yes') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes</label><br />'); + choicewrite('<label><input name="stringval" value="no"'+ + ' type="radio" '+callradiostringeval('no')); + if (svalue=='no') { choicewrite(' checked="checked"'); } + choicewrite(' /> No</label><br />'); + } + if (pscat=='problemstatus') { + tablestart('Problem Status'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); choicewrite('<label><input name="stringval" value="yes"'+ ' type="radio" '+callradiostringeval('yes')); - if (svalue=='yes') { choicewrite(' checked'); } - choicewrite('> Yes</label><br />'); + if (svalue=='yes') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes</label><br />'); + choicewrite('<label><input name="stringval" value="answer"'+ + ' type="radio" '+callradiostringeval('answer')); + if (svalue=='answer') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, and show correct answer if they exceed the maximum number of tries.</label><br />'); choicewrite('<label><input name="stringval" value="no"'+ ' type="radio" '+callradiostringeval('no')); - if (svalue=='no') { choicewrite(' checked'); } - choicewrite('> No</label><br />'); + if (svalue=='no') { choicewrite(' checked="checked"'); } + choicewrite(' /> No, don\'t show correct/incorrect feedback.</label><br />'); + choicewrite('<label><input name="stringval" value="no_feedback_ever"'+ + ' type="radio" '+callradiostringeval('no_feedback_ever')); + if (svalue=='no_feedback_ever') { choicewrite(' checked="checked"'); } + choicewrite(' /> No, show no feedback at all.</label><br />'); } if (pscat=='examtype') { tablestart('Exam Type'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); choicewrite('<label><input name="stringval" value="online"'+ ' type="radio" '+callradiostringeval('online')); - if (svalue=='online') { choicewrite(' checked'); } - choicewrite('> Online</label><br />'); + if (svalue=='online') { choicewrite(' checked="checked"'); } + choicewrite(' /> Online</label><br />'); choicewrite('<label><input name="stringval" value="checkout"'+ ' type="radio" '+callradiostringeval('checkout')); - if (svalue=='checkout') { choicewrite(' checked'); } - choicewrite('> Check out</label><br />'); + if (svalue=='checkout') { choicewrite(' checked="checked"'); } + choicewrite(' /> Check out</label><br />'); } if (pscat=='questiontype') { tablestart('Question Type'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); choicewrite('<label><input name="stringval" value="problem"'+ ' type="radio" '+callradiostringeval('problem')); - if (svalue=='problem') { choicewrite(' checked'); } - choicewrite('> Standard Problem</label><br />'); + if (svalue=='problem') { choicewrite(' checked="checked"'); } + choicewrite(' /> Standard Problem</label><br />'); // choicewrite('<label><input name="stringval" value="quiz"'+ // ' type="radio" '+callradiostringeval('quiz')); -// if (svalue=='quiz') { choicewrite(' checked'); } -// choicewrite('> Quiz</label><br />'); +// if (svalue=='quiz') { choicewrite(' checked="checked"'); } +// choicewrite(' /> Quiz</label><br />'); choicewrite('<label><input name="stringval" value="practice"'+ ' type="radio" '+callradiostringeval('practice')); - if (svalue=='practice') { choicewrite(' checked'); } - choicewrite('> Practice</label><br />'); + if (svalue=='practice') { choicewrite(' checked="checked"'); } + choicewrite(' /> Practice</label><br />'); choicewrite('<label><input name="stringval" value="exam"'+ ' type="radio" '+callradiostringeval('exam')); - if (svalue=='exam') { choicewrite(' checked'); } - choicewrite('> Exam</label><br />'); + if (svalue=='exam') { choicewrite(' checked="checked"'); } + choicewrite(' /> Bubblesheet Exam</label><br />'); // choicewrite('<label><input name="stringval" value="assess"'+ // ' type="radio" '+callradiostringeval('assess')); -// if (svalue=='assess') { choicewrite(' checked'); } -// choicewrite('> Assessment</label><br />'); +// if (svalue=='assess') { choicewrite(' checked="checked"'); } +// choicewrite(' /> Assessment</label><br />'); choicewrite('<label><input name="stringval" value="survey"'+ ' type="radio" '+callradiostringeval('survey')); - if (svalue=='survey') { choicewrite(' checked'); } - choicewrite('> Survey</label><br />'); + if (svalue=='survey') { choicewrite(' checked="checked"'); } + choicewrite(' /> Survey</label><br />'); // choicewrite('<label><input name="stringval" value="form"'+ // ' type="radio" '+callradiostringeval('form')); -// if (svalue=='form') { choicewrite(' checked'); } +// if (svalue=='form') { choicewrite(' checked="checked"'); } // choicewrite('> Input Form</label><br />'); + choicewrite('<label><input name="stringval" value="surveycred"'+ + ' type="radio" '+callradiostringeval('surveycred')); + if (svalue=='surveycred') { choicewrite(' checked="checked"'); } + choicewrite('> Survey (credit for submission)</label><br />'); + choicewrite('<label><input name="stringval" value="anonsurvey"'+ + ' type="radio" '+callradiostringeval('anonsurvey')); + if (svalue=='anonsurvey') { choicewrite(' checked="checked"'); } + choicewrite('> Anonymous Survey</label><br />'); + choicewrite('<label><input name="stringval" value="anonsurveycred"'+ + ' type="radio" '+callradiostringeval('anonsurveycred')); + if (svalue=='anonsurveycred') { choicewrite(' checked="checked"'); } + choicewrite('> Anonymous Survey (credit for submission)</label><br />'); + choicewrite('<label><input name="stringval" value="randomizetry"'+ + ' type="radio" '+callradiostringeval('randomizetry')); + if (svalue=='randomizetry') { choicewrite(' checked="checked"'); } + choicewrite('> New Randomization Each N Tries (default N=1)</label><br />'); choicewrite('<label><input name="stringval" value="library"'+ ' type="radio" '+callradiostringeval('library')); - if (svalue=='library') { choicewrite(' checked'); } - choicewrite('> Library</label><br />'); + if (svalue=='library') { choicewrite(' checked="checked"'); } + choicewrite(' /> Library</label><br />'); + } + if (pscat=='lenient') { + var patternLenientStd = /^(yes|no|default)$/; + var patternLenientRel = /^([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)$/; + var lenientweighted = 'none'; + var relatives = new Array; + tablestart('Lenient Grading (Partial Credit)'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="yes"'+ + ' type="radio" '+calllenientradioeval('yes')); + if (svalue=='yes') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes</label><br />'); + choicewrite('<label><input name="stringval" value="no"'+ + ' type="radio" '+calllenientradioeval('no')); + if (svalue=='no') { choicewrite(' checked="checked"'); } + choicewrite(' /> No</label><br />'); + choicewrite('<label><input name="stringval" value="default"'+ + ' type="radio" '+calllenientradioeval('default')); + if (svalue=='default') { choicewrite(' checked="checked"'); } + choicewrite(' /> Default (only bubblesheet grading is lenient)</label><br />'); + choicewrite('<label><input name="stringval" value="weighted"'+ + ' type="radio" '+calllenientradioeval('weighted')); + if (!patternLenientStd.test(svalue) && svalue != '') { + choicewrite(' checked="checked"'); + lenientweighted='block'; + var relatives = svalue.match(patternLenientRel); + } + choicewrite(' />Yes, weighted (optionresponse in checkbox mode)</label><br /><br />'+ + '<div id="lenientweighteddiv" style="display:'+lenientweighted+'">'+ + '<table class="LC_parmsel_table"><tr bgcolor="#C5DB99">'+ + '<th colspan="2">Foil submission status</th><th>Points</th></tr>'); + var lenienttypes = ['Correct (checked)','Correct (unchecked)','Incorrect (checked)','Incorrect (unchecked)']; + for (var i=0; i<lenienttypes.length; i++) { + var j = i+1; + if (relatives[j] == '') { + if (i < 2) { + relatives[j] = '1.0'; + } else { + relatives[j] = '0.0'; + } + } + choicewrite('<tr><td colspan="2">'+lenienttypes[i]+'</td>'+ + '<td><input type="text" name="lenientrelwt" value="'+relatives[j]+'"'+ + ' size="3" onblur="parent.lenienteval(\'weighted\')" /></td></tr>'); + } + choicewrite('</table></div>'); + } + if (pscat=='discussvote') { + tablestart('Discussion Voting'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="yes"'+ + ' type="radio" '+callradiostringeval('yes')); + if (svalue=='yes') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes</label><br />'); + choicewrite('<label><input name="stringval" value="notended"'+ + ' type="radio" '+callradiostringeval('notended')); + if (svalue=='notended') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, unless discussion ended</label><br />'); + choicewrite('<label><input name="stringval" value="no"'+ + ' type="radio" '+callradiostringeval('no')); + if (svalue=='no') { choicewrite(' checked="checked"'); } + choicewrite(' /> No</label><br />'); } if (pscat=='ip') { - tablestart('IP Number/Name'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); - choicewrite('<input name="stringval" size="20" value="'+svalue+ - '" onChange="parent.stringeval()">'); + var currallow = new Array; + var currdeny = new Array; + if ((svalue != '') && (svalue != null)) { + var patternComma = /,/; + var patternAllow = /^([\[\]a-zA-Z\.\d\*\-]+)$/; + var patternDeny = /^\!([\[\]a-zA-Z\.\d\*\-]+)$/; + var current = new Array; + if (patternComma.test(svalue)) { + current = svalue.split(','); + } else { + current = (svalue); + } + for (var i=0; i<current.length; i++) { + if (patternDeny.test(current[i])) { + var denied = current[i].replace(/^!/,''); + currdeny.push(denied); + } else { + if (patternAllow.test(current[i])) { + currallow.push(current[i]); + } + } + } + } + if (currdeny.length == 0) { + currdeny = (''); + } + if (currallow.length == 0) { + currallow = (''); + } + var curripaccess = [currallow,currdeny]; + tablestart('IP Number/Name'); + choicewrite('<tr><th>Allow from</th><th>Deny from</th></tr><tr>'); + var acctypes = ['allow','deny']; + for (var i=0; i<acctypes.length; i++) { + choicewrite('<td valign="top">'+ + '<div class="LC_string_ipacc_wrap" id="LC_string_ipacc_'+acctypes[i]+'">'+ + '<div class="LC_string_ipacc_inner" id="LC_string_ipacc_inner_'+acctypes[i]+'">'); + for (var j=0; j<curripaccess[i].length; j++) { + choicewrite('<div><input type="text" size="10" name="setip'+acctypes[i]+'" value="'+curripaccess[i][j]+'" onblur="parent.ipstringeval();" />'); + choicewrite('<a href="#" onclick="parent.removeIpRule(\''+acctypes[i]+'\',\''+j+'\')">Remove</a>'); + choicewrite('</div>'); + } + choicewrite('</div><button onclick="parent.addIpRule(\''+acctypes[i]+'\');">Add item</button>'); + } + choicewrite('</div></td></tr></table>'); } if (pscat=='fileext') { tablestart('Allowed File Extensions'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); choicewrite('<label><input name="radstringval" value="txt"'+ ' type="radio" '+callradiostringeval('txt')); - if (svalue=='txt') { choicewrite(' checked'); } - choicewrite('> Plain Text</label><br />'); + if (svalue=='txt') { choicewrite(' checked="checked"'); } + choicewrite(' /> Plain Text</label><br />'); choicewrite('<label><input name="radstringval" value="png,jpg,jpeg,gif"'+ ' type="radio" '+callradiostringeval('png,jpg,jpeg,gif')); - if (svalue=='png,jpg,jpeg,gif') { choicewrite(' checked'); } - choicewrite('> Picture File</label><br />'); - choicewrite('<label><input name="radstringval" value="doc,xls,ppt"'+ - ' type="radio" '+callradiostringeval('doc,xls,ppt')); - if (svalue=='doc,xls,ppt') { choicewrite(' checked'); } - choicewrite('> Office Document</label><br />'); - choicewrite('<input name="stringval" size="20" value="'+svalue+ - '" onChange="parent.stringeval()">'); + if (svalue=='png,jpg,jpeg,gif') { choicewrite(' checked="checked"'); } + choicewrite(' /> Picture File</label><br />'); + choicewrite('<label><input name="radstringval" value="doc,docx,xls,xlsx,ppt,pptx"'+ + ' type="radio" '+callradiostringeval('doc,docx,xls,xlsx,ppt,pptx')); + if (svalue=='doc,docx,xls,xlsx,ppt,pptx') { choicewrite(' checked="checked"'); } + if (svalue=='doc,xls,ppt') { choicewrite(' checked="checked"'); } + choicewrite(' /> Office Document</label><br />'); + choicewrite('<input name="stringval" size="20" value="'+escapeHTML(svalue)+ + '" onchange="parent.stringeval()" />'); } if (pscat=='useslots') { tablestart('Slots control access'); - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); choicewrite('<label><input name="stringval" value="no"'+ ' type="radio" '+callradiostringeval('no')); - if (svalue=='no') { choicewrite(' checked'); } - choicewrite('> No</label><br />'); + if (svalue=='no') { choicewrite(' checked="checked"'); } + choicewrite(' /> No</label><br />'); choicewrite('<label><input name="stringval" value="resource"'+ ' type="radio" '+callradiostringeval('resource')); - if (svalue=='resource') { choicewrite(' checked'); } - choicewrite('> Yes, and the scope of student selected slot is a single resource.</label><br />'); + if (svalue=='resource') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, and the scope of student selected slot is a single resource.</label><br />'); choicewrite('<label><input name="stringval" value="map"'+ ' type="radio" '+callradiostringeval('map')); - if (svalue=='map') { choicewrite(' checked'); } - choicewrite('> Yes, and the scope of student selected slot is the enclosing map/folder. When checking in, it applies to only one resource.</label><br />'); + if (svalue=='map') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, and the scope of student selected slot is the enclosing map/folder. When checking in, it applies to only one resource.</label><br />'); choicewrite('<label><input name="stringval" value="map_map"'+ ' type="radio" '+callradiostringeval('map_map')); - if (svalue=='map_map') { choicewrite(' checked'); } - choicewrite('> Yes, and the scope of student selected slot is the enclosing map/folder. When checking in, all resources in the map/folder are checked in..</label><br />'); - } - choicewrite('</td></table>'); + if (svalue=='map_map') { choicewrite(' checked="checked"'); } + choicewrite(' /> Yes, and the scope of student selected slot is the enclosing map/folder. When checking in, all resources in the map/folder are checked in.</label><br />'); + choicewrite('</td></tr></table>'); } } @@ -652,7 +1066,7 @@ function draw() { choicewrite('<table>'); if (svalue) { choicewrite('<tr><td colspan="9">Current choice:</td><td bgcolor="'+ - svalue+'" colspan="2"> </td></tr>'); + escapeHTML(svalue)+'" colspan="2"> </td></tr>'); } for (var ir=0; ir<=10; ir++) { for (var ig=0; ig<=10; ig++) { @@ -673,7 +1087,7 @@ function draw() { function sopt(va,text) { selwrite('<option value="'+va+'"'); if (va==pscat) { - selwrite(' selected'); + selwrite(' selected="selected"'); } selwrite('>'+text+'</option>'); } @@ -684,6 +1098,22 @@ function catchange() { draw(); } +function recursechange() { + var rform=selector.document.forms.frec; + var count = rform.recurse.length; + if (count > 0) { + for (var i=0; i<count; i++) { + if (rform.recurse[i].checked) { + var colnum = pnonreccol; + if (rform.recurse[i].value == 1) { + colnum++; + } + pmarker = pmarkerst+'_'+pparm+'&'+colnum; + } + } + } +} + function assemble() { if ((ptype=='date') && (pscat!='interval')) { svalue=Math.floor(cdate.getTime()/1000); @@ -734,6 +1164,11 @@ function assemble() { function init() { var i; var subs=new Array(); + var doneRegExp = /_done(|\:[^\:]+\:)/; + var doneproctorRegExp = /_done(|\:[^\:]+\:)_proctor/; + var proctorkeyRegExp = /^(\d+)_(.+)$/; + var donetextRegExp = /\:([^\:]+)\:/; + var markerRegExp = /^(.+)_([A-Za-z0-9]+)\&(\d+)$/; var namevalue=this.window.location.search.split('&'); namevalue[0]=namevalue[0].substr(1,namevalue[0].length-1); @@ -755,6 +1190,7 @@ function init() { if (pair[0]=='call') { pcode=pair[1]; } if (pair[0]=='marker') { pmarker=pair[1]; } if (pair[0]=='name') { pname=pair[1]; } + if (pair[0]=='modal') { pmodal=pair[1]; } if (pair[0]=='defhour' && pair[1] >= 0 && pair[1] < 24 ) { defhour=pair[1]; } @@ -762,6 +1198,84 @@ function init() { if (pair[0]=='defsec' && pair[1] >= 0 && pair[1] < 60) { defsec=pair[1]; } } + var tablecol = ''; + var ismap = ''; + if (markerRegExp.test(pmarker)) { + var markerinfo = pmarker.match(markerRegExp); + if (markerinfo.length == 4) { + pmarkerst = markerinfo[1]; + pparm = markerinfo[2]; + tablecol = markerinfo[3]; + if (tablecol == 17 || tablecol == 16) { + ismap = 1; + if (tablecol == 17) { + precursive = 1; + } + pnonreccol = 16; + } else if (tablecol == 11 || tablecol == 10) { + ismap = 1; + if (tablecol == 11) { + precursive = 1; + } + pnonreccol = 10; + } else if (tablecol == 7 || tablecol == 6) { + ismap = 1; + if (tablecol == 7) { + precursive = 1; + } + pnonreccol = 6; + } else if (tablecol == 3 || tablecol == 2) { + ismap = 1; + if (tablecol == 3) { + precursive = 1; + } + pnonreccol = 2; + } + } + } + + + if (ptype=='date' && pscat == 'interval') { + if (doneproctorRegExp.test(pvalue)) { + var current = pvalue.match(doneproctorRegExp); + if (current.length == 2) { + var textstr = current[1]; + if (textstr != '') { + var textvals = textstr.match(donetextRegExp); + if (textvals.length == 2) { + pextravaltwo = textvals[1]; + } + } + } + var intervalwithkey = pvalue.replace(doneproctorRegExp,''); + if (proctorkeyRegExp.test(intervalwithkey)) { + var currvals = intervalwithkey.match(proctorkeyRegExp); + if (currvals.length == 3) { + pvalue = currvals[1]; + pextraval = currvals[2]; + pmodval = '_done_proctor'; + } else { + pmodval = ''; + } + } + } else { + if (doneRegExp.test(pvalue)) { + var current = pvalue.match(doneRegExp); + if (current.length == 2) { + var textstr = current[1]; + if (textstr != '') { + var textvals = textstr.match(donetextRegExp); + if (textvals.length == 2) { + pextravaltwo = textvals[1]; + } + } + } + var pnumval = pvalue.replace(doneRegExp,''); + pmodval = '_done'; + pvalue = pnumval; + } + } + } svalue=pvalue; if (((ptype=='float') || (ptype=='string') || (ptype=='int')) && (pscat=='default') && @@ -782,11 +1296,26 @@ function init() { } } - this.window.selector.document.clear(); - selwrite('<html><body bgcolor="#FFFFFF">'); - - selwrite('<form name="fsel"><b>'+pname+'</b><br>'); - selwrite('<select name="fcat" onChange="parent.catchange();">'); + this.window.selector.document.open(); + selwrite('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'); + selwrite('<html xmlns="http://www.w3.org/1999/xhtml">'); + selwrite('<head>'); + selwrite('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'); + selwrite('<title>LON-CAPA</title>'); + selwrite('<style type="text/css">'); + selwrite('<!--'); + selwrite('body {'); + selwrite('font-family: Verdana,Arial,Helvetica,sans-serif;'); + selwrite('line-height:130%;'); + selwrite('font-size:0.83em;'); + selwrite('background: #FFFFFF;'); + selwrite('}'); + selwrite('-->'); + selwrite('</style>'); + selwrite('</head>'); + selwrite('<body>'); + selwrite('<form name="fsel" action=""><b>'+pname+'</b><br />'); + selwrite('Format of Value(s): <select name="fcat" onchange="parent.catchange();">'); if (ptype=='tolerance') { sopt('default','Default'); @@ -797,11 +1326,14 @@ function init() { } if (ptype=='date') { - sopt('default','Default'); - sopt('start','Starting Date'); - sopt('end','Ending Date'); - sopt('interval','Time Interval'); - + if (pscat != 'interval') { + sopt('default','Default'); + sopt('start','Starting Date'); + sopt('end','Ending Date'); + } else { + sopt('interval','Time Interval'); + } + if ((pvalue!='') && (typeof(pvalue)!="undefined")) { cdate.setTime(pvalue*1000); } else { @@ -842,7 +1374,17 @@ function init() { } if (ptype=='string') { - sopt('default','Default'); + //sopt('default','Default'); + if (pscat == 'yesno') { sopt('yesno','Yes/No'); } + else if (pscat == 'problemstatus'){ sopt('problemstatus','Problem Status'); } + else if (pscat == 'examtype') { sopt('examtype','Exam Type'); } + else if (pscat == 'questiontype') { sopt('questiontype','Question Type'); } + else if (pscat == 'lenient') { sopt('lenient','Lenient Grading (Partial Credit)'); } + else if (pscat == 'discussvote') { sopt('discussvote','Discussion Voting'); } + else if (pscat == 'ip') { sopt('ip','IP Number/Name'); } + else if (pscat == 'fileext') { sopt('fileext','File Extension'); } + else if (pscat == 'useslots') { sopt('useslots','Slots control access'); } + else { pscat = 'any'; } sopt('any','String Value'); } @@ -852,67 +1394,67 @@ function init() { } selwrite('</select></form>'); - - selwrite('<a href="javascript:parent.assemble();'); + if (ismap = 1) { + if ((pparm != 'hiddenresource') && (pparm != 'encrypturl')) { + selwrite('<form name="frec" action="">'); + selwrite('Recursive: <label><input type="radio" name="recurse" value="1" '); + if (precursive == 1) { + selwrite('checked="checked" '); + } + selwrite('onclick="parent.recursechange();" />Yes</label> '); + selwrite('<label><input type="radio" name="recurse" value="0" '); + if (precursive != 1) { + selwrite('checked="checked" '); + } + selwrite('onclick="parent.recursechange();" />No</label>'); + selwrite('</form><br />'); + } + } + var targ='parent.opener'; + if (pmodal==1) { + targ='parent.parent'; + } + if ((ptype=='date') && (pscat=='interval')) { + selwrite('<a href="javascript:parent.validateInterval();'); + } else { + selwrite('<a href="javascript:parent.assemble();'); + } if (preturn!='') { - selwrite( - 'parent.opener.document.'+preturn+'_value.value=parent.window.svalue;'); - selwrite( - 'parent.opener.document.'+preturn+'_type.value=parent.window.stype;'); + selwrite(targ+'.document.'+preturn+'_value.value=parent.window.svalue;'); + selwrite(targ+'.document.'+preturn+'_type.value=parent.window.stype;'); } if (pmarker!='') { - selwrite( - 'parent.opener.document.'+preturn+'_marker.value=parent.window.pmarker;'); + selwrite(targ+'.document.'+preturn+'_marker.value=parent.window.pmarker;'); } if (pcode!='') { - selwrite('parent.opener.'+pcode+'();'); + selwrite(targ+'.'+pcode+'();'); } - selwrite('">Store</a> '); + selwrite('">Save</a> '); selwrite('<a href="javascript:'); - selwrite( - 'parent.opener.document.'+preturn+'_value.value='+"'';"); + selwrite(targ+'.document.'+preturn+'_value.value='+"'';"); if (pmarker!='') { selwrite( - 'parent.opener.document.'+preturn+'_marker.value=parent.window.pmarker;'); + targ+'.document.'+preturn+'_marker.value=parent.window.pmarker;'); } if (pcode!='') { - selwrite('parent.opener.'+pcode+'();'); + selwrite(targ+'.'+pcode+'();'); } selwrite('">Delete</a> '); - selwrite('<a href="javascript:'); -// Old code : -//---------------------------------------------------------------------- -// if (preturn!='') { -// selwrite('parent.opener.document.'+preturn+'_value.value='+"'';"); -// selwrite('parent.opener.document.'+preturn+'_type.value='+"'';"); -// } -// if (pmarker!='') { -// selwrite('parent.opener.document.'+preturn+'_marker.value='+"'';"); -// } -// if (pcode!='') { -// selwrite('parent.opener.'+pcode+'();'); -// } -//---------------------------------------------------------------------- -// Just close the window to 'cancel' the operation. There are javascript -// errors in the above commented out code that I have not been able to -// track down. I think they reside in 'parent.opener.'+pcode+'();' -// - selwrite('this.parent.close();'); - selwrite('">Cancel</a>'); - selwrite('</body></html>'); this.window.selector.document.close(); draw(); } +// ]]> </script> +</head> -<frameset rows="120,*" onLoad="init();"> -<frame name=selector src="empty.html"> -<frame name=choices src="empty.html"> +<frameset rows="125,*" onload="init();"> +<frame name="selector" src="empty.html" /> +<frame name="choices" src="empty.html" /> </frameset>