Chromium Code Reviews| 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 * Shows butter bar with the specified |message| and updates |storageKey| after | |
| 18 * the bar is dismissed. | |
| 19 * | |
| 20 * @param {string} message | |
| 21 * @param {string} storageKey | |
| 22 * @constructor | |
| 23 */ | |
| 24 remoting.ButterBar = function(message, storageKey) { | |
| 25 this.storageKey = storageKey; | |
| 26 | |
| 27 var messageElement = document.getElementById(remoting.ButterBar.kMessageId); | |
| 28 messageElement.innerHTML = message; | |
|
Jamie
2013/05/30 01:10:17
innerHTML makes me nervous :( The only other place
Sergey Ulanov
2013/05/30 22:04:54
The alternative is what I had before - have each m
Jamie
2013/05/31 00:12:42
I like this approach more--the HTML is simpler thi
Sergey Ulanov
2013/06/03 19:11:48
Done.
| |
| 29 var acceptLink = | |
| 30 /** @type{Element} */ messageElement.getElementsByTagName('a')[0]; | |
| 31 acceptLink.addEventListener( | |
| 32 'click', this.dismiss.bind(this, true), false); | |
| 33 | |
| 34 document.getElementById(remoting.ButterBar.kDismissId).addEventListener( | |
| 35 'click', this.dismiss.bind(this, false), false); | |
| 36 | |
| 37 document.getElementById(remoting.ButterBar.kId).hidden = false; | |
| 38 } | |
| 39 | |
| 40 /** @const */ | |
|
Jamie
2013/05/30 01:10:17
I think these can all be made private (in which ca
Sergey Ulanov
2013/05/30 22:04:54
Done.
| |
| 41 remoting.ButterBar.kId = 'butter-bar'; | |
| 42 | |
| 43 /** @const */ | |
| 44 remoting.ButterBar.kMessageId = 'butter-bar-message'; | |
| 45 /** @const */ | |
| 46 remoting.ButterBar.kDismissId = 'butter-bar-dismiss'; | |
| 47 | |
| 48 /** @const */ | |
| 49 remoting.kSurveyStorageKey = 'feedback-survey-dismissed'; | |
| 50 /** @const */ | |
| 51 remoting.kHangoutsStorageKey = 'hangouts-notice-dismissed'; | |
| 52 | |
| 53 /** | |
| 54 * Hide the butter bar request and record some basic information about the | |
| 55 * current state of the world in synced storage. This may be useful in the | |
| 56 * future if we want to show the request again. At the moment, the data itself | |
| 57 * is ignored; only its presence or absence is important. | |
| 58 * | |
| 59 * @param {boolean} accepted True if the user clicked the "accept" link; | |
| 60 * false if they clicked the close icon. | |
| 61 */ | |
| 62 remoting.ButterBar.prototype.dismiss = function(accepted) { | |
| 63 var value = {}; | |
| 64 value[this.storageKey] = { | |
| 65 accepted: accepted, | |
| 66 date: new Date(), | |
| 67 version: chrome.runtime.getManifest().version | |
| 68 }; | |
| 69 chrome.storage.sync.set(value); | |
| 70 | |
| 71 document.getElementById(remoting.ButterBar.kId).hidden = true; | |
| 72 }; | |
| 73 | |
| 74 /** | |
| 75 * Show the butter bar if there is a message to show. | |
| 76 */ | |
| 77 remoting.initButterBar = function() { | |
| 78 /** @param {Object} syncValues | |
| 79 * @param {Object} localValues */ | |
| 80 var onStateLoaded = function(syncValues, localValues) { | |
| 81 /** @type {boolean} */ | |
| 82 var surveyDismissed = !!syncValues[remoting.kSurveyStorageKey]; | |
| 83 /** @type {boolean} */ | |
| 84 var hangoutsDismissed = !!syncValues[remoting.kHangoutsStorageKey]; | |
| 85 /** @type {boolean} */ | |
| 86 var it2meExpanded = !!localValues[remoting.kIT2MeVisitedStorageKey]; | |
| 87 | |
| 88 var showSurvey = !surveyDismissed; | |
| 89 var showHangouts = it2meExpanded && !hangoutsDismissed; | |
| 90 | |
| 91 // If both messages can be shown choose only one randomly. | |
| 92 if (showSurvey && showHangouts) { | |
| 93 if (Math.random() > 0.5) { | |
| 94 showSurvey = false; | |
| 95 } else { | |
| 96 showHangouts = false; | |
| 97 } | |
| 98 } | |
| 99 | |
| 100 if (showSurvey) { | |
| 101 new remoting.ButterBar( | |
|
Jamie
2013/05/30 01:10:17
I'm always skeptical of a 'new' statement that doe
Sergey Ulanov
2013/05/30 22:04:54
Done.
| |
| 102 chrome.i18n.getMessage( | |
| 103 /*i18n-content*/'SURVEY_INVITATION', | |
| 104 ['<a href="http://goo.gl/njH2q" target="_blank">', '</a>']), | |
| 105 remoting.kSurveyStorageKey); | |
| 106 } else if (showHangouts) { | |
| 107 new remoting.ButterBar( | |
| 108 chrome.i18n.getMessage( | |
| 109 /*i18n-content*/'HANGOUTS_INVITATION', | |
| 110 ['<a id="hangouts-accept" ' + | |
| 111 'href="https://plus.google.com/hangouts/_?gid=818572447316">', | |
| 112 '</a>']), | |
| 113 remoting.kHangoutsStorageKey); | |
| 114 } | |
| 115 }; | |
| 116 | |
| 117 /** @param {Object} syncValues */ | |
| 118 var onSyncDataLoaded = function(syncValues) { | |
| 119 chrome.storage.local.get( | |
| 120 remoting.kIT2MeVisitedStorageKey, | |
| 121 onStateLoaded.bind(null, syncValues)); | |
| 122 }; | |
| 123 | |
| 124 chrome.storage.sync.get( | |
| 125 [remoting.kSurveyStorageKey, remoting.kHangoutsStorageKey], | |
| 126 onSyncDataLoaded); | |
| 127 } | |
| OLD | NEW |