--- rat/client/parameter.html 2003/02/03 18:03:54 1.20 +++ rat/client/parameter.html 2019/02/13 19:19:49 1.81 @@ -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.20 2003/02/03 18:03:54 harris41 Exp $ +// $Id: parameter.html,v 1.81 2019/02/13 19:19:49 raeburn Exp $ // // Copyright Michigan State University Board of Trustees // @@ -27,23 +29,34 @@ Parameter Input Window // // http://www.lon-capa.org/ // -06/16/00,06/17,11/17,11/18,11/23,11/27,11/28,12/15,12/16, -03/21/01,03/24,06/26 Gerd Kortemeyer -08/08 Gerd Kortemeyer --> <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 pextra=''; + +var defhour=0; +var defmin=0; +var defsec=0; var svalue; var stype; @@ -66,8 +79,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() { @@ -80,15 +111,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() { @@ -107,11 +146,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 { @@ -131,11 +170,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>'); } @@ -145,26 +184,26 @@ 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>'); } choicewrite('</select>'); -} +} 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>'); } @@ -175,16 +214,17 @@ function year() { var thisyear=cdate.getFullYear(); var nowdate=new Date(); var nowyear=nowdate.getFullYear(); + if ( !thisyear ) { thisyear=nowyear; } var loweryear=thisyear-2; var upperyear=thisyear+5; 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>'); } @@ -194,73 +234,81 @@ 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>'); } choicewrite('</select>'); } - - + + 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() { @@ -269,7 +317,163 @@ 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 validateDeepLink() { + var sform=choices.document.forms.sch; + svalue = sform.deeplinklisted.options[sform.deeplinklisted.selectedIndex].value+','; + svalue += sform.deeplinkacc.options[sform.deeplinkacc.selectedIndex].value+','; + if (sform.deeplinktypes.length) { + for (var i=0; i<sform.deeplinktypes.length; i++) { + if (sform.deeplinktypes[i].checked) { + svalue += sform.deeplinktypes[i].value; + if (sform.deeplinktypes[i].value == 'key') { + var posskey = sform.deeplinkkey.value; + posskey = posskey.replace(/^\s+|\s+$/g,''); + var keyRegExp = /^\w+$/; + if (keyRegExp.test(posskey)) { + svalue += ':'+posskey; + } + } else if (sform.deeplinktypes[i].value == 'lti') { + var posslti = sform.linkposslti.options[sform.linkposslti.selectedIndex].value; + if (posslti != '' && posslti != null) { + svalue += ':'+posslti; + } + } + break; + } + } + } + assemble(); +} + +function toggleDeepLink() { + var sform=choices.document.forms.sch; + if (sform.deeplinktypes.length) { + var frame = window.frames["choices"]; + for (var i=0; i<sform.deeplinktypes.length; i++) { + if (sform.deeplinktypes[i].checked) { + if (sform.deeplinktypes[i].value == 'key') { + if (frame.document.getElementById('deeplinkkey')) { + frame.document.getElementById('deeplinkkey').type='text'; + } + if (frame.document.getElementById('deeplinkltidiv')) { + frame.document.getElementById('deeplinkltidiv').style.display='none'; + } + } else { + if (frame.document.getElementById('deeplinkkey')) { + frame.document.getElementById('deeplinkkey').type='hidden'; + } + if (frame.document.getElementById('deeplinkltidiv')) { + if (sform.deeplinktypes[i].value == 'lti') { + frame.document.getElementById('deeplinkltidiv').style.display='inline-block'; + } else { + frame.document.getElementById('deeplinkltidiv').style.display='none'; + } + } + } + break; + } + } + } +} + +function calldeeplink() { + return 'onclick="parent.toggleDeepLink()"'; } function integereval() { @@ -304,6 +508,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 '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); @@ -312,13 +623,27 @@ 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) { + svalue=picked; + draw(); +} + +function colorfield(ir,ig,ib) { + var col=new Array; + col=["00","11","22","44","66","88","AA","CC","DD","EE","FF"]; + var color='#'+col[ir]+col[ig]+col[ib]; + var selection="<font color='"+color+"'>X</font>"; + if (color==svalue) { selection="<font color='#"+col[10-ir]+col[10-ig]+col[10-ib]+"'>X</font>"; } + choicewrite('<td bgcolor="'+color+'"><a href="javascript:parent.pickcolor('+"'"+ + color+"'"+')">'+selection+'</a></td>'); +} + function draw() { choicestart(); - choicewrite('<form name=sch'); + choicewrite('<form name="sch"'); if (ptype=='int') { choicewrite(' action="javascript:integereval();"'); } @@ -326,7 +651,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') { @@ -404,28 +736,66 @@ function draw() { choicewrite('</table>'); } else { if (pscat=='start') { - tablestart('Starting or opening date and time'); + tablestart('Date and time'); } if (pscat=='end') { - tablestart('Ending or closing date and time'); + 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>'); } @@ -442,12 +812,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(','); @@ -470,10 +840,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>'); } } } @@ -481,7 +851,7 @@ function draw() { if (ptype=='float') { if (pscat=='default') { tablestart('Default value or none'); - choicewrite('</table>'); + choicewrite('</table>'); } else { if (pscat=='pos') { tablestart('Positive floating point number or zero'); @@ -492,36 +862,412 @@ 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') { + if ((pscat=='any') || (pscat=='') || (pscat=='default') || + (typeof(pscat)=='undefined')) { tablestart('Text'); + 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><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 />'); } - choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); - choicewrite('<input name=stringval size=20 value="'+svalue+ - '" name=stringval onChange="parent.stringeval()">'); - choicewrite('</td></table>'); + 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="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="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><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="online"'+ + ' type="radio" '+callradiostringeval('online')); + 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="checked"'); } + choicewrite(' /> Check out</label><br />'); + } + if (pscat=='questiontype') { + tablestart('Question Type'); + choicewrite('<tr><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="problem"'+ + ' type="radio" '+callradiostringeval('problem')); + 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="checked"'); } +// choicewrite(' /> Quiz</label><br />'); + choicewrite('<label><input name="stringval" value="practice"'+ + ' type="radio" '+callradiostringeval('practice')); + 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="checked"'); } + choicewrite(' /> Bubblesheet Exam</label><br />'); +// choicewrite('<label><input name="stringval" value="assess"'+ +// ' type="radio" '+callradiostringeval('assess')); +// 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="checked"'); } + choicewrite(' /> Survey</label><br />'); +// choicewrite('<label><input name="stringval" value="form"'+ +// ' type="radio" '+callradiostringeval('form')); +// 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="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') { + 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><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="radstringval" value="txt"'+ + ' type="radio" '+callradiostringeval('txt')); + 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="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><td>Value:</td><td colspan="2">'); + choicewrite('<label><input name="stringval" value="no"'+ + ' type="radio" '+callradiostringeval('no')); + 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="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="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="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>'); + } + if (pscat=='deeplink') { + var deeplinkvals = new Array(); + var linktypeparts = new Array(); + var ltikeyRegExp = /^(lti|key):(\w+)$/; + var dlinkkeysty = 'hidden'; + var dlinkltidivsty = 'none'; + var dlinkkeyval = ''; + if ((svalue != '') && (svalue != null)) { + deeplinkvals = svalue.split(','); + if (ltikeyRegExp.test(deeplinkvals[2])) { + linktypeparts = deeplinkvals[2].split(':'); + deeplinkvals[2] = linktypeparts[0]; + if (linktypeparts[0] == 'key') { + dlinkkeysty = 'text'; + dlinkkeyval = linktypeparts[1]; + } else if (linktypeparts[0] == 'lti') { + dlinkltidivsty = 'inline-block'; + } + } + } else { + deeplinkvals = ['full','res','any']; + } + var deeplinklisting = new Array(); + deeplinklisting = ['full','absent','grades','details','datestatus']; + var deeplinklisttxt = new Array(); + deeplinklisttxt = ['Listed (linked) in both','Not listed','Listed in grades only','Listed (unlinked) in both','Listed (unlinked) inc. status in both']; + var deeplinkscopes = new Array(); + deeplinkscopes = ['res','map','rec']; + var deeplinkscopetxt = new Array(); + deeplinkscopetxt = ['resource only','enclosing map/folder','recursive map/folder']; + var deeplinkurls = new Array(); + deeplinkurls = ['any','only','key','lti']; + tablestart('Deep-linked items'); + choicewrite('<tr><td>In Contents or Gradebook?</td><td>'); + choicewrite('<select name="deeplinklisted">'); + for (var i=0; i<deeplinklisting.length; i++) { + choicewrite('<option value="'+deeplinklisting[i]+'"'); + if (deeplinkvals[0] == deeplinklisting[i]) { + choicewrite(' selected="selected"'); + } + choicewrite('>'+deeplinklisttxt[i]+'</option>'); + } + choicewrite('</select></td></tr>'); + choicewrite('<tr><td>Access scope via deep-link</td><td>'); + choicewrite('<select name="deeplinkacc">'); + for (var i=0; i<deeplinkscopes.length; i++) { + choicewrite('<option value="'+deeplinkscopes[i]+'"'); + if (deeplinkvals[1] == deeplinkscopes[i]) { + choicewrite(' selected="selected"'); + } + choicewrite('>'+deeplinkscopetxt[i]+'</option>'); + } + choicewrite('</select></td></tr>'); + choicewrite('<tr><td>Supported Link Types</td><td>'); + choicewrite('<span style="white-space: nowrap;"><label>'); + choicewrite('<input name="deeplinktypes" value="any"'+ + ' type="radio" '+calldeeplink()); + if (deeplinkvals[2]=='any') { choicewrite(' checked="checked"'); } + choicewrite(' /> regular + deep</label></span><br />'); + choicewrite('<span style="white-space: nowrap;"><label>'); + choicewrite('<input name="deeplinktypes" value="only"'+ + ' type="radio" '+calldeeplink()); + if (deeplinkvals[2]=='only') { choicewrite(' checked="checked"'); } + choicewrite(' /> deep only</label></span><br />'); + choicewrite('<span style="white-space: nowrap;"><label>'); + choicewrite('<input name="deeplinktypes" value="key"'+ + ' type="radio" '+calldeeplink()); + if (deeplinkvals[2]=='key') { choicewrite(' checked="checked"'); } + choicewrite(' /> deep with key</label>'); + choicewrite('<input type="'+dlinkkeysty+'" name="deeplinkkey" id="deeplinkkey" value="'+dlinkkeyval+'" size="6" />'); + choicewrite('</span><br />'); + if ((pextra != '') && (pextra != null)) { + var ltiRegExp = /^lti_/; + if (ltiRegExp.test(pextra)) { + pextra = pextra.replace(ltiRegExp,''); + var posslti = pextra.split(','); + if (posslti.length >= 1) { + var ltinums = new Array(); + var ltititles = new Array(); + for (var i=0; i<posslti.length; i++) { + var entries = posslti[i].split(':'); + ltinums[i] = entries[0]; + ltititles[i] = decodeURI(entries[1]); + } + if (ltinums.length) { + choicewrite('<span style="white-space: nowrap;"><label>'); + choicewrite('<input name="deeplinktypes" value="lti"'+ + ' type="radio" '+calldeeplink()); + if (deeplinkvals[2]=='lti') { choicewrite(' checked="checked"'); } + choicewrite(' /> deep with LTI launch</label>'); + choicewrite('<div id="deeplinkltidiv" style="display:'+dlinkltidivsty+'">'); + choicewrite('<select name="linkposslti">'); + var sel=''; + if (deeplinkvals[2]!='lti') { + sel = ' selected="selected"'; + } + if (ltinums.length > 1) { + choicewrite('<option value=""'+sel+'>Please select</option>'); + } + for (var i=0; i<ltinums.length; i++) { + sel = ''; + if (deeplinkvals[2]=='lti') { + if (linktypeparts.length) { + if (ltinums[i] == linktypeparts[1]) { + sel = ' selected="selected"'; + } + } + } + choicewrite('<option value="'+ltinums[i]+'"'+sel+'>'+ltititles[i]+'</option>'); + } + choicewrite('</select></div></span><br />'); + } + } + } + } + choicewrite('</td></tr></table>'); + } + } + + if (ptype=='color') { + tablestart('Choose a Color'); + choicewrite('<table>'); + if (svalue) { + choicewrite('<tr><td colspan="9">Current choice:</td><td bgcolor="'+ + escapeHTML(svalue)+'" colspan="2"> </td></tr>'); + } + for (var ir=0; ir<=10; ir++) { + for (var ig=0; ig<=10; ig++) { + choicewrite('<tr>'); + for (var ib=0; ib<=10; ib++) { + colorfield(ir,ig,ib); + } + choicewrite('</tr>'); + } } + choicewrite('</table></td></table>'); } - choicewrite('</table></form>'); + choicewrite('</form>'); choiceend(); } function sopt(va,text) { selwrite('<option value="'+va+'"'); if (va==pscat) { - selwrite(' selected'); + selwrite(' selected="selected"'); } selwrite('>'+text+'</option>'); } @@ -532,9 +1278,25 @@ 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.round(cdate.getTime()/1000); + svalue=Math.floor(cdate.getTime()/1000); } if (ptype=='tolerance') { if (pscat=='relative_sym') { @@ -582,6 +1344,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); @@ -592,10 +1359,10 @@ function init() { if (pair[0]=='type') { subs=pair[1].split('_'); ptype=subs[0]; pscat=subs[1]; - if (typeof(subs[2])!="undefined") { - pscat+='_'+subs[2]; + if (typeof(subs[2])!="undefined") { + pscat+='_'+subs[2]; } - if ((pscat=='') || (typeof(pscat)=="undefined")) { + if ((pscat=='') || (typeof(pscat)=="undefined")) { pscat='default'; } } @@ -603,12 +1370,97 @@ 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]; + } + if (pair[0]=='defmin' && pair[1] >= 0 && pair[1] < 60) { defmin=pair[1]; } + if (pair[0]=='defsec' && pair[1] >= 0 && pair[1] < 60) { defsec=pair[1]; } + if (pair[0]=='extra') { pextra=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') && - (typeof(svalue)!="undefined") && + (pscat=='default') && + (typeof(svalue)!="undefined") && (svalue!=0) && (svalue!='')) { pscat='any'; } if (ptype=='tolerance') { @@ -625,11 +1477,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'); @@ -640,13 +1507,20 @@ 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 { + cdate.setSeconds(defsec); + cdate.setMinutes(defmin); + cdate.setHours(defhour); } months[0]='January'; @@ -662,7 +1536,7 @@ function init() { months[10]='November'; months[11]='December'; } - + if (ptype=='int') { sopt('default','Default'); sopt('pos','Positive Integer, Not Zero'); @@ -681,72 +1555,90 @@ function init() { } if (ptype=='string') { - sopt('default','Default'); - sopt('string','String Value'); + //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 if (pscat == 'deeplink') { sopt('deeplink','Deep-linked items'); } + else { pscat = 'any'; } + if (pscat != 'deeplink') { sopt('any','String Value'); } } - selwrite('</select></form>'); + if (ptype=='color') { + sopt('default','Use Default Color'); + sopt('custom','Use Custom Color'); + } - selwrite('<a href="javascript:parent.assemble();'); + selwrite('</select></form>'); + 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 if ((ptype=='string') && (pscat=='deeplink')) { + selwrite('<a href="javascript:parent.validateDeepLink();'); + } 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>