Javascript  |  137行  |  4.07 KB

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview
 * ButterBar class that is used to show the butter bar with various
 * notifications.
 */

'use strict';

/** @suppress {duplicate} */
var remoting = remoting || {};

/**
 * @constructor
 */
remoting.ButterBar = function() {
  this.storageKey_ = '';

  /** @type{remoting.ButterBar} */
  var that = this;

  /** @param {Object} syncValues */
  var onSyncDataLoaded = function(syncValues) {
    chrome.storage.local.get(
        remoting.kIT2MeVisitedStorageKey,
        that.onStateLoaded_.bind(that, syncValues));
  };

  chrome.storage.sync.get(
      [remoting.ButterBar.kSurveyStorageKey_,
       remoting.ButterBar.kHangoutsStorageKey_],
      onSyncDataLoaded);
}

/**
 * Shows butter bar with the specified |message| and updates |storageKey| after
 * the bar is dismissed.
 *
 * @param {string} messageId
 * @param {string|Array} substitutions
 * @param {string} storageKey
 * @private
 */
remoting.ButterBar.prototype.show_ =
    function(messageId, substitutions, storageKey) {
  this.storageKey_ = storageKey;

  var messageElement = document.getElementById(remoting.ButterBar.kMessageId_);
  l10n.localizeElementFromTag(messageElement, messageId, substitutions, true);
  var acceptLink =
      /** @type{Element} */ messageElement.getElementsByTagName('a')[0];
  acceptLink.addEventListener(
      'click', this.dismiss.bind(this, true), false);

  document.getElementById(remoting.ButterBar.kDismissId_).addEventListener(
      'click', this.dismiss.bind(this, false), false);

  document.getElementById(remoting.ButterBar.kId_).hidden = false;
}

/**
  * @param {Object} syncValues
  * @param {Object} localValues
  * @private
  */
remoting.ButterBar.prototype.onStateLoaded_ =
    function(syncValues, localValues) {
  /** @type {boolean} */
  var surveyDismissed = !!syncValues[remoting.ButterBar.kSurveyStorageKey_];
  /** @type {boolean} */
  var hangoutsDismissed =
      !!syncValues[remoting.ButterBar.kHangoutsStorageKey_];
  /** @type {boolean} */
  var it2meExpanded = !!localValues[remoting.kIT2MeVisitedStorageKey];

  var showSurvey = !surveyDismissed;
  var showHangouts = it2meExpanded && !hangoutsDismissed;

  // If both messages can be shown choose only one randomly.
  if (showSurvey && showHangouts) {
    if (Math.random() > 0.5) {
      showSurvey = false;
    } else {
      showHangouts = false;
    }
  }

  if (showSurvey) {
    this.show_(/*i18n-content*/'SURVEY_INVITATION',
               ['<a href="http://goo.gl/njH2q" target="_blank">', '</a>'],
               remoting.ButterBar.kSurveyStorageKey_);
  } else if (showHangouts) {
    this.show_(/*i18n-content*/'HANGOUTS_INVITATION',
               ['<a id="hangouts-accept" ' +
                'href="https://plus.google.com/hangouts/_?gid=818572447316">',
                '</a>'],
               remoting.ButterBar.kHangoutsStorageKey_);
  }
};

/** @const @private */
remoting.ButterBar.kId_ = 'butter-bar';

/** @const @private */
remoting.ButterBar.kMessageId_ = 'butter-bar-message';
/** @const @private */
remoting.ButterBar.kDismissId_ = 'butter-bar-dismiss';

/** @const @private */
remoting.ButterBar.kSurveyStorageKey_ = 'feedback-survey-dismissed';
/** @const @private */
remoting.ButterBar.kHangoutsStorageKey_ = 'hangouts-notice-dismissed';

/**
 * Hide the butter bar request and record some basic information about the
 * current state of the world in synced storage. This may be useful in the
 * future if we want to show the request again. At the moment, the data itself
 * is ignored; only its presence or absence is important.
 *
 * @param {boolean} accepted True if the user clicked the "accept" link;
 *     false if they clicked the close icon.
 */
remoting.ButterBar.prototype.dismiss = function(accepted) {
  var value = {};
  value[this.storageKey_] = {
    optIn: accepted,
    date: new Date(),
    version: chrome.runtime.getManifest().version
  };
  chrome.storage.sync.set(value);

  document.getElementById(remoting.ButterBar.kId_).hidden = true;
};