diff options
Diffstat (limited to 'extensions/MyDashboard/web/js/prod_comp_search.js')
-rw-r--r-- | extensions/MyDashboard/web/js/prod_comp_search.js | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/extensions/MyDashboard/web/js/prod_comp_search.js b/extensions/MyDashboard/web/js/prod_comp_search.js new file mode 100644 index 000000000..db9d47c5c --- /dev/null +++ b/extensions/MyDashboard/web/js/prod_comp_search.js @@ -0,0 +1,127 @@ +/* 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. + */ + +// Product and component search to file a new bug +YUI({ + base: 'js/yui3/', + combine: false +}).use("node", "json-stringify", "autocomplete", "escape", + "datasource-io", "datasource-jsonschema", "array-extras", function (Y) { + var counter = 0, + format = '', + cloned_bug_id = '', + dataSource = null, + autoComplete = null; + + var resultListFormat = function(query, results) { + Y.log(results); + return Y.Array.map(results, function (result) { + var data = result.raw; + return Y.Escape.html(data.product) + " :: " + + Y.Escape.html(data.component); + }); + }; + + var dataSource = new Y.DataSource.IO({ + source: 'jsonrpc.cgi', + ioConfig: { + method: "POST", + headers: { 'Content-Type': 'application/json' } + } + }); + + dataSource.plug(Y.Plugin.DataSourceJSONSchema, { + schema: { + resultsListLocator : "result.products", + resultFields : [ "product", "component" ] + } + }); + + var input = Y.one('#prod_comp_search'); + + input.plug(Y.Plugin.AutoComplete, { + enableCache: true, + source: dataSource, + minQueryLength: 3, + queryDelay: 0.05, + resultFormatter: resultListFormat, + maxResultsDisplayed: 25, + suppressInputUpdate: true, + maxResults: 25, + requestTemplate: function (query) { + counter = counter + 1; + var json_object = { + version: "1.1", + method : "MyDashboard.prod_comp_search", + id : counter, + params : { search: query } + }; + return Y.JSON.stringify(json_object); + }, +// resultListLocator: 'response.result.products', +// resultListLocator: 'result.products' +// resultListLocator: function (response) { +// Y.log(response); +// return (response && response.data && response.data.result.products) || []; +// }, +// // Makes sure an array is returned even on an error. +// if (response.error) { +// return []; +// } +// +// Y.log(response); +// +// return response.query.results; +// +// return [{ +// product: "Foo", +// component: "Bar" +// }]; +// var query = response.query.results.json, +// addresses; +// +// if (query.status !== 'OK') { +// return []; +// } +// +// // Grab the actual addresses from the YQL query. +// addresses = query.results; +// +// // Makes sure an array is always returned. +// return addresses.length > 0 ? addresses : [addresses]; +// }, + }); + + input.ac.on('query', function() { + Y.one("#prod_comp_throbber").removeClass('bz_default_hidden'); + }); + + input.ac.after('results', function() { + Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); + }); + + input.ac.on('select', function (itemNode, result) { + var url = "enter_bug.cgi?product=" + encodeURIComponent(result.component) + + "&component=" + encodeURIComponent(result.product); + Y.log(url); + //autoComplete.dataReturnEvent.subscribe(function(type, args) { + // args[0].autoHighlight = args[2].length == 1; + //}); +// doBeforeLoadData: function(sQuery, oResponse, oPayload) { +// Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); +// return true; +// } + }); + +// autoComplete.textboxFocusEvent.subscribe(function () { +// var input = Y.one(field); +// if (input.value && input.value.length > 3) { +// sendQuery(input.value); +// } +// }); +}); |