--- loncom/xml/londefdef.pm 2024/09/04 18:31:28 1.456.2.6.2.5 +++ loncom/xml/londefdef.pm 2020/09/10 00:28:48 1.465 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.456.2.6.2.5 2024/09/04 18:31:28 raeburn Exp $ +# $Id: londefdef.pm,v 1.465 2020/09/10 00:28:48 raeburn Exp $ # # # Copyright Michigan State University Board of Trustees @@ -50,7 +50,7 @@ use Apache::lonlocal; use Apache::loncommon(); use Apache::Constants qw(:common); use File::Basename; -use LONCAPA; +use LONCAPA(); # use Data::Dumper; BEGIN { @@ -99,18 +99,6 @@ sub start_m { # 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 [_1].','<m>')); - } elsif (($env{'browser.type'} eq 'safari') && ($env{'form.editxmltext'}) && - (($env{'form.problemmode'} eq 'view') || ($env{'form.problemmode'} eq 'discard'))) { - my $delimiter; - if ($inside =~ /\$$/) { - $delimiter = '$'; - } elsif ($inside =~ /\\([)\]])$/) { - $delimiter = $1; - } - if ($delimiter) { - &Apache::lonxml::warning(&mt('Insert a space between [_1] and [_2].', - $delimiter,'</m>')); - } } my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); if ($eval eq 'on') { @@ -367,7 +355,7 @@ sub start_title { $Apache::londefdef::title = &Apache::lonxml::get_all_text('/title',$parser,$style); } elsif ($target eq 'tex') { - $currentstring .= '\keephidden{Title of the document: '; + $currentstring .= '\keephidden{Title of the document: ' } if ($target eq 'meta') { $currentstring=''; @@ -612,9 +600,6 @@ sub start_body { if ($env{'request.use_absolute'}) { $args->{'use_absolute'} = $env{'request.use_absolute'}; } - if ($env{'form.only_body'}) { - $args->{'only_body'} = 1; - } } $currentstring = &Apache::loncommon::start_page($Apache::londefdef::title, @@ -649,10 +634,9 @@ sub start_body { sub edit_controls { my ($nochgview) = @_; - my ($is_course_doc,$is_supp,$supp_path,$supp_title); - my $result = ' + my $result .= ' <form method="post" action=""> -<div class="LC_edit_problem_header">'."\n"; +<div class="LC_edit_problem_header">'; unless ($nochgview) { $result .= ' <div class="LC_edit_problem_header_row1">'. @@ -661,20 +645,12 @@ sub edit_controls { </div>'; } $result .= ' -<div> -<input type="hidden" name="editmode" value="" /> -<input type="button" name="editordefault" accesskey="e" value="'.&mt('Edit'). -'" onclick="seteditmode(this.form,'."'edit'".');" />'."\n"; +<div><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" />'; if ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9) { my $uri = $env{'request.uri'}; - if ($uri =~ /\.(xml|html|htm|xhtml|xhtm)$/) { - my %editors = &Apache::loncommon::permitted_editors($uri); - if ($editors{'daxe'}) { - my $daxeurl = '/daxepage'.$uri; - $result .= '<input type="button" name="editordaxe" value="'.&mt('Edit with Daxe'). - '" onclick="seteditmode(this.form,'."'daxe'".');" />'."\n"; - } - } + my $daxeurl = '/daxepage'.$uri; + $result .= '<input type="button" value="'.&mt('Edit with Daxe').'" '. + 'onclick="window.open(\''.$daxeurl.'\',\'_blank\');" />'; } if (($env{'request.course.id'}) && ($env{'form.forceedit'})) { my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); @@ -683,19 +659,11 @@ sub edit_controls { if ($env{'request.course.id'}) { $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - if ($url =~ m{^\Q/uploaded/$cdom/$cnum/\E(supplemental|docs)/}) { - if ($1 eq 'supplemental') { - $is_supp = 1; - } - $is_course_doc = 1; - } if ($env{'request.filename'} =~ m{/userfiles/supplemental/default|\d+/}) { - my $fn=&Apache::lonnet::declutter($env{'request.filename'}); - if (&Apache::lonnet::is_course_upload($fn,$cnum,$cdom)) { + if (&Apache::lonnet::is_course_upload($env{'request.filename'}, + $cnum,$cdom)) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['folderpath','title']); - $supp_path = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.folderpath'})); - $supp_title = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.title'})); } } } @@ -723,9 +691,7 @@ sub edit_controls { </div> </form> '; - my $setedit_js = &Apache::lonxml::seteditor_javascript($is_course_doc,$is_supp, - $supp_path,$supp_title); - return $setedit_js."\n".$result; + return $result; } sub end_body { @@ -1339,6 +1305,10 @@ sub start_p { $currentstring .= &end_p(); # close off prior para if in progress. my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (!defined $align) { + # check inline CSS + $align = &get_css_property('text-align',$parstack,$safeeval); + } if ($align eq 'center') { $currentstring .='\begin{center}\par '; $closing_string = '\end{center}'; @@ -1346,13 +1316,13 @@ sub start_p { $currentstring = ¢er_correction().$currentstring; } } elsif ($align eq 'right') { - $currentstring.="\n".'{\flushright '; + $currentstring.="\n".'\begin{flushright}'; # $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; - $closing_string= "}\n"; + $closing_string= '\end{flushright}'."\n"; } elsif ($align eq 'left') { - $currentstring.= "\n".'{\flushleft '; + $currentstring.= "\n".'\begin{flushleft}'; # $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{'; - $closing_string = "}\n"; + $closing_string = '\end{flushleft}'."\n"; } else { $currentstring.='\par '; if (&is_inside_of($tagstack, 'table')) { @@ -2906,8 +2876,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').'<br />'; + &Apache::edit::browse_or_search('src',undef,'alt',$only,undef,1). + '<br />'; $currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'<br />'; $currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5); $currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />'; @@ -2929,17 +2899,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 .= '<img src="'.$src.'" alt="'.$alt.'" '; if ($width) { $currentstring.=' width="'.$width.'" '; } if ($height) { $currentstring.=' height="'.$height.'" '; } - $currentstring .= ' />'; + $currentstring .= ' id="previewimg_'.$element.'" />'; } else { - $currentstring.=&mt("No image source specified"); + $text = &mt("No image source specified"); } + $currentstring .= ' <span id="showimg_'.$element.'">'.$text.'</span>'; } elsif ($target eq 'modified') { my ($osrc,$owidth,$oheight)= ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); @@ -3295,12 +3267,12 @@ sub end_externallink { return $currentstring; } -#-- <blankspace height=""> +#-- <blankspace heigth=""> sub start_blankspace { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = &end_p(); # closes off any unclosed <p> if ($target eq 'tex') { - my $howmuch = &Apache::lonxml::get_param('height',$parstack,$safeeval,undef,1); + my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1); $currentstring .= '\vskip '.$howmuch.' '; } return $currentstring; @@ -4085,13 +4057,33 @@ sub end_spacer { return $currentstring; } +my @span_end_stack; # for span tex target + #-- <span> tag (end tag required) sub start_span { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { $currentstring = $token->[4]; - } + } elsif ($target eq 'tex') { + my $endstring = ''; + my $family = &get_css_property('font-family',$parstack,$safeeval); + if ($family eq 'monospace') { + $currentstring .= '\texttt{'; + $endstring .= '}'; + } + my $weight = &get_css_property('font-weight',$parstack,$safeeval); + if ($weight eq 'bold') { + $currentstring .= '\textbf{'; + $endstring .= '}'; + } + my $style = &get_css_property('font-style',$parstack,$safeeval); + if ($style eq 'italic') { + $currentstring .= '\textit{'; + $endstring .= '}'; + } + push(@span_end_stack, $endstring); + } return $currentstring; } @@ -4100,7 +4092,10 @@ sub end_span { my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { $currentstring = $token->[2]; - } + } elsif ($target eq 'tex') { + my $endstring = pop @span_end_stack; + $currentstring .= $endstring; + } return $currentstring; } @@ -4306,10 +4301,10 @@ sub resize_image { $height_param=$TeXwidth/$old_width_param*$height_param; } } elsif ($TeXheight) { + $height_param = $TeXheight; if ($height_param) { $width_param = $TeXheight/$height_param*$width_param; } - $height_param = $TeXheight; } elsif ($width) { my $old_width_param=$width_param; $width_param = $width*$scaling; @@ -4698,6 +4693,23 @@ sub clean_docs_httpref { return $cleanhref; } +# This is retrieving a CSS property from the style attribute of the current element. +# It is not checking <style> elements or linked stylesheets yet. +sub get_css_property { + my ($property,$parstack,$safeeval) = @_; + my $style=&Apache::lonxml::get_param('style',$parstack,$safeeval,undef,1); + my @style_components=split(/;/,$style); + foreach my $css_pair (@style_components) { + my ($name, $value) = split(/:/, $css_pair); + $name =~ s/^\s+|\s+$//g; + $value =~ s/^\s+|\s+$//g; + if ($name eq $property) { + return $value; + } + } + return undef; +} + =pod =head1 NAME