Bug 1350617: Remove unnecessary overhead from ui/button/view code. r?Mossop
MozReview-Commit-ID: G3hCLaGraXp
--- a/addon-sdk/source/lib/sdk/ui/button/view.js
+++ b/addon-sdk/source/lib/sdk/ui/button/view.js
@@ -61,19 +61,18 @@ const buttonListener = {
CustomizableUI.addListener(buttonListener);
require('../../system/unload').when( _ =>
CustomizableUI.removeListener(buttonListener)
);
function getNode(id, window) {
- return !views.has(id) || ignoreWindow(window)
- ? null
- : CustomizableUI.getWidget(id).forWindow(window).node
+ let view = views.get(id);
+ return view && view.nodes.get(window);
};
function isInToolbar(id) {
let placement = CustomizableUI.getPlacementOfWidget(id);
return placement && CustomizableUI.getAreaType(placement.area) === 'toolbar';
}
@@ -128,33 +127,42 @@ function create(options) {
onBuild: function(document) {
let window = document.defaultView;
let node = document.createElementNS(XUL_NS, 'toolbarbutton');
let image = getImage(icon, true, window.devicePixelRatio);
- if (ignoreWindow(window))
- node.style.display = 'none';
-
node.setAttribute('id', this.id);
node.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional badged-button');
node.setAttribute('type', type);
node.setAttribute('label', label);
node.setAttribute('tooltiptext', label);
node.setAttribute('image', image);
node.setAttribute('constrain-size', 'true');
- views.set(id, {
+ if (!views.get(id)) {
+ views.set(id, {
+ nodes: new WeakMap(),
+ });
+ }
+
+ let view = views.get(id);
+ Object.assign(view, {
area: this.currentArea,
icon: icon,
label: label
});
+ if (ignoreWindow(window))
+ node.style.display = 'none';
+ else
+ view.nodes.set(window, node);
+
node.addEventListener('command', function(event) {
if (views.has(id)) {
emit(viewEvents, 'data', {
type: 'click',
target: id,
window: event.view,
checked: node.checked
});
@@ -214,27 +222,27 @@ function setChecked(id, window, checked)
exports.setChecked = setChecked;
function setBadge(id, window, badge, color) {
let node = nodeFor(id, window);
if (node) {
// `Array.from` is needed to handle unicode symbol properly:
// '𝐀𝐁'.length is 4 where Array.from('𝐀𝐁').length is 2
- let text = isNil(badge)
+ let text = badge == null
? ''
: Array.from(String(badge)).slice(0, 4).join('');
node.setAttribute('badge', text);
let badgeNode = node.ownerDocument.getAnonymousElementByAttribute(node,
'class', 'toolbarbutton-badge');
if (badgeNode)
- badgeNode.style.backgroundColor = isNil(color) ? '' : color;
+ badgeNode.style.backgroundColor = color == null ? '' : color;
}
}
exports.setBadge = setBadge;
function click(id) {
let node = nodeFor(id);
if (node)