Source code
Revision control
Copy as Markdown
Other Tools
/* 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
import { formatUTMParams, getBrowserElement } from "../aboutaddons-utils.mjs";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
AddonRepository: "resource://gre/modules/addons/AddonRepository.sys.mjs",
});
class SearchAddons extends HTMLElement {
connectedCallback() {
if (this.childElementCount === 0) {
this.input = document.createElement("moz-input-search");
this.input.setAttribute("maxlength", 100);
this.input.setAttribute("data-l10n-attrs", "placeholder");
this.input.setAttribute("iconsrc", "");
document.l10n.setAttributes(this.input, "addons-heading-search-input");
this.append(this.input);
this.button = document.createElement("moz-button");
this.button.setAttribute("type", "ghost");
this.button.setAttribute(
"iconsrc",
"chrome://global/skin/icons/search-textbox.svg"
);
document.l10n.setAttributes(this.button, "addons-heading-search-button");
this.append(this.button);
}
this.input.addEventListener("keypress", this);
this.button.addEventListener("click", this);
}
disconnectedCallback() {
this.input.removeEventListener("keypress", this);
this.button.removeEventListener("click", this);
}
handleEvent(e) {
if (
e.type == "click" ||
(e.type === "keypress" && e.keyCode == KeyEvent.DOM_VK_RETURN)
) {
this.searchAddons(this.value);
}
}
get value() {
return this.input.value;
}
searchAddons(query) {
if (query.length === 0) {
return;
}
let url = formatUTMParams(
"addons-manager-search",
lazy.AddonRepository.getSearchURL(query)
);
let browser = getBrowserElement();
let chromewin = browser.ownerGlobal;
chromewin.openWebLinkIn(url, "tab");
}
}
customElements.define("search-addons", SearchAddons);