--- loncom/homework/daxepage.pm	2024/03/31 01:50:18	1.14
+++ loncom/homework/daxepage.pm	2024/04/19 03:48:23	1.17
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Page with Daxe on the left side and the preview on the right side
 #
-# $Id: daxepage.pm,v 1.14 2024/03/31 01:50:18 raeburn Exp $
+# $Id: daxepage.pm,v 1.17 2024/04/19 03:48:23 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -46,9 +46,25 @@ sub handler {
     my $uri = $request->uri;
     $uri =~ s{^/daxepage}{};
     &Apache::loncommon::content_type($request,'text/html');
-    my ($is_not_assess,$is_assess);
+    my ($is_not_assess,$is_assess,$is_course_doc,$is_supp,$supp_path,$supp_title);
     if ($uri =~/\.(xml|html|htm|xhtml|xhtm)$/) {
         $is_not_assess = 1;
+        if ($Apache::lonnet::env{'request.course.id'}) {
+            my $cid = $Apache::lonnet::env{'request.course.id'};
+            my $cdom = $Apache::lonnet::env{'course.'.$cid.'.domain'};
+            my $cnum = $Apache::lonnet::env{'course.'.$cid.'.num'};
+            if ($uri =~ m{^/uploaded/\Q$cdom/$cnum\E/(docs|supplemental)/}) {
+                if ($1 eq 'supplemental') {
+                    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                                            ['folderpath','title']);
+                    $is_supp = 1;
+                    $supp_path = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.folderpath'}));
+                    $supp_title = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.title'}));
+                }
+                $is_course_doc = 1;
+                $Apache::lonnet::env{'form.forceedit'} = 1;
+            }
+        }
     } elsif ($uri =~ /$LONCAPA::assess_re/) {
         unless ($uri =~ /\.form$/) {
             $is_assess = 1;
@@ -58,7 +74,7 @@ sub handler {
         $request->status(406);
         return OK;
     }
-    my %editors = &Apache::loncommon::permitted_editors();
+    my %editors = &Apache::loncommon::permitted_editors($uri);
     unless ($editors{'daxe'}) {
         my $msg = '<p class="LC_warning">'.
                   &mt('Daxe editor is not enabled for this Authoring Space.').'</p>';
@@ -68,12 +84,16 @@ sub handler {
     if ($is_not_assess) {
         delete($editors{'xml'});
         $editors{'edit'} = 1;
+        $Apache::lonnet::env{'form.editmode'} = 'daxe';
+    } else {
+        $Apache::lonnet::env{'form.problemmode'} = 'daxe';
     }
+    &Apache::lonhtmlcommon::clear_breadcrumbs();
     my %lt = &Apache::lonlocal::texthash(
                                           'noif' => 'No iframe support.',
                                           'show' => 'Show content in pop-up window',
                                           'save' => 'Save',
-                                          'text' => 'Text Editor', 
+                                          'text' => 'Text Editor',
                                           'oeds' => 'other editors',
                                           'othe' => 'other editor',
                                           'edit' => 'Save and Edit',
@@ -96,15 +116,18 @@ sub handler {
         $headjs .= &Apache::lonxml::setmode_javascript();
         $clickexit = "javascript:setmode(this.form,'view');";
     } else {
-        $headjs .= &Apache::lonxml::seteditor_javascript();
+        $headjs .= &Apache::lonxml::seteditor_javascript($is_course_doc,$is_supp,
+                                                         $supp_path,$supp_title);
         $clickexit = "javascript:seteditmode(this.form,'view');";
     }
     $clicksave = "javascript:daxesave('exit');";
     $clickedit = "javascript:daxesave();";
     my $form_events = &Apache::edit::form_change_detection();
-    my $editheader = '<form '.$form_events.' method="post" name="daxeedit" action="'.$uri.'">'.
-                     '<input type="hidden" name="problemmode" value="daxe" />'."\n".
-                     '<div class="LC_edit_problem_editxml_header">'."\n";
+    my $editheader = '<form '.$form_events.' method="post" name="daxeedit" action="'.$uri.'">';
+    if ($is_assess) {
+        $editheader .= '<input type="hidden" name="problemmode" value="daxe" />'."\n";
+    }
+    $editheader .= '<div class="LC_edit_problem_editxml_header">'."\n";
     my $saveeditbutton = '<input type="button" name="submitmode" accesskey="s" value="'.$lt{'edit'}.
                      '" onclick="'.$clickedit.'" />'."\n";
     my $exitbutton = '<input type="button" name="submitmode" accesskey="d" value="'.$lt{'disc'}.
@@ -119,9 +142,9 @@ sub handler {
         $editheader .= '&nbsp;&nbsp;|&nbsp;&nbsp;<span class="LC_nobreak">'.$other.':</span> '.
                        '<span class="LC_nobreak">';
         if ($is_not_assess) {
-            $editheader .= '<input type="hidden" name="editmode" value="" />'."\n".
+            $editheader .= '<input type="hidden" name="editmode" value="daxe" />'."\n".
                            '<input type="button" name="editordefault" value="'.$lt{'text'}.
-                           '" onclick="seteditmode(this.form,'."'edit'".');" />'."\n";
+                           '" onclick="javascript:seteditmode(this.form,'."'edit'".');" />'."\n";
         } else {
             if ($editors{'edit'}) {
                 $editheader .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.