Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4174)

Unified Diff: chrome/browser/resources/login/bubble.js

Issue 402403005: Move common account picker/user pod js/css/html out of src/chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge + move Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/login/bubble.css ('k') | chrome/browser/resources/login/display_manager.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/login/bubble.js
diff --git a/chrome/browser/resources/login/bubble.js b/chrome/browser/resources/login/bubble.js
deleted file mode 100644
index 92bf987d51df2430851db0e739994ac8614cacf5..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/login/bubble.js
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Bubble implementation.
- */
-
-// TODO(xiyuan): Move this into shared.
-cr.define('cr.ui', function() {
- /**
- * Creates a bubble div.
- * @constructor
- * @extends {HTMLDivElement}
- */
- var Bubble = cr.ui.define('div');
-
- /**
- * Bubble key codes.
- * @enum {number}
- */
- var KeyCodes = {
- TAB: 9,
- ENTER: 13,
- ESC: 27,
- SPACE: 32
- };
-
- /**
- * Bubble attachment side.
- * @enum {string}
- */
- Bubble.Attachment = {
- RIGHT: 'bubble-right',
- LEFT: 'bubble-left',
- TOP: 'bubble-top',
- BOTTOM: 'bubble-bottom'
- };
-
- Bubble.prototype = {
- __proto__: HTMLDivElement.prototype,
-
- // Anchor element for this bubble.
- anchor_: undefined,
-
- // If defined, sets focus to this element once bubble is closed. Focus is
- // set to this element only if there's no any other focused element.
- elementToFocusOnHide_: undefined,
-
- // With help of these elements we create closed artificial tab-cycle through
- // bubble elements.
- firstBubbleElement_: undefined,
- lastBubbleElement_: undefined,
-
- // Whether to hide bubble when key is pressed.
- hideOnKeyPress_: true,
-
- /** @override */
- decorate: function() {
- this.docKeyDownHandler_ = this.handleDocKeyDown_.bind(this);
- this.selfClickHandler_ = this.handleSelfClick_.bind(this);
- this.ownerDocument.addEventListener('click',
- this.handleDocClick_.bind(this));
- this.ownerDocument.addEventListener('keydown',
- this.docKeyDownHandler_);
- window.addEventListener('blur', this.handleWindowBlur_.bind(this));
- this.addEventListener('webkitTransitionEnd',
- this.handleTransitionEnd_.bind(this));
- // Guard timer for 200ms + epsilon.
- ensureTransitionEndEvent(this, 250);
- },
-
- /**
- * Element that should be focused on hide.
- * @type {HTMLElement}
- */
- set elementToFocusOnHide(value) {
- this.elementToFocusOnHide_ = value;
- },
-
- /**
- * Element that should be focused on shift-tab of first bubble element
- * to create artificial closed tab-cycle through bubble.
- * Usually close-button.
- * @type {HTMLElement}
- */
- set lastBubbleElement(value) {
- this.lastBubbleElement_ = value;
- },
-
- /**
- * Element that should be focused on tab of last bubble element
- * to create artificial closed tab-cycle through bubble.
- * Same element as first focused on bubble opening.
- * @type {HTMLElement}
- */
- set firstBubbleElement(value) {
- this.firstBubbleElement_ = value;
- },
-
- /**
- * Whether to hide bubble when key is pressed.
- * @type {boolean}
- */
- set hideOnKeyPress(value) {
- this.hideOnKeyPress_ = value;
- },
-
- /**
- * Whether to hide bubble when clicked inside bubble element.
- * Default is true.
- * @type {boolean}
- */
- set hideOnSelfClick(value) {
- if (value)
- this.removeEventListener('click', this.selfClickHandler_);
- else
- this.addEventListener('click', this.selfClickHandler_);
- },
-
- /**
- * Handler for click event which prevents bubble auto hide.
- * @private
- */
- handleSelfClick_: function(e) {
- // Allow clicking on [x] button.
- if (e.target && e.target.classList.contains('close-button'))
- return;
- e.stopPropagation();
- },
-
- /**
- * Sets the attachment of the bubble.
- * @param {!Attachment} attachment Bubble attachment.
- */
- setAttachment_: function(attachment) {
- for (var k in Bubble.Attachment) {
- var v = Bubble.Attachment[k];
- this.classList.toggle(v, v == attachment);
- }
- },
-
- /**
- * Shows the bubble for given anchor element.
- * @param {!Object} pos Bubble position (left, top, right, bottom in px).
- * @param {!Attachment} attachment Bubble attachment (on which side of the
- * specified position it should be displayed).
- * @param {HTMLElement} opt_content Content to show in bubble.
- * If not specified, bubble element content is shown.
- * @private
- */
- showContentAt_: function(pos, attachment, opt_content) {
- this.style.top = this.style.left = this.style.right = this.style.bottom =
- 'auto';
- for (var k in pos) {
- if (typeof pos[k] == 'number')
- this.style[k] = pos[k] + 'px';
- }
- if (opt_content !== undefined) {
- this.innerHTML = '';
- this.appendChild(opt_content);
- }
- this.setAttachment_(attachment);
- this.hidden = false;
- this.classList.remove('faded');
- },
-
- /**
- * Shows the bubble for given anchor element. Bubble content is not cleared.
- * @param {!HTMLElement} el Anchor element of the bubble.
- * @param {!Attachment} attachment Bubble attachment (on which side of the
- * element it should be displayed).
- * @param {number=} opt_offset Offset of the bubble.
- * @param {number=} opt_padding Optional padding of the bubble.
- */
- showForElement: function(el, attachment, opt_offset, opt_padding) {
- this.showContentForElement(
- el, attachment, undefined, opt_offset, opt_padding);
- },
-
- /**
- * Shows the bubble for given anchor element.
- * @param {!HTMLElement} el Anchor element of the bubble.
- * @param {!Attachment} attachment Bubble attachment (on which side of the
- * element it should be displayed).
- * @param {HTMLElement} opt_content Content to show in bubble.
- * If not specified, bubble element content is shown.
- * @param {number=} opt_offset Offset of the bubble attachment point from
- * left (for vertical attachment) or top (for horizontal attachment)
- * side of the element. If not specified, the bubble is positioned to
- * be aligned with the left/top side of the element but not farther than
- * half of its width/height.
- * @param {number=} opt_padding Optional padding of the bubble.
- */
- showContentForElement: function(el, attachment, opt_content,
- opt_offset, opt_padding) {
- /** @const */ var ARROW_OFFSET = 25;
- /** @const */ var DEFAULT_PADDING = 18;
-
- if (opt_padding == undefined)
- opt_padding = DEFAULT_PADDING;
-
- var origin = cr.ui.login.DisplayManager.getPosition(el);
- var offset = opt_offset == undefined ?
- [Math.min(ARROW_OFFSET, el.offsetWidth / 2),
- Math.min(ARROW_OFFSET, el.offsetHeight / 2)] :
- [opt_offset, opt_offset];
-
- var pos = {};
- if (isRTL()) {
- switch (attachment) {
- case Bubble.Attachment.TOP:
- pos.right = origin.right + offset[0] - ARROW_OFFSET;
- pos.bottom = origin.bottom + el.offsetHeight + opt_padding;
- break;
- case Bubble.Attachment.RIGHT:
- pos.top = origin.top + offset[1] - ARROW_OFFSET;
- pos.right = origin.right + el.offsetWidth + opt_padding;
- break;
- case Bubble.Attachment.BOTTOM:
- pos.right = origin.right + offset[0] - ARROW_OFFSET;
- pos.top = origin.top + el.offsetHeight + opt_padding;
- break;
- case Bubble.Attachment.LEFT:
- pos.top = origin.top + offset[1] - ARROW_OFFSET;
- pos.left = origin.left + el.offsetWidth + opt_padding;
- break;
- }
- } else {
- switch (attachment) {
- case Bubble.Attachment.TOP:
- pos.left = origin.left + offset[0] - ARROW_OFFSET;
- pos.bottom = origin.bottom + el.offsetHeight + opt_padding;
- break;
- case Bubble.Attachment.RIGHT:
- pos.top = origin.top + offset[1] - ARROW_OFFSET;
- pos.left = origin.left + el.offsetWidth + opt_padding;
- break;
- case Bubble.Attachment.BOTTOM:
- pos.left = origin.left + offset[0] - ARROW_OFFSET;
- pos.top = origin.top + el.offsetHeight + opt_padding;
- break;
- case Bubble.Attachment.LEFT:
- pos.top = origin.top + offset[1] - ARROW_OFFSET;
- pos.right = origin.right + el.offsetWidth + opt_padding;
- break;
- }
- }
-
- this.anchor_ = el;
- this.showContentAt_(pos, attachment, opt_content);
- },
-
- /**
- * Shows the bubble for given anchor element.
- * @param {!HTMLElement} el Anchor element of the bubble.
- * @param {string} text Text content to show in bubble.
- * @param {!Attachment} attachment Bubble attachment (on which side of the
- * element it should be displayed).
- * @param {number=} opt_offset Offset of the bubble attachment point from
- * left (for vertical attachment) or top (for horizontal attachment)
- * side of the element. If not specified, the bubble is positioned to
- * be aligned with the left/top side of the element but not farther than
- * half of its weight/height.
- * @param {number=} opt_padding Optional padding of the bubble.
- */
- showTextForElement: function(el, text, attachment,
- opt_offset, opt_padding) {
- var span = this.ownerDocument.createElement('span');
- span.textContent = text;
- this.showContentForElement(el, attachment, span, opt_offset, opt_padding);
- },
-
- /**
- * Hides the bubble.
- */
- hide: function() {
- if (!this.classList.contains('faded'))
- this.classList.add('faded');
- },
-
- /**
- * Hides the bubble anchored to the given element (if any).
- * @param {!Object} el Anchor element.
- */
- hideForElement: function(el) {
- if (!this.hidden && this.anchor_ == el)
- this.hide();
- },
-
- /**
- * Handler for faded transition end.
- * @private
- */
- handleTransitionEnd_: function(e) {
- if (this.classList.contains('faded')) {
- this.hidden = true;
- if (this.elementToFocusOnHide_)
- this.elementToFocusOnHide_.focus();
- }
- },
-
- /**
- * Handler of document click event.
- * @private
- */
- handleDocClick_: function(e) {
- // Ignore clicks on anchor element.
- if (e.target == this.anchor_)
- return;
-
- if (!this.hidden)
- this.hide();
- },
-
- /**
- * Handle of document keydown event.
- * @private
- */
- handleDocKeyDown_: function(e) {
- if (this.hidden)
- return;
-
- if (this.hideOnKeyPress_) {
- this.hide();
- return;
- }
- // Artificial tab-cycle.
- if (e.keyCode == KeyCodes.TAB && e.shiftKey == true &&
- e.target == this.firstBubbleElement_) {
- this.lastBubbleElement_.focus();
- e.preventDefault();
- }
- if (e.keyCode == KeyCodes.TAB && e.shiftKey == false &&
- e.target == this.lastBubbleElement_) {
- this.firstBubbleElement_.focus();
- e.preventDefault();
- }
- // Close bubble on ESC or on hitting spacebar or Enter at close-button.
- if (e.keyCode == KeyCodes.ESC ||
- ((e.keyCode == KeyCodes.ENTER || e.keyCode == KeyCodes.SPACE) &&
- e.target && e.target.classList.contains('close-button')))
- this.hide();
- },
-
- /**
- * Handler of window blur event.
- * @private
- */
- handleWindowBlur_: function(e) {
- if (!this.hidden)
- this.hide();
- }
- };
-
- return {
- Bubble: Bubble
- };
-});
« no previous file with comments | « chrome/browser/resources/login/bubble.css ('k') | chrome/browser/resources/login/display_manager.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698