1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
2: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
3: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4: <!--
5: The LearningOnline Network with CAPA
6: Parameter Input Window
7: //
8: // $Id: parameter.html,v 1.73 2016/05/21 16:58:07 raeburn Exp $
9: //
10: // Copyright Michigan State University Board of Trustees
11: //
12: // This file is part of the LearningOnline Network with CAPA (LON-CAPA).
13: //
14: // LON-CAPA is free software; you can redistribute it and/or modify
15: // it under the terms of the GNU General Public License as published by
16: // the Free Software Foundation; either version 2 of the License, or
17: // (at your option) any later version.
18: //
19: // LON-CAPA is distributed in the hope that it will be useful,
20: // but WITHOUT ANY WARRANTY; without even the implied warranty of
21: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22: // GNU General Public License for more details.
23: //
24: // You should have received a copy of the GNU General Public License
25: // along with LON-CAPA; if not, write to the Free Software
26: // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27: //
28: // /home/httpd/html/adm/gpl.txt
29: //
30: // http://www.lon-capa.org/
31: //
32: -->
33: <head>
34: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
35: <title>LON-CAPA</title>
36:
37: <script type="text/javascript">
38: // <![CDATA[
39:
40: var ptype='';
41: var pvalue='';
42: var pmodval='';
43: var pextraval='';
44: var pextravaltwo='';
45: var preturn='';
46: var pcode='';
47: var pscat='';
48: var pmarker='';
49: var pmodal='';
50: var pname='';
51:
52: var defhour=0;
53: var defmin=0;
54: var defsec=0;
55:
56: var svalue;
57: var stype;
58: var smarker;
59:
60: var vars=new Array();
61:
62: var cdate=new Date();
63:
64: var csec;
65: var cmin;
66: var chour;
67: var cday;
68:
69: var months=new Array();
70:
71:
72: function selwrite(text) {
73: this.window.selector.document.write(text);
74: }
75:
76: function choicestart() {
77: this.window.choices.document.open();
78: choicewrite('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
79: choicewrite('<html xmlns="http://www.w3.org/1999/xhtml">');
80: choicewrite('<head>');
81: choicewrite('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
82: choicewrite('<title>LON-CAPA</title>');
83: choicewrite('<style type="text/css">');
84: choicewrite('<!--');
85: choicewrite('body {');
86: choicewrite('font-family: Verdana,Arial,Helvetica,sans-serif;');
87: choicewrite('line-height:130%;');
88: choicewrite('font-size:0.83em;');
89: choicewrite('background: #FFFFFF;');
90: choicewrite('}');
91: choicewrite('table.LC_parmsel_table {font-size: 90%;}');
92: choicewrite('table.LC_parmsel_table tr td { padding: 5px; border: 1px solid #C8C8C8;}');
93: choicewrite('-->');
94: choicewrite('</style>');
95: choicewrite('</head>');
96: choicewrite('<body>');
97: }
98:
99: function choiceend() {
100: choicewrite('</body></html>');
101: this.window.choices.document.close();
102: }
103:
104: function choicewrite(text) {
105: this.window.choices.document.write(text);
106: }
107:
108: function tablestart(headtext) {
109: choicewrite('<table class="LC_parmsel_table"><tr bgcolor="#C5DB99"><th colspan="3">'+
110: headtext+'</th></tr>');
111: }
112:
113: function valline(text,id1,id2) {
114: choicewrite('<tr><td>'+text+
115: '</td><td><input type="text" size="4" name="val'+
116: id1+'" /></td><td>incl:<input type="checkbox" name="val'+
117: id2+'" /></td></tr>');
118: }
119:
120: function escapeHTML(text) {
121: text = text.replace(/&/g, '&');
122: text = text.replace(/"/g, '"');
123: text = text.replace(/</g, '<');
124: text = text.replace(/>/g, '>');
125: return text;
126: }
127:
128: function datecalc() {
129: var sform=choices.document.forms.sch;
130:
131: cdate.setHours(sform.hours.options[sform.hours.selectedIndex].value);
132: cdate.setMinutes(sform.minutes.options[sform.minutes.selectedIndex].value);
133: cdate.setSeconds(sform.minutes.options[sform.seconds.selectedIndex].value);
134: cdate.setDate(sform.date.options[sform.date.selectedIndex].value);
135: cdate.setMonth(sform.month.options[sform.month.selectedIndex].value);
136: cdate.setFullYear(sform.year.options[sform.year.selectedIndex].value);
137:
138: draw();
139: }
140:
141: function hour() {
142: var thishour=cdate.getHours();
143: var i; var j;
144: choicewrite('<select name="hours" onchange="parent.datecalc();">');
145: for (i=0;i<=23;i++) {
146: choicewrite('<option value="'+i+'"');
147: if (i==thishour) {
148: choicewrite(' selected="selected"');
149: }
150: choicewrite('>');
151: if (i==12) { choicewrite('noon'); } else {
152: if (i==0) { choicewrite('midnight') } else {
153:
154: if (i<12) { choicewrite(i+' am'); } else {
155: j=i-12; choicewrite(j+' pm');
156: }
157:
158: }
159: }
160: choicewrite('</option>');
161: }
162: choicewrite('</select>');
163: }
164:
165: function minute() {
166: var thisminutes=cdate.getMinutes();
167: var i;
168: choicewrite('<select name="minutes" onchange="parent.datecalc();">');
169: for (i=0;i<=59;i++) {
170: choicewrite('<option value="'+i+'"');
171: if (i==thisminutes) {
172: choicewrite(' selected="selected"');
173: }
174: choicewrite('>'+i+'</option>');
175: }
176: choicewrite('</select>');
177: }
178:
179: function second() {
180: var thisseconds=cdate.getSeconds();
181: var i;
182: choicewrite('<select name="seconds" onchange="parent.datecalc();">');
183: for (i=0;i<=59;i++) {
184: choicewrite('<option value="'+i+'"');
185: if (i==thisseconds) {
186: choicewrite(' selected="selected"');
187: }
188: choicewrite('>'+i+'</option>');
189: }
190: choicewrite('</select>');
191: }
192:
193:
194: function date() {
195: var thisdate=cdate.getDate();
196: var i;
197: choicewrite('<select name="date" onchange="parent.datecalc();">');
198: for (i=1;i<=31;i++) {
199: choicewrite('<option value="'+i+'"');
200: if (i==thisdate) {
201: choicewrite(' selected="selected"');
202: }
203: choicewrite('>'+i+'</option>');
204: }
205: choicewrite('</select>');
206: }
207:
208: function year() {
209: var thisyear=cdate.getFullYear();
210: var nowdate=new Date();
211: var nowyear=nowdate.getFullYear();
212: if ( !thisyear ) { thisyear=nowyear; }
213: var loweryear=thisyear-2;
214: var upperyear=thisyear+5;
215: if (thisyear>nowyear) { loweryear=nowyear-2; }
216: if (thisyear<nowyear) { upperyear=nowyear+5; }
217: var i;
218: choicewrite('<select name="year" onchange="parent.datecalc();">');
219: for (i=loweryear;i<=upperyear;i++) {
220: choicewrite('<option value="'+i+'"');
221: if (i==thisyear) {
222: choicewrite(' selected="selected"');
223: }
224: choicewrite('>'+i+'</option>');
225: }
226: choicewrite('</select>');
227: }
228:
229: function month() {
230: var thismonth=cdate.getMonth();
231: var i;
232: choicewrite('<select name="month" onchange="parent.datecalc();">');
233: for (i=0;i<=11;i++) {
234: choicewrite('<option value="'+i+'"');
235: if (i==thismonth) {
236: choicewrite(' selected="selected"');
237: }
238: choicewrite('>'+months[i]+'</option>');
239: }
240: choicewrite('</select>');
241: }
242:
243:
244: function intminute() {
245: var thisminutes=cmins;
246: var i;
247: var result = '';
248: result += '<select name="minutes" onchange="parent.intcalc();">';
249: for (i=0;i<=59;i++) {
250: result += '<option value="'+i+'"';
251: if (i==thisminutes) {
252: result += ' selected="selected"';
253: }
254: result += '>'+i+'</option>';
255: }
256: result += '</select>';
257: return result;
258: }
259:
260: function inthour() {
261: var thishours=chours;
262: var i;
263: var result = '';
264: result += '<select name="hours" onchange="parent.intcalc();">';
265: for (i=0;i<=23;i++) {
266: result += '<option value="'+i+'"';
267: if (i==thishours) {
268: result += ' selected="selected"';
269: }
270: result += '>'+i+'</option>';
271: }
272: result += '</select>';
273: return result;
274: }
275:
276: function intsecond() {
277: var thisseconds=csecs;
278: var i;
279: var result = '';
280: result += '<select name="seconds" onchange="parent.intcalc();">';
281: for (i=0;i<=59;i++) {
282: result += '<option value="'+i+'"';
283: if (i==thisseconds) {
284: result += ' selected="selected"';
285: }
286: result += '>'+i+'</option>';
287: }
288: result += '</select>';
289: return result;
290: }
291:
292:
293: function intday() {
294: var thisdate=cdays;
295: var i;
296: var result ='';
297: result += '<select name="date" onchange="parent.intcalc();">';
298: for (i=0;i<=31;i++) {
299: result += '<option value="'+i+'"';
300: if (i==thisdate) {
301: result += ' selected="selected"';
302: }
303: result += '>'+i+'</option>';
304: }
305: result += '</select>';
306: return result;
307: }
308:
309: function intcalc() {
310: var sform=choices.document.forms.sch;
311: svalue=((sform.date.options[sform.date.selectedIndex].value*24+
312: sform.hours.options[sform.hours.selectedIndex].value*1)*60+
313: sform.minutes.options[sform.minutes.selectedIndex].value*1)*60+
314: sform.seconds.options[sform.seconds.selectedIndex].value*1;
315: if ((ptype=='date') && (pscat=='interval')) {
316: var newpmodval = '';
317: var newpextraval = '';
318: var newpextravaltwo = 'Done';
319: if (sform.donebutton.length) {
320: for (var i=0; i<sform.donebutton.length; i++) {
321: if (sform.donebutton[i].checked) {
322: if (sform.donebutton[i].value == '_done') {
323: newpmodval = sform.donebutton[i].value;
324: newpextravaltwo = sform.donebutton_text.value;
325: } else {
326: if (sform.donebutton[i].value == '_done_proctor') {
327: newpmodval = sform.donebutton[i].value;
328: newpextraval = sform.donebutton_proctorkey.value;
329: newpextravaltwo = sform.donebutton_text.value;
330: newpextravaltwo = newpextravaltwo.replace(/:/g,'');
331: }
332: }
333: }
334: }
335: }
336: pmodval = newpmodval;
337: pextraval = newpextraval;
338: pextravaltwo = newpextravaltwo;
339: draw();
340: if (pmodval) {
341: var doneRegExp = /^(_done)(|_proctor)$/;
342: var donevals = pmodval.match(doneRegExp);
343: if (donevals.length == 3) {
344: svalue += donevals[1];
345: }
346: if (newpextravaltwo) {
347: if (newpextravaltwo != 'Done') {
348: svalue += ':'+newpextravaltwo+':';
349: }
350: }
351: if (donevals[2] != '') {
352: svalue += donevals[2];
353: if (pextraval != '') {
354: svalue += '_'+pextraval;
355: }
356: }
357: }
358: } else {
359: draw();
360: }
361: }
362:
363: function toggleSecret() {
364: var sform=choices.document.forms.sch;
365: if (sform.donebutton.length) {
366: for (var i=0; i<sform.donebutton.length; i++) {
367: if (sform.donebutton[i].checked) {
368: if (sform.donebutton[i].value == '') {
369: if (document.getElementById('donebuttontextdiv')) {
370: document.getElementById('donebuttontextdiv').style.display='none';
371: }
372: } else {
373: if (document.getElementById('donebuttontextdiv')) {
374: document.getElementById('donebuttontextdiv').style.display='block';
375: }
376: }
377: if (sform.donebutton[i].value == '_done_proctor') {
378: if (document.getElementById('done_proctorkey')) {
379: document.getElementById('done_proctorkey').type='text';
380: }
381: } else {
382: if (document.getElementById('done_proctorkey')) {
383: document.getElementById('done_proctorkey').type='hidden';
384: document.getElementById('done_proctorkey').value='';
385: }
386: }
387: }
388: }
389: }
390: }
391:
392: function validateInterval() {
393: var sform=choices.document.forms.sch;
394: if (sform.donebutton.length) {
395: for (var i=0; i<sform.donebutton.length; i++) {
396: if (sform.donebutton[i].checked) {
397: if (sform.donebutton[i].value == '_done_proctor') {
398: if ((sform.donebutton_proctorkey.value == '') ||
399: (sform.donebutton_proctorkey.value == null)) {
400: alert('Please provide a key for a proctor to enter when a student uses the "Done" button.');
401: return;
402: }
403: }
404: }
405: }
406: }
407: intcalc();
408: assemble();
409: }
410:
411: function integereval() {
412: svalue=choices.document.forms.sch.intval.value;
413: svalue=Math.round(svalue);
414: if (pscat=='zeropos') { svalue=Math.abs(svalue); }
415: if ((pscat=='pos') && (svalue==0)) {
416: svalue='';
417: }
418: if (pscat.indexOf('inrange')!=-1) {
419: var rangeparts=new Array;
420: rangeparts=split('_',pscat);
421: rangeparts=split(',',rangeparts[1]);
422: if (svalue<rangeparts[0]) { svalue=rangeparts[0]; }
423: if (svalue>rangeparts[1]) { svalue=rangeparts[1]; }
424: }
425: draw();
426: }
427:
428: function floateval() {
429: svalue=choices.document.forms.sch.floatval.value;
430: svalue=1.0*svalue;
431: if (pscat=='pos') { svalue=Math.abs(svalue); }
432: if ((pscat=='zeroone') && ((svalue<0) || (svalue>1))) {
433: svalue='';
434: }
435: draw();
436: }
437:
438: function stringeval() {
439: svalue=choices.document.forms.sch.stringval.value;
440: draw();
441: }
442:
443: function ipstringeval() {
444: var patternIp = /^([\[\]a-zA-Z\.\d\*\-]+)$/;
445: var acctypes = new Array;
446: acctypes = ['allow','deny'];
447: svalue = '';
448: for (var i=0; i<acctypes.length; i++) {
449: var items = choices.document.getElementsByName('setip'+acctypes[i]);
450: if (items.length) {
451: for (var j=0; j<items.length; j++) {
452: if (items[j].type == "text") {
453: var possip = items[j].value
454: possip = possip.replace(/^\s+|\s+$/g,'');
455: if (patternIp.test(possip)) {
456: if (acctypes[i] == 'deny') {
457: possip = '!'+possip;
458: }
459: if (svalue == '') {
460: svalue = possip;
461: } else {
462: svalue += ','+possip;
463: }
464: }
465: }
466: }
467: }
468: }
469: draw();
470: }
471:
472: function addIpRule(iptype) {
473: var frame = window.frames["choices"];
474: if (frame.document.getElementById('LC_string_ipacc_inner_'+iptype)) {
475: var innerDiv = frame.document.getElementById('LC_string_ipacc_inner_'+iptype);
476: var count = innerDiv.childNodes.length
477: var ipDiv = frame.document.createElement('div');
478: ipDiv.innerHTML = '<input type="text" size="10" name="setip'+iptype+'" onblur="parent.ipstringeval();" />'+
479: '<a href="#" onclick="parent.removeIpRule(\''+iptype+'\',\''+count+'\')">Remove</a>';
480: frame.document.getElementById('LC_string_ipacc_inner_'+iptype).appendChild(ipDiv);
481: }
482: return false;
483: }
484:
485: function removeIpRule(iptype,num) {
486: var frame = window.frames["choices"];
487: if (frame.document.getElementById('LC_string_ipacc_inner_'+iptype)) {
488: var innerDiv = frame.document.getElementById('LC_string_ipacc_inner_'+iptype);
489: for (var i=0; i<innerDiv.childNodes.length; i++) {
490: if (i==num) {
491: innerDiv.removeChild(innerDiv.childNodes[i]);
492: ipstringeval();
493: break;
494: }
495: }
496: }
497: }
498:
499: function radiostringeval(newval) {
500: svalue=newval;
501: draw();
502: }
503:
504: function callradiostringeval(newval) {
505: return 'onclick="parent.radiostringeval(\''+newval+'\')"';
506: }
507:
508: function lenienteval(newval) {
509: if (newval == 'weighted') {
510: if (document.getElementById('lenientweighteddiv')) {
511: document.getElementById('lenientweighteddiv').style.display='block';
512: }
513: var patternRelWeight = /^\-?[\d.]+$/;
514: var sform=choices.document.forms.sch;
515: if ((sform.lenientrelwt.length != 'undefined') && (sform.lenientrelwt.length) != 'null') {
516: for (var i=0; i<sform.lenientrelwt.length; i++) {
517: var relweight = sform.lenientrelwt[i].value;
518: relweight = relweight.replace(/^\s+|\s+$/g,'');
519: if (!patternRelWeight.test(relweight)) {
520: if (i<2) {
521: relweight = '1.0';
522: } else {
523: relweight = '0.0';
524: }
525: }
526: sform.lenientrelwt[i].value = relweight;
527: if (i==0) {
528: svalue = relweight;
529: } else {
530: svalue += ','+relweight;
531: }
532: }
533: }
534: } else {
535: if (document.getElementById('lenientweighteddiv')) {
536: document.getElementById('lenientweighteddiv').style.display='none';
537: }
538: svalue=newval;
539: }
540: draw();
541: }
542:
543: function calllenientradioeval(newval) {
544: return 'onclick="parent.lenienteval(\''+newval+'\')"';
545: }
546:
547: function callintervalpmodval() {
548: return 'onclick="parent.intcalc();parent.toggleSecret()"';
549: }
550:
551: function intervaldis() {
552: csecs=svalue;
553: cdays=Math.floor(csecs/86400);
554: csecs-=cdays*86400;
555: chours=Math.floor(csecs/3600);
556: csecs-=chours*3600;
557: cmins=Math.floor(csecs/60);
558: csecs-=cmins*60;
559: return cdays+' days '+chours+' hours '+cmins+' mins '+csecs+' secs';
560: }
561:
562: function pickcolor(picked) {
563: svalue=picked;
564: draw();
565: }
566:
567: function colorfield(ir,ig,ib) {
568: var col=new Array;
569: col=["00","11","22","44","66","88","AA","CC","DD","EE","FF"];
570: var color='#'+col[ir]+col[ig]+col[ib];
571: var selection="<font color='"+color+"'>X</font>";
572: if (color==svalue) { selection="<font color='#"+col[10-ir]+col[10-ig]+col[10-ib]+"'>X</font>"; }
573: choicewrite('<td bgcolor="'+color+'"><a href="javascript:parent.pickcolor('+"'"+
574: color+"'"+')">'+selection+'</a></td>');
575:
576: }
577:
578: function draw() {
579: choicestart();
580: choicewrite('<form name="sch"');
581: if (ptype=='int') {
582: choicewrite(' action="javascript:integereval();"');
583: }
584: if (ptype=='float') {
585: choicewrite(' action="javascript:floateval();"');
586: }
587: if (ptype=='string') {
588: if (pscat == 'ip') {
589: choicewrite(' action="javascript:ipstringeval();"');
590: } else {
591: choicewrite(' action="javascript:stringeval();"');
592: }
593: }
594: if (ptype != 'int' && ptype != 'float' && ptype != 'string') {
595: choicewrite(' action=""');
596: }
597: choicewrite('>');
598: if (ptype=='tolerance') {
599: // 0: pscat
600: if (pscat=='default') {
601: tablestart('Use default value or algorithm of resource');
602: }
603: if (pscat=='relative_sym') {
604: // 2: percentage
605: // 3: open
606: tablestart('Percentage error, symmetric around value');
607: valline('Percentage',2,3);
608: if ((svalue!='') && (typeof(svalue)!="undefined")) {
609: choices.document.forms.sch.val2.value=parseInt(svalue);
610: if (svalue.indexOf('+')!=-1) {
611: choices.document.forms.sch.val3.checked=true;
612: }
613: }
614: }
615: if (pscat=='relative') {
616: // 2: left
617: // 3: open
618: // 4: right
619: // 5: open
620: tablestart('Percentage error, asymmetric around value');
621: valline('Upper percentage',2,3);
622: valline('Lower percentage',4,5);
623: var range1=new Array;
624: if ((svalue!='') && (typeof(svalue)!="undefined")) {
625: range1=svalue.split(',');
626: if (typeof(range1[1])=='undefined') { range1[1]=range1[0]; }
627: choices.document.forms.sch.val2.value=parseFloat(range1[0]);
628: if (range1[0].indexOf('+')!=-1) {
629: choices.document.forms.sch.val3.checked=true;
630: }
631: choices.document.forms.sch.val4.value=parseFloat(range1[1]);
632: if (range1[1].indexOf('+')!=-1) {
633: choices.document.forms.sch.val5.checked=true;
634: }
635: }
636: }
637: if (pscat=='absolute_sym') {
638: tablestart('Absolute error, symmetric around value');
639: valline('Value',2,3);
640: if ((svalue!='') && (typeof(svalue)!="undefined")) {
641: choices.document.forms.sch.val2.value=parseFloat(svalue);
642: if (svalue.indexOf('+')!=-1) {
643: choices.document.forms.sch.val3.checked=true;
644: }
645: }
646: }
647: if (pscat=='absolute') {
648: tablestart('Absolute error, asymmetric around value');
649: valline('Upper value',2,3);
650: valline('Lower value',4,5);
651: var range2=new Array;
652: if ((svalue!='') && (typeof(svalue)!="undefined")) {
653: range=svalue.split(',');
654: if (typeof(range2[1])=='undefined') { range2[1]=range2[0]; }
655: choices.document.forms.sch.val2.value=parseFloat(range2[0]);
656: if (range2[0].indexOf('+')!=-1) {
657: choices.document.forms.sch.val3.checked=true;
658: }
659: choices.document.forms.sch.val4.value=parseFloat(range2[1]);
660: if (range2[1].indexOf('+')!=-1) {
661: choices.document.forms.sch.val5.checked=true;
662: }
663: }
664: }
665: }
666:
667: if (ptype=='date') {
668: if (pscat=='default') {
669: tablestart('Default value or none');
670: choicewrite('</table>');
671: } else {
672: if (pscat=='start') {
673: tablestart('Date and time');
674: }
675: if (pscat=='end') {
676: tablestart('Date and time');
677: }
678: if (pscat=='interval') {
679: var proctorkeytype = 'hidden';
680: var donebuttontext = 'none';
681: if (pmodval == '_done_proctor') {
682: proctorkeytype = 'text';
683: donebuttontext = 'block';
684: }
685: if (pmodval == '_done') {
686: donebuttontext = 'block';
687: }
688: tablestart('Time interval');
689: choicewrite( [
690: '<tr><td colspan="3">'+intervaldis()+'</td></tr>',
691: '<tr><td>Time:</td><td colspan="2">',
692: '<span style="white-space:nowrap">'+intday()+' days </span>',
693: '<span style="white-space:nowrap">'+inthour()+' hours</span>',
694: '<span style="white-space:nowrap">'+intminute()+' mins</span>',
695: '<span style="white-space:nowrap">'+intsecond()+' secs</span>',
696: '</td></tr>',
697: '</table>',
698: '<br />',
699: ].join("\n"));
700: tablestart('Provide a "Done" button to students?');
701: choicewrite('<tr><td>Value:</td><td colspan="2">');
702: choicewrite('<label><input name="donebutton" value=""'+
703: ' type="radio" '+callintervalpmodval());
704: if (pmodval == '') { choicewrite(' checked="checked"'); }
705: choicewrite(' /> No</label><br />');
706: choicewrite('<label><input name="donebutton" value="_done"'+
707: ' type="radio" '+callintervalpmodval());
708: if (pmodval == '_done') { choicewrite(' checked="checked"'); }
709: choicewrite(' /> Yes</label><br />');
710: choicewrite('<span style="white-space:nowrap">'+
711: '<label><input name="donebutton" value="_done_proctor"'+
712: ' type="radio" '+callintervalpmodval());
713: if (pmodval == '_done_proctor') { choicewrite(' checked="checked"'); }
714: choicewrite(' /> Yes, with proctor key</label>');
715: choicewrite(' <input name="donebutton_proctorkey" value='+
716: '"'+escapeHTML(pextraval)+'" type="'+proctorkeytype+
717: '" id="done_proctorkey" size="10"'+
718: ' onblur="parent.intcalc();" /></span><br />'+
719: '<div id="donebuttontextdiv" style="display:'+donebuttontext+'">'+
720: '<br /><span style="white-space:nowrap">'+
721: 'Button text:'+
722: '<input name="donebutton_text" value='+
723: '"'+escapeHTML(pextravaltwo)+'" type="text" '+
724: 'size="10" onblur="parent.intcalc();" /></span></div>');
725: choicewrite('</td></tr></table>');
726: } else {
727: choicewrite('<tr><td colspan="3">'
728: +cdate.toString()+
729: '</td></tr><tr><td>Date:</td><td colspan="2">');
730: month();date();year();
731: choicewrite('</td></tr><tr><td>Time:'
732: +'</td><td colspan="2">');hour();choicewrite('h ');minute();
733: choicewrite('m ');second();
734: choicewrite('s</td></tr></table>');
735: }
736: }
737: }
738:
739: if (ptype=='int') {
740: var pscatparts=new Array;
741: pscatparts=pscat.split(',');
742: pscat=pscatparts[0];
743: if (pscat=='default') {
744: tablestart('Default value or none');
745: choicewrite('</table>');
746: } else {
747: if (pscat=='range') {
748: tablestart('Integer range');
749: choicewrite('<tr><td>Lower Value:'+
750: '</td><td colspan="2"><input type="text" size="4" name="val2'+
751: '" /></td></tr>');
752: choicewrite('<tr><td>Upper Value:'+
753: '</td><td colspan="2"><input type="text" size="4" name="val4'+
754: '" /></td></tr></table>');
755: var range=new Array;
756: if ((svalue!='') && (typeof(svalue)!="undefined")) {
757: range=svalue.split(',');
758: if (typeof(range[1])=='undefined') { range[1]=range[0]; }
759: choices.document.forms.sch.val2.value=parseInt(range[0]);
760: choices.document.forms.sch.val4.value=parseInt(range[1]);
761: }
762: } else {
763: if (pscat=='pos') {
764: tablestart('Positive (non-zero) integer');
765: }
766: if (pscat=='zeropos') {
767: tablestart('Positive integer or zero');
768: }
769: if (pscat.indexOf('inrange')!=-1) {
770: var rangeparts=new Array;
771: rangeparts=split(',',pscat);
772: tablestart('Integer in the range ['+rangeparts[1]+']');
773: }
774: if (pscat=='any') {
775: tablestart('Integer');
776: }
777: choicewrite('<tr><td>Value:</td><td colspan="2">');
778: choicewrite('<input name="intval" size="10" value="'+escapeHTML(svalue)+
779: '" onchange="parent.integereval()" />');
780: choicewrite('</td></tr></table>');
781: }
782: }
783: }
784:
785: if (ptype=='float') {
786: if (pscat=='default') {
787: tablestart('Default value or none');
788: choicewrite('</table>');
789: } else {
790: if (pscat=='pos') {
791: tablestart('Positive floating point number or zero');
792: }
793: if (pscat=='zeroone') {
794: tablestart('Floating point number between zero and one');
795: }
796: if (pscat=='any') {
797: tablestart('Floating point number');
798: }
799: choicewrite('<tr><td>Value:</td><td colspan="2">');
800: choicewrite('<input name="floatval" size="10" value="'+escapeHTML(svalue)+
801: '" onchange="parent.floateval()" />');
802: choicewrite('</td></tr></table>');
803: }
804: }
805:
806: if (ptype=='string') {
807: if ((pscat=='any') || (pscat=='') || (pscat=='default') ||
808: (typeof(pscat)=='undefined')) {
809: tablestart('Text');
810: choicewrite('<tr><td>Value:</td><td colspan="2">');
811: choicewrite('<input name="stringval" size="20" value="'+escapeHTML(svalue)+
812: '" type="text" onchange="parent.stringeval()" />');
813: }
814: if (pscat=='yesno') {
815: tablestart('Yes/No');
816: choicewrite('<tr><td>Value:</td><td colspan="2">');
817: choicewrite('<label><input name="stringval" value="yes"'+
818: ' type="radio" '+callradiostringeval('yes'));
819: if (svalue=='yes') { choicewrite(' checked="checked"'); }
820: choicewrite(' /> Yes</label><br />');
821: choicewrite('<label><input name="stringval" value="no"'+
822: ' type="radio" '+callradiostringeval('no'));
823: if (svalue=='no') { choicewrite(' checked="checked"'); }
824: choicewrite(' /> No</label><br />');
825: }
826: if (pscat=='problemstatus') {
827: tablestart('Problem Status');
828: choicewrite('<tr><td>Value:</td><td colspan="2">');
829: choicewrite('<label><input name="stringval" value="yes"'+
830: ' type="radio" '+callradiostringeval('yes'));
831: if (svalue=='yes') { choicewrite(' checked="checked"'); }
832: choicewrite(' /> Yes</label><br />');
833: choicewrite('<label><input name="stringval" value="answer"'+
834: ' type="radio" '+callradiostringeval('answer'));
835: if (svalue=='answer') { choicewrite(' checked="checked"'); }
836: choicewrite(' /> Yes, and show correct answer if they exceed the maximum number of tries.</label><br />');
837: choicewrite('<label><input name="stringval" value="no"'+
838: ' type="radio" '+callradiostringeval('no'));
839: if (svalue=='no') { choicewrite(' checked="checked"'); }
840: choicewrite(' /> No, don\'t show correct/incorrect feedback.</label><br />');
841: choicewrite('<label><input name="stringval" value="no_feedback_ever"'+
842: ' type="radio" '+callradiostringeval('no_feedback_ever'));
843: if (svalue=='no_feedback_ever') { choicewrite(' checked="checked"'); }
844: choicewrite(' /> No, show no feedback at all.</label><br />');
845: }
846: if (pscat=='examtype') {
847: tablestart('Exam Type');
848: choicewrite('<tr><td>Value:</td><td colspan="2">');
849: choicewrite('<label><input name="stringval" value="online"'+
850: ' type="radio" '+callradiostringeval('online'));
851: if (svalue=='online') { choicewrite(' checked="checked"'); }
852: choicewrite(' /> Online</label><br />');
853: choicewrite('<label><input name="stringval" value="checkout"'+
854: ' type="radio" '+callradiostringeval('checkout'));
855: if (svalue=='checkout') { choicewrite(' checked="checked"'); }
856: choicewrite(' /> Check out</label><br />');
857: }
858: if (pscat=='questiontype') {
859: tablestart('Question Type');
860: choicewrite('<tr><td>Value:</td><td colspan="2">');
861: choicewrite('<label><input name="stringval" value="problem"'+
862: ' type="radio" '+callradiostringeval('problem'));
863: if (svalue=='problem') { choicewrite(' checked="checked"'); }
864: choicewrite(' /> Standard Problem</label><br />');
865: // choicewrite('<label><input name="stringval" value="quiz"'+
866: // ' type="radio" '+callradiostringeval('quiz'));
867: // if (svalue=='quiz') { choicewrite(' checked="checked"'); }
868: // choicewrite(' /> Quiz</label><br />');
869: choicewrite('<label><input name="stringval" value="practice"'+
870: ' type="radio" '+callradiostringeval('practice'));
871: if (svalue=='practice') { choicewrite(' checked="checked"'); }
872: choicewrite(' /> Practice</label><br />');
873: choicewrite('<label><input name="stringval" value="exam"'+
874: ' type="radio" '+callradiostringeval('exam'));
875: if (svalue=='exam') { choicewrite(' checked="checked"'); }
876: choicewrite(' /> Bubblesheet Exam</label><br />');
877: // choicewrite('<label><input name="stringval" value="assess"'+
878: // ' type="radio" '+callradiostringeval('assess'));
879: // if (svalue=='assess') { choicewrite(' checked="checked"'); }
880: // choicewrite(' /> Assessment</label><br />');
881: choicewrite('<label><input name="stringval" value="survey"'+
882: ' type="radio" '+callradiostringeval('survey'));
883: if (svalue=='survey') { choicewrite(' checked="checked"'); }
884: choicewrite(' /> Survey</label><br />');
885: // choicewrite('<label><input name="stringval" value="form"'+
886: // ' type="radio" '+callradiostringeval('form'));
887: // if (svalue=='form') { choicewrite(' checked="checked"'); }
888: // choicewrite('> Input Form</label><br />');
889: choicewrite('<label><input name="stringval" value="surveycred"'+
890: ' type="radio" '+callradiostringeval('surveycred'));
891: if (svalue=='surveycred') { choicewrite(' checked="checked"'); }
892: choicewrite('> Survey (credit for submission)</label><br />');
893: choicewrite('<label><input name="stringval" value="anonsurvey"'+
894: ' type="radio" '+callradiostringeval('anonsurvey'));
895: if (svalue=='anonsurvey') { choicewrite(' checked="checked"'); }
896: choicewrite('> Anonymous Survey</label><br />');
897: choicewrite('<label><input name="stringval" value="anonsurveycred"'+
898: ' type="radio" '+callradiostringeval('anonsurveycred'));
899: if (svalue=='anonsurveycred') { choicewrite(' checked="checked"'); }
900: choicewrite('> Anonymous Survey (credit for submission)</label><br />');
901: choicewrite('<label><input name="stringval" value="randomizetry"'+
902: ' type="radio" '+callradiostringeval('randomizetry'));
903: if (svalue=='randomizetry') { choicewrite(' checked="checked"'); }
904: choicewrite('> New Randomization Each N Tries (default N=1)</label><br />');
905: choicewrite('<label><input name="stringval" value="library"'+
906: ' type="radio" '+callradiostringeval('library'));
907: if (svalue=='library') { choicewrite(' checked="checked"'); }
908: choicewrite(' /> Library</label><br />');
909: }
910: if (pscat=='lenient') {
911: var patternLenientStd = /^(yes|no|default)$/;
912: var patternLenientRel = /^([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)$/;
913: var lenientweighted = 'none';
914: var relatives = new Array;
915: tablestart('Lenient Grading (Partial Credit)');
916: choicewrite('<tr><td>Value:</td><td colspan="2">');
917: choicewrite('<label><input name="stringval" value="yes"'+
918: ' type="radio" '+calllenientradioeval('yes'));
919: if (svalue=='yes') { choicewrite(' checked="checked"'); }
920: choicewrite(' /> Yes</label><br />');
921: choicewrite('<label><input name="stringval" value="no"'+
922: ' type="radio" '+calllenientradioeval('no'));
923: if (svalue=='no') { choicewrite(' checked="checked"'); }
924: choicewrite(' /> No</label><br />');
925: choicewrite('<label><input name="stringval" value="default"'+
926: ' type="radio" '+calllenientradioeval('default'));
927: if (svalue=='default') { choicewrite(' checked="checked"'); }
928: choicewrite(' /> Default (only bubblesheet grading is lenient)</label><br />');
929: choicewrite('<label><input name="stringval" value="weighted"'+
930: ' type="radio" '+calllenientradioeval('weighted'));
931: if (!patternLenientStd.test(svalue) && svalue != '') {
932: choicewrite(' checked="checked"');
933: lenientweighted='block';
934: var relatives = svalue.match(patternLenientRel);
935: }
936: choicewrite(' />Yes, weighted (optionresponse in checkbox mode)</label><br /><br />'+
937: '<div id="lenientweighteddiv" style="display:'+lenientweighted+'">'+
938: '<table class="LC_parmsel_table"><tr bgcolor="#C5DB99">'+
939: '<th colspan="2">Foil submission status</th><th>Points</th></tr>');
940: var lenienttypes = ['Correct (checked)','Correct (unchecked)','Incorrect (checked)','Incorrect (unchecked)'];
941: for (var i=0; i<lenienttypes.length; i++) {
942: var j = i+1;
943: if (relatives[j] == '') {
944: if (i < 2) {
945: relatives[j] = '1.0';
946: } else {
947: relatives[j] = '0.0';
948: }
949: }
950: choicewrite('<tr><td colspan="2">'+lenienttypes[i]+'</td>'+
951: '<td><input type="text" name="lenientrelwt" value="'+relatives[j]+'"'+
952: ' size="3" onblur="parent.lenienteval(\'weighted\')" /></td></tr>');
953: }
954: choicewrite('</table></div>');
955: }
956: if (pscat=='discussvote') {
957: tablestart('Discussion Voting');
958: choicewrite('<tr><td>Value:</td><td colspan="2">');
959: choicewrite('<label><input name="stringval" value="yes"'+
960: ' type="radio" '+callradiostringeval('yes'));
961: if (svalue=='yes') { choicewrite(' checked="checked"'); }
962: choicewrite(' /> Yes</label><br />');
963: choicewrite('<label><input name="stringval" value="notended"'+
964: ' type="radio" '+callradiostringeval('notended'));
965: if (svalue=='notended') { choicewrite(' checked="checked"'); }
966: choicewrite(' /> Yes, unless discussion ended</label><br />');
967: choicewrite('<label><input name="stringval" value="no"'+
968: ' type="radio" '+callradiostringeval('no'));
969: if (svalue=='no') { choicewrite(' checked="checked"'); }
970: choicewrite(' /> No</label><br />');
971: }
972: if (pscat=='ip') {
973: var currallow = new Array;
974: var currdeny = new Array;
975: if ((svalue != '') && (svalue != null)) {
976: var patternComma = /,/;
977: var patternAllow = /^([\[\]a-zA-Z\.\d\*\-]+)$/;
978: var patternDeny = /^\!([\[\]a-zA-Z\.\d\*\-]+)$/;
979: var current = new Array;
980: if (patternComma.test(svalue)) {
981: current = svalue.split(',');
982: } else {
983: current = (svalue);
984: }
985: for (var i=0; i<current.length; i++) {
986: if (patternDeny.test(current[i])) {
987: var denied = current[i].replace(/^!/,'');
988: currdeny.push(denied);
989: } else {
990: if (patternAllow.test(current[i])) {
991: currallow.push(current[i]);
992: }
993: }
994: }
995: }
996: if (currdeny.length == 0) {
997: currdeny = ('');
998: }
999: if (currallow.length == 0) {
1000: currallow = ('');
1001: }
1002: var curripaccess = [currallow,currdeny];
1003: tablestart('IP Number/Name');
1004: choicewrite('<tr><th>Allow from</th><th>Deny from</th></tr><tr>');
1005: var acctypes = ['allow','deny'];
1006: for (var i=0; i<acctypes.length; i++) {
1007: choicewrite('<td valign="top">'+
1008: '<div class="LC_string_ipacc_wrap" id="LC_string_ipacc_'+acctypes[i]+'">'+
1009: '<div class="LC_string_ipacc_inner" id="LC_string_ipacc_inner_'+acctypes[i]+'">');
1010: var num=0;
1011: for (var j=0; j<curripaccess[i].length; j++) {
1012: choicewrite('<div><input type="text" size="10" name="setip'+acctypes[i]+'" value="'+curripaccess[i][j]+'" onblur="parent.ipstringeval();" />');
1013: if (num > 0) {
1014: choicewrite('<a href="#" onclick="parent.removeIpRule(\''+acctypes[i]+'\',\''+j+'\')">Remove</a>');
1015: }
1016: choicewrite('</div>');
1017: num ++;
1018: }
1019: choicewrite('</div><button onclick="parent.addIpRule(\''+acctypes[i]+'\');">Add more</button>');
1020: }
1021: choicewrite('</div></td></tr></table>');
1022: }
1023: if (pscat=='fileext') {
1024: tablestart('Allowed File Extensions');
1025: choicewrite('<tr><td>Value:</td><td colspan="2">');
1026: choicewrite('<label><input name="radstringval" value="txt"'+
1027: ' type="radio" '+callradiostringeval('txt'));
1028: if (svalue=='txt') { choicewrite(' checked="checked"'); }
1029: choicewrite(' /> Plain Text</label><br />');
1030: choicewrite('<label><input name="radstringval" value="png,jpg,jpeg,gif"'+
1031: ' type="radio" '+callradiostringeval('png,jpg,jpeg,gif'));
1032: if (svalue=='png,jpg,jpeg,gif') { choicewrite(' checked="checked"'); }
1033: choicewrite(' /> Picture File</label><br />');
1034: choicewrite('<label><input name="radstringval" value="doc,docx,xls,xlsx,ppt,pptx"'+
1035: ' type="radio" '+callradiostringeval('doc,docx,xls,xlsx,ppt,pptx'));
1036: if (svalue=='doc,docx,xls,xlsx,ppt,pptx') { choicewrite(' checked="checked"'); }
1037: if (svalue=='doc,xls,ppt') { choicewrite(' checked="checked"'); }
1038: choicewrite(' /> Office Document</label><br />');
1039: choicewrite('<input name="stringval" size="20" value="'+escapeHTML(svalue)+
1040: '" onchange="parent.stringeval()" />');
1041: }
1042: if (pscat=='useslots') {
1043: tablestart('Slots control access');
1044: choicewrite('<tr><td>Value:</td><td colspan="2">');
1045: choicewrite('<label><input name="stringval" value="no"'+
1046: ' type="radio" '+callradiostringeval('no'));
1047: if (svalue=='no') { choicewrite(' checked="checked"'); }
1048: choicewrite(' /> No</label><br />');
1049: choicewrite('<label><input name="stringval" value="resource"'+
1050: ' type="radio" '+callradiostringeval('resource'));
1051: if (svalue=='resource') { choicewrite(' checked="checked"'); }
1052: choicewrite(' /> Yes, and the scope of student selected slot is a single resource.</label><br />');
1053: choicewrite('<label><input name="stringval" value="map"'+
1054: ' type="radio" '+callradiostringeval('map'));
1055: if (svalue=='map') { choicewrite(' checked="checked"'); }
1056: 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 />');
1057: choicewrite('<label><input name="stringval" value="map_map"'+
1058: ' type="radio" '+callradiostringeval('map_map'));
1059: if (svalue=='map_map') { choicewrite(' checked="checked"'); }
1060: 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 />');
1061: choicewrite('</td></tr></table>');
1062: }
1063: }
1064:
1065: if (ptype=='color') {
1066: tablestart('Choose a Color');
1067: choicewrite('<table>');
1068: if (svalue) {
1069: choicewrite('<tr><td colspan="9">Current choice:</td><td bgcolor="'+
1070: escapeHTML(svalue)+'" colspan="2"> </td></tr>');
1071: }
1072: for (var ir=0; ir<=10; ir++) {
1073: for (var ig=0; ig<=10; ig++) {
1074: choicewrite('<tr>');
1075: for (var ib=0; ib<=10; ib++) {
1076: colorfield(ir,ig,ib);
1077: }
1078: choicewrite('</tr>');
1079: }
1080: }
1081: choicewrite('</table></td></table>');
1082: }
1083:
1084: choicewrite('</form>');
1085: choiceend();
1086: }
1087:
1088: function sopt(va,text) {
1089: selwrite('<option value="'+va+'"');
1090: if (va==pscat) {
1091: selwrite(' selected="selected"');
1092: }
1093: selwrite('>'+text+'</option>');
1094: }
1095:
1096: function catchange() {
1097: var sform=selector.document.forms.fsel.fcat;
1098: pscat=sform.options[sform.selectedIndex].value;
1099: draw();
1100: }
1101:
1102: function assemble() {
1103: if ((ptype=='date') && (pscat!='interval')) {
1104: svalue=Math.floor(cdate.getTime()/1000);
1105: }
1106: if (ptype=='tolerance') {
1107: if (pscat=='relative_sym') {
1108: svalue=choices.document.forms.sch.val2.value+'%';
1109: if (choices.document.forms.sch.val3.checked) {
1110: svalue+='+';
1111: }
1112: }
1113: if (pscat=='absolute_sym') {
1114: svalue=choices.document.forms.sch.val2.value;
1115: if (choices.document.forms.sch.val3.checked) {
1116: svalue+='+';
1117: }
1118: }
1119: if (pscat=='absolute') {
1120: svalue=choices.document.forms.sch.val2.value;
1121: if (choices.document.forms.sch.val3.checked) {
1122: svalue+='+';
1123: }
1124: svalue+=','+choices.document.forms.sch.val4.value;
1125: if (choices.document.forms.sch.val5.checked) {
1126: svalue+='+';
1127: }
1128: }
1129: if (pscat=='relative') {
1130: svalue=choices.document.forms.sch.val2.value+'%';
1131: if (choices.document.forms.sch.val3.checked) {
1132: svalue+='+';
1133: }
1134: svalue+=','+choices.document.forms.sch.val4.value+'%';
1135: if (choices.document.forms.sch.val5.checked) {
1136: svalue+='+';
1137: }
1138: }
1139: }
1140: if ((ptype=='int') && (pscat=='range')) {
1141: svalue=choices.document.forms.sch.val2.value+','+
1142: choices.document.forms.sch.val4.value;
1143: }
1144: if (pscat=='default') { svalue=''; }
1145: stype=ptype+'_'+pscat;
1146: }
1147:
1148:
1149: function init() {
1150: var i;
1151: var subs=new Array();
1152: var doneRegExp = /_done(|\:[^\:]+\:)/;
1153: var doneproctorRegExp = /_done(|\:[^\:]+\:)_proctor/;
1154: var proctorkeyRegExp = /^(\d+)_(.+)$/;
1155: var donetextRegExp = /\:([^\:]+)\:/;
1156: var namevalue=this.window.location.search.split('&');
1157: namevalue[0]=namevalue[0].substr(1,namevalue[0].length-1);
1158:
1159: for (i=0;i<namevalue.length;i++) {
1160: var pair=namevalue[i].split('=');
1161: pair[1]=unescape(pair[1]);
1162: if (pair[0]=='value') { pvalue=pair[1]; }
1163: if (pair[0]=='type') { subs=pair[1].split('_');
1164: ptype=subs[0];
1165: pscat=subs[1];
1166: if (typeof(subs[2])!="undefined") {
1167: pscat+='_'+subs[2];
1168: }
1169: if ((pscat=='') || (typeof(pscat)=="undefined")) {
1170: pscat='default';
1171: }
1172: }
1173: if (pair[0]=='return') { preturn=pair[1]; }
1174: if (pair[0]=='call') { pcode=pair[1]; }
1175: if (pair[0]=='marker') { pmarker=pair[1]; }
1176: if (pair[0]=='name') { pname=pair[1]; }
1177: if (pair[0]=='modal') { pmodal=pair[1]; }
1178: if (pair[0]=='defhour' && pair[1] >= 0 && pair[1] < 24 ) {
1179: defhour=pair[1];
1180: }
1181: if (pair[0]=='defmin' && pair[1] >= 0 && pair[1] < 60) { defmin=pair[1]; }
1182: if (pair[0]=='defsec' && pair[1] >= 0 && pair[1] < 60) { defsec=pair[1]; }
1183: }
1184:
1185: if (ptype=='date' && pscat == 'interval') {
1186: if (doneproctorRegExp.test(pvalue)) {
1187: var current = pvalue.match(doneproctorRegExp);
1188: if (current.length == 2) {
1189: var textstr = current[1];
1190: if (textstr != '') {
1191: var textvals = textstr.match(donetextRegExp);
1192: if (textvals.length == 2) {
1193: pextravaltwo = textvals[1];
1194: }
1195: }
1196: }
1197: var intervalwithkey = pvalue.replace(doneproctorRegExp,'');
1198: if (proctorkeyRegExp.test(intervalwithkey)) {
1199: var currvals = intervalwithkey.match(proctorkeyRegExp);
1200: if (currvals.length == 3) {
1201: pvalue = currvals[1];
1202: pextraval = currvals[2];
1203: pmodval = '_done_proctor';
1204: } else {
1205: pmodval = '';
1206: }
1207: }
1208: } else {
1209: if (doneRegExp.test(pvalue)) {
1210: var current = pvalue.match(doneRegExp);
1211: if (current.length == 2) {
1212: var textstr = current[1];
1213: if (textstr != '') {
1214: var textvals = textstr.match(donetextRegExp);
1215: if (textvals.length == 2) {
1216: pextravaltwo = textvals[1];
1217: }
1218: }
1219: }
1220: var pnumval = pvalue.replace(doneRegExp,'');
1221: pmodval = '_done';
1222: pvalue = pnumval;
1223: }
1224: }
1225: }
1226: svalue=pvalue;
1227: if (((ptype=='float') || (ptype=='string') || (ptype=='int')) &&
1228: (pscat=='default') &&
1229: (typeof(svalue)!="undefined") &&
1230: (svalue!=0) && (svalue!='')) { pscat='any'; }
1231:
1232: if (ptype=='tolerance') {
1233: var tperc=0;
1234: var trange=0;
1235: if (typeof(svalue)!='undefined') {
1236: if (svalue.indexOf('%')!=-1) { tperc=1; }
1237: if (svalue.indexOf(',')!=-1) { trange=1; }
1238: if (trange) {
1239: if (tperc) { pscat='relative'; } else { pscat='absolute'; }
1240: } else {
1241: if (tperc) { pscat='relative_sym'; } else { pscat='absolute_sym'; }
1242: }
1243: }
1244: }
1245:
1246: this.window.selector.document.open();
1247: selwrite('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
1248: selwrite('<html xmlns="http://www.w3.org/1999/xhtml">');
1249: selwrite('<head>');
1250: selwrite('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
1251: selwrite('<title>LON-CAPA</title>');
1252: selwrite('<style type="text/css">');
1253: selwrite('<!--');
1254: selwrite('body {');
1255: selwrite('font-family: Verdana,Arial,Helvetica,sans-serif;');
1256: selwrite('line-height:130%;');
1257: selwrite('font-size:0.83em;');
1258: selwrite('background: #FFFFFF;');
1259: selwrite('}');
1260: selwrite('-->');
1261: selwrite('</style>');
1262: selwrite('</head>');
1263: selwrite('<body>');
1264: selwrite('<form name="fsel" action=""><b>'+pname+'</b><br />');
1265: selwrite('Format of Value(s): <select name="fcat" onchange="parent.catchange();">');
1266:
1267: if (ptype=='tolerance') {
1268: sopt('default','Default');
1269: sopt('relative_sym','Relative Tolerance, Symmetric (percent)');
1270: sopt('relative','Relative Tolerance (percentages)');
1271: sopt('absolute_sym','Absolute Tolerance, Symmetric (value)');
1272: sopt('absolute','Absolute Tolerance (values)');
1273: }
1274:
1275: if (ptype=='date') {
1276: if (pscat != 'interval') {
1277: sopt('default','Default');
1278: sopt('start','Starting Date');
1279: sopt('end','Ending Date');
1280: } else {
1281: sopt('interval','Time Interval');
1282: }
1283:
1284: if ((pvalue!='') && (typeof(pvalue)!="undefined")) {
1285: cdate.setTime(pvalue*1000);
1286: } else {
1287: cdate.setSeconds(defsec);
1288: cdate.setMinutes(defmin);
1289: cdate.setHours(defhour);
1290: }
1291:
1292: months[0]='January';
1293: months[1]='February';
1294: months[2]='March';
1295: months[3]='April';
1296: months[4]='May';
1297: months[5]='June';
1298: months[6]='July';
1299: months[7]='August';
1300: months[8]='September';
1301: months[9]='October';
1302: months[10]='November';
1303: months[11]='December';
1304: }
1305:
1306: if (ptype=='int') {
1307: sopt('default','Default');
1308: sopt('pos','Positive Integer, Not Zero');
1309: sopt('zeropos','Positive Integer or Zero');
1310: sopt('inrange','Integer in Range');
1311: sopt('range','Range of Integers');
1312: sopt('any','Integer');
1313: }
1314:
1315: if (ptype=='float') {
1316: sopt('default','Default');
1317: sopt('zeroone','Floating Point between 0 and 1');
1318: sopt('pos','Positive Floating Point');
1319: sopt('any','Floating Point');
1320:
1321: }
1322:
1323: if (ptype=='string') {
1324: //sopt('default','Default');
1325: if (pscat == 'yesno') { sopt('yesno','Yes/No'); }
1326: else if (pscat == 'problemstatus'){ sopt('problemstatus','Problem Status'); }
1327: else if (pscat == 'examtype') { sopt('examtype','Exam Type'); }
1328: else if (pscat == 'questiontype') { sopt('questiontype','Question Type'); }
1329: else if (pscat == 'lenient') { sopt('lenient','Lenient Grading (Partial Credit)'); }
1330: else if (pscat == 'discussvote') { sopt('discussvote','Discussion Voting'); }
1331: else if (pscat == 'ip') { sopt('ip','IP Number/Name'); }
1332: else if (pscat == 'fileext') { sopt('fileext','File Extension'); }
1333: else if (pscat == 'useslots') { sopt('useslots','Slots control access'); }
1334: else { pscat = 'any'; }
1335: sopt('any','String Value');
1336: }
1337:
1338: if (ptype=='color') {
1339: sopt('default','Use Default Color');
1340: sopt('custom','Use Custom Color');
1341: }
1342:
1343: selwrite('</select></form>');
1344: var targ='parent.opener';
1345: if (pmodal==1) {
1346: targ='parent.parent';
1347: }
1348: if ((ptype=='date') && (pscat=='interval')) {
1349: selwrite('<a href="javascript:parent.validateInterval();');
1350: } else {
1351: selwrite('<a href="javascript:parent.assemble();');
1352: }
1353: if (preturn!='') {
1354: selwrite(targ+'.document.'+preturn+'_value.value=parent.window.svalue;');
1355: selwrite(targ+'.document.'+preturn+'_type.value=parent.window.stype;');
1356: }
1357: if (pmarker!='') {
1358: selwrite(targ+'.document.'+preturn+'_marker.value=parent.window.pmarker;');
1359: }
1360: if (pcode!='') {
1361: selwrite(targ+'.'+pcode+'();');
1362: }
1363: selwrite('">Save</a> ');
1364:
1365: selwrite('<a href="javascript:');
1366: selwrite(targ+'.document.'+preturn+'_value.value='+"'';");
1367: if (pmarker!='') {
1368: selwrite(
1369: targ+'.document.'+preturn+'_marker.value=parent.window.pmarker;');
1370: }
1371: if (pcode!='') {
1372: selwrite(targ+'.'+pcode+'();');
1373: }
1374: selwrite('">Delete</a> ');
1375:
1376: selwrite('</body></html>');
1377: this.window.selector.document.close();
1378: draw();
1379:
1380: }
1381:
1382: // ]]>
1383: </script>
1384: </head>
1385:
1386: <frameset rows="120,*" onload="init();">
1387: <frame name="selector" src="empty.html" />
1388: <frame name="choices" src="empty.html" />
1389: </frameset>
1390:
1391:
1392:
1393: </html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>