'+intervaldis()+' ',
@@ -490,7 +822,33 @@ function draw() {
'',
' ',
].join("\n"));
- } else {
+ tablestart('Provide a "Done" button to students?');
+ choicewrite('Value: ');
+ choicewrite(' No ');
+ choicewrite(' Yes ');
+ choicewrite(''+
+ ' Yes, with proctor key ');
+ choicewrite(' '+
+ ''+
+ ''+
+ 'Button text:'+
+ '
');
+ choicewrite(' ');
+ } else {
choicewrite(''
+cdate.toString()+
' Date: ');
@@ -571,7 +929,7 @@ function draw() {
}
if (ptype=='string') {
- if ((pscat=='any') || (pscat=='') || (pscat=='default') ||
+ if ((pscat=='any') || (pscat=='') || (pscat=='default') ||
(typeof(pscat)=='undefined')) {
tablestart('Text');
choicewrite(' Value: ');
@@ -707,10 +1065,51 @@ function draw() {
choicewrite(' /> No ');
}
if (pscat=='ip') {
- tablestart('IP Number/Name');
- choicewrite(' Value: ');
- choicewrite(' ');
+ var currallow = new Array;
+ var currdeny = new Array;
+ if ((svalue != '') && (typeof(svalue) != 'undefined')) {
+ 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; iAllow from Deny from ');
+ var acctypes = ['allow','deny'];
+ for (var i=0; i'+
+ ''+
+ '
');
+ }
+ choicewrite('
Add item ');
+ }
+ choicewrite(' ');
}
if (pscat=='fileext') {
tablestart('Allowed File Extensions');
@@ -741,17 +1140,299 @@ function draw() {
choicewrite(' Yes, and the scope of student selected slot is a single resource. ');
+ choicewrite(' /> Yes, and the scope of the slot is a single resource. ');
choicewrite(' Yes, and the scope of student selected slot is the enclosing map/folder. When checking in, it applies to only one resource. ');
+ choicewrite(' /> Yes, and the scope of the slot is the enclosing map/folder. When checking in, it applies to only one resource. ');
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. ');
+ choicewrite(' /> Yes, and the scope of the slot is the enclosing map/folder. When checking in, all resources in the map/folder are checked in. ');
choicewrite('');
}
+ if (pscat=='deeplink') {
+ var deeplinkvals = new Array();
+ var linkprotectparts = new Array();
+ var ltikeyRegExp = /^(ltic:\d+|ltid:\d+|key:[a-zA-Z\d_.!@#$%^&*()+=-]+)$/;
+ var linkexitparts = new Array();
+ var dlinkexitRegExp = /^(yes|url|no)(|:[^:,;'"]+)$/;
+ var dlinkkeysty = 'hidden';
+ var dlinkkeyval = '';
+ var dlinklticdivsty = 'none';
+ var dlinkltiddivsty = 'none';
+ var dlinkmenusdivsty = 'none';
+ var dlinkexitdivsty = 'none';
+ var dlinkexittextval = '';
+ if ((svalue != '') && (typeof(svalue) != 'undefined')) {
+ deeplinkvals = svalue.split(',');
+ if (ltikeyRegExp.test(deeplinkvals[4])) {
+ linkprotectparts = deeplinkvals[4].split(':');
+ deeplinkvals[4] = linkprotectparts[0];
+ if (linkprotectparts[0] == 'key') {
+ dlinkkeysty = 'text';
+ dlinkkeyval = linkprotectparts[1];
+ } else if (linkprotectparts[0] == 'ltic') {
+ dlinklticdivsty = 'block';
+ } else if (linkprotectparts[0] == 'ltid') {
+ dlinkltiddivsty = 'block';
+ }
+ }
+ if (deeplinkvals[5] >= 1) {
+ dlinkmenusdivsty = 'inline-block';
+ }
+ if (dlinkexitRegExp.test(deeplinkvals[7])) {
+ linkexitparts = deeplinkvals[7].split(':');
+ deeplinkvals[7] = linkexitparts[0];
+ if (deeplinkvals[7] != 'no') {
+ dlinkexitdivsty = 'inline-block';
+ if (!linkexitparts[1]) {
+ dlinkexittextval = 'Exit Tool';
+ } else {
+ dlinkexittextval = linkexitparts[1];
+ }
+ }
+ }
+ } else {
+ deeplinkvals = ['off','unhide','full','res','','0','_self','no'];
+ }
+ var deeplinkstate = new Array();
+ deeplinkstate = ['only','off','both'];
+ var deeplinkstatetxt = new Array();
+ deeplinkstatetxt = ['deep only','deeplink off','regular + deep'];
+ var deeplinkothers = new Array();
+ deeplinkothers = ['hide','unhide'];
+ var deeplinkotherstxt = new Array();
+ deeplinkotherstxt = ['Hidden','Unhidden'];
+ 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 deeplinkprotect = new Array();
+ deeplinkprotect = ['none','key','ltic','ltid'];
+ var deeplinktarget = new Array();
+ deeplinktarget = ['_self','_top'];
+ var deeplinktargettxt = new Array();
+ deeplinktargettxt = ['Embedded','Not embedded'];
+ var deeplinkexit = ['yes','url','no'];
+ tablestart('Deep-linked items');
+ choicewrite('Access status? ');
+ choicewrite('');
+ for (var i=0; i'+deeplinkstatetxt[i]+'');
+ }
+ choicewrite(' ');
+ choicewrite('Hide other resources? ');
+ choicewrite('');
+ for (var i=0; i'+deeplinkotherstxt[i]+'');
+ }
+ choicewrite(' ');
+ choicewrite('In Contents + Gradebook? ');
+ choicewrite('');
+ for (var i=0; i'+deeplinklisttxt[i]+'');
+ }
+ choicewrite(' ');
+ choicewrite('Access scope for link ');
+ choicewrite('');
+ for (var i=0; i'+deeplinkscopetxt[i]+'');
+ }
+ choicewrite(' ');
+ choicewrite('Link protection ');
+ choicewrite('');
+ choicewrite(' not in use ');
+ choicewrite(' key access');
+ choicewrite(' ');
+ choicewrite(' ');
+
+ var possmenus = new Array();
+ if ((pextra != '') && (typeof(pextra) != 'undefined')) {
+ var lticRegExp = /^ltic_/;
+ var ltidRegExp = /^ltid_/;
+ var menusRegExp = /^menus_/;
+ var extras = pextra.split('&');
+ for (var i=0; i= 1) {
+ var lticnums = new Array();
+ var ltictitles = new Array();
+ for (var j=0; j');
+ choicewrite(' course LTI launch ');
+ choicewrite('');
+ choicewrite('');
+ var sel='';
+ if (deeplinkvals[4]!='ltic') {
+ sel = ' selected="selected"';
+ }
+ if (lticnums.length > 1) {
+ choicewrite('Select ');
+ }
+ for (var j=0; j'+ltictitles[j]+'');
+ }
+ choicewrite('
');
+ }
+ }
+ } else if (ltidRegExp.test(extras[i])) {
+ extras[i] = extras[i].replace(ltidRegExp,'');
+ var possltid = extras[i].split(',');
+ if (possltid.length >= 1) {
+ var ltidnums = new Array();
+ var ltidtitles = new Array();
+ for (var j=0; j');
+ choicewrite(' domain LTI launch ');
+ choicewrite('');
+ choicewrite('');
+ var sel='';
+ if (deeplinkvals[4]!='ltid') {
+ sel = ' selected="selected"';
+ }
+ if (ltidnums.length > 1) {
+ choicewrite('Select ');
+ }
+ for (var j=0; j'+ltidtitles[j]+'');
+ }
+ choicewrite('
');
+ }
+ }
+
+ } else if (menusRegExp.test(extras[i])) {
+ extras[i] = extras[i].replace(menusRegExp,'');
+ possmenus = extras[i].split(',');
+ }
+ }
+ }
+ choicewrite('Menu Items Displayed ');
+ choicewrite('');
+ choicewrite(' Standard (all menus) ');
+ if (possmenus.length >= 1) {
+ choicewrite('');
+ choicewrite(' 0) { choicewrite(' checked="checked"'); }
+ choicewrite(' /> Numbered collection ');
+ choicewrite(' ');
+ }
+ choicewrite(' ');
+ choicewrite('Embedded? ');
+ choicewrite('');
+ for (var i=0; i'+deeplinktargettxt[i]+'');
+ }
+ choicewrite(' ');
+ choicewrite(' ');
+ choicewrite('Exit Button? ');
+ choicewrite('');
+ choicewrite(' not in use ');
+ choicewrite('');
+ choicewrite(' in use, no redirect ');
+ choicewrite('');
+ choicewrite(' in use, redirect to URL ');
+ choicewrite('');
+ choicewrite('Button text: ');
+ choicewrite(' ');
+ choicewrite('
');
+ choicewrite(' ');
+ }
}
if (ptype=='color') {
@@ -841,6 +1522,10 @@ function assemble() {
function init() {
var i;
var subs=new Array();
+ var doneRegExp = /_done(|\:[^\:]+\:)/;
+ var doneproctorRegExp = /_done(|\:[^\:]+\:)_proctor/;
+ var proctorkeyRegExp = /^(\d+)_(.+)$/;
+ var donetextRegExp = /\:([^\:]+)\:/;
var namevalue=this.window.location.search.split('&');
namevalue[0]=namevalue[0].substr(1,namevalue[0].length-1);
@@ -868,8 +1553,50 @@ function init() {
}
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]; }
}
+ 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') &&
@@ -978,8 +1705,9 @@ function init() {
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'; }
- sopt('any','String Value');
+ if (pscat != 'deeplink') { sopt('any','String Value'); }
}
if (ptype=='color') {
@@ -991,8 +1719,14 @@ function init() {
var targ='parent.opener';
if (pmodal==1) {
targ='parent.parent';
- }
- selwrite('