summaryrefslogtreecommitdiffstats
path: root/js/help.js
blob: 938a73a8b21202b6fab84f6de1395e387810a61e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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';
}