| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2011 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 Displays the Chrome Frame installation flow in a Closure |
| 7 * dialog component. |
| 8 */ |
| 9 |
| 10 goog.provide('google.cf.installer.DialogInteractionDelegate'); |
| 11 |
| 12 goog.require('goog.math.Size'); |
| 13 goog.require('goog.style'); |
| 14 goog.require('goog.ui.Dialog'); |
| 15 goog.require('goog.userAgent'); |
| 16 |
| 17 goog.require('google.cf.installer.InteractionDelegate'); |
| 18 |
| 19 /** |
| 20 * An implementation of google.cf.installer.InteractionDelegate that decorates |
| 21 * the installation flow using a goog.ui.Dialog . |
| 22 * @constructor |
| 23 * @implements {google.cf.installer.InteractionDelegate} |
| 24 */ |
| 25 google.cf.installer.DialogInteractionDelegate = function() { |
| 26 }; |
| 27 |
| 28 /** |
| 29 * Whether we have already injected the dialog styles into the page. |
| 30 * @type {boolean} |
| 31 * @private |
| 32 **/ |
| 33 google.cf.installer.DialogInteractionDelegate.injectedCss_ = false; |
| 34 |
| 35 /** |
| 36 * Injects the dialog styles into the page. |
| 37 * @private |
| 38 **/ |
| 39 google.cf.installer.DialogInteractionDelegate.injectCss_ = function() { |
| 40 if (google.cf.installer.DialogInteractionDelegate.injectedCss_) |
| 41 return; |
| 42 |
| 43 google.cf.installer.DialogInteractionDelegate.injectedCss_ = true; |
| 44 |
| 45 goog.style.installStyles( |
| 46 '.xdgcfinstall-dlg {' + |
| 47 'background: #c1d9ff;' + |
| 48 'border: 1px solid #3a5774;' + |
| 49 'color: #000;' + |
| 50 'padding: 4px;' + |
| 51 'position: absolute;' + |
| 52 '}' + |
| 53 |
| 54 '.xdgcfinstall-dlg-bg {' + |
| 55 'background: #666;' + |
| 56 'left: 0;' + |
| 57 'position: absolute;' + |
| 58 'top: 0;' + |
| 59 '}' + |
| 60 |
| 61 '.xdgcfinstall-dlg-title {' + |
| 62 'background: #e0edfe;' + |
| 63 'color: #000;' + |
| 64 'cursor: pointer;' + |
| 65 'font-size: 120%;' + |
| 66 'font-weight: bold;' + |
| 67 |
| 68 'padding: 0px;' + |
| 69 'height: 17px;' + |
| 70 'position: relative;' + |
| 71 '_zoom: 1; /* Ensures proper width in IE6 RTL. */' + |
| 72 '}' + |
| 73 |
| 74 '.xdgcfinstall-dlg-title-close {' + |
| 75 /* Client apps may override the URL at which they serve the sprite. */ |
| 76 'background: #e0edfe' + |
| 77 'url(//ssl.gstatic.com/editor/editortoolbar.png)' + |
| 78 'no-repeat -528px 0;' + |
| 79 'cursor: default;' + |
| 80 'font-size: 0%;' + |
| 81 'height: 15px;' + |
| 82 'position: absolute;' + |
| 83 'top: 1px;' + |
| 84 'right: 1px;' + |
| 85 'width: 15px;' + |
| 86 'padding: 0px 0px 0px 0px;' + |
| 87 'align: right;' + |
| 88 '}' + |
| 89 |
| 90 '.xdgcfinstall-dlg-content {' + |
| 91 'background-color: #fff;' + |
| 92 'padding: 0px;' + |
| 93 '}' |
| 94 ); |
| 95 }; |
| 96 |
| 97 /** |
| 98 * The active dialog. |
| 99 * @type {goog.ui.Dialog} |
| 100 * @private |
| 101 */ |
| 102 google.cf.installer.DialogInteractionDelegate.prototype.dialog_ = null; |
| 103 |
| 104 /** |
| 105 * @inheritDoc |
| 106 */ |
| 107 google.cf.installer.DialogInteractionDelegate.prototype.getIFrameContainer = |
| 108 function() { |
| 109 google.cf.installer.DialogInteractionDelegate.injectCss_(); |
| 110 |
| 111 this.dialog_ = new goog.ui.Dialog('xdgcfinstall-dlg', true); |
| 112 this.dialog_.setButtonSet(null); |
| 113 // TODO(user): The IFrame must be 'visible' or else calculation of its |
| 114 // contents' dimensions is incorrect on IE, yet the following line also |
| 115 // disables interaction with and dims the page contents. It would be best to |
| 116 // only do that when show() is called. Best way is probably to push the mask |
| 117 // elements offscreen. |
| 118 this.dialog_.setVisible(true); |
| 119 goog.style.setPosition(this.dialog_.getDialogElement(), -5000, -5000); |
| 120 return /** @type {!HTMLElement} */(this.dialog_.getContentElement()); |
| 121 }; |
| 122 |
| 123 /** |
| 124 * @inheritDoc |
| 125 */ |
| 126 google.cf.installer.DialogInteractionDelegate.prototype.customizeIFrame = |
| 127 function(iframe) { |
| 128 }; |
| 129 |
| 130 /** |
| 131 * @inheritDoc |
| 132 */ |
| 133 google.cf.installer.DialogInteractionDelegate.prototype.show = |
| 134 function() { |
| 135 if (goog.userAgent.IE) { |
| 136 // By default, in IE, the dialog does not respect the width of its contents. |
| 137 // So we set its dimensions here. We need to specifically add some space for |
| 138 // the title bar. |
| 139 var iframeSize = goog.style.getBorderBoxSize( |
| 140 this.dialog_.getContentElement().getElementsByTagName('iframe')[0]); |
| 141 var titleSize = goog.style.getBorderBoxSize(this.dialog_.getTitleElement()); |
| 142 goog.style.setContentBoxSize(this.dialog_.getDialogElement(), |
| 143 new goog.math.Size( |
| 144 iframeSize.width, |
| 145 iframeSize.height + titleSize.height)); |
| 146 } |
| 147 // Ask the dialog to re-center itself based on the new dimensions. |
| 148 this.dialog_.reposition(); |
| 149 }; |
| 150 |
| 151 |
| 152 /** |
| 153 * @inheritDoc |
| 154 */ |
| 155 google.cf.installer.DialogInteractionDelegate.prototype.reset = function() { |
| 156 if (this.dialog_) { |
| 157 this.dialog_.setVisible(false); |
| 158 this.dialog_.dispose(); |
| 159 this.dialog_ = null; |
| 160 } |
| 161 }; |
| OLD | NEW |