source: sandbox/2.3-MailArchiver/filemanager/tp/ckeditor/_source/core/dom/elementpath.js @ 6779

Revision 6779, 2.7 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado Expresso(branch 2.3) integrado ao MailArchiver?.

Line 
1/*
2Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.html or http://ckeditor.com/license
4*/
5
6(function()
7{
8        // Elements that may be considered the "Block boundary" in an element path.
9        var pathBlockElements = { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 };
10
11        // Elements that may be considered the "Block limit" in an element path.
12        var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1 };
13
14        // Check if an element contains any block element.
15        var checkHasBlock = function( element )
16        {
17                var childNodes = element.getChildren();
18
19                for ( var i = 0, count = childNodes.count() ; i < count ; i++ )
20                {
21                        var child = childNodes.getItem( i );
22
23                        if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )
24                                return true;
25                }
26
27                return false;
28        };
29
30        CKEDITOR.dom.elementPath = function( lastNode )
31        {
32                var block = null;
33                var blockLimit = null;
34                var elements = [];
35
36                var e = lastNode;
37
38                while ( e )
39                {
40                        if ( e.type == CKEDITOR.NODE_ELEMENT )
41                        {
42                                if ( !this.lastElement )
43                                        this.lastElement = e;
44
45                                var elementName = e.getName();
46                                if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' )
47                                        elementName = e.$.scopeName.toLowerCase() + ':' + elementName;
48
49                                if ( !blockLimit )
50                                {
51                                        if ( !block && pathBlockElements[ elementName ] )
52                                                block = e;
53
54                                        if ( pathBlockLimitElements[ elementName ] )
55                                        {
56                                                // DIV is considered the Block, if no block is available (#525)
57                                                // and if it doesn't contain other blocks.
58                                                if ( !block && elementName == 'div' && !checkHasBlock( e ) )
59                                                        block = e;
60                                                else
61                                                        blockLimit = e;
62                                        }
63                                }
64
65                                elements.push( e );
66
67                                if ( elementName == 'body' )
68                                        break;
69                        }
70                        e = e.getParent();
71                }
72
73                this.block = block;
74                this.blockLimit = blockLimit;
75                this.elements = elements;
76        };
77})();
78
79CKEDITOR.dom.elementPath.prototype =
80{
81        /**
82         * Compares this element path with another one.
83         * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be
84         * compared with this one.
85         * @returns {Boolean} "true" if the paths are equal, containing the same
86         * number of elements and the same elements in the same order.
87         */
88        compare : function( otherPath )
89        {
90                var thisElements = this.elements;
91                var otherElements = otherPath && otherPath.elements;
92
93                if ( !otherElements || thisElements.length != otherElements.length )
94                        return false;
95
96                for ( var i = 0 ; i < thisElements.length ; i++ )
97                {
98                        if ( !thisElements[ i ].equals( otherElements[ i ] ) )
99                                return false;
100                }
101
102                return true;
103        }
104};
Note: See TracBrowser for help on using the repository browser.