--- loncom/xml/lonxml.pm	2012/05/13 23:51:59	1.531.2.2
+++ loncom/xml/lonxml.pm	2012/12/06 13:54:47	1.536
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.531.2.2 2012/05/13 23:51:59 raeburn Exp $
+# $Id: lonxml.pm,v 1.536 2012/12/06 13:54:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -228,100 +228,6 @@ sub xmlend {
     return $discussion;
 }
 
-sub tokeninputfield {
-    my $defhost=$Apache::lonnet::perlvar{'lonHostID'};
-    $defhost=~tr/a-z/A-Z/;
-    return (<<ENDINPUTFIELD)
-<script type="text/javascript">
-    function updatetoken() {
-        var comp=new Array;
-        var barcode=unescape(document.tokeninput.barcode.value);
-        comp=barcode.split('*');
-        if (typeof(comp[0])!="undefined") {
-            document.tokeninput.codeone.value=comp[0];
-        }
-        if (typeof(comp[1])!="undefined") {
-            document.tokeninput.codetwo.value=comp[1];
-        }
-        if (typeof(comp[2])!="undefined") {
-            comp[2]=comp[2].toUpperCase();
-            document.tokeninput.codethree.value=comp[2];
-        }
-        document.tokeninput.barcode.value='';
-    }
-</script>
-<form method="post" name="tokeninput" action="">
-<table border="2" bgcolor="#FFFFBB">
-<tr><th>DocID Checkin</th></tr>
-<tr><td>
-<table>
-<tr>
-<td>Scan in Barcode</td>
-<td><input type="text" size="22" name="barcode"
-onchange="updatetoken()"/></td>
-</tr>
-<tr><td><i>or</i> Type in DocID</td>
-<td>
-<input type="text" size="5" name="codeone" />
-<b><font size="+2">*</font></b>
-<input type="text" size="5" name="codetwo" />
-<b><font size="+2">*</font></b>
-<input type="text" size="10" name="codethree" value="$defhost"
-onchange="this.value=this.value.toUpperCase()" />
-</td></tr>
-</table>
-</td></tr>
-<tr><td><input type="submit" value="Check in DocID" /></td></tr>
-</table>
-</form>
-ENDINPUTFIELD
-}
-
-sub maketoken {
-    my ($symb,$tuname,$tudom,$tcrsid)=@_;
-    unless ($symb) {
-        $symb=&Apache::lonnet::symbread();
-    }
-    unless ($tuname) {
-        $tuname=$env{'user.name'};
-        $tudom=$env{'user.domain'};
-        $tcrsid=$env{'request.course.id'};
-    }
-    return &Apache::lonnet::checkout($symb,$tuname,$tudom,$tcrsid);
-}
-
-sub printtokenheader {
-    my ($target,$token,$tsymb,$tcrsid,$tudom,$tuname)=@_;
-    unless ($token) { return ''; }
-
-    my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();
-    unless ($tsymb) {
-        $tsymb=$symb;
-    }
-    unless ($tuname) {
-        $tuname=$name;
-        $tudom=$domain;
-        $tcrsid=$courseid;
-    }
-
-    my $plainname=&Apache::loncommon::plainname($tuname,$tudom);
-
-    if ($target eq 'web') {
-        my %idhash=&Apache::lonnet::idrget($tudom,($tuname));
-        return
- '<img align="right" src="/cgi-bin/barcode.png?encode='.$token.'" />'.
-               &mt('Checked out for').' '.$plainname.
-               '<br />'.&mt('User').': '.$tuname.' at '.$tudom.
-               '<br />'.&mt('ID').': '.$idhash{$tuname}.
-               '<br />'.&mt('CourseID').': '.$tcrsid.
-               '<br />'.&mt('Course').': '.$env{'course.'.$tcrsid.'.description'}.
-               '<br />'.&mt('DocID').': '.$token.
-               '<br />'.&mt('Time').': '.&Apache::lonlocal::locallocaltime().'<hr />';
-    } else {
-        return $token;
-    }
-}
-
 sub printalltags {
   my $temp;
   foreach $temp (sort keys %Apache::lonxml::alltags) {
@@ -743,9 +649,9 @@ sub setup_globals {
 
 sub init_safespace {
   my ($target,$safeeval,$safehole,$safeinit) = @_;
-  $safeeval->reval('use Math::Complex;');
   $safeeval->reval('use LaTeX::Table;');
   $safeeval->deny_only(':dangerous');
+  $safeeval->reval('use Math::Complex;');
   $safeeval->permit_only(":default");
   $safeeval->permit("entereval");
   $safeeval->permit(":base_math");
@@ -1596,6 +1502,7 @@ sub renderingoptions {
            {&Apache::lonlocal::texthash
                (''        => '',
                 'tth'     => 'tth (TeX to HTML)',
+                'MathJax' => 'MathJax',
   		'jsMath'  => 'jsMath',
                 'mimetex' => 'mimetex (Convert to Images)')}).
      '</span>';
@@ -1603,7 +1510,7 @@ sub renderingoptions {
 }
 
 sub inserteditinfo {
-      my ($filecontents,$filetype,$filename,$symb,$itemtitle) = @_;
+      my ($filecontents,$filetype,$filename,$symb,$itemtitle,$folderpath,$uri) = @_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
       my $xml_help = '';
       my $initialize='';
@@ -1629,10 +1536,11 @@ sub inserteditinfo {
 </script>
 FULLPAGE
       if ($filetype eq 'html') {
-          if ($symb) {
+          if ($symb || $folderpath) {
               $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";
               $initialize .= 
-                  &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle)."\n";
+                  &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle,
+                                                             undef,$folderpath,$uri)."\n";
           }
           $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
           $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
@@ -1759,8 +1667,10 @@ sub handler {
     my ($filetype,$breadcrumbtext);
     if ($file =~ /\.(sty|css|js|txt|tex)$/) {
 	$filetype=$1;
+        $env{'request.uri'}=$request->uri;
     } else {
 	$filetype='html';
+        $env{'request.uri'}=$request->uri;
     }
     if ($filetype eq 'sty') {
         $breadcrumbtext = 'Style File Editor';
@@ -1890,14 +1800,24 @@ ENDNOTFOUND
             my ($displayfile,$url,$symb,$itemtitle);
 	    $displayfile=$request->uri;
             if ($request->uri =~ m{^/uploaded/}) {
+                if ($env{'request.course.id'}) {
+                    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+                    my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+                    if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/\Esupplemental/}) {
+                        &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                                                ['folderpath','title']);
+                    }
+                }
                 ($symb,$itemtitle,$displayfile) = 
-                    &get_courseupload_hierarchy($request->uri);
+                    &get_courseupload_hierarchy($request->uri,
+                                                $env{'form.folderpath'},$env{'form.title'});
             } else {
 	        $displayfile=~s/^\/[^\/]*//;
             }
 
 	    my ($edit_info, $add_to_onload, $add_to_onresize)=
-		&inserteditinfo($filecontents,$filetype,$displayfile,$symb,$itemtitle);
+		&inserteditinfo($filecontents,$filetype,$displayfile,$symb,
+                                $itemtitle,$env{'form.folderpath'},$request->uri);
 
 	    my %options = 
 		('add_entries' =>
@@ -1948,20 +1868,34 @@ sub display_title {
 }
 
 sub get_courseupload_hierarchy {
-    my ($url) = @_;
+    my ($url,$folderpath,$title) = @_;
     my ($symb,$itemtitle,$displaypath);
     if ($env{'request.course.id'}) {
-        $symb = &Apache::lonnet::symbread();
-        my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb);
-        my $navmap=Apache::lonnavmaps::navmap->new;
-        if (ref($navmap)) {
-            my $res = $navmap->getBySymb($symb);
-            if (ref($res)) {
-                my @pathitems =
-                    &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
-                $itemtitle = $res->compTitle();
-                push(@pathitems,$itemtitle);
-                $displaypath = join(' &raquo; ',@pathitems);
+        if ($folderpath =~ /^supplemental/) {
+            my @folders = split(/\&/,$folderpath);
+            my @pathitems;
+            while (@folders) {
+                my $folder=shift(@folders);
+                my $foldername=shift(@folders);
+                push(@pathitems,&unescape($foldername));
+            }
+            if ($title) {
+                push(@pathitems,&unescape($title));
+            }
+            $displaypath = join(' &raquo; ',@pathitems);
+        } else {
+            $symb = &Apache::lonnet::symbread($url);
+            my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb);
+            my $navmap=Apache::lonnavmaps::navmap->new;
+            if (ref($navmap)) {
+                my $res = $navmap->getBySymb($symb);
+                if (ref($res)) {
+                    my @pathitems =
+                        &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
+                    $itemtitle = $res->compTitle();
+                    push(@pathitems,$itemtitle);
+                    $displaypath = join(' &raquo; ',@pathitems);
+                }
             }
         }
     }
@@ -2118,16 +2052,25 @@ sub add_messages {
 }
 
 sub get_param {
-    my ($param,$parstack,$safeeval,$context,$case_insensitive) = @_;
+    my ($param,$parstack,$safeeval,$context,$case_insensitive, $noelide) = @_;
+
     if ( ! $context ) { $context = -1; }
     my $args ='';
     if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
     if ( ! $Apache::lonxml::usestyle ) {
 	$args=$Apache::lonxml::style_values.$args;
     }
+
+
+    if ($noelide) {
+#	$args =~ s/\\'/'/g;
+	$args =~ s/'\$/'\\\$/g;
+    }
+
     if ( ! $args ) { return undef; }
     if ( $case_insensitive ) {
 	if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) {
+
 	    return &Apache::run::run("{$args;".'return $'.$param.'}',
                                      $safeeval); #'
 	} else {
@@ -2135,6 +2078,7 @@ sub get_param {
 	}
     } else {
 	if ( $args =~ /my .*\$\Q$param\E[,\)]/ ) {
+	    
 	    return &Apache::run::run("{$args;".'return $'.$param.'}',
                                      $safeeval); #'
 	} else {