Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ivan Ivlev
bugzilla
Commits
6f095c3f
Commit
6f095c3f
authored
May 29, 2001
by
justdave%syndicomm.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for bug 77699 and bug 71503: fix javascript errors in quicksearch and improve IE5 compatibility
Patch by Stephan Lee <slee@uk.bnsmc.com> and Andreas Franke <afranke@ags.uni-sb.de>
parent
635e37bb
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
116 additions
and
49 deletions
+116
-49
quicksearch.js
quicksearch.js
+116
-49
No files found.
quicksearch.js
View file @
6f095c3f
...
...
@@ -12,6 +12,46 @@
//
// Created by
// Andreas Franke <afranke@mathweb.org>
//
// Contributors:
// Stephen Lee <slee@uk.bnsmc.com>
// variable below should be initialised according to whether
// browser is IE 5.0 or earlier, but should be false for IE 5.5
var
is_IE5
=
(
navigator
.
appVersion
.
search
(
/MSIE 5.0/g
)
>
0
);
// Bodge to get round IE5 not understanding "undefined", "shift" and "unshift"
var
no_result
=
is_IE5
?
"---"
:
undefined
;
function
do_unshift
(
l
,
s
)
{
if
(
is_IE5
)
{
l
.
length
=
l
.
length
+
1
;
for
(
var
i
=
l
.
length
-
1
;
i
>
0
;
i
--
)
{
l
[
i
]
=
l
[
i
-
1
];
}
l
[
0
]
=
s
;
return
l
.
length
;
}
else
{
return
l
.
unshift
(
s
);
}
}
function
do_shift
(
l
)
{
if
(
is_IE5
)
{
var
l0
=
l
[
0
];
for
(
var
i
=
0
;
i
<
l
.
length
-
1
;
i
++
)
{
l
[
i
]
=
l
[
i
+
1
];
}
l
.
length
=
l
.
length
-
1
;
return
l0
;
}
else
{
return
l
.
shift
();
}
}
function
go_to
(
url
)
{
document
.
location
.
href
=
url
;
...
...
@@ -19,7 +59,7 @@ function go_to (url) {
}
function
map
(
l
,
f
)
{
l1
=
new
Array
();
var
l1
=
new
Array
();
for
(
var
i
=
0
;
i
<
l
.
length
;
i
++
)
{
l1
[
i
]
=
f
(
l
[
i
]);
}
...
...
@@ -38,7 +78,7 @@ function member(s, l) {
function
add
(
s
,
l
)
{
if
(
!
member
(
s
,
l
))
{
l
.
unshift
(
s
);
do_unshift
(
l
,
s
);
}
}
...
...
@@ -141,7 +181,7 @@ function findIndex(array,value) {
function
mapField
(
fieldname
)
{
var
i
=
findIndex
(
f1
,
fieldname
);
if
(
i
>=
0
)
return
f2
[
i
];
return
undefined
;
return
no_result
;
}
// `keywords' is defined externally
...
...
@@ -165,14 +205,14 @@ function is_severity(str) {
// `product_exceptions' is defined externally
function
match_product
(
str
)
{
s
=
str
.
toLowerCase
();
var
s
=
str
.
toLowerCase
();
return
(
s
.
length
>
2
)
&&
(
!
member
(
s
,
product_exceptions
));
}
// `component_exceptions are defined externally
function
match_component
(
str
)
{
s
=
str
.
toLowerCase
();
var
s
=
str
.
toLowerCase
();
return
(
s
.
length
>
2
)
&&
(
!
member
(
s
,
component_exceptions
));
}
...
...
@@ -222,27 +262,62 @@ function make_query_URL(url, input, searchLong) {
status_and_resolution
=
""
;
charts
=
""
;
var
searchURL
=
url
;
//bugzilla + "buglist.cgi";
var
abort
=
false
;
// declare all variables used in this function
var
searchURL
=
url
;
// bugzilla + "buglist.cgi" (or "query.cgi")
var
abort
=
false
;
// global flag, checked upon return
var
i
,
j
,
k
,
l
;
// index counters used in 'for' loops
var
parts
,
input2
;
// escape "quoted" parts of input
var
word
;
// array of words
// (space-separated parts of input2)
var
alternative
;
// array of parts of an element of 'word'
// (separated by '|', sometimes by comma)
var
comma_separated_words
;
// array of parts of an element of 'alternative'
var
w
;
// current element of one of these arrays:
// word, alternative, comma_separated_words
var
w0
;
// first element of 'word'
var
prefixes
;
// comma-separated parts of w0
// (prefixes of status/resolution values)
var
expr
;
// used for 'priority' support
var
n
,
separator
;
// used for 'votes' support
var
colon_separated_parts
,
fields
,
values
,
field
;
// used for generic fields:values notation
var
chart
,
and
,
or
;
// counters used in add_chart
var
negation
;
// boolean flag used in add_chart
// `statuses_open' and `statuses_resolved' are defined externally
var
statusOpen
=
statuses_open
;
var
statusResolved
=
statuses_resolved
;
var
statusAll
=
statusOpen
.
concat
(
statusResolved
);
// `resolutions' is defined externally
var
bug_status
=
statusOpen
.
slice
().
reverse
();
//reverse is just cosmetic
var
resolution
=
new
Array
();
// escape everything between quotes: "foo bar" --> "foo%20bar"
var
parts
=
input
.
split
(
'"'
);
parts
=
input
.
split
(
'"'
);
if
((
parts
.
length
%
2
)
!=
1
)
{
alert
(
'Unterminated quote'
);
abort
=
true
;
return
undefined
;
return
no_result
;
}
for
(
var
i
=
1
;
i
<
parts
.
length
;
i
+=
2
)
{
for
(
i
=
1
;
i
<
parts
.
length
;
i
+=
2
)
{
parts
[
i
]
=
escape
(
parts
[
i
]);
}
var
input2
=
parts
.
join
(
'"'
);
input2
=
parts
.
join
(
'"'
);
// abort if there are still brackets
if
(
input2
.
match
(
/
[
(
]
|
[\)]
/
))
{
alert
(
'Brackets (...) are not supported.
\
n'
+
'Use quotes "..." for values that contain special characters.'
);
abort
=
true
;
return
undefined
;
return
no_result
;
}
// translate " AND "," OR "," NOT " to space,comma,dash
...
...
@@ -251,20 +326,11 @@ function make_query_URL(url, input, searchLong) {
input2
=
input2
.
replace
(
/
[\s]
+NOT
[\s]
+/g
,
" -"
);
// now split into words at space positions
var
word
=
input2
.
split
(
/
[\s]
+/
);
word
=
input2
.
split
(
/
[\s]
+/
);
// determine bug_status and resolution
// the first word may contain relevant info
// `statuses_open' and `statuses_resolved' are defined externally
var
statusOpen
=
statuses_open
;
var
statusResolved
=
statuses_resolved
;
var
statusAll
=
statusOpen
.
concat
(
statusResolved
);
// `resolutions' is defined externally
var
bug_status
=
statusOpen
.
slice
().
reverse
();
//reverse is just cosmetic
var
resolution
=
new
Array
();
// This function matches the given prefixes against the given statuses and
// resolutions. Matched statuses are added to bug_status, matched
// resolutions are added to resolution. Returns true iff some matches
...
...
@@ -292,24 +358,24 @@ function make_query_URL(url, input, searchLong) {
if
(
word
[
0
]
==
"ALL"
)
{
// special case: search for bugs regardless of status
addAll
(
statusResolved
,
bug_status
);
word
.
shift
(
);
do_shift
(
word
);
}
else
if
(
word
[
0
]
==
"OPEN"
)
{
// special case: search for open bugs only
word
.
shift
(
);
do_shift
(
word
);
}
else
if
(
word
[
0
].
match
(
"^[+][A-Z]+(,[A-Z]+)*$"
))
{
// e.g. +DUP,FIX
w0
=
word
.
shift
(
);
w0
=
do_shift
(
word
);
prefixes
=
w0
.
substring
(
1
).
split
(
","
);
if
(
!
matchPrefixes
(
prefixes
,
statusResolved
,
resolutions
))
{
word
.
unshift
(
w0
);
do_unshift
(
word
,
w0
);
}
}
else
if
(
word
[
0
].
match
(
"^[A-Z]+(,[A-Z]+)*$"
))
{
// e.g. NEW,ASSI,REOP,FIX
bug_status
=
new
Array
();
// reset
w0
=
word
.
shift
();
w0
=
do_shift
(
word
);
prefixes
=
w0
.
split
(
","
);
if
(
!
matchPrefixes
(
prefixes
,
statusAll
,
resolutions
))
{
word
.
unshift
(
w0
);
do_unshift
(
word
,
w0
);
bug_status
=
statusOpen
.
reverse
();
//reset to default bug_status
}
}
else
{
...
...
@@ -320,7 +386,7 @@ function make_query_URL(url, input, searchLong) {
}
if
(
resolution
.
length
>
0
)
{
resolution
=
resolution
.
reverse
();
resolution
.
unshift
(
"---"
);
do_unshift
(
resolution
,
"---"
);
addAll
(
statusResolved
,
bug_status
);
}
bug_status
=
bug_status
.
reverse
();
...
...
@@ -336,11 +402,11 @@ function make_query_URL(url, input, searchLong) {
// end of bug_status & resolution stuff
var
chart
=
0
;
var
and
=
0
;
var
or
=
0
;
chart
=
0
;
and
=
0
;
or
=
0
;
var
negation
=
false
;
negation
=
false
;
function
negate_comparison_type
(
type
)
{
switch
(
type
)
{
...
...
@@ -351,6 +417,7 @@ function make_query_URL(url, input, searchLong) {
// e.g. "greaterthan"
alert
(
"Can't negate comparison type: `"
+
type
+
"'"
);
abort
=
true
;
return
"dummy"
;
}
}
...
...
@@ -379,7 +446,7 @@ function make_query_URL(url, input, searchLong) {
}
}
for
(
var
i
=
0
;
i
<
word
.
length
;
i
++
,
chart
++
)
{
for
(
i
=
0
;
i
<
word
.
length
;
i
++
,
chart
++
)
{
w
=
word
[
i
];
...
...
@@ -392,7 +459,7 @@ function make_query_URL(url, input, searchLong) {
switch
(
w
[
0
])
{
case
"+"
:
alternative
=
w
.
substring
(
1
).
split
(
/
[
|,
]
/
);
for
(
var
j
=
0
;
j
<
alternative
.
length
;
j
++
)
for
(
j
=
0
;
j
<
alternative
.
length
;
j
++
)
add_chart
(
"short_desc"
,
"substring"
,
alternative
[
j
]);
break
;
case
"#"
:
...
...
@@ -403,14 +470,14 @@ function make_query_URL(url, input, searchLong) {
break
;
case
":"
:
alternative
=
w
.
substring
(
1
).
split
(
","
);
for
(
var
j
=
0
;
j
<
alternative
.
length
;
j
++
)
{
for
(
j
=
0
;
j
<
alternative
.
length
;
j
++
)
{
add_chart
(
"product"
,
"substring"
,
alternative
[
j
]);
add_chart
(
"component"
,
"substring"
,
alternative
[
j
]);
}
break
;
case
"@"
:
alternative
=
w
.
substring
(
1
).
split
(
","
);
for
(
var
j
=
0
;
j
<
alternative
.
length
;
j
++
)
for
(
j
=
0
;
j
<
alternative
.
length
;
j
++
)
add_chart
(
"assigned_to"
,
"substring"
,
alternative
[
j
]);
break
;
case
"["
:
...
...
@@ -422,7 +489,7 @@ function make_query_URL(url, input, searchLong) {
break
;
default
:
alternative
=
w
.
split
(
"|"
);
for
(
var
j
=
0
;
j
<
alternative
.
length
;
j
++
)
{
for
(
j
=
0
;
j
<
alternative
.
length
;
j
++
)
{
w
=
alternative
[
j
];
...
...
@@ -434,18 +501,18 @@ function make_query_URL(url, input, searchLong) {
}
// generic field1,field2,field3:value1,value2 notation
if
(
w
.
match
(
"^[^:]+[:][^:
\
/][^:]*$"
))
{
parts
=
w
.
split
(
":"
);
fields
=
parts
[
0
].
split
(
/
[
,
]
+/
);
values
=
parts
[
1
].
split
(
/
[
,
]
+/
);
for
(
var
k
=
0
;
k
<
fields
.
length
;
k
++
)
{
colon_separated_
parts
=
w
.
split
(
":"
);
fields
=
colon_separated_
parts
[
0
].
split
(
/
[
,
]
+/
);
values
=
colon_separated_
parts
[
1
].
split
(
/
[
,
]
+/
);
for
(
k
=
0
;
k
<
fields
.
length
;
k
++
)
{
field
=
mapField
(
fields
[
k
]);
if
(
field
==
undefined
)
{
if
(
field
==
no_result
)
{
alert
(
"`"
+
fields
[
k
]
+
"'"
+
" is not a valid field name."
);
abort
=
true
;
return
undefined
;
return
no_result
;
}
else
{
for
(
var
l
=
0
;
l
<
values
.
length
;
l
++
)
{
for
(
l
=
0
;
l
<
values
.
length
;
l
++
)
{
add_chart
(
field
,
"substring"
,
values
[
l
]);
}
}
...
...
@@ -453,7 +520,7 @@ function make_query_URL(url, input, searchLong) {
continue
;
}
comma_separated_words
=
w
.
split
(
/
[
,
]
+/
);
for
(
var
k
=
0
;
k
<
comma_separated_words
.
length
;
k
++
)
{
for
(
k
=
0
;
k
<
comma_separated_words
.
length
;
k
++
)
{
w
=
comma_separated_words
[
k
];
// platform
...
...
@@ -531,7 +598,7 @@ function make_query_URL(url, input, searchLong) {
if
(
abort
==
false
)
{
return
searchURL
;
}
else
{
return
undefined
;
return
no_result
;
}
}
...
...
@@ -542,7 +609,7 @@ function unique_id () {
function
ShowURL
(
mode
)
{
var
input
=
document
.
f
.
id
.
value
;
var
searchURL
=
make_query_URL
(
bugzilla
+
"buglist.cgi"
,
input
,
false
);
if
(
searchURL
!=
undefined
)
{
if
(
searchURL
!=
no_result
)
{
var
pieces
=
searchURL
.
replace
(
/
[\?]
/g
,
"
\
n?"
).
replace
(
/
[\&]
/g
,
"
\
n&"
);
if
(
mode
==
"alert"
)
{
alert
(
pieces
);
...
...
@@ -601,7 +668,7 @@ function Search(url, input, searchLong) {
return
;
}
var
searchURL
=
make_query_URL
(
url
,
inputstring
,
searchLong
);
if
(
searchURL
!=
undefined
)
{
if
(
searchURL
!=
no_result
)
{
go_to
(
searchURL
);
//window.open(searchURL, "other" );
}
else
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment