commit 985f0834ae843f8e64d122eb4cb031787526ef83
parent 38ff0924505c4fe051b76f902766f6ac95f69532
Author: Manuel Bucher <manuel@mozilla.com>
Date: Wed, 29 Oct 2025 14:31:19 +0000
Bug 1971797 - Make about:url-classifier more comfortable to use r=fluent-reviewers,emz,bolsson
1. autoselect input form on page load
2. fixup url when no scheme is passed
3. start search with enter key
4. show error message when there are no results
Differential Revision: https://phabricator.services.mozilla.com/D269633
Diffstat:
3 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/toolkit/content/aboutUrlClassifier.js b/toolkit/content/aboutUrlClassifier.js
@@ -52,6 +52,8 @@ var Search = {
let list = document.getElementById("search-features");
list.appendChild(fragment);
+ let input = document.getElementById("search-input");
+ input.addEventListener("keydown", this.onKeydown);
let btn = document.getElementById("search-button");
btn.addEventListener("click", this.search);
@@ -65,23 +67,36 @@ var Search = {
list.firstChild.remove();
}
+ let input = document.getElementById("search-input");
+ input.removeEventListener("keydown", this.onKeydown);
let btn = document.getElementById("search-button");
btn.removeEventListener("click", this.search);
},
+ onKeydown(event) {
+ if (event.key === "Enter") {
+ Search.search();
+ }
+ },
+
search() {
Search.hideError();
Search.hideResults();
- let input = document.getElementById("search-input").value;
+ let searchInput = document.getElementById("search-input");
+ let input = searchInput.value;
let uri;
try {
- uri = Services.io.newURI(input);
+ uri = Services.uriFixup.getFixupURIInfo(input).preferredURI;
if (!uri) {
Search.reportError("url-classifier-search-error-invalid-url");
return;
}
+ // default to https
+ if (uri.schemeIs("http") && !input.startsWith("http:")) {
+ uri = uri.mutate().setScheme("https").finalize();
+ }
} catch (ex) {
Search.reportError("url-classifier-search-error-invalid-url");
return;
@@ -111,11 +126,10 @@ var Search = {
document.getElementById("search-listtype").value == 0
? Ci.nsIUrlClassifierFeature.blocklist
: Ci.nsIUrlClassifierFeature.entitylist;
- classifier.asyncClassifyLocalWithFeatures(uri, features, listType, list =>
- Search.showResults(list)
- );
-
- Search.hideError();
+ classifier.asyncClassifyLocalWithFeatures(uri, features, listType, list => {
+ searchInput.value = uri.spec;
+ Search.showResults(list);
+ });
},
hideError() {
@@ -138,6 +152,12 @@ var Search = {
},
showResults(results) {
+ let resultTitle = document.getElementById("result-title");
+ resultTitle.style.display = "";
+ if (!results.length) {
+ Search.reportError("url-classifier-search-error-no-results");
+ return;
+ }
let fragment = document.createDocumentFragment();
results.forEach(result => {
let tr = document.createElement("tr");
@@ -172,9 +192,6 @@ var Search = {
resultTable.appendChild(fragment);
resultTable.style.display = "";
-
- let resultTitle = document.getElementById("result-title");
- resultTitle.style.display = "";
},
};
diff --git a/toolkit/content/aboutUrlClassifier.xhtml b/toolkit/content/aboutUrlClassifier.xhtml
@@ -28,7 +28,7 @@
<tr>
<th class="column" data-l10n-id="url-classifier-search-input"></th>
<td>
- <input id="search-input" type="text" value=""/>
+ <input id="search-input" type="text" value="" autofocus=""/>
</td>
</tr>
<tr>
@@ -52,8 +52,8 @@
</tr>
</tbody>
</table>
- <p id="search-error-message"></p>
<h2 class="major-section" id="result-title" data-l10n-id="url-classifier-search-result-title"></h2>
+ <p id="search-error-message"></p>
<table id="result-table">
<tr>
<td>
diff --git a/toolkit/locales/en-US/toolkit/about/url-classifier.ftl b/toolkit/locales/en-US/toolkit/about/url-classifier.ftl
@@ -14,6 +14,7 @@ url-classifier-search-result-list = List of tables: { $list }
url-classifier-search-input = URL
url-classifier-search-error-invalid-url = Invalid URL
url-classifier-search-error-no-features = No features selected
+url-classifier-search-error-no-results = No entries found for URL
url-classifier-search-btn = Start searching
url-classifier-search-features = Features
url-classifier-search-listType = List type