summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2007-04-16 01:43:26 +0200
committerlpsolit%gmail.com <>2007-04-16 01:43:26 +0200
commitfcdf86c3d914652a3d63a70706a21eaf96950f4f (patch)
treebcb2b0c10f646077e347f44749a1d03b2ba33557 /js
parent8da7f321aabe95470944bc23aeed9a06ef6793a5 (diff)
downloadbugzilla-fcdf86c3d914652a3d63a70706a21eaf96950f4f.tar.gz
bugzilla-fcdf86c3d914652a3d63a70706a21eaf96950f4f.tar.xz
Bug 182082: Help system should support more browsers - Patch by Teemu Mannermaa <wicked+bz@etlicon.fi> r=myk a=LpSolit
Diffstat (limited to 'js')
-rw-r--r--js/help.js108
-rw-r--r--js/util.js116
2 files changed, 224 insertions, 0 deletions
diff --git a/js/help.js b/js/help.js
new file mode 100644
index 000000000..938a73a8b
--- /dev/null
+++ b/js/help.js
@@ -0,0 +1,108 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Bugzilla Bug Tracking System.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Gervase Markham <gerv@gerv.net>
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var g_helpTexts = new Object();
+var g_helpIframe;
+var g_helpDiv;
+
+/**
+ * Generate help controls during page construction.
+ *
+ * @return Boolean; true if controls were created and false if not.
+ */
+function generateHelp()
+{
+ // Only enable help if controls can be hidden
+ if (!document.body.style)
+ return false;
+
+ // Create help controls (a div to hold help text and an iframe
+ // to mask any and all controls under the popup)
+ document.write('<div id="helpDiv" style="display: none;"><\/div>');
+ document.write('<iframe id="helpIframe" src="about:blank"');
+ document.write(' frameborder="0" scrolling="no"><\/iframe>');
+
+ return true;
+}
+
+/**
+ * Enable help popups for all form elements after the page has finished loading.
+ *
+ * @return Boolean; true if help was enabled and false if not.
+ */
+function enableHelp()
+{
+ g_helpIframe = document.getElementById('helpIframe');
+ g_helpDiv = document.getElementById('helpDiv');
+ if (!g_helpIframe || !g_helpDiv) // Disabled if no controls found
+ return false;
+
+ // MS decided to add fieldsets to the elements array; and
+ // Mozilla decided to copy this brokenness. Grr.
+ for (var i = 0; i < document.forms.length; i++) {
+ for (var j = 0; j < document.forms[i].elements.length; j++) {
+ if (document.forms[i].elements[j].tagName != 'FIELDSET') {
+ document.forms[i].elements[j].onmouseover = showHelp;
+ }
+ }
+ }
+
+ document.body.onclick = hideHelp;
+ return true;
+}
+
+/**
+ * Show the help popup for a form element.
+ */
+function showHelp() {
+ if (!g_helpIframe || !g_helpDiv || !g_helpTexts[this.name])
+ return;
+
+ // Get the position and size of the form element in the document
+ var elemY = bz_findPosY(this);
+ var elemX = bz_findPosX(this);
+ var elemH = this.offsetHeight;
+
+ // Update help text displayed in the div
+ g_helpDiv.innerHTML = ''; // Helps IE 5 Mac
+ g_helpDiv.innerHTML = g_helpTexts[this.name];
+
+ // Position and display the help popup
+ g_helpIframe.style.top = g_helpDiv.style.top = elemY + elemH + 5 + "px";
+ g_helpIframe.style.left = g_helpDiv.style.left = elemX + "px";
+ g_helpIframe.style.display = g_helpDiv.style.display = '';
+ g_helpIframe.style.width = g_helpDiv.offsetWidth + "px";
+ g_helpIframe.style.height = g_helpDiv.offsetHeight + "px";
+}
+
+/**
+ * Hide the help popup.
+ */
+function hideHelp() {
+ if (!g_helpIframe || !g_helpDiv)
+ return;
+
+ g_helpIframe.style.display = g_helpDiv.style.display = 'none';
+}
diff --git a/js/util.js b/js/util.js
new file mode 100644
index 000000000..9d2209093
--- /dev/null
+++ b/js/util.js
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Cross Platform JavaScript Utility Library.
+ *
+ * The Initial Developer of the Original Code is
+ * Everything Solved.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Max Kanat-Alexander <mkanat@bugzilla.org>
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/**
+ * Locate where an element is on the page, x-wise.
+ *
+ * @param obj Element of which location to return.
+ * @return Current position of the element relative to the left of the
+ * page window. Measured in pixels.
+ */
+function bz_findPosX(obj)
+{
+ var curleft = 0;
+
+ if (obj.offsetParent) {
+ while (obj) {
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.x) {
+ curleft += obj.x;
+ }
+
+ return curleft;
+}
+
+/**
+ * Locate where an element is on the page, y-wise.
+ *
+ * @param obj Element of which location to return.
+ * @return Current position of the element relative to the top of the
+ * page window. Measured in pixels.
+ */
+function bz_findPosY(obj)
+{
+ var curtop = 0;
+
+ if (obj.offsetParent) {
+ while (obj) {
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.y) {
+ curtop += obj.y;
+ }
+
+ return curtop;
+}
+
+/**
+ * Get the full height of an element, even if it's larger than the browser
+ * window.
+ *
+ * @param fromObj Element of which height to return.
+ * @return Current height of the element. Measured in pixels.
+ */
+function bz_getFullHeight(fromObj)
+{
+ var scrollY;
+
+ // All but Mac IE
+ if (fromObj.scrollHeight > fromObj.offsetHeight) {
+ scrollY = fromObj.scrollHeight;
+ // Mac IE
+ } else {
+ scrollY = fromObj.offsetHeight;
+ }
+
+ return scrollY;
+}
+
+/**
+ * Get the full width of an element, even if it's larger than the browser
+ * window.
+ *
+ * @param fromObj Element of which width to return.
+ * @return Current width of the element. Measured in pixels.
+ */
+function bz_getFullWidth(fromObj)
+{
+ var scrollX;
+
+ // All but Mac IE
+ if (fromObj.scrollWidth > fromObj.offsetWidth) {
+ scrollX = fromObj.scrollWidth;
+ // Mac IE
+ } else {
+ scrollX = fromObj.offsetWidth;
+ }
+
+ return scrollX;
+}