mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 15:55:36 +00:00
Bug 1047469
- Implement search terms hilighting r=dao
This commit is contained in:
parent
318164d65c
commit
75753e84c3
@ -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");
|
||||
}
|
||||
});
|
||||
|
@ -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":
|
||||
|
Loading…
Reference in New Issue
Block a user