Diff for /loncom/interface/lonextresedit.pm between versions 1.8.2.4.4.1 and 1.8.2.4.4.2

version 1.8.2.4.4.1, 2023/07/05 18:10:06 version 1.8.2.4.4.2, 2023/07/05 18:41:20
Line 98  sub handler { Line 98  sub handler {
     }      }
     my %ltitools;      my %ltitools;
     if ($type eq 'tool') {      if ($type eq 'tool') {
         %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer');          my (%domtools,%crstools);
           my %tooltypes = &Apache::loncommon::usable_exttools();
           if ($tooltypes{'dom'}) {
               %domtools = &Apache::lonnet::get_domain_lti($cdom,'consumer');
           }
           if ($tooltypes{'crs'}) {
               %crstools = &Apache::lonnet::get_course_lti($cnum,$cdom,'consumer');
           }
           %ltitools = (
                         dom => \%domtools,
                         crs => \%crstools,
                       );
     }      }
     my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());      my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
     my $pathitem = '<input type="hidden" name="folderpath" value="'.      my $pathitem = '<input type="hidden" name="folderpath" value="'.
Line 161  sub process_changes { Line 172  sub process_changes {
             $newurl = $1;              $newurl = $1;
             $marker = $2;              $marker = $2;
             $args = $3;              $args = $3;
               if ((!$symb) && (!$supplementalflag)) {
                   $symb = "uploaded/$cdom/$cnum/$folder.$container"."___$newidx"."___adm/$cdom/$cnum/$marker/ext.tool";
               }
         }          }
     }      }
     if ($supplementalflag) {      if ($supplementalflag) {
Line 170  sub process_changes { Line 184  sub process_changes {
     }      }
     if ($folder && $container) {      if ($folder && $container) {
         if ($env{'form.importdetail'}) {          if ($env{'form.importdetail'}) {
             my ($errtext,$fatal,$mismatchedid,@imports);              my ($errtext,$fatal,$mismatchedid,$needreload,$newgradable,@imports);
             if (!$supplementalflag) {              if (!$supplementalflag) {
                 if (($oldidx) && ($oldidx != $newidx)) {                  if (($oldidx) && ($oldidx != $newidx)) {
                     $mismatchedid = 1;                      $mismatchedid = 1;
Line 181  sub process_changes { Line 195  sub process_changes {
             } elsif (($newtitle eq $oldtitle) && ($newurl eq $oldurl)) {              } elsif (($newtitle eq $oldtitle) && ($newurl eq $oldurl)) {
                 if ($type eq 'tool') {                  if ($type eq 'tool') {
                     if ($args) {                      if ($args) {
                         ($updated,$errormsg) = &update_exttool($marker,$cdom,$cnum,$args);                          ($updated,$newgradable,$errormsg) = &update_exttool($marker,$cdom,$cnum,
                         unless ($updated) {                                                                              $supplementalflag,$args);
                             $output = &mt('No change');                                if ($updated) {
                               if ($newgradable) {
                                   my $map = "/uploaded/$cdom/$cnum/$folder.$container";
                                   my ($errtext,$fatal) = &LONCAPA::map::mapread($map);
                                   if ($fatal) {
                                       $errormsg = &mt('Update failed: [_1].',$errtext);
                                   } else {
                                       &LONCAPA::map::storeparameter($residx,'parameter_0_gradable',
                                                                     $newgradable,'string_yesno');
                                       my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,1);
                                       if ($errtext) {
                                           $errormsg = &mt('Update failed: [_1].',$errtext);
                                       } else {
                                           $needreload = 1;
                                       }
                                   }
                               }
                           } else {
                               $output = &mt('No change');
                         }                          }
                     } else {                      } else {
                         $output = &mt('No change');                          $output = &mt('No change');
Line 202  sub process_changes { Line 234  sub process_changes {
                     my $ext = 'true';                      my $ext = 'true';
                     if ($type eq 'tool') {                      if ($type eq 'tool') {
                         if ($args) {                          if ($args) {
                             ($updated,$errormsg) = &update_exttool($marker,$cdom,$cnum,$args);                              ($updated,$newgradable,$errormsg) = &update_exttool($marker,$cdom,$cnum,
                                                                                   $supplementalflag,$args);
                               if ($newgradable) {
                                   &LONCAPA::map::storeparameter($residx,'parameter_0_gradable',$newgradable,
                                                                 'string_yesno');
                                   $needreload = 1;
                               }
                         }                          }
                         $ext = 'false';                          $ext = 'false';
                     }                      }
                       my $dotimeupdate;
                       unless ($supplementalflag) {
                           if (($newgradable) || ($newurl ne $oldurl)) {
                               $dotimeupdate = 1;
                           }
                       }
                     $LONCAPA::map::resources[$residx] =                      $LONCAPA::map::resources[$residx] =
                         join(':', ($savetitle,$saveurl,$ext,'normal','res'));                          join(':', ($savetitle,$saveurl,$ext,'normal','res'));
                     my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1);                      my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,$dotimeupdate);
                     if ($errtext) {                      if ($errtext) {
                         $errormsg = &mt('Update failed: [_1].',$errtext);                          $errormsg = &mt('Update failed: [_1].',$errtext);
                     } else {                      } else {
Line 230  sub process_changes { Line 274  sub process_changes {
                                     &Apache::lonnet::devalidate_title_cache($symb);                                      &Apache::lonnet::devalidate_title_cache($symb);
                                 }                                  }
                             }                              }
                               $needreload = 1;
                         }                          }
                         my ($furl,$ferr) =   
                             &Apache::lonuserstate::readmap("$cdom/$cnum");  
                         if ($ferr) {  
                             $errormsg = &mt('Reload failed: [_1].',$ferr);  
                         } else {  
                             unless ($supplementalflag) {  
                                 &Apache::loncommon::update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum);  
                             }  
                         }  
                     }                      }
                 }                  }
             }              }
               if ($needreload) {
                   my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");
                   if ($ferr) {
                       $errormsg = &mt('Reload failed: [_1].',$ferr);
                   } else {
                       unless ($supplementalflag) {
                           &Apache::loncommon::update_content_constraints($cdom,$cnum,$chome,
                                                                          $cdom.'_'.$cnum);
                       }
                   }
               }
               if (($type eq 'tool') && ($newgradable)) {
                   my $uri = &Apache::lonnet::declutter($url);
                   &Apache::lonnet::devalidate_cache_new('meta',$uri);
               }
         } else {          } else {
             $output = &mt('No change');              $output = &mt('No change');
         }          }
Line 257  sub process_changes { Line 308  sub process_changes {
 }  }
   
 sub update_exttool {  sub update_exttool {
     my ($marker,$cdom,$cnum,$args) = @_;      my ($marker,$cdom,$cnum,$supplementalflag,$args) = @_;
     my (%newhash,$changed,@deleted,$errormsg);      my (%newhash,$changed,$newgradable,@deleted,$errormsg);
     ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'},      ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'},
      $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'}) = split(/:/,$args);       $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'},$newhash{'gradable'}) = split(/:/,$args);
     foreach my $item ('linktext','explanation','crslabel','crstitle','crsappend') {      foreach my $item ('linktext','explanation','crslabel','crstitle','crsappend') {
         $newhash{$item} = &unescape($newhash{$item});          $newhash{$item} = &unescape($newhash{$item});
     }      }
     my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);      my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);
     foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle','crsappend') {      foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle','crsappend','gradable') {
         $newhash{$item} =~ s/^\s+//;          $newhash{$item} =~ s/^\s+//;
         $newhash{$item} =~ s/\s+$//;          $newhash{$item} =~ s/\s+$//;
         if (($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) {          if (($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) {
Line 276  sub update_exttool { Line 327  sub update_exttool {
                     $newhash{$item} = '';                      $newhash{$item} = '';
                 }                  }
             }              }
           } elsif ($item eq 'gradable') {
               unless ($newhash{$item} == 1) {
                   $newhash{$item} = '';
               }
         }          }
         if ($toolhash{$item} ne $newhash{$item}) {          if ($toolhash{$item} ne $newhash{$item}) {
               if (($item eq 'gradable') && (!$supplementalflag)) {
                   if ($newhash{$item}) {
                       $newgradable = 'yes';
                   } else {
                       $newgradable = 'no';
                   }
               }
             if ($newhash{$item} eq '') {              if ($newhash{$item} eq '') {
                 unless (($item eq 'target') ||                  unless (($item eq 'target') ||
                         ((($item eq 'width') || ($item eq 'height')) &&                          ((($item eq 'width') || ($item eq 'height')) &&
Line 305  sub update_exttool { Line 367  sub update_exttool {
     if (@deleted) {      if (@deleted) {
         &Apache::lonnet::del('exttool_'.$marker,\@deleted,$cdom,$cnum);          &Apache::lonnet::del('exttool_'.$marker,\@deleted,$cdom,$cnum);
     }      }
     return ($changed,$errormsg);      return ($changed,$newgradable,$errormsg);
 }  }
   
 sub extedit_form {  sub extedit_form {
Line 326  sub extedit_form { Line 388  sub extedit_form {
         ti => 'Title',          ti => 'Title',
         al => 'Add Link',          al => 'Add Link',
         at => 'Add Tool',          at => 'Add Tool',
           dd => 'Defined in domain',
           dc => 'Defined in course',
     );      );
     my $tabid = 'aa';      my $tabid = 'aa';
     my $size = 60;      my $size = 60;
     if ($supplementalflag) {      if ($supplementalflag) {
         $tabid = 'ee';          $tabid = 'ee';
     }      }
     my ($formname,$formid,$toggle,$fieldsetid,$urlid,$dispdivstyle,$dimendivstyle,      my ($formname,$formid,$toggle,$fieldsetid,$urlid,$subdivid,$dispdivstyle,$dimendivstyle,
         $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle,          $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle,
         $appendstyle,$legend,$urlelem,$toolelem,%toolattr);          $appendstyle,$gradablestyle,$subdivstyle,$legend,$urlelem,$toolelem,%toolattr);
     $formname = 'new'.$type;      $formname = 'new'.$type;
     $toggle = $type;      $toggle = $type;
     $fieldsetid = 'upload'.$type.'form';      $fieldsetid = 'upload'.$type.'form';
     $urlid = $type.'url';      $urlid = $type.'url';
     map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight',      map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight',
                                        'crstitlediv','crslabeldiv','crsappenddiv',                                         'crstitlediv','crslabeldiv','crsappenddiv',
                                        'crstitle','crslabel','crsappend','windiv',                                         'gradablediv','crstitle','crslabel','crsappend',
                                        'linktextdiv','explanationdiv','linktext',                                         'windiv','linktextdiv','explanationdiv',
                                        'explanation','providerurl');                                         'linktext','explanation','providerurl');
     $dispdivstyle = 'display:none';      $dispdivstyle = 'display:none';
     $dimendivstyle = 'display:none';      $dimendivstyle = 'display:none';
     $windivstyle = 'display:none';      $windivstyle = 'display:none';
Line 352  sub extedit_form { Line 416  sub extedit_form {
     $labelstyle = 'display:none';      $labelstyle = 'display:none';
     $titlestyle = 'display:none';      $titlestyle = 'display:none';
     $appendstyle = 'display:none';      $appendstyle = 'display:none';
       $gradablestyle = 'display:none';
       $subdivstyle = 'display:block';
     if ($supplementalflag) {      if ($supplementalflag) {
         $formname = 'newsupp'.$type;          $formname = 'newsupp'.$type;
         $toggle = 'supp'.$type;          $toggle = 'supp'.$type;
Line 361  sub extedit_form { Line 427  sub extedit_form {
     }      }
     my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel,      my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel,
         $crsappend,$fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget,          $crsappend,$fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget,
         $linktext,$explanation,$providerurl,%chkstate);          $linktext,$explanation,$providerurl,$chkgrd,$chknogrd,%chkstate);
     $fieldsetstyle = 'display: none;';      $fieldsetstyle = 'display: none;';
     $action = '/adm/coursedocs';      $action = '/adm/coursedocs';
     my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http');      my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http');
Line 440  sub extedit_form { Line 506  sub extedit_form {
             if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) {              if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) {
                 my $marker = $1;                  my $marker = $1;
                 my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);                  my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);
                 if ($toolhash{'id'}) {                  my ($tooltype,$tool,$ltihash);
                   if ($toolhash{'id'} =~/^c(\d+)$/) {
                       $tool = $1;
                       $tooltype = 'crs';
                     if (ref($ltitools) eq 'HASH') {                      if (ref($ltitools) eq 'HASH') {
                         if (keys(%{$ltitools})) {                          if (ref($ltitools->{'crs'}) eq 'HASH') {
                             if (ref($ltitools->{$toolhash{'id'}}) eq 'HASH') {                              $ltihash = $ltitools->{'crs'}->{$tool};
                                 my $tooltitle = $ltitools->{$toolhash{'id'}}->{'title'};                          }
                                 my $icon = $ltitools->{$toolhash{'id'}}->{'image'};                      }
                                 my $image;                  } elsif ($toolhash{'id'} =~/^\d+$/) {
                                 if ($icon) {                      $tooltype = 'dom';
                                     $image = '<img src="'.$icon.'" alt="'.$tooltitle.'" />';                      $tool = $toolhash{'id'};
                                 }                      if (ref($ltitools) eq 'HASH') {
                                 if ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{://}) {                          if (ref($ltitools->{'dom'}) eq 'HASH') {
                                     (my $prot,my $host,$providerurl) = ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});                              $ltihash = $ltitools->{'dom'}->{$tool};
                                 } else {                          }
                                     $providerurl = $ltitools->{$toolhash{'id'}}->{'url'};                      }
                                 }                  }
                                 $tooltarget = $toolhash{'target'};                  if (($tool ne '') && (ref($ltihash) eq 'HASH')) {
                                 if ($tooltarget eq 'window') {                      my $tooltitle = $ltihash->{'title'};
                                     $dimendivstyle = 'display:block';                      my $icon = $ltihash->{'image'};
                                     $windivstyle = 'display:block';                      my $image;
                                     $chkstate{'window'} = 'checked="checked" ';                      if ($icon) {
                                 } elsif ($tooltarget eq 'tab') {                          $image = '<img src="'.$icon.'" alt="'.$tooltitle.'" />';
                                     $windivstyle = 'display:block';                      }
                                     $chkstate{'tab'} = 'checked="checked" ';                      if ($ltihash->{'url'} =~ m{://}) {
                                 } else {                          (my $prot,my $host,$providerurl) = ($ltihash->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});
                                     $chkstate{'iframe'} = 'checked="checked" ';                      } else {
                                 }                          $providerurl = $ltihash->{'url'};
                                 $width = $toolhash{'width'};                      }
                                 $height = $toolhash{'height'};                      $tooltarget = $toolhash{'target'};
                                 $linktext = $toolhash{'linktext'};                      if ($tooltarget eq 'window') {
                                 $explanation = $toolhash{'explanation'};                          $dimendivstyle = 'display:block';
                                 if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') {                          $windivstyle = 'display:block';
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) {                          $chkstate{'window'} = 'checked="checked" ';
                                         $crstitle = $toolhash{'crstitle'};                      } elsif ($tooltarget eq 'tab') {
                                         $titlestyle = 'display:inline';                          $windivstyle = 'display:block';
                                     }                          $chkstate{'tab'} = 'checked="checked" ';
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'label'}) {                        } else {
                                         $crslabel = $toolhash{'crslabel'};                          $chkstate{'iframe'} = 'checked="checked" ';
                                         $labelstyle = 'display:inline';                      }
                                     }                      $width = $toolhash{'width'};
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'append'}) {                      $height = $toolhash{'height'};
                                         $crsappend = $toolhash{'crsappend'};                      $linktext = $toolhash{'linktext'};
                                         $appendstyle = 'display:inline';                      $explanation = $toolhash{'explanation'};
                                     }                      if ($toolhash{'gradable'}) {
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) {                          $chkgrd = ' checked="checked"';
                                         $dispdivstyle = 'display:block';                      } else {
                                     }                          $chknogrd = ' checked="checked"';
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'linktext'}) {                      }
                                         $linktextstyle = 'padding:0;display:inline';                      if (ref($ltihash->{'crsconf'}) eq 'HASH') {
                                     }                          if ($ltihash->{'crsconf'}->{'title'}) {
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'explanation'}) {                              $crstitle = $toolhash{'crstitle'};
                                         $explanationstyle = 'padding:0;display:inline';                              $titlestyle = 'display:inline';
                                     }                          }
                                 }                          if ($ltihash->{'crsconf'}->{'label'}) {  
                                 $toolelem = '<span class="LC_nobreak">'.$image.'&nbsp;'.$tooltitle.'</span><br />';                              $crslabel = $toolhash{'crslabel'};
                             }                              $labelstyle = 'display:inline';
                           }
                           if ($ltihash->{'crsconf'}->{'append'}) {
                               $crsappend = $toolhash{'crsappend'};
                               $appendstyle = 'display:inline';
                           }
                           if ($ltihash->{'crsconf'}->{'target'}) {
                               $dispdivstyle = 'display:block';
                           }
                           if ($ltihash->{'crsconf'}->{'linktext'}) {
                               $linktextstyle = 'padding:0;display:inline';
                           }
                           if ($ltihash->{'crsconf'}->{'explanation'}) {
                               $explanationstyle = 'padding:0;display:inline';
                         }                          }
                     }                      }
                       $toolelem = '<span class="LC_nobreak">'.$image.'&nbsp;'.$tooltitle.'</span><br />';
                       $gradablestyle = 'display:inline';
                 }                  }
             }              }
         } else {          } else {
             $toolelem = '<span class="LC_docs_ext_edit">'."\n".              $subdivstyle = 'display:none';
                        '<select name="exttoolid" id="LC_exttoolid" onchange="javascript:updateExttool(this,'.              my $toolradio = 'exttooltype';
                        'this.form,'."'$supplementalflag'".');"'.$disabled.'>'."\n".              my $exttypeon = 'LC_exttoolon';
                        '<option value="" selected="selected">'.&mt('Select').'</option>';              my $exttypeoff = 'LC_exttooloff';
             my %bynum;              my $exttypeonsty = 'display:none';
               my $exttypeoffsty = 'display:none';
               my $exttypeofftext;
               if ($supplementalflag) {
                   $toolradio = 'suppexttooltype';
                   $exttypeon = 'LC_exttoolonsupp';
                   $exttypeoff = 'LC_exttooloffsupp';
               }
               my ($numcrstools,$numdomtools,$typeclick,%defcheck,%typedesc);
               %typedesc = (
                             crs => 'Defined in course',
                             dom => 'Defined in domain',
                           );
   #FIXME need crstype
               my $seloptions;
               $subdivid = 'LC_addtool';
               if ($supplementalflag) {
                   $subdivid = 'LC_addtoolsupp';
               }
             if (ref($ltitools) eq 'HASH') {              if (ref($ltitools) eq 'HASH') {
                 foreach my $id (keys(%{$ltitools})) {                  if (ref($ltitools->{'crs'}) eq 'HASH') {
                     if (ref($ltitools->{$id}) eq 'HASH') {                      $numcrstools = scalar(keys(%{$ltitools->{'crs'}}));
                         my $order = $ltitools->{$id}->{'order'};  
                         $bynum{$order} = [$id,$ltitools->{$id}];  
                     }  
                 }                  }
             }                  if (ref($ltitools->{'dom'}) eq 'HASH') {
             foreach my $item (sort { $a <=> $b } keys(%bynum)) {                      $numdomtools = scalar(keys(%{$ltitools->{'dom'}}));
                 if (ref($bynum{$item}) eq 'ARRAY') {                  }
                     if (ref($bynum{$item}->[1]) eq 'HASH') {                  if ($numcrstools || $numdomtools) {
                         my $tooltitle = $bynum{$item}->[1]->{'title'};                      $typeclick = ' onclick="'.
                         my $icon =  $bynum{$item}->[1]->{'image'};                          'javascript:updateExttoolSel(this.form,'."'$toolradio','$supplementalflag'".');"';
                         $toolelem .= '<option value="'.$bynum{$item}->[0].'">'.$tooltitle.'</option>';                  } else {
                       $exttypeoffsty = 'display:block';
                       $exttypeofftext = &mt('No external tools defined in either the domain or the course are available for selection.');
                   }
                   if ($numcrstools && !$numdomtools) {
                       $defcheck{'crs'} = ' checked="checked"';
                       $subdivstyle = 'display:block';
                       $exttypeonsty = 'display:block';
                       my $firstoption = '<option value="" selected="selected">'.&mt('Select').'</option>';
                       $seloptions = &ordered_tooloptions($ltitools->{'crs'});
                       if ($seloptions) {
                           $seloptions = "$firstoption\n$seloptions";
                       }
                       $exttypeofftext = &mt('No external tools defined in the domain are available for selection.');
                   } elsif (!$numcrstools && $numdomtools) {
                       $defcheck{'dom'} = ' checked="checked"';
                       $subdivstyle = 'display:block';
                       $exttypeonsty = 'display:block';
                       my $firstoption = '<option value="" selected="selected">'.&mt('Select').'</option>';
                       $seloptions = &ordered_tooloptions($ltitools->{'dom'});
                       if ($seloptions) {
                           $seloptions = "$firstoption\n$seloptions";
                     }                      }
   #FIXME need crstype
                       $exttypeofftext = &mt('No external tools defined in the course are available for selection.');
                 }                  }
             }              }
             $toolelem .= '</select></span><br />';              foreach my $type ('crs','dom') {
                   $toolelem .= '<span class="LC_nobreak"> <label>'.
                                '<input type="radio" name="'.$toolradio.'" value="'.$type.'"'.$defcheck{$type}.
                                $typeclick.$disabled.' />'.$typedesc{$type}.'</label></span> '."\n";
               }
               $toolelem .= '<div id="'.$exttypeon.'" style="'.$exttypeonsty.'">'.
                            '<select name="exttoolid" onchange="javascript:updateExttool(this,'.
                            'this.form,'."'$supplementalflag'".');"'.$disabled.'>'."\n".
                            $seloptions.
                            '</select><br /></div>'."\n".
                            '<div id="'.$exttypeoff.'" style="'.$exttypeoffsty.'">'.
                            $exttypeofftext.
                            '<br /></div>'."\n";
             $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'};              $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'};
             $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'};              $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'};
             $crsappend = '';              $crsappend = '';
               $chknogrd = ' checked="checked"';
         }          }
         $toolelem .= '<div id="'.$toolattr{'dispdiv'}.'" style="'.$dispdivstyle.'">'.          $toolelem .= '<div id="'.$toolattr{'dispdiv'}.'" style="'.$dispdivstyle.'">'.
                     '<span class="'.$class.'">'.&mt('Display target:').'&nbsp;'.                      '<span class="'.$class.'">'.&mt('Display target:').'&nbsp;'.
Line 563  sub extedit_form { Line 698  sub extedit_form {
                     '<span class="'.$class.'">'.&mt('Append to URL[_1]',                      '<span class="'.$class.'">'.&mt('Append to URL[_1]',
                     '<span id="'.$toolattr{'providerurl'}.'">&nbsp;('.$providerurl.')<br /></span>').                      '<span id="'.$toolattr{'providerurl'}.'">&nbsp;('.$providerurl.')<br /></span>').
                     '<input type="text" id="'.$toolattr{'crsappend'}.'" size="30" name="exttoolappend" value="'.$crsappend.'"'.$disabled.' /></span><br />'.                      '<input type="text" id="'.$toolattr{'crsappend'}.'" size="30" name="exttoolappend" value="'.$crsappend.'"'.$disabled.' /></span><br />'.
                     '</div>';                      '</div>'.
                       '<div id="'.$toolattr{'gradablediv'}.'" style="'.$gradablestyle.'">'.
                       '<span class="'.$class.'">'.&mt('Gradable').'&nbsp;'.
                       '<label><input type="radio" name="exttoolgradable" value="1"'.$chkgrd.$disabled.
                       ' />'.&mt('Yes').'</label>'.('&nbsp;'x2).
                       '<label><input type="radio" name="exttoolgradable" value="0"'.$chknogrd.$disabled.
                       ' />'.&mt('No').'</label></span></div>';
     }      }
     my $chooser = $toolelem;      my $chooser = $toolelem;
     if ($type eq 'ext') {      if ($type eq 'ext') {
Line 583  $preview Line 724  $preview
 $legend  $legend
 $active  $active
 $chooser  $chooser
 <div>  <div id="$subdivid" style="$subdivstyle">
 <span$srcclass>  <span$srcclass>
 $title  $title
 <input type="text" size="$size" name="exttitle" value="$orig_title" $disabled />  <input type="text" size="$size" name="exttitle" value="$orig_title" $disabled />
Line 603  ENDFORM Line 744  ENDFORM
     }      }
 }  }
   
   sub ordered_tooloptions {
       my ($toolsref) = @_;
       my ($seloptions,@ids,@titles);
       if (ref($toolsref) eq 'HASH') {
           my %bynum;
           foreach my $id (keys(%{$toolsref})) {
               if (ref($toolsref->{$id}) eq 'HASH') {
                   my $order = $toolsref->{$id}->{'order'};
                   $bynum{$order} = [$id,$toolsref->{$id}];
               }
           }
           foreach my $item (sort { $a <=> $b } keys(%bynum)) {
               if (ref($bynum{$item}) eq 'ARRAY') {
                   if (ref($bynum{$item}->[1]) eq 'HASH') {
                       my $tooltitle = $bynum{$item}->[1]->{'title'};
                       push(@titles,$tooltitle);
                       push(@ids,$bynum{$item}->[0]);
                       $seloptions .= '<option value="'.$bynum{$item}->[0].'">'.$tooltitle.'</option>'."\n";
                   }
               }
           }
       }
       if (wantarray) {
           return (\@ids,\@titles);
       } else {
           return $seloptions;
       }
   }
   
 sub display_editor {  sub display_editor {
     my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_;      my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_;
     my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap);      my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap);
Line 618  sub display_editor { Line 788  sub display_editor {
         my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap);          my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap);
         $pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($path,'<>&"').'" />';          $pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($path,'<>&"').'" />';
     }      }
     my %ltitools;      my (%ltitools,%tooltypes);
     if ($type eq 'tool') {      if ($type eq 'tool') {
         %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer');          my (%domtools,%crstools);
           %tooltypes = &Apache::loncommon::usable_exttools();
           if ($tooltypes{'dom'}) {
               %domtools = &Apache::lonnet::get_domain_lti($cdom,'consumer');
           }
           if ($tooltypes{'crs'}) {
               %crstools = &Apache::lonnet::get_course_lti($cnum,$cdom,'consumer');
           }
           %ltitools = (
                         dom => \%domtools,
                         crs => \%crstools,
                       );
     }      }
     $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());      $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
     my $args = { 'force_register' => $env{'form.register'} };      my $args = { 'force_register' => $env{'form.register'} };
Line 641  sub display_editor { Line 822  sub display_editor {
   
 sub extedit_javascript {  sub extedit_javascript {
     my ($toolsref) = @_;      my ($toolsref) = @_;
     my $toolsjs;      my ($toolsjs,$exttoolnums,$exttooloptions);
     if (ref($toolsref) eq 'HASH') {      if (ref($toolsref) eq 'HASH') {
         my $num = scalar(keys(%{$toolsref}));          $toolsjs = "        var ltitools = new Array();\n".
         $toolsjs = "        var ltitools = new Array($num);\n".                     "        var ltitoolsUrl = new Array();\n".
                    "        var ltitoolsUrl = new Array($num);\n".                     "        var ltitoolsTarget = new Array();\n".
                    "        var ltitoolsTarget = new Array($num);\n".                     "        var ltitoolsWidth = new Array();\n".
                    "        var ltitoolsWidth = new Array($num);\n".                     "        var ltitoolsHeight = new Array();\n".
                    "        var ltitoolsHeight = new Array($num);\n".                     "        var ltitoolsLinkDef = new Array();\n".
                    "        var ltitoolsLinkDef = new Array($num);\n".                     "        var ltitoolsExplainDef = new Array();\n".
                    "        var ltitoolsExplainDef = new Array($num);\n".                     "        var ltitoolsDisplay = new Array();\n".
                    "        var ltitoolsDisplay = new Array($num);\n".                     "        var ltitoolsLink = new Array();\n".
                    "        var ltitoolsLink = new Array($num);\n".                     "        var ltitoolsExplain = new Array();\n".
                    "        var ltitoolsExplain = new Array($num);\n".                     "        var ltitoolsLabel = new Array();\n".
                    "        var ltitoolsLabel = new Array($num);\n".                     "        var ltitoolsTitle = new Array();\n".
                    "        var ltitoolsTitle = new Array($num);\n".                     "        var ltitoolsAppend = new Array();\n";
                    "        var ltitoolsAppend = new Array($num);\n";          $exttoolnums = "        var ltitoolsnum = new Array();\n".
         my $i = 0;                         "        var tooloptval = new Array();\n".
         foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) {                         "        var toolopttxt = new Array();\n";
             if (ref($toolsref->{$key}) eq 'HASH') {          my $idx = 0;
                 if (ref($toolsref->{$key}->{'display'}) eq 'HASH') {          foreach my $type ('crs','dom') {
                     my $target = $toolsref->{$key}->{'display'}->{'target'};              if (ref($toolsref->{$type}) eq 'HASH') {
                     my $width = $toolsref->{$key}->{'display'}->{'width'};                  my $num = scalar(keys(%{$toolsref->{$type}}));
                     my $height = $toolsref->{$key}->{'display'}->{'height'};                  $toolsjs .= "        ltitools[$idx] = new Array($num);\n".
                     my $linkdef = $toolsref->{$key}->{'display'}->{'linktext'};                              "        ltitoolsUrl[$idx] = new Array($num);\n".
                     my $explaindef = $toolsref->{$key}->{'display'}->{'explanation'};                              "        ltitoolsTarget[$idx] = new Array($num);\n".
                     my $providerurl;                              "        ltitoolsWidth[$idx] = new Array($num);\n".
                     if ($toolsref->{$key}->{'url'} =~ m{://}) {                              "        ltitoolsHeight[$idx] = new Array($num);\n".
                         (my $prot,my $host,$providerurl) = ($toolsref->{$key}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});                              "        ltitoolsLinkDef[$idx] = new Array($num);\n".
                     } else {                              "        ltitoolsExplainDef[$idx] = new Array($num);\n".
                         $providerurl = $toolsref->{$key}->{'url'};                              "        ltitoolsDisplay[$idx] = new Array($num);\n".
                               "        ltitoolsLink[$idx] = new Array($num);\n".
                               "        ltitoolsExplain[$idx] = new Array($num);\n".
                               "        ltitoolsLabel[$idx] = new Array($num);\n".
                               "        ltitoolsTitle[$idx] = new Array($num);\n".
                               "        ltitoolsAppend[$idx] = new Array($num);\n";
                   my $i=0;
                   foreach my $key (sort { $a <=> $b } keys(%{$toolsref->{$type}})) {
                       if (ref($toolsref->{$type}->{$key}) eq 'HASH') {
                           if (ref($toolsref->{$type}->{$key}->{'display'}) eq 'HASH') {
                               my $target = $toolsref->{$type}->{$key}->{'display'}->{'target'};
                               my $width = $toolsref->{$type}->{$key}->{'display'}->{'width'};
                               my $height = $toolsref->{$type}->{$key}->{'display'}->{'height'};
                               my $linkdef = $toolsref->{$type}->{$key}->{'display'}->{'linktext'};
                               my $explaindef = $toolsref->{$type}->{$key}->{'display'}->{'explanation'};
                               my $providerurl;
                               if ($toolsref->{$type}->{$key}->{'url'} =~ m{://}) {
                                   (my $prot,my $host,$providerurl) =
                                       ($toolsref->{$type}->{$key}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});
                               } else {
                                   $providerurl = $toolsref->{$type}->{$key}->{'url'};
                               }
                               $providerurl = &LONCAPA::map::qtunescape($providerurl);
                               $toolsjs .= "        ltitools[$idx][$i] = '$key';\n".
                                           "        ltitoolsTarget[$idx][$i] = '$target';\n".
                                           "        ltitoolsWidth[$idx][$i] = '$width';\n".
                                           "        ltitoolsHeight[$idx][$i] = '$height';\n".
                                           "        ltitoolsLinkDef[$idx][$i] = '$linkdef';\n".
                                           "        ltitoolsExplainDef[$idx][$i] = '$explaindef';\n".
                                           "        ltitoolsUrl[$idx][$i] = '$providerurl';\n";
                           }
                           if (ref($toolsref->{$type}->{$key}->{'crsconf'}) eq 'HASH') {
                               my $display = $toolsref->{$type}->{$key}->{'crsconf'}->{'target'};
                               $toolsjs .= "         ltitoolsDisplay[$idx][$i] = '$display';\n";
                               my $linktext = $toolsref->{$type}->{$key}->{'crsconf'}->{'linktext'};
                               $toolsjs .= "         ltitoolsLink[$idx][$i] = '$linktext';\n";
                               my $explanation = $toolsref->{$type}->{$key}->{'crsconf'}->{'explanation'};
                               $toolsjs .= "         ltitoolsExplain[$idx][$i] = '$explanation';\n";
                               my $label = $toolsref->{$type}->{$key}->{'crsconf'}->{'label'};
                               $toolsjs .= "         ltitoolsLabel[$idx][$i] = '$label';\n";
                               my $title = $toolsref->{$type}->{$key}->{'crsconf'}->{'title'};
                               $toolsjs .= "         ltitoolsTitle[$idx][$i] = '$title';\n";
                               my $append = $toolsref->{$type}->{$key}->{'crsconf'}->{'append'};
                               $toolsjs .= "         ltitoolsAppend[$idx][$i] = '$append';\n";
                           }
                     }                      }
                     $providerurl = &LONCAPA::map::qtunescape($providerurl);                      $i++;
                     $toolsjs .= '        ltitools['.$i.'] = '."'$key';\n".  
                                 '        ltitoolsTarget['.$i.'] = '."'$target';\n".  
                                 '        ltitoolsWidth['.$i.'] = '."'$width';\n".  
                                 '        ltitoolsHeight['.$i.'] = '."'$height';\n".  
                                 '        ltitoolsLinkDef['.$i.'] = '."'$linkdef';\n".  
                                 '        ltitoolsExplainDef['.$i.'] = '."'$explaindef';\n".  
                                 '        ltitoolsUrl['.$i.'] = '."'$providerurl';\n";  
                 }  
                 if (ref($toolsref->{$key}->{'crsconf'}) eq 'HASH') {  
                     my $display = $toolsref->{$key}->{'crsconf'}->{'target'};  
                     $toolsjs .= '         ltitoolsDisplay['.$i.'] = '."'$display';\n";  
                     my $linktext = $toolsref->{$key}->{'crsconf'}->{'linktext'};  
                     $toolsjs .= '         ltitoolsLink['.$i.'] = '."'$linktext';\n";  
                     my $explanation = $toolsref->{$key}->{'crsconf'}->{'explanation'};  
                     $toolsjs .= '         ltitoolsExplain['.$i.'] = '."'$explanation';\n";  
                     my $label = $toolsref->{$key}->{'crsconf'}->{'label'};  
                     $toolsjs .= '         ltitoolsLabel['.$i.'] = '."'$label';\n";  
                     my $title = $toolsref->{$key}->{'crsconf'}->{'title'};  
                     $toolsjs .= '         ltitoolsTitle['.$i.'] = '."'$title';\n";  
                     my $append = $toolsref->{$key}->{'crsconf'}->{'append'};  
                     $toolsjs .= '         ltitoolsAppend['.$i.'] = '."'$append';\n";  
                 }                  }
                 $i++;                  my $firstoption = '<option value="" selected="selected">'.&mt('Select').'</option>';
                   my ($idsref,$titlesref) = &ordered_tooloptions($toolsref->{$type});
                   if ((ref($idsref) eq 'ARRAY') && (ref($titlesref) eq 'ARRAY')) {
                       my $count = scalar(@{$idsref});
                       $exttooloptions .= "        tooloptval[$idx] = new Array($count);\n".
                                          "        toolopttxt[$idx] = new Array($count);\n";
                       for (my $n=0; $n<@{$idsref}; $n++) {
                           my $id = $idsref->[$n];
                           my $text = $titlesref->[$n];
                           $exttooloptions .= "         tooloptval[$idx][$n] = '$id';\n".
                                              "         toolopttxt[$idx][$n] = '$text';\n";
                       }
                   }
                   $exttoolnums .= "        ltitoolsnum[$idx] = $i;\n";
             }              }
               $idx ++;
         }          }
     }      }
     my %js_lt = &Apache::lonlocal::texthash(      my %js_lt = &Apache::lonlocal::texthash(
         invurl  => 'Invalid URL',          invurl  => 'Invalid URL',
         titbl   => 'Title is blank',          titbl   => 'Title is blank',
           invtool => 'Please select an external tool',
         mixfra  => 'Show preview in pop-up? (http in https page + no framing)',          mixfra  => 'Show preview in pop-up? (http in https page + no framing)',
         mixonly => 'Show preview in pop-up? (http in https page)',          mixonly => 'Show preview in pop-up? (http in https page)',
         fraonly => 'Show preview in pop-up? (framing disallowed)',          fraonly => 'Show preview in pop-up? (framing disallowed)',
         nopopup => 'Pop-up blocked',          nopopup => 'Pop-up blocked',
         nopriv  => 'Insufficient privileges to use preview',          nopriv  => 'Insufficient privileges to use preview',
         badurl  => 'URL is not: http://hostname/path or https://hostname/path',          badurl  => 'URL is not: http://hostname/path or https://hostname/path',
         invtool => 'Please select an external tool',          sele    => 'Select',
     );      );
     &js_escape(\%js_lt);      &js_escape(\%js_lt);
   
Line 747  function setExternal(extform,residx,type Line 966  function setExternal(extform,residx,type
     } else {      } else {
         title = escape(title);          title = escape(title);
         var info = exttoolurl;          var info = exttoolurl;
           var prefix = '';
           if (supplementalflag == 1) {
              prefix = 'supp';
           }
         if (residx == 0) {          if (residx == 0) {
             var toolid = parseInt(extform.exttoolid.options[extform.exttoolid.selectedIndex].value);              var toolid = parseInt(extform.exttoolid.options[extform.exttoolid.selectedIndex].value);
             if (isNaN(toolid)) {              if (isNaN(toolid)) {
                 alert("$js_lt{'invtool'}");                  alert("$js_lt{'invtool'}");
                 return;                  return;
             }              }
             info += ':'+toolid;              var typeelem = extform.elements[prefix+'exttooltype'];
         }              if (typeelem.length) {
         var prefix = '';                  for (var i=0; i<typeelem.length; i++) {
         if (supplementalflag == 1) {                      if (typeelem[i].checked) {
            prefix = 'supp';                          tooltype = typeelem[i].value;
                       }
                   }
               }
               if (tooltype == 'crs') {
                   info += ':c'+toolid;
               } else {
                   info += ':'+toolid;
               }
         }          }
         var dispdiv = prefix+'tooldispdiv';          var dispdiv = prefix+'tooldispdiv';
         var windiv = prefix+'toolwindiv';          var windiv = prefix+'toolwindiv';
Line 847  function setExternal(extform,residx,type Line 1078  function setExternal(extform,residx,type
         } else {          } else {
             info += ':';              info += ':';
         }          }
           var gradablediv = prefix+'toolgradablediv';
           if (residx > 0) {
               gradablediv += '_'+residx;
           }
           if (document.getElementById(gradablediv)) {
               if (document.getElementById(gradablediv).style.display == 'inline') {
                   if (extform.exttoolgradable.length) {
                       for (var i=0; i<extform.exttoolgradable.length; i++) {
                           if (extform.exttoolgradable[i].checked) {
                               if (extform.exttoolgradable[i].value == '1') {
                                   info += ':1';
                               } else {
                                   info += ':';
                               }
                               break;
                           }
                       }
                   } else {
                       info += ':';
                   }
               } else {
                   info += ':';
               }
           } else {
               info += ':';
           }
         info=escape(info);          info=escape(info);
         if (residx > 0) {          if (residx > 0) {
             eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();");              eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();");
Line 945  function openPreviewWindow(url,name,noif Line 1202  function openPreviewWindow(url,name,noif
     }      }
 }  }
   
   function updateExttoolSel(form,radioname,supplementalflag) {
       var prefix = '';
       var typepick;
       var radelem = form.elements[radioname];
       if (radelem.length) {
           for (var i=0; i<radelem.length; i++) {
               if (radelem[i].checked) {
                   if (radelem[i].value == 'crs') {
                       typepick = 0;
                   } else if (radelem[i].value == 'dom') {
                       typepick = 1;
                   }
                   break;
               }
           }
       }
       if (supplementalflag == 1) {
           prefix = 'supp';
       }
       $exttoolnums
       $exttooloptions
       if ((typepick == 0) || (typepick == 1)) {
           var selelem = form.elements['exttoolid'];
           var i, numopts = selelem.options.length -1;
           if (numopts >=0) {
               for (i = numopts; i >= 0; i--) {
                   selelem.remove(i);
               }
           }
           if (ltitoolsnum[typepick]) {
               if ((Array.isArray(tooloptval[typepick])) && (Array.isArray(toolopttxt[typepick]))) {
                   var len = tooloptval[typepick].length;
                   if (len) {
                       selelem.options[selelem.options.length] = new Option('$js_lt{sele}','',1,1);
                       var j;
                       for (j=0; j<len; j++) {
                           selelem.options[selelem.options.length] = new Option(toolopttxt[typepick][j],tooloptval[typepick][j]);
                       }
                       selelem.selectedIndex = 0;
                   }
               }
               if (document.getElementById('LC_exttoolon'+prefix)) {
                   document.getElementById('LC_exttoolon'+prefix).style.display = 'block';
               }
               if (document.getElementById('LC_exttooloff'+prefix)) {
                   document.getElementById('LC_exttooloff'+prefix).style.display = 'none';
               }
               if (document.getElementById('LC_addtool'+prefix)) {
                   document.getElementById('LC_addtool'+prefix).style.display = 'block';
               }
           } else {
               if (document.getElementById('LC_exttoolon'+prefix)) {
                   document.getElementById('LC_exttoolon'+prefix).style.display = 'none';
               }
               if (document.getElementById('LC_exttooloff'+prefix)) {
                   document.getElementById('LC_exttooloff'+prefix).style.display = 'block';
               }
               if (document.getElementById('LC_addtool'+prefix)) {
                   document.getElementById('LC_addtool'+prefix).style.display = 'none';
               }
           }
           if (selelem.options.length == 0) {
               selelem.options[selelem.options.length] = new Option('','');
               selelem.selectedIndex = 0;
           }
           updateExttool(selelem,form,supplementalflag);
           resize_scrollbox('contentscroll','1','1');
       }
       return;
   }
   
 function updateExttool(caller,form,supplementalflag) {  function updateExttool(caller,form,supplementalflag) {
     var prefix = '';      var prefix = '';
     if (supplementalflag == 1) {      if (supplementalflag == 1) {
Line 957  function updateExttool(caller,form,suppl Line 1285  function updateExttool(caller,form,suppl
     labeldiv = prefix+'toolcrslabeldiv';      labeldiv = prefix+'toolcrslabeldiv';
     titlediv = prefix+'toolcrstitlediv';      titlediv = prefix+'toolcrstitlediv';
     appenddiv = prefix+'toolcrsappenddiv';      appenddiv = prefix+'toolcrsappenddiv';
       gradablediv = prefix+'toolgradablediv';
     providerurl = prefix+'toolproviderurl';      providerurl = prefix+'toolproviderurl';
     labelinput = prefix+'toolcrslabel';      labelinput = prefix+'toolcrslabel';
     titleinput = prefix+'toolcrstitle';      titleinput = prefix+'toolcrstitle';
Line 994  function updateExttool(caller,form,suppl Line 1323  function updateExttool(caller,form,suppl
             if (document.getElementById(appenddiv)) {              if (document.getElementById(appenddiv)) {
                 document.getElementById(appenddiv).style.display = 'none';                  document.getElementById(appenddiv).style.display = 'none';
             }              }
               if (document.getElementById(gradablediv)) {
                   document.getElementById(gradablediv).style.display = 'none';
               }
         } else {          } else {
             if (ltitools.length > 0) {              var tooltype = '';
                 for (var j=0; j<ltitools.length; j++) {              var typeelem = form.elements[prefix+'exttooltype'];
                     if (ltitools[j] == toolpick) {              if (typeelem.length) {
                         if (document.getElementById(dispdiv)) {                  for (var i=0; i<typeelem.length; i++) {
                             if (ltitoolsDisplay[j]) {                      if (typeelem[i].checked) {
                                 document.getElementById(dispdiv).style.display = 'block';                          tooltype = typeelem[i].value;
                                 if (form.exttooltarget.length) {                      }
                                     for (var k=0; k<form.exttooltarget.length; k++) {                  }
                                         if (form.exttooltarget[k].value == ltitoolsTarget[j]) {              }
                                             form.exttooltarget[k].checked = true;              if ((tooltype == 'crs') || (tooltype == 'dom')) {
                                             break;                  var i = 0;
                   if (tooltype == 'dom') {
                       i = 1;
                   }
                   if (ltitools[i].length > 0) {
                       for (var j=0; j<ltitools[i].length; j++) {
                           if (ltitools[i][j] == toolpick) {
                               if (document.getElementById(dispdiv)) {
                                   if (ltitoolsDisplay[i][j]) {
                                       document.getElementById(dispdiv).style.display = 'block';
                                       if (form.exttooltarget.length) {
                                           for (var k=0; k<form.exttooltarget.length; k++) {
                                               if (form.exttooltarget[k].value == ltitoolsTarget[i][j]) {
                                                   form.exttooltarget[k].checked = true;
                                                   break;
                                               }
                                         }                                          }
                                     }                                      }
                                 }                                  }
                             }                                  var dimen = 'none';
                             var dimen = 'none';                                  var dimenwidth = '';
                             var dimenwidth = '';                                  var dimenheight = '';
                             var dimenheight = '';                                  if ((ltitoolsDisplay[i][j]) && (ltitoolsTarget[i][j] == 'window')) {
                             if ((ltitoolsDisplay[j]) && (ltitoolsTarget[j] == 'window')) {                                      dimen = 'block';
                                 dimen = 'block';                                      dimenwidth = ltitoolsWidth[i][j];
                                 dimenwidth = ltitoolsWidth[j];                                      dimenheight = ltitoolsHeight[i][j];
                                 dimenheight = ltitoolsHeight[j];                                                      }
                             }                                  if (document.getElementById(dimendiv)) {
                             if (document.getElementById(dimendiv)) {                                      document.getElementById(dimendiv).style.display = dimen;
                                 document.getElementById(dimendiv).style.display = dimen;                                  }
                             }                                  if (document.getElementById(widthinput)) {
                             if (document.getElementById(widthinput)) {                                      document.getElementById(widthinput).value = dimenwidth;
                                 document.getElementById(widthinput).value = dimenwidth;                                  }
                             }                                  if (document.getElementById(heightinput)) {
                             if (document.getElementById(heightinput)) {                                      document.getElementById(heightinput).value = dimenheight;
                                 document.getElementById(heightinput).value = dimenheight;  
                             }  
                         }  
                         if (document.getElementById(windiv)) {  
                             if ((ltitoolsTarget[j] == 'window') || (ltitoolsTarget[j] == 'tab')) {  
                                 document.getElementById(windiv).style.display = 'block';  
                             } else {  
                                 document.getElementById(windiv).style.display = 'none';  
                             }  
                             if (document.getElementById(linktextdiv)) {  
                                 if (ltitoolsLink[j]) {  
                                     document.getElementById(linktextdiv).style.display = 'inline';  
                                 } else {  
                                     document.getElementById(linktextdiv).style.display = 'none';  
                                 }                                  }
                             }                              }
                             if (document.getElementById(linktextinput)) {                              if (document.getElementById(windiv)) {
                                 if (ltitoolsLink[j]) {                                  if ((ltitoolsTarget[i][j] == 'window') || (ltitoolsTarget[i][j] == 'tab')) {
                                     document.getElementById(linktextinput).value = ltitoolsLinkDef[j];                                       document.getElementById(windiv).style.display = 'block';
                                 } else {                                  } else {
                                     document.getElementById(linktextinput).value = '';                                      document.getElementById(windiv).style.display = 'none';
                                   }
                                   if (document.getElementById(linktextdiv)) {
                                       if (ltitoolsLink[i][j]) {
                                           document.getElementById(linktextdiv).style.display = 'inline';
                                       } else {
                                           document.getElementById(linktextdiv).style.display = 'none';
                                       }
                                   }
                                   if (document.getElementById(linktextinput)) {
                                       if (ltitoolsLink[i][j]) {
                                           document.getElementById(linktextinput).value = ltitoolsLinkDef[i][j];
                                       } else {
                                           document.getElementById(linktextinput).value = '';
                                       }
                                   }
                                   if (document.getElementById(explanationdiv)) {
                                       if (ltitoolsExplain[i][j]) {
                                           document.getElementById(explanationdiv).style.display = 'inline';
                                       } else {
                                           document.getElementById(explanationdiv).style.display = 'none';
                                       }
                                   }
                                   if (document.getElementById(explanationinput)) {
                                       if (ltitoolsExplain[i][j]) {
                                           document.getElementById(explanationinput).value = ltitoolsExplainDef[i][j];
                                       } else {
                                           document.getElementById(explananationinput).value = '';
                                       }
                                 }                                  }
                             }                              }
                             if (document.getElementById(explanationdiv)) {                              if (document.getElementById(labeldiv)) {
                                 if (ltitoolsExplain[j]) {                                  if (ltitoolsLabel[i][j]) {
                                     document.getElementById(explanationdiv).style.display = 'inline';                                      document.getElementById(labeldiv).style.display = 'inline';
                                 } else {                                  } else {
                                     document.getElementById(explanationdiv).style.display = 'none';                                      document.getElementById(labeldiv).style.display = 'none';
                                 }                                  }
                             }                              }
                             if (document.getElementById(explanationinput)) {                              if (document.getElementById(titlediv)) {
                                 if (ltitoolsExplain[j]) {                                  if (ltitoolsTitle[i][j]) {
                                     document.getElementById(explanationinput).value = ltitoolsExplainDef[j];                                      document.getElementById(titlediv).style.display = 'inline';
                                 } else {                                  } else {
                                     document.getElementById(explananationinput).value = '';                                      document.getElementById(titlediv).style.display = 'none';
                                 }                                  }
                             }                              }
                         }                              if (document.getElementById(appenddiv)) {
                         if (document.getElementById(labeldiv)) {                                  if (ltitoolsAppend[i][j]) {
                             if (ltitoolsLabel[j]) {                                      document.getElementById(appenddiv).style.display = 'inline';
                                 document.getElementById(labeldiv).style.display = 'inline';                                      if (document.getElementById(providerurl)) {
                             } else {                                          if ((ltitoolsUrl[i][j] != '') && (ltitoolsUrl[i][j] != null)) {
                                 document.getElementById(labeldiv).style.display = 'none';                                              document.getElementById(providerurl).innerHTML = '&nbsp;('+ltitoolsUrl[i][j]+')<br />';
                             }                                           }
                         }                                      }
                         if (document.getElementById(titlediv)) {                                  } else {
                             if (ltitoolsTitle[j]) {                                      document.getElementById(appenddiv).style.display = 'none';
                                 document.getElementById(titlediv).style.display = 'inline';                                      if (document.getElementById(providerurl)) {
                             } else {                                          document.getElementById(providerurl).innerHTML = '';
                                 document.getElementById(titlediv).style.display = 'none';  
                             }  
                         }  
                         if (document.getElementById(appenddiv)) {  
                             if (ltitoolsAppend[j]) {  
                                 document.getElementById(appenddiv).style.display = 'inline';  
                                 if (document.getElementById(providerurl)) {  
                                     if ((ltitoolsUrl[j] != '') && (ltitoolsUrl[j] != null)) {  
                                         document.getElementById(providerurl).innerHTML = '&nbsp;('+ltitoolsUrl[j]+')<br />';  
                                     }                                      }
                                 }                                  }
                             } else {                              }
                                 document.getElementById(appenddiv).style.display = 'none';                              if (document.getElementById(gradablediv)) {
                                 if (document.getElementById(providerurl)) {                                  if (supplementalflag != 1) {
                                     document.getElementById(providerurl).innerHTML = '';                                      document.getElementById(gradablediv).style.display = 'inline';
                                 }                                  }
                             }                              }
                               break;
                         }                          }
                         break;  
                     }                      }
                 }                  }
             }              }

Removed from v.1.8.2.4.4.1  
changed lines
  Added in v.1.8.2.4.4.2


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