--- loncom/xml/lonxml.pm	2009/10/15 21:12:51	1.500
+++ loncom/xml/lonxml.pm	2010/08/16 17:29:11	1.505.2.2
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.500 2009/10/15 21:12:51 raeburn Exp $
+# $Id: lonxml.pm,v 1.505.2.2 2010/08/16 17:29:11 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -111,6 +111,7 @@ use Apache::loncacc();
 use Apache::lonmaxima();
 use Apache::lonr();
 use Apache::lonlocal;
+use Apache::lonhtmlcommon();
 
 #====================================   Main subroutine: xmlparse  
 
@@ -243,7 +244,7 @@ sub tokeninputfield {
         document.tokeninput.barcode.value='';
     }  
 </script>
-<form method="post" name="tokeninput">
+<form method="post" name="tokeninput" action="">
 <table border="2" bgcolor="#FFFFBB">
 <tr><th>DocID Checkin</th></tr>
 <tr><td>
@@ -251,7 +252,7 @@ sub tokeninputfield {
 <tr>
 <td>Scan in Barcode</td>
 <td><input type="text" size="22" name="barcode" 
-onChange="updatetoken()"/></td>
+onchange="updatetoken()"/></td>
 </tr>
 <tr><td><i>or</i> Type in DocID</td>
 <td>
@@ -260,7 +261,7 @@ onChange="updatetoken()"/></td>
 <input type="text" size="5" name="codetwo" />
 <b><font size="+2">*</font></b>
 <input type="text" size="10" name="codethree" value="$defhost" 
-onChange="this.value=this.value.toUpperCase()" />
+onchange="this.value=this.value.toUpperCase()" />
 </td></tr>
 </table>
 </td></tr>
@@ -571,6 +572,10 @@ sub inner_xmlparse {
   if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
     $finaloutput=&afterburn($finaloutput);
   }	    
+  if ($target eq 'modified') {
+# if modfied, handle startpart and endpart
+     $finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs;
+  }
   return $finaloutput;
 }
 
@@ -1548,22 +1553,27 @@ sub renderingoptions {
     }
     my $output;
     unless ($env{'form.forceedit'}) {
-       $output .= '  
-           <span class="LC_nobreak">'.
+       $output .=
+           '<span class="LC_nobreak">'.
            &mt('Language:').' '.
-           &Apache::loncommon::select_form($env{'form.languages'},'languages',
-                                           %langchoices).'
-           </span>';
+           &Apache::loncommon::select_form(
+               $env{'form.languages'},
+               'languages',
+               {&Apache::lonlocal::texthash(%langchoices)}).
+           '</span>';
     }
-    $output .= '
-     <span class="LC_nobreak">'.
+    $output .=
+     ' <span class="LC_nobreak">'.
        &mt('Math Rendering:').' '.
-       &Apache::loncommon::select_form($env{'form.texengine'},'texengine',
-                                                     ('' => '',
-                                                      'tth' => 'tth (TeX to HTML)',
-                                                      'jsMath' => 'jsMath',
-                                                      'mimetex' => 'mimetex (Convert to Images)')).'
-     </span>';
+       &Apache::loncommon::select_form(
+           $env{'form.texengine'},
+           'texengine',
+           {&Apache::lonlocal::texthash
+               (''        => '',
+                'tth'     => 'tth (TeX to HTML)',
+                'jsMath'  => 'jsMath',
+                'mimetex' => 'mimetex (Convert to Images)')}).
+     '</span>';
     return $output;
 }
 
@@ -1576,47 +1586,27 @@ sub inserteditinfo {
       my $dragmath_button;
       my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();
-      if ($filetype eq 'html' 
-	  && (!&Apache::lonhtmlcommon::htmlareablocked() &&
-	      &Apache::lonhtmlcommon::htmlareabrowser())) {
-	  $textarea_id .= '___Frame';
-	  my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
-	  $initialize.=(<<FULLPAGE);
-<script type="text/javascript">
-lonca
-    function initDocument() {
-        var oFCKeditor = new FCKeditor('filecont');
-	oFCKeditor.Config['CustomConfigurationsPath'] = '/fckeditor/loncapaconfig.js'  ;
-	oFCKeditor.Config['FullPage'] = true
-	oFCKeditor.Config['AutoDetectLanguage'] = false;
-        oFCKeditor.Config['DefaultLanguage'] = "$lang";
-	oFCKeditor.ReplaceTextarea();
-    }
-    function check_if_dirty(editor) {
-	if (editor.IsDirty()) {
-	    unClean();
-	}
-    }
-    function FCKeditor_OnComplete(editor) {
-	editor.Events.AttachEvent("OnSelectionChange",check_if_dirty);
-	resize_textarea('$textarea_id','LC_aftertextarea');
-    }
-</script>
-FULLPAGE
-      } else {
-	  $initialize.=(<<FULLPAGE);
+      if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {
+          my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
+          my %textarea_args = (
+                                fullpage => 'true',
+                                dragmath => 'math',
+                              );
+          $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);
+      }
+      $initialize .= (<<FULLPAGE);
 <script type="text/javascript">
+// <![CDATA[
     function initDocument() {
 	resize_textarea('$textarea_id','LC_aftertextarea');
     }
+// ]]>
 </script>
 FULLPAGE
-          if ($filetype eq 'html') {
-              $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
-              $dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1);
-          }
+      if ($filetype eq 'html') {
+          $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
+          $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
       }
-
       $add_to_onload = 'initDocument();';
       $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
 
@@ -1625,12 +1615,13 @@ FULLPAGE
       }
 
       my $titledisplay=&display_title();
+      my $textareaclass;
       my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',
 					 'vi' => 'Save and View',
 					 'dv' => 'Discard Edits and View',
 					 'un' => 'undo',
 					 'ed' => 'Edit');
-      my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
+      my $spelllink = &Apache::lonhtmlcommon::spelllink('xmledit','filecont');
       my $textarea_events = &Apache::edit::element_change_detection();
       my $form_events     = &Apache::edit::form_change_detection();
       my $htmlerror;
@@ -1639,6 +1630,9 @@ FULLPAGE
           if ($htmlerror) {
               $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
           }
+          if (&Apache::lonhtmlcommon::htmlareabrowser()) {
+              $textareaclass = 'class="LC_richDetectHtml"';
+          }
       }
       my $editfooter=(<<ENDFOOTER);
 $initialize
@@ -1654,14 +1648,14 @@ $initialize
     <div class="LC_edit_problem_discards">
       <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
       <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
-      $dragmath_button $spelllink $htmlerror
+      $htmlerror $dragmath_button
     </div>
     <div class="LC_edit_problem_saves">
       <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />
       <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
     </div>
   </div>
-  <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
+  <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br />$spelllink
   <div id="LC_aftertextarea">
     <br />
     $titledisplay
@@ -1732,12 +1726,25 @@ sub handler {
 
 
     my $file=&Apache::lonnet::filelocation("",$request->uri);
-    my $filetype;
-    if ($file =~ /\.(sty|css|js|txt)$/) {
+    my ($filetype,$breadcrumbtext);
+    if ($file =~ /\.(sty|css|js|txt|tex)$/) {
 	$filetype=$1;
     } else {
 	$filetype='html';
     }
+    if ($filetype eq 'sty') {
+        $breadcrumbtext = 'Style File Editor';
+    } elsif ($filetype eq 'js') {
+        $breadcrumbtext = 'Javascript Editor';
+    } elsif ($filetype eq 'css') {
+        $breadcrumbtext = 'CSS Editor';
+    } elsif ($filetype eq 'txt') {
+        $breadcrumbtext = 'Text Editor';
+    } elsif ($filetype eq 'tex') {
+        $breadcrumbtext = 'TeX Editor';
+    } else {
+        $breadcrumbtext = 'HTML Editor';
+    }
 
 #
 # Edit action? Save file.
@@ -1772,7 +1779,7 @@ ENDNOTFOUND
 		$filecontents=&createnewsty();
             } elsif ($filetype eq 'js') {
                 $filecontents=&createnewjs();
-            } elsif (($filetype ne 'css') && ($filetype ne 'txt')) {
+            } elsif ($filetype ne 'css' && $filetype ne 'txt' && $filetype ne 'tex') {
 		$filecontents=&createnewhtml();
 	    }
 	    $env{'form.editmode'}='Edit'; #force edit mode
@@ -1796,21 +1803,31 @@ ENDNOTFOUND
 	    # up if it did
 	        &Apache::structuretags::reset_problem_globals();
 	        &Apache::lonhomework::finished_parsing();
+            } elsif ($filetype eq 'tex') {
+                $result = &Apache::lontexconvert::converted(\$filecontents,
+                              $env{'form.texengine'});
+                if ($env{'form.return_only_error_and_warning_counts'}) {
+                    if (&verify_html('<html><body>'.$result.'</body></html>')) {
+                        $errorcount++;
+                    }
+                    $result = "$errorcount:$warningcount";
+                }
             } else {
                 $result = $filecontents;
             }
 	    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 						    ['rawmode']);
 	    if ($env{'form.rawmode'}) { $result = $filecontents; }
-            if ($filetype ne 'html') {
-                my $nochgview = 1; 
+            if (($filetype ne 'html') && 
+                (!$env{'form.return_only_error_and_warning_counts'})) {
+                my $nochgview = 1;
                 my $controls = '';
                     if ($env{'request.state'} eq 'construct') {
                         $controls = &Apache::loncommon::head_subbox(
                                         &Apache::loncommon::CSTR_pageheader()
                                        .&Apache::londefdef::edit_controls($nochgview));
                     }
-                if ($filetype ne 'sty') {
+                if ($filetype ne 'sty' && $filetype ne 'tex') {
                     $result =~ s/</&lt;/g;
                     $result =~ s/>/&gt;/g;
                     $result = '<table class="LC_sty_begin">'.
@@ -1823,7 +1840,7 @@ ENDNOTFOUND
                         $brcrum = [{'href' => &Apache::loncommon::authorspace(),
                                     'text' => 'Construction Space'},
                                    {'href' => '',
-                                    'text' => 'Editor'}];
+                                    'text' => $breadcrumbtext}];
                     } else {
                         $brcrum = ''; # FIXME: Where are we?
                     }
@@ -1863,7 +1880,7 @@ ENDNOTFOUND
                             'href' => &Apache::loncommon::authorspace(),
                             'text' => 'Construction Space'},
                            {'href' => '',
-                            'text' => 'HTML Editor'}];
+                            'text' => $breadcrumbtext}];
                 $header = &Apache::loncommon::head_subbox(
                               &Apache::loncommon::CSTR_pageheader());
             }
@@ -1884,7 +1901,7 @@ ENDNOTFOUND
         }
     }
     if ($filetype eq 'html') { &writeallows($request->uri); }
-    
+
     &Apache::lonxml::add_messages(\$result);
     $request->print($result);
     
@@ -2253,24 +2270,20 @@ sub get_tag {
 
 =pod
 
-=item &print_pdf_radiobutton(fieldname, value,  text)
+=item &print_pdf_radiobutton(fieldname, value)
 
-Returns a latexline to generate a PDF-Form-Radiobutton with Text.
+Returns a latexline to generate a PDF-Form-Radiobutton.
+Note: Radiobuttons with equal names are automaticly grouped
+      in a selection-group.
 
-$fieldname: PDF internalname of the radiobutton
-$value:     Value of radiobutton (read when dumping the PDF data)
-$text:      Text on the rightside of the radiobutton
+$fieldname: PDF internalname of the radiobutton(group)
+$value:     Value of radiobutton
 
 =cut
 sub print_pdf_radiobutton {
-    my $result = '';
-    my ($fieldName, $value, $text) = @_;
-    $result .= '\begin{tabularx}{\textwidth}{p{0cm}X}'."\n";
-    $result .= '\radioButton[\symbolchoice{circle}]{'. 
-               $fieldName.'}{10bp}{10bp}{'.$value.'}&'.$text."\n";
-    $result .= '\end{tabularx}' . "\n";
-    $result .= '\hspace{2mm}' . "\n";
-    return $result;
+    my ($fieldname, $value) = @_;
+    return '\radioButton[\symbolchoice{circle}]{'
+           .$fieldname.'}{10bp}{10bp}{'.$value.'}';
 }