зеркало из https://github.com/mozilla/pjs.git
Bug 182082: Help system should support more browsers - Patch by Teemu Mannermaa <wicked+bz@etlicon.fi> r=myk a=LpSolit
This commit is contained in:
Родитель
3a915ad923
Коммит
d7ecb775e1
|
@ -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';
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/* ***** 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 ***** */
|
||||
|
||||
/* Help system */
|
||||
#helpDiv {
|
||||
border-style: solid;
|
||||
border-color: #F0A000;
|
||||
background-color: white;
|
||||
padding: 5px;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#helpIframe {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
display: none;
|
||||
}
|
|
@ -216,11 +216,6 @@
|
|||
'bug.bug_id',
|
||||
],
|
||||
|
||||
'global/help.html.tmpl' => [
|
||||
'h.id',
|
||||
'h.html',
|
||||
],
|
||||
|
||||
'global/choose-product.html.tmpl' => [
|
||||
'target',
|
||||
],
|
||||
|
|
|
@ -82,8 +82,6 @@
|
|||
[% END %]
|
||||
[% END %]
|
||||
|
||||
[%+ INCLUDE "global/help-header.html.tmpl" %]
|
||||
|
||||
[%# Set up the skin CSS cascade:
|
||||
# 1. Standard Bugzilla stylesheet set (persistent)
|
||||
# 2. Standard Bugzilla stylesheet set (selectable)
|
||||
|
|
|
@ -23,12 +23,11 @@
|
|||
[% cgi = Bugzilla.cgi %]
|
||||
|
||||
[% IF cgi.param("help") %]
|
||||
[% IF cgi.user_agent("Mozilla/5") %]
|
||||
[% FOREACH h = help_html %]
|
||||
<div id="[% h.id %]_help" class="help" style="display: none;">
|
||||
[%- h.html -%]
|
||||
</div>
|
||||
[% END %]
|
||||
[% END %]
|
||||
<script type="text/javascript"> <!--
|
||||
[% FOREACH h = help_html %]
|
||||
g_helpTexts["[% h.id FILTER js %]"] = "[%- h.html FILTER js -%]";
|
||||
[% END %]
|
||||
// -->
|
||||
</script>
|
||||
[% END %]
|
||||
|
||||
|
|
|
@ -37,9 +37,10 @@ var queryform = "queryform"
|
|||
|
||||
[% PROCESS global/header.html.tmpl
|
||||
title = "Search for $terms.bugs"
|
||||
onload = "doOnSelectProduct(0); initHelp();"
|
||||
onload = "doOnSelectProduct(0); enableHelp();"
|
||||
javascript = js_data
|
||||
javascript_urls = [ "js/productform.js" ]
|
||||
javascript_urls = [ "js/productform.js" "js/util.js" "js/help.js" ]
|
||||
style_urls = [ "skins/standard/help.css" ]
|
||||
style = "dl.bug_changes dt {
|
||||
margin-top: 15px;
|
||||
}"
|
||||
|
@ -50,25 +51,19 @@ var queryform = "queryform"
|
|||
[% button_name = "Search" %]
|
||||
|
||||
[%# The decent help requires Javascript %]
|
||||
<script type="text/javascript"> <!--
|
||||
[% IF NOT cgi.param("help") %]
|
||||
[% IF cgi.user_agent("Mozilla/5") %]
|
||||
<script type="text/javascript"> <!--
|
||||
document.write("<p><a href='query.cgi?help=1&format=advanced'>Give me some help<\/a> (reloads page).<\/p>");
|
||||
// -->
|
||||
</script>
|
||||
[% END %]
|
||||
document.write("<p><a href='query.cgi?help=1&format=advanced'>Give me some help<\/a> (reloads page).<\/p>");
|
||||
[% ELSE %]
|
||||
<p>
|
||||
For help, mouse over the page elements.
|
||||
<font color="red">
|
||||
[% IF cgi.user_agent("Mozilla/5") %]
|
||||
Note that if the help popups are hidden by form element scroll bars,
|
||||
this is a b<!-- word broken up to pass test 009 -->ug in your browser,
|
||||
not in [% terms.Bugzilla %].
|
||||
[% END %]
|
||||
</font>
|
||||
</p>
|
||||
[% PROCESS "search/search-help.html.tmpl" %]
|
||||
if (generateHelp())
|
||||
document.write("<p>For help, mouse over the page elements.<\/p>");
|
||||
else
|
||||
document.write("<p>Help initialization failed, no help available.<\/p>");
|
||||
[% END %]
|
||||
// -->
|
||||
</script>
|
||||
|
||||
<form method="get" action="buglist.cgi" name="queryform">
|
||||
|
||||
[% PROCESS search/form.html.tmpl %]
|
||||
|
@ -81,7 +76,6 @@ var queryform = "queryform"
|
|||
|
||||
</form>
|
||||
|
||||
[% PROCESS "search/search-help.html.tmpl" IF cgi.param("help") %]
|
||||
|
||||
[% END %]
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче