aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js337
1 files changed, 0 insertions, 337 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js b/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js
deleted file mode 100644
index 5d24c22..0000000
--- a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright 2008 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 An abstract superclass for TrogEdit dialog plugins. Each
- * Trogedit dialog has its own plugin.
- *
- * @author nicksantos@google.com (Nick Santos)
- * @author marcosalmeida@google.com (Marcos Almeida)
- */
-
-goog.provide('goog.editor.plugins.AbstractDialogPlugin');
-goog.provide('goog.editor.plugins.AbstractDialogPlugin.EventType');
-
-goog.require('goog.dom');
-goog.require('goog.dom.Range');
-goog.require('goog.editor.Field.EventType');
-goog.require('goog.editor.Plugin');
-goog.require('goog.editor.range');
-goog.require('goog.events');
-goog.require('goog.ui.editor.AbstractDialog.EventType');
-
-
-// *** Public interface ***************************************************** //
-
-
-
-/**
- * An abstract superclass for a Trogedit plugin that creates exactly one
- * dialog. By default dialogs are not reused -- each time execCommand is called,
- * a new instance of the dialog object is created (and the old one disposed of).
- * To enable reusing of the dialog object, subclasses should call
- * setReuseDialog() after calling the superclass constructor.
- * @param {string} command The command that this plugin handles.
- * @constructor
- * @extends {goog.editor.Plugin}
- */
-goog.editor.plugins.AbstractDialogPlugin = function(command) {
- goog.editor.Plugin.call(this);
- this.command_ = command;
-};
-goog.inherits(goog.editor.plugins.AbstractDialogPlugin, goog.editor.Plugin);
-
-
-/** @override */
-goog.editor.plugins.AbstractDialogPlugin.prototype.isSupportedCommand =
- function(command) {
- return command == this.command_;
-};
-
-
-/**
- * Handles execCommand. Dialog plugins don't make any changes when they open a
- * dialog, just when the dialog closes (because only modal dialogs are
- * supported). Hence this method does not dispatch the change events that the
- * superclass method does.
- * @param {string} command The command to execute.
- * @param {...*} var_args Any additional parameters needed to
- * execute the command.
- * @return {*} The result of the execCommand, if any.
- * @override
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.execCommand = function(
- command, var_args) {
- return this.execCommandInternal.apply(this, arguments);
-};
-
-
-// *** Events *************************************************************** //
-
-
-/**
- * Event type constants for events the dialog plugins fire.
- * @enum {string}
- */
-goog.editor.plugins.AbstractDialogPlugin.EventType = {
- // This event is fired when a dialog has been opened.
- OPENED: 'dialogOpened',
- // This event is fired when a dialog has been closed.
- CLOSED: 'dialogClosed'
-};
-
-
-// *** Protected interface ************************************************** //
-
-
-/**
- * Creates a new instance of this plugin's dialog. Must be overridden by
- * subclasses.
- * @param {!goog.dom.DomHelper} dialogDomHelper The dom helper to be used to
- * create the dialog.
- * @param {*=} opt_arg The dialog specific argument. Concrete subclasses should
- * declare a specific type.
- * @return {goog.ui.editor.AbstractDialog} The newly created dialog.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.createDialog =
- goog.abstractMethod;
-
-
-/**
- * Returns the current dialog that was created and opened by this plugin.
- * @return {goog.ui.editor.AbstractDialog} The current dialog that was created
- * and opened by this plugin.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.getDialog = function() {
- return this.dialog_;
-};
-
-
-/**
- * Sets whether this plugin should reuse the same instance of the dialog each
- * time execCommand is called or create a new one. This is intended for use by
- * subclasses only, hence protected.
- * @param {boolean} reuse Whether to reuse the dialog.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.setReuseDialog =
- function(reuse) {
- this.reuseDialog_ = reuse;
-};
-
-
-/**
- * Handles execCommand by opening the dialog. Dispatches
- * {@link goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED} after the
- * dialog is shown.
- * @param {string} command The command to execute.
- * @param {*=} opt_arg The dialog specific argument. Should be the same as
- * {@link createDialog}.
- * @return {*} Always returns true, indicating the dialog was shown.
- * @protected
- * @override
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.execCommandInternal =
- function(command, opt_arg) {
- // If this plugin should not reuse dialog instances, first dispose of the
- // previous dialog.
- if (!this.reuseDialog_) {
- this.disposeDialog_();
- }
- // If there is no dialog yet (or we aren't reusing the previous one), create
- // one.
- if (!this.dialog_) {
- this.dialog_ = this.createDialog(
- // TODO(user): Add Field.getAppDomHelper. (Note dom helper will
- // need to be updated if setAppWindow is called by clients.)
- goog.dom.getDomHelper(this.getFieldObject().getAppWindow()),
- opt_arg);
- }
-
- // Since we're opening a dialog, we need to clear the selection because the
- // focus will be going to the dialog, and if we leave an selection in the
- // editor while another selection is active in the dialog as the user is
- // typing, some browsers will screw up the original selection. But first we
- // save it so we can restore it when the dialog closes.
- // getRange may return null if there is no selection in the field.
- var tempRange = this.getFieldObject().getRange();
- // saveUsingDom() did not work as well as saveUsingNormalizedCarets(),
- // not sure why.
- this.savedRange_ = tempRange && goog.editor.range.saveUsingNormalizedCarets(
- tempRange);
- goog.dom.Range.clearSelection(
- this.getFieldObject().getEditableDomHelper().getWindow());
-
- // Listen for the dialog closing so we can clean up.
- goog.events.listenOnce(this.dialog_,
- goog.ui.editor.AbstractDialog.EventType.AFTER_HIDE,
- this.handleAfterHide,
- false,
- this);
-
- this.getFieldObject().setModalMode(true);
- this.dialog_.show();
- this.dispatchEvent(goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED);
-
- // Since the selection has left the document, dispatch a selection
- // change event.
- this.getFieldObject().dispatchSelectionChangeEvent();
-
- return true;
-};
-
-
-/**
- * Cleans up after the dialog has closed, including restoring the selection to
- * what it was before the dialog was opened. If a subclass modifies the editable
- * field's content such that the original selection is no longer valid (usually
- * the case when the user clicks OK, and sometimes also on Cancel), it is that
- * subclass' responsibility to place the selection in the desired place during
- * the OK or Cancel (or other) handler. In that case, this method will leave the
- * selection in place.
- * @param {goog.events.Event} e The AFTER_HIDE event object.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.handleAfterHide = function(
- e) {
- this.getFieldObject().setModalMode(false);
- this.restoreOriginalSelection();
-
- if (!this.reuseDialog_) {
- this.disposeDialog_();
- }
-
- this.dispatchEvent(goog.editor.plugins.AbstractDialogPlugin.EventType.CLOSED);
-
- // Since the selection has returned to the document, dispatch a selection
- // change event.
- this.getFieldObject().dispatchSelectionChangeEvent();
-
- // When the dialog closes due to pressing enter or escape, that happens on the
- // keydown event. But the browser will still fire a keyup event after that,
- // which is caught by the editable field and causes it to try to fire a
- // selection change event. To avoid that, we "debounce" the selection change
- // event, meaning the editable field will not fire that event if the keyup
- // that caused it immediately after this dialog was hidden ("immediately"
- // means a small number of milliseconds defined by the editable field).
- this.getFieldObject().debounceEvent(
- goog.editor.Field.EventType.SELECTIONCHANGE);
-};
-
-
-/**
- * Restores the selection in the editable field to what it was before the dialog
- * was opened. This is not guaranteed to work if the contents of the field
- * have changed.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.restoreOriginalSelection =
- function() {
- this.getFieldObject().focus();
- if (this.savedRange_) {
- this.savedRange_.restore();
- this.savedRange_ = null;
- }
-};
-
-
-/**
- * Cleans up the structure used to save the original selection before the dialog
- * was opened. Should be used by subclasses that don't restore the original
- * selection via restoreOriginalSelection.
- * @protected
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.disposeOriginalSelection =
- function() {
- if (this.savedRange_) {
- this.savedRange_.dispose();
- this.savedRange_ = null;
- }
-};
-
-
-/** @override */
-goog.editor.plugins.AbstractDialogPlugin.prototype.disposeInternal =
- function() {
- this.disposeDialog_();
- goog.base(this, 'disposeInternal');
-};
-
-
-// *** Private implementation *********************************************** //
-
-
-/**
- * The command that this plugin handles.
- * @type {string}
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.command_;
-
-
-/**
- * The current dialog that was created and opened by this plugin.
- * @type {goog.ui.editor.AbstractDialog}
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.dialog_;
-
-
-/**
- * Whether this plugin should reuse the same instance of the dialog each time
- * execCommand is called or create a new one.
- * @type {boolean}
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.reuseDialog_ = false;
-
-
-/**
- * Mutex to prevent recursive calls to disposeDialog_.
- * @type {boolean}
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.isDisposingDialog_ = false;
-
-
-/**
- * SavedRange representing the selection before the dialog was opened.
- * @type {goog.dom.SavedRange}
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.savedRange_;
-
-
-/**
- * Disposes of the dialog if needed. It is this abstract class' responsibility
- * to dispose of the dialog. The "if needed" refers to the fact this method
- * might be called twice (nested calls, not sequential) in the dispose flow, so
- * if the dialog was already disposed once it should not be disposed again.
- * @private
- */
-goog.editor.plugins.AbstractDialogPlugin.prototype.disposeDialog_ = function() {
- // Wrap disposing the dialog in a mutex. Otherwise disposing it would cause it
- // to get hidden (if it is still open) and fire AFTER_HIDE, which in
- // turn would cause the dialog to be disposed again (closure only flags an
- // object as disposed after the dispose call chain completes, so it doesn't
- // prevent recursive dispose calls).
- if (this.dialog_ && !this.isDisposingDialog_) {
- this.isDisposingDialog_ = true;
- this.dialog_.dispose();
- this.dialog_ = null;
- this.isDisposingDialog_ = false;
- }
-};