Commit f306ab5f authored by Jared Wein's avatar Jared Wein
Browse files

Backed out changeset f1c3d164cffc (bug 790112)

parent d2213ee5
Loading
Loading
Loading
Loading
+53 −56
Original line number Diff line number Diff line
@@ -531,21 +531,33 @@ let SocialShareButton = {
var SocialToolbar = {
  // Called once, after window load, when the Social.provider object is initialized
  init: function SocialToolbar_init() {
    document.getElementById("social-provider-button").setAttribute("image", Social.provider.iconURL);
    document.getElementById("social-provider-image").setAttribute("image", Social.provider.iconURL);

    let statusAreaPopup = document.getElementById("social-statusarea-popup");
    statusAreaPopup.addEventListener("popupshown", function(e) {
      this.button.setAttribute("open", "true");
    }.bind(this));
    statusAreaPopup.addEventListener("popuphidden", function(e) {
      this.button.removeAttribute("open");
    }.bind(this));

    this.updateButton();
    this.updateProfile();
  },

  get button() {
    return document.getElementById("social-toolbar-button");
  },

  updateButtonHiddenState: function SocialToolbar_updateButtonHiddenState() {
    let tbi = document.getElementById("social-toolbar-item");
    tbi.hidden = !Social.uiVisible;
    this.button.hidden = !Social.uiVisible;
    if (!SocialUI.haveLoggedInUser()) {
      let parent = document.getElementById("social-notification-box");
      ["social-notification-box",
       "social-status-iconbox"].forEach(function removeChildren(parentId) {
        let parent = document.getElementById(parentId);
        while(parent.hasChildNodes())
          parent.removeChild(parent.firstChild);

      while (tbi.lastChild != tbi.firstChild)
        tbi.removeChild(tbi.lastChild);
      });
    }
  },

@@ -573,7 +585,7 @@ var SocialToolbar = {
    this.updateButtonHiddenState();
    let provider = Social.provider;
    let iconNames = Object.keys(provider.ambientNotificationIcons);
    let iconBox = document.getElementById("social-toolbar-item");
    let iconBox = document.getElementById("social-status-iconbox");
    let notifBox = document.getElementById("social-notification-box");
    let panel = document.getElementById("social-notification-panel");
    panel.hidden = false;
@@ -601,57 +613,44 @@ var SocialToolbar = {
        notificationFrame.setAttribute("src", icon.contentPanel);

      let iconId = "social-notification-icon-" + icon.name;
      let imageId = iconId + "-image";
      let labelId = iconId + "-label";
      let stackId = iconId + "-stack";
      let stack = document.getElementById(stackId);
      let image, label;
      if (stack) {
        image = document.getElementById(imageId);
        label = document.getElementById(labelId);
      let iconContainer = document.getElementById(iconId);
      let iconImage, iconCounter;
      if (iconContainer) {
        iconImage = iconContainer.getElementsByClassName("social-notification-icon-image")[0];
        iconCounter = iconContainer.getElementsByClassName("social-notification-icon-counter")[0];
      } else {
        let box = document.createElement("box");
        box.classList.add("toolbarbutton-1");
        box.setAttribute("id", iconId);
        box.addEventListener("mousedown", function (e) { SocialToolbar.showAmbientPopup(box); }, false);
        box.setAttribute("notificationFrameId", notificationFrameId);
        stack = document.createElement("stack");
        stack.setAttribute("id", stackId);
        stack.classList.add("social-notification-icon-stack");
        stack.classList.add("toolbarbutton-icon");
        image = document.createElement("image");
        image.setAttribute("id", imageId);
        image = stack.appendChild(image);
        label = document.createElement("label");
        label.setAttribute("id", labelId);
        label.classList.add("social-notification-icon-label");
        let hbox = document.createElement("hbox");
        hbox.classList.add("social-notification-icon-hbox");
        hbox.setAttribute("align", "start");
        hbox.setAttribute("pack", "end");
        label = hbox.appendChild(label);
        stack.appendChild(hbox);
        box.appendChild(stack);
        iconContainers.appendChild(box);
      }

      let labelValue = icon.counter || "";
      // Only update the value attribute if it has changed to reduce layout changes.
      if (!label.hasAttribute("value") || label.getAttribute("value") != labelValue)
        label.setAttribute("value", labelValue);

      if (image.getAttribute("src") != icon.iconURL)
        image.setAttribute("src", icon.iconURL);
        iconContainer = document.createElement("box");
        iconContainer.setAttribute("id", iconId);
        iconContainer.classList.add("social-notification-icon-container");
        iconContainer.addEventListener("click", function (e) { SocialToolbar.showAmbientPopup(iconContainer); }, false);

        iconImage = document.createElement("image");
        iconImage.classList.add("social-notification-icon-image");
        iconImage = iconContainer.appendChild(iconImage);

        iconCounter = document.createElement("box");
        iconCounter.classList.add("social-notification-icon-counter");
        iconCounter.appendChild(document.createTextNode(""));
        iconCounter = iconContainer.appendChild(iconCounter);

        iconContainers.appendChild(iconContainer);
      }
      if (iconImage.getAttribute("src") != icon.iconURL)
        iconImage.setAttribute("src", icon.iconURL);
      iconImage.setAttribute("notificationFrameId", notificationFrameId);

      iconCounter.collapsed = !icon.counter;
      iconCounter.firstChild.textContent = icon.counter || "";
    }
    notifBox.appendChild(notificationFrames);
    iconBox.appendChild(iconContainers);
  },

  showAmbientPopup: function SocialToolbar_showAmbientPopup(aToolbarButtonBox) {
  showAmbientPopup: function SocialToolbar_showAmbientPopup(iconContainer) {
    let iconImage = iconContainer.firstChild;
    let panel = document.getElementById("social-notification-panel");
    let notifBox = document.getElementById("social-notification-box");
    let notificationFrameId = aToolbarButtonBox.getAttribute("notificationFrameId");
    let notificationFrame = document.getElementById(notificationFrameId);
    let notificationFrame = document.getElementById(iconImage.getAttribute("notificationFrameId"));

    // Clear dimensions on all browsers so the panel size will
    // only use the selected browser.
@@ -669,14 +668,14 @@ var SocialToolbar = {

    panel.addEventListener("popuphidden", function onpopuphiding() {
      panel.removeEventListener("popuphidden", onpopuphiding);
      aToolbarButtonBox.removeAttribute("open");
      SocialToolbar.button.removeAttribute("open");
      notificationFrame.docShell.isActive = false;
      dispatchPanelEvent("socialFrameHide");
    });

    panel.addEventListener("popupshown", function onpopupshown() {
      panel.removeEventListener("popupshown", onpopupshown);
      aToolbarButtonBox.setAttribute("open", "true");
      SocialToolbar.button.setAttribute("open", "true");
      notificationFrame.docShell.isActive = true;
      notificationFrame.docShell.isAppTab = true;
      if (notificationFrame.contentDocument.readyState == "complete") {
@@ -694,9 +693,7 @@ var SocialToolbar = {
      }
    });

    let imageId = aToolbarButtonBox.getAttribute("id") + "-image";
    let toolbarButtonImage = document.getElementById(imageId);
    panel.openPopup(toolbarButtonImage, "bottomcenter topleft", 0, 0, false, false);
    panel.openPopup(iconImage, "bottomcenter topleft", 0, 0, false, false);
  }
}

+32 −23
Original line number Diff line number Diff line
@@ -660,14 +660,14 @@
                     onclick="BrowserGoHome(event);"
                     aboutHomeOverrideTooltip="&abouthome.pageTitle;"/>

      <toolbaritem id="social-toolbar-item"
                   class="chromeclass-toolbar-additional"
      <toolbaritem id="social-toolbar-button"
                   class="toolbarbutton-1 chromeclass-toolbar-additional"
                   removable="false"
                   pack="center"
                   title="&socialToolbar.title;"
                   hidden="true">
        <toolbarbutton id="social-provider-button"
                       class="toolbarbutton-1"
                       type="menu">
        <hbox id="social-toolbar-button-box" class="social-statusarea-container">
          <button id="social-provider-image" type="menu">
            <menupopup id="social-statusarea-popup">
              <hbox id="social-statusarea-user" pack="left" align="center">
                <image id="social-statusarea-user-portrait"/>
@@ -684,8 +684,17 @@
                        command="Social:ToggleSidebar"
                        label="&social.toggleSidebar.label;"
                        accesskey="&social.toggleSidebar.accesskey;"/>
              <menuitem id="social-toggle-notifications-menuitem"
                        type="checkbox"
                        autocheck="false"
                        command="Social:ToggleNotifications"
                        label="&social.toggleNotifications.label;"
                        accesskey="&social.toggleNotifications.accesskey;"/>
            </menupopup>
        </toolbarbutton>
          </button>
          <hbox id="social-status-iconbox" flex="1">
          </hbox>
        </hbox>
      </toolbaritem>

      <toolbaritem id="bookmarks-menu-button-container"
+4 −8
Original line number Diff line number Diff line
@@ -28,16 +28,12 @@ var tests = {
    }

    function triggerIconPanel() {
      let statusIcon = document.querySelector("#social-toolbar-item > box");
      info("status icon is " + statusIcon);
      waitForCondition(function() {
        statusIcon = document.querySelector("#social-toolbar-item > box");
        info("status icon is " + statusIcon);
        return !!statusIcon;
      }, function() {
      let statusIcons = document.getElementById("social-status-iconbox");
      waitForCondition(function() statusIcons.firstChild && !statusIcons.firstChild.hidden,
                       function() {
        // Click the button to trigger its contentPanel
        let panel = document.getElementById("social-notification-panel");
        EventUtils.synthesizeMouseAtCenter(statusIcon, {});
        EventUtils.synthesizeMouseAtCenter(statusIcons.firstChild, {});
      }, "Status icon didn't become non-hidden");
    }

+13 −15
Original line number Diff line number Diff line
@@ -42,28 +42,26 @@ var tests = {
    };
    Social.provider.setAmbientNotification(ambience);

    let statusIcon = document.querySelector("#social-toolbar-item > box");
    waitForCondition(function() {
      statusIcon = document.querySelector("#social-toolbar-item > box");
      return !!statusIcon;
    }, function () {
      let statusIconLabel = statusIcon.querySelector("label");
      is(statusIconLabel.value, "42", "status value is correct");
    let statusIcons = document.getElementById("social-status-iconbox");
    ok(!statusIcons.firstChild.collapsed, "status icon is visible");
    ok(!statusIcons.firstChild.lastChild.collapsed, "status value is visible");
    is(statusIcons.firstChild.lastChild.textContent, "42", "status value is correct");

    ambience.counter = 0;
    Social.provider.setAmbientNotification(ambience);
      is(statusIconLabel.value, "", "status value is correct");
    ok(statusIcons.firstChild.lastChild.collapsed, "status value is not visible");
    is(statusIcons.firstChild.lastChild.textContent, "", "status value is correct");
    next();
    }, "statusIcon was never found");
  },
  testProfileUnset: function(next) {
    Social.provider.updateUserProfile({});
    // check dom values
    let userButton = document.getElementById("social-statusarea-username");
    ok(userButton.hidden, "username is not visible");
    let ambientIcons = document.querySelectorAll("#social-toolbar-item > box");
    for (let ambientIcon of ambientIcons) {
      ok(ambientIcon.collapsed, "ambient icon (" + ambientIcon.id + ") is collapsed");
    let ambience = document.getElementById("social-status-iconbox").firstChild;
    while (ambience) {
      ok(ambience.collapsed, "ambient icon (" + ambience.id + ") is collapsed");
      ambience = ambience.nextSibling;
    }
    
    next();
+42 −25
Original line number Diff line number Diff line
@@ -2609,46 +2609,53 @@ html|*#gcli-output-frame {
  -moz-margin-end: 2px;
}

#social-toolbar-item {
  -moz-box-orient: horizontal;
}

#social-toolbar-item > .toolbarbutton-1 {
  margin: 0;
  padding: 0;
#social-toolbar-button {
  -moz-appearance: toolbarbutton;
}

.social-notification-icon-hbox {
  pointer-events: none;
/* favicon for the service */
#social-provider-image {
  -moz-appearance: none;
  border: none;
  min-width: 20px;
  min-height: 20px;
  padding: 2px 5px;
  margin: 0;
  background: transparent;
  list-style-image: url("chrome://browser/skin/social/social.png");
}

.social-status-button {
  list-style-image: none;
#social-provider-image > .button-box > .box-inherit > .button-icon {
  max-height: 16px;
  max-width: 16px;
}

#social-provider-button > image {
  margin: 5px 3px;
#social-provider-image > .button-box {
  padding: 0;
  margin: 0;
  background: transparent;
  border: none;
}

#social-provider-button > .toolbarbutton-menu-dropmarker {
#social-provider-image > .button-box > .button-menu-dropmarker {
  display: none;
}

.social-notification-icon-stack {
/* hbox that hold notification icons */
#social-status-iconbox {
  margin: 0;
  padding: 0;
}

.social-notification-icon-stack > image {
  margin: 5px 3px;
  max-height: 16px;
}

.social-notification-icon-hbox {
/* hbox that surrounds an image and its counter */
.social-notification-icon-container {
  padding: 0;
  margin: 0;
  position: relative;
}

.social-notification-icon-label {
/* notification counter box */
.social-notification-icon-counter {
  background-color: rgb(240,61,37);
  border: 1px solid rgb(216,55,34);
  box-shadow: 0px 1px 0px rgba(0,39,121,0.77);
@@ -2657,11 +2664,21 @@ html|*#gcli-output-frame {
  color: white;
  font-size: 9px;
  font-weight: bold;
  margin: 0;
  position: absolute;
  right: -3px;
  top: -4px;
  z-index: 1;
  text-align: center;
}

.social-notification-icon-label[value=""] {
  display: none;
/* notification image */
.social-notification-icon-image {
  padding: 2px;
  margin: 0;
  min-width: 20px;
  max-width: 32px;
  max-height: 20px;
  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
}

/* social toolbar provider menu */
Loading