diff options
author | Dave Lawrence <dlawrence@mozilla.com> | 2012-05-24 18:57:14 +0200 |
---|---|---|
committer | Dave Lawrence <dlawrence@mozilla.com> | 2012-05-24 18:57:14 +0200 |
commit | 95052864ee662a67639a3080b3ecf7a1e24ba9e3 (patch) | |
tree | c1e771d9b53c622e44c27162fa5c40b5bfb5fa15 /extensions/BMO/web/js | |
parent | d1fdd23fc3155f8e78d724713efccaae3d9ab5b9 (diff) | |
download | bugzilla-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.js | 69 |
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); + } + }); + } +} |