--- loncom/homework/daxepage.pm 2016/02/14 16:07:13 1.4
+++ loncom/homework/daxepage.pm 2024/03/23 23:11:52 1.12
@@ -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.4 2016/02/14 16:07:13 raeburn Exp $
+# $Id: daxepage.pm,v 1.12 2024/03/23 23:11:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,39 +28,256 @@
###
package Apache::daxepage;
+use strict;
-use Apache::Constants;
+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//;
+ $uri =~ s{^/daxepage}{};
&Apache::loncommon::content_type($request,'text/html');
- if ($uri !~ /\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) {
+ 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 $result = '';
- $result .= "\n";
- $result .= "\n";
- $result .= "
\n";
+ my %editors = &Apache::loncommon::permitted_editors();
+ unless ($editors{'daxe'}) {
+ my $msg = ''.
+ &mt('Daxe editor is not enabled for this Authoring Space.').'
';
+ &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',
+ 'save' => 'Save',
+ 'oeds' => 'other editors',
+ 'othe' => 'other editor',
+ 'edit' => 'Save and Edit',
+ 'disc' => 'Discard and View',
+ 'save' => 'Save and View',
+ );
my $name = $uri;
$name =~ s/^.*\/([^\/]+)$/$1/;
- $result .= " LON-CAPA Daxe: $name\n";
- $result .= " \n";
- $result .= "\n";
- $result .= "\n";
- my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&file=/daxeopen'.$uri.
- '&save=/daxesave';
- $result .= ' '."\n";
- $result .= "\n";
- $result .= "\n";
- $request->print($result);
+ my $filearg = '/daxeopen'.$uri;
+ my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&save=/daxesave'.
+ '&file='.$filearg;
+ my $headjs = &Apache::loncommon::iframe_wrapper_headjs().
+ &listener_js($filearg).
+ &toggle_LCmenus_js().&saveandview_js().
+ &Apache::edit::js_change_detection();
+
+ my ($clickexit,$clicksave,$clickedit);
+ if ($is_assess) {
+ $headjs .= &Apache::lonxml::setmode_javascript();
+ $clickexit = "javascript:setmode(this.form,'view');";
+ } else {
+ $headjs .= &Apache::lonxml::seteditor_javascript();
+ $clickexit = "javascript:seteditmode(this.form,'view');";
+ }
+ $clicksave = "javascript:daxesave('exit');";
+ $clickedit = "javascript:daxesave();";
+ my $form_events = &Apache::edit::form_change_detection();
+ my $editheader = ''."\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
+
+
+
+$endpage
+ENDFRAME
return OK;
}
+sub listener_js {
+ my ($filearg) = @_;
+ return <<"ENDJS";
+
+ENDJS
+
+}
+
+sub saveandview_js {
+ return <<"ENDJS";
+
+
+ENDJS
+}
+
+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";
+
+ENDJS
+
+}
+
+sub do_redirect {
+ my ($request,$uri,$msg) = @_;
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ $request->print(
+ &Apache::loncommon::start_page('Authoring Space',undef,
+ {'redirect' => [2,$uri]}).
+
+ ''."\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__