Diff for /loncom/interface/lonextresedit.pm between versions 1.30 and 1.31

version 1.30, 2022/09/09 14:24:30 version 1.31, 2023/05/22 21:10:55
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 375  sub extedit_form { Line 386  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,$gradablestyle,$legend,$urlelem,$toolelem,%toolattr);          $appendstyle,$gradablestyle,$subdivstyle,$legend,$urlelem,$toolelem,%toolattr);
     $formname = 'new'.$type;      $formname = 'new'.$type;
     $toggle = $type;      $toggle = $type;
     $fieldsetid = 'external'.$type.'form';      $fieldsetid = 'external'.$type.'form';
Line 402  sub extedit_form { Line 415  sub extedit_form {
     $titlestyle = 'display:none';      $titlestyle = 'display:none';
     $appendstyle = 'display:none';      $appendstyle = 'display:none';
     $gradablestyle = '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 490  sub extedit_form { Line 504  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 ($toolhash{'gradable'}) {                          $windivstyle = 'display:block';
                                     $chkgrd = ' checked="checked"';                          $chkstate{'window'} = 'checked="checked" ';
                                 } else {                      } elsif ($tooltarget eq 'tab') {
                                     $chknogrd = ' checked="checked"';                          $windivstyle = 'display:block';
                                 }                          $chkstate{'tab'} = 'checked="checked" ';
                                 if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') {                      } else {
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) {                          $chkstate{'iframe'} = 'checked="checked" ';
                                         $crstitle = $toolhash{'crstitle'};                      }
                                         $titlestyle = 'display:inline';                      $width = $toolhash{'width'};
                                     }                      $height = $toolhash{'height'};
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'label'}) {                        $linktext = $toolhash{'linktext'};
                                         $crslabel = $toolhash{'crslabel'};                      $explanation = $toolhash{'explanation'};
                                         $labelstyle = 'display:inline';                      if ($toolhash{'gradable'}) {
                                     }                          $chkgrd = ' checked="checked"';
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'append'}) {                      } else {
                                         $crsappend = $toolhash{'crsappend'};                          $chknogrd = ' checked="checked"';
                                         $appendstyle = 'display:inline';                      }
                                     }                      if (ref($ltihash->{'crsconf'}) eq 'HASH') {
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) {                          if ($ltihash->{'crsconf'}->{'title'}) {
                                         $dispdivstyle = 'display:block';                              $crstitle = $toolhash{'crstitle'};
                                     }                              $titlestyle = 'display:inline';
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'linktext'}) {                          }
                                         $linktextstyle = 'padding:0;display:inline';                          if ($ltihash->{'crsconf'}->{'label'}) {  
                                     }                              $crslabel = $toolhash{'crslabel'};
                                     if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'explanation'}) {                              $labelstyle = 'display:inline';
                                         $explanationstyle = 'padding:0;display:inline';                          }
                                     }                          if ($ltihash->{'crsconf'}->{'append'}) {
                                 }                              $crsappend = $toolhash{'crsappend'};
                                 $toolelem = '<span class="LC_nobreak">'.$image.'&nbsp;'.$tooltitle.'</span><br />';                              $appendstyle = 'display:inline';
                                 $gradablestyle = '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:none';
                       $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 = '';
Line 646  $preview Line 722  $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 666  ENDFORM Line 742  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 681  sub display_editor { Line 786  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 704  sub display_editor { Line 820  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";  
                 }                  }
                   my $firstoption = '<option value="" selected="selected">'.&mt('Select').'</option>';
                 $i++;                  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(
Line 773  sub extedit_javascript { Line 925  sub extedit_javascript {
         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',
           sele    => 'Select',
     );      );
     &js_escape(\%js_lt);      &js_escape(\%js_lt);
   
Line 811  function setExternal(extform,residx,type Line 964  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 1035  function openPreviewWindow(url,name,noif Line 1200  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 1089  function updateExttool(caller,form,suppl Line 1325  function updateExttool(caller,form,suppl
                 document.getElementById(gradablediv).style.display = 'none';                  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(providerurl)) {  
                                     document.getElementById(providerurl).innerHTML = '';  
                                 }                                  }
                             }                              }
                         }                              if (document.getElementById(gradablediv)) {
                         if (document.getElementById(gradablediv)) {                                  if (supplementalflag != 1) {
                             if (supplementalflag != 1) {                                      document.getElementById(gradablediv).style.display = 'inline';
                                 document.getElementById(gradablediv).style.display = 'inline';                                  }
                             }                              }
                               break;
                         }                          }
                         break;  
                     }                      }
                 }                  }
             }              }

Removed from v.1.30  
changed lines
  Added in v.1.31


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