summaryrefslogtreecommitdiffstats
path: root/toolkit/content/finddialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/content/finddialog.js')
-rw-r--r--toolkit/content/finddialog.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/toolkit/content/finddialog.js b/toolkit/content/finddialog.js
new file mode 100644
index 000000000..fc5875321
--- /dev/null
+++ b/toolkit/content/finddialog.js
@@ -0,0 +1,151 @@
+// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/FormHistory.jsm");
+
+var dialog; // Quick access to document/form elements.
+var gFindInst; // nsIWebBrowserFind that we're going to use
+var gFindInstData; // use this to update the find inst data
+
+function initDialogObject()
+{
+ // Create dialog object and initialize.
+ dialog = {};
+ dialog.findKey = document.getElementById("dialog.findKey");
+ dialog.caseSensitive = document.getElementById("dialog.caseSensitive");
+ dialog.wrap = document.getElementById("dialog.wrap");
+ dialog.find = document.getElementById("btnFind");
+ dialog.up = document.getElementById("radioUp");
+ dialog.down = document.getElementById("radioDown");
+ dialog.rg = dialog.up.radioGroup;
+ dialog.bundle = null;
+
+ // Move dialog to center, if it not been shown before
+ var windowElement = document.getElementById("findDialog");
+ if (!windowElement.hasAttribute("screenX") || !windowElement.hasAttribute("screenY"))
+ {
+ sizeToContent();
+ moveToAlertPosition();
+ }
+}
+
+function fillDialog()
+{
+ // get the find service, which stores global find state
+ var findService = Components.classes["@mozilla.org/find/find_service;1"]
+ .getService(Components.interfaces.nsIFindService);
+
+ // Set initial dialog field contents. Use the gFindInst attributes first,
+ // this is necessary for window.find()
+ dialog.findKey.value = gFindInst.searchString ? gFindInst.searchString : findService.searchString;
+ dialog.caseSensitive.checked = gFindInst.matchCase ? gFindInst.matchCase : findService.matchCase;
+ dialog.wrap.checked = gFindInst.wrapFind ? gFindInst.wrapFind : findService.wrapFind;
+ var findBackwards = gFindInst.findBackwards ? gFindInst.findBackwards : findService.findBackwards;
+ if (findBackwards)
+ dialog.rg.selectedItem = dialog.up;
+ else
+ dialog.rg.selectedItem = dialog.down;
+}
+
+function saveFindData()
+{
+ // get the find service, which stores global find state
+ var findService = Components.classes["@mozilla.org/find/find_service;1"]
+ .getService(Components.interfaces.nsIFindService);
+
+ // Set data attributes per user input.
+ findService.searchString = dialog.findKey.value;
+ findService.matchCase = dialog.caseSensitive.checked;
+ findService.wrapFind = dialog.wrap.checked;
+ findService.findBackwards = dialog.up.selected;
+}
+
+function onLoad()
+{
+ initDialogObject();
+
+ // get the find instance
+ var arg0 = window.arguments[0];
+ // If the dialog was opened from window.find(),
+ // arg0 will be an instance of nsIWebBrowserFind
+ if (arg0 instanceof Components.interfaces.nsIWebBrowserFind) {
+ gFindInst = arg0;
+ } else {
+ gFindInstData = arg0;
+ gFindInst = gFindInstData.webBrowserFind;
+ }
+
+ fillDialog();
+ doEnabling();
+
+ if (dialog.findKey.value)
+ dialog.findKey.select();
+ dialog.findKey.focus();
+}
+
+function onUnload()
+{
+ window.opener.findDialog = 0;
+}
+
+function onAccept()
+{
+ if (gFindInstData && gFindInst != gFindInstData.webBrowserFind) {
+ gFindInstData.init();
+ gFindInst = gFindInstData.webBrowserFind;
+ }
+
+ // Transfer dialog contents to the find service.
+ saveFindData();
+ updateFormHistory();
+
+ // set up the find instance
+ gFindInst.searchString = dialog.findKey.value;
+ gFindInst.matchCase = dialog.caseSensitive.checked;
+ gFindInst.wrapFind = dialog.wrap.checked;
+ gFindInst.findBackwards = dialog.up.selected;
+
+ // Search.
+ var result = gFindInst.findNext();
+
+ if (!result)
+ {
+ if (!dialog.bundle)
+ dialog.bundle = document.getElementById("findBundle");
+ Services.prompt.alert(window, dialog.bundle.getString("notFoundTitle"),
+ dialog.bundle.getString("notFoundWarning"));
+ dialog.findKey.select();
+ dialog.findKey.focus();
+ }
+ return false;
+}
+
+function doEnabling()
+{
+ dialog.find.disabled = !dialog.findKey.value;
+}
+
+function updateFormHistory()
+{
+ if (window.opener.PrivateBrowsingUtils &&
+ window.opener.PrivateBrowsingUtils.isWindowPrivate(window.opener) ||
+ !dialog.findKey.value)
+ return;
+
+ if (FormHistory.enabled) {
+ FormHistory.update({
+ op: "bump",
+ fieldname: "find-dialog",
+ value: dialog.findKey.value
+ }, {
+ handleError: function(aError) {
+ Components.utils.reportError("Saving find to form history failed: " +
+ aError.message);
+ }
+ });
+ }
+}