Bug 1047469 - Implement search terms hilighting r=dao

This commit is contained in:
Tim Taubert 2014-09-08 11:54:00 +02:00
parent 318164d65c
commit 75753e84c3
2 changed files with 36 additions and 10 deletions

View File

@ -19,7 +19,11 @@ function testVal(aExpected) {
is(result, aExpected);
}
function test() {
add_task(function* () {
return new Promise(resolve => Services.search.init(resolve));
});
add_task(function* () {
const prefname = "browser.urlbar.formatting.enabled";
registerCleanupFunction(function () {
@ -109,4 +113,4 @@ function test() {
Services.prefs.setBoolPref(prefname, false);
testVal("https://mozilla.org");
}
});

View File

@ -174,11 +174,23 @@
</method>
<field name="_formattingEnabled">true</field>
<field name="_searchServiceInitialized">false</field>
<method name="formatValue">
<body><![CDATA[
if (!this._formattingEnabled || this.focused)
return;
// Initialize the search service asynchronously if that hasn't
// happened yet. We will need it to highlight search terms later.
if (!this._searchServiceInitialized) {
Services.search.init(() => {
this._searchServiceInitialized = true;
this.formatValue();
});
return;
}
let controller = this.editor.selectionController;
let selection = controller.getSelection(controller.SELECTION_URLSECONDARY);
selection.removeAllRanges();
@ -213,20 +225,29 @@
subDomain = domain.slice(0, -baseDomain.length);
}
let rangeLength = preDomain.length + subDomain.length;
if (rangeLength) {
function addSelectionRange(start, end) {
let range = document.createRange();
range.setStart(textNode, 0);
range.setEnd(textNode, rangeLength);
range.setStart(textNode, start);
range.setEnd(textNode, end);
selection.addRange(range);
}
let rangeLength = preDomain.length + subDomain.length;
if (rangeLength) {
addSelectionRange(0, rangeLength);
}
let result = Services.search.parseSubmissionURL(value);
let startRest = preDomain.length + domain.length;
// Format search terms in the URL, if any.
if (result.termsOffset > -1 && result.termsLength) {
addSelectionRange(startRest, result.termsOffset);
startRest = result.termsOffset + result.termsLength;
}
if (startRest < value.length) {
let range = document.createRange();
range.setStart(textNode, startRest);
range.setEnd(textNode, value.length);
selection.addRange(range);
addSelectionRange(startRest, value.length);
}
]]></body>
</method>
@ -606,6 +627,7 @@
this.timeout = this._prefs.getIntPref(aData);
break;
case "formatting.enabled":
this._clearFormatting();
this._formattingEnabled = this._prefs.getBoolPref(aData);
break;
case "trimURLs":