Bug 1350617: Remove unnecessary overhead from ui/button/view code. r?Mossop draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 25 Mar 2017 14:51:22 -0700
changeset 551369 6a22693d9b000a6430206212857da4f35da4bc9f
parent 551214 518cd94b4580e11a76724b70c37ee0cf476de3b6
child 621533 42634aa74b7d969216c50c74aa2f78f73f7f4ac9
push id51039
push usermaglione.k@gmail.com
push dateSat, 25 Mar 2017 21:54:52 +0000
reviewersMossop
bugs1350617
milestone55.0a1
Bug 1350617: Remove unnecessary overhead from ui/button/view code. r?Mossop MozReview-Commit-ID: G3hCLaGraXp
addon-sdk/source/lib/sdk/ui/button/view.js
--- 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)