--- rat/lonratedt.pm 2002/09/04 16:54:44 1.36 +++ rat/lonratedt.pm 2003/06/16 13:51:46 1.45 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps # -# $Id: lonratedt.pm,v 1.36 2002/09/04 16:54:44 www Exp $ +# $Id: lonratedt.pm,v 1.45 2003/06/16 13:51:46 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -103,7 +103,12 @@ sub mapread { } } } - +# ---------------------------------------------- Did we just read an empty map? + if ($#resources<1) { + undef $resources[0]; + $resources[1]=':::start'; + $resources[2]=':::finish'; + } # -------------------------------------------------- This is a linear map, sort my $startidx=0; @@ -300,6 +305,7 @@ sub pastetarget { my $ext='false'; if ($url=~/^http\:\/\//) { $ext='true'; } $url=~s/\:/\:/g; + $name=~s/\:/\:/g; $resources[$idx]=$name.':'.$url.':'.$ext.':normal:res'; } } @@ -312,18 +318,39 @@ sub pastetarget { # modifies @resources sub startfinish { +# Remove all start and finish foreach (@order) { my ($name,$url,$ext)=split(/\:/,$resources[$_]); if ($url=~/http\&colon\:\/\//) { $ext='true'; } $resources[$_]=$name.':'.$url.':'.$ext.':normal:res'; } +# Garbage collection + my $stillchange=1; + while (($#order>1) && ($stillchange)) { + $stillchange=0; + for (my $i=0;$i<=$#order;$i++) { + my ($name,$url,$ext)=split(/\:/,$resources[$order[$i]]); + unless ($url) { +# Take out empty resource + for (my $j=$i+1;$j<=$#order;$j++) { + $order[$j-1]=$order[$j]; + } + $#order--; + $stillchange=1; + last; + } + } + } +# Put in a start resource my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]); $resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res'; +# Make sure this has at least start and finish if ($#order==0) { $resources[$#resources+1]='::false'; $order[1]=$#resources; } - my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]); +# Make the last one a finish resource + ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]); $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res'; } @@ -680,7 +707,34 @@ sub smpedt { } &pastetarget($lastsel,@newsequence); &storemap(&Apache::lonnet::filelocation('',$url)); -# ------------------------------------------------ +# -------------------------------------------------------------------- Move up + } elsif ($ENV{'form.moveup'}) { + foreach (sort @targetselect) { + if ($_-1>0) { + my $movethis=$order[$_-1]; + $order[$_-1]=$order[$_-2]; + $order[$_-2]=$movethis; + } + } + &storemap(&Apache::lonnet::filelocation('',$url)); +# ------------------------------------------------------------------ Move down + } elsif ($ENV{'form.movedown'}) { + foreach (reverse sort @targetselect) { + if ($_-1<$#order) { + my $movethis=$order[$_-1]; + $order[$_-1]=$order[$_]; + $order[$_]=$movethis; + } + } + &storemap(&Apache::lonnet::filelocation('',$url)); +# --------------------------------------------------------------------- Rename + } elsif ($ENV{'form.renameres'}) { + my $residx=$Apache::lonratedt::order[$ENV{'form.renameidx'}-1]; + my ($name,@resrest)=split(/\:/,$Apache::lonratedt::resources[$residx]); + $name=$ENV{'form.renametitle'}; + $name=~s/\:/\&colon\;/g; + $Apache::lonratedt::resources[$residx]=$name.':'.join(':',@resrest); + &storemap(&Apache::lonnet::filelocation('',$url)); } # ------------------------------------------------------------ Assemble windows @@ -701,6 +755,7 @@ sub smpedt { } split(/\&/,$importdetail)); $idx=0; + $targetdetail=''; my $targetwindow= ''. join("\n",map { @@ -710,6 +765,7 @@ sub smpedt { $targetdetail.='&'.&Apache::lonnet::escape($name).'='. &Apache::lonnet::escape($url); $idx++; + $name=~s/\:/\:/g; ''; } @order); @@ -741,18 +797,40 @@ sub smpedt { [document.forms.simpleedit.importsel.selectedIndex]); } + function renametarget() { + var selidx=document.forms.simpleedit.target.selectedIndex; + var entry=(document.forms.simpleedit.targetdetail.value.split('&')) + [selidx]; + var oldname=unescape((entry.split('='))[0]); + var nameparts=oldname.split(':'); + oldname=unescape(nameparts.join(':')); + nameparts=oldname.split('"'); + oldname=unescape(nameparts.join('"')); + nameparts=oldname.split('''); + oldname=unescape(nameparts.join("'")); + newtitle=prompt('New Title',oldname); + if (newtitle) { + document.forms.simpleedit.renameres.value=1; + document.forms.simpleedit.renameidx.value=selidx; + document.forms.simpleedit.renametitle.value=newtitle; + document.forms.simpleedit.submit(); + } + } + $bodytag $buttons $errtext -