--- loncom/xml/londefdef.pm	2009/03/31 10:12:45	1.399
+++ loncom/xml/londefdef.pm	2010/08/16 16:14:32	1.415.4.1
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.399 2009/03/31 10:12:45 foxr Exp $
+# $Id: londefdef.pm,v 1.415.4.1 2010/08/16 16:14:32 raeburn Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -538,36 +538,75 @@ sub start_body {
 	
 	my $extra_head = &generate_css_links();
 
+    # Breadcrumbs
+    &Apache::lonhtmlcommon::clear_breadcrumbs();
+    if ($env{'request.state'} eq 'construct') {
+        &Apache::lonhtmlcommon::add_breadcrumb({
+            'text'  => 'Construction Space',
+            'href'  => &Apache::loncommon::authorspace(),
+        });
+        &Apache::lonhtmlcommon::add_breadcrumb({
+            'text'  => 'HTML Editor',
+            'href'  => '',
+        });
+        # breadcrumbs (and tools) will be created 
+        # in start_page->bodytag->innerregister
+    } else {
+        # FIXME Where are we?
+    }
+
 	$currentstring = 
 	    &Apache::loncommon::start_page($Apache::londefdef::title,
 					   $Apache::londefdef::head
 					      .$extra_head,
 					   {'add_entries'    => $token->[2],
-					    'no_title'       => 1,
+#					    'no_title'       => 1,
 					    'force_register' => 1});
 
-	if ($env{'request.state'} ne 'published') {
-	    $currentstring.=&Apache::lonmenu::constspaceform();
-	    $currentstring.=&Apache::londefdef::edit_controls();
-	}
-	$currentstring.=&Apache::lonxml::message_location();
+        my $header = '';
+        if ($env{'request.state'} ne 'published' &&
+            $env{'request.state'} ne 'construct') {
+            $header=&Apache::lonmenu::constspaceform();
+        }
+        if ($env{'request.state'} ne 'published') {
+            $header.=&Apache::londefdef::edit_controls();
+        }
+        if ($env{'request.state'} eq 'construct') {
+            $currentstring.=&Apache::loncommon::head_subbox(
+                                &Apache::loncommon::CSTR_pageheader()
+                               .$header);
+        } elsif ($env{'request.state'} eq 'edit') {
+            $currentstring.=&Apache::loncommon::head_subbox($header);
+        }
+        $currentstring.=&Apache::lonxml::message_location();
     } elsif ($target eq 'tex') {
-	$currentstring = '\begin{document}';  
-    } 
+        $currentstring = '';   #  '\begin{document}' is in header.
+    }
+
     return $currentstring;
 }
 
 sub edit_controls {
+    my ($nochgview) = @_;
     my $result .= '
 <form method="post">
-<div class="LC_edit_problem_header">
+<div class="LC_edit_problem_header">';
+    unless ($nochgview) {
+        $result .= '
 <div class="LC_edit_problem_header_row1">'.
 &Apache::lonxml::renderingoptions().'
 <input type="submit" name="changeproblemmode" value="'.&mt('Change View').'" />
+</div>';
+    }
+    $result .= '
+<div><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" />';
+    if (($env{'request.course.id'}) && ($env{'form.forceedit'})) {
+        $result .= ('&nbsp;' x 3).'<input type="button" value="'.&mt('Course View').'" onclick="javascript:location.href=currentURL" />';
+    }
+    $result .= '</div>
 </div>
-<div class="LC_edit_problem_header_edit_row"><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" /></div></div>
 </form>
-<br />';
+';
     return $result;
 }
 
@@ -1344,10 +1383,6 @@ sub start_font {
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
-	if ($face!~/symbol/i) {
-	    if (($env{'browser.fontenhance'} eq 'on') || 
-		($env{'browser.blackwhite'} eq 'on')) { return ''; }
-	}
 	$currentstring = $token->[4];     
     }  elsif ($target eq 'tex') {
 	my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
@@ -1612,6 +1647,26 @@ sub start_a {
 	my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval,
 					    undef,1);
 	$currentstring=&Apache::lonenc::encrypt_ref($token,{'href'=>$href});
+        if ($href =~ /\S/) {
+            if ($href !~ m{^https?://}) {
+                my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'});
+                my $linkurl;
+                if ($href =~ m{^/uploaded/}) {
+                    $linkurl = $href;
+                } elsif ($href =~ m{^[^/]}) {
+                    my $path = $url;
+                    $path  =~ s{[^/]*$}{};
+                    $linkurl = $path.$href;
+                }
+                if ($linkurl =~ m{^/uploaded/}) {
+                    if (!&Apache::lonnet::allowed('bre',$linkurl)) {
+                        if (&Apache::lonnet::is_on_map($url)) {
+                            &Apache::lonxml::extlink($linkurl);
+                        }
+                    }
+                }
+            }
+        }
     }
     return $currentstring;
 }
@@ -1993,26 +2048,36 @@ sub start_table {
 	my $width  = &Apache::lonxml::get_param('TeXwidth', $parstack, $safeeval, undef, 0);
 	my $theme  = &Apache::lonxml::get_param('TeXtheme', $parstack, $safeeval, undef, 0);
 	my $align  = &Apache::lonxml::get_param('align', $parstack, $safeeval, undef, 0);
+        my $cell_border = &Apache::lonxml::get_param('rules', $parstack, $safeeval, undef, 0);
 
 	# The only thing that needs any figuring out is the width.. and then only if it is
 	# a percent. If not it's assumed to be some valid TeX measurement unit e.g. 3.0cm
 	#
 
 	my $table = new Apache::lontable();
-	if ($border ne '') {
-	    $table->table_border(1);
+        if ((defined $border) && ($border > 0)) {
+        #    &Apache::lonnet::logthis("Turning on table borders: $border");
+            $table->table_border(1);
+            if ($cell_border ne 'none') {
+                $table->cell_border(1); # html specs that border turns on both...unless rules='none'.
+            }
+        }
+        # Only all or nothing for cell borders for now:
+
+        if ((defined $cell_border) && ($cell_border ne 'none')) {
+        #    &Apache::lonnet::logthis("Turning on cell borders: $cell_border");
 	    $table->cell_border(1);
 	}
-	if ($theme ne '') {
+        if (defined $theme) {
 	    $table->theme($theme);
 	}
-	if ($align ne '') {
+	if (defined $align) {
 	    $table->alignment($align);
 	}
 
 	# Missing width is most of page width
 
-	if ($width eq "") {
+	if (!(defined $width)) {
 	    $width = '70%';
 	}
 	
@@ -3220,21 +3285,28 @@ sub start_img {
 						   ['','bottom','middle','top','left','right'],$token,5);
 	$currentstring .=&Apache::edit::select_arg('TeXwrap:', 'TeXwrap',
 						   ['', 'none','parbox', 'parpic', 'wrapfigure'], $token, 2);
+        my $alt=    &Apache::lonxml::get_param('alt',$parstack,$safeeval);
+        my $enc=    &Apache::lonxml::get_param('encrypturl',$parstack,$safeeval);
+
 	$currentstring .=&Apache::edit::select_arg('Encrypt URL:','encrypturl',
 						   ['no','yes'], $token, 2);
+        if (($alt=~/\S/) && (lc($enc) eq 'yes')) {
+           $currentstring.='<br /><span class="LC_warning">'.&mt('Warning: the description "[_1]" will be available, even for encrypted URL',$alt).'</span><br />';
+        }
 	$currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
 	my $src=    &Apache::lonxml::get_param('src',$parstack,$safeeval);
-	my $alt=    &Apache::lonxml::get_param('alt',$parstack,$safeeval);
 	my $width=  &Apache::lonxml::get_param('width',$parstack,$safeeval);
 	my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
 
         if ($token->[2]{'src'}=~/\$/) {
-           $currentstring.='Variable image source';
+           $currentstring.=&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 .= ' />';
         } else {
-	   $currentstring .= '<img src="'.$src.'" alt="'.$alt.'" ';
-	   if ($width) { $currentstring.=' width="'.$width.'" '; }
-	   if ($height) { $currentstring.=' height="'.$height.'" '; }
-	   $currentstring .= ' />';
+           $currentstring.=&mt("No image source specified");
         }
     } elsif ($target eq 'modified') {
 	my ($osrc,$owidth,$oheight)=
@@ -3483,7 +3555,7 @@ sub start_frameset {
 	    &Apache::loncommon::start_page($Apache::londefdef::title,
 					   $Apache::londefdef::head,
 					   {'add_entries'    => $token->[2],
-					    'no_title'       => 1,
+#					    'no_title'       => 1,
 					    'force_register' => 1,
 					    'frameset'       => 1,});
 
@@ -4696,7 +4768,7 @@ sub align_latex_image {
     #    Even though we set a default alignment value, the user
     #    could have given us an illegal value.  In that case we
     #    just use the default alignment of bottom..
-    $currentstring = "\n% figurewrapping \n";
+    $currentstring = '';
     if      ($align eq "top")    {
 	$currentstring .= '\raisebox{-'.$height.'mm}{'.$image;
 	$closure = '}';
@@ -4739,8 +4811,6 @@ sub align_latex_image {
 	$currentstring .= "{$image";
 	$closure       = '}';
     }
-    $currentstring .= "\n% end wrappage\n";
-    $closure        = "\n% Begin closure\n".$closure."\n% End closure\n";
     return ($currentstring, $closure);
 }
 
@@ -4760,14 +4830,16 @@ sub is_inside_of {
 #
 #   This sub provides the typical LaTeX prefix matter for tex output:
 #
-sub latex_header
-{
+sub latex_header {
+    my ($mode) = @_;
     my $currentstring = '';
 
     $currentstring .= 
+	"\n% &Apache::lonxml::londefdef \n" .
 	'\documentclass[letterpaper,twoside]{article}\raggedbottom';
     if (($env{'form.latex_type'}=~'batchmode') ||
-	(!$env{'request.role.adv'})) {$currentstring .='\batchmode';} 
+	(!$env{'request.role.adv'}) || 
+	($mode eq 'batchmode')) {$currentstring .='\batchmode';} 
     $currentstring .= '\newcommand{\keephidden}[1]{}'.
 	'\renewcommand{\deg}{$^{\circ}$}'.
 	'\usepackage{multirow}'.
@@ -4795,8 +4867,14 @@ sub latex_header
 	'\usepackage{amssymb}'.
 	'\usepackage{amsfonts}'.
 	'\usepackage{amsthm}'.
-	'\usepackage{amscd}';
-    
+	'\usepackage{amscd}'
+        .'\usepackage{picins}\usepackage{calc}'."\n". # From lonprintout.pm
+	'\usepackage[T1]{fontenc}'."\n".
+	'\usepackage{lmodern}'."\n".
+	'\usepackage[postscript]{ucs}'."\n".
+	'\usepackage[utf8x]{inputenc}'."\n".
+	'\usepackage{pifont}'  . "\n";
+	
     if($env{'form.pdfFormFields'} eq 'yes') {
 	$currentstring .= '\usepackage{hyperref}'.
 	    '\usepackage{eforms}'.
@@ -4805,6 +4883,7 @@ sub latex_header
     
         $currentstring .= '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'.
                           '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}';
+    $currentstring .= '\begin{document}';
     
     return $currentstring;