--- loncom/xml/londefdef.pm 2013/06/04 22:20:20 1.444 +++ loncom/xml/londefdef.pm 2016/08/13 19:39:40 1.462 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.444 2013/06/04 22:20:20 raeburn Exp $ +# $Id: londefdef.pm,v 1.462 2016/08/13 19:39:40 raeburn Exp $ # # # Copyright Michigan State University Board of Trustees @@ -92,6 +92,14 @@ sub start_m { my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); if ($target eq 'web' || $target eq 'analyze') { &Apache::lonxml::debug("M is starting with:$inside:"); + if (!($inside =~ /^\s*\$.*\$\s*$/ || $inside =~ /^\s*\\[([].*\\[)\]]\s*$/)) { + # Non-math LaTeX will not be rendered correctly with MathJax + # and it should be avoided anyway. + # On top of that, MathJax will render math without $, but + # it will fail with tth. This is worth a warning. + # (even though some people might just use latex for printing) + &Apache::lonxml::warning(&mt("Missing \$ in <m>.")); + } my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); if ($eval eq 'on') { $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); @@ -585,26 +593,34 @@ sub start_body { # FIXME Where are we? } + my $args = {'add_entries' => $token->[2], + 'force_register' => 1,}; + if ($target eq 'web') { + $args->{'print_suppress'} = 1; + if ($env{'request.use_absolute'}) { + $args->{'use_absolute'} = $env{'request.use_absolute'}; + } + } $currentstring = &Apache::loncommon::start_page($Apache::londefdef::title, $Apache::londefdef::head - .$extra_head, - {'add_entries' => $token->[2], -# 'no_title' => 1, - 'force_register' => 1}); - + .$extra_head,$args); my $header = ''; if ($env{'request.state'} ne 'published' && $env{'request.state'} ne 'construct') { $header=&Apache::lonmenu::constspaceform(); } if ($env{'request.state'} ne 'published') { - $header.=&edit_controls(); + unless ($env{'form.inhibitmenu'} eq 'yes') { + $header.=&edit_controls(); + } } if ($env{'request.state'} eq 'construct') { - $currentstring.=&Apache::loncommon::head_subbox( - &Apache::loncommon::CSTR_pageheader() - .$header); + unless ($env{'form.inhibitmenu'} eq 'yes') { + $currentstring.=&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader() + .$header); + } } elsif ($env{'request.state'} eq 'edit') { $currentstring.=&Apache::loncommon::head_subbox($header); } @@ -630,6 +646,12 @@ sub edit_controls { } $result .= '
'; + if ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9) { + my $uri = $env{'request.uri'}; + my $daxeurl = '/daxepage'.$uri; + $result .= ''; + } if (($env{'request.course.id'}) && ($env{'form.forceedit'})) { my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); if ($url =~ /\.html?$/i) { @@ -1724,6 +1746,15 @@ sub start_a { if (!&Apache::lonnet::allowed('bre',$linkurl)) { if (&Apache::lonnet::is_on_map($url)) { &Apache::lonxml::extlink($linkurl); + } elsif ($env{'request.course.id'}) { + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + if ($linkurl =~ m{^([^/]|/uploaded/$cdom/$cnum/(docs|supplemental)/)}) { + my $cleanhref = &clean_docs_httpref($linkurl,$url,$cdom,$cnum); + if ($cleanhref) { + &Apache::lonxml::extlink($cleanhref); + } + } } } } @@ -2046,8 +2077,8 @@ sub end_dt { sub item_cleanup { my $item=&Apache::lonxml::endredirection(); - $item=~s/\\begin{center}//g; - $item=~s/\\end{center}//g; + $item=~s/\\begin\{center}//g; + $item=~s/\\end\{center}//g; return $item; } @@ -2736,7 +2767,9 @@ sub start_img { my $inside = &Apache::lonxml::get_all_text("/img",$parser,$style); return ''; } - &Apache::lonxml::extlink($src); + unless ($src =~ m{^data\:image/gif;base64,}) { + &Apache::lonxml::extlink($src); + } my $currentstring = ''; my $scaling = .3; @@ -2746,8 +2779,10 @@ sub start_img { my $enc = ('yes' eq lc(&Apache::lonxml::get_param('encrypturl',$parstack, $safeeval))); - $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}, - $enc); + unless ($src =~ m{^data\:image/gif;base64,}) { + $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}, + $enc); + } # and render unto TeX that which is LaTeX } elsif ($target eq 'tex') { @@ -2790,7 +2825,7 @@ sub start_img { # &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); - #if original bmp/gif/jpg/png file exist do following: + #if original bmp/gif/jpg/png/svg file exist do following: my $origsrc=$src; my ($path,$file) = &get_eps_image($src); # &Apache::lonnet::logthis("Image source: $src result: $path $file"); @@ -2837,8 +2872,8 @@ sub start_img { my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures')); $currentstring .=&Apache::edit::tag_start($target,$token); $currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70). - &Apache::edit::browse('src',undef,'alt',$only).' '. - &Apache::edit::search('src',undef,'alt').'
'; + &Apache::edit::browse_or_search('src',undef,'alt',$only,undef,1). + '
'; $currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'
'; $currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5); $currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'
'; @@ -2860,17 +2895,19 @@ sub start_img { my $src= &Apache::lonxml::get_param('src',$parstack,$safeeval); my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval); my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval); - + my $element = &Apache::edit::get_element('src'); + my $text; if ($token->[2]{'src'}=~/\$/) { - $currentstring.=&mt('Variable image source'); + $text = &mt('Variable image source'); } elsif ($token->[2]{'src'}=~/\S/) { $currentstring .= ''.$alt.''; } else { - $currentstring.=&mt("No image source specified"); + $text = &mt("No image source specified"); } + $currentstring .= ' '.$text.''; } elsif ($target eq 'modified') { my ($osrc,$owidth,$oheight)= ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); @@ -3429,7 +3466,7 @@ sub start_caption { my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { $currentstring = $token->[4]; - } + } return $currentstring; } @@ -3437,7 +3474,7 @@ sub end_caption { my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { - $currentstring = $token->[2]; + $currentstring = $token->[2]; } return $currentstring; } @@ -3570,8 +3607,68 @@ sub start_iframe { my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { - $currentstring = $token->[4]; - } + my ($src,$url,$query); + if ($token->[2]->{'src'}) { + $src = $token->[2]->{'src'}; + } elsif ($token->[2]->{'SRC'}) { + $src = $token->[2]->{'SRC'}; + } + if ($src) { + ($url,$query) = ($src =~ /^([^?]+)\??([^?]*)$/); + if ($query =~ /inhibitmenu=yes/) { + $currentstring = $token->[4]; + } else { + my $inhibit; + if ($url =~ m{^[^/.].*\.x?html?$}) { + $inhibit = 1; + } elsif ($url =~ m{^/(uploaded|res)/.*\.x?html?$}) { + $inhibit = 1; + } + if ($inhibit) { + $currentstring = '