better handling for tab tooltip (without eval())
This commit is contained in:
parent
0371c6cf1b
commit
2820a2556e
@ -1119,54 +1119,6 @@ var TreeStyleTabService = {
|
|||||||
},
|
},
|
||||||
showHideSubTreeMenuItem : function() { return this.showHideSubtreeMenuItem.apply(this, arguments); }, // obsolete, for backward compatibility
|
showHideSubTreeMenuItem : function() { return this.showHideSubtreeMenuItem.apply(this, arguments); }, // obsolete, for backward compatibility
|
||||||
|
|
||||||
handleTooltip : function TSTService_handleTooltip(aEvent, aTab)
|
|
||||||
{
|
|
||||||
var label;
|
|
||||||
var collapsed = this.isSubtreeCollapsed(aTab);
|
|
||||||
|
|
||||||
var base = parseInt(aTab.getAttribute(this.kNEST) || 0);
|
|
||||||
var descendant = this.getDescendantTabs(aTab);
|
|
||||||
var indentPart = ' ';
|
|
||||||
var tree = (this.getTreePref('tooltip.includeChildren') && descendant.length) ?
|
|
||||||
[aTab].concat(descendant)
|
|
||||||
.map(function(aTab) {
|
|
||||||
let label = aTab.getAttribute('label');
|
|
||||||
let indent = '';
|
|
||||||
let nest = parseInt(aTab.getAttribute(this.kNEST) || 0) - base;
|
|
||||||
for (let i = 0; i < nest; i++)
|
|
||||||
{
|
|
||||||
indent += indentPart;
|
|
||||||
}
|
|
||||||
return this.treeBundle.getFormattedString('tooltip.item.label', [label, indent]);
|
|
||||||
}, this)
|
|
||||||
.join('\n') :
|
|
||||||
null ;
|
|
||||||
|
|
||||||
if ('mOverCloseButton' in aTab && aTab.mOverCloseButton) {
|
|
||||||
if (descendant.length &&
|
|
||||||
(collapsed || this.getTreePref('closeParentBehavior') == this.CLOSE_PARENT_BEHAVIOR_CLOSE)) {
|
|
||||||
label = this.treeBundle.getString('tooltip.closeTree');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (aTab.getAttribute(this.kTWISTY_HOVER) == 'true') {
|
|
||||||
let key = collapsed ?
|
|
||||||
'tooltip.expandSubtree' :
|
|
||||||
'tooltip.collapseSubtree' ;
|
|
||||||
label = tree || aTab.getAttribute('label');
|
|
||||||
label = label ?
|
|
||||||
this.treeBundle.getFormattedString(key+'.labeled', [label]) :
|
|
||||||
this.treeBundle.getString(key) ;
|
|
||||||
}
|
|
||||||
else if (collapsed) {
|
|
||||||
label = tree;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (label)
|
|
||||||
aEvent.target.setAttribute('label', label);
|
|
||||||
|
|
||||||
return label;
|
|
||||||
},
|
|
||||||
|
|
||||||
updateAeroPeekPreviews : function TSTService_updateAeroPeekPreviews()
|
updateAeroPeekPreviews : function TSTService_updateAeroPeekPreviews()
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
|
@ -85,6 +85,12 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
return (this._tabStripPlaceHolder = value);
|
return (this._tabStripPlaceHolder = value);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get tabTooltip()
|
||||||
|
{
|
||||||
|
return document.getElementById('tabbrowser-tab-tooltip') || // Firefox 4.0-
|
||||||
|
this.evaluateXPath('descendant::xul:tooltip', b.mStrip, XPathResult.FIRST_ORDERED_NODE_TYPE).singleNodeValue; // -Firefox 3.6
|
||||||
|
},
|
||||||
|
|
||||||
get tabbarDNDObserver()
|
get tabbarDNDObserver()
|
||||||
{
|
{
|
||||||
if (!this._tabbarDNDObserver) {
|
if (!this._tabbarDNDObserver) {
|
||||||
@ -357,6 +363,8 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
this.scrollBox.addEventListener('overflow', this, true);
|
this.scrollBox.addEventListener('overflow', this, true);
|
||||||
this.scrollBox.addEventListener('underflow', this, true);
|
this.scrollBox.addEventListener('underflow', this, true);
|
||||||
|
|
||||||
|
this.tabTooltip.addEventListener('popupshowing', this, true);
|
||||||
|
|
||||||
window.addEventListener('resize', this, true);
|
window.addEventListener('resize', this, true);
|
||||||
window.addEventListener(this.kEVENT_TYPE_PRINT_PREVIEW_ENTERED, this, false);
|
window.addEventListener(this.kEVENT_TYPE_PRINT_PREVIEW_ENTERED, this, false);
|
||||||
window.addEventListener(this.kEVENT_TYPE_PRINT_PREVIEW_EXITED, this, false);
|
window.addEventListener(this.kEVENT_TYPE_PRINT_PREVIEW_EXITED, this, false);
|
||||||
@ -530,18 +538,6 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
eval('b.createTooltip = '+
|
|
||||||
b.createTooltip.toSource().replace(
|
|
||||||
'if ("mOverCloseButton" in tn && tn.mOverCloseButton) {',
|
|
||||||
<![CDATA[
|
|
||||||
if (TreeStyleTabService.getTabBrowserFromChild(tn) &&
|
|
||||||
TreeStyleTabService.getTabBrowserFromChild(tn).treeStyleTab.handleTooltip(event, tn)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else $&]]>
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if ('_beginRemoveTab' in b) {
|
if ('_beginRemoveTab' in b) {
|
||||||
eval('b._beginRemoveTab = '+
|
eval('b._beginRemoveTab = '+
|
||||||
b._beginRemoveTab.toSource().replace(
|
b._beginRemoveTab.toSource().replace(
|
||||||
@ -1530,6 +1526,8 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
this.scrollBox.removeEventListener('overflow', this, true);
|
this.scrollBox.removeEventListener('overflow', this, true);
|
||||||
this.scrollBox.removeEventListener('underflow', this, true);
|
this.scrollBox.removeEventListener('underflow', this, true);
|
||||||
|
|
||||||
|
this.tabTooltip.removeEventListener('popupshowing', this, true);
|
||||||
|
|
||||||
var tabContextMenu = b.tabContextMenu ||
|
var tabContextMenu = b.tabContextMenu ||
|
||||||
document.getAnonymousElementByAttribute(b, 'anonid', 'tabContextMenu');
|
document.getAnonymousElementByAttribute(b, 'anonid', 'tabContextMenu');
|
||||||
tabContextMenu.removeEventListener('popupshowing', this, false);
|
tabContextMenu.removeEventListener('popupshowing', this, false);
|
||||||
@ -3067,10 +3065,64 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
|
|
||||||
onPopupShowing : function TSTBrowser_onPopupShowing(aEvent)
|
onPopupShowing : function TSTBrowser_onPopupShowing(aEvent)
|
||||||
{
|
{
|
||||||
if (aEvent.target == aEvent.currentTarget)
|
if (aEvent.target.localName == 'tooltip')
|
||||||
|
this.handleTooltip(aEvent);
|
||||||
|
else if (aEvent.target == aEvent.currentTarget)
|
||||||
this.initTabContextMenu(aEvent);
|
this.initTabContextMenu(aEvent);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handleTooltip : function TSTBrowser_handleTooltip(aEvent)
|
||||||
|
{
|
||||||
|
var tab = document.tooltipNode;
|
||||||
|
if (tab.localName != 'tab')
|
||||||
|
return;
|
||||||
|
|
||||||
|
var label;
|
||||||
|
var collapsed = this.isSubtreeCollapsed(tab);
|
||||||
|
|
||||||
|
var base = parseInt(tab.getAttribute(this.kNEST) || 0);
|
||||||
|
var descendant = this.getDescendantTabs(tab);
|
||||||
|
var indentPart = ' ';
|
||||||
|
var tree = (this.getTreePref('tooltip.includeChildren') && descendant.length) ?
|
||||||
|
[tab].concat(descendant)
|
||||||
|
.map(function(aTab) {
|
||||||
|
let label = aTab.getAttribute('label');
|
||||||
|
let indent = '';
|
||||||
|
let nest = parseInt(aTab.getAttribute(this.kNEST) || 0) - base;
|
||||||
|
for (let i = 0; i < nest; i++)
|
||||||
|
{
|
||||||
|
indent += indentPart;
|
||||||
|
}
|
||||||
|
return this.treeBundle.getFormattedString('tooltip.item.label', [label, indent]);
|
||||||
|
}, this)
|
||||||
|
.join('\n') :
|
||||||
|
null ;
|
||||||
|
|
||||||
|
if ('mOverCloseButton' in tab && tab.mOverCloseButton) {
|
||||||
|
if (descendant.length &&
|
||||||
|
(collapsed || this.getTreePref('closeParentBehavior') == this.CLOSE_PARENT_BEHAVIOR_CLOSE)) {
|
||||||
|
label = this.treeBundle.getString('tooltip.closeTree');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (tab.getAttribute(this.kTWISTY_HOVER) == 'true') {
|
||||||
|
let key = collapsed ?
|
||||||
|
'tooltip.expandSubtree' :
|
||||||
|
'tooltip.collapseSubtree' ;
|
||||||
|
label = tree || tab.getAttribute('label');
|
||||||
|
label = label ?
|
||||||
|
this.treeBundle.getFormattedString(key+'.labeled', [label]) :
|
||||||
|
this.treeBundle.getString(key) ;
|
||||||
|
}
|
||||||
|
else if (collapsed) {
|
||||||
|
label = tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (label) {
|
||||||
|
aEvent.target.setAttribute('label', label);
|
||||||
|
aEvent.stopPropagation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
initTabContextMenu : function TSTBrowser_initTabContextMenu(aEvent)
|
initTabContextMenu : function TSTBrowser_initTabContextMenu(aEvent)
|
||||||
{
|
{
|
||||||
var b = this.mTabBrowser;
|
var b = this.mTabBrowser;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user