diff options
Diffstat (limited to 'extensions/ProdCompSearch')
-rw-r--r-- | extensions/ProdCompSearch/web/js/prod_comp_search.js | 202 |
1 files changed, 102 insertions, 100 deletions
diff --git a/extensions/ProdCompSearch/web/js/prod_comp_search.js b/extensions/ProdCompSearch/web/js/prod_comp_search.js index f6c3f011c..cb4a50ccc 100644 --- a/extensions/ProdCompSearch/web/js/prod_comp_search.js +++ b/extensions/ProdCompSearch/web/js/prod_comp_search.js @@ -19,119 +19,121 @@ YUI({ base: 'js/yui3/', combine: false }).use("node", "json-stringify", "autocomplete", "escape", - "datasource-io", "datasource-jsonschema", function (Y) { - var counter = 0, - dataSource = null, - autoComplete = null; + "datasource-io", "datasource-jsonschema", function(Y) { + Y.on("domready", function() { + var counter = 0, + dataSource = null, + autoComplete = null; - var resultListFormat = function(query, results) { - return Y.Array.map(results, function(result) { - var data = result.raw; - result.text = data.product + ' :: ' + data.component; - return Y.Escape.html(result.text); - }); - }; + var resultListFormat = function(query, results) { + return Y.Array.map(results, function(result) { + var data = result.raw; + result.text = data.product + ' :: ' + data.component; + return Y.Escape.html(result.text); + }); + }; - var requestTemplate = function(query) { - counter = counter + 1; - var json_object = { - version: "1.1", - method : "PCS.prod_comp_search", - id : counter, - params : { search: query } + var requestTemplate = function(query) { + counter = counter + 1; + var json_object = { + version: "1.1", + method : "PCS.prod_comp_search", + id : counter, + params : { search: query } + }; + return Y.JSON.stringify(json_object); }; - return Y.JSON.stringify(json_object); - }; - var dataSource = new Y.DataSource.IO({ - source: 'jsonrpc.cgi', - ioConfig: { - method: "POST", - headers: { 'Content-Type': 'application/json' } - }, - on: { - error: function(e) { - if (console.error && e.response.meta.error) { - console.error(e.response.meta.error.message); + var dataSource = new Y.DataSource.IO({ + source: 'jsonrpc.cgi', + ioConfig: { + method: "POST", + headers: { 'Content-Type': 'application/json' } + }, + on: { + error: function(e) { + if (console.error && e.response.meta.error) { + console.error(e.response.meta.error.message); + } + Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); + Y.one("#prod_comp_error").removeClass('bz_default_hidden'); } - Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); - Y.one("#prod_comp_error").removeClass('bz_default_hidden'); } - } - }); + }); - dataSource.plug(Y.Plugin.DataSourceJSONSchema, { - schema: { - resultListLocator : "result.products", - resultFields : [ "product", "component" ], - metaFields : { error : 'error' } - } - }); + dataSource.plug(Y.Plugin.DataSourceJSONSchema, { + schema: { + resultListLocator : "result.products", + resultFields : [ "product", "component" ], + metaFields : { error : 'error' } + } + }); - var input = Y.one('#prod_comp_search'); + var input = Y.one('#prod_comp_search'); - input.plug(Y.Plugin.AutoComplete, { - activateFirstItem: false, - enableCache: true, - source: dataSource, - minQueryLength: 3, - queryDelay: 0.05, - resultFormatter: resultListFormat, - suppressInputUpdate: true, - maxResults: 25, - scrollIntoView: true, - requestTemplate: requestTemplate, - on: { - query: function(e) { - Y.one("#prod_comp_throbber").removeClass('bz_default_hidden'); - Y.one("#prod_comp_no_components").addClass('bz_default_hidden'); - Y.one("#prod_comp_error").addClass('bz_default_hidden'); - }, - results: function(e) { - Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); - input.ac.set('activateFirstItem', e.results.length == 1); - if (e.results.length == 0) { - Y.one("#prod_comp_no_components").removeClass('bz_default_hidden'); - } - }, - select: function(e) { - // Only redirect if the script_name is a valid choice - if (Y.Array.indexOf(ProdCompSearch.script_choices, ProdCompSearch.script_name) == -1) - return; + input.plug(Y.Plugin.AutoComplete, { + activateFirstItem: false, + enableCache: true, + source: dataSource, + minQueryLength: 3, + queryDelay: 0.05, + resultFormatter: resultListFormat, + suppressInputUpdate: true, + maxResults: 25, + scrollIntoView: true, + requestTemplate: requestTemplate, + on: { + query: function(e) { + Y.one("#prod_comp_throbber").removeClass('bz_default_hidden'); + Y.one("#prod_comp_no_components").addClass('bz_default_hidden'); + Y.one("#prod_comp_error").addClass('bz_default_hidden'); + }, + results: function(e) { + Y.one("#prod_comp_throbber").addClass('bz_default_hidden'); + input.ac.set('activateFirstItem', e.results.length == 1); + if (e.results.length == 0) { + Y.one("#prod_comp_no_components").removeClass('bz_default_hidden'); + } + }, + select: function(e) { + // Only redirect if the script_name is a valid choice + if (Y.Array.indexOf(ProdCompSearch.script_choices, ProdCompSearch.script_name) == -1) + return; - var data = e.result.raw; - var url = ProdCompSearch.script_name + - "?product=" + encodeURIComponent(data.product) + - "&component=" + encodeURIComponent(data.component); - if (ProdCompSearch.script_name == 'enter_bug.cgi') { - if (ProdCompSearch.format) - url += "&format=" + encodeURIComponent(ProdCompSearch.format); - if (ProdCompSearch.cloned_bug_id) - url += "&cloned_bug_id=" + encodeURIComponent(ProdCompSearch.cloned_bug_id); - } - if (ProdCompSearch.script_name == 'describecomponents.cgi') { - url += "#" + encodeURIComponent(data.component); - } - if (ProdCompSearch.new_tab) { - window.open(url, '_blank'); + var data = e.result.raw; + var url = ProdCompSearch.script_name + + "?product=" + encodeURIComponent(data.product) + + "&component=" + encodeURIComponent(data.component); + if (ProdCompSearch.script_name == 'enter_bug.cgi') { + if (ProdCompSearch.format) + url += "&format=" + encodeURIComponent(ProdCompSearch.format); + if (ProdCompSearch.cloned_bug_id) + url += "&cloned_bug_id=" + encodeURIComponent(ProdCompSearch.cloned_bug_id); + } + if (ProdCompSearch.script_name == 'describecomponents.cgi') { + url += "#" + encodeURIComponent(data.component); + } + if (ProdCompSearch.new_tab) { + window.open(url, '_blank'); + } + else { + window.location.href = url; + } } - else { - window.location.href = url; - } - } - }, - after: { - select: function(e) { - if (ProdCompSearch.new_tab) { - input.set('value',''); + }, + after: { + select: function(e) { + if (ProdCompSearch.new_tab) { + input.set('value',''); + } } } - } - }); + }); - input.on('focus', function (e) { - if (e.target.value && e.target.value.length > 3) { - dataSource.load(e.target.value); - } + input.on('focus', function (e) { + if (e.target.value && e.target.value.length > 3) { + dataSource.load(e.target.value); + } + }); }); }); |