aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/bubble.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/bubble.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/ui/bubble.js475
1 files changed, 0 insertions, 475 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/bubble.js b/contexts/data/lib/closure-library/closure/goog/ui/bubble.js
deleted file mode 100644
index 56baf2a..0000000
--- a/contexts/data/lib/closure-library/closure/goog/ui/bubble.js
+++ /dev/null
@@ -1,475 +0,0 @@
-// 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 Definition of the Bubble class.
- *
- *
- * @see ../demos/bubble.html
- *
- * TODO: support decoration and addChild
- */
-
-goog.provide('goog.ui.Bubble');
-
-goog.require('goog.Timer');
-goog.require('goog.dom');
-goog.require('goog.events');
-goog.require('goog.events.Event');
-goog.require('goog.events.EventType');
-goog.require('goog.math.Box');
-goog.require('goog.positioning');
-goog.require('goog.positioning.AbsolutePosition');
-goog.require('goog.positioning.AbstractPosition');
-goog.require('goog.positioning.AnchoredPosition');
-goog.require('goog.positioning.Corner');
-goog.require('goog.style');
-goog.require('goog.ui.Component');
-goog.require('goog.ui.Popup');
-goog.require('goog.ui.Popup.AnchoredPosition');
-
-
-
-/**
- * The Bubble provides a general purpose bubble implementation that can be
- * anchored to a particular element and displayed for a period of time.
- *
- * @param {string|Element} message HTML string or an element to display inside
- * the bubble.
- * @param {Object=} opt_config The configuration
- * for the bubble. If not specified, the default configuration will be
- * used. {@see goog.ui.Bubble.defaultConfig}.
- * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
- * @constructor
- * @extends {goog.ui.Component}
- */
-goog.ui.Bubble = function(message, opt_config, opt_domHelper) {
- goog.ui.Component.call(this, opt_domHelper);
-
- /**
- * The HTML string or element to display inside the bubble.
- *
- * @type {string|Element}
- * @private
- */
- this.message_ = message;
-
- /**
- * The Popup element used to position and display the bubble.
- *
- * @type {goog.ui.Popup}
- * @private
- */
- this.popup_ = new goog.ui.Popup();
-
- /**
- * Configuration map that contains bubble's UI elements.
- *
- * @type {Object}
- * @private
- */
- this.config_ = opt_config || goog.ui.Bubble.defaultConfig;
-
- /**
- * Id of the close button for this bubble.
- *
- * @type {string}
- * @private
- */
- this.closeButtonId_ = this.makeId('cb');
-
- /**
- * Id of the div for the embedded element.
- *
- * @type {string}
- * @private
- */
- this.messageId_ = this.makeId('mi');
-
-};
-goog.inherits(goog.ui.Bubble, goog.ui.Component);
-
-
-/**
- * In milliseconds, timeout after which the button auto-hides. Null means
- * infinite.
- * @type {?number}
- * @private
- */
-goog.ui.Bubble.prototype.timeout_ = null;
-
-
-/**
- * Key returned by the bubble timer.
- * @type {number}
- * @private
- */
-goog.ui.Bubble.prototype.timerId_ = 0;
-
-
-/**
- * Key returned by the listen function for the close button.
- * @type {?number}
- * @private
- */
-goog.ui.Bubble.prototype.listener_ = null;
-
-
-/**
- * Key returned by the listen function for the close button.
- * @type {Element}
- * @private
- */
-goog.ui.Bubble.prototype.anchor_ = null;
-
-
-/** @override */
-goog.ui.Bubble.prototype.createDom = function() {
- goog.ui.Bubble.superClass_.createDom.call(this);
-
- var element = this.getElement();
- element.style.position = 'absolute';
- element.style.visibility = 'hidden';
-
- this.popup_.setElement(element);
-};
-
-
-/**
- * Attaches the bubble to an anchor element. Computes the positioning and
- * orientation of the bubble.
- *
- * @param {Element} anchorElement The element to which we are attaching.
- */
-goog.ui.Bubble.prototype.attach = function(anchorElement) {
- this.setAnchoredPosition_(
- anchorElement, this.computePinnedCorner_(anchorElement));
-};
-
-
-/**
- * Sets the corner of the bubble to used in the positioning algorithm.
- *
- * @param {goog.positioning.Corner} corner The bubble corner used for
- * positioning constants.
- */
-goog.ui.Bubble.prototype.setPinnedCorner = function(corner) {
- this.popup_.setPinnedCorner(corner);
-};
-
-
-/**
- * Sets the position of the bubble. Pass null for corner in AnchoredPosition
- * for corner to be computed automatically.
- *
- * @param {goog.positioning.AbstractPosition} position The position of the
- * bubble.
- */
-goog.ui.Bubble.prototype.setPosition = function(position) {
- if (position instanceof goog.positioning.AbsolutePosition) {
- this.popup_.setPosition(position);
- } else if (position instanceof goog.positioning.AnchoredPosition) {
- this.setAnchoredPosition_(position.element, position.corner);
- } else {
- throw Error('Bubble only supports absolute and anchored positions!');
- }
-};
-
-
-/**
- * Sets the timeout after which bubble hides itself.
- *
- * @param {number} timeout Timeout of the bubble.
- */
-goog.ui.Bubble.prototype.setTimeout = function(timeout) {
- this.timeout_ = timeout;
-};
-
-
-/**
- * Sets whether the bubble should be automatically hidden whenever user clicks
- * outside the bubble element.
- *
- * @param {boolean} autoHide Whether to hide if user clicks outside the bubble.
- */
-goog.ui.Bubble.prototype.setAutoHide = function(autoHide) {
- this.popup_.setAutoHide(autoHide);
-};
-
-
-/**
- * Sets whether the bubble should be visible.
- *
- * @param {boolean} visible Desired visibility state.
- */
-goog.ui.Bubble.prototype.setVisible = function(visible) {
- if (visible && !this.popup_.isVisible()) {
- this.configureElement_();
- }
- this.popup_.setVisible(visible);
- if (!this.popup_.isVisible()) {
- this.unconfigureElement_();
- }
-};
-
-
-/**
- * @return {boolean} Whether the bubble is visible.
- */
-goog.ui.Bubble.prototype.isVisible = function() {
- return this.popup_.isVisible();
-};
-
-
-/** @override */
-goog.ui.Bubble.prototype.disposeInternal = function() {
- this.unconfigureElement_();
- this.popup_.dispose();
- this.popup_ = null;
- goog.ui.Bubble.superClass_.disposeInternal.call(this);
-};
-
-
-/**
- * Creates element's contents and configures all timers. This is called on
- * setVisible(true).
- * @private
- */
-goog.ui.Bubble.prototype.configureElement_ = function() {
- if (!this.isInDocument()) {
- throw Error('You must render the bubble before showing it!');
- }
-
- var element = this.getElement();
- var corner = this.popup_.getPinnedCorner();
- element.innerHTML = this.computeHtmlForCorner_(corner);
-
- if (typeof this.message_ == 'object') {
- var messageDiv = this.getDomHelper().getElement(this.messageId_);
- this.getDomHelper().appendChild(messageDiv, this.message_);
- }
- var closeButton = this.getDomHelper().getElement(this.closeButtonId_);
- this.listener_ = goog.events.listen(closeButton,
- goog.events.EventType.CLICK, this.hideBubble_, false, this);
-
- if (this.timeout_) {
- this.timerId_ = goog.Timer.callOnce(this.hideBubble_, this.timeout_, this);
- }
-};
-
-
-/**
- * Gets rid of the element's contents and all assoicated timers and listeners.
- * This is called on dispose as well as on setVisible(false).
- * @private
- */
-goog.ui.Bubble.prototype.unconfigureElement_ = function() {
- if (this.listener_) {
- goog.events.unlistenByKey(this.listener_);
- this.listener_ = null;
- }
- if (this.timerId_) {
- goog.Timer.clear(this.timerId_);
- this.timerId = null;
- }
-
- var element = this.getElement();
- if (element) {
- this.getDomHelper().removeChildren(element);
- element.innerHTML = '';
- }
-};
-
-
-/**
- * Computes bubble position based on anchored element.
- *
- * @param {Element} anchorElement The element to which we are attaching.
- * @param {goog.positioning.Corner} corner The bubble corner used for
- * positioning.
- * @private
- */
-goog.ui.Bubble.prototype.setAnchoredPosition_ = function(anchorElement,
- corner) {
- this.popup_.setPinnedCorner(corner);
- var margin = this.createMarginForCorner_(corner);
- this.popup_.setMargin(margin);
- var anchorCorner = goog.positioning.flipCorner(corner);
- this.popup_.setPosition(new goog.positioning.AnchoredPosition(
- anchorElement, anchorCorner));
-};
-
-
-/**
- * Hides the bubble. This is called asynchronously by timer of event processor
- * for the mouse click on the close button.
- * @private
- */
-goog.ui.Bubble.prototype.hideBubble_ = function() {
- this.setVisible(false);
-};
-
-
-/**
- * Returns an AnchoredPosition that will position the bubble optimally
- * given the position of the anchor element and the size of the viewport.
- *
- * @param {Element} anchorElement The element to which the bubble is attached.
- * @return {goog.ui.Popup.AnchoredPosition} The AnchoredPosition to give to
- * {@link #setPosition}.
- */
-goog.ui.Bubble.prototype.getComputedAnchoredPosition = function(anchorElement) {
- return new goog.ui.Popup.AnchoredPosition(
- anchorElement, this.computePinnedCorner_(anchorElement));
-};
-
-
-/**
- * Computes the pinned corner for the bubble.
- *
- * @param {Element} anchorElement The element to which the button is attached.
- * @return {goog.positioning.Corner} The pinned corner.
- * @private
- */
-goog.ui.Bubble.prototype.computePinnedCorner_ = function(anchorElement) {
- var doc = this.getDomHelper().getOwnerDocument(anchorElement);
- var viewportElement = goog.style.getClientViewportElement(doc);
- var viewportWidth = viewportElement.offsetWidth;
- var viewportHeight = viewportElement.offsetHeight;
- var anchorElementOffset = goog.style.getPageOffset(anchorElement);
- var anchorElementSize = goog.style.getSize(anchorElement);
- var anchorType = 0;
- // right margin or left?
- if (viewportWidth - anchorElementOffset.x - anchorElementSize.width >
- anchorElementOffset.x) {
- anchorType += 1;
- }
- // attaches to the top or to the bottom?
- if (viewportHeight - anchorElementOffset.y - anchorElementSize.height >
- anchorElementOffset.y) {
- anchorType += 2;
- }
- return goog.ui.Bubble.corners_[anchorType];
-};
-
-
-/**
- * Computes the right offset for a given bubble corner
- * and creates a margin element for it. This is done to have the
- * button anchor element on its frame rather than on the corner.
- *
- * @param {goog.positioning.Corner} corner The corner.
- * @return {goog.math.Box} the computed margin. Only left or right fields are
- * non-zero, but they may be negative.
- * @private
- */
-goog.ui.Bubble.prototype.createMarginForCorner_ = function(corner) {
- var margin = new goog.math.Box(0, 0, 0, 0);
- if (corner & goog.positioning.CornerBit.RIGHT) {
- margin.right -= this.config_.marginShift;
- } else {
- margin.left -= this.config_.marginShift;
- }
- return margin;
-};
-
-
-/**
- * Computes the HTML string for a given bubble orientation.
- *
- * @param {goog.positioning.Corner} corner The corner.
- * @return {string} The HTML string to place inside the bubble's popup.
- * @private
- */
-goog.ui.Bubble.prototype.computeHtmlForCorner_ = function(corner) {
- var bubbleTopClass;
- var bubbleBottomClass;
- switch (corner) {
- case goog.positioning.Corner.TOP_LEFT:
- bubbleTopClass = this.config_.cssBubbleTopLeftAnchor;
- bubbleBottomClass = this.config_.cssBubbleBottomNoAnchor;
- break;
- case goog.positioning.Corner.TOP_RIGHT:
- bubbleTopClass = this.config_.cssBubbleTopRightAnchor;
- bubbleBottomClass = this.config_.cssBubbleBottomNoAnchor;
- break;
- case goog.positioning.Corner.BOTTOM_LEFT:
- bubbleTopClass = this.config_.cssBubbleTopNoAnchor;
- bubbleBottomClass = this.config_.cssBubbleBottomLeftAnchor;
- break;
- case goog.positioning.Corner.BOTTOM_RIGHT:
- bubbleTopClass = this.config_.cssBubbleTopNoAnchor;
- bubbleBottomClass = this.config_.cssBubbleBottomRightAnchor;
- break;
- default:
- throw Error('This corner type is not supported by bubble!');
- }
- var message = null;
- if (typeof this.message_ == 'object') {
- message = '<div id="' + this.messageId_ + '">';
- } else {
- message = this.message_;
- }
- var html =
- '<table border=0 cellspacing=0 cellpadding=0 style="z-index:1"' +
- ' width=' + this.config_.bubbleWidth + '>' +
- '<tr><td colspan=4 class="' + bubbleTopClass + '">' +
- '<tr>' +
- '<td class="' + this.config_.cssBubbleLeft + '">' +
- '<td class="' + this.config_.cssBubbleFont + '"' +
- ' style="padding:0 4;background:white">' + message +
- '<td id="' + this.closeButtonId_ + '"' +
- ' class="' + this.config_.cssCloseButton + '"/>' +
- '<td class="' + this.config_.cssBubbleRight + '">' +
- '<tr>' +
- '<td colspan=4 class="' + bubbleBottomClass + '">' +
- '</table>';
- return html;
-};
-
-
-/**
- * A default configuration for the bubble.
- *
- * @type {Object}
- */
-goog.ui.Bubble.defaultConfig = {
- bubbleWidth: 147,
- marginShift: 60,
- cssBubbleFont: goog.getCssName('goog-bubble-font'),
- cssCloseButton: goog.getCssName('goog-bubble-close-button'),
- cssBubbleTopRightAnchor: goog.getCssName('goog-bubble-top-right-anchor'),
- cssBubbleTopLeftAnchor: goog.getCssName('goog-bubble-top-left-anchor'),
- cssBubbleTopNoAnchor: goog.getCssName('goog-bubble-top-no-anchor'),
- cssBubbleBottomRightAnchor:
- goog.getCssName('goog-bubble-bottom-right-anchor'),
- cssBubbleBottomLeftAnchor: goog.getCssName('goog-bubble-bottom-left-anchor'),
- cssBubbleBottomNoAnchor: goog.getCssName('goog-bubble-bottom-no-anchor'),
- cssBubbleLeft: goog.getCssName('goog-bubble-left'),
- cssBubbleRight: goog.getCssName('goog-bubble-right')
-};
-
-
-/**
- * An auxiliary array optimizing the corner computation.
- *
- * @type {Array.<goog.positioning.Corner>}
- * @private
- */
-goog.ui.Bubble.corners_ = [
- goog.positioning.Corner.BOTTOM_RIGHT,
- goog.positioning.Corner.BOTTOM_LEFT,
- goog.positioning.Corner.TOP_RIGHT,
- goog.positioning.Corner.TOP_LEFT
-];