mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
192 lines
5.7 KiB
JavaScript
192 lines
5.7 KiB
JavaScript
// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
|
|
/* 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
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* We don't support zooming yet, disable Animated zoom by clamping it to the default zoom. */
|
|
const kBrowserFindZoomLevelMin = 1;
|
|
const kBrowserFindZoomLevelMax = 1;
|
|
|
|
var FindHelperUI = {
|
|
type: "find",
|
|
commands: {
|
|
next: "cmd_findNext",
|
|
previous: "cmd_findPrevious",
|
|
close: "cmd_findClose"
|
|
},
|
|
|
|
_open: false,
|
|
_status: null,
|
|
|
|
/*
|
|
* Properties
|
|
*/
|
|
|
|
get isActive() {
|
|
return this._open;
|
|
},
|
|
|
|
get status() {
|
|
return this._status;
|
|
},
|
|
|
|
set status(val) {
|
|
if (val != this._status) {
|
|
this._status = val;
|
|
if (!val)
|
|
this._textbox.removeAttribute("status");
|
|
else
|
|
this._textbox.setAttribute("status", val);
|
|
this.updateCommands(this._textbox.value);
|
|
}
|
|
},
|
|
|
|
init: function findHelperInit() {
|
|
this._textbox = document.getElementById("findbar-textbox");
|
|
this._container = Elements.findbar;
|
|
|
|
this._cmdPrevious = document.getElementById(this.commands.previous);
|
|
this._cmdNext = document.getElementById(this.commands.next);
|
|
|
|
this._textbox.addEventListener('keydown', this);
|
|
|
|
// Listen for find assistant messages from content
|
|
messageManager.addMessageListener("FindAssist:Show", this);
|
|
messageManager.addMessageListener("FindAssist:Hide", this);
|
|
|
|
// Listen for events where form assistant should be closed
|
|
Elements.tabList.addEventListener("TabSelect", this, true);
|
|
Elements.browsers.addEventListener("URLChanged", this, true);
|
|
window.addEventListener("MozContextUIShow", this, true);
|
|
},
|
|
|
|
receiveMessage: function findHelperReceiveMessage(aMessage) {
|
|
let json = aMessage.json;
|
|
switch(aMessage.name) {
|
|
case "FindAssist:Show":
|
|
ContextUI.dismiss();
|
|
this.status = json.result;
|
|
if (json.rect)
|
|
this._zoom(Rect.fromRect(json.rect));
|
|
break;
|
|
|
|
case "FindAssist:Hide":
|
|
if (this._container.getAttribute("type") == this.type)
|
|
this.hide();
|
|
break;
|
|
}
|
|
},
|
|
|
|
handleEvent: function findHelperHandleEvent(aEvent) {
|
|
switch (aEvent.type) {
|
|
case "MozContextUIShow":
|
|
case "TabSelect":
|
|
this.hide();
|
|
break;
|
|
|
|
case "URLChanged":
|
|
if (aEvent.detail && aEvent.target == getBrowser())
|
|
this.hide();
|
|
break;
|
|
|
|
case "keydown":
|
|
if (aEvent.keyCode == Ci.nsIDOMKeyEvent.DOM_VK_RETURN) {
|
|
if (aEvent.shiftKey) {
|
|
this.goToPrevious();
|
|
} else {
|
|
this.goToNext();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
show: function findHelperShow() {
|
|
if (StartUI.isVisible || this._open)
|
|
return;
|
|
|
|
// Hide any menus
|
|
ContextUI.dismiss();
|
|
|
|
// Shutdown selection related ui
|
|
SelectionHelperUI.closeEditSession();
|
|
|
|
this.search(this._textbox.value);
|
|
this._textbox.select();
|
|
this._textbox.focus();
|
|
this._open = true;
|
|
|
|
let findbar = this._container;
|
|
setTimeout(() => {
|
|
Elements.browsers.setAttribute("findbar", true);
|
|
findbar.show();
|
|
}, 0);
|
|
|
|
// Prevent the view to scroll automatically while searching
|
|
Browser.selectedBrowser.scrollSync = false;
|
|
},
|
|
|
|
hide: function findHelperHide() {
|
|
if (!this._open)
|
|
return;
|
|
|
|
let onTransitionEnd = () => {
|
|
this._container.removeEventListener("transitionend", onTransitionEnd, true);
|
|
this._textbox.value = "";
|
|
this.status = null;
|
|
this._textbox.blur();
|
|
this._open = false;
|
|
|
|
// Restore the scroll synchronisation
|
|
Browser.selectedBrowser.scrollSync = true;
|
|
};
|
|
|
|
this._container.addEventListener("transitionend", onTransitionEnd, true);
|
|
this._container.dismiss();
|
|
Elements.browsers.removeAttribute("findbar");
|
|
},
|
|
|
|
goToPrevious: function findHelperGoToPrevious() {
|
|
Browser.selectedBrowser.messageManager.sendAsyncMessage("FindAssist:Previous", { });
|
|
},
|
|
|
|
goToNext: function findHelperGoToNext() {
|
|
Browser.selectedBrowser.messageManager.sendAsyncMessage("FindAssist:Next", { });
|
|
},
|
|
|
|
search: function findHelperSearch(aValue) {
|
|
this.updateCommands(aValue);
|
|
|
|
Browser.selectedBrowser.messageManager.sendAsyncMessage("FindAssist:Find", { searchString: aValue });
|
|
},
|
|
|
|
updateCommands: function findHelperUpdateCommands(aValue) {
|
|
let disabled = (this._status == Ci.nsITypeAheadFind.FIND_NOTFOUND) || (aValue == "");
|
|
this._cmdPrevious.setAttribute("disabled", disabled);
|
|
this._cmdNext.setAttribute("disabled", disabled);
|
|
},
|
|
|
|
_zoom: function _findHelperZoom(aElementRect) {
|
|
let autozoomEnabled = Services.prefs.getBoolPref("findhelper.autozoom");
|
|
if (!aElementRect || !autozoomEnabled)
|
|
return;
|
|
|
|
if (Browser.selectedTab.allowZoom) {
|
|
let zoomLevel = Browser._getZoomLevelForRect(aElementRect);
|
|
|
|
// Clamp the zoom level relatively to the default zoom level of the page
|
|
let defaultZoomLevel = Browser.selectedTab.getDefaultZoomLevel();
|
|
zoomLevel = Util.clamp(zoomLevel, (defaultZoomLevel * kBrowserFindZoomLevelMin),
|
|
(defaultZoomLevel * kBrowserFindZoomLevelMax));
|
|
zoomLevel = Browser.selectedTab.clampZoomLevel(zoomLevel);
|
|
|
|
let zoomRect = Browser._getZoomRectForPoint(aElementRect.center().x, aElementRect.y, zoomLevel);
|
|
AnimatedZoom.animateTo(zoomRect);
|
|
} else {
|
|
// Even if zooming is disabled we could need to reposition the view in
|
|
// order to keep the element on-screen
|
|
let zoomRect = Browser._getZoomRectForPoint(aElementRect.center().x, aElementRect.y, getBrowser().scale);
|
|
AnimatedZoom.animateTo(zoomRect);
|
|
}
|
|
}
|
|
};
|