123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- goog.provide('goog.editor.node');
- goog.require('goog.dom');
- goog.require('goog.dom.NodeType');
- goog.require('goog.dom.TagName');
- goog.require('goog.dom.iter.ChildIterator');
- goog.require('goog.dom.iter.SiblingIterator');
- goog.require('goog.iter');
- goog.require('goog.object');
- goog.require('goog.string');
- goog.require('goog.string.Unicode');
- goog.require('goog.userAgent');
- goog.editor.node.BLOCK_TAG_NAMES_ = goog.object.createSet(
- goog.dom.TagName.ADDRESS, goog.dom.TagName.ARTICLE, goog.dom.TagName.ASIDE,
- goog.dom.TagName.BLOCKQUOTE, goog.dom.TagName.BODY,
- goog.dom.TagName.CAPTION, goog.dom.TagName.CENTER, goog.dom.TagName.COL,
- goog.dom.TagName.COLGROUP, goog.dom.TagName.DETAILS, goog.dom.TagName.DIR,
- goog.dom.TagName.DIV, goog.dom.TagName.DL, goog.dom.TagName.DD,
- goog.dom.TagName.DT, goog.dom.TagName.FIELDSET, goog.dom.TagName.FIGCAPTION,
- goog.dom.TagName.FIGURE, goog.dom.TagName.FOOTER, goog.dom.TagName.FORM,
- goog.dom.TagName.H1, goog.dom.TagName.H2, goog.dom.TagName.H3,
- goog.dom.TagName.H4, goog.dom.TagName.H5, goog.dom.TagName.H6,
- goog.dom.TagName.HEADER, goog.dom.TagName.HGROUP, goog.dom.TagName.HR,
- goog.dom.TagName.ISINDEX, goog.dom.TagName.OL, goog.dom.TagName.LI,
- goog.dom.TagName.MAP, goog.dom.TagName.MENU, goog.dom.TagName.NAV,
- goog.dom.TagName.OPTGROUP, goog.dom.TagName.OPTION, goog.dom.TagName.P,
- goog.dom.TagName.PRE, goog.dom.TagName.SECTION, goog.dom.TagName.SUMMARY,
- goog.dom.TagName.TABLE, goog.dom.TagName.TBODY, goog.dom.TagName.TD,
- goog.dom.TagName.TFOOT, goog.dom.TagName.TH, goog.dom.TagName.THEAD,
- goog.dom.TagName.TR, goog.dom.TagName.UL);
- goog.editor.node.NON_EMPTY_TAGS_ = goog.object.createSet(
- goog.dom.TagName.IMG, goog.dom.TagName.IFRAME, goog.dom.TagName.EMBED);
- goog.editor.node.isStandardsMode = function(node) {
- return goog.dom.getDomHelper(node).isCss1CompatMode();
- };
- goog.editor.node.getRightMostLeaf = function(parent) {
- var temp;
- while (temp = goog.editor.node.getLastChild(parent)) {
- parent = temp;
- }
- return parent;
- };
- goog.editor.node.getLeftMostLeaf = function(parent) {
- var temp;
- while (temp = goog.editor.node.getFirstChild(parent)) {
- parent = temp;
- }
- return parent;
- };
- goog.editor.node.getFirstChild = function(parent) {
- return goog.editor.node.getChildHelper_(parent, false);
- };
- goog.editor.node.getLastChild = function(parent) {
- return goog.editor.node.getChildHelper_(parent, true);
- };
- goog.editor.node.getPreviousSibling = function(sibling) {
- return (
- goog.editor.node.getFirstValue_(
- goog.iter.filter(
- new goog.dom.iter.SiblingIterator(sibling, false, true),
- goog.editor.node.isImportant)));
- };
- goog.editor.node.getNextSibling = function(sibling) {
- return (
- goog.editor.node.getFirstValue_(
- goog.iter.filter(
- new goog.dom.iter.SiblingIterator(sibling),
- goog.editor.node.isImportant)));
- };
- goog.editor.node.getChildHelper_ = function(parent, isReversed) {
- return (!parent || parent.nodeType != goog.dom.NodeType.ELEMENT) ?
- null :
- (
- goog.editor.node.getFirstValue_(
- goog.iter.filter(
- new goog.dom.iter.ChildIterator(
- (parent), isReversed),
- goog.editor.node.isImportant)));
- };
- goog.editor.node.getFirstValue_ = function(iterator) {
- try {
- return iterator.next();
- } catch (e) {
- return null;
- }
- };
- goog.editor.node.isImportant = function(node) {
-
- return node.nodeType == goog.dom.NodeType.ELEMENT ||
- node.nodeType == goog.dom.NodeType.TEXT &&
- !goog.editor.node.isAllNonNbspWhiteSpace(node);
- };
- goog.editor.node.isAllNonNbspWhiteSpace = function(textNode) {
- return goog.string.isBreakingWhitespace(textNode.nodeValue);
- };
- goog.editor.node.isEmpty = function(node, opt_prohibitSingleNbsp) {
- var nodeData = goog.dom.getRawTextContent(node);
- if (node.getElementsByTagName) {
- node = (node);
- for (var tag in goog.editor.node.NON_EMPTY_TAGS_) {
- if (node.tagName == tag || node.getElementsByTagName(tag).length > 0) {
- return false;
- }
- }
- }
- return (!opt_prohibitSingleNbsp && nodeData == goog.string.Unicode.NBSP) ||
- goog.string.isBreakingWhitespace(nodeData);
- };
- goog.editor.node.getLength = function(node) {
- return node.length || node.childNodes.length;
- };
- goog.editor.node.findInChildren = function(parent, hasProperty) {
- for (var i = 0, len = parent.childNodes.length; i < len; i++) {
- if (hasProperty(parent.childNodes[i])) {
- return i;
- }
- }
- return null;
- };
- goog.editor.node.findHighestMatchingAncestor = function(node, hasProperty) {
- var parent = node.parentNode;
- var ancestor = null;
- while (parent && hasProperty(parent)) {
- ancestor = parent;
- parent = parent.parentNode;
- }
- return ancestor;
- };
- goog.editor.node.isBlockTag = function(node) {
- return !!goog.editor.node.BLOCK_TAG_NAMES_[
- (node).tagName];
- };
- goog.editor.node.skipEmptyTextNodes = function(node) {
- while (node && node.nodeType == goog.dom.NodeType.TEXT && !node.nodeValue) {
- node = node.nextSibling;
- }
- return node;
- };
- goog.editor.node.isEditableContainer = function(element) {
- return element.getAttribute && element.getAttribute('g_editable') == 'true';
- };
- goog.editor.node.isEditable = function(node) {
- return !!goog.dom.getAncestor(node, goog.editor.node.isEditableContainer);
- };
- goog.editor.node.findTopMostEditableAncestor = function(node, criteria) {
- var targetNode = null;
- while (node && !goog.editor.node.isEditableContainer(node)) {
- if (criteria(node)) {
- targetNode = node;
- }
- node = node.parentNode;
- }
- return targetNode;
- };
- goog.editor.node.splitDomTreeAt = function(
- currentNode, opt_secondHalf, opt_root) {
- var parent;
- while (currentNode != opt_root && (parent = currentNode.parentNode)) {
- opt_secondHalf = goog.editor.node.getSecondHalfOfNode_(
- parent, currentNode, opt_secondHalf);
- currentNode = parent;
- }
- return (opt_secondHalf);
- };
- goog.editor.node.getSecondHalfOfNode_ = function(node, startNode, firstChild) {
- var secondHalf = (node.cloneNode(false));
- while (startNode.nextSibling) {
- goog.dom.appendChild(secondHalf, startNode.nextSibling);
- }
- if (firstChild) {
- secondHalf.insertBefore(firstChild, secondHalf.firstChild);
- }
- return secondHalf;
- };
- goog.editor.node.transferChildren = function(newNode, oldNode) {
- goog.dom.append(newNode, oldNode.childNodes);
- };
- goog.editor.node.replaceInnerHtml = function(node, html) {
-
-
- if (goog.userAgent.IE) {
- goog.dom.removeChildren(node);
- }
- node.innerHTML = html;
- };
|