Diff for /loncom/interface/loncommon.pm between versions 1.692.4.3 and 1.880

version 1.692.4.3, 2009/05/21 15:43:52 version 1.880, 2009/08/06 04:05:38
Line 271  BEGIN { Line 271  BEGIN {
         }          }
     }      }
     &Apache::lonnet::logthis(      &Apache::lonnet::logthis(
               "<font color=yellow>INFO: Read file types</font>");               "<span style='color:yellow;'>INFO: Read file types</span>");
     $readit=1;      $readit=1;
     }  # end of unless($readit)       }  # end of unless($readit) 
           
Line 407  sub studentbrowser_javascript { Line 407  sub studentbrowser_javascript {
           ) { return ''; }              ) { return ''; }  
    return (<<'ENDSTDBRW');     return (<<'ENDSTDBRW');
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
   // <![CDATA[
     var stdeditbrowser;      var stdeditbrowser;
     function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {      function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';          var url = '/adm/pickstudent?';
Line 429  sub studentbrowser_javascript { Line 430  sub studentbrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');          stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();          stdeditbrowser.focus();
     }      }
   // ]]>
 </script>  </script>
 ENDSTDBRW  ENDSTDBRW
 }  }
Line 450  sub selectstudent_link { Line 452  sub selectstudent_link {
               &mt('Select User').'</a></span>';                &mt('Select User').'</a></span>';
    }     }
    if ($env{'request.role'}=~/^(au|dc|su)/) {     if ($env{'request.role'}=~/^(au|dc|su)/) {
        $callargs .= ",1";         $callargs .= ",1"; 
        return '<span class="LC_nobreak">'.         return '<span class="LC_nobreak">'.
               '<a href="javascript:openstdbrowser('.$callargs.');">'.                '<a href="javascript:openstdbrowser('.$callargs.');">'.
               &mt('Select User').'</a></span>';                &mt('Select User').'</a></span>';
Line 460  sub selectstudent_link { Line 462  sub selectstudent_link {
   
 sub authorbrowser_javascript {  sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";      return <<"ENDAUTHORBRW";
 <script type="text/javascript">  <script type="text/javascript" language="JavaScript">
   // <![CDATA[
 var stdeditbrowser;  var stdeditbrowser;
   
 function openauthorbrowser(formname,udom) {  function openauthorbrowser(formname,udom) {
Line 473  function openauthorbrowser(formname,udom Line 476  function openauthorbrowser(formname,udom
     stdeditbrowser.focus();      stdeditbrowser.focus();
 }  }
   
   // ]]>
 </script>  </script>
 ENDAUTHORBRW  ENDAUTHORBRW
 }  }
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname)=@_;      my ($domainfilter,$sec_element,$formname)=@_;
     my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');      my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role');
    my $output = '      my $id_functions = &javascript_index_functions();
       my $output = '
 <script type="text/javascript" language="JavaScript">  <script type="text/javascript" language="JavaScript">
   // <![CDATA[
     var stdeditbrowser;'."\n";      var stdeditbrowser;'."\n";
    $output .= <<"ENDSTDBRW";  
       $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {      function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
         var url = '/adm/pickcourse?';          var url = '/adm/pickcourse?';
         var domainfilter = '';          var domainfilter = getDomainFromSelectbox(formname,udom);
         var formid = getFormIdByName(formname);  
         if (formid > -1) {  
             var domid = getIndexByName(formid,udom);  
             if (domid > -1) {  
                 if (document.forms[formid].elements[domid].type == 'select-one') {  
                     domainfilter=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;  
                 }  
                 if (document.forms[formid].elements[domid].type == 'hidden') {  
                     domainfilter=document.forms[formid].elements[domid].value;  
                 }  
             }  
         }  
         if (domainfilter != null) {          if (domainfilter != null) {
            if (domainfilter != '') {             if (domainfilter != '') {
                url += 'domainfilter='+domainfilter+'&';                 url += 'domainfilter='+domainfilter+'&';
Line 517  sub coursebrowser_javascript { Line 512  sub coursebrowser_javascript {
             else {              else {
                 if (formname == 'portform') {                  if (formname == 'portform') {
                     url += '&setroles='+extra_element;                      url += '&setroles='+extra_element;
                   } else {
                       if (formname == 'rules') {
                           url += '&fixeddom='+extra_element; 
                       }
                 }                  }
             }                   }     
         }          }
           if (formname == 'ccrs') {
               var ownername = document.forms[formid].ccuname.value;
               var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
               url += '&cloner='+ownername+':'+ownerdom;
           }
         if (multflag !=null && multflag != '') {          if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;              url += '&multiple='+multflag;
         }          }
         if (crstype == 'Course/Group') {          if (crstype == 'Course/Community') {
             if (formname == 'cu') {              if (formname == 'cu') {
                 crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value;                   crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                 if (crstype == "") {                  if (crstype == "") {
Line 541  sub coursebrowser_javascript { Line 545  sub coursebrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');          stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();          stdeditbrowser.focus();
     }      }
   $id_functions
   ENDSTDBRW
       if ($sec_element ne '') {
           $output .= &setsec_javascript($sec_element,$formname);
       }
       $output .= '
   // ]]>
   </script>';
       return $output;
   }
   
     function getFormIdByName(formname) {  sub javascript_index_functions {
         for (var i=0;i<document.forms.length;i++) {      return <<"ENDJS";
             if (document.forms[i].name == formname) {  
                 return i;  function getFormIdByName(formname) {
             }      for (var i=0;i<document.forms.length;i++) {
           if (document.forms[i].name == formname) {
               return i;
           }
       }
       return -1;
   }
   
   function getIndexByName(formid,item) {
       for (var i=0;i<document.forms[formid].elements.length;i++) {
           if (document.forms[formid].elements[i].name == item) {
               return i;
         }          }
         return -1;   
     }      }
       return -1;
   }
   
     function getIndexByName(formid,item) {  function getDomainFromSelectbox(formname,udom) {
         for (var i=0;i<document.forms[formid].elements.length;i++) {      var userdom;
             if (document.forms[formid].elements[i].name == item) {      var formid = getFormIdByName(formname);
                 return i;      if (formid > -1) {
           var domid = getIndexByName(formid,udom);
           if (domid > -1) {
               if (document.forms[formid].elements[domid].type == 'select-one') {
                   userdom=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
               }
               if (document.forms[formid].elements[domid].type == 'hidden') {
                   userdom=document.forms[formid].elements[domid].value;
             }              }
         }          }
         return -1;  
     }      }
 ENDSTDBRW      return userdom;
     if ($sec_element ne '') {  }
         $output .= &setsec_javascript($sec_element,$formname);  
   ENDJS
   
   }
   
   sub userbrowser_javascript {
       my $id_functions = &javascript_index_functions();
       return <<"ENDUSERBRW";
   
   function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom) {
       var url = '/adm/pickuser?';
       var userdom = getDomainFromSelectbox(formname,udom);
       if (userdom != null) {
          if (userdom != '') {
              url += 'srchdom='+userdom+'&';
          }
     }      }
     $output .= '      url += 'form=' + formname + '&unameelement='+uname+
 </script>';                                  '&udomelement='+udom+
     return $output;                                  '&ulastelement='+ulast+
                                   '&ufirstelement='+ufirst+
                                   '&uemailelement='+uemail+
                                   '&hideudomelement='+hideudom;
       var title = 'User_Browser';
       var options = 'scrollbars=1,resizable=1,menubar=0';
       options += ',width=700,height=600';
       var stdeditbrowser = open(url,title,options,'1');
       stdeditbrowser.focus();
   }
   
   function fix_domain (formname,udom,origdom) {
       var formid = getFormIdByName(formname);
       if (formid > -1) {
           var domid = getIndexByName(formid,udom);
           var hidedomid = getIndexByName(formid,origdom);
           if (hidedomid > -1) {
               var fixeddom = document.forms[formid].elements[hidedomid].value;
               if (domid > -1) {
                   var slct = document.forms[formid].elements[domid];
                   if (slct.type == 'select-one') {
                       var i;
                       for (i=0;i<slct.length;i++) {
                           if (slct.options[i].value==fixeddom) { slct.selectedIndex=i; }
                       }
                   }
                   if (slct.type == 'hidden') {
                       slct.value = fixeddom;
                   }
               }
           }
       }
       return;
   }
   
   $id_functions
   ENDUSERBRW
 }  }
   
 sub setsec_javascript {  sub setsec_javascript {
Line 610  function setSect(sectionlist) { Line 693  function setSect(sectionlist) {
   
 sub selectcourse_link {  sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;     my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
      my $linktext = &mt('Select Course');
      if ($selecttype eq 'Community') {
          $linktext = &mt('Select Community'); 
      }
    return '<span class="LC_nobreak">'     return '<span class="LC_nobreak">'
          ."<a href='"           ."<a href='"
          .'javascript:opencrsbrowser("'.$form.'","'.$unameele           .'javascript:opencrsbrowser("'.$form.'","'.$unameele
          .'","'.$udomele.'","'.$desc.'","'.$extra_element           .'","'.$udomele.'","'.$desc.'","'.$extra_element
          .'","'.$multflag.'","'.$selecttype.'");'           .'","'.$multflag.'","'.$selecttype.'");'
          ."'>".&mt('Select Course').'</a>'           ."'>".$linktext.'</a>'
          .'</span>';           .'</span>';
 }  }
   
Line 625  sub selectauthor_link { Line 712  sub selectauthor_link {
           &mt('Select Author').'</a>';            &mt('Select Author').'</a>';
 }  }
   
   sub selectuser_link {
       my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,$linktext) = @_;
       return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".
              "'$lastelem','$firstelem','$emailelem','$hdomelem'".');">'.$linktext.'</a>';
   }
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";      my $jscript = <<"ENDSCRT";
 function checkAll(field) {  function checkAll(field) {
Line 825  sub linked_select_forms { Line 918  sub linked_select_forms {
     # output the javascript to do the changing      # output the javascript to do the changing
     my $result = '';      my $result = '';
     $result.='<script type="text/javascript" language="JavaScript">'."\n";      $result.='<script type="text/javascript" language="JavaScript">'."\n";
       $result.="// <![CDATA[\n";
     $result.="var select2data = new Object();\n";      $result.="var select2data = new Object();\n";
     $" = '","';      $" = '","';
     my $debug = '';      my $debug = '';
Line 870  function select1_changed() { Line 964  function select1_changed() {
         }          }
     }      }
 }  }
   // ]]>
 </script>  </script>
 END  END
     # output the initial values for the selection lists      # output the initial values for the selection lists
Line 931  sub help_open_topic { Line 1026  sub help_open_topic {
     my ($topic, $text, $stayOnPage, $width, $height) = @_;      my ($topic, $text, $stayOnPage, $width, $height) = @_;
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual') {  
  $stayOnPage=1;  
     }  
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);      $height = 400 if (not defined $height);
     my $filename = $topic;      my $filename = $topic;
Line 951  sub help_open_topic { Line 1043  sub help_open_topic {
     }      }
   
     # Add the text      # Add the text
     if ($text ne "") {      if ($text ne "") {
  $template .=    $template.='<span class="LC_help_open_topic">'
             "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".                    .'<a target="_top" href="'.$link.'">'
             "<td bgcolor='#5555FF'><span class=\"LC_nobreak\"><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";                    .$text.'</a>';
     }      }
   
     # Add the graphic      # (Always) Add the graphic
     my $title = &mt('Online Help');      my $title = &mt('Online Help');
     my $helpicon=&lonhttpdurl("/adm/help/help.png");      my $helpicon=&lonhttpdurl("/adm/help/help.png");
     $template .= '<a target="_top" href="'.$link.'" title="'.$title.'">'.      $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'
                  '<img src="'.$helpicon.'" border="0" alt="'.&mt('Help: [_1]',$topic).                .'<img src="'.$helpicon.'" border="0"'
                  '" title="'.$title.'" /></a>';                .' alt="'.&mt('Help: [_1]',$topic).'"'
     if ($text ne '') {                .' title="'.$title.'"' 
         $template.='</span></td></tr></table>';                .' /></a>';
       if ($text ne "") {
           $template.='</span>';
     }      }
     return $template;      return $template;
   
Line 977  sub helpLatexCheatsheet { Line 1071  sub helpLatexCheatsheet {
     my $out;      my $out;
     my $addOther = '';      my $addOther = '';
     if ($topic) {      if ($topic) {
  $addOther = &Apache::loncommon::help_open_topic($topic,$text,   $addOther = '<span>'.&Apache::loncommon::help_open_topic($topic,&mt($text),
        undef, undef, 600) .         undef, undef, 600).
    '</td><td>';     '</span> ';
     }      }
     $out = '<table><tr><td>'.      $out = '<span>' # Start cheatsheet
            $addOther .    .$addOther
            &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),            .'<span>'
                                                undef,undef,600).    .&Apache::loncommon::help_open_topic('Greek_Symbols',&mt('Greek Symbols'),
            '</td><td>'.         undef,undef,600)
            &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),    .'</span> <span>'
                                                undef,undef,600).    .&Apache::loncommon::help_open_topic('Other_Symbols',&mt('Other Symbols'),
            '</td>';         undef,undef,600)
     .'</span>';
     unless ($not_author) {      unless ($not_author) {
         $out .= '<td>'.          $out .= ' <span>'
                 &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),         .&Apache::loncommon::help_open_topic('Authoring_Output_Tags',&mt('Output Tags'),
                                                     undef,undef,600).                                              undef,undef,600)
                 '</td>';         .'</span>';
     }      }
     $out .= '</tr></table>';      $out .= '</span>'; # End cheatsheet
     return $out;      return $out;
 }  }
   
Line 1023  sub update_help_link { Line 1118  sub update_help_link {
     my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";      my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";
     my $output .= <<"ENDOUTPUT";      my $output .= <<"ENDOUTPUT";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 banner_link = '$banner_link';  banner_link = '$banner_link';
   // ]]>
 </script>  </script>
 ENDOUTPUT  ENDOUTPUT
     return $output;      return $output;
Line 1036  sub help_open_menu { Line 1133  sub help_open_menu {
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     # only use pop-up help (stayOnPage == 0)      # only use pop-up help (stayOnPage == 0)
     # if environment.remote is on (using remote control UI)      # if environment.remote is on (using remote control UI)
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
     $env{'environment.remote'} eq 'off' ) {  
         $stayOnPage=1;          $stayOnPage=1;
     }      }
     my $output;      my $output;
Line 1061  sub top_nav_help { Line 1157  sub top_nav_help {
     my ($text) = @_;      my ($text) = @_;
     $text = &mt($text);      $text = &mt($text);
     my $stay_on_page =       my $stay_on_page = 
  ($env{'browser.interface'}  eq 'textual' ||   ($env{'environment.remote'} eq 'off' );
  $env{'environment.remote'} eq 'off' );  
     my $link = ($stay_on_page) ? "javascript:helpMenu('display')"      my $link = ($stay_on_page) ? "javascript:helpMenu('display')"
                      : "javascript:helpMenu('open')";                       : "javascript:helpMenu('open')";
     my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);      my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);
Line 1079  sub help_menu_js { Line 1174  sub help_menu_js {
     my ($text) = @_;      my ($text) = @_;
   
     my $stayOnPage =       my $stayOnPage = 
  ($env{'browser.interface'}  eq 'textual' ||   ($env{'environment.remote'} eq 'off' );
  $env{'environment.remote'} eq 'off' );  
   
     my $width = 620;      my $width = 620;
     my $height = 600;      my $height = 600;
Line 1100  sub help_menu_js { Line 1194  sub help_menu_js {
   
     my $template .= <<"ENDTEMPLATE";      my $template .= <<"ENDTEMPLATE";
 <script type="text/javascript">  <script type="text/javascript">
 // <!-- BEGIN LON-CAPA Internal  
 // <![CDATA[  // <![CDATA[
   // <!-- BEGIN LON-CAPA Internal
 var banner_link = '';  var banner_link = '';
 function helpMenu(target) {  function helpMenu(target) {
     var caller = this;      var caller = this;
Line 1126  function writeHelp(caller) { Line 1220  function writeHelp(caller) {
     caller.document.close()      caller.document.close()
     caller.focus()      caller.focus()
 }  }
 // ]]>  
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
   // ]]>
 </script>  </script>
 ENDTEMPLATE  ENDTEMPLATE
     return $template;      return $template;
Line 1139  sub help_open_bug { Line 1233  sub help_open_bug {
     unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
  $env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }      }
     $width = 600 if (not defined $width);      $width = 600 if (not defined $width);
Line 1164  sub help_open_bug { Line 1257  sub help_open_bug {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></a>";
     }      }
   
     # Add the graphic      # Add the graphic
Line 1184  sub help_open_faq { Line 1277  sub help_open_faq {
     unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
  $env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }      }
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
Line 1209  sub help_open_faq { Line 1301  sub help_open_faq {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF; font-size:10pt;\">$text</span></a>";
     }      }
   
     # Add the graphic      # Add the graphic
Line 1395  sub resize_textarea_js { Line 1487  sub resize_textarea_js {
     my $geometry = &viewport_geometry_js();      my $geometry = &viewport_geometry_js();
     return <<"RESIZE";      return <<"RESIZE";
     <script type="text/javascript">      <script type="text/javascript">
   // <![CDATA[
 $geometry  $geometry
   
 function getX(element) {  function getX(element) {
Line 1433  function resize_textarea(textarea_id,bot Line 1526  function resize_textarea(textarea_id,bot
     }      }
     textarea.style.height=new_height+'px';      textarea.style.height=new_height+'px';
 }  }
   // ]]>
 </script>  </script>
 RESIZE  RESIZE
   
Line 1776  sub select_level_form { Line 1870  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
   
 Returns a string containing a <select name='$name' size='1'> form to   Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.    allow a user to select the domain to preform an operation in.  
Line 1787  selected"); Line 1881  selected");
   
 If the $showdomdesc flag is set, the domain name is followed by the domain description.  If the $showdomdesc flag is set, the domain name is followed by the domain description.
   
 If the $autosubmit flag is set, the form containing the domain selector will be auto-submitted by an onchange action.  The optional $onchange argumnet specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.  
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_dom_form {  sub select_dom_form {
     my ($defdom,$name,$includeempty,$showdomdesc,$autosubmit) = @_;      my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
     my $onchange;      if ($onchange) {
     if ($autosubmit) {          $onchange = ' onchange="'.$onchange.'"';
         $onchange = ' onchange="this.form.submit()"';  
     }      }
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());      my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }      if ($includeempty) { @domains=('',@domains); }
Line 2300  sub authform_internal{ Line 2393  sub authform_internal{
     $result = &mt      $result = &mt
         ('[_1] Internally authenticated (with initial password [_2])',          ('[_1] Internally authenticated (with initial password [_2])',
          '<label>'.$authtype,'</label>'.$autharg);           '<label>'.$authtype,'</label>'.$autharg);
     $result.="<label><input type=\"checkbox\" name=\"visible\" onClick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';      $result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
     return $result;      return $result;
 }  }
   
Line 2814  sub screenname { Line 2907  sub screenname {
     return $names{'screenname'};      return $names{'screenname'};
 }  }
   
   
 # ------------------------------------------------------------- Confirm Wrapper  # ------------------------------------------------------------- Confirm Wrapper
 =pod  =pod
   
Line 2844  sub messagewrapper { Line 2938  sub messagewrapper {
  '&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.   '&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.
         'title="'.&mt('Send message').'">'.$link.'</a>';          'title="'.&mt('Send message').'">'.$link.'</a>';
 }  }
   
 # --------------------------------------------------------------- Notes Wrapper  # --------------------------------------------------------------- Notes Wrapper
   
 sub noteswrapper {  sub noteswrapper {
Line 2851  sub noteswrapper { Line 2946  sub noteswrapper {
     return       return 
 "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";  "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
 }  }
   
 # ------------------------------------------------------------- Aboutme Wrapper  # ------------------------------------------------------------- Aboutme Wrapper
   
 sub aboutmewrapper {  sub aboutmewrapper {
Line 2864  sub aboutmewrapper { Line 2960  sub aboutmewrapper {
   
 # ------------------------------------------------------------ Syllabus Wrapper  # ------------------------------------------------------------ Syllabus Wrapper
   
   
 sub syllabuswrapper {  sub syllabuswrapper {
     my ($linktext,$coursedir,$domain,$fontcolor)=@_;      my ($linktext,$coursedir,$domain)=@_;
     if ($fontcolor) {   
         $linktext='<font color="'.$fontcolor.'">'.$linktext.'</font>';   
     }  
     return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};      return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};
 }  }
   
   # -----------------------------------------------------------------------------
   
 sub track_student_link {  sub track_student_link {
     my ($linktext,$sname,$sdom,$target,$start) = @_;      my ($linktext,$sname,$sdom,$target,$start) = @_;
     my $link ="/adm/trackstudent?";      my $link ="/adm/trackstudent?";
Line 3174  sub user_lang { Line 3268  sub user_lang {
     return $user_lh;      return $user_lh;
 }  }
   
   
 ###############################################################  ###############################################################
 ##               Student Answer Attempts                     ##  ##               Student Answer Attempts                     ##
 ###############################################################  ###############################################################
Line 3753  sub blockcheck { Line 3848  sub blockcheck {
                  ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));                   ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));
         next if ($no_userblock);          next if ($no_userblock);
   
         # Retrieve blocking times and identity of blocker for course          # Retrieve blocking times and identity of locker for course
         # of specified user, unless user has 'evb' privilege.          # of specified user, unless user has 'evb' privilege.
                   
         my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);          my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);
Line 3818  sub parse_block_record { Line 3913  sub parse_block_record {
     return ($setuname,$setudom,$title,$blocks);      return ($setuname,$setudom,$title,$blocks);
 }  }
   
 sub build_block_table {  
     my ($startblock,$endblock,$setters) = @_;  
     my %lt = &Apache::lonlocal::texthash(  
         'cacb' => 'Currently active communication blocks',  
         'cour' => 'Course',  
         'dura' => 'Duration',  
         'blse' => 'Block set by'  
     );  
     my $output;  
     $output = '<br />'.$lt{'cacb'}.':<br />';  
     $output .= &start_data_table();  
     $output .= '  
 <tr>  
  <th>'.$lt{'cour'}.'</th>  
  <th>'.$lt{'dura'}.'</th>  
  <th>'.$lt{'blse'}.'</th>  
 </tr>  
 ';  
     foreach my $course (keys(%{$setters})) {  
         my %courseinfo=&Apache::lonnet::coursedescription($course);  
         for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {  
             my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};  
             my $fullname = &plainname($uname,$udom);  
             if (defined($env{'user.name'}) && defined($env{'user.domain'})  
                 && $env{'user.name'} ne 'public'   
                 && $env{'user.domain'} ne 'public') {  
                 $fullname = &aboutmewrapper($fullname,$uname,$udom);  
             }  
             my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};  
             $openblock = &Apache::lonlocal::locallocaltime($openblock);  
             $closeblock= &Apache::lonlocal::locallocaltime($closeblock);  
             $output .= &Apache::loncommon::start_data_table_row().  
                        '<td>'.$courseinfo{'description'}.'</td>'.  
                        '<td>'.$openblock.' to '.$closeblock.'</td>'.  
                        '<td>'.$fullname.'</td>'.  
                         &Apache::loncommon::end_data_table_row();  
         }  
     }  
     $output .= &end_data_table();  
 }  
   
 sub blocking_status {  sub blocking_status {
     my ($activity,$uname,$udom) = @_;    my $blocked;
     my %setters;    my ($activity,$uname,$udom) = @_;
     my ($blocked,$output,$ownitem,$is_course);    my %setters;
     my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);    my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
     if ($startblock && $endblock) {    if ($startblock && $endblock) {
         $blocked = 1;      $blocked = 1;
         if (wantarray) {    }
             my $category;    if(!wantarray) {
             if ($activity eq 'boards') {      return $blocked;
                 $category = 'Discussion posts in this course';    }
             } elsif ($activity eq 'blogs') {    my $output;
                 $category = 'Blogs';    my $querystring;
             } elsif ($activity eq 'port') {    $querystring = "?activity=$activity";
                 if (defined($uname) && defined($udom)) {  
                     if ($uname eq $env{'user.name'} &&        $output .= <<"END_MYBLOCK";
                         $udom eq $env{'user.domain'}) {  <script type="text/javascript">
                         $ownitem = 1;  // <![CDATA[
                     }      function openWindow(url, wdwName, w, h, toolbar,scrollbar) {
                 }          var options = "width=" + w + ",height=" + h + ",";
                 $is_course = &Apache::lonnet::is_course($udom,$uname);          options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
                 if ($ownitem) {           options += "menubar=no,toolbar="+toolbar+",location=no,directories=no";
                     $category = 'Your portfolio files';            var newWin = window.open(url, wdwName, options);
                 } elsif ($is_course) {          newWin.focus();
                     my $coursedesc;  
                     foreach my $course (keys(%setters)) {  
                         my %courseinfo =  
                              &Apache::lonnet::coursedescription($course);  
                         $coursedesc = $courseinfo{'description'};  
                     }  
                     $category = "Group portfolio files in the course '$coursedesc'";  
                 } else {  
                     $category = 'Portfolio files belonging to ';  
                     if ($env{'user.name'} eq 'public' &&   
                         $env{'user.domain'} eq 'public') {  
                         $category .= &plainname($uname,$udom);  
                     } else {  
                         $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);    
                     }  
                 }  
             } elsif ($activity eq 'groups') {  
                 $category = 'Groups in this course';  
             }  
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);  
             my $showend = &Apache::lonlocal::locallocaltime($endblock);  
             $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';  
             if (!($activity eq 'port' && !($ownitem) && !($is_course))) {   
                 $output .= &build_block_table($startblock,$endblock,\%setters);  
             }  
         }  
     }  
     if (wantarray) {  
         return ($blocked,$output);  
     } else {  
         return $blocked;  
     }      }
   
   // ]]>
   </script>
   END_MYBLOCK
     my $popupUrl = "/adm/blockingstatus/$querystring";
     $output .= <<"END_BLOCK";
   <div class='LC_comblock'>
     <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring'
     title='Communication Blocked'>
     <img class='LC_noBorder LC_middle' title='Communication Blocked' src='/res/adm/pages/comblock.png' alt='Communication Blocked'/></a>
     <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' 
     title='Communication Blocked'>Communication Blocked</a>
   </div>
   
   END_BLOCK
   
     return ($blocked, $output);
 }  }
   
 ###############################################  ###############################################
Line 4023  sub get_domainconf { Line 4063  sub get_domainconf {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                         foreach my $img (keys(%{$domconfig{'login'}{$key}})) {                          foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
                             $designhash{$udom.'.login.'.$key.'_'.$img} =                              $designhash{$udom.'.login.'.$key.'_'.$img} = 
                                 $domconfig{'login'}{$key}{$img};                                  $domconfig{'login'}{$key}{$img};
                         }                          }
                     } else {                      } else {
Line 4143  Returns: value of designparamter $which Line 4183  Returns: value of designparamter $which
 ##############################################  ##############################################
 sub designparm {  sub designparm {
     my ($which,$domain)=@_;      my ($which,$domain)=@_;
     if ($env{'browser.blackwhite'} eq 'on') {  
  if ($which=~/\.(font|alink|vlink|link|textcol)$/) {  
     return '#000000';  
  }  
  if ($which=~/\.(pgbg|sidebg|bgcol)$/) {  
     return '#FFFFFF';  
  }  
  if ($which=~/\.tabbg$/) {  
     return '#CCCCCC';  
  }  
     }  
     if (exists($env{'environment.color.'.$which})) {      if (exists($env{'environment.color.'.$which})) {
  return $env{'environment.color.'.$which};          return $env{'environment.color.'.$which};
     }      }
     $domain=&determinedomain($domain);      $domain=&determinedomain($domain);
     my %domdesign = &get_domainconf($domain);      my %domdesign = &get_domainconf($domain);
     my $output;      my $output;
     if ($domdesign{$domain.'.'.$which} ne '') {      if ($domdesign{$domain.'.'.$which} ne '') {
  $output = $domdesign{$domain.'.'.$which};          $output = $domdesign{$domain.'.'.$which};
     } else {      } else {
         $output = $defaultdesign{$which};          $output = $defaultdesign{$which};
     }      }
     if (($which =~ /^(student|coordinator|author|admin)\.img$/) ||      if (($which =~ /^(student|coordinator|author|admin)\.img$/) ||
         ($which =~ /login\.(img|logo|domlogo|login)/)) {          ($which =~ /login\.(img|logo|domlogo|login)/)) {
         if ($output =~ m{^/(adm|res)/}) {          if ($output =~ m{^/(adm|res)/}) {
     if ($output =~ m{^/res/}) {              if ($output =~ m{^/res/}) {
  my $local_name = &Apache::lonnet::filelocation('',$output);                  my $local_name = &Apache::lonnet::filelocation('',$output);
  &Apache::lonnet::repcopy($local_name);                  &Apache::lonnet::repcopy($local_name);
     }              }
             $output = &lonhttpdurl($output);              $output = &lonhttpdurl($output);
         }          }
     }      }
     return $output;      return $output;
 }  }
   
   ##############################################
   =pod
   
   =item * &authorspace()
   
   Inputs: ./.
   
   Returns: Path to the Construction Space of the current user's
            accessed author space
            The author space will be that of the current user
            when accessing the own author space
            and that of the co-author/assistent co-author
            when accessing the co-author's/assistent co-author's
            space
   
   =cut
   
   sub authorspace {
       my $caname = '';
       if ($env{'request.role'} =~ /^ca|^aa/) {
           (undef,$caname) =
               ($env{'request.role'}=~/($match_domain)\/($match_username)$/);
       } else {
           $caname = $env{'user.name'};
       }
       return '/priv/'.$caname.'/';
   }
   
   ##############################################
   =pod
   
   =item * &head_subbox()
   
   Inputs: $content (contains HTML code with page functions, etc.)
   
   Returns: HTML div with $content
            To be included in page header
   
   =cut
   
   sub head_subbox {
       my ($content)=@_;
       my $output =
           '<div id="LC_head_subbox">'
          .$content
          .'</div>'
   }
   
   ##############################################
   =pod
   
   =item * &CSTR_pageheader()
   
   Inputs: ./.
   
   Returns: HTML div with CSTR path and recent box
            To be included on Construction Space pages
   
   =cut
   
   sub CSTR_pageheader {
       # this is for resources; directories have customtitle, and crumbs
               # and select recent are created in lonpubdir.pm  
       my ($uname,$thisdisfn)=
           ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
       my $formaction='/priv/'.$uname.'/'.$thisdisfn;
       $formaction=~s/\/+/\//g;
   
       my $parentpath = '';
       my $lastitem = '';
       if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
           $parentpath = $1;
           $lastitem = $2;
       } else {
           $lastitem = $thisdisfn;
       }
       return
            '<div>'
           .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
           .'<b>'.&mt('Construction Space:').'</b> '
           .'<form name="dirs" method="post" action="'.$formaction
           .'" target="_top"><tt><b>' #FIXME lonpubdir: target="_parent"
           .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem</b></tt><br />"
           #FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />"
           .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
           .'</form>'
           .&Apache::lonmenu::constspaceform()
           .'</div>';
   }
   
 ###############################################  ###############################################
 ###############################################  ###############################################
   
Line 4210  Inputs: Line 4329  Inputs:
 =item * $forcereg, if page should register as content page (relevant for   =item * $forcereg, if page should register as content page (relevant for 
             text interface only)              text interface only)
   
 =item * $customtitle, alternate text to use instead of $title  =item * $no_nav_bar, if true, keep the 'what is this' info but remove the
                       in the title box that appears, this text                       navigational links
                       is not auto translated like the $title is  
   
 =item * $notopbar, if true, keep the 'what is this' info but remove the  
                    navigational links  
   
 =item * $bgcolor, used to override the bgcolor on a webpage to a specific value  =item * $bgcolor, used to override the bgcolor on a webpage to a specific value
   
 =item * $notitle, if true keep the nav controls, but remove the title bar  
   
 =item * $no_inline_link, if true and in remote mode, don't show the   =item * $no_inline_link, if true and in remote mode, don't show the 
          'Switch To Inline Menu' link           'Switch To Inline Menu' link
   
Line 4240  other decorations will be returned. Line 4353  other decorations will be returned.
 =cut  =cut
   
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
  $notopbar,$bgcolor,$notitle,$no_inline_link,$args)=@_;          $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;
   
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }      if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
   
Line 4286  sub bodytag { Line 4399  sub bodytag {
   
     if ($bodyonly) {      if ($bodyonly) {
         return $bodytag;          return $bodytag;
     } elsif ($env{'browser.interface'} eq 'textual') {      } 
 # Accessibility  
             
  $bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg);  
  if (!$notitle) {  
     $bodytag.='<h1>LON-CAPA: '.$title.'</h1>';  
  }  
  return $bodytag;  
     }  
   
     my $name = &plainname($env{'user.name'},$env{'user.domain'});      my $name = &plainname($env{'user.name'},$env{'user.domain'});
     if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {      if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
Line 4303  sub bodytag { Line 4408  sub bodytag {
  $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});   $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }      }
           
     my $roleinfo=(<<ENDROLE);      my $titleinfo = '<h1>'.$title.'</h1>';
 <td class="LC_title_bar_who">  
 <div class="LC_title_bar_name">  
     $name  
     &nbsp;  
 </div>  
 <div class="LC_title_bar_role">  
 $role&nbsp;  
 </div>  
 <div class="LC_title_bar_realm">  
 $realm&nbsp;  
 </div>  
 </td>  
 ENDROLE  
   
     my $titleinfo = '<span class="LC_title_bar_title">'.$title.'</span>';  
     if ($customtitle) {  
         $titleinfo = $customtitle;  
     }  
     #      #
     # Extra info if you are the DC      # Extra info if you are the DC
     my $dc_info = '';      my $dc_info = '';
Line 4334  ENDROLE Line 4421  ENDROLE
         $dc_info = '('.$dc_info.')';          $dc_info = '('.$dc_info.')';
     }      }
   
     if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) {      $role = "($role)" if $role;
       &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
   
       if ($env{'environment.remote'} eq 'off') {
         # No Remote          # No Remote
  if ($env{'request.state'} eq 'construct') {   if ($env{'request.state'} eq 'construct') {
     $forcereg=1;      $forcereg=1;
  }   }
   
  if (!$customtitle && $env{'request.state'} eq 'construct') {  #    if ($env{'request.state'} eq 'construct') {
     # this is for resources; directories have customtitle, and crumbs  #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
             # and select recent are created in lonpubdir.pm    #    }
     my ($uname,$thisdisfn)=  
  ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);          my $titletable = '<table id="LC_title_bar">'
     my $formaction='/priv/'.$uname.'/'.$thisdisfn;                          ."<tr><td> $titleinfo $dc_info</td>"
     $formaction=~s/\/+/\//g;                          .'</tr></table>';
   
     my $parentpath = '';   if ($no_nav_bar) {
     my $lastitem = '';  
     if ($thisdisfn =~ m-(.+/)([^/]*)$-) {  
  $parentpath = $1;  
  $lastitem = $2;  
     } else {  
  $lastitem = $thisdisfn;  
     }  
     $titleinfo =   
  &Apache::loncommon::help_open_menu('','',3,'Authoring')  
  .'<b>'.&mt('Construction Space').'</b>:&nbsp;'  
  .'<form name="dirs" method="post" action="'.$formaction  
  .'" target="_top"><tt><b>'  
  .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<font size=\"+1\">$lastitem</font></b></tt><br />"  
  .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')  
  .'</form>'  
  .&Apache::lonmenu::constspaceform();  
         }  
   
         my $titletable;  
  if (!$notitle) {  
     $titletable =  
  '<table id="LC_title_bar">'.  
                          "<tr><td> $titleinfo $dc_info</td>".$roleinfo.  
  '</tr></table>';  
  }  
  if ($notopbar) {  
     $bodytag .= $titletable;      $bodytag .= $titletable;
  } else {   } else {
           $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
               <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};
   
     if ($env{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable);
   $titletable);  
             } else {              } else {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable;
     $titletable;  
             }              }
         }          }
         return $bodytag;          return $bodytag;
Line 4400  ENDROLE Line 4465  ENDROLE
   
     # Explicit link to get inline menu      # Explicit link to get inline menu
     my $menu= ($no_inline_link?''      my $menu= ($no_inline_link?''
        :'<br /><a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');         :'<a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');
       $bodytag .= qq|<div id="LC_nav_bar">$name $role
               <em>$realm</em> $dc_info </div>
               <ol class="LC_smallMenu LC_right">
                   <li>$menu</li>
               </ol>| unless $env{'form.inhibitmenu'};
     #      #
     if ($notitle) {  
  return $bodytag;  
     }  
     return(<<ENDBODY);      return(<<ENDBODY);
 $bodytag  $bodytag
 <table id="LC_title_bar" class="LC_with_remote">  <table id="LC_title_bar" class="LC_with_remote">
 <tr><td class="LC_title_bar_role_logo">$upperleft</td>  <tr><td>$upperleft</td>
     <td class="LC_title_bar_domain_logo">$messages&nbsp;</td>      <td>$messages&nbsp;</td>
 </tr>  </tr>
 <tr><td>$titleinfo $dc_info $menu</td>  <tr><td>$titleinfo $dc_info $menu</td>
 $roleinfo  
 </tr>  </tr>
 </table>  </table>
 ENDBODY  ENDBODY
Line 4457  sub make_attr_string { Line 4523  sub make_attr_string {
  $attr_ref->{'style'}=$style.'; font-size: x-large;';   $attr_ref->{'style'}=$style.'; font-size: x-large;';
     }      }
   
     if ($env{'browser.blackwhite'} eq 'on') {  
  delete($attr_ref->{'font'});  
  delete($attr_ref->{'link'});  
  delete($attr_ref->{'alink'});  
  delete($attr_ref->{'vlink'});  
  delete($attr_ref->{'bgcolor'});  
  delete($attr_ref->{'background'});  
     }  
   
     my $attr_string;      my $attr_string;
     foreach my $attr (keys(%$attr_ref)) {      foreach my $attr (keys(%$attr_ref)) {
  $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';   $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';
Line 4526  sub standard_css { Line 4583  sub standard_css {
     my $img    = &designparm($function.'.img',   $domain);      my $img    = &designparm($function.'.img',   $domain);
     my $tabbg  = &designparm($function.'.tabbg', $domain);      my $tabbg  = &designparm($function.'.tabbg', $domain);
     my $font   = &designparm($function.'.font',  $domain);      my $font   = &designparm($function.'.font',  $domain);
       my $fontmenu = &designparm($function.'.fontmenu', $domain);
   #second colour for later usage
     my $sidebg = &designparm($function.'.sidebg',$domain);      my $sidebg = &designparm($function.'.sidebg',$domain);
     my $pgbg_or_bgcolor =      my $pgbg_or_bgcolor =
          $bgcolor ||           $bgcolor ||
Line 4535  sub standard_css { Line 4594  sub standard_css {
     my $vlink  = &designparm($function.'.vlink', $domain);      my $vlink  = &designparm($function.'.vlink', $domain);
     my $link   = &designparm($function.'.link',  $domain);      my $link   = &designparm($function.'.link',  $domain);
   
       my $loginbg = &designparm('login.sidebg',$domain);
       my $bgcol = &designparm('login.bgcol',$domain);
       my $textcol = &designparm('login.textcol',$domain);
   
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $sidebg;
     my $data_table_light     = '#EEEEEE';      my $data_table_light     = '#FAFAFA';
     my $data_table_dark      = '#DDDDDD';      my $data_table_dark      = '#F0F0F0';
     my $data_table_darker    = '#CCCCCC';      my $data_table_darker    = '#CCCCCC';
     my $data_table_highlight = '#FFFF00';      my $data_table_highlight = '#FFFF00';
     my $mail_new             = '#FFBB77';      my $mail_new             = '#FFBB77';
Line 4552  sub standard_css { Line 4615  sub standard_css {
     my $mail_other_hover     = '#669999';      my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';      my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';      my $feedback_link_bg     = '#BBBBBB';
     my $lg_border_color      = '#C8C8C8';      my $lg_border_color     = '#C8C8C8';
   
     my $border = ($env{'browser.type'} eq 'explorer' ||      my $border = ($env{'browser.type'} eq 'explorer' ||
   $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'    $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
Line 4560  sub standard_css { Line 4623  sub standard_css {
   
   
     return <<END;      return <<END;
 h1, h2, h3, th { font-family: $sans }  body {
 a:focus { color: red; background: yellow }      font-family: $sans;
 table.thinborder,     line-height:130%;
      font-size:0.83em;
      color:$font;
   }
   
 table.thinborder tr th {  a:link, a:visited { 
   border-style: solid;    font-size:100%; 
   border-width: 1px;  
   background: $tabbg;  
 }  }
 table.thinborder tr td {  
   border-style: solid;  a:focus { 
   border-width: 1px    color: red;
     background: yellow 
   }
   
   hr {
     clear: both;
     color: $tabbg;
     background-color: $tabbg;
     height: 3px;
     border: none;
   }
   
   form, .inline { 
      display: inline; 
   }
   
   .LC_right {
      text-align:right;
   }
   
   .LC_middle {
      vertical-align:middle;
   }
   
   /* just for tests */
   .LC_400Box {width:400px; }
   /* end */
   
   .LC_filename {
     font-family: $mono;
     white-space:pre;
   }
   
   .LC_fileicon {
     border: none;
     height: 1.3em;
     vertical-align: text-bottom;
     margin-right: 0.3em;
     text-decoration:none;
 }  }
   
 form, .inline { display: inline; }  
 .center { text-align: center; }  
 .LC_filename {font-family: $mono; white-space:pre;}  
 .LC_error {  .LC_error {
   color: red;    color: red;
   font-size: larger;    font-size: larger;
 }  }
   
 .LC_warning,  .LC_warning,
 .LC_diff_removed {  .LC_diff_removed {
   color: red;    color: red;
Line 4606  div.LC_confirm_box .LC_success img { Line 4706  div.LC_confirm_box .LC_success img {
   
 .LC_icon {  .LC_icon {
   border: none;    border: none;
     vertical-align: middle;
 }  }
 .LC_indexer_icon {  
   border: 0;  
   height: 22px;  
 }  
 .LC_docs_spacer {  .LC_docs_spacer {
   width: 25px;    width: 25px;
   height: 1px;    height: 1px;
Line 4621  div.LC_confirm_box .LC_success img { Line 4719  div.LC_confirm_box .LC_success img {
   color: #999999;    color: #999999;
 }  }
   
   .LC_discussion {
      background: $tabbg;
      border: 1px solid black;
      margin: 2px;
   }
   
   .LC_disc_action_links_bar {
      background: $tabbg;
      border: none;
      margin: 4px;
   }
   
   .LC_disc_action_left {
      text-align: left;
   }
   
   .LC_disc_action_right {
      text-align: right;
   }
   
   .LC_disc_new_item {
      background: white;
      border: 2px solid red;
      margin: 2px;
   }
   
   .LC_disc_old_item {
      background: white;
      border: 1px solid black;
      margin: 2px;
   }
   
 table.LC_pastsubmission {  table.LC_pastsubmission {
   border: 1px solid black;    border: 1px solid black;
   margin: 2px;    margin: 2px;
 }  }
   
 table#LC_top_nav, table#LC_menubuttons,table#LC_nav_location {  table#LC_top_nav,
   table#LC_menubuttons,
   table#LC_nav_location {
   width: 100%;    width: 100%;
   background: $pgbg;    background: $pgbg;
   border: 2px;    border: 2px;
Line 4634  table#LC_top_nav, table#LC_menubuttons,t Line 4766  table#LC_top_nav, table#LC_menubuttons,t
   padding: 0;    padding: 0;
 }  }
   
 table#LC_title_bar, table.LC_breadcrumbs,   table#LC_title_bar a {
     color: $fontmenu;
   }
   
   table#LC_title_bar {
     clear: both;
     display: none;
   }
   
   table#LC_title_bar,
   table.LC_breadcrumbs,
 table#LC_title_bar.LC_with_remote {  table#LC_title_bar.LC_with_remote {
   width: 100%;    width: 100%;
   border-color: $pgbg;    border-color: $pgbg;
   border-style: solid;    border-style: solid;
   border-width: $border;    border-width: $border;
   
   background: $pgbg;  
   font-family: $sans;  
   border-collapse: collapse;  
   padding: 0;  
 }  
   
 table.LC_docs_path {  
   width: 100%;  
   border: 0;  
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    color: $fontmenu;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0;    padding: 0;
     margin: 0;
 }  }
   
 table#LC_title_bar td {  table#LC_title_bar td {
   background: $tabbg;    background: $tabbg;
 }  }
 table#LC_title_bar td.LC_title_bar_who {  
   background: $tabbg;  
   color: $font;  
   font: small $sans;  
   text-align: right;  
 }  
 span.LC_metadata {  
     font-family: $sans;  
 }  
 span.LC_title_bar_title {  
   font: bold x-large $sans;  
 }  
 table#LC_title_bar td.LC_title_bar_domain_logo {  
   background: $sidebg;  
   text-align: right;  
   padding: 0;  
 }  
 table#LC_title_bar td.LC_title_bar_role_logo {  
   background: $sidebg;  
   padding: 0;  
 }  
   
 table#LC_menubuttons_mainmenu {  table#LC_menubuttons img{
   width: 100%;  
   border: 0;  
   border-spacing: 1px;  
   padding: 0 1px;  
   margin: 0;  
   border-collapse: separate;  
 }  
 table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {  
   border: none;    border: none;
 }  }
   
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
   border: none;    border: none;
   font-size: small;    font-size: small;
     vertical-align:top;
     padding:2px 5px 2px 5px;
 }  }
 table#LC_top_nav td a, div#LC_top_nav a {  
   table#LC_top_nav td a,
   div#LC_top_nav a {
   color: $font;    color: $font;
   font-family: $sans;  
 }  }
   
 table#LC_top_nav td.LC_top_nav_logo {  table#LC_top_nav td.LC_top_nav_logo {
   background: $tabbg;    background: $tabbg;
   text-align: left;    text-align: left;
   white-space: nowrap;    white-space: nowrap;
   width: 31px;    width: 31px;
 }  }
   
 table#LC_top_nav td.LC_top_nav_logo img {  table#LC_top_nav td.LC_top_nav_logo img {
   border: none;    border: none;
   vertical-align: bottom;    vertical-align: bottom;
 }  }
   
 table#LC_top_nav td.LC_top_nav_exit,  table#LC_top_nav td.LC_top_nav_exit,
 table#LC_top_nav td.LC_top_nav_help {  table#LC_top_nav td.LC_top_nav_help {
   width: 2.0em;    width: 2.0em;
 }  }
   
 table#LC_top_nav td.LC_top_nav_login {  table#LC_top_nav td.LC_top_nav_login {
   width: 4.0em;    width: 4.0em;
   text-align: center;    text-align: center;
 }  }
 table.LC_breadcrumbs td, table.LC_docs_path td  {  
   background: $tabbg;  .LC_breadcrumbs_component {
   color: $font;      float: right;
   font-family: $sans;      margin: 0 1em;
   font-size: smaller;  
 }  }
 table.LC_breadcrumbs td.LC_breadcrumbs_component,  .LC_breadcrumbs_component img {
 table.LC_docs_path td.LC_docs_path_component {      vertical-align: middle;
   background: $tabbg;  
   color: $font;  
   font-family: $sans;  
   font-size: larger;  
   text-align: right;  
 }  }
   
 td.LC_table_cell_checkbox {  td.LC_table_cell_checkbox {
   text-align: center;    text-align: center;
 }  }
   
 table#LC_mainmenu td.LC_mainmenu_column {  table#LC_mainmenu td.LC_mainmenu_column {
     vertical-align: top;      vertical-align: top;
 }  }
   
   .LC_fontsize_small {
    font-size: 70%;
   }
   
   #LC_breadcrumbs {
    clear:both;
    background: $sidebg;
    border-bottom: 1px solid $lg_border_color;
    line-height: 32px; 
    margin: 0;
    padding: 0;
   }
   
   /* Preliminary fix to hide breadcrumbs inside remote control window */
   #LC_remote #LC_breadcrumbs {
       display:none;
   }
   
   #LC_head_subbox {
    clear:both;
    background: #F8F8F8; /* $sidebg; */
    border-bottom: 1px solid $lg_border_color;
    margin: 0 0 10px 0;
    padding: 5px;
   }
   
   .LC_fontsize_medium {
    font-size: 85%;
   }
   
   .LC_fontsize_large {
    font-size: 120%;
   }
   
 .LC_menubuttons_inline_text {  .LC_menubuttons_inline_text {
   color: $font;    color: $font;
   font-family: $sans;    font-size: 90%;
   font-size: smaller;    padding-left:3px;
 }  }
   
 .LC_menubuttons_link {  .LC_menubuttons_link {
   text-decoration: none;    text-decoration: none;
 }  }
 /*2008--9-5: new menu style sheet.Changed category*/  
 .LC_menubuttons_category {  .LC_menubuttons_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;  
   font-size: larger;    font-size: larger;
   font-weight: bold;    font-weight: bold;
 }  }
   
 td.LC_menubuttons_text {  td.LC_menubuttons_text {
   width: 90%;    color: $font;
   color: $font;  
   font-family: $sans;  
 }  
   
 td.LC_menubuttons_img {  
 }  }
   
 .LC_current_location {  .LC_current_location {
   font-family: $sans;  
   background: $tabbg;    background: $tabbg;
 }  }
   
 .LC_new_mail {  .LC_new_mail {
   font-family: $sans;  
   background: $tabbg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
 }  }
   
 .LC_dropadd_labeltext {  table.LC_data_table,
   font-family: $sans;  table.LC_mail_list {
   text-align: right;  
 }  
   
 .LC_preferences_labeltext {  
   font-family: $sans;  
   text-align: right;  
 }  
   
 .LC_roleslog_note {  
   font-size: smaller;  
 }  
   
 .LC_mail_functions {  
     font-weight: bold;  
 }  
   
 table.LC_aboutme_port {  
   border: none;  
   border-collapse: collapse;  
   border-spacing: 0;  
 }  
 table.LC_data_table, table.LC_mail_list {  
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: separate;    border-collapse: separate;
   border-spacing: 1px;    border-spacing: 1px;
   background: $pgbg;    background: $pgbg;
 }  }
   
 .LC_data_table_dense {  .LC_data_table_dense {
   font-size: small;    font-size: small;
 }  }
   
 table.LC_nested_outer {  table.LC_nested_outer {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
   
   table.LC_innerpickbox,
 table.LC_nested {  table.LC_nested {
   border: none;    border: none;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
 table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th,  
 table.LC_prior_tries tr th {  table.LC_data_table tr th, 
   table.LC_calendar tr th, 
   table.LC_mail_list tr th,
   table.LC_prior_tries tr th,
   table.LC_innerpickbox tr th {
   font-weight: bold;    font-weight: bold;
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    color:$fontmenu;
     font-size:90%;
   }
   
   table.LC_innerpickbox tr th,
   table.LC_innerpickbox tr td {
     vertical-align: top;
 }  }
   
 table.LC_data_table tr.LC_info_row > td {  table.LC_data_table tr.LC_info_row > td {
   background-color: #CCCCCC;    background-color: #CCCCCC;
   font-weight: bold;    font-weight: bold;
   text-align: left;    text-align: left;
 }  }
 table.LC_data_table tr.LC_odd_row > td,   
 table.LC_pick_box tr > td.LC_odd_row,  table.LC_data_table tr.LC_odd_row > td,
 table.LC_aboutme_port tr td {  table.LC_pick_box tr > td.LC_odd_row {
   background-color: $data_table_light;    background-color: $data_table_light;
   padding: 2px;    padding: 2px;
 }  }
   
 table.LC_data_table tr.LC_even_row > td,  table.LC_data_table tr.LC_even_row > td,
 table.LC_pick_box tr > td.LC_even_row,  table.LC_pick_box tr > td.LC_even_row {
 table.LC_aboutme_port tr.LC_even_row td {  
   background-color: $data_table_dark;    background-color: $data_table_dark;
   padding: 2px;    padding: 2px;
 }  }
   
 table.LC_data_table tr.LC_data_table_highlight td {  table.LC_data_table tr.LC_data_table_highlight td {
   background-color: $data_table_darker;    background-color: $data_table_darker;
 }  }
   
 table.LC_data_table tr td.LC_leftcol_header {  table.LC_data_table tr td.LC_leftcol_header {
   background-color: $data_table_head;    background-color: $data_table_head;
   font-weight: bold;    font-weight: bold;
 }  }
   
 table.LC_data_table tr.LC_empty_row td,  table.LC_data_table tr.LC_empty_row td,
 table.LC_nested tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
   background-color: #FFFFFF;    background-color: #FFFFFF;
Line 4859  table.LC_nested tr.LC_empty_row td { Line 4990  table.LC_nested tr.LC_empty_row td {
   text-align: center;    text-align: center;
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_nested tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
   padding: 4ex    padding: 4ex
 }  }
   
 table.LC_nested_outer tr th {  table.LC_nested_outer tr th {
   font-weight: bold;    font-weight: bold;
     color:$fontmenu;
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size: small;
   border-bottom: 1px solid #000000;    border-bottom: 1px solid #000000;
 }  }
   
 table.LC_nested_outer tr td.LC_subheader {  table.LC_nested_outer tr td.LC_subheader {
   background-color: $data_table_head;    background-color: $data_table_head;
   font-weight: bold;    font-weight: bold;
Line 4875  table.LC_nested_outer tr td.LC_subheader Line 5010  table.LC_nested_outer tr td.LC_subheader
   border-bottom: 1px solid #000000;    border-bottom: 1px solid #000000;
   text-align: right;    text-align: right;
 }  }
   
 table.LC_nested tr.LC_info_row td {  table.LC_nested tr.LC_info_row td {
   background-color: #CCCCCC;    background-color: #CCCCCC;
   font-weight: bold;    font-weight: bold;
   font-size: small;    font-size: small;
   text-align: center;    text-align: center;
 }  }
   
 table.LC_nested tr.LC_info_row td.LC_left_item,  table.LC_nested tr.LC_info_row td.LC_left_item,
 table.LC_nested_outer tr th.LC_left_item {  table.LC_nested_outer tr th.LC_left_item {
   text-align: left;    text-align: left;
 }  }
   
 table.LC_nested td {  table.LC_nested td {
   background-color: #FFFFFF;    background-color: #FFFFFF;
   font-size: small;    font-size: small;
 }  }
   
 table.LC_nested_outer tr th.LC_right_item,  table.LC_nested_outer tr th.LC_right_item,
 table.LC_nested tr.LC_info_row td.LC_right_item,  table.LC_nested tr.LC_info_row td.LC_right_item,
 table.LC_nested tr.LC_odd_row td.LC_right_item,  table.LC_nested tr.LC_odd_row td.LC_right_item,
Line 4904  table.LC_createuser { Line 5043  table.LC_createuser {
 }  }
   
 table.LC_createuser tr.LC_section_row td {  table.LC_createuser tr.LC_section_row td {
   font-size: smaller;    font-size: small;
 }  }
   
 table.LC_createuser tr.LC_info_row td  {  table.LC_createuser tr.LC_info_row td  {
Line 4917  table.LC_calendar { Line 5056  table.LC_calendar {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
 table.LC_calendar_pickdate {  table.LC_calendar_pickdate {
   font-size: xx-small;    font-size: xx-small;
 }  }
   
 table.LC_calendar tr td {  table.LC_calendar tr td {
   border: 1px solid #000000;    border: 1px solid #000000;
   vertical-align: top;    vertical-align: top;
 }  }
   
 table.LC_calendar tr td.LC_calendar_day_empty {  table.LC_calendar tr td.LC_calendar_day_empty {
   background-color: $data_table_dark;    background-color: $data_table_dark;
 }  }
   
 table.LC_calendar tr td.LC_calendar_day_current {  table.LC_calendar tr td.LC_calendar_day_current {
   background-color: $data_table_highlight;    background-color: $data_table_highlight;
 }  }
Line 4934  table.LC_calendar tr td.LC_calendar_day_ Line 5077  table.LC_calendar tr td.LC_calendar_day_
 table.LC_mail_list tr.LC_mail_new {  table.LC_mail_list tr.LC_mail_new {
   background-color: $mail_new;    background-color: $mail_new;
 }  }
   
 table.LC_mail_list tr.LC_mail_new:hover {  table.LC_mail_list tr.LC_mail_new:hover {
   background-color: $mail_new_hover;    background-color: $mail_new_hover;
 }  }
   
   table.LC_mail_list tr.LC_mail_even {
   }
   
   table.LC_mail_list tr.LC_mail_odd {
   }
   
 table.LC_mail_list tr.LC_mail_read {  table.LC_mail_list tr.LC_mail_read {
   background-color: $mail_read;    background-color: $mail_read;
 }  }
   
 table.LC_mail_list tr.LC_mail_read:hover {  table.LC_mail_list tr.LC_mail_read:hover {
   background-color: $mail_read_hover;    background-color: $mail_read_hover;
 }  }
   
 table.LC_mail_list tr.LC_mail_replied {  table.LC_mail_list tr.LC_mail_replied {
   background-color: $mail_replied;    background-color: $mail_replied;
 }  }
   
 table.LC_mail_list tr.LC_mail_replied:hover {  table.LC_mail_list tr.LC_mail_replied:hover {
   background-color: $mail_replied_hover;    background-color: $mail_replied_hover;
 }  }
   
 table.LC_mail_list tr.LC_mail_other {  table.LC_mail_list tr.LC_mail_other {
   background-color: $mail_other;    background-color: $mail_other;
 }  }
   
 table.LC_mail_list tr.LC_mail_other:hover {  table.LC_mail_list tr.LC_mail_other:hover {
   background-color: $mail_other_hover;    background-color: $mail_other_hover;
 }  }
 table.LC_mail_list tr.LC_mail_even {  
 }  
 table.LC_mail_list tr.LC_mail_odd {  
 }  
   
   
 table#LC_portfolio_actions {  
   width: auto;  
   background: $pgbg;  
   border: none;  
   border-spacing: 2px 2px;  
   padding: 0;  
   margin: 0;  
   border-collapse: separate;  
 }  
 table#LC_portfolio_actions td.LC_label {  
   background: $tabbg;  
   text-align: right;  
 }  
 table#LC_portfolio_actions td.LC_value {  
   background: $tabbg;  
 }  
   
 table#LC_cstr_controls {  table.LC_data_table tr > td.LC_browser_file,
   width: 100%;  table.LC_data_table tr > td.LC_browser_file_published {
   border-collapse: collapse;  
 }  
 table#LC_cstr_controls tr td {  
   border: 4px solid $pgbg;  
   padding: 4px;  
   text-align: center;  
   background: $tabbg;  
 }  
 table#LC_cstr_controls tr th {  
   border: 4px solid $pgbg;  
   background: $table_header;  
   text-align: center;  
   font-family: $sans;  
   font-size: smaller;  
 }  
   
 table#LC_browser {  
    
 }  
 table#LC_browser tr th {  
   background: $table_header;  
 }  
 table#LC_browser tr td {  
   padding: 2px;  
 }  
 table#LC_browser tr.LC_browser_file,  
 table#LC_browser tr.LC_browser_file_published {  
   background: #CCFF88;    background: #CCFF88;
 }  }
 table#LC_browser tr.LC_browser_file_locked,  
 table#LC_browser tr.LC_browser_file_unpublished {  table.LC_data_table tr > td.LC_browser_file_locked,
   table.LC_data_table tr > td.LC_browser_file_unpublished {
   background: #FFAA99;    background: #FFAA99;
 }  }
 table#LC_browser tr.LC_browser_file_obsolete {  
   table.LC_data_table tr > td.LC_browser_file_obsolete {
   background: #AAAAAA;    background: #AAAAAA;
 }  }
 table#LC_browser tr.LC_browser_file_modified,  
 table#LC_browser tr.LC_browser_file_metamodified {  table.LC_data_table tr > td.LC_browser_file_modified,
   table.LC_data_table tr > td.LC_browser_file_metamodified {
   background: #FFFF77;    background: #FFFF77;
 }  }
 table#LC_browser tr.LC_browser_folder {  
   table.LC_data_table tr.LC_browser_folder > td {
   background: #CCCCFF;    background: #CCCCFF;
 }  }
   
 table.LC_data_table tr > td.LC_roles_is {  table.LC_data_table tr > td.LC_roles_is {
 /*  background: #77FF77; */  /*  background: #77FF77; */
 }  }
   
 table.LC_data_table tr > td.LC_roles_future {  table.LC_data_table tr > td.LC_roles_future {
   background: #FFFF77;    background: #FFFF77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_will {  table.LC_data_table tr > td.LC_roles_will {
   background: #FFAA77;    background: #FFAA77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_expired {  table.LC_data_table tr > td.LC_roles_expired {
   background: #FF7777;    background: #FF7777;
 }  }
   
 table.LC_data_table tr > td.LC_roles_will_not {  table.LC_data_table tr > td.LC_roles_will_not {
   background: #AAFF77;    background: #AAFF77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_selected {  table.LC_data_table tr > td.LC_roles_selected {
   background: #11CC55;    background: #11CC55;
 }  }
   
 span.LC_current_location {  span.LC_current_location {
   font-size: x-large;    font-size:larger;
   background: $pgbg;    background: $pgbg;
 }  }
   
 span.LC_parm_menu_item {  span.LC_parm_menu_item {
   font-size: larger;    font-size: larger;
   font-family: $sans;  
 }  }
   
 span.LC_parm_scope_all {  span.LC_parm_scope_all {
   color: red;    color: red;
 }  }
   
 span.LC_parm_scope_folder {  span.LC_parm_scope_folder {
   color: green;    color: green;
 }  }
   
 span.LC_parm_scope_resource {  span.LC_parm_scope_resource {
   color: orange;    color: orange;
 }  }
   
 span.LC_parm_part {  span.LC_parm_part {
   color: blue;    color: blue;
 }  }
   
 span.LC_parm_folder, span.LC_parm_symb {  span.LC_parm_folder, span.LC_parm_symb {
   font-size: x-small;    font-size: x-small;
   font-family: $mono;    font-family: $mono;
   color: #AAAAAA;    color: #AAAAAA;
 }  }
   
 td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu,  td.LC_parm_overview_level_menu,
 td.LC_parm_overview_parm_selectors, td.LC_parm_overview_parm_restrictions {  td.LC_parm_overview_map_menu,
   td.LC_parm_overview_parm_selectors,
   td.LC_parm_overview_restrictions  {
   border: 1px solid black;    border: 1px solid black;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
 table.LC_parm_overview_restrictions td {  table.LC_parm_overview_restrictions td {
   border-width: 1px 4px 1px 4px;    border-width: 1px 4px 1px 4px;
   border-style: solid;    border-style: solid;
   border-color: $pgbg;    border-color: $pgbg;
   text-align: center;    text-align: center;
 }  }
   
 table.LC_parm_overview_restrictions th {  table.LC_parm_overview_restrictions th {
   background: $tabbg;    background: $tabbg;
   border-width: 1px 4px 1px 4px;    border-width: 1px 4px 1px 4px;
   border-style: solid;    border-style: solid;
   border-color: $pgbg;    border-color: $pgbg;
 }  }
   
 table#LC_helpmenu {  table#LC_helpmenu {
   border: none;    border: none;
   height: 55px;    height: 55px;
Line 5095  table#LC_helpmenu { Line 5220  table#LC_helpmenu {
   
 table#LC_helpmenu fieldset legend {  table#LC_helpmenu fieldset legend {
   font-size: larger;    font-size: larger;
   font-weight: bold;  
 }  }
   
 table#LC_helpmenu_links {  table#LC_helpmenu_links {
   width: 100%;    width: 100%;
   border: 1px solid black;    border: 1px solid black;
Line 5104  table#LC_helpmenu_links { Line 5229  table#LC_helpmenu_links {
   padding: 0;    padding: 0;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
 table#LC_helpmenu_links tr td {  table#LC_helpmenu_links tr td {
   padding: 1px;    padding: 1px;
   background: $tabbg;    background: $tabbg;
Line 5111  table#LC_helpmenu_links tr td { Line 5237  table#LC_helpmenu_links tr td {
   font-weight: bold;    font-weight: bold;
 }  }
   
 table#LC_helpmenu_links a:link, table#LC_helpmenu_links a:visited,  table#LC_helpmenu_links a:link,
   table#LC_helpmenu_links a:visited,
 table#LC_helpmenu_links a:active {  table#LC_helpmenu_links a:active {
   text-decoration: none;    text-decoration: none;
   color: $font;    color: $font;
 }  }
   
 table#LC_helpmenu_links a:hover {  table#LC_helpmenu_links a:hover {
   text-decoration: underline;    text-decoration: underline;
   color: $vlink;    color: $vlink;
Line 5125  table#LC_helpmenu_links a:hover { Line 5253  table#LC_helpmenu_links a:hover {
   border: 1px solid #339933;    border: 1px solid #339933;
   margin: -1px;    margin: -1px;
 }  }
   
 .LC_chrt_popup_up {  .LC_chrt_popup_up {
   border: 1px solid yellow;    border: 1px solid yellow;
   margin: -1px;    margin: -1px;
 }  }
   
 .LC_chrt_popup {  .LC_chrt_popup {
   border: 1px solid #8888FF;    border: 1px solid #8888FF;
   background: #CCCCFF;    background: #CCCCFF;
 }  }
   
 table.LC_pick_box {  table.LC_pick_box {
   border-collapse: separate;    border-collapse: separate;
   background: white;    background: white;
   border: 1px solid black;    border: 1px solid black;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
 table.LC_pick_box td.LC_pick_box_title {  table.LC_pick_box td.LC_pick_box_title {
   background: $tabbg;    background: $sidebg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   vertical-align: top;    vertical-align: top;
   width: 184px;    width: 184px;
   padding: 8px;    padding: 8px;
 }  }
 table.LC_pick_box td.LC_selfenroll_pick_box_title {  
   background: $tabbg;  
   font-weight: bold;  
   text-align: right;  
   width: 350px;  
   padding: 8px;  
 }  
   
 table.LC_pick_box td.LC_pick_box_value {  table.LC_pick_box td.LC_pick_box_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_pick_box td.LC_pick_box_select {  table.LC_pick_box td.LC_pick_box_select {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_pick_box td.LC_pick_box_separator {  table.LC_pick_box td.LC_pick_box_separator {
   padding: 0;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
   
 table.LC_pick_box td.LC_pick_box_submit {  table.LC_pick_box td.LC_pick_box_submit {
   text-align: right;    text-align: right;
 }  }
   
 table.LC_pick_box td.LC_evenrow_value {  table.LC_pick_box td.LC_evenrow_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
   
 table.LC_pick_box td.LC_oddrow_value {  table.LC_pick_box td.LC_oddrow_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
   
 table.LC_helpform_receipt {  table.LC_helpform_receipt {
   width: 620px;    width: 620px;
   border-collapse: separate;    border-collapse: separate;
Line 5188  table.LC_helpform_receipt { Line 5319  table.LC_helpform_receipt {
   border: 1px solid black;    border: 1px solid black;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
 table.LC_helpform_receipt td.LC_pick_box_title {  table.LC_helpform_receipt td.LC_pick_box_title {
   background: $tabbg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
Line 5195  table.LC_helpform_receipt td.LC_pick_box Line 5327  table.LC_helpform_receipt td.LC_pick_box
   width: 184px;    width: 184px;
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_helpform_receipt td.LC_evenrow_value {  table.LC_helpform_receipt td.LC_evenrow_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
   
 table.LC_helpform_receipt td.LC_oddrow_value {  table.LC_helpform_receipt td.LC_oddrow_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
   
 table.LC_helpform_receipt td.LC_pick_box_separator {  table.LC_helpform_receipt td.LC_pick_box_separator {
   padding: 0;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
   
 span.LC_helpform_receipt_cat {  span.LC_helpform_receipt_cat {
   font-weight: bold;    font-weight: bold;
 }  }
   
 table.LC_group_priv_box {  table.LC_group_priv_box {
   background: white;    background: white;
   border: 1px solid black;    border: 1px solid black;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
 table.LC_group_priv_box td.LC_pick_box_title {  table.LC_group_priv_box td.LC_pick_box_title {
   background: $tabbg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   width: 184px;    width: 184px;
 }  }
   
 table.LC_group_priv_box td.LC_groups_fixed {  table.LC_group_priv_box td.LC_groups_fixed {
   background: $data_table_light;    background: $data_table_light;
   text-align: center;    text-align: center;
 }  }
   
 table.LC_group_priv_box td.LC_groups_optional {  table.LC_group_priv_box td.LC_groups_optional {
   background: $data_table_dark;    background: $data_table_dark;
   text-align: center;    text-align: center;
 }  }
   
 table.LC_group_priv_box td.LC_groups_functionality {  table.LC_group_priv_box td.LC_groups_functionality {
   background: $data_table_darker;    background: $data_table_darker;
   text-align: center;    text-align: center;
   font-weight: bold;    font-weight: bold;
 }  }
   
 table.LC_group_priv td {  table.LC_group_priv td {
   text-align: left;    text-align: left;
   padding: 0;    padding: 0;
Line 5247  table.LC_notify_front_page { Line 5389  table.LC_notify_front_page {
   border: 1px solid black;    border: 1px solid black;
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_notify_front_page td {  table.LC_notify_front_page td {
   padding: 8px;    padding: 8px;
 }  }
   
 .LC_navbuttons {  .LC_navbuttons {
   margin: 2ex 0ex 2ex 0ex;    margin: 2ex 0ex 2ex 0ex;
 }  }
   
 .LC_topic_bar {  .LC_topic_bar {
   font-family: $sans;  
   font-weight: bold;    font-weight: bold;
   width: 100%;    width: 100%;
   background: $tabbg;    background: $tabbg;
Line 5262  table.LC_notify_front_page td { Line 5406  table.LC_notify_front_page td {
   margin: 2ex 0ex 2ex 0ex;    margin: 2ex 0ex 2ex 0ex;
   padding: 3px;    padding: 3px;
 }  }
   
 .LC_topic_bar span {  .LC_topic_bar span {
   vertical-align: middle;    vertical-align: middle;
 }  }
   
 .LC_topic_bar img {  .LC_topic_bar img {
   vertical-align: bottom;    vertical-align: bottom;
 }  }
   
 table.LC_course_group_status {  table.LC_course_group_status {
   margin: 20px;    margin: 20px;
 }  }
   
 table.LC_status_selector td {  table.LC_status_selector td {
   vertical-align: top;    vertical-align: top;
   text-align: center;    text-align: center;
   padding: 4px;    padding: 4px;
 }  }
 table.LC_descriptive_input td.LC_description {  
   vertical-align: top;  
   text-align: right;  
   font-weight: bold;  
 }  
 div.LC_feedback_link {  div.LC_feedback_link {
   clear: both;    clear: both;
   background: white;    background: $sidebg;
   width: 100%;      width: 100%;
     padding-bottom: 10px;
     border: 1px $tabbg solid;
     height: 22px;
     line-height: 22px;
     padding-top: 5px;
   }
   
   div.LC_feedback_link img {
     height: 22px;
     vertical-align:middle;
   }
   
   div.LC_feedback_link a{
     text-decoration: none;
   }
   
   div.LC_comblock {
     display:inline; 
     color:$font;
     font-size:90%;
   }
   
   div.LC_feedback_link div.LC_comblock {
     padding-left:5px;
   }
   
   div.LC_feedback_link div.LC_comblock a {
     color:$font;
 }  }
   
 span.LC_feedback_link {  span.LC_feedback_link {
   background: $feedback_link_bg;    /* background: $feedback_link_bg; */
   font-size: larger;    font-size: larger;
 }  }
   
 span.LC_message_link {  span.LC_message_link {
   background: $feedback_link_bg;    /* background: $feedback_link_bg; */
   font-size: larger;    font-size: larger;
   position: absolute;    position: absolute;
   right: 1em;    right: 1em;
Line 5308  table.LC_prior_tries td { Line 5482  table.LC_prior_tries td {
 }  }
   
 .LC_answer_correct {  .LC_answer_correct {
   background: #AAFFAA;    background: lightgreen;
   color: black;    color: darkgreen;
     padding: 6px;
 }  }
   
 .LC_answer_charged_try {  .LC_answer_charged_try {
   background: #FFAAAA ! important;    background: #FFAAAA;
   color: black;    color: darkred;
     padding: 6px;
 }  }
 .LC_answer_not_charged_try,   
   .LC_answer_not_charged_try,
 .LC_answer_no_grade,  .LC_answer_no_grade,
 .LC_answer_late {  .LC_answer_late {
   background: #FFFFAA;    background: lightyellow;
   color: black;    color: black;
     padding: 6px;
 }  }
   
 .LC_answer_previous {  .LC_answer_previous {
   background: #AAAAFF;    background: lightblue;
   color: black;    color: darkblue;
     padding: 6px;
 }  }
   
 .LC_answer_no_message {  .LC_answer_no_message {
   background: #FFFFFF;    background: #FFFFFF;
   color: black;    color: black;
     padding: 6px;
 }  }
   
 .LC_answer_unknown {  .LC_answer_unknown {
   background: orange;    background: orange;
   color: black;    color: black;
     padding: 6px;
 }  }
   
   
 span.LC_prior_numerical,  span.LC_prior_numerical,
 span.LC_prior_string,  span.LC_prior_string,
 span.LC_prior_custom,  span.LC_prior_custom,
Line 5353  table.LC_prior_option { Line 5537  table.LC_prior_option {
   width: 100%;    width: 100%;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
 table.LC_prior_rank, table.LC_prior_match {  
   table.LC_prior_rank, 
   table.LC_prior_match {
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
 table.LC_prior_option tr td,  table.LC_prior_option tr td,
 table.LC_prior_rank tr td,  table.LC_prior_rank tr td,
 table.LC_prior_match tr td {  table.LC_prior_match tr td {
   border: 1px solid #000000;    border: 1px solid #000000;
 }  }
   
 span.LC_nobreak {  .LC_nobreak {
   white-space: nowrap;    white-space: nowrap;
 }  }
   
Line 5386  table.LC_docs_documents td.LC_docs_docum Line 5573  table.LC_docs_documents td.LC_docs_docum
   padding: 4px;    padding: 4px;
 }  }
   
 .LC_docs_course_commands div {  div.LC_docs_entry_move {
   float: left;    border: 1px solid #BBBBBB;
   border: 4px solid #AAAAAA;  
   padding: 4px;  
   background: #DDDDCC;  
 }  
   
 .LC_docs_entry_move {  
   border: none;  
   border-collapse: collapse;  
 }  
   
 .LC_docs_entry_move td {  
   border: 2px solid #BBBBBB;  
   background: #DDDDDD;    background: #DDDDDD;
     width: 22px;
     padding: 1px;
     margin: 0;
 }  }
   
 .LC_docs_editor td.LC_docs_entry_commands {  table.LC_data_table tr > td.LC_docs_entry_commands,
   table.LC_data_table tr > td.LC_docs_entry_parameter {
   background: #DDDDDD;    background: #DDDDDD;
   font-size: x-small;    font-size: x-small;
 }  }
   
   .LC_docs_entry_parameter {
     white-space: nowrap;
   }
   
 .LC_docs_copy {  .LC_docs_copy {
   color: #000099;    color: #000099;
 }  }
   
 .LC_docs_cut {  .LC_docs_cut {
   color: #550044;    color: #550044;
 }  }
   
 .LC_docs_rename {  .LC_docs_rename {
   color: #009900;    color: #009900;
 }  }
   
 .LC_docs_remove {  .LC_docs_remove {
   color: #990000;    color: #990000;
 }  }
Line 5425  table.LC_docs_documents td.LC_docs_docum Line 5612  table.LC_docs_documents td.LC_docs_docum
   font-size: x-small;    font-size: x-small;
 }  }
   
 .LC_docs_editor td.LC_docs_entry_title,  
 .LC_docs_editor td.LC_docs_entry_icon {  
   background: #FFFFBB;  
 }  
 .LC_docs_editor td.LC_docs_entry_parameter {  
   background: #BBBBFF;  
   font-size: x-small;  
   white-space: nowrap;  
 }  
   
 table.LC_docs_adddocs td,  table.LC_docs_adddocs td,
 table.LC_docs_adddocs th {  table.LC_docs_adddocs th {
   border: 1px solid #BBBBBB;    border: 1px solid #BBBBBB;
Line 5445  table.LC_docs_adddocs th { Line 5622  table.LC_docs_adddocs th {
 table.LC_sty_begin {  table.LC_sty_begin {
   background: #BBFFBB;    background: #BBFFBB;
 }  }
   
 table.LC_sty_end {  table.LC_sty_end {
   background: #FFBBBB;    background: #FFBBBB;
 }  }
Line 5465  table.LC_double_column tr td.LC_left_col Line 5643  table.LC_double_column tr td.LC_left_col
   
 table.LC_double_column tr td.LC_right_col {  table.LC_double_column tr td.LC_right_col {
   top: 2px;    top: 2px;
   right: 2px;     right: 2px;
   width: 47%;    width: 47%;
   vertical-align: top;    vertical-align: top;
 }  }
   
 span.LC_role_level {  
   font-weight: bold;  
 }  
   
 div.LC_left_float {  div.LC_left_float {
   float: left;    float: left;
   padding-right: 5%;    padding-right: 5%;
Line 5489  div.LC_clear_float_footer { Line 5663  div.LC_clear_float_footer {
   clear: both;    clear: both;
 }  }
   
   
 div.LC_grade_select_mode {  
   font-family: $sans;  
 }  
 div.LC_grade_select_mode div div {  
   margin: 5px;  
 }  
 div.LC_grade_select_mode_selector {  
   margin: 5px;  
   float: left;  
 }  
 div.LC_grade_select_mode_selector_header {  
   font: bold medium $sans;  
 }  
 div.LC_grade_select_mode_type {  
   clear: left;  
 }  
   
 div.LC_grade_show_user {  div.LC_grade_show_user {
   margin-top: 20px;    margin-top: 20px;
   border: 1px solid black;    border: 1px solid black;
 }  }
   
 div.LC_grade_user_name {  div.LC_grade_user_name {
   background: #DDDDEE;    background: #DDDDEE;
   border-bottom: 1px solid black;    border-bottom: 1px solid black;
   font: bold large $sans;    font-weight: bold;
     font-size: large;
 }  }
   
 div.LC_grade_show_user_odd_row div.LC_grade_user_name {  div.LC_grade_show_user_odd_row div.LC_grade_user_name {
   background: #DDEEDD;    background: #DDEEDD;
 }  }
Line 5529  div.LC_grade_assign { Line 5688  div.LC_grade_assign {
   width: 99%;    width: 99%;
   background: #FFFFFF;    background: #FFFFFF;
 }  }
   
 div.LC_grade_show_problem_header,  div.LC_grade_show_problem_header,
 div.LC_grade_submissions_header,  div.LC_grade_submissions_header,
 div.LC_grade_message_center_header,  div.LC_grade_message_center_header,
 div.LC_grade_assign_header {  div.LC_grade_assign_header {
   font: bold large $sans;    font-weight: bold;
     font-size: large;
 }  }
   
 div.LC_grade_show_problem_problem,  div.LC_grade_show_problem_problem,
 div.LC_grade_submissions_body,  div.LC_grade_submissions_body,
 div.LC_grade_message_center_body,  div.LC_grade_message_center_body,
Line 5543  div.LC_grade_assign_body { Line 5705  div.LC_grade_assign_body {
   width: 99%;    width: 99%;
   background: #FFFFFF;    background: #FFFFFF;
 }  }
   
 span.LC_grade_check_note {  span.LC_grade_check_note {
   font: normal medium $sans;    font-weight: normal;
     font-size: medium;
   display: inline;    display: inline;
   position: absolute;    position: absolute;
   right: 1em;    right: 1em;
Line 5553  span.LC_grade_check_note { Line 5717  span.LC_grade_check_note {
 table.LC_scantron_action {  table.LC_scantron_action {
   width: 100%;    width: 100%;
 }  }
   
 table.LC_scantron_action tr th {  table.LC_scantron_action tr th {
   font: normal bold $sans;    font-weight:bold;
     font-style:normal;
 }  }
   
 div.LC_edit_problem_header,   .LC_edit_problem_header,
 div.LC_edit_problem_footer {  div.LC_edit_problem_footer {
   font: normal medium $sans;    font-weight: normal;
     font-size:  medium;
   margin: 2px;    margin: 2px;
 }  }
   
 div.LC_edit_problem_header,  div.LC_edit_problem_header,
 div.LC_edit_problem_header div,  div.LC_edit_problem_header div,
 div.LC_edit_problem_footer,  div.LC_edit_problem_footer,
Line 5570  div.LC_edit_problem_editxml_header, Line 5738  div.LC_edit_problem_editxml_header,
 div.LC_edit_problem_editxml_header div {  div.LC_edit_problem_editxml_header div {
   margin-top: 5px;    margin-top: 5px;
 }  }
 div.LC_edit_problem_header_edit_row {  
   background: $tabbg;  
   padding: 3px;  
   margin-bottom: 5px;  
 }  
 div.LC_edit_problem_header_title {  div.LC_edit_problem_header_title {
   font: larger bold $sans;    font-weight: bold;
     font-size: larger;
   background: $tabbg;    background: $tabbg;
   padding: 3px;    padding: 3px;
 }  }
   
 table.LC_edit_problem_header_title {  table.LC_edit_problem_header_title {
   font: larger bold $sans;    font-size: larger;
     font-weight:  bold;
   width: 100%;    width: 100%;
   border-color: $pgbg;    border-color: $pgbg;
   border-style: solid;    border-style: solid;
   border-width: $border;    border-width: $border;
   
   background: $tabbg;    background: $tabbg;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0;    padding: 0;
Line 5596  div.LC_edit_problem_discards { Line 5762  div.LC_edit_problem_discards {
   float: left;    float: left;
   padding-bottom: 5px;    padding-bottom: 5px;
 }  }
   
 div.LC_edit_problem_saves {  div.LC_edit_problem_saves {
   float: right;    float: right;
   padding-bottom: 5px;    padding-bottom: 5px;
 }  }
 hr.LC_edit_problem_divide {  
   clear: both;  
   color: $tabbg;  
   background-color: $tabbg;  
   height: 3px;  
   border: none;  
 }  
 img.stift{  img.stift{
   border-width:0;    border-width: 0;
   vertical-align:middle;    vertical-align: middle;
 }  }
   
 table#LC_mainmenu{  table#LC_mainmenu{
  margin-top:10px;   margin-top:10px;
  width:80%;   width:80%;
   
 }  }
   
 table#LC_mainmenu td.LC_mainmenu_col_fieldset{  table#LC_mainmenu td.LC_mainmenu_col_fieldset{
   vertical-align: top;    vertical-align: top;
   width: 45%;    width: 45%;
 }  }
   
 .LC_mainmenu_fieldset_category {  .LC_mainmenu_fieldset_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;  
   font-size: small;    font-size: small;
   font-weight: bold;    font-weight: bold;
 }  }
 fieldset#LC_mainmenu_fieldset {  
   margin:0 10px 10px 0;  
   
 }  
   
 div.LC_createcourse {  div.LC_createcourse {
     margin: 10px 10px 10px 10px;      margin: 10px 10px 10px 10px;
 }  }
   
   /* ---- Remove when done ----
   # The following styles is part of the redesign of LON-CAPA and are
   # subject to change during this project.
   # Don't rely on their current functionality as they might be 
   # changed or removed.
   # --------------------------*/
   
   a:hover,
   ol.LC_smallMenu a:hover,
   ol#LC_MenuBreadcrumbs a:hover,
   ol#LC_PathBreadcrumbs a:hover,
   ul#LC_TabMainMenuContent a:hover,
   .LC_FormSectionClearButton input:hover
   ul.LC_TabContent   li:hover a {
    color:#BF2317;
           text-decoration:none;
   }
   
   h1 {
    padding: 0;
    line-height:130%;
   }
   
   h2,h3,h4,h5,h6 {
    margin: 5px 0 5px 0;
    padding: 0;
    line-height:130%;
   }
   
   .LC_hcell {
           padding:3px 15px 3px 15px;
           margin: 0;
    background-color:$tabbg;
    color:$fontmenu;
    border-bottom:solid 1px $lg_border_color;
   }
   
   .LC_Box > .LC_hcell {
       margin: 0 -10px 10px -10px;
   }
   
   .LC_noBorder {
           border: 0;
   }
   
   .LC_Right {
           float: right;
           margin: 0;
           padding: 0;
   }
   
   .LC_FormSectionClearButton input {
           background-color:transparent;
           border: none;
           cursor:pointer;
           text-decoration:underline;
   }
   
   .LC_help_open_topic {
           color: #FFFFFF;
           background-color: #EEEEFF;
           margin: 1px;
           padding: 4px;
           border: 1px solid #000033;
           white-space: nowrap;
   /* vertical-align: middle; */
   }
   
   dl,ul,div,fieldset {
    margin: 10px 10px 10px 0;
   /* overflow: hidden; */
   }
   
   fieldset > legend {
       font-weight: bold;
       padding: 0 5px 0 5px;
   }
   
   #LC_nav_bar {
       float: left;
       margin: 0.2em 0 0 0;
   }
   
   #LC_nav_bar em{
       font-weight: bold;
       font-style: normal;
   }
   
   ol.LC_smallMenu {
       float: right;
       margin: 0.2em 0 0 0;
   }
   
   ol#LC_PathBreadcrumbs {
    margin: 0;
   }
   
   ol.LC_smallMenu li {
    display: inline;
    padding: 5px 5px 0 10px;
    vertical-align: top;
   }
   
   ol.LC_smallMenu li img {
    vertical-align: bottom;
   }
   
   ol.LC_smallMenu a {
    font-size: 90%;
    color: RGB(80, 80, 80);
    text-decoration: none;
   }
   
   ul#LC_TabMainMenuContent {
       clear: both;
       color: $fontmenu;
       background: $tabbg;
       list-style: none;
       padding: 0;
       margin: 0;
       width: 100%;
   }
   
   ul#LC_TabMainMenuContent li {
       font-weight: bold;
       line-height: 1.8em;
       padding: 0 0.8em; 
       border-right: 1px solid black;
       display: inline;
       vertical-align: middle;
   }
   
   ul.LC_TabContent {
    display:block;
    background: $sidebg;
    border-bottom: solid 1px $lg_border_color;
    list-style:none;
    margin: 0 -10px;
    padding: 0;
   }
   
   ul.LC_TabContent li,
   ul.LC_TabContentBigger li {
    float:left;
   }
   
   ul#LC_TabMainMenuContent li a {
       color: $fontmenu;
    text-decoration: none;
   }
   
   ul.LC_TabContent {
    min-height:1.5em;
   }
   
   ul.LC_TabContent li {
    vertical-align:middle;
    padding: 0 10px 0 10px;
    background-color:$tabbg;
    border-bottom:solid 1px $lg_border_color;
   }
   
   ul.LC_TabContent .right {
    float:right;
   }
   
   ul.LC_TabContent li a, ul.LC_TabContent li {
    color:rgb(47,47,47);
    text-decoration:none;
    font-size:95%;
    font-weight:bold;
    padding-right: 16px;
   }
   
   ul.LC_TabContent li:hover, ul.LC_TabContent li.active {
           background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;
    border-bottom:solid 2px #FFFFFF;
    padding-right: 16px;
   }
   
   #maincoursedoc {
    clear:both;
   }
   
   ul.LC_TabContentBigger {
           display:block;
           list-style:none;
           padding: 0;
   }
   
   ul.LC_TabContentBigger li {
           vertical-align:bottom;
           height: 30px;
           font-size:110%;
           font-weight:bold;
           color: #737373;
   }
   
   
   ul.LC_TabContentBigger li a {
           background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat;
    height: 30px;
    line-height: 30px;
    text-align: center;
    display: block;
    text-decoration: none;
   }
   
   ul.LC_TabContentBigger li:hover a, 
   ul.LC_TabContentBigger li.active a {
    background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
    color:$font;
    text-decoration: underline;
   }
   
   
   ul.LC_TabContentBigger li b {
    background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
    display: block;
    float: left;
    padding: 0 30px;
   }
   
   ul.LC_TabContentBigger li:hover b,
   ul.LC_TabContentBigger li.active b {
           background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
           color:$font;
    border-bottom: 1px solid #FFFFFF;
   }
   
   
   ul.LC_CourseBreadcrumbs {
     background: $sidebg;
     line-height: 32px;
     padding-left: 10px;
     margin: 0 0 10px 0;
     list-style-position: inside;
   
   }
   
   ol#LC_MenuBreadcrumbs, 
   ol#LC_PathBreadcrumbs {
    padding-left: 10px;
    margin: 0;
    list-style-position: inside;
   }
   
   ol#LC_MenuBreadcrumbs li, 
   ol#LC_PathBreadcrumbs li, 
   ul.LC_CourseBreadcrumbs li {
       display: inline;
       white-space: nowrap;
   }
   
   ol#LC_MenuBreadcrumbs li a,
   ul.LC_CourseBreadcrumbs li a {
    text-decoration: none;
    font-size:90%;
   }
   
   ol#LC_PathBreadcrumbs li a {
    text-decoration:none;
    font-size:100%;
    font-weight:bold;
   }
   
   .LC_Box {
       border: solid 1px $lg_border_color;
       padding: 0 10px 10px 10px;
   }
   
   .LC_AboutMe_Image {
    float:left;
    margin-right:10px;
   }
   
   .LC_Clear_AboutMe_Image {
    clear:left;
   }
   
   dl.LC_ListStyleClean dt {
    padding-right: 5px;
    display: table-header-group;
   }
   
   dl.LC_ListStyleClean dd {
    display: table-row;
   }
   
   .LC_ListStyleClean,
   .LC_ListStyleSimple,
   .LC_ListStyleNormal,
   .LC_ListStyle_Border,
   .LC_ListStyleSpecial {
    /*display:block; */
    list-style-position: inside;
    list-style-type: none;
    overflow: hidden;
    padding: 0;
   }
   
   .LC_ListStyleSimple li,
   .LC_ListStyleSimple dd,
   .LC_ListStyleNormal li,
   .LC_ListStyleNormal dd,
   .LC_ListStyleSpecial li,
   .LC_ListStyleSpecial dd {
    margin: 0;
    padding: 5px 5px 5px 10px;
    clear: both;
   }
   
   .LC_ListStyleClean li,
   .LC_ListStyleClean dd {
    padding-top: 0;
    padding-bottom: 0;
   }
   
   .LC_ListStyleSimple dd,
   .LC_ListStyleSimple li {
    border-bottom: solid 1px $lg_border_color;
   }
   
   .LC_ListStyleSpecial li,
   .LC_ListStyleSpecial dd {
    list-style-type: none;
    background-color: RGB(220, 220, 220);
    margin-bottom: 4px;
   }
   
   table.LC_SimpleTable {
    margin:5px;
    border:solid 1px $lg_border_color;
   }
   
   table.LC_SimpleTable tr {
    padding: 0;
    border:solid 1px $lg_border_color;
   }
   
   table.LC_SimpleTable thead {
    background:rgb(220,220,220);
   }
   
   div.LC_columnSection {
    display: block;
    clear: both;
    overflow: hidden;
    margin: 0;
   }
   
   div.LC_columnSection>* {
    float: left;
    margin: 10px 20px 10px 0;
    overflow:hidden;
   }
   
   .LC_loginpage_container {
    text-align:left;
    margin : 0 auto;
    width:90%;
    padding: 10px;
    height: auto;
    background-color:#FFFFFF;
    border:1px solid #CCCCCC;
   }
   
   
   .LC_loginpage_loginContainer {
    float:left;
    width: 182px;
    padding: 2px;
    border:1px solid #CCCCCC;
    background-color:$loginbg;
   }
   
   .LC_loginpage_loginContainer h2 {
    margin-top: 0;
    display:block;
    background:$bgcol;
    color:$textcol;
    padding-left:5px;
   }
   
   .LC_loginpage_loginInfo {
    float:left;
    width:182px;
    border:1px solid #CCCCCC;
    padding:2px;
   }
   
   .LC_loginpage_space {
    clear: both;
    margin-bottom: 20px;
    border-bottom: 1px solid #CCCCCC;
   }
   
   .LC_loginpage_floatLeft {
    float: left;
    width: 200px;
    margin: 0;
   }
   
   table em {
    font-weight: bold;
    font-style: normal;
   }
   
   table.LC_tableBrowseRes,
   table.LC_tableOfContent {
           border:none;
    border-spacing: 1px;
    padding: 3px;
    background-color: #FFFFFF;
    font-size: 90%;
   }
   
   table.LC_tableOfContent{
       border-collapse: collapse;
   }
   
   table.LC_tableBrowseRes a,
   table.LC_tableOfContent a {
           background-color: transparent;
    text-decoration: none;
   }
   
   table.LC_tableBrowseRes tr.LC_trOdd,
   table.LC_tableOfContent tr.LC_trOdd{
    background-color: #EEEEEE;
   }
   
   table.LC_tableOfContent img {
    border: none;
    height: 1.3em;
    vertical-align: text-bottom;
    margin-right: 0.3em;
   }
   
   a#LC_content_toolbar_firsthomework {
    background-image:url(/res/adm/pages/open-first-problem.gif);
   }
   
   a#LC_content_toolbar_launchnav {
    background-image:url(/res/adm/pages/start-navigation.gif);
   }
   
   a#LC_content_toolbar_closenav {
    background-image:url(/res/adm/pages/close-navigation.gif);
   }
   
   a#LC_content_toolbar_everything {
    background-image:url(/res/adm/pages/show-all.gif);
   }
   
   a#LC_content_toolbar_uncompleted {
    background-image:url(/res/adm/pages/show-incomplete-problems.gif);
   }
   
   #LC_content_toolbar_clearbubbles {
    background-image:url(/res/adm/pages/mark-discussionentries-read.gif);
   }
   
   a#LC_content_toolbar_changefolder {
    background : url(/res/adm/pages/close-all-folders.gif) top center ;
   }
   
   a#LC_content_toolbar_changefolder_toggled {
    background-image:url(/res/adm/pages/open-all-folders.gif);
   }
   
   ul#LC_toolbar li a:hover {
    background-position: bottom center;
   }
   
   ul#LC_toolbar {
    padding: 0;
    margin: 2px;
    list-style:none;
    position:relative;
    background-color:white;
   }
   
   ul#LC_toolbar li {
    border:1px solid white;
    padding: 0;
    margin: 0;
           float: left;
    display:inline;
    vertical-align:middle;
   } 
   
   
   a.LC_toolbarItem {
    display:block;
    padding: 0;
    margin: 0;
    height: 32px;
    width: 32px;
    color:white;
    border: none;
    background-repeat:no-repeat;
    background-color:transparent;
   }
   
   ul.LC_funclist li {
     float: left;
     white-space: nowrap;
     height: 35px; /* at least as high as heighest list item */
     margin: 0 15px 15px 10px;
   }
   
   
 END  END
 }  }
   
Line 5765  sub xml_begin { Line 6434  sub xml_begin {
             .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" '               .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
     .'xmlns="http://www.w3.org/1999/xhtml">';      .'xmlns="http://www.w3.org/1999/xhtml">';
     } else {      } else {
  $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>';   $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
              .'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
     }      }
     return $output;      return $output;
 }  }
Line 5827  $args - additional optional args support Line 6497  $args - additional optional args support
   
              only_body      -> is true will set &bodytag() onlybodytag               only_body      -> is true will set &bodytag() onlybodytag
                                     arg on                                      arg on
              no_nav_bar     -> is true will set &bodytag() notopbar arg on               no_nav_bar     -> is true will set &bodytag() no_nav_bar arg on
              add_entries    -> additional attributes to add to the  <body>               add_entries    -> additional attributes to add to the  <body>
              domain         -> force to color decorate a page for a                domain         -> force to color decorate a page for a 
                                     specific domain                                      specific domain
Line 5841  $args - additional optional args support Line 6511  $args - additional optional args support
                                     a html attribute                                      a html attribute
              force_register -> if is true will turn on the &bodytag()               force_register -> if is true will turn on the &bodytag()
                                     $forcereg arg                                      $forcereg arg
              body_title     -> alternate text to use instead of $title  
                                     in the title box that appears, this text  
                                     is not auto translated like the $title is  
              frameset       -> if true will start with a <frameset>               frameset       -> if true will start with a <frameset>
                                     rather than <body>                                      rather than <body>
              no_title       -> if true the title bar won't be shown  
              skip_phases    -> hash ref of                skip_phases    -> hash ref of 
                                     head -> skip the <html><head> generation                                      head -> skip the <html><head> generation
                                     body -> skip all <body> generation                                      body -> skip all <body> generation
Line 5856  $args - additional optional args support Line 6522  $args - additional optional args support
              inherit_jsmath -> when creating popup window in a page,               inherit_jsmath -> when creating popup window in a page,
                                     should it have jsmath forced on by the                                      should it have jsmath forced on by the
                                     current page                                      current page
                bread_crumbs ->             Array containing breadcrumbs
                bread_crumbs_components ->  if exists show it as headline else show only the breadcrumbs
   
 =back  =back
   
Line 5888  sub start_page { Line 6556  sub start_page {
     my $attr_string = &make_attr_string($args->{'force_register'},      my $attr_string = &make_attr_string($args->{'force_register'},
  $args->{'add_entries'});   $args->{'add_entries'});
     $result .= "\n<frameset $attr_string>\n";      $result .= "\n<frameset $attr_string>\n";
  } else {          } else {
     $result .=              $result .=
  &bodytag($title,                   &bodytag($title, 
  $args->{'function'},       $args->{'add_entries'},                           $args->{'function'},       $args->{'add_entries'},
  $args->{'only_body'},      $args->{'domain'},                           $args->{'only_body'},      $args->{'domain'},
  $args->{'force_register'}, $args->{'body_title'},                           $args->{'force_register'}, $args->{'no_nav_bar'},
  $args->{'no_nav_bar'},     $args->{'bgcolor'},                           $args->{'bgcolor'},        $args->{'no_inline_link'},
  $args->{'no_title'},       $args->{'no_inline_link'},                           $args);
  $args);          }
  }  
     }      }
   
     if ($args->{'js_ready'}) {      if ($args->{'js_ready'}) {
  $result = &js_ready($result);   $result = &js_ready($result);
     }      }
     if ($args->{'html_encode'}) {      if ($args->{'html_encode'}) {
  $result = &html_encode($result);   $result = &html_encode($result);
     }      }
   
       # Preparation for new and consistent functionlist at top of screen
       # if ($args->{'functionlist'}) {
       #            $result .= &build_functionlist();
       #}
   
       # Don't add anything more if only_body wanted
       return $result if $args->{'only_body'};
   
     #Breadcrumbs      #Breadcrumbs
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {      if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
         &Apache::lonhtmlcommon::clear_breadcrumbs();   &Apache::lonhtmlcommon::clear_breadcrumbs();
         #if any br links exists, add them to the breadcrumbs   #if any br links exists, add them to the breadcrumbs
         if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {   if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {         
             foreach my $crumb (@{$args->{'bread_crumbs'}}){   foreach my $crumb (@{$args->{'bread_crumbs'}}){
                 &Apache::lonhtmlcommon::add_breadcrumb($crumb);   &Apache::lonhtmlcommon::add_breadcrumb($crumb);
             }   }
         }   }
   
         #if bread_crumbs_component exists show it as headline else show only the breadcrumbs   #if bread_crumbs_component exists show it as headline else show only the breadcrumbs
         if (exists($args->{'bread_crumbs_component'})){   if(exists($args->{'bread_crumbs_component'})){
             $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});   $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});
         } else {   }else{
             $result .= &Apache::lonhtmlcommon::breadcrumbs();   $result .= &Apache::lonhtmlcommon::breadcrumbs();
         }   }
     }      }
     return $result;      return $result;
 }  }
   
   
 =pod  =pod
   
 =item * &head()  =item * &head()
Line 6068  sub simple_error_page { Line 6745  sub simple_error_page {
     }      }
   
     sub start_data_table_empty_row {      sub start_data_table_empty_row {
  $row_count[0]++;  # $row_count[0]++;
  return  '<tr class="LC_empty_row" >'."\n";;   return  '<tr class="LC_empty_row" >'."\n";;
     }      }
   
Line 6149  Returns either 'student','coordinator',' Line 6826  Returns either 'student','coordinator','
   
 ###############################################  ###############################################
 sub get_users_function {  sub get_users_function {
     my $function = 'student';      my $function = 'norole';
       if ($env{'request.role'}=~/^(st)/) {
           $function='student';
       }
     if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {      if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {
         $function='coordinator';          $function='coordinator';
     }      }
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {      if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
         $function='admin';          $function='admin';
     }      }
     if (($env{'request.role'}=~/^(au|ca)/) ||      if (($env{'request.role'}=~/^(au|ca|aa)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {          ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';          $function='author';
     }      }
Line 6171  sub get_users_function { Line 6851  sub get_users_function {
   
 Used by lonmenu.pm and lonroles.pm to determine whether to use the word  Used by lonmenu.pm and lonroles.pm to determine whether to use the word
 'Courses' or 'Roles' in inline navigation and on screen displaying user's roles.  'Courses' or 'Roles' in inline navigation and on screen displaying user's roles.
   
 Inputs:  Inputs:
 None  None
   
Line 6701  If the user's status includes multiple t Line 7382  If the user's status includes multiple t
 the largest default quota which applies to the user determines the  the largest default quota which applies to the user determines the
 default quota returned.  default quota returned.
   
   =back
   
 =cut  =cut
   
 ###############################################  ###############################################
Line 6849  sub user_picker { Line 7532  sub user_picker {
         #       loncreateuser::print_user_query_page()          #       loncreateuser::print_user_query_page()
         #       has been completed.          #       has been completed.
         next if ($option eq 'alc');          next if ($option eq 'alc');
           next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));  
         next if ($option eq 'crs' && !$env{'request.course.id'});          next if ($option eq 'crs' && !$env{'request.course.id'});
         if ($curr_selected{'srchin'} eq $option) {          if ($curr_selected{'srchin'} eq $option) {
             $srchinsel .= '               $srchinsel .= ' 
Line 6897  sub user_picker { Line 7581  sub user_picker {
                         official   => 'institutional',                          official   => 'institutional',
                         unofficial => 'non-institutional',                          unofficial => 'non-institutional',
                     );                      );
                     $new_user_create = '<p class="LC_warning">'.                      $new_user_create = '<p class="LC_warning">'
                                        &mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.                                        .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
                                        &mt('Please contact the [_1]helpdesk[_2] for assistance.','<a href="'.$helplink.'">','</a>').'</p><br />';                                        .' '
                                         .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
                                             ,'<a href="'.$helplink.'">','</a>')
                                         .'</p><br />';
                 }                  }
             }              }
         }          }
Line 6936  ENDSCRIPT Line 7623  ENDSCRIPT
   
     my $output = <<"END_BLOCK";      my $output = <<"END_BLOCK";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function validateEntry(callingForm) {  function validateEntry(callingForm) {
   
     var checkok = 1;      var checkok = 1;
Line 7004  function validateEntry(callingForm) { Line 7692  function validateEntry(callingForm) {
   
 $newuserscript  $newuserscript
   
   // ]]>
 </script>  </script>
   
 $new_user_create  $new_user_create
   
 <table>  
  <tr>  
   <td>$lt{'doma'}:</td>  
   <td>$domform</td>  
   </td>  
  </tr>  
  <tr>  
   <td>$lt{'usr'}:</td>  
   <td>$srchbysel  
       $srchtypesel   
       <input type="text" size="15" name="srchterm" value="$srchterm" />  
       $srchinsel   
   </td>  
  </tr>  
 </table>  
 <br />  
 END_BLOCK  END_BLOCK
   
       $output .= &Apache::lonhtmlcommon::start_pick_box().
                  &Apache::lonhtmlcommon::row_title($lt{'doma'}).
                  $domform.
                  &Apache::lonhtmlcommon::row_closure().
                  &Apache::lonhtmlcommon::row_title($lt{'usr'}).
                  $srchbysel.
                  $srchtypesel. 
                  '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" />'.
                  $srchinsel.
                  &Apache::lonhtmlcommon::row_closure(1)
                  &Apache::lonhtmlcommon::end_pick_box().
                  '<br />';
     return $output;      return $output;
 }  }
   
Line 7257  sub get_institutional_codes { Line 7942  sub get_institutional_codes {
   
 =item * sorted_slots()  =item * sorted_slots()
   
 Sorts an array of slot names in order of slot start time (earliest first).  Sorts an array of slot names in order of slot start time (earliest first). 
   
 Inputs:  Inputs:
   
Line 7299  sub sorted_slots { Line 7984  sub sorted_slots {
     return @sorted;      return @sorted;
 }  }
   
 =pod  
   
 =back  =pod
   
 =head1 HTTP Helpers  =head1 HTTP Helpers
   
Line 7592  sub upload_embedded { Line 8276  sub upload_embedded {
                                    '&nbsp;<a href="'.$url.'">'.                                     '&nbsp;<a href="'.$url.'">'.
                                    $orig_uploaded_filename.'</a><br />';                                     $orig_uploaded_filename.'</a><br />';
                     } else {                      } else {
                         $output .= '<font size="+2">'.                          $output .= '<span class=\"LC_fontsize_large\">'.
                                    &mt('View embedded file: [_1]','<a href="'.$url.'">'.                                     &mt('View embedded file: [_1]','<a href="'.$url.'">'.
                                    $orig_uploaded_filename.'</a>').'</font><br />';                                     $orig_uploaded_filename.'</a>').'</span><br />';
                     }                      }
                 }                  }
                 close($fh);                  close($fh);
Line 7899  sub csv_print_samples { Line 8583  sub csv_print_samples {
     $r->print(&mt('Samples').'<br />'.&start_data_table().      $r->print(&mt('Samples').'<br />'.&start_data_table().
               &start_data_table_header_row());                &start_data_table_header_row());
     foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {       foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { 
         $r->print('<th>'.&mt('Column&nbsp;[_1]',($sample+1)).'</th>'); }          $r->print('<th>'.&mt('Column [_1]',($sample+1)).'</th>'); }
     $r->print(&end_data_table_header_row());      $r->print(&end_data_table_header_row());
     foreach my $hash (@$samples) {      foreach my $hash (@$samples) {
  $r->print(&start_data_table_row());   $r->print(&start_data_table_row());
Line 7943  sub csv_print_select_table { Line 8627  sub csv_print_select_table {
  my ($value,$display,$defaultcol)=@{ $array_ref };   my ($value,$display,$defaultcol)=@{ $array_ref };
  $r->print(&start_data_table_row().'<td>'.$display.'</td>');   $r->print(&start_data_table_row().'<td>'.$display.'</td>');
   
  $r->print('<td><select name=f'.$i.   $r->print('<td><select name="f'.$i.'"'.
   ' onchange="javascript:flip(this.form,'.$i.');">');    ' onchange="javascript:flip(this.form,'.$i.');">');
  $r->print('<option value="none"></option>');   $r->print('<option value="none"></option>');
  foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {   foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {
Line 8629  sub build_recipient_list { Line 9313  sub build_recipient_list {
                 my @contacts = ('adminemail','supportemail');                  my @contacts = ('adminemail','supportemail');
                 foreach my $item (@contacts) {                  foreach my $item (@contacts) {
                     if ($domconfig{'contacts'}{$mailing}{$item}) {                      if ($domconfig{'contacts'}{$mailing}{$item}) {
                         my $addr = $domconfig{'contacts'}{$item};                          my $addr = $domconfig{'contacts'}{$item}; 
                         if (!grep(/^\Q$addr\E$/,@recipients)) {                          if (!grep(/^\Q$addr\E$/,@recipients)) {
                             push(@recipients,$addr);                              push(@recipients,$addr);
                         }                          }
Line 8909  sub assign_categories_table { Line 9593  sub assign_categories_table {
                     my $checked = '';                      my $checked = '';
                     if (@currcategories > 0) {                      if (@currcategories > 0) {
                         if (grep(/^\Q$item\E$/,@currcategories)) {                          if (grep(/^\Q$item\E$/,@currcategories)) {
                             $checked = ' checked="checked" ';                              $checked = ' checked="checked"';
                         }                          }
                     }                      }
                     $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.                      $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.
Line 8975  sub assign_category_rows { Line 9659  sub assign_category_rows {
                     if (ref($currcategories) eq 'ARRAY') {                      if (ref($currcategories) eq 'ARRAY') {
                         if (@{$currcategories} > 0) {                          if (@{$currcategories} > 0) {
                             if (grep(/^\Q$item\E$/,@{$currcategories})) {                              if (grep(/^\Q$item\E$/,@{$currcategories})) {
                                 $checked = ' checked="checked" ';                                  $checked = ' checked="checked"';
                             }                              }
                         }                          }
                     }                      }
Line 9548  sub group_term { Line 10232  sub group_term {
     my $crstype = &course_type();      my $crstype = &course_type();
     my %names = (      my %names = (
                   'Course' => 'group',                    'Course' => 'group',
                   'Group' => 'team',                    'Community' => 'group',
                 );                  );
     return $names{$crstype};      return $names{$crstype};
 }  }
Line 9628  sub compare_arrays { Line 10312  sub compare_arrays {
     return @difference;      return @difference;
 }  }
   
 # -------------------------------------------------------- Initliaze user login  # -------------------------------------------------------- Initialize user login
 sub init_user_environment {  sub init_user_environment {
     my ($r, $username, $domain, $authhost, $form, $args) = @_;      my ($r, $username, $domain, $authhost, $form, $args) = @_;
     my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'};      my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'};
Line 9682  sub init_user_environment { Line 10366  sub init_user_environment {
     my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,      my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,
         $clientunicode,$clientos) = &decode_user_agent($r);          $clientunicode,$clientos) = &decode_user_agent($r);
   
 # -------------------------------------- Any accessibility options to remember?  
     if (($form->{'interface'}) && ($form->{'remember'} eq 'true')) {  
  foreach my $option ('imagesuppress','appletsuppress',  
     'embedsuppress','fontenhance','blackwhite') {  
     if ($form->{$option} eq 'true') {  
  &Apache::lonnet::put('environment',{$option => 'on'},  
      $domain,$username);  
     } else {  
  &Apache::lonnet::del('environment',[$option],  
      $domain,$username);  
     }  
  }  
     }  
 # ------------------------------------------------------------- Get environment  # ------------------------------------------------------------- Get environment
   
     my %userenv = &Apache::lonnet::dump('environment',$domain,$username);      my %userenv = &Apache::lonnet::dump('environment',$domain,$username);
Line 9712  sub init_user_environment { Line 10383  sub init_user_environment {
     if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }      if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
   
 # --------------- Do not trust query string to be put directly into environment  # --------------- Do not trust query string to be put directly into environment
     foreach my $option ('imagesuppress','appletsuppress',      foreach my $option ('interface','localpath','localres') {
  'embedsuppress','fontenhance','blackwhite',          $form->{$option}=~s/[\n\r\=]//gs;
  'interface','localpath','localres') {  
  $form->{$option}=~s/[\n\r\=]//gs;  
     }      }
 # --------------------------------------------------------- Write first profile  # --------------------------------------------------------- Write first profile
   
Line 9749  sub init_user_environment { Line 10418  sub init_user_environment {
     $form->{'interface'}=~s/\W//gs;      $form->{'interface'}=~s/\W//gs;
     $initial_env{"browser.interface"} = $form->{'interface'};      $initial_env{"browser.interface"} = $form->{'interface'};
     $env{'browser.interface'}=$form->{'interface'};      $env{'browser.interface'}=$form->{'interface'};
     foreach my $option ('imagesuppress','appletsuppress',  
  'embedsuppress','fontenhance','blackwhite') {  
  if (($form->{$option} eq 'true') ||  
     ($userenv{$option} eq 'on')) {  
     $initial_env{"browser.$option"} = "on";  
  }  
     }  
  }   }
   
         foreach my $tool ('aboutme','blog','portfolio') {          foreach my $tool ('aboutme','blog','portfolio') {
             $userenv{'availabletools.'.$tool} =              $userenv{'availabletools.'.$tool} = 
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');                  &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
         }          }
   
         foreach my $crstype ('official','unofficial') {          foreach my $crstype ('official','unofficial','community') {
             $userenv{'canrequest.'.$crstype} =              $userenv{'canrequest.'.$crstype} =
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,                  &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                   'reload','requestcourses');                                                    'reload','requestcourses');
Line 9781  sub init_user_environment { Line 10443  sub init_user_environment {
     }      }
     untie(%disk_env);      untie(%disk_env);
  } else {   } else {
     &Apache::lonnet::logthis("<font color=\"blue\">WARNING: ".      &Apache::lonnet::logthis("<span style=\"color:blue;\">WARNING: ".
    'Could not create environment storage in lonauth: '.$!.'</font>');     'Could not create environment storage in lonauth: '.$!.'</span>');
     return 'error: '.$!;      return 'error: '.$!;
  }   }
     }      }

Removed from v.1.692.4.3  
changed lines
  Added in v.1.880


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>