--- loncom/xml/londefdef.pm	2009/05/26 14:54:29	1.407
+++ loncom/xml/londefdef.pm	2010/10/19 19:33:21	1.424
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.407 2009/05/26 14:54:29 bisitz Exp $
+# $Id: londefdef.pm,v 1.424 2010/10/19 19:33:21 raeburn Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -43,7 +43,6 @@ use Apache::lonnet;
 use strict;
 use Apache::lonxml;
 use Apache::lontable;
-use Apache::File();
 use Image::Magick;
 use Apache::lonmenu();
 use Apache::lonmeta();
@@ -540,14 +539,20 @@ sub start_body {
 
     # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();
-    &Apache::lonhtmlcommon::add_breadcrumb({
-        'text'  => 'Construction Space',
-        'href'  => '', # FIXME Add link to /priv/[user]
-    });
-    &Apache::lonhtmlcommon::add_breadcrumb({
-        'text'  => 'HTML Editor',
-        'href'  => '',
-    });    
+    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,
@@ -557,16 +562,21 @@ sub start_body {
 #					    'no_title'       => 1,
 					    'force_register' => 1});
 
-    $currentstring .= &Apache::lonhtmlcommon::breadcrumbs();
-
         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::lonmenu::constspaceform()
-                   .&Apache::londefdef::edit_controls();
+            $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::loncommon::head_subbox(
-                            &Apache::loncommon::CSTR_pageheader()
-                           .$header);
         $currentstring.=&Apache::lonxml::message_location();
     } elsif ($target eq 'tex') {
         $currentstring = '';   #  '\begin{document}' is in header.
@@ -588,9 +598,14 @@ sub edit_controls {
 </div>';
     }
     $result .= '
-<div class="LC_edit_problem_header_edit_row"><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" /></div></div>
+<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>
 </form>
-<br />';
+';
     return $result;
 }
 
@@ -2032,29 +2047,39 @@ 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 '') {
+	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%';
 	}
-	
+
 	# If a percentage, need to calculate what this means in terms of
 	# page width:
 	
@@ -2167,7 +2192,9 @@ sub end_table {
 
 	my $table = pop(@Apache::londefdef::table);
 	my $t     = $table->generate();
+	# &Apache::lonnet::logthis("Generating string");
 	$currentstring = $t->generate_string();
+	# &Apache::lonnet::logthis("Generated: $currentstring");
 	&enable_para();
 	#--------------------------------------------------------------
 	#  Old table code:
@@ -3143,24 +3170,13 @@ sub start_img {
    # Render unto browsers that which are the browser's...
 
     if ($target eq 'web' || $target eq 'webgrade') {
-	if ($env{'browser.imagesuppress'} ne 'on') {
-	    my $enc = ('yes' eq 
-		       lc(&Apache::lonxml::get_param('encrypturl',$parstack,
-						     $safeeval)));
-	    $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src},
-							 $enc);
-	} else {
-	    my $alttag = &Apache::lonxml::get_param('alt',$parstack,$safeeval,
-						    undef,1);
-	    if (!$alttag) {
-		$alttag = &Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],
-						   $src);
-	    }
-	    $currentstring.='[IMAGE: '.$alttag.']';
-	}
-
-	# and render unto TeX that which is LaTeX
+        my $enc = ('yes' eq 
+                   lc(&Apache::lonxml::get_param('encrypturl',$parstack,
+                      $safeeval)));
+        $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src},
+                         $enc);
 
+    # and render unto TeX that which is LaTeX
     } elsif ($target eq 'tex') {
 	#
 	#  The alignment will require some superstructure to be put around
@@ -3259,21 +3275,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';
-        } else {
+           $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.=&mt("No image source specified");
         }
     } elsif ($target eq 'modified') {
 	my ($osrc,$owidth,$oheight)=
@@ -3342,23 +3365,12 @@ sub start_applet {
     &Apache::lonxml::extlink($archive);
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
-	if ($env{'browser.appletsuppress'} ne 'on') {
-	    $currentstring = &Apache::lonenc::encrypt_ref($token,
-							  {'code'=>$code,
-							   'archive'=>$archive}
-							  );
-	} else {
-	    my $alttag= &Apache::lonxml::get_param('alt',$parstack,
-						   $safeeval,undef,1);
-	    unless ($alttag) {
-		$alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],
-						 $code);
-	    }
-	    $currentstring='[APPLET: '.$alttag.']';
-	}
+        $currentstring = &Apache::lonenc::encrypt_ref($token,
+                                                      {'code'=>$code,
+                                                       'archive'=>$archive}
+                                                     );
     } elsif ($target eq 'tex') {
-	# Turn off some stuff we can't be inside thank you LaTeX
-	
+        # Turn off some stuff we can't be inside thank you LaTeX
 
 	my $restart_sub = 0;
 	my $restart_sup = 0;
@@ -3422,16 +3434,7 @@ sub start_embed {
     &Apache::lonxml::extlink($src);
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
-	if ($env{'browser.embedsuppress'} ne 'on') {
-	    $currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
-	} else {
-	    my $alttag=&Apache::lonxml::get_param
-		('alt',$parstack,$safeeval,undef,1);
-	    unless ($alttag) {
-		$alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
-	    }
-	    $currentstring='[EMBED: '.$alttag.']';
-	}
+    $currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}); 
     } elsif ($target eq 'tex') {
     } 
     return $currentstring;
@@ -3441,9 +3444,10 @@ sub end_embed {
     my ($target,$token) = @_;
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
-	$currentstring = $token->[2];     
-    } elsif ($target eq 'tex') {  
-    } 
+        $currentstring = $token->[2];
+    } elsif ($target eq 'tex') {
+        # ./.
+    }
     return $currentstring;
 }
 
@@ -3881,12 +3885,16 @@ sub end_colgroup {
     return $currentstring;
 }
 
+
 #-- <del> tag (end tag required)
 sub start_del {
     my ($target,$token) = @_;
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
+    } elsif ($target eq 'tex') {
+	&disable_para();
+	$currentstring .= '\st{';  
     } 
     return $currentstring;
 }
@@ -3895,7 +3903,10 @@ sub end_del {
     my ($target,$token) = @_;
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
-	$currentstring = $token->[2];    
+	$currentstring = $token->[2];     
+    } elsif ($target eq 'tex') {
+	&enable_para();
+	$currentstring = '}';
     } 
     return $currentstring;
 }
@@ -4604,13 +4615,13 @@ sub get_eps_image {
 
 		#if replication failed try to produce eps file dynamically
 		$src=~s/\.ps$/\.eps/;
-		my $temp_file;
-		open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
-		my $newsrc=$orig_src;
-		$newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
-		&Apache::lonxml::debug("queueing $newsrc for dynamic eps production.");
-		print FILE ("$newsrc\n");
-		close(FILE);
+		if (open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat")) {
+		    my $newsrc=$orig_src;
+		    $newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
+		    &Apache::lonxml::debug("queueing $newsrc for dynamic eps production.");
+		    print FILE ("$newsrc\n");
+		    close(FILE);
+                }
 		$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
 		$src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
 		if ($sext ne "") {	 # Put the ext. back in to uniquify.
@@ -4643,8 +4654,10 @@ sub get_eps_image {
 sub eps_generation {
     my ($src,$file,$width_param) = @_;	     
     my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";
-    my $temp_file = Apache::File->new('>>'.$filename); 
-    print $temp_file "$src\n";
+    if (open(my $tmpfile,">>$filename")) { 
+        print $tmpfile "$src\n";
+        close($tmpfile);
+    }
     my $newsrc = $src;
     $newsrc =~ s/(\.bmp|\.gif|\.jpg|\.jpeg)$/\.eps/i;
     $newsrc=~s{/home/httpd/html/res}{};
@@ -4735,7 +4748,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 = '}';
@@ -4778,8 +4791,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);
 }
 
@@ -4799,8 +4810,7 @@ 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 = '';
 
@@ -4834,6 +4844,7 @@ sub latex_header
 	"\\usepackage{xcolor}\n".
 	'\usepackage{calc}'.
 	'\usepackage{amsmath}'.
+    '\usepackage{soul}',
 	'\usepackage{amssymb}'.
 	'\usepackage{amsfonts}'.
 	'\usepackage{amsthm}'.