| // 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; |
| }; |