aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js535
1 files changed, 0 insertions, 535 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js b/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js
deleted file mode 100644
index d02556d..0000000
--- a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js
+++ /dev/null
@@ -1,535 +0,0 @@
-// Copyright 2005 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 Base class for bubble plugins.
- */
-
-goog.provide('goog.editor.plugins.AbstractBubblePlugin');
-
-goog.require('goog.dom');
-goog.require('goog.dom.NodeType');
-goog.require('goog.dom.Range');
-goog.require('goog.dom.TagName');
-goog.require('goog.editor.Plugin');
-goog.require('goog.editor.style');
-goog.require('goog.events');
-goog.require('goog.events.EventHandler');
-goog.require('goog.events.EventType');
-goog.require('goog.functions');
-goog.require('goog.string.Unicode');
-goog.require('goog.ui.Component.EventType');
-goog.require('goog.ui.editor.Bubble');
-goog.require('goog.userAgent');
-
-
-
-/**
- * Base class for bubble plugins. This is used for to connect user behavior
- * in the editor to a goog.ui.editor.Bubble UI element that allows
- * the user to modify the properties of an element on their page (e.g. the alt
- * text of an image tag).
- *
- * Subclasses should override the abstract method getBubbleTargetFromSelection()
- * with code to determine if the current selection should activate the bubble
- * type. The other abstract method createBubbleContents() should be overriden
- * with code to create the inside markup of the bubble. The base class creates
- * the rest of the bubble.
- *
- * @constructor
- * @extends {goog.editor.Plugin}
- */
-goog.editor.plugins.AbstractBubblePlugin = function() {
- goog.base(this);
-
- /**
- * Place to register events the plugin listens to.
- * @type {goog.events.EventHandler}
- * @protected
- */
- this.eventRegister = new goog.events.EventHandler(this);
-};
-goog.inherits(goog.editor.plugins.AbstractBubblePlugin, goog.editor.Plugin);
-
-
-/**
- * The css class name of option link elements.
- * @type {string}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.OPTION_LINK_CLASSNAME_ =
- goog.getCssName('tr_option-link');
-
-
-/**
- * The css class name of link elements.
- * @type {string}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_ =
- goog.getCssName('tr_bubble_link');
-
-
-/**
- * The constant string used to separate option links.
- * @type {string}
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.DASH_NBSP_STRING =
- goog.string.Unicode.NBSP + '-' + goog.string.Unicode.NBSP;
-
-
-/**
- * Default factory function for creating a bubble UI component.
- * @param {!Element} parent The parent element for the bubble.
- * @param {number} zIndex The z index to draw the bubble at.
- * @return {!goog.ui.editor.Bubble} The new bubble component.
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.defaultBubbleFactory_ = function(
- parent, zIndex) {
- return new goog.ui.editor.Bubble(parent, zIndex);
-};
-
-
-/**
- * Factory function that creates a bubble UI component. It takes as parameters
- * the bubble parent element and the z index to draw the bubble at.
- * @type {function(!Element, number): !goog.ui.editor.Bubble}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_ =
- goog.editor.plugins.AbstractBubblePlugin.defaultBubbleFactory_;
-
-
-/**
- * Sets the bubble factory function.
- * @param {function(!Element, number): !goog.ui.editor.Bubble}
- * bubbleFactory Function that creates a bubble for the given bubble parent
- * element and z index.
- */
-goog.editor.plugins.AbstractBubblePlugin.setBubbleFactory = function(
- bubbleFactory) {
- goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_ = bubbleFactory;
-};
-
-
-/**
- * Map from field id to shared bubble object.
- * @type {Object.<goog.ui.editor.Bubble>}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.bubbleMap_ = {};
-
-
-/**
- * The optional parent of the bubble. If null or not set, we will use the
- * application document. This is useful when you have an editor embedded in
- * a scrolling DIV.
- * @type {Element|undefined}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.bubbleParent_;
-
-
-/**
- * The id of the panel this plugin added to the shared bubble. Null when
- * this plugin doesn't currently have a panel in a bubble.
- * @type {string?}
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.panelId_ = null;
-
-
-/**
- * Sets the bubble parent.
- * @param {Element} bubbleParent An element where the bubble will be
- * anchored. If null, we will use the application document. This
- * is useful when you have an editor embedded in a scrolling div.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.setBubbleParent = function(
- bubbleParent) {
- this.bubbleParent_ = bubbleParent;
-};
-
-
-/**
- * @return {goog.dom.DomHelper} The dom helper for the bubble window.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleDom = function() {
- return this.dom_;
-};
-
-
-/** @override */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getTrogClassId =
- goog.functions.constant('AbstractBubblePlugin');
-
-
-/**
- * Returns the element whose properties the bubble manipulates.
- * @return {Element} The target element.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getTargetElement =
- function() {
- return this.targetElement_;
-};
-
-
-/** @override */
-goog.editor.plugins.AbstractBubblePlugin.prototype.handleKeyUp = function(e) {
- // For example, when an image is selected, pressing any key overwrites
- // the image and the panel should be hidden.
- // Therefore we need to track key presses when the bubble is showing.
- if (this.isVisible()) {
- this.handleSelectionChange();
- }
- return false;
-};
-
-
-/**
- * Pops up a property bubble for the given selection if appropriate and closes
- * open property bubbles if no longer needed. This should not be overridden.
- * @override
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.handleSelectionChange =
- function(opt_e, opt_target) {
- var selectedElement;
- if (opt_e) {
- selectedElement = /** @type {Element} */ (opt_e.target);
- } else if (opt_target) {
- selectedElement = /** @type {Element} */ (opt_target);
- } else {
- var range = this.getFieldObject().getRange();
- if (range) {
- var startNode = range.getStartNode();
- var endNode = range.getEndNode();
- var startOffset = range.getStartOffset();
- var endOffset = range.getEndOffset();
- // Sometimes in IE, the range will be collapsed, but think the end node
- // and start node are different (although in the same visible position).
- // In this case, favor the position IE thinks is the start node.
- if (goog.userAgent.IE && range.isCollapsed() && startNode != endNode) {
- range = goog.dom.Range.createCaret(startNode, startOffset);
- }
- if (startNode.nodeType == goog.dom.NodeType.ELEMENT &&
- startNode == endNode && startOffset == endOffset - 1) {
- var element = startNode.childNodes[startOffset];
- if (element.nodeType == goog.dom.NodeType.ELEMENT) {
- selectedElement = element;
- }
- }
- }
- selectedElement = selectedElement || range && range.getContainerElement();
- }
- return this.handleSelectionChangeInternal(selectedElement);
-};
-
-
-/**
- * Pops up a property bubble for the given selection if appropriate and closes
- * open property bubbles if no longer needed.
- * @param {Element?} selectedElement The selected element.
- * @return {boolean} Always false, allowing every bubble plugin to handle the
- * event.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.
- handleSelectionChangeInternal = function(selectedElement) {
- if (selectedElement) {
- var bubbleTarget = this.getBubbleTargetFromSelection(selectedElement);
- if (bubbleTarget) {
- if (bubbleTarget != this.targetElement_ || !this.panelId_) {
- // Make sure any existing panel of the same type is closed before
- // creating a new one.
- if (this.panelId_) {
- this.closeBubble();
- }
- this.createBubble(bubbleTarget);
- }
- return false;
- }
- }
-
- if (this.panelId_) {
- this.closeBubble();
- }
-
- return false;
-};
-
-
-/**
- * Should be overriden by subclasses to return the bubble target element or
- * null if an element of their required type isn't found.
- * @param {Element} selectedElement The target of the selection change event or
- * the parent container of the current entire selection.
- * @return {Element?} The HTML bubble target element or null if no element of
- * the required type is not found.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.
- getBubbleTargetFromSelection = goog.abstractMethod;
-
-
-/** @override */
-goog.editor.plugins.AbstractBubblePlugin.prototype.disable = function(field) {
- // When the field is made uneditable, dispose of the bubble. We do this
- // because the next time the field is made editable again it may be in
- // a different document / iframe.
- if (field.isUneditable()) {
- var bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[field.id];
- if (bubble) {
- bubble.dispose();
- delete goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[field.id];
- }
- }
-};
-
-
-/**
- * @return {goog.ui.editor.Bubble} The shared bubble object for the field this
- * plugin is registered on. Creates it if necessary.
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getSharedBubble_ =
- function() {
- var bubbleParent = /** @type {!Element} */ (this.bubbleParent_ ||
- this.getFieldObject().getAppWindow().document.body);
- this.dom_ = goog.dom.getDomHelper(bubbleParent);
-
- var bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[
- this.getFieldObject().id];
- if (!bubble) {
- bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_.call(null,
- bubbleParent,
- this.getFieldObject().getBaseZindex());
- goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[
- this.getFieldObject().id] = bubble;
- }
- return bubble;
-};
-
-
-/**
- * Creates and shows the property bubble.
- * @param {Element} targetElement The target element of the bubble.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.createBubble = function(
- targetElement) {
- var bubble = this.getSharedBubble_();
- if (!bubble.hasPanelOfType(this.getBubbleType())) {
- this.targetElement_ = targetElement;
-
- this.panelId_ = bubble.addPanel(this.getBubbleType(), this.getBubbleTitle(),
- targetElement,
- goog.bind(this.createBubbleContents, this),
- this.shouldPreferBubbleAboveElement());
- this.eventRegister.listen(bubble, goog.ui.Component.EventType.HIDE,
- this.handlePanelClosed_);
- this.onShow();
- }
-};
-
-
-/**
- * @return {string} The type of bubble shown by this plugin. Usually the tag
- * name of the element this bubble targets.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleType = function() {
- return '';
-};
-
-
-/**
- * @return {string} The title for bubble shown by this plugin. Defaults to no
- * title. Should be overridden by subclasses.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleTitle = function() {
- return '';
-};
-
-
-/**
- * @return {boolean} Whether the bubble should prefer placement above the
- * target element.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.
- shouldPreferBubbleAboveElement = goog.functions.FALSE;
-
-
-/**
- * Should be overriden by subclasses to add the type specific contents to the
- * bubble.
- * @param {Element} bubbleContainer The container element of the bubble to
- * which the contents should be added.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.createBubbleContents =
- goog.abstractMethod;
-
-
-/**
- * Register the handler for the target's CLICK event.
- * @param {Element} target The event source element.
- * @param {Function} handler The event handler.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.registerClickHandler =
- function(target, handler) {
- this.eventRegister.listen(target, goog.events.EventType.CLICK, handler);
-};
-
-
-/**
- * Closes the bubble.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.closeBubble = function() {
- if (this.panelId_) {
- this.getSharedBubble_().removePanel(this.panelId_);
- this.handlePanelClosed_();
- }
-};
-
-
-/**
- * Called after the bubble is shown. The default implementation does nothing.
- * Override it to provide your own one.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.onShow = goog.nullFunction;
-
-
-/**
- * Handles when the bubble panel is closed. Invoked when the entire bubble is
- * hidden and also directly when the panel is closed manually.
- * @private
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.handlePanelClosed_ =
- function() {
- this.targetElement_ = null;
- this.panelId_ = null;
- this.eventRegister.removeAll();
-};
-
-
-/**
- * @return {boolean} Whether the bubble is visible.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.isVisible = function() {
- return !!this.panelId_;
-};
-
-
-/**
- * Reposition the property bubble.
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.reposition = function() {
- var bubble = this.getSharedBubble_();
- if (bubble) {
- bubble.reposition();
- }
-};
-
-
-/**
- * Helper method that creates option links (such as edit, test, remove)
- * @param {string} id String id for the span id.
- * @return {Element} The option link element.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.createLinkOption = function(
- id) {
- // Dash plus link are together in a span so we can hide/show them easily
- return this.dom_.createDom(goog.dom.TagName.SPAN,
- {
- id: id,
- className:
- goog.editor.plugins.AbstractBubblePlugin.OPTION_LINK_CLASSNAME_
- },
- this.dom_.createTextNode(
- goog.editor.plugins.AbstractBubblePlugin.DASH_NBSP_STRING));
-};
-
-
-/**
- * Helper method that creates a link with text set to linkText and optionaly
- * wires up a listener for the CLICK event or the link.
- * @param {string} linkId The id of the link.
- * @param {string} linkText Text of the link.
- * @param {Function=} opt_onClick Optional function to call when the link is
- * clicked.
- * @param {Element=} opt_container If specified, location to insert link. If no
- * container is specified, the old link is removed and replaced.
- * @return {Element} The link element.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.createLink = function(
- linkId, linkText, opt_onClick, opt_container) {
- var link = this.createLinkHelper(linkId, linkText, false, opt_container);
- if (opt_onClick) {
- this.registerClickHandler(link, opt_onClick);
- }
- return link;
-};
-
-
-/**
- * Helper method to create a link to insert into the bubble.
- * @param {string} linkId The id of the link.
- * @param {string} linkText Text of the link.
- * @param {boolean} isAnchor Set to true to create an actual anchor tag
- * instead of a span. Actual links are right clickable (e.g. to open in
- * a new window) and also update window status on hover.
- * @param {Element=} opt_container If specified, location to insert link. If no
- * container is specified, the old link is removed and replaced.
- * @return {Element} The link element.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.createLinkHelper = function(
- linkId, linkText, isAnchor, opt_container) {
- var link = this.dom_.createDom(
- isAnchor ? goog.dom.TagName.A : goog.dom.TagName.SPAN,
- {className: goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_},
- linkText);
- this.setupLink(link, linkId, opt_container);
- goog.editor.style.makeUnselectable(link, this.eventRegister);
- return link;
-};
-
-
-/**
- * Inserts a link in the given container if it is specified or removes
- * the old link with this id and replaces it with the new link
- * @param {Element} link Html element to insert.
- * @param {string} linkId Id of the link.
- * @param {Element=} opt_container If specified, location to insert link.
- * @protected
- */
-goog.editor.plugins.AbstractBubblePlugin.prototype.setupLink = function(
- link, linkId, opt_container) {
- if (opt_container) {
- opt_container.appendChild(link);
- } else {
- var oldLink = this.dom_.getElement(linkId);
- if (oldLink) {
- goog.dom.replaceNode(link, oldLink);
- }
- }
-
- link.id = linkId;
-};