From f4966aeb0e7a655c986aeb285c1a220274ddbfd9 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Mon, 22 Aug 2005 01:16:40 +0000 Subject: Bug 70907: QuickSearch: port the JS code to perl (make it server-side) - Patch by Marc Schumann r=wicked a=myk --- quicksearch.js | 740 --------------------------------------------------------- 1 file changed, 740 deletions(-) delete mode 100644 quicksearch.js (limited to 'quicksearch.js') diff --git a/quicksearch.js b/quicksearch.js deleted file mode 100644 index 29ab6eb6b..000000000 --- a/quicksearch.js +++ /dev/null @@ -1,740 +0,0 @@ -// -// This is the main JS file for QuickSearch. -// -// Derived from: -// -// * C. Begle's SimpleSearch tool: -// http://www.mozilla.org/quality/help/simplesearch.html -// http://www.mozilla.org/quality/help/bugreport.js -// -// * Jesse Ruderman's bugzilla search page: -// http://www.cs.hmc.edu/~jruderma/s/bugz.html -// -// Created by -// Andreas Franke -// -// Contributors: -// Stephen Lee - - -// Use no_result variable to avoid problems with "undefined" on some browsers - -var no_result="---"; - -// do_unshift(l, s) is equivalent to l.unshift(s), but some browsers do not -// support the built-in function. - -function do_unshift(l, s) { - 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; -} - -// do_shift(l) is equivalent to l.shift(s), but some browsers do not -// support the built-in function. - -function do_shift(l) { - var l0=l[0]; - for (var i=0; i "dependson" -// "OtherBugsDependingOnThis"--> "blocked" -//add_mapping("dependson", "dependson"); -//add_mapping("blocked", "blocked"); - -// Substring search doesn't make much sense for the following fields: -// "Attachment is patch" --> "attachments.ispatch" -// "Last changed date" --> "delta_ts" -// "Days since bug changed" --> "(to_days(now()) - to_days(bugs.delta_ts))" -//"groupset" -//"everconfirmed" -//"bug","bugid","bugno" --> "bug_id" -// "votes" --> "votes" -// "votes>5", "votes>=5", "votes=>5" works now, see below -// "votes:5" is interpreted as "votes>=5" - -function findIndex(array,value) { - for (var i=0; i= 0) return f2[i]; - return no_result; -} - -// `keywords' is defined externally - -function is_keyword(s) { - return member(s, keywords); -} - -// `platforms' is defined externally - -function is_platform(str) { - return member (str.toLowerCase(),platforms); -} - -// `severities' is defined externally - -function is_severity(str) { - return member(str.toLowerCase(),severities); -} - -// `product_exceptions' is defined externally - -function match_product(str) { - var s = str.toLowerCase(); - return (s.length > 2) && (! member(s,product_exceptions)); -} - -// `component_exceptions are defined externally - -function match_component(str) { - var s = str.toLowerCase(); - return (s.length > 2) && (! member(s,component_exceptions)); -} - -var status_and_resolution = ""; // for pretty debug output only; these vars -var charts = ""; // always hold the data from the last query - -// derived from http://www.mozilla.org/quality/help/bugreport.js - -function make_chart(expr, field, type, value) { - charts += "" + - "" + expr + "" + - "" + field + "" + - "" + type + "" + - "" + value + "" + - ""; - return "&field" + expr + "=" + field + - "&type" + expr + "=" + type + - "&value" + expr + "=" + escape(value).replace(/[+]/g,"%2B"); -} - -// returns true if at least one of comparelist had the prefix, false otherwise -function addPrefixMatches(prefix, comparelist, resultlist) { - var foundMatch = false; - for (var i=0; i "foo%20bar" - parts = input.split('"'); - if ((parts.length % 2) != 1) { - alert('Unterminated quote'); - abort = true; - return no_result; - } - for (i=1; i 0)) { - prefixesNotFoundError(failedPrefixes,statuses,resolutions); - abort = true; - } - return foundMatch; - } - - if (word[0] == "ALL") { - // special case: search for bugs regardless of status - addAll(statusResolved,bug_status); - do_shift(word); - } else if (word[0] == "OPEN") { - // special case: search for open bugs only - do_shift(word); - } else if (word[0].match("^[+][A-Z]+(,[A-Z]+)*$")) { - // e.g. +DUP,FIX - w0 = do_shift(word); - prefixes = w0.substring(1).split(","); - if (! matchPrefixes(prefixes,statusResolved,resolutions)) { - 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 = do_shift(word); - prefixes = w0.split(","); - if (! matchPrefixes(prefixes,statusAll,resolutions)) { - do_unshift(word,w0); - bug_status = statusOpen.reverse(); //reset to default bug_status - } - } else { - // default case: - // search for unresolved bugs only - // uncomment this to include duplicate bugs in the search - // add("DUPLICATE",resolution); - } - if (resolution.length > 0) { - resolution = resolution.reverse(); - do_unshift(resolution,"---"); - addAll(statusResolved,bug_status); - } - bug_status = bug_status.reverse(); - bug_status = map(bug_status,escape); - searchURL += "?bug_status=" + bug_status.join("&bug_status="); - status_and_resolution += 'Status: '+bug_status+''; - - if (resolution.length > 0) { - resolution = map(resolution,escape); - searchURL += "&resolution=" + resolution.join("&resolution="); - status_and_resolution += '
'+'Resolution: '+resolution+''; - } - - // end of bug_status & resolution stuff - - chart = 0; - and = 0; - or = 0; - - negation = false; - - function negate_comparison_type(type) { - switch(type) { - case "substring": return "notsubstring"; - case "anywords": return "nowords"; - case "regexp": return "notregexp"; - default: - // e.g. "greaterthan" - alert("Can't negate comparison type: `" + type + "'"); - abort = true; - return "dummy"; - } - } - - function add_chart(field,type,value) { - // undo escaping for value: '"foo%20bar"' --> 'foo bar' - var parts = value.split('"'); - if ((parts.length % 2) != 1) { - alert('Internal error: unescaping failure'); - abort = true; - } - for (var i=1; ixx - if (w.match("^votes>[0-9]+$")) { - n = w.split(">")[1]; - add_chart("votes","greaterthan",n); - continue; - } - // votes>=xx, votes=>xx - if (w.match("^votes(>=|=>)[0-9]+$")) { - separator = w.match("^votes(>=|=>)[0-9]+$")[1]; - n = w.split(separator)[1]; - add_chart("votes","greaterthan",String(n-1)); - continue; - } - // really default case - if (match_product(w)) { - add_chart("product","substring",w); - } - if (match_component(w)) { - add_chart("component","substring",w); - } - if (is_keyword(w)) { - add_chart("keywords","substring",w); - if (w.length > 2) { - add_chart("short_desc","substring",w); - add_chart("status_whiteboard","substring",w); - } - } else { - add_chart("short_desc","substring",w); - add_chart("status_whiteboard","substring",w); - } - if (searchLong) - add_chart("longdesc","substring",w); - - // URL field (for IP addrs, host.names, scheme://urls) - if (w.match(/[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+/) - || w.match(/^[A-Za-z]+([.][A-Za-z]+)+/) - || w.match(/[:][\/][\/]/) - || w.match(/localhost/) - || w.match(/mailto[:]?/) - // || w.match(/[A-Za-z]+[:][0-9]+/) //host:port - ) - add_chart("bug_file_loc","substring",w); - } - } - } - and = 0; - or = 0; - } - - //searchURL += "&cmdtype=doit"; - - if (abort == false) { - return searchURL; - } else { - return no_result; - } -} - -function unique_id () { - return (new Date()).getTime(); -} - -function ShowURL(mode,input) { - var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false); - if (searchURL != no_result) { - var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&"); - if (mode == "alert") { - alert(pieces); - } else { - var table = "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + charts + "" + - "
Chart-And-OrFieldTypeValue
"; - var html = '' + - '' + - '' + input + '' + - '' + - '' + - '' + - 'Submit Query' + - '' + - '

' + status_and_resolution + - '

' + table + - '

' +
-                             pieces.replace(/[\n]/g,"
") + - '
' + - '' + - ''; - var w = window.open("","preview_"+unique_id()); - w.document.write(html); - w.document.close(); - } - } -} - -// -// new interface: -// searchLong is a boolean now (not a checkbox/radiobutton) -// -function Search(url, input, searchLong) { - var inputstring = new String(input); - var word = inputstring.split(/[\s]+/); - - // Check for empty input - if ( word.length == 1 && word[0] == "" ) - return; - - // Check for potential Bugzilla-busting intensive queries - if ((searchLong!=false) && word.length > 4) { - var message = "Searching Descriptions for more than four words " + - "will take a very long time indeed. Please choose " + - "no more than four keywords for your query."; - alert(message); - return; - } - var searchURL = make_query_URL(url, inputstring, searchLong); - if (searchURL != no_result) { - go_to(searchURL); - //window.open(searchURL, "other" ); - } else { - return; - } -} - -// -// original interface, untested -// -//function SearchForBugs (input, searchRadio) { -// if (searchRadio[0].checked) { -// return Search(bugzilla + "buglist.cgi", input, false); -// } else { -// return Search(bugzilla + "buglist.cgi", input, true); -// } -//} - -// derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html - -// QuickSearch combines lookup-by-bug-number and search -// in a single textbox. -// -// type nothing: -// --> go to bugzilla front page -// type a number: -// --> go to that bug number -// type several numbers, separated by commas: -// --> go to a buglist of just those bug numbers -// type anything else: -// --> search summary, product, component, keywords, status whiteboard -// (and URL if it's an IP address, a host.name, or an absolute://URL) - -function QuickSearch (input) -{ - //remove leading and trailing whitespace - input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); - - if (input == "") - { - //once this _is_ on http://bugzilla.mozilla.org, it should just return; - go_to(bugzilla); - } - else if (input.match(/^[0-9, ]*$/)) - { - if (input.indexOf(",") == -1) { - // only _one_ bug number --> show_bug - go_to(bugzilla+"show_bug.cgi?id="+escape(input)); - } else { - // comma-separated bug numbers --> buglist - go_to(bugzilla+"buglist.cgi?bug_id="+escape(input) - + "&bugidtype=include&order=bugs.bug_id"); - } - } - else - { - Search(bugzilla+"buglist.cgi",input,false); - } - return; -} - -function LoadQuery(input) { - //remove leading and trailing whitespace - input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); - - Search(bugzilla+"query.cgi",input,false); - return; -} - -- cgit v1.2.3-24-g4f1b