summaryrefslogtreecommitdiffstats
path: root/extensions/BMO/web/js
diff options
context:
space:
mode:
authorDave Lawrence <dlawrence@mozilla.com>2012-05-24 18:57:14 +0200
committerDave Lawrence <dlawrence@mozilla.com>2012-05-24 18:57:14 +0200
commit95052864ee662a67639a3080b3ecf7a1e24ba9e3 (patch)
treec1e771d9b53c622e44c27162fa5c40b5bfb5fa15 /extensions/BMO/web/js
parentd1fdd23fc3155f8e78d724713efccaae3d9ab5b9 (diff)
downloadbugzilla-95052864ee662a67639a3080b3ecf7a1e24ba9e3.tar.gz
bugzilla-95052864ee662a67639a3080b3ecf7a1e24ba9e3.tar.xz
Bug 747193 - Add search field to product chooser to allow selecting product/component based on keyword search
r=glob
Diffstat (limited to 'extensions/BMO/web/js')
-rw-r--r--extensions/BMO/web/js/choose_product.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/extensions/BMO/web/js/choose_product.js b/extensions/BMO/web/js/choose_product.js
new file mode 100644
index 000000000..7298a6b92
--- /dev/null
+++ b/extensions/BMO/web/js/choose_product.js
@@ -0,0 +1,69 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This Source Code Form is "Incompatible With Secondary Licenses", as
+ * defined by the Mozilla Public License, v. 2.0.
+ */
+
+YAHOO.bugzilla.prodCompSearch = {
+ counter : 0,
+ format : '',
+ dataSource : null,
+ generateRequest : function (enteredText) {
+ YAHOO.bugzilla.prodCompSearch.counter = YAHOO.bugzilla.prodCompSearch.counter + 1;
+ YAHOO.util.Connect.setDefaultPostHeader('application/json', true);
+ var json_object = {
+ method : "BMO.prod_comp_search",
+ id : YAHOO.bugzilla.prodCompSearch.counter,
+ params : [ {
+ search : decodeURIComponent(enteredText)
+ } ]
+ };
+ return YAHOO.lang.JSON.stringify(json_object);
+ },
+ resultListFormat : function(oResultData, enteredText, sResultMatch) {
+ var url = "enter_bug.cgi?product=" + encodeURIComponent(oResultData[0]) +
+ "&component=" + encodeURIComponent(oResultData[1]);
+ if (YAHOO.bugzilla.prodCompSearch.format) {
+ url = url + "&format=" + encodeURIComponent(YAHOO.bugzilla.prodCompSearch.format);
+ }
+ return ("<a href=\"" + url + "\"><b>" +
+ _escapeHTML(oResultData[0]) + "</b> :: " +
+ _escapeHTML(oResultData[1]) + "</a>");
+ },
+ init_ds : function(){
+ this.dataSource = new YAHOO.util.XHRDataSource("jsonrpc.cgi");
+ this.dataSource.connTimeout = 30000;
+ this.dataSource.connMethodPost = true;
+ this.dataSource.connXhrMode = "cancelStaleRequests";
+ this.dataSource.maxCacheEntries = 5;
+ this.dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+ this.dataSource.responseSchema = {
+ resultsList : "result.products",
+ metaFields : { error: "error", jsonRpcId: "id"},
+ fields : [ "product", "component" ]
+ };
+ },
+ init : function( field, container, format) {
+ if( this.dataSource == null ){
+ this.init_ds();
+ }
+ this.format = format;
+ var prodCompSearch = new YAHOO.widget.AutoComplete(field, container, this.dataSource);
+ prodCompSearch.generateRequest = this.generateRequest;
+ prodCompSearch.formatResult = this.resultListFormat;
+ prodCompSearch.minQueryLength = 3;
+ prodCompSearch.autoHighlight = false;
+ prodCompSearch.queryDelay = 0.05;
+ prodCompSearch.useIFrame = true;
+ prodCompSearch.maxResultsDisplayed = 25;
+ prodCompSearch.suppressInputUpdate = true;
+ prodCompSearch.textboxFocusEvent.subscribe(function () {
+ var input = YAHOO.util.Dom.get(field);
+ if (input.value && input.value.length > 3) {
+ this.sendQuery(input.value);
+ }
+ });
+ }
+}