--- loncom/interface/slotrequest.pm 2015/09/25 02:03:29 1.127 +++ loncom/interface/slotrequest.pm 2015/09/27 14:21:48 1.129 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for requesting to have slots added to a students record # -# $Id: slotrequest.pm,v 1.127 2015/09/25 02:03:29 raeburn Exp $ +# $Id: slotrequest.pm,v 1.129 2015/09/27 14:21:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -162,9 +162,24 @@ $js var startdate = startm+"/"+startd+"/"+starty; var starttime = new Date(startdate).getTime(); starttime = starttime/1000; + var starth = form.start_hour.options[form.start_hour.selectedIndex].value; + if (numberRegExp.test(starth)) { + starth = parseInt(starth); + if (starth > 0 && starth <= 23) { + starttime += 3600 * starth; + } + } var enddate = endm+"/"+endd+"/"+endy; var endtime = new Date(enddate).getTime(); endtime = endtime/1000; + var endh = form.end_hour.options[form.end_hour.selectedIndex].value; + if (numberRegExp.test(endh)) { + endh = parseInt(endh); + if (endh > 0 && endh <= 23) { + endtime += 3600 * endh; + } + } + var shown = 0; for (var i=0; i<$i; i++) { if ((slotstart[i] >= starttime) && (slotend[i] <= endtime)) { @@ -246,7 +261,7 @@ function uncheckSlotRadio() { } } -function toggleSlotMap(maprownum) { +function toggleSlotMap(maprownum,rownum) { if (document.getElementById('arrow'+maprownum)) { var img = document.getElementById('arrow'+maprownum); var rowdisplay; @@ -263,20 +278,81 @@ function toggleSlotMap(maprownum) { var resrows; var maptext; if (document.getElementsByClassName) { - resrows = document.getElementsByClassName('LC_slotmaprow_'+maprownum); + resrows = document.getElementsByClassName('LC_slotresrow_'+maprownum); maptext = document.getElementsByClassName('LC_slotmaptext_'+maprownum); } else { - resrows = getElementsByClassName(document.body,'LC_slotmaprow_'+maprownum); + resrows = getElementsByClassName(document.body,'LC_slotresrow_'+maprownum); maptext = getElementsByClassName(document.body,'LC_slotmaptext_'+maprownum); } + if (maptext.length) { + for (var i=0; i<maptext.length; i++) { + maptext[i].style.display = celldisplay; + } + } if (resrows.length) { + var mapbgidx = 0; + var rowclasses = ['LC_even_row','LC_odd_row']; + var mapbgClass = 'LC_even_row'; + var regExpBg = /LC_odd_row/i; + if (rowdisplay == 'table-row') { + if (document.getElementById('LC_slotmaprow_'+rownum)) { + mapbgClass = document.getElementById('LC_slotmaprow_'+rownum).className; + if (regExpBg.test(mapbgClass)) { + mapbgidx = 1; + } + } + } for (var i=0; i<resrows.length; i++) { - resrows[i].style.display = rowdisplay; + resrows[i].style.display = rowdisplay; + if (rowdisplay == 'table-row') { + mapbgidx ++; + var bgcolnew = mapbgidx % 2; + var bgcolold = (mapbgidx+1) % 2; + var k = i+parseInt(rownum)+1; + if (document.getElementById('LC_slotresrow_'+k)) { + document.getElementById('LC_slotresrow_'+k).className = document.getElementById('LC_slotresrow_'+k).className.replace(rowclasses[bgcolold],rowclasses[bgcolnew]); + } + } } - } - if (maptext.length) { - for (var i=0; i<maptext.length; i++) { - maptext[i].style.display = celldisplay; + if (document.getElementById('LC_slot_reservations')) { + var numrowsOdd = resrows.length % 2; + if (numrowsOdd) { + var lastbgClass = 'LC_even_row'; + var idx = 0; + var lastresnum = parseInt(rownum) + resrows.length; + if (rowdisplay == 'none') { + lastresnum = rownum; + if (document.getElementById('LC_slotmaprow_'+rownum)) { + lastbgClass = document.getElementById('LC_slotmaprow_'+rownum).className; + } + } else { + lastresnum = parseInt(rownum) + resrows.length; + if (document.getElementById('LC_slotresrow_'+lastresnum)) { + lastbgClass = document.getElementById('LC_slotresrow_'+lastresnum).className; + } + } + if (regExpBg.test(lastbgClass)) { + idx = 1; + } + var table = document.getElementById('LC_slot_reservations'); + if ((table.rows.length) && (table.rows.length >= lastresnum)) { + for (var i=lastresnum; i<table.rows.length; i++) { + if (table.rows[i].style.display != 'none') { + idx ++; + var bgcolnew = idx % 2; + var bgcolold = (idx+1) % 2; + j = i+1; + if (document.getElementById('LC_slotmaprow_'+j)) { + document.getElementById('LC_slotmaprow_'+j).className = rowclasses[bgcolnew]; + } else { + if (document.getElementById('LC_slotresrow_'+j)) { + document.getElementById('LC_slotresrow_'+j).className = document.getElementById('LC_slotresrow_'+j).className.replace(rowclasses[bgcolold],rowclasses[bgcolnew]); + } + } + } + } + } + } } } } @@ -1801,25 +1877,21 @@ sub manage_reservations { return; } my (%parent,%shownparent,%container,%container_title,%contents); - my ($depth,$count,$reservable,$lastcontainer,$rownum) = (0,0,0,0,0); + my ($depth,$count,$reservable,$lastcontainer,$rownum,$shown) = (0,0,0,0,0,0); my @backgrounds = ("LC_odd_row","LC_even_row"); my $numcolors = scalar(@backgrounds); my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace_21.gif"); my $slotheader = '<p>'. &mt('Your reservation status for any such assignments is listed below:'). '</p>'. - '<table class="LC_data_table LC_tableOfContent">'."\n"; + '<table class="LC_data_table LC_tableOfContent" id="LC_slot_reservations">'."\n"; my $shownheader = 0; my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); my (@ordered,%output,$mapitem,$got_map_slot,$currmapoutput,$mapnum); $mapnum = 0; + $shown = 0; while (my $resource = $it->next()) { if ($resource == $it->BEGIN_MAP()) { - @ordered=(); - undef(%output); - $currmapoutput = ''; - $got_map_slot = ''; - $mapitem = ''; $depth++; $parent{$depth} = $lastcontainer; } @@ -1866,23 +1938,30 @@ sub manage_reservations { '</span></td>'; } } + my $counter = 0; foreach my $symb (@ordered) { if (ref($output{$symb}) eq 'HASH') { - my $bgcolor = $backgrounds[$output{$symb}{'rownum'} % $numcolors]; + $counter ++; + my $bgcolor = $backgrounds[($output{$symb}{'shown'} + $counter) % $numcolors]; $currmapoutput .= $output{$symb}{'header'}. - '<tr class="'.$bgcolor.' LC_slotmaprow_'.$output{$symb}{'mapnum'}.'"'. - ' style="display:none">'.$output{$symb}{'info'}. + '<tr class="'.$bgcolor.' LC_slotresrow_'.$output{$symb}{'mapnum'}.'"'. + ' style="display:none" id="LC_slotresrow_'.$output{$symb}{'rownum'}.'">'. + $output{$symb}{'info'}. $output{$symb}{'data'}.'</tr>'."\n"; } } } else { + my $counter = 0; foreach my $symb (@ordered) { if (ref($output{$symb}) eq 'HASH') { - my $bgcolor = $backgrounds[$output{$symb}{'rownum'} % $numcolors]; + $counter ++; + my $bgcolor = $backgrounds[($output{$symb}{'shown'} + $counter) % $numcolors]; $currmapoutput .= $output{$symb}{'header'}. - '<tr class="'.$bgcolor.' LC_slotmaprow_'.$output{$symb}{'mapnum'}.'"'. - ' style="display:table-row">'.$output{$symb}{'info'}. + '<tr class="'.$bgcolor.' LC_slotresrow_'.$output{$symb}{'mapnum'}.'"'. + ' style="display:table-row" id="LC_slotresrow_'.$output{$symb}{'rownum'}.'">'. + $output{$symb}{'info'}. $output{$symb}{'data'}.'</tr>'."\n"; + $shown ++; } } } @@ -1895,6 +1974,11 @@ sub manage_reservations { } } $r->print($mapitem.$currmapoutput); + @ordered=(); + undef(%output); + $currmapoutput = ''; + $got_map_slot = ''; + $mapitem = ''; } if (ref($resource)) { my $symb = $resource->symb(); @@ -1988,21 +2072,24 @@ sub manage_reservations { for (my $i=0; $i<@maprows; $i++) { $mapnum ++; $rownum ++; - my $bgcolor = $backgrounds[$rownum % $numcolors]; + $shown ++; + my $bgcolor = $backgrounds[$shown % $numcolors]; if (!$shownheader) { $mapitem .= $slotheader; $shownheader = 1; } if (ref($maprows[$i]) eq 'ARRAY') { if ($i < scalar(@maprows)-1) { - $mapitem .= '<tr class="'.$bgcolor.'"><td>'.join('',@{$maprows[$i]}).'</td>'. + $mapitem .= '<tr class="'.$bgcolor.'" id="LC_slotmaprow_'.$rownum.'">'. + '<td>'.join('',@{$maprows[$i]}).'</td>'. '<td colspan="2"> </td></tr>'."\n"; } else { $mapitem .= - '<tr class="'.$bgcolor.'"><td>'.$maprows[$i][0]. + '<tr class="'.$bgcolor.'" id="LC_slotmaprow_'.$rownum.'">'. + '<td>'.$maprows[$i][0]. '<img src="/adm/lonIcons/arrow.open.gif" id="arrow'.$mapnum.'" '. 'alt="arrow" onmouseover="this.style.cursor=\'pointer\'" '. - 'onclick="'."toggleSlotMap('$mapnum');".'" />'. + 'onclick="'."toggleSlotMap('$mapnum','$rownum');".'" />'. $maprows[$i][1].(' ' x6).'</td>'."\n"; } } @@ -2011,6 +2098,7 @@ sub manage_reservations { } $rownum ++; $output{$symb}{'rownum'} = $rownum; + $output{$symb}{'shown'} = $shown; if (!$shownheader) { $output{$symb}{'header'} = $slotheader; $shownheader = 1;