--- loncom/xml/lonxml.pm 2023/12/29 23:40:37 1.531.2.24.2.1 +++ loncom/xml/lonxml.pm 2024/09/25 00:42:37 1.531.2.24.2.6 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.531.2.24.2.1 2023/12/29 23:40:37 raeburn Exp $ +# $Id: lonxml.pm,v 1.531.2.24.2.6 2024/09/25 00:42:37 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1708,8 +1708,9 @@ FULLPAGE my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit', 'vi' => 'Save and View', 'dv' => 'Discard Edits and View', - 'un' => 'undo', - 'ed' => 'Edit'); + 'un' => 'Undo', + 'ed' => 'Edit', + 'ew' => 'Edit with Daxe'); my $spelllink = &Apache::lonhtmlcommon::spelllink('xmledit','filecont'); my $textarea_events = &Apache::edit::element_change_detection(); my $form_events = &Apache::edit::form_change_detection(); @@ -1717,7 +1718,7 @@ FULLPAGE if ($filetype eq 'html') { $htmlerror=&verify_html($filecontents); if ($htmlerror) { - $htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; + $htmlerror=(' 'x3).' <span class="LC_error">'.$htmlerror.'</span>'; } if (&Apache::lonhtmlcommon::htmlareabrowser()) { unless ($textareaclass) { @@ -1725,7 +1726,7 @@ FULLPAGE } } } - my ($undo,%onclick); + my ($undo,$daxebutton,%onclick); foreach my $item ('discard','undo','daxe') { $onclick{$item} = 'onclick="still_ask=true;setmode(this.form,'."'$item'".')"'; } @@ -1733,10 +1734,17 @@ FULLPAGE $onclick{$item} = 'onclick="is_submit=true;setmode(this.form,'."'$item'".')"'; } unless ($uri =~ m{^/uploaded/}) { - $undo = '<input type="button" name="Undo" accesskey="u" value="'.$lt{'un'}.'" '. + $undo = '<input type="button" name="undo" accesskey="u" value="'.$lt{'un'}.'" '. $onclick{'undo'}.' />'."\n"; } $initialize .= &setmode_javascript(); + if ($filetype eq 'html') { + my %editors = &Apache::loncommon::permitted_editors($uri); + if ($editors{'daxe'}) { + $daxebutton = '<input type="button" name="editwithdaxe" accesskey="w" value="'.$lt{'ew'}.'" '. + $onclick{'daxe'}.' />'."\n"; + } + } my $editfooter=(<<ENDFOOTER); $initialize <a name="editsection" /> @@ -1755,7 +1763,7 @@ $initialize </div> <div> <input type="button" name="discardview" accesskey="d" value="$lt{'dv'}" $onclick{'discard'} /> - $undo $htmlerror $deps_button $dragmath_button + $undo $deps_button $daxebutton $dragmath_button $htmlerror </div> </div> <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br />$spelllink @@ -1773,10 +1781,15 @@ sub setmode_javascript { <script type="text/javascript"> // <![CDATA[ function setmode(form,probmode) { - var initial = form.problemmode.value; - form.problemmode.value = probmode; - form.submit(); - form.problemmode.value = initial; + if (probmode == 'daxe') { + var url = new URL(document.location.href); + window.location = url.protocol+'//'+url.hostname+'/daxepage'+url.pathname; + } else { + var initial = form.problemmode.value; + form.problemmode.value = probmode; + form.submit(); + form.problemmode.value = initial; + } } // ]]> </script> @@ -1784,12 +1797,69 @@ ENDSCRIPT } sub seteditor_javascript { + my ($is_course_doc,$is_supp,$supp_path,$supp_title) = @_; + my $symb; + if ($is_course_doc) { + if (!$is_supp) { + ($symb) = &Apache::lonnet::whichuser(); + if ($symb) { + $symb = &escape($symb); + } + } + } return <<"ENDSCRIPT"; <script type="text/javascript"> // <![CDATA[ function seteditmode(form,editor) { - form.editmode.value = editor; - form.submit(); + var querystr = ''; + var supplemental = '$is_supp'; + var coursedoc = '$is_course_doc'; + if (coursedoc) { + if (supplemental) { + var supppath = '$supp_path'; + var supptitle = '$supp_title'; + if (supppath) { + querystr = 'folderpath='+supppath; + } + if (supptitle) { + if (querystr) { + querystr += '&'; + } + querystr += 'title='+supptitle; + } + } + } + if (editor == 'daxe') { + var url = new URL(document.location.href); + var newloc = url.protocol+'//'+url.hostname+'/daxepage'+url.pathname; + if (querystr) { + if (/\\?/.test(url.pathname)) { + newloc += '&'; + } else { + newloc += '?'; + } + newloc += querystr; + } + window.location = newloc; + } else { + if (coursedoc) { + var curraction = form.action; + var idx = curraction.indexOf('?'); + if (idx !== -1) { + form.action = curraction.substring(0,idx); + } + form.action += '?forceedit=1®ister=1'; + if (querystr) { + form.action += '&'+querystr; + } + } + if (editor == 'edit') { + form.editmode.value = editor; + } else { + form.editmode.value = ''; + } + form.submit(); + } } // ]]> </script> @@ -2022,9 +2092,15 @@ ENDNOTFOUND $displayfile=$request->uri; if ($request->uri =~ m{^/uploaded/}) { if ($env{'request.course.id'}) { - if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/supplemental/\E}) { - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['folderpath','title']); + if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/\E(docs|supplemental)/}) { + if ($1 eq 'supplemental') { + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['folderpath','title']); + } + if (($env{'request.state'} eq 'edit') && ($env{'form.editmode'} eq 'edit') && + ($filetype eq 'html')) { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + } } elsif ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) { my $filename = $1; if ($1 eq 'loncapa.html') {