--- rat/lonratedt.pm	2002/09/02 15:27:08	1.35
+++ 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.35 2002/09/02 15:27:08 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/\:/\&colon;/g;
+               $name=~s/\:/\&colon;/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=       
        '<option value="0"> ------- Target Edit Map ------- </option>'.
      join("\n",map { 
@@ -710,6 +765,7 @@ sub smpedt {
        $targetdetail.='&'.&Apache::lonnet::escape($name).'='.
 	                  &Apache::lonnet::escape($url);
        $idx++;
+       $name=~s/\&colon;/\:/g;
        '<option value="'.$idx.'">'.$name.'</option>';
    } @order);
 
@@ -741,27 +797,49 @@ 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('&colon;');
+       oldname=unescape(nameparts.join(':'));
+       nameparts=oldname.split('&#34;');
+       oldname=unescape(nameparts.join('"'));
+       nameparts=oldname.split('&#39;');
+       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();
+       }
+   }
+
 </script>
 </head>                 
 $bodytag
 $buttons
 <font color=red>$errtext</font>
-<h1>$url</h1>
 <form name=simpleedit method=post>
 <input type=hidden name=forcesmp value=1>
+<input type=hidden name=renameres value=0>
+<input type=hidden name=renametitle value=''>
+<input type=hidden name=renameidx value=0>
 <table>
-    <tr><th width="40%">Import</th>
+    <tr><th width="40%">Temporary Assembly Workspace</th>
 <th>&nbsp;</th>
-<th width="40%">Target</th></tr>
+<th width="40%">File: $url</th></tr>
 <tr><td bgcolor="#FFFFCC">
-<input type=button onClick="javascript:groupsearch()" value="Group Search">
-<input type=button onClick="javascript:groupimport();" value="Group Import">
+<input type=button onClick="javascript:groupsearch()" value="Search">
+<input type=button onClick="javascript:groupimport();" value="Import">
 after selected
 <hr>
 <input type=text size=20 name=importmap>
 <input type=button 
 onClick="javascript:openbrowser('simpleedit','importmap','sequence,page','')"
-value="Browse"><input type=submit name=loadmap value="Load Map"><hr>
+value="Select Map"><input type=submit name=loadmap value="Load Map"><hr>
 <input type=submit name="discard" value="Discard Selected">
 <input type=submit name="clear" value="Clear All">
 <input type=button onClick="javascript:viewimport()" value="View">
@@ -769,10 +847,14 @@ value="Browse"><input type=submit name=l
     </td><td>&nbsp;</td><td bgcolor="#FFFFCC">
 
 <input type=button onClick=
-"javascript:impfortarget.value=1;groupsearch()" value="Group Search">
+"javascript:impfortarget.value=1;groupsearch()" value="Search">
 <input type=button onClick=
-"javascript:impfortarget.value=1;groupimport();" value="Group Import">
+"javascript:impfortarget.value=1;groupimport();" value="Import">
 after selected
+<hr>
+<input type=submit name="moveup" value="Move Up">
+<input type=submit name="movedown" value="Move Down">
+<input type=button onClick="javascript:renametarget()" value="Rename">
 <hr>$targetmsg
 <input type=submit name="revert" value="Revert to Last Saved">
 <input type=submit name="save" value="Save">
@@ -831,6 +913,9 @@ sub viewmap {
     }
     my $idx=0;
     $r->print('<h1>'.$url.'</h1>');
+    if ($adv) {
+	$r->print('<p><b><font color="red">Map contents are not shown in order.</font></b></p><br />');
+    }
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
 	if (defined($_)) {
             $idx++;