OLD | NEW |
(Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * @fileoverview |
| 7 * ButterBar class that is used to show the butter bar with various |
| 8 * notifications. |
| 9 */ |
| 10 |
| 11 'use strict'; |
| 12 |
| 13 /** @suppress {duplicate} */ |
| 14 var remoting = remoting || {}; |
| 15 |
| 16 /** |
| 17 * @constructor |
| 18 */ |
| 19 remoting.ButterBar = function() { |
| 20 this.storageKey_ = ''; |
| 21 |
| 22 /** @type{remoting.ButterBar} */ |
| 23 var that = this; |
| 24 |
| 25 /** @param {Object} syncValues */ |
| 26 var onSyncDataLoaded = function(syncValues) { |
| 27 chrome.storage.local.get( |
| 28 remoting.kIT2MeVisitedStorageKey, |
| 29 that.onStateLoaded_.bind(that, syncValues)); |
| 30 }; |
| 31 |
| 32 chrome.storage.sync.get( |
| 33 [remoting.ButterBar.kSurveyStorageKey_, |
| 34 remoting.ButterBar.kHangoutsStorageKey_], |
| 35 onSyncDataLoaded); |
| 36 } |
| 37 |
| 38 /** |
| 39 * Shows butter bar with the specified |message| and updates |storageKey| after |
| 40 * the bar is dismissed. |
| 41 * |
| 42 * @param {string} messageId |
| 43 * @param {string} substitutions |
| 44 * @param {string} storageKey |
| 45 * @private |
| 46 */ |
| 47 remoting.ButterBar.prototype.show_ = |
| 48 function(messageId, substitutions, storageKey) { |
| 49 this.storageKey_ = storageKey; |
| 50 |
| 51 var messageElement = document.getElementById(remoting.ButterBar.kMessageId_); |
| 52 l10n.localizeElementFromTag(messageElement, messageId, substitutions, true); |
| 53 var acceptLink = |
| 54 /** @type{Element} */ messageElement.getElementsByTagName('a')[0]; |
| 55 acceptLink.addEventListener( |
| 56 'click', this.dismiss.bind(this, true), false); |
| 57 |
| 58 document.getElementById(remoting.ButterBar.kDismissId_).addEventListener( |
| 59 'click', this.dismiss.bind(this, false), false); |
| 60 |
| 61 document.getElementById(remoting.ButterBar.kId_).hidden = false; |
| 62 } |
| 63 |
| 64 /** |
| 65 * @param {Object} syncValues |
| 66 * @param {Object} localValues |
| 67 * @private |
| 68 */ |
| 69 remoting.ButterBar.prototype.onStateLoaded_ = |
| 70 function(syncValues, localValues) { |
| 71 /** @type {boolean} */ |
| 72 var surveyDismissed = !!syncValues[remoting.ButterBar.kSurveyStorageKey_]; |
| 73 /** @type {boolean} */ |
| 74 var hangoutsDismissed = |
| 75 !!syncValues[remoting.ButterBar.kHangoutsStorageKey_]; |
| 76 /** @type {boolean} */ |
| 77 var it2meExpanded = !!localValues[remoting.kIT2MeVisitedStorageKey]; |
| 78 |
| 79 var showSurvey = !surveyDismissed; |
| 80 var showHangouts = it2meExpanded && !hangoutsDismissed; |
| 81 |
| 82 // If both messages can be shown choose only one randomly. |
| 83 if (showSurvey && showHangouts) { |
| 84 if (Math.random() > 0.5) { |
| 85 showSurvey = false; |
| 86 } else { |
| 87 showHangouts = false; |
| 88 } |
| 89 } |
| 90 |
| 91 if (showSurvey) { |
| 92 this.show_(/*i18n-content*/'SURVEY_INVITATION', |
| 93 ['<a href="http://goo.gl/njH2q" target="_blank">', '</a>'], |
| 94 remoting.ButterBar.kSurveyStorageKey_); |
| 95 } else if (showHangouts) { |
| 96 this.show_(/*i18n-content*/'HANGOUTS_INVITATION', |
| 97 ['<a id="hangouts-accept" ' + |
| 98 'href="https://plus.google.com/hangouts/_?gid=818572447316">', |
| 99 '</a>'], |
| 100 remoting.ButterBar.kHangoutsStorageKey_); |
| 101 } |
| 102 }; |
| 103 |
| 104 /** @const @private */ |
| 105 remoting.ButterBar.kId_ = 'butter-bar'; |
| 106 |
| 107 /** @const @private */ |
| 108 remoting.ButterBar.kMessageId_ = 'butter-bar-message'; |
| 109 /** @const @private */ |
| 110 remoting.ButterBar.kDismissId_ = 'butter-bar-dismiss'; |
| 111 |
| 112 /** @const @private */ |
| 113 remoting.ButterBar.kSurveyStorageKey_ = 'feedback-survey-dismissed'; |
| 114 /** @const @private */ |
| 115 remoting.ButterBar.kHangoutsStorageKey_ = 'hangouts-notice-dismissed'; |
| 116 |
| 117 /** |
| 118 * Hide the butter bar request and record some basic information about the |
| 119 * current state of the world in synced storage. This may be useful in the |
| 120 * future if we want to show the request again. At the moment, the data itself |
| 121 * is ignored; only its presence or absence is important. |
| 122 * |
| 123 * @param {boolean} accepted True if the user clicked the "accept" link; |
| 124 * false if they clicked the close icon. |
| 125 */ |
| 126 remoting.ButterBar.prototype.dismiss = function(accepted) { |
| 127 var value = {}; |
| 128 value[this.storageKey_] = { |
| 129 optIn: accepted, |
| 130 date: new Date(), |
| 131 version: chrome.runtime.getManifest().version |
| 132 }; |
| 133 chrome.storage.sync.set(value); |
| 134 |
| 135 document.getElementById(remoting.ButterBar.kId_).hidden = true; |
| 136 }; |
OLD | NEW |