blob: a999b94fa510946d100cbf8a60745d15542325a7 [file] [log] [blame]
// 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;
};