Bug 955081 - [a11y] Tooltips are missing in log viewer and message theme preview, r=florian.
This commit is contained in:
Родитель
f79cce50d0
Коммит
3ee5cdae24
|
@ -628,6 +628,50 @@
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
<method name="FillInHTMLTooltip">
|
||||||
|
<parameter name="tipElement"/>
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
// Inspired from the same function in mozilla/browser/base/content/browser.js
|
||||||
|
if (tipElement.namespaceURI == "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul")
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var defView = tipElement.ownerDocument && tipElement.ownerDocument.defaultView;
|
||||||
|
// XXX Work around bug 350679:
|
||||||
|
// "Tooltips can be fired in documents with no view".
|
||||||
|
if (!defView)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while (tipElement) {
|
||||||
|
if (tipElement.nodeType == Node.ELEMENT_NODE) {
|
||||||
|
let titleText = tipElement.getAttribute("title");
|
||||||
|
if (titleText && /\S/.test(titleText)) {
|
||||||
|
let direction = defView.getComputedStyle(tipElement, "")
|
||||||
|
.getPropertyValue("direction");
|
||||||
|
let tipNode = document.getElementById("aHTMLTooltip");
|
||||||
|
tipNode.style.direction = direction;
|
||||||
|
// Per HTML 4.01 6.2 (CDATA section), literal CRs and tabs should be
|
||||||
|
// replaced with spaces, and LFs should be removed entirely.
|
||||||
|
// XXX Bug 322270: We don't preserve the result of entities like ,
|
||||||
|
// which should result in a line break in the tooltip, because we can't
|
||||||
|
// distinguish that from a literal character in the source by this point.
|
||||||
|
titleText = titleText.replace(/[\r\t]/g, ' ').replace(/\n/g, '');
|
||||||
|
tipNode.setAttribute("label", titleText);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// When hovering a link, displaying a tooltip for a parent
|
||||||
|
// element is confusing, so we prevent it here.
|
||||||
|
if (tipElement.hasAttribute("href"))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tipElement = tipElement.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
<!-- nsIObserver implementation -->
|
<!-- nsIObserver implementation -->
|
||||||
<method name="observe">
|
<method name="observe">
|
||||||
<parameter name="aSubject"/>
|
<parameter name="aSubject"/>
|
||||||
|
|
|
@ -60,46 +60,6 @@ function getBrowser()
|
||||||
return document.getElementById("conversations");
|
return document.getElementById("conversations");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inspired from the same function in mozilla/browser/base/content/browser.js
|
|
||||||
function FillInHTMLTooltip(tipElement)
|
|
||||||
{
|
|
||||||
if (tipElement.namespaceURI == "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul")
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var defView = tipElement.ownerDocument && tipElement.ownerDocument.defaultView;
|
|
||||||
// XXX Work around bug 350679:
|
|
||||||
// "Tooltips can be fired in documents with no view".
|
|
||||||
if (!defView)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
while (tipElement) {
|
|
||||||
if (tipElement.nodeType == Node.ELEMENT_NODE) {
|
|
||||||
let titleText = tipElement.getAttribute("title");
|
|
||||||
if (titleText && /\S/.test(titleText)) {
|
|
||||||
let direction = defView.getComputedStyle(tipElement, "")
|
|
||||||
.getPropertyValue("direction");
|
|
||||||
let tipNode = document.getElementById("aHTMLTooltip");
|
|
||||||
tipNode.style.direction = direction;
|
|
||||||
// Per HTML 4.01 6.2 (CDATA section), literal CRs and tabs should be
|
|
||||||
// replaced with spaces, and LFs should be removed entirely.
|
|
||||||
// XXX Bug 322270: We don't preserve the result of entities like ,
|
|
||||||
// which should result in a line break in the tooltip, because we can't
|
|
||||||
// distinguish that from a literal character in the source by this point.
|
|
||||||
titleText = titleText.replace(/[\r\t]/g, ' ').replace(/\n/g, '');
|
|
||||||
tipNode.setAttribute("label", titleText);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// When hovering a link, displaying a tooltip for a parent
|
|
||||||
// element is confusing, so we prevent it here.
|
|
||||||
if (tipElement.hasAttribute("href"))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
tipElement = tipElement.parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copied from mozilla/browser/base/content/browser.js (and simplified)
|
// Copied from mozilla/browser/base/content/browser.js (and simplified)
|
||||||
var XULBrowserWindow = {
|
var XULBrowserWindow = {
|
||||||
// Stored Status
|
// Stored Status
|
||||||
|
|
|
@ -112,7 +112,8 @@
|
||||||
</stringbundleset>
|
</stringbundleset>
|
||||||
|
|
||||||
<popupset id="mainPopupSet">
|
<popupset id="mainPopupSet">
|
||||||
<tooltip id="aHTMLTooltip" onpopupshowing="return FillInHTMLTooltip(document.tooltipNode);"/>
|
<tooltip id="aHTMLTooltip"
|
||||||
|
onpopupshowing="return getBrowser().selectedBrowser.FillInHTMLTooltip(document.tooltipNode);"/>
|
||||||
<tooltip id="buddyTooltip" type="buddy"/>
|
<tooltip id="buddyTooltip" type="buddy"/>
|
||||||
|
|
||||||
<menupopup id="contentAreaContextMenu"
|
<menupopup id="contentAreaContextMenu"
|
||||||
|
|
|
@ -20,6 +20,9 @@ Conversation.prototype = {
|
||||||
statusInfo: Services.core.globalUserStatus}
|
statusInfo: Services.core.globalUserStatus}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Message style tooltips use this.
|
||||||
|
function getBrowser() document.getElementById("previewbrowser");
|
||||||
|
|
||||||
var previewObserver = {
|
var previewObserver = {
|
||||||
_loaded: false,
|
_loaded: false,
|
||||||
load: function() {
|
load: function() {
|
||||||
|
|
|
@ -70,6 +70,8 @@
|
||||||
</hbox>
|
</hbox>
|
||||||
<separator class="thin"/>
|
<separator class="thin"/>
|
||||||
<label value="&messageStylePreview.label;"/>
|
<label value="&messageStylePreview.label;"/>
|
||||||
|
<tooltip id="aHTMLTooltip"
|
||||||
|
onpopupshowing="return getBrowser().FillInHTMLTooltip(document.tooltipNode);"/>
|
||||||
<deck flex="1" id="previewDeck" selectedIndex="1">
|
<deck flex="1" id="previewDeck" selectedIndex="1">
|
||||||
<vbox flex="1" id="noPreviewScreen" align="center" pack="center">
|
<vbox flex="1" id="noPreviewScreen" align="center" pack="center">
|
||||||
<hbox id="noPreviewBox" align="top">
|
<hbox id="noPreviewBox" align="top">
|
||||||
|
@ -80,7 +82,7 @@
|
||||||
</vbox>
|
</vbox>
|
||||||
</hbox>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
<browser flex="1" id="previewbrowser" type="content-conversation"/>
|
<browser flex="1" id="previewbrowser" type="content-conversation" tooltip="aHTMLTooltip"/>
|
||||||
</deck>
|
</deck>
|
||||||
<hbox align="baseline">
|
<hbox align="baseline">
|
||||||
<label value="&messageStyleVariant.label;" control="themevariant"
|
<label value="&messageStyleVariant.label;" control="themevariant"
|
||||||
|
|
|
@ -6,7 +6,7 @@ const Cu = Components.utils;
|
||||||
|
|
||||||
Cu.import("resource://gre/modules/Services.jsm");
|
Cu.import("resource://gre/modules/Services.jsm");
|
||||||
|
|
||||||
// viewZoomOverlay.js uses this
|
// viewZoomOverlay.js, macgestures.js and tooltips use this.
|
||||||
function getBrowser() {
|
function getBrowser() {
|
||||||
let deck = document.getElementById("browserDeck");
|
let deck = document.getElementById("browserDeck");
|
||||||
let id = (parseInt(deck.selectedIndex, 10) ? "conv" : "text") + "-browser";
|
let id = (parseInt(deck.selectedIndex, 10) ? "conv" : "text") + "-browser";
|
||||||
|
|
|
@ -86,6 +86,8 @@
|
||||||
</stringbundleset>
|
</stringbundleset>
|
||||||
|
|
||||||
<popupset id="mainPopupSet">
|
<popupset id="mainPopupSet">
|
||||||
|
<tooltip id="aHTMLTooltip"
|
||||||
|
onpopupshowing="return getBrowser().FillInHTMLTooltip(document.tooltipNode);"/>
|
||||||
<menupopup id="contentAreaContextMenu">
|
<menupopup id="contentAreaContextMenu">
|
||||||
<menuitem id="context-copy"
|
<menuitem id="context-copy"
|
||||||
label="©Cmd.label;"
|
label="©Cmd.label;"
|
||||||
|
@ -111,11 +113,12 @@
|
||||||
<splitter/>
|
<splitter/>
|
||||||
<vbox flex="1">
|
<vbox flex="1">
|
||||||
<deck flex="1" id="browserDeck" selectedIndex="0">
|
<deck flex="1" id="browserDeck" selectedIndex="0">
|
||||||
<browser id="text-browser" type="content" context="contentAreaContextMenu"
|
<browser id="text-browser" type="content"
|
||||||
|
context="contentAreaContextMenu" tooltip="aHTMLTooltip"
|
||||||
disablehistory="true" src="about:blank" flex="1"/>
|
disablehistory="true" src="about:blank" flex="1"/>
|
||||||
<vbox flex="1">
|
<vbox flex="1">
|
||||||
<browser id="conv-browser" type="content-conversation" flex="1"
|
<browser id="conv-browser" type="content-conversation" flex="1"
|
||||||
context="contentAreaContextMenu"/>
|
context="contentAreaContextMenu" tooltip="aHTMLTooltip"/>
|
||||||
<progressmeter id="browserProgress" hidden="true"/>
|
<progressmeter id="browserProgress" hidden="true"/>
|
||||||
</vbox>
|
</vbox>
|
||||||
<vbox flex="1" id="corruptLogScreen" align="center" pack="center">
|
<vbox flex="1" id="corruptLogScreen" align="center" pack="center">
|
||||||
|
|
Загрузка…
Ссылка в новой задаче