]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Patch by David Gardiner <david.gardiner@unisa.edu.au> (with further
authorterry%netscape.com <>
Sat, 20 Mar 1999 05:40:14 +0000 (05:40 +0000)
committerterry%netscape.com <>
Sat, 20 Mar 1999 05:40:14 +0000 (05:40 +0000)
hacks by me):

Added javascript magic to adjust component/version lists when products
get selected.

query.cgi

index 66a1f5b54de49c7f7152184dc3c09b4db6fc1981..2653f46d6216a0bd3326c7d0e97fb4d9b7aa4fe4 100755 (executable)
--- a/query.cgi
+++ b/query.cgi
@@ -18,6 +18,7 @@
 # Netscape Communications Corporation. All Rights Reserved.
 # 
 # Contributor(s): Terry Weissman <terry@mozilla.org>
+#                 David Gardiner <david.gardiner@unisa.edu.au>
 
 use diagnostics;
 use strict;
@@ -37,6 +38,8 @@ use vars @::legal_resolution,
   @::legal_versions,
   @::legal_severity,
   @::legal_target_milestone,
+  %::versions,
+  %::components,
   %::FORM;
 
 
@@ -181,6 +184,127 @@ my $emailinput1 = GenerateEmailInput(1);
 my $emailinput2 = GenerateEmailInput(2);
 
 
+# javascript
+    
+my $jscript = << 'ENDSCRIPT';
+<script language="Javascript1.1">
+<!--
+var cpts = new Array();
+var vers = new Array();
+ENDSCRIPT
+
+
+my $p;
+my $v;
+my $c;
+my $i = 0;
+my $j = 0;
+
+foreach $c (@::legal_components) {
+    $jscript .= "cpts['$c'] = [];\n";
+}
+
+foreach $v (@::legal_versions) {
+    $jscript .= "vers['$v'] = [];\n";
+}
+
+
+for $p (@::legal_product) {
+    foreach $c (@{$::components{$p}}) {
+        $jscript .= "cpts['$c'].push('$p');\n";
+    }
+    foreach $v (@{$::versions{$p}}) {
+        $jscript .= "vers['$v'].push('$p');\n";
+    }
+}
+
+$i = 0;
+$jscript .= "
+
+// Only display versions/components valid for selected product(s)
+
+function selectProduct(f) {
+    var cnt = 0;
+    var i;
+    var j;
+    for (i=0 ; i<f.product.length ; i++) {
+        if (f.product[i].selected) {
+            cnt++;
+        }
+    }
+    var doall = (cnt == f.product.length || cnt == 0);
+
+    var csel = new Array();
+    for (i=0 ; i<f.component.length ; i++) {
+        if (f.component[i].selected) {
+            csel[f.component[i].value] = 1;
+        }
+    }
+
+    f.component.options.length = 0;
+
+    for (c in cpts) {
+        var doit = doall;
+        for (i=0 ; !doit && i<f.product.length ; i++) {
+            if (f.product[i].selected) {
+                var p = f.product[i].value;
+                for (j in cpts[c]) {
+                    var p2 = cpts[c][j];
+                    if (p2 == p) {
+                        doit = true;
+                        break;
+                    }
+                }
+            }
+        }
+        if (doit) {
+            var l = f.component.length;
+            f.component[l] = new Option(c, c);
+            if (csel[c] != undefined) {
+                f.component[l].selected = true;
+            }
+        }
+    }
+
+    var vsel = new Array();
+    for (i=0 ; i<f.version.length ; i++) {
+        if (f.version[i].selected) {
+            vsel[f.version[i].value] = 1;
+        }
+    }
+
+    f.version.options.length = 0;
+
+    for (v in vers) {
+        var doit = doall;
+        for (i=0 ; !doit && i<f.product.length ; i++) {
+            if (f.product[i].selected) {
+                var p = f.product[i].value;
+                for (j in vers[v]) {
+                    var p2 = vers[v][j];
+                    if (p2 == p) {
+                        doit = true;
+                        break;
+                    }
+                }
+            }
+        }
+        if (doit) {
+            var l = f.version.length;
+            f.version[l] = new Option(v, v);
+            if (vsel[v] != undefined) {
+                f.version[l].selected = true;
+            }
+        }
+    }
+
+
+
+
+}
+// -->
+</script>\n";
+
 
 
 # Muck the "legal product" list so that the default one is always first (and
@@ -198,6 +322,8 @@ PutHeader("Bugzilla Query Page", "Query Page");
 push @::legal_resolution, "---"; # Oy, what a hack.
 push @::legal_target_milestone, "---"; # Oy, what a hack.
 
+print $jscript;
+
 print "
 <FORM NAME=queryForm METHOD=GET ACTION=\"buglist.cgi\">
 
@@ -271,7 +397,7 @@ print "
 <tr>
 
 <td align=left valign=top>
-<SELECT NAME=\"product\" MULTIPLE SIZE=5>
+<SELECT NAME=\"product\" MULTIPLE SIZE=5 onChange=\"selectProduct(this.form);\">
 @{[make_options(\@::legal_product, $default{'product'}, $type{'product'})]}
 </SELECT>
 </td>