diff options
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/dom/browserrange/abstractrange.js')
-rw-r--r-- | contexts/data/lib/closure-library/closure/goog/dom/browserrange/abstractrange.js | 316 |
1 files changed, 0 insertions, 316 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/dom/browserrange/abstractrange.js b/contexts/data/lib/closure-library/closure/goog/dom/browserrange/abstractrange.js deleted file mode 100644 index 8875b33..0000000 --- a/contexts/data/lib/closure-library/closure/goog/dom/browserrange/abstractrange.js +++ /dev/null @@ -1,316 +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 browser range interface. - * - * DO NOT USE THIS FILE DIRECTLY. Use goog.dom.Range instead. - * - * @author robbyw@google.com (Robby Walker) - * @author ojan@google.com (Ojan Vafai) - * @author jparent@google.com (Julie Parent) - */ - - -goog.provide('goog.dom.browserrange.AbstractRange'); - -goog.require('goog.dom'); -goog.require('goog.dom.NodeType'); -goog.require('goog.dom.RangeEndpoint'); -goog.require('goog.dom.TagName'); -goog.require('goog.dom.TextRangeIterator'); -goog.require('goog.iter'); -goog.require('goog.string'); -goog.require('goog.string.StringBuffer'); -goog.require('goog.userAgent'); - - - -/** - * The constructor for abstract ranges. Don't call this from subclasses. - * @constructor - */ -goog.dom.browserrange.AbstractRange = function() { -}; - - -/** - * @return {goog.dom.browserrange.AbstractRange} A clone of this range. - */ -goog.dom.browserrange.AbstractRange.prototype.clone = goog.abstractMethod; - - -/** - * Returns the browser native implementation of the range. Please refrain from - * using this function - if you find you need the range please add wrappers for - * the functionality you need rather than just using the native range. - * @return {Range|TextRange} The browser native range object. - */ -goog.dom.browserrange.AbstractRange.prototype.getBrowserRange = - goog.abstractMethod; - - -/** - * Returns the deepest node in the tree that contains the entire range. - * @return {Node} The deepest node that contains the entire range. - */ -goog.dom.browserrange.AbstractRange.prototype.getContainer = - goog.abstractMethod; - - -/** - * Returns the node the range starts in. - * @return {Node} The element or text node the range starts in. - */ -goog.dom.browserrange.AbstractRange.prototype.getStartNode = - goog.abstractMethod; - - -/** - * Returns the offset into the node the range starts in. - * @return {number} The offset into the node the range starts in. For text - * nodes, this is an offset into the node value. For elements, this is - * an offset into the childNodes array. - */ -goog.dom.browserrange.AbstractRange.prototype.getStartOffset = - goog.abstractMethod; - - -/** - * Returns the node the range ends in. - * @return {Node} The element or text node the range ends in. - */ -goog.dom.browserrange.AbstractRange.prototype.getEndNode = - goog.abstractMethod; - - -/** - * Returns the offset into the node the range ends in. - * @return {number} The offset into the node the range ends in. For text - * nodes, this is an offset into the node value. For elements, this is - * an offset into the childNodes array. - */ -goog.dom.browserrange.AbstractRange.prototype.getEndOffset = - goog.abstractMethod; - - -/** - * Compares one endpoint of this range with the endpoint of another browser - * native range object. - * @param {Range|TextRange} range The browser native range to compare against. - * @param {goog.dom.RangeEndpoint} thisEndpoint The endpoint of this range - * to compare with. - * @param {goog.dom.RangeEndpoint} otherEndpoint The endpoint of the other - * range to compare with. - * @return {number} 0 if the endpoints are equal, negative if this range - * endpoint comes before the other range endpoint, and positive otherwise. - */ -goog.dom.browserrange.AbstractRange.prototype.compareBrowserRangeEndpoints = - goog.abstractMethod; - - -/** - * Tests if this range contains the given range. - * @param {goog.dom.browserrange.AbstractRange} abstractRange The range to test. - * @param {boolean=} opt_allowPartial If not set or false, the range must be - * entirely contained in the selection for this function to return true. - * @return {boolean} Whether this range contains the given range. - */ -goog.dom.browserrange.AbstractRange.prototype.containsRange = - function(abstractRange, opt_allowPartial) { - // IE sometimes misreports the boundaries for collapsed ranges. So if the - // other range is collapsed, make sure the whole range is contained. This is - // logically equivalent, and works around IE's bug. - var checkPartial = opt_allowPartial && !abstractRange.isCollapsed(); - - var range = abstractRange.getBrowserRange(); - var start = goog.dom.RangeEndpoint.START, end = goog.dom.RangeEndpoint.END; - /** {@preserveTry} */ - try { - if (checkPartial) { - // There are two ways to not overlap. Being before, and being after. - // Before is represented by this.end before range.start: comparison < 0. - // After is represented by this.start after range.end: comparison > 0. - // The below is the negation of not overlapping. - return this.compareBrowserRangeEndpoints(range, end, start) >= 0 && - this.compareBrowserRangeEndpoints(range, start, end) <= 0; - - } else { - // Return true if this range bounds the parameter range from both sides. - return this.compareBrowserRangeEndpoints(range, end, end) >= 0 && - this.compareBrowserRangeEndpoints(range, start, start) <= 0; - } - } catch (e) { - if (!goog.userAgent.IE) { - throw e; - } - // IE sometimes throws exceptions when one range is invalid, i.e. points - // to a node that has been removed from the document. Return false in this - // case. - return false; - } -}; - - -/** - * Tests if this range contains the given node. - * @param {Node} node The node to test. - * @param {boolean=} opt_allowPartial If not set or false, the node must be - * entirely contained in the selection for this function to return true. - * @return {boolean} Whether this range contains the given node. - */ -goog.dom.browserrange.AbstractRange.prototype.containsNode = function(node, - opt_allowPartial) { - return this.containsRange( - goog.dom.browserrange.createRangeFromNodeContents(node), - opt_allowPartial); -}; - - -/** - * Tests if the selection is collapsed - i.e. is just a caret. - * @return {boolean} Whether the range is collapsed. - */ -goog.dom.browserrange.AbstractRange.prototype.isCollapsed = - goog.abstractMethod; - - -/** - * @return {string} The text content of the range. - */ -goog.dom.browserrange.AbstractRange.prototype.getText = - goog.abstractMethod; - - -/** - * Returns the HTML fragment this range selects. This is slow on all browsers. - * @return {string} HTML fragment of the range, does not include context - * containing elements. - */ -goog.dom.browserrange.AbstractRange.prototype.getHtmlFragment = function() { - var output = new goog.string.StringBuffer(); - goog.iter.forEach(this, function(node, ignore, it) { - if (node.nodeType == goog.dom.NodeType.TEXT) { - output.append(goog.string.htmlEscape(node.nodeValue.substring( - it.getStartTextOffset(), it.getEndTextOffset()))); - } else if (node.nodeType == goog.dom.NodeType.ELEMENT) { - if (it.isEndTag()) { - if (goog.dom.canHaveChildren(node)) { - output.append('</' + node.tagName + '>'); - } - } else { - var shallow = node.cloneNode(false); - var html = goog.dom.getOuterHtml(shallow); - if (goog.userAgent.IE && node.tagName == goog.dom.TagName.LI) { - // For an LI, IE just returns "<li>" with no closing tag - output.append(html); - } else { - var index = html.lastIndexOf('<'); - output.append(index ? html.substr(0, index) : html); - } - } - } - }, this); - - return output.toString(); -}; - - -/** - * Returns valid HTML for this range. This is fast on IE, and semi-fast on - * other browsers. - * @return {string} Valid HTML of the range, including context containing - * elements. - */ -goog.dom.browserrange.AbstractRange.prototype.getValidHtml = - goog.abstractMethod; - - -/** - * Returns a RangeIterator over the contents of the range. Regardless of the - * direction of the range, the iterator will move in document order. - * @param {boolean=} opt_keys Unused for this iterator. - * @return {goog.dom.RangeIterator} An iterator over tags in the range. - */ -goog.dom.browserrange.AbstractRange.prototype.__iterator__ = function( - opt_keys) { - return new goog.dom.TextRangeIterator(this.getStartNode(), - this.getStartOffset(), this.getEndNode(), this.getEndOffset()); -}; - - -// SELECTION MODIFICATION - - -/** - * Set this range as the selection in its window. - * @param {boolean=} opt_reverse Whether to select the range in reverse, - * if possible. - */ -goog.dom.browserrange.AbstractRange.prototype.select = - goog.abstractMethod; - - -/** - * Removes the contents of the range from the document. As a side effect, the - * selection will be collapsed. The behavior of content removal is normalized - * across browsers. For instance, IE sometimes creates extra text nodes that - * a W3C browser does not. That behavior is corrected for. - */ -goog.dom.browserrange.AbstractRange.prototype.removeContents = - goog.abstractMethod; - - -/** - * Surrounds the text range with the specified element (on Mozilla) or with a - * clone of the specified element (on IE). Returns a reference to the - * surrounding element if the operation was successful; returns null if the - * operation failed. - * @param {Element} element The element with which the selection is to be - * surrounded. - * @return {Element} The surrounding element (same as the argument on Mozilla, - * but not on IE), or null if unsuccessful. - */ -goog.dom.browserrange.AbstractRange.prototype.surroundContents = - goog.abstractMethod; - - -/** - * Inserts a node before (or after) the range. The range may be disrupted - * beyond recovery because of the way this splits nodes. - * @param {Node} node The node to insert. - * @param {boolean} before True to insert before, false to insert after. - * @return {Node} The node added to the document. This may be different - * than the node parameter because on IE we have to clone it. - */ -goog.dom.browserrange.AbstractRange.prototype.insertNode = - goog.abstractMethod; - - -/** - * Surrounds this range with the two given nodes. The range may be disrupted - * beyond recovery because of the way this splits nodes. - * @param {Element} startNode The node to insert at the start. - * @param {Element} endNode The node to insert at the end. - */ -goog.dom.browserrange.AbstractRange.prototype.surroundWithNodes = - goog.abstractMethod; - - -/** - * Collapses the range to one of its boundary points. - * @param {boolean} toStart Whether to collapse to the start of the range. - */ -goog.dom.browserrange.AbstractRange.prototype.collapse = - goog.abstractMethod; |