# The LearningOnline Network # Page with Daxe on the left side and the preview on the right side # # $Id: daxepage.pm,v 1.11 2024/03/03 18:16:27 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 = '

'. &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', 'oeds' => 'other editors', 'othe' => 'other editor', 'edit' => 'Edit', 'exit' => 'Exit Daxe', ); 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(); my $clickexit; 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')"; } my $form_events = &Apache::edit::form_change_detection(); my $editheader = '
'. ''."\n". '
'."\n"; my $exitbutton = ''."\n"; if ($editors{'edit'} || $editors{'xml'}) { my $other = (($editors{'edit'} && $editors{'xml'})? $lt{'oeds'} : $lt{'othe'}); $editheader .= '
'. $uri. ''.$other.': '; if ($is_not_assess) { $editheader .= ''."\n". ''."\n"; } else { if ($editors{'edit'}) { $editheader .= ''."\n"; } if ($editors{'xml'}) { $editheader .= ''."\n"; } } $editheader .= '  |  '.$exitbutton.'
'; } else { $editheader .= '
'. $uri. ''. $exitbutton.'
'; } $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 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__