Files
openlayers/float-no-zero/closure-library/closure/goog/ui/offlineinstalldialog.js
2014-03-07 10:55:12 +01:00

1090 lines
30 KiB
JavaScript

// Copyright 2007 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @fileoverview A dialog for presenting the offline (Gears) install flow. It
* show information on how to install Gears if Gears is not already installed,
* or will offer the option to enable the application for Gears support.
*
* @see ../demos/offline.html
*/
goog.provide('goog.ui.OfflineInstallDialog');
goog.provide('goog.ui.OfflineInstallDialog.ButtonKeyType');
goog.provide('goog.ui.OfflineInstallDialog.EnableScreen');
goog.provide('goog.ui.OfflineInstallDialog.InstallScreen');
goog.provide('goog.ui.OfflineInstallDialog.InstallingGearsScreen');
goog.provide('goog.ui.OfflineInstallDialog.ScreenType');
goog.provide('goog.ui.OfflineInstallDialog.UpgradeScreen');
goog.provide('goog.ui.OfflineInstallDialogScreen');
goog.require('goog.Disposable');
goog.require('goog.dom.classes');
goog.require('goog.gears');
goog.require('goog.string');
goog.require('goog.string.StringBuffer');
goog.require('goog.ui.Dialog');
goog.require('goog.window');
/**
* An offline install dialog.
* @param {string=} opt_class CSS class name for the dialog element, also used
* as a class name prefix for related elements; defaults to modal-dialog.
* @param {boolean=} opt_useIframeMask Work around windowed controls z-index
* issue by using an iframe instead of a div for bg element.
* @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
* @constructor
* @extends {goog.ui.Dialog}
*/
goog.ui.OfflineInstallDialog = function(
opt_class, opt_useIframeMask, opt_domHelper) {
goog.ui.Dialog.call(this, opt_class, opt_useIframeMask, opt_domHelper);
/**
* This is used to allow more screens to be added programatically. It is a
* map from screen type to a constructor that extends
* goog.ui.OfflineInstallDialogScreen.
* @type {Object}
* @private
*/
this.screenConstructors_ = {};
/**
* This is a map of constructed screens. It uses the constructors in the
* screenConstructors_ map.
* @type {Object}
* @private
*/
this.screens_ = {};
this.currentScreenType_ = goog.gears.hasFactory() ?
goog.ui.OfflineInstallDialog.ScreenType.ENABLE :
goog.ui.OfflineInstallDialog.ScreenType.INSTALL;
this.registerScreenType(goog.ui.OfflineInstallDialog.EnableScreen.TYPE,
goog.ui.OfflineInstallDialog.EnableScreen);
this.registerScreenType(goog.ui.OfflineInstallDialog.InstallScreen.TYPE,
goog.ui.OfflineInstallDialog.InstallScreen);
this.registerScreenType(goog.ui.OfflineInstallDialog.UpgradeScreen.TYPE,
goog.ui.OfflineInstallDialog.UpgradeScreen);
this.registerScreenType(
goog.ui.OfflineInstallDialog.InstallingGearsScreen.TYPE,
goog.ui.OfflineInstallDialog.InstallingGearsScreen);
};
goog.inherits(goog.ui.OfflineInstallDialog, goog.ui.Dialog);
/**
* Buttons keys of the dialog.
* @enum {string}
*/
goog.ui.OfflineInstallDialog.ButtonKeyType = {
INSTALL: 'io',
UPGRADE: 'u',
ENABLE: 'eo',
CANCEL: 'ca',
CLOSE: 'cl',
OK: 'ok'
};
/**
* The various types of screens the dialog can display.
* @enum {string}
*/
goog.ui.OfflineInstallDialog.ScreenType = {
INSTALL: 'i',
INSTALLING_GEARS: 'ig',
ENABLE: 'e',
UPGRADE: 'u'
};
/**
* Whether the dialog is dirty and requires an upate to its display.
* @type {boolean}
* @private
*/
goog.ui.OfflineInstallDialog.prototype.dirty_ = false;
/**
* The type of the current screen of the dialog.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.prototype.currentScreenType_;
/**
* The url of the application.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.prototype.appUrl_ = '';
/**
* The url of the page to download Gears from.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.prototype.gearsDownloadPageUrl_ = '';
/**
* Marks as dirty and calls update if needed.
* @private
*/
goog.ui.OfflineInstallDialog.prototype.invalidateAndUpdate_ = function() {
this.dirty_ = true;
if (this.getElement() && this.isVisible()) {
this.update();
}
};
/**
* Sets the URL of the appliction to show in the dialog.
* @param {string} url The application URL.
*/
goog.ui.OfflineInstallDialog.prototype.setAppUrl = function(url) {
this.appUrl_ = url;
this.invalidateAndUpdate_();
};
/**
* @return {string} The application URL.
*/
goog.ui.OfflineInstallDialog.prototype.getAppUrl = function() {
return this.appUrl_;
};
/**
* Sets the Gears download page URL.
* @param {string} url The Gears download page URL.
*/
goog.ui.OfflineInstallDialog.prototype.setGearsDownloadPageUrl = function(url) {
this.gearsDownloadPageUrl_ = url;
this.invalidateAndUpdate_();
};
/**
* @return {string} The Gears download page URL.
*/
goog.ui.OfflineInstallDialog.prototype.getGearsDownloadPageUrl = function() {
return this.gearsDownloadPageUrl_;
};
/**
* This allows you to provide a shorter and more user friendly URL to the Gears
* download page since the Gears download URL can get quite ugly with all its
* params.
* @return {string} The Gears download page friendly URL.
*/
goog.ui.OfflineInstallDialog.prototype.getGearsDownloadPageFriendlyUrl =
function() {
return this.gearsDownloadPageFriendlyUrl_ || this.gearsDownloadPageUrl_;
};
/**
* Sets the Gears download page friendly URL.
* @see #getGearsDownloadPageFriendlyUrl
* @param {string} url The Gears download page friendly URL.
*/
goog.ui.OfflineInstallDialog.prototype.setGearsDownloadPageFriendlyUrl =
function(url) {
this.gearsDownloadPageFriendlyUrl_ = url;
this.invalidateAndUpdate_();
};
/**
* Sets the screen type.
* @param {string} screenType The screen type.
*/
goog.ui.OfflineInstallDialog.prototype.setCurrentScreenType = function(
screenType) {
if (screenType != this.currentScreenType_) {
// If we have a current screen object then call deactivate on it
var currentScreen = this.getCurrentScreen();
if (currentScreen && this.isInDocument()) {
currentScreen.deactivate();
}
this.currentScreenType_ = screenType;
this.invalidateAndUpdate_();
}
};
/**
* @return {string} The screen type.
*/
goog.ui.OfflineInstallDialog.prototype.getCurrentScreenType = function() {
return this.currentScreenType_;
};
/**
* @return {goog.ui.OfflineInstallDialogScreen?} The current screen object.
*/
goog.ui.OfflineInstallDialog.prototype.getCurrentScreen = function() {
return this.getScreen(this.currentScreenType_);
};
/**
* Returns the screen object for a given registered type or null if no such type
* exists. This will create a screen object for a registered type as needed.
* @param {string} type The type of screen to get.
* @return {goog.ui.OfflineInstallDialogScreen?} The screen object.
*/
goog.ui.OfflineInstallDialog.prototype.getScreen = function(type) {
if (this.screens_[type]) {
return this.screens_[type];
}
// Construct lazily as needed
if (this.screenConstructors_[type]) {
return this.screens_[type] = new this.screenConstructors_[type](this);
}
return null;
};
/**
* Registers a screen constructor to be usable with the dialog.
* @param {string} type The type of this screen.
* @param {Function} constr A function that represents a constructor that
* extends goog.ui.OfflineInstallDialogScreen.
*/
goog.ui.OfflineInstallDialog.prototype.registerScreenType = function(type,
constr) {
this.screenConstructors_[type] = constr;
// Remove screen in case it already exists.
if (this.screens_[type]) {
var isCurrenScreenType = this.currentScreenType_ == type;
this.screens_[type].dispose();
delete this.screens_[type];
if (isCurrenScreenType) {
this.invalidateAndUpdate_();
}
}
};
/**
* Registers an instance of a screen to be usable with the dialog.
* @param {goog.ui.OfflineInstallDialogScreen} screen The screen to register.
*/
goog.ui.OfflineInstallDialog.prototype.registerScreen = function(screen) {
this.screens_[screen.getType()] = screen;
};
/** @override */
goog.ui.OfflineInstallDialog.prototype.setVisible = function(visible) {
if (this.isInDocument() && visible) {
if (this.dirty_) {
this.update();
}
}
goog.ui.OfflineInstallDialog.superClass_.setVisible.call(this, visible);
};
/** @override */
goog.ui.OfflineInstallDialog.prototype.createDom = function() {
goog.ui.OfflineInstallDialog.superClass_.createDom.call(this);
this.update();
};
/** @override */
goog.ui.OfflineInstallDialog.prototype.enterDocument = function() {
goog.ui.OfflineInstallDialog.superClass_.enterDocument.call(this);
this.getHandler().listen(
this, goog.ui.Dialog.EventType.SELECT, this.handleSelect_);
if (this.dirty_) {
this.update();
}
};
/**
* Updates the dialog. This will ensure the correct screen is shown.
*/
goog.ui.OfflineInstallDialog.prototype.update = function() {
if (this.getElement()) {
var screen = this.getCurrentScreen();
if (screen) {
screen.activate();
}
// Clear the dirty state.
this.dirty_ = false;
}
};
/**
* Handles the SELECT_EVENT for the current dialog. Forward the event to the
* correct screen object and let the screen decide where to go next.
* @param {goog.ui.Dialog.Event} e The event.
* @private
*/
goog.ui.OfflineInstallDialog.prototype.handleSelect_ = function(e) {
var screen = this.getCurrentScreen();
if (screen) {
screen.handleSelect(e);
}
};
/**
* Opens a new browser window with the Gears download page and changes
* the screen to the installing gears page.
*/
goog.ui.OfflineInstallDialog.prototype.goToGearsDownloadPage = function() {
goog.window.open(this.gearsDownloadPageUrl_);
};
/** @override */
goog.ui.OfflineInstallDialog.prototype.disposeInternal = function() {
goog.ui.OfflineInstallDialog.superClass_.disposeInternal.call(this);
delete this.screenConstructors_;
for (var type in this.screens_) {
this.screens_[type].dispose();
}
delete this.screens_;
};
/**
* Represents a screen on the dialog. You can create new screens and add them
* to the offline install dialog by calling registerScreenType and
* setCurrentScreenType.
* @param {goog.ui.OfflineInstallDialog} dialog The dialog this screen should
* work with.
* @param {string} type The screen type name.
* @constructor
* @extends {goog.Disposable}
*/
goog.ui.OfflineInstallDialogScreen = function(dialog, type) {
goog.Disposable.call(this);
/**
* @type {goog.ui.OfflineInstallDialog}
* @protected
* @suppress {underscore}
*/
this.dialog_ = dialog;
/**
* @type {string}
* @private
*/
this.type_ = type;
/**
* @type {goog.dom.DomHelper}
* @private
*/
this.dom_ = dialog.getDomHelper();
};
goog.inherits(goog.ui.OfflineInstallDialogScreen, goog.Disposable);
/**
* The HTML content to show on the screen.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialogScreen.prototype.content_ = '';
/**
* The title to show on the dialog.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialogScreen.prototype.title_ = '';
/**
* The button set to use with this screen.
* @type {goog.ui.Dialog.ButtonSet}
* @private
*/
goog.ui.OfflineInstallDialogScreen.prototype.buttonSet_;
/**
* @return {goog.ui.OfflineInstallDialog} The dialog the screen will be
* displayed in.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getDialog = function() {
return this.dialog_;
};
/**
* Returns the type of the screen. This is used to identify the screen type this
* reflects.
* @return {string} The type of the screen.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getType = function() {
return this.type_;
};
/**
* @return {goog.ui.Dialog.ButtonSet} The button set to use with this screen.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getButtonSet = function() {
return this.buttonSet_;
};
/**
* Sets the button set to use with this screen.
* @param {goog.ui.Dialog.ButtonSet} bs The button set to use.
*/
goog.ui.OfflineInstallDialogScreen.prototype.setButtonSet = function(bs) {
this.buttonSet_ = bs;
};
/**
* @return {string} The HTML content to used for this screen.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getContent = function() {
return this.content_;
};
/**
* Sets the HTML content to use for this screen.
* @param {string} html The HTML text to use as content for the screen.
*/
goog.ui.OfflineInstallDialogScreen.prototype.setContent = function(html) {
this.content_ = html;
};
/**
* @return {string} The text title to used for the dialog when this screen is
* shown.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getTitle = function() {
return this.title_ || this.dialog_.getTitle();
};
/**
* Sets the plain text title to use for this screen.
* @param {string} title The plain text to use as a title on the dialog.
*/
goog.ui.OfflineInstallDialogScreen.prototype.setTitle = function(title) {
this.title_ = title;
};
/**
* @return {string} A custom class name that should be added to the dialog when
* this screen is active.
*/
goog.ui.OfflineInstallDialogScreen.prototype.getCustomClassName = function() {
return this.customClassName_;
};
/**
* Sets the custom class name that should be added to the dialog when this
* screen is active.
* @param {string} customClassName The custom class name.
*/
goog.ui.OfflineInstallDialogScreen.prototype.setCustomClassName = function(
customClassName) {
this.customClassName_ = customClassName;
};
/**
* Called when the screen is shown. At this point the dialog is in the document.
*/
goog.ui.OfflineInstallDialogScreen.prototype.activate = function() {
var d = this.dialog_;
// Add custom class.
var customClassName = this.getCustomClassName();
if (customClassName) {
goog.dom.classes.add(d.getElement(), customClassName);
}
d.setTitle(this.getTitle());
d.setContent(this.getContent());
d.setButtonSet(this.getButtonSet());
};
/**
* Called when the screen is hidden. At this point the dialog is in the
* document.
*/
goog.ui.OfflineInstallDialogScreen.prototype.deactivate = function() {
// Remove custom class name
var customClassName = this.getCustomClassName();
if (customClassName) {
goog.dom.classes.remove(this.dialog_.getElement(), customClassName);
}
};
/**
* Called when the user clicks any of the buttons for this dialog screen.
* @param {goog.ui.Dialog.Event} e The dialog event.
*/
goog.ui.OfflineInstallDialogScreen.prototype.handleSelect = function(e) {
};
// Classes for some of the standard screens
/**
* This screen is shown to users that do have Gears installed but have
* not enabled the current application for offline access.
* @param {goog.ui.OfflineInstallDialog} dialog The dialog this is a screen
* for.
* @constructor
* @extends {goog.ui.OfflineInstallDialogScreen}
*/
goog.ui.OfflineInstallDialog.EnableScreen = function(dialog) {
goog.ui.OfflineInstallDialogScreen.call(this, dialog,
goog.ui.OfflineInstallDialog.EnableScreen.TYPE);
/**
* @desc Text of button that enables offline functionality for the app.
* @hidden
*/
var MSG_OFFLINE_DIALOG_ENABLE_GEARS = goog.getMsg('Enable offline access');
/**
* @type {string}
* @protected
* @suppress {underscore}
*/
this.enableMsg_ = MSG_OFFLINE_DIALOG_ENABLE_GEARS;
};
goog.inherits(goog.ui.OfflineInstallDialog.EnableScreen,
goog.ui.OfflineInstallDialogScreen);
/**
* The type of this screen.
* @type {string}
*/
goog.ui.OfflineInstallDialog.EnableScreen.TYPE =
goog.ui.OfflineInstallDialog.ScreenType.ENABLE;
/**
* Should enable button action be performed immediately when the user presses
* the enter key anywhere on the dialog. This should be set to false if there
* are other action handlers on the dialog that may stop propagation.
* @type {boolean}
* @protected
*/
goog.ui.OfflineInstallDialog.EnableScreen.prototype.enableOnEnter = true;
/**
* @return {goog.ui.Dialog.ButtonSet} The button set for the enable screen.
* @override
*/
goog.ui.OfflineInstallDialog.EnableScreen.prototype.getButtonSet = function() {
if (!this.buttonSet_) {
/**
* @desc Text of button that cancels setting up Offline.
* @hidden
*/
var MSG_OFFLINE_DIALOG_CANCEL = goog.getMsg('Cancel');
var buttonSet = this.buttonSet_ = new goog.ui.Dialog.ButtonSet(this.dom_);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.ENABLE,
this.enableMsg_, this.enableOnEnter, false);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.CANCEL,
MSG_OFFLINE_DIALOG_CANCEL, false, true);
}
return this.buttonSet_;
};
/**
* This screen is shown to users that do have Gears installed but have
* not enabled the current application for offline access.
* @param {goog.ui.OfflineInstallDialog} dialog The dialog this is a screen
* for.
* @param {string=} opt_type An optional type, for specifying a more specific
* type of dialog. Only for use by subclasses.
* @constructor
* @extends {goog.ui.OfflineInstallDialogScreen}
*/
goog.ui.OfflineInstallDialog.InstallScreen = function(dialog, opt_type) {
goog.ui.OfflineInstallDialogScreen.call(this, dialog,
opt_type || goog.ui.OfflineInstallDialog.InstallScreen.TYPE);
/**
* @desc The description of the the install step to perform in order to
* enable offline access.
* @hidden
*/
var MSG_OFFLINE_DIALOG_INSTALL_GEARS = goog.getMsg('Install Gears');
/**
* @type {string}
* @protected
* @suppress {underscore}
*/
this.installMsg_ = MSG_OFFLINE_DIALOG_INSTALL_GEARS;
/**
* @desc Text of button that opens the download page for Gears.
* @hidden
*/
var MSG_INSTALL_GEARS = goog.getMsg('Get Gears now');
/**
* @type {string}
* @protected
* @suppress {underscore}
*/
this.enableMsg_ = MSG_INSTALL_GEARS;
/**
* @desc Text of button that cancels setting up Offline.
* @hidden
*/
var MSG_OFFLINE_DIALOG_CANCEL_2 = goog.getMsg('Cancel');
/**
* @type {string}
* @private
*/
this.cancelMsg_ = MSG_OFFLINE_DIALOG_CANCEL_2;
};
goog.inherits(goog.ui.OfflineInstallDialog.InstallScreen,
goog.ui.OfflineInstallDialogScreen);
/**
* The type of this screen.
* @type {string}
*/
goog.ui.OfflineInstallDialog.InstallScreen.TYPE =
goog.ui.OfflineInstallDialog.ScreenType.INSTALL;
/**
* The text to show before the installation steps.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.installDescription_ = '';
/**
* The CSS className to use when showing the app url.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.appUrlClassName_ =
goog.getCssName('goog-offlinedialog-url');
/**
* The CSS className for the element that contains the install steps.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.stepsClassName_ =
goog.getCssName('goog-offlinedialog-steps');
/**
* The CSS className for each step element.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.stepClassName_ =
goog.getCssName('goog-offlinedialog-step');
/**
* The CSS className for the element that shows the step number.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.stepNumberClassName_ =
goog.getCssName('goog-offlinedialog-step-number');
/**
* The CSS className for the element that shows the step desccription.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.stepDescriptionClassName_ =
goog.getCssName('goog-offlinedialog-step-description');
/**
* Should install button action be performed immediately when the user presses
* the enter key anywhere on the dialog. This should be set to false if there
* are other action handlers on the dialog that may stop propagation.
* @type {boolean}
* @protected
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.isInstallButtonDefault =
true;
/**
* @return {goog.ui.Dialog.ButtonSet} The button set for the install screen.
* @override
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.getButtonSet = function() {
if (!this.buttonSet_) {
var buttonSet = this.buttonSet_ = new goog.ui.Dialog.ButtonSet(this.dom_);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.INSTALL,
this.enableMsg_, this.isInstallButtonDefault, false);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.CANCEL,
this.cancelMsg_, false, true);
}
return this.buttonSet_;
};
/**
* Sets the install description. This is the text before the installation steps.
* @param {string} description The install description.
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.setInstallDescription =
function(description) {
this.installDescription_ = description;
};
/** @override */
goog.ui.OfflineInstallDialog.InstallScreen.prototype.getContent = function() {
if (!this.content_) {
var sb = new goog.string.StringBuffer(this.installDescription_);
/**
* @desc Header for the section that states the steps for the user to
* perform in order to enable offline access.
* @hidden
*/
var MSG_OFFLINE_DIALOG_NEED_TO = goog.getMsg('You\'ll need to:');
sb.append('<div class="', this.stepsClassName_, '">',
MSG_OFFLINE_DIALOG_NEED_TO);
// Create and append the html for step #1.
sb.append(this.getStepHtml_(1, this.installMsg_));
// Create and append the html for step #2.
/**
* @desc One of the steps to perform in order to enable offline access.
* @hidden
*/
var MSG_OFFLINE_DIALOG_RESTART_BROWSER = goog.getMsg(
'Restart your browser');
sb.append(this.getStepHtml_(2, MSG_OFFLINE_DIALOG_RESTART_BROWSER));
// Create and append the html for step #3.
/**
* @desc One of the steps to perform in order to enable offline access.
* @hidden
*/
var MSG_OFFLINE_DIALOG_COME_BACK = goog.getMsg('Come back to {$appUrl}!', {
'appUrl': '<span class="' + this.appUrlClassName_ + '">' +
this.dialog_.getAppUrl() + '</span>'
});
sb.append(this.getStepHtml_(3, MSG_OFFLINE_DIALOG_COME_BACK));
// Close the enclosing element.
sb.append('</div>');
this.content_ = String(sb);
}
return this.content_;
};
/**
* Creats the html for a step.
* @param {number} stepNumber The number of the step.
* @param {string} description The description of the step.
* @private
* @return {string} The step HTML in string form.
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.getStepHtml_ = function(
stepNumber, description) {
return goog.string.buildString('<div class="', this.stepClassName_,
'"><span class="', this.stepNumberClassName_, '">', stepNumber,
'</span><span class="', this.stepDescriptionClassName_, '">',
description, '</span></div>');
};
/**
* Overrides to go to Gears page.
* @override
*/
goog.ui.OfflineInstallDialog.InstallScreen.prototype.handleSelect =
function(e) {
switch (e.key) {
case goog.ui.OfflineInstallDialog.ButtonKeyType.INSTALL:
case goog.ui.OfflineInstallDialog.ButtonKeyType.UPGRADE:
e.preventDefault();
this.dialog_.goToGearsDownloadPage();
this.dialog_.setCurrentScreenType(
goog.ui.OfflineInstallDialog.ScreenType.INSTALLING_GEARS);
break;
}
};
/**
* This screen is shown to users that needs to update their version of Gears
* before they can enabled the current application for offline access.
* @param {goog.ui.OfflineInstallDialog} dialog The dialog this is a screen
* for.
* @constructor
* @extends {goog.ui.OfflineInstallDialog.InstallScreen}
*/
goog.ui.OfflineInstallDialog.UpgradeScreen = function(dialog) {
goog.ui.OfflineInstallDialog.InstallScreen.call(this, dialog,
goog.ui.OfflineInstallDialog.UpgradeScreen.TYPE);
/**
* @desc The description of the the upgrade step to perform in order to enable
* offline access.
* @hidden
*/
var MSG_OFFLINE_DIALOG_INSTALL_NEW_GEARS = goog.getMsg(
'Install a new version of Gears');
/**
* Override to say upgrade instead of install.
* @type {string}
* @protected
* @suppress {underscore}
*/
this.installMsg_ = MSG_OFFLINE_DIALOG_INSTALL_NEW_GEARS;
/**
* @desc Text of button that opens the download page for Gears for an
* upgrade.
* @hidden
*/
var MSG_OFFLINE_DIALOG_UPGRADE_GEARS =
goog.getMsg('Upgrade Gears now');
/**
* Override the text on the button to show upgrade instead of install.
* @type {string}
* @protected
* @suppress {underscore}
*/
this.enableMsg_ = MSG_OFFLINE_DIALOG_UPGRADE_GEARS;
};
goog.inherits(goog.ui.OfflineInstallDialog.UpgradeScreen,
goog.ui.OfflineInstallDialog.InstallScreen);
/**
* The type of this screen.
* @type {string}
*/
goog.ui.OfflineInstallDialog.UpgradeScreen.TYPE =
goog.ui.OfflineInstallDialog.ScreenType.UPGRADE;
/**
* Should upgrade button action be performed immediately when the user presses
* the enter key anywhere on the dialog. This should be set to false if there
* are other action handlers on the dialog that may stop propagation.
* @type {boolean}
* @protected
*/
goog.ui.OfflineInstallDialog.UpgradeScreen.prototype.isUpgradeButtonDefault =
true;
/**
* @return {goog.ui.Dialog.ButtonSet} The button set for the upgrade screen.
* @override
*/
goog.ui.OfflineInstallDialog.UpgradeScreen.prototype.getButtonSet = function() {
if (!this.buttonSet_) {
/**
* @desc Text of button that cancels setting up Offline.
* @hidden
*/
var MSG_OFFLINE_DIALOG_CANCEL_3 = goog.getMsg('Cancel');
var buttonSet = this.buttonSet_ = new goog.ui.Dialog.ButtonSet(this.dom_);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.UPGRADE,
this.enableMsg_, this.isUpgradeButtonDefault, false);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.CANCEL,
MSG_OFFLINE_DIALOG_CANCEL_3, false, true);
}
return this.buttonSet_;
};
/**
* Sets the upgrade description. This is the text before the upgrade steps.
* @param {string} description The upgrade description.
*/
goog.ui.OfflineInstallDialog.UpgradeScreen.prototype.setUpgradeDescription =
function(description) {
this.setInstallDescription(description);
};
/**
* This screen is shown to users after the window to the Gears download page has
* been opened.
* @param {goog.ui.OfflineInstallDialog} dialog The dialog this is a screen
* for.
* @constructor
* @extends {goog.ui.OfflineInstallDialogScreen}
*/
goog.ui.OfflineInstallDialog.InstallingGearsScreen = function(dialog) {
goog.ui.OfflineInstallDialogScreen.call(this, dialog,
goog.ui.OfflineInstallDialog.InstallingGearsScreen.TYPE);
};
goog.inherits(goog.ui.OfflineInstallDialog.InstallingGearsScreen,
goog.ui.OfflineInstallDialogScreen);
/**
* The type of this screen.
* @type {string}
*/
goog.ui.OfflineInstallDialog.InstallingGearsScreen.TYPE =
goog.ui.OfflineInstallDialog.ScreenType.INSTALLING_GEARS;
/**
* The CSS className to use for bold text.
* @type {string}
* @private
*/
goog.ui.OfflineInstallDialog.InstallingGearsScreen.prototype.boldClassName_ =
goog.getCssName('goog-offlinedialog-bold');
/**
* Gets the button set for the dialog when the user is suposed to be installing
* Gears.
* @return {goog.ui.Dialog.ButtonSet} The button set.
* @override
*/
goog.ui.OfflineInstallDialog.InstallingGearsScreen.prototype.getButtonSet =
function() {
if (!this.buttonSet_) {
/**
* @desc Text of button that closes the dialog.
* @hidden
*/
var MSG_OFFLINE_DIALOG_CLOSE = goog.getMsg('Close');
var buttonSet = this.buttonSet_ =
new goog.ui.Dialog.ButtonSet(this.dom_);
buttonSet.set(goog.ui.OfflineInstallDialog.ButtonKeyType.CLOSE,
MSG_OFFLINE_DIALOG_CLOSE, false, true);
}
return this.buttonSet_;
};
/**
* Gets the content for the dialog when the user is suposed to be installing
* Gears.
* @return {string} The content of the dialog as html.
* @override
*/
goog.ui.OfflineInstallDialog.InstallingGearsScreen.prototype.getContent =
function() {
if (!this.content_) {
/**
* @desc Congratulate the user for trying to download Google gears,
* and give them a push in the right direction.
*/
var MSG_OFFLINE_DIALOG_GEARS_DOWNLOAD_OPEN = goog.getMsg(
'Great! The Gears download page has been opened in a new ' +
'window. If you accidentally closed it, you can {$aBegin}open the ' +
'Gears download page again{$aEnd}.',
{
'aBegin': '<a ' + 'target="_blank" href="' +
this.getDialog().getGearsDownloadPageUrl() + '">',
'aEnd': '</a>'
});
/**
* @desc Informs the user to come back to the the given site after
* installing Gears.
* @hidden
*/
var MSG_OFFLINE_DIALOG_GEARS_AFTER_INSTALL = goog.getMsg('After you\'ve ' +
'downloaded and installed Gears, {$beginTag}restart your ' +
'browser, and then come back to {$appUrl}!{$endTag}',
{
'beginTag': '<div class="' + this.boldClassName_ + '">',
'endTag': '</div>', 'appUrl': this.getDialog().getAppUrl()
});
// Set the content.
this.content_ = goog.string.buildString('<div>',
MSG_OFFLINE_DIALOG_GEARS_DOWNLOAD_OPEN, '</div><br/><div>',
MSG_OFFLINE_DIALOG_GEARS_AFTER_INSTALL, '</div>');
}
return this.content_;
};