OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Bubble implementation. | 6 * @fileoverview Bubble implementation. |
7 */ | 7 */ |
8 | 8 |
9 // TODO(xiyuan): Move this into shared. | 9 // TODO(xiyuan): Move this into shared. |
10 cr.define('cr.ui', function() { | 10 cr.define('cr.ui', function() { |
(...skipping 10 matching lines...) Expand all Loading... |
21 */ | 21 */ |
22 var Keys = { | 22 var Keys = { |
23 TAB: 'Tab', | 23 TAB: 'Tab', |
24 ENTER: 'Enter', | 24 ENTER: 'Enter', |
25 ESC: 'Escape', | 25 ESC: 'Escape', |
26 SPACE: ' ' | 26 SPACE: ' ' |
27 }; | 27 }; |
28 | 28 |
29 /** | 29 /** |
30 * Bubble attachment side. | 30 * Bubble attachment side. |
31 * @enum {string} | 31 * @enum {number} |
32 */ | 32 */ |
33 Bubble.Attachment = { | 33 Bubble.Attachment = { |
34 RIGHT: 'bubble-right', | 34 RIGHT: 0, |
35 LEFT: 'bubble-left', | 35 LEFT: 1, |
36 TOP: 'bubble-top', | 36 TOP: 2, |
37 BOTTOM: 'bubble-bottom' | 37 BOTTOM: 3 |
38 }; | 38 }; |
39 | 39 |
40 Bubble.prototype = { | 40 Bubble.prototype = { |
41 __proto__: HTMLDivElement.prototype, | 41 __proto__: HTMLDivElement.prototype, |
42 | 42 |
43 // Anchor element for this bubble. | 43 // Anchor element for this bubble. |
44 anchor_: undefined, | 44 anchor_: undefined, |
45 | 45 |
46 // If defined, sets focus to this element once bubble is closed. Focus is | 46 // If defined, sets focus to this element once bubble is closed. Focus is |
47 // set to this element only if there's no any other focused element. | 47 // set to this element only if there's no any other focused element. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 * @private | 127 * @private |
128 */ | 128 */ |
129 handleSelfClick_: function(e) { | 129 handleSelfClick_: function(e) { |
130 // Allow clicking on [x] button. | 130 // Allow clicking on [x] button. |
131 if (e.target && e.target.classList.contains('close-button')) | 131 if (e.target && e.target.classList.contains('close-button')) |
132 return; | 132 return; |
133 e.stopPropagation(); | 133 e.stopPropagation(); |
134 }, | 134 }, |
135 | 135 |
136 /** | 136 /** |
137 * Sets the attachment of the bubble. | |
138 * @param {!Attachment} attachment Bubble attachment. | |
139 */ | |
140 setAttachment_: function(attachment) { | |
141 for (var k in Bubble.Attachment) { | |
142 var v = Bubble.Attachment[k]; | |
143 this.classList.toggle(v, v == attachment); | |
144 } | |
145 }, | |
146 | |
147 /** | |
148 * Shows the bubble for given anchor element. | 137 * Shows the bubble for given anchor element. |
149 * @param {!Object} pos Bubble position (left, top, right, bottom in px). | 138 * @param {!Object} pos Bubble position (left, top, right, bottom in px). |
150 * @param {!Attachment} attachment Bubble attachment (on which side of the | |
151 * specified position it should be displayed). | |
152 * @param {HTMLElement} opt_content Content to show in bubble. | 139 * @param {HTMLElement} opt_content Content to show in bubble. |
153 * If not specified, bubble element content is shown. | 140 * If not specified, bubble element content is shown. |
154 * @private | 141 * @private |
155 */ | 142 */ |
156 showContentAt_: function(pos, attachment, opt_content) { | 143 showContentAt_: function(pos, opt_content) { |
157 this.style.top = this.style.left = this.style.right = this.style.bottom = | 144 this.style.top = this.style.left = this.style.right = this.style.bottom = |
158 'auto'; | 145 'auto'; |
159 for (var k in pos) { | 146 for (var k in pos) { |
160 if (typeof pos[k] == 'number') | 147 if (typeof pos[k] == 'number') |
161 this.style[k] = pos[k] + 'px'; | 148 this.style[k] = pos[k] + 'px'; |
162 } | 149 } |
163 if (opt_content !== undefined) { | 150 if (opt_content !== undefined) { |
164 this.innerHTML = ''; | 151 this.innerHTML = ''; |
165 this.appendChild(opt_content); | 152 this.appendChild(opt_content); |
166 } | 153 } |
167 this.setAttachment_(attachment); | |
168 this.hidden = false; | 154 this.hidden = false; |
169 this.classList.remove('faded'); | 155 this.classList.remove('faded'); |
170 }, | 156 }, |
171 | 157 |
172 /** | 158 /** |
173 * Shows the bubble for given anchor element. Bubble content is not cleared. | 159 * Shows the bubble for given anchor element. Bubble content is not cleared. |
174 * @param {!HTMLElement} el Anchor element of the bubble. | 160 * @param {!HTMLElement} el Anchor element of the bubble. |
175 * @param {!Attachment} attachment Bubble attachment (on which side of the | 161 * @param {!Attachment} attachment Bubble attachment (on which side of the |
176 * element it should be displayed). | 162 * element it should be displayed). |
177 * @param {number=} opt_offset Offset of the bubble. | 163 * @param {number=} opt_offset Offset of the bubble. |
(...skipping 18 matching lines...) Expand all Loading... |
196 * half of its width/height. | 182 * half of its width/height. |
197 * @param {number=} opt_padding Optional padding of the bubble. | 183 * @param {number=} opt_padding Optional padding of the bubble. |
198 */ | 184 */ |
199 showContentForElement: function(el, attachment, opt_content, | 185 showContentForElement: function(el, attachment, opt_content, |
200 opt_offset, opt_padding) { | 186 opt_offset, opt_padding) { |
201 /** @const */ var ARROW_OFFSET = 25; | 187 /** @const */ var ARROW_OFFSET = 25; |
202 /** @const */ var DEFAULT_PADDING = 18; | 188 /** @const */ var DEFAULT_PADDING = 18; |
203 | 189 |
204 if (opt_padding == undefined) | 190 if (opt_padding == undefined) |
205 opt_padding = DEFAULT_PADDING; | 191 opt_padding = DEFAULT_PADDING; |
| 192 opt_padding += 10; |
206 | 193 |
207 var origin = cr.ui.login.DisplayManager.getPosition(el); | 194 var origin = cr.ui.login.DisplayManager.getPosition(el); |
208 var offset = opt_offset == undefined ? | 195 var offset = opt_offset == undefined ? |
209 [Math.min(ARROW_OFFSET, el.offsetWidth / 2), | 196 [Math.min(ARROW_OFFSET, el.offsetWidth / 2), |
210 Math.min(ARROW_OFFSET, el.offsetHeight / 2)] : | 197 Math.min(ARROW_OFFSET, el.offsetHeight / 2)] : |
211 [opt_offset, opt_offset]; | 198 [opt_offset, opt_offset]; |
212 | 199 |
213 var pos = {}; | 200 var pos = {}; |
214 if (isRTL()) { | 201 if (isRTL()) { |
215 switch (attachment) { | 202 switch (attachment) { |
(...skipping 29 matching lines...) Expand all Loading... |
245 pos.top = origin.top + el.offsetHeight + opt_padding; | 232 pos.top = origin.top + el.offsetHeight + opt_padding; |
246 break; | 233 break; |
247 case Bubble.Attachment.LEFT: | 234 case Bubble.Attachment.LEFT: |
248 pos.top = origin.top + offset[1] - ARROW_OFFSET; | 235 pos.top = origin.top + offset[1] - ARROW_OFFSET; |
249 pos.right = origin.right + el.offsetWidth + opt_padding; | 236 pos.right = origin.right + el.offsetWidth + opt_padding; |
250 break; | 237 break; |
251 } | 238 } |
252 } | 239 } |
253 | 240 |
254 this.anchor_ = el; | 241 this.anchor_ = el; |
255 this.showContentAt_(pos, attachment, opt_content); | 242 this.showContentAt_(pos, opt_content); |
256 }, | 243 }, |
257 | 244 |
258 /** | 245 /** |
259 * Shows the bubble for given anchor element. | 246 * Shows the bubble for given anchor element. |
260 * @param {!HTMLElement} el Anchor element of the bubble. | 247 * @param {!HTMLElement} el Anchor element of the bubble. |
261 * @param {string} text Text content to show in bubble. | 248 * @param {string} text Text content to show in bubble. |
262 * @param {!Attachment} attachment Bubble attachment (on which side of the | 249 * @param {!Attachment} attachment Bubble attachment (on which side of the |
263 * element it should be displayed). | 250 * element it should be displayed). |
264 * @param {number=} opt_offset Offset of the bubble attachment point from | 251 * @param {number=} opt_offset Offset of the bubble attachment point from |
265 * left (for vertical attachment) or top (for horizontal attachment) | 252 * left (for vertical attachment) or top (for horizontal attachment) |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 handleWindowBlur_: function(e) { | 352 handleWindowBlur_: function(e) { |
366 if (!this.hidden) | 353 if (!this.hidden) |
367 this.hide(); | 354 this.hide(); |
368 } | 355 } |
369 }; | 356 }; |
370 | 357 |
371 return { | 358 return { |
372 Bubble: Bubble | 359 Bubble: Bubble |
373 }; | 360 }; |
374 }); | 361 }); |
OLD | NEW |