// Released under the MIT/X11 license // http://www.opensource.org/licenses/mit-license.php "use strict"; function getSelection () { var text = ""; var selectionObject = window.getSelection(); if (selectionObject.rangeCount > 0) { text = selectionObject.getRangeAt(0).toString().trim(); } return text; } /** * Opens a new tab with a query for the given text in the selected component * * @param text to be searched for * @param component String with the component name (maybe latter regexp?) * @param product (optional) string with the product name, if undefined, * search in all products * @return None * */ function queryInNewTab(text, component, product, equivComps) { var urlStr = "https://" + window.location.hostname + "/buglist.cgi?query_format=advanced"; if (product) { urlStr += "&product=" + product.trim(); } if (component) { if (equivComps) { var equivCompsArr = equivComps. filter(function (REstr) { return new RegExp(REstr).test(component); }, this); if (equivCompsArr.length > 0) { component = equivCompsArr[0]; } } urlStr += "&component=" + component.trim(); } // using more complicated query tables here, because they can be more easily // edited // for further investigative searches if (text) { text = encodeURIComponent(text.trim()); var searchText = "&field0-0-0=longdesc&type0-0-0=substring&value0-0-0=" + text + "&field0-0-1=attach_data.thedata&type0-0-1=substring&value0-0-1=" + text + "&field0-0-2=status_whiteboard&type0-0-2=substring&value0-0-2=" + text; urlStr += searchText; self.postMessage(new Message("OpenURLinTab", urlStr)); // utils.js is always avaiulable } } /** * Get the text to search for and prepare other things for the real executive * function this.queryInNewTab, and run it. */ function queryForSelection() { var text = getSelection(); if (!text) { self.postMessage(new Message("GetClipboard", "queryLocal")); } else { if (equivalentComponents) { queryInNewTab(text, getComponent(), getProduct(), equivalentComponents); } else { queryInNewTab(text, getComponent(), getProduct()); } } } /** * */ function queryUpstreamCallback(text, queryUpBug) { var searchData = filterByRegexp(queryUpBug, getComponent()); if (!searchData) { return ; // not sure why it should happen, but certainly better } var urlBase = searchData.url; text = searchData.searchBy+":"+searchData.fillIn+" "+text.trim(); if (searchData.fillIn == "$$$") { text = text.replace("$$$", getComponent()); } text = encodeURIComponent(text).replace("%20","+"); self.postMessage(new Message("OpenURLinTab", urlBase + text)); } /** * Search simple query in the upstream bugzilla appropriate for the component * * @return none */ function queryUpstream(qUpBug) { if (!qUpBug) { alert("We don't have constantData.queryUpstreamBug set up!"); return null; } var text = getSelection(); if (!text) { self.postMessage(new Message("GetClipboard", "queryUpstream")); } else { queryUpstreamCallback(text, qUpBug); } }