[LON-CAPA-cvs] cvs: loncom /interface lonhelper.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Wed, 07 May 2003 18:48:15 -0000


bowersj2		Wed May  7 14:48:15 2003 EDT

  Modified files:              
    /loncom/interface	lonhelper.pm 
  Log:
  HACK HACK HACK
  
  Makes the "Select Published" and "Unselect Published" work in Netscape 4.
  See lengthy comment explaining why it's done this way.
  
  ****'in Netscape 4.
  
  
  
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.21 loncom/interface/lonhelper.pm:1.22
--- loncom/interface/lonhelper.pm:1.21	Wed May  7 14:22:43 2003
+++ loncom/interface/lonhelper.pm	Wed May  7 14:48:15 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # .helper XML handler to implement the LON-CAPA helper
 #
-# $Id: lonhelper.pm,v 1.21 2003/05/07 18:22:43 bowersj2 Exp $
+# $Id: lonhelper.pm,v 1.22 2003/05/07 18:48:15 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1835,6 +1835,10 @@
 
     my $filterFunc = $self->{FILTER_FUNC};
     my $buttons = '';
+    my $type = 'radio';
+    if ($self->{'multichoice'}) {
+        $type = 'checkbox';
+    }
 
     if ($self->{'multichoice'}) {
         $result = <<SCRIPT;
@@ -1848,10 +1852,10 @@
         }
     }
 
-    function checkallid(value, idName) {
+    function checkallclass(value, className) {
         for (i=0; i<document.forms.helpform.elements.length; i++) {
             ele = document.forms.helpform.elements[i];
-            if (ele.id == idName) {
+            if (ele.type == "$type" && ele.onclick) {
                 document.forms.helpform.elements[i].checked=value;
             }
         }
@@ -1862,8 +1866,8 @@
 <br /> &nbsp;
 <input type="button" onclick="checkall(true, '$var')" value="Select All Files" />
 <input type="button" onclick="checkall(false, '$var')" value="Unselect All Files" />
-<input type="button" onclick="checkallid(true, 'Published')" value="Select All Published" />
-<input type="button" onclick="checkallid(false, 'Published')" value="Unselect All Published" />
+<input type="button" onclick="checkallclass(true, 'Published')" value="Select All Published" />
+<input type="button" onclick="checkallclass(false, 'Published')" value="Unselect All Published" />
 <br /> &nbsp;
 BUTTONS
     }
@@ -1892,10 +1896,6 @@
     # Keeps track if there are no choices, prints appropriate error
     # if there are none. 
     my $choices = 0;
-    my $type = 'radio';
-    if ($self->{'multichoice'}) {
-        $type = 'checkbox';
-    }
     # Print each legitimate file choice.
     for my $file (@fileList) {
         $file = (split(/&/, $file))[0];
@@ -1905,8 +1905,28 @@
         my $fileName = $subdir .'/'. $file;
         if (&$filterFunc($file)) {
             (my $status, my $color) = @{fileState($subdir, $file)};
+
+            # Netscape 4 is stupid and there's nowhere to put the
+            # information on the input tag that the file is Published,
+            # Unpublished, etc. In *real* browsers we can just say
+            # "class='Published'" and check the className attribute of
+            # the input tag, but Netscape 4 is too stupid to understand
+            # that attribute, and un-comprehended attributes are not
+            # reflected into the object model. So instead, what I do 
+            # is either have or don't have an "onclick" handler that 
+            # does nothing, give Published files the onclick handler, and
+            # have the checker scripts check for that. Stupid and clumsy,
+            # and only gives us binary "yes/no" information (at least I
+            # couldn't figure out how to reach into the event handler's
+            # actual code to retreive a value), but it works well enough
+            # here.
+
+            my $onclick = '';
+            if ($status eq 'Published') {
+                $onclick = 'onclick="a=1" ';
+            }
             $result .= '<tr><td align="right"' . " bgcolor='$color'>" .
-                "<input id='$status' type='$type' name='" . $var
+                "<input $onclick type='$type' name='" . $var
             . ".forminput' value='" . HTML::Entities::encode($fileName) .
                 "'";
             if (!$self->{'multichoice'} && $choices == 0) {