File:
[LON-CAPA] /
loncom /
homework /
daxepage.pm
Revision
1.10:
download - view:
text,
annotated -
select for diffs
Sun Mar 3 00:08:37 2024 UTC (13 months ago) by
raeburn
Branches:
MAIN
CVS tags:
HEAD
- Starting state of standard LON-CAPA menus (collapsed or expanded) when
using Daxe Editor is one of domain's Authoring Space defaults which can
be overridden by Author (or coauthor).
- "Authoring Space Configuration" in User Preferences (also accessed via:
Settings > Editing Options when author or co-author role is selected)
provides user with override when Daxe editor is a permitted editor.
# The LearningOnline Network
# Page with Daxe on the left side and the preview on the right side
#
# $Id: daxepage.pm,v 1.10 2024/03/03 00:08:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
###
package Apache::daxepage;
use strict;
use Apache::loncommon();
use Apache::lonnet();
use Apache::lonhtmlcommon();
use Apache::lonxml();
use Apache::edit();
use Apache::lonmenu();
use Apache::lonlocal;
use Apache::Constants qw(:common);
use LONCAPA qw(:DEFAULT :match);
use HTML::Entities();
sub handler {
my $request = shift;
my $uri = $request->uri;
$uri =~ s{^/daxepage}{};
&Apache::loncommon::content_type($request,'text/html');
my ($is_not_assess,$is_assess);
if ($uri =~/\.(xml|html|htm|xhtml|xhtm)$/) {
$is_not_assess = 1;
} elsif ($uri =~ /$LONCAPA::assess_re/) {
unless ($uri =~ /\.form$/) {
$is_assess = 1;
}
}
unless ($is_not_assess || $is_assess) {
$request->status(406);
return OK;
}
my %editors = &Apache::loncommon::permitted_editors();
unless ($editors{'daxe'}) {
my $msg = '<p class="LC_warning">'.
&mt('Daxe editor is not enabled for this Authoring Space.').'</p>';
&do_redirect($request,$uri,$msg);
return OK;
}
if ($is_not_assess) {
delete($editors{'xml'});
$editors{'edit'} = 1;
}
my %lt = &Apache::lonlocal::texthash(
'noif' => 'No iframe support.',
'show' => 'Show content in pop-up window',
'oeds' => 'other editors',
'othe' => 'other editor',
'edit' => 'Edit',
);
my $name = $uri;
$name =~ s/^.*\/([^\/]+)$/$1/;
my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&save=/daxesave'.
'&file=/daxeopen'.$uri;
my $headjs = &Apache::loncommon::iframe_wrapper_headjs().
&toggle_LCmenus_js().
&Apache::edit::js_change_detection();
if ($is_assess) {
$headjs .= &Apache::lonxml::setmode_javascript();
} else {
$headjs .= &Apache::lonxml::seteditor_javascript();
}
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";
if ($editors{'edit'} || $editors{'xml'}) {
my $other = (($editors{'edit'} && $editors{'xml'})? $lt{'oeds'} : $lt{'othe'});
$editheader .= '<table class="LC_edit_problem_header_title"><tr><td>'.
$uri.
'</td><td align="right"><span class="LC_nobreak">'.$other.': ';
if ($is_not_assess) {
$editheader .= '<input type="hidden" name="editmode" value="" />'."\n".
'<input type="button" name="editordefault" value="'.$lt{'edit'}.
'" onclick="seteditmode(this.form,'."'edit'".');" />'."\n";
} else {
if ($editors{'edit'}) {
$editheader .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
'onclick="javascript:setmode(this.form,'."'edit'".')" />'."\n";
}
if ($editors{'xml'}) {
$editheader .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'."\n";
}
}
$editheader .= '</span></td></tr></table>';
} else {
$editheader .= '<table class="LC_edit_problem_header_title"><tr><td>'.
$uri.
'</td></tr></table>';
}
$editheader .= '</div></form>'."\n";
my $start_collapsed = &collapsible_std_LCmenus();
my $args = {
'collapsible_header' => $editheader,
'start_collapsed' => $start_collapsed,
};
my $startpage = &Apache::loncommon::start_page('Daxe: '.$name,$headjs,$args).
&Apache::lonmenu::constspaceform();
my $endpage = &Apache::loncommon::end_page();
# javascript will position the iframe if window was resized (or zoomed)
my $script = &Apache::loncommon::iframe_wrapper_resizejs();
my $dest = &HTML::Entities::encode($daxeurl,'&<>"');
my $noiframe = &Apache::loncommon::modal_link($dest,$lt{'show'},500,400);
$request->print(<<"ENDFRAME");
$startpage
$script
<div class="LC_iframecontainer" style="padding-right: 5px">
<iframe src="$dest">$lt{'noif'} $noiframe</iframe>
</div>
$endpage
ENDFRAME
return OK;
}
sub toggle_LCmenus_js {
my %lt = &Apache::lonlocal::texthash(
altc => 'menu state: collapsed',
alte => 'menu state: explanded',
ttlc => 'display standard menus',
ttle => 'hide standard menus',
);
return <<"ENDJS";
<script type="text/javascript">
//<![CDATA[
\$(document).ready (function () {
\$(".LC_collapse_trigger").on("click", function (e) {
var id = this.id;
var \$content = \$(this).next (".LC_menus_content");
var expanded = \$content.hasClass ("shown");
if (expanded) {
\$content.removeClass ("shown");
\$content.addClass ("hidden");
} else {
\$content.removeClass ("hidden");
\$content.addClass ("shown");
}
\$(this).find ("[aria-expanded]")
.attr ("aria-expanded", !expanded);
\$(this).find ("[aria-pressed]")
.attr ("aria-pressed", !expanded);
\$(this).find (".LC_collapsible_indicator").attr ({
"src":
(expanded)? "/res/adm/pages/collapsed.png" : "/res/adm/pages/expanded.png",
"alt":
(expanded)? "$lt{altc}" : "$lt{alte}",
"title":
(expanded)? "$lt{ttlc}" : "$lt{ttle}"
});
\$(window).trigger('resize');
\$(this).focus ();
});
\$("#LC_expandingContainer").attr ("aria-live", "off");
});
//]]>
</script>
ENDJS
}
sub do_redirect {
my ($request,$uri,$msg) = @_;
&Apache::lonhtmlcommon::clear_breadcrumbs();
$request->print(
&Apache::loncommon::start_page('Authoring Space',undef,
{'redirect' => [2,$uri]}).
'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n".
"$msg\n".
&Apache::loncommon::end_page());
return;
}
sub collapsible_std_LCmenus {
my $daxecollapse = $Apache::lonnet::env{'environment.daxecollapse'};
unless ($daxecollapse) {
my %domdefs = &Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'});
if ($domdefs{'daxecollapse'}) {
$daxecollapse = 'yes';
}
}
if ($daxecollapse eq 'yes') {
return 1;
}
return;
}
1;
__END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>