JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _tests / plugins / domiterator / domiterator.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
2 <html xmlns="http://www.w3.org/1999/xhtml">\r
3 <head>\r
4         <title>Plugin: domiterator</title>\r
5         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
6         <link rel="stylesheet" type="text/css" href="../../test.css" />\r
7         <script type="text/javascript" src="../../../ckeditor.js"></script>\r
8         <script type="text/javascript" src="../../test.js"></script>\r
9         <script type="text/javascript">\r
10 \r
11 CKEDITOR.plugins.load( [ 'htmldataprocessor', 'htmlwriter', 'domiterator'] );\r
12 \r
13 \r
14         </script>\r
15         <script type="text/javascript">\r
16         //<![CDATA[\r
17 \r
18 /**\r
19  * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
20  * @param {Object} id\r
21  */\r
22 function getTextAreaValue( id )\r
23 {\r
24         return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
25 }\r
26 \r
27 CKEDITOR.test.addTestCase( (function()\r
28 {\r
29 \r
30         // Local references.\r
31         var assert = CKEDITOR.test.assert,\r
32                 arrayAssert = YAHOO.util.ArrayAssert;\r
33 \r
34         var doc = new CKEDITOR.dom.document( document );\r
35 \r
36         // In these tests, we may "reset" the writer rules to avoid it formatting\r
37         // the output, making the assertion easier to the done. We don't need to\r
38         // test formatting features here, so this is ok.\r
39         var getDataProcessor = function()\r
40         {\r
41                 var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
42                 dataProcessor.writer._.rules = [];\r
43                 return dataProcessor;\r
44         };\r
45 \r
46         /**\r
47          * IE always returning CRLF for line-feed, so remove it when retrieving\r
48          * pre-formated text from text area.\r
49          */\r
50         function getTextAreaValue( id )\r
51         {\r
52                 return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
53         }\r
54 \r
55         function assumeElementContentAreSame( container, textareaId )\r
56         {\r
57                 if( typeof container == 'string' )\r
58                         container = doc.getById( container );\r
59                 //Assume result document content\r
60                 var html = getDataProcessor().toDataFormat( container.getHtml() );\r
61                 assert.areSame( getTextAreaValue( textareaId ) , html );\r
62         }\r
63 \r
64         function assumeElementAreSame( element, textareaId )\r
65         {\r
66                 if( typeof element == 'string' )\r
67                         element = doc.getById( element );\r
68                 //Assume result document content\r
69                 var html = getDataProcessor().toDataFormat( element.getOuterHtml() );\r
70                 assert.areSame( getTextAreaValue( textareaId ) , html );\r
71         }\r
72 \r
73         /**\r
74          *\r
75          * @param {String|CKEDITOR.dom.range} containerId|range Either the id of html container which contents are treated as range, or a exisiting range object.\r
76          * @param {Object} iteratorOption\r
77          * @param {Array} expectedTagList block elements tagName list in iteration orders.\r
78          */\r
79         function assumeIterationSameAs( containerIdOrRange, iteratorOption, expectedTagList )\r
80         {\r
81                 var range;\r
82                 if( typeof containerIdOrRange == 'string' )\r
83                 {\r
84                         range = new CKEDITOR.dom.range( doc );\r
85                         range.selectNodeContents( doc.getById( containerIdOrRange ) );\r
86                 }\r
87                 else\r
88                         range = containerIdOrRange;\r
89 \r
90                 var iter = range.createIterator();\r
91                 CKEDITOR.tools.extend( iter, iteratorOption, true );\r
92                 var blockList = [], block;\r
93                 while (( block = iter.getNextParagraph() ) )\r
94                 {\r
95                         blockList.push( block.getName() );\r
96                 }\r
97                 arrayAssert.itemsAreEqual( expectedTagList, blockList );\r
98         }\r
99 \r
100         return {\r
101 \r
102                 /**\r
103                  * Test iterating over table cells.\r
104                  */\r
105                 test_iterator_table_cells : function()\r
106                 {\r
107                         var range = new CKEDITOR.dom.range( doc );\r
108                         range.setStartAt( doc.getById( 'iterTarget2a' ), CKEDITOR.POSITION_AFTER_START );\r
109                         range.setEndAt( doc.getById( 'iterTarget2b' ), CKEDITOR.POSITION_BEFORE_END );\r
110                         assumeIterationSameAs( range, null, [ 'th', 'p', 'td' ]);\r
111                         assumeElementContentAreSame( 'iterContainer2', 'iterResult2' );\r
112                 },\r
113 \r
114                 /**\r
115                  * Test iterating over list items.\r
116                  */\r
117                 test_iterator_listItems : function()\r
118                 {\r
119                         var range = new CKEDITOR.dom.range( doc );\r
120                         range.setStartAt( doc.getById( 'iterTarget3a' ), CKEDITOR.POSITION_AFTER_START );\r
121                         range.setEndAt( doc.getById( 'iterTarget3b' ), CKEDITOR.POSITION_BEFORE_END );\r
122                         assumeIterationSameAs( range, null, [ 'li', 'p', 'li' ,'p', 'li' ]);\r
123                         assumeElementContentAreSame( 'iterContainer3', 'iterResult3' );\r
124                 },\r
125 \r
126                 /**\r
127                  * Test iterating over pseudo block.\r
128                  */\r
129                 test_iterator_pseudoBlock : function()\r
130                 {\r
131                         var range = new CKEDITOR.dom.range( doc );\r
132                         range.setStartAt( doc.getById( 'iterTarget4a' ), CKEDITOR.POSITION_AFTER_START );\r
133                         range.setEndAt( doc.getById( 'iterTarget4b' ), CKEDITOR.POSITION_BEFORE_END );\r
134                         assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
135                         assumeElementContentAreSame( 'iterContainer4', 'iterResult4' );\r
136                 },\r
137 \r
138                 /**\r
139                  * Test collapsed range before paraghraph end.\r
140                  */\r
141                 test_iterator_collapsed_before_paragraph : function()\r
142                 {\r
143                         var range = new CKEDITOR.dom.range( doc );\r
144                         range.setStartAt( doc.getById( 'iterTarget7' ), CKEDITOR.POSITION_BEFORE_END );\r
145                         assumeIterationSameAs( range, null, [ 'p' ]);\r
146                         assumeElementContentAreSame( 'iterContainer7', 'iterResult7' );\r
147                 },\r
148 \r
149                 /**\r
150                  * Test range collapsed  inside paraghraph.\r
151                  */\r
152                 test_iterator_collapsed_inside_paragraph : function()\r
153                 {\r
154                         var range = new CKEDITOR.dom.range( doc );\r
155                         range.setStart( doc.getById( 'para8' ).getFirst(), 3 );\r
156                         assumeIterationSameAs( range, null, [ 'p' ]);\r
157                         assumeElementContentAreSame( 'iterContainer8', 'iterResult8' );\r
158                 },\r
159 \r
160                 /**\r
161                  * Test fix paragraph-less content.\r
162                  */\r
163                 test_iterator_establish_paragraph: function()\r
164                 {\r
165                         var range = new CKEDITOR.dom.range(doc);\r
166                         range.setStartAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_AFTER_START);\r
167                         range.setEndAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_BEFORE_END);\r
168                         assumeIterationSameAs(range, null, ['p']);\r
169                         assumeElementContentAreSame( 'iterContainer9', 'iterResult9');\r
170                 },\r
171 \r
172                 /**\r
173                  * Test iterating over more than one paragraphs. (#3352)\r
174                  */\r
175                 test_iterator_multiple_paragraphs: function()\r
176                 {\r
177                         var range = new CKEDITOR.dom.range( doc );\r
178                         range.setStartAt(doc.getById( 'iterTarget10a' ), CKEDITOR.POSITION_AFTER_START );\r
179                         range.setEndAt(doc.getById( 'iterTarget10b' ), CKEDITOR.POSITION_BEFORE_END );\r
180                         assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
181                 },\r
182 \r
183                 name : document.title\r
184         };\r
185 })() );\r
186 \r
187         //]]>\r
188         </script>\r
189 </head>\r
190 <body>\r
191 \r
192 \r
193 <div id="iterContainer2"><table summary="summary">\r
194         <caption>caption</caption>\r
195         <tr>\r
196                 <th id="iterTarget2a">\r
197                         head1</th>\r
198         </tr>\r
199         <tr>\r
200                 <td><p>cell1</p></td>\r
201         </tr>\r
202         <tr>\r
203                 <td id="iterTarget2b">cell2</td>\r
204         </tr>\r
205 </table></div>\r
206 <textarea id="iterResult2"><table summary="summary"><caption>caption</caption><tbody><tr><th id="iterTarget2a">head1</th></tr><tr><td><p>cell1</p></td></tr><tr><td id="iterTarget2b">cell2</td></tr></tbody></table></textarea>\r
207 \r
208 <div id="iterContainer3"><ul>\r
209         <li id="iterTarget3a">item1</li>\r
210         <li><p>item2</p></li>\r
211         <li>\r
212                 <ul><li>item3</li></ul>\r
213                 <ul><li><p>item5</p></li></ul>\r
214         </li>\r
215         <li id="iterTarget3b">item5</li>\r
216         </ul></div>\r
217 <textarea id="iterResult3"><ul><li id="iterTarget3a">item1</li><li><p>item2</p></li><li><ul><li>item3</li></ul><ul><li><p>item5</p></li></ul></li><li id="iterTarget3b">item5</li></ul></textarea>\r
218 \r
219 <div id="iterContainer4">\r
220         <div id="iterTarget4b"><p id="iterTarget4a">paragraph</p>text</div>\r
221 </div>\r
222 <textarea id="iterResult4"><div id="iterTarget4b"><p id="iterTarget4a">paragraph</p><p>text</p></div></textarea>\r
223 \r
224 <div id="iterContainer7"><p id="iterTarget7">paragraph</p></div>\r
225 <textarea id="iterResult7"><p id="iterTarget7">paragraph</p></textarea>\r
226 \r
227 <div id="iterContainer8"><p id="para8">paragraph</p></div>\r
228 <textarea id="iterResult8"><p id="para8">paragraph</p></textarea>\r
229 \r
230 <form id="iterContainer9"><span id="iterTarget9">non-paragraph</span></form>\r
231 <textarea id="iterResult9"><p><span id="iterTarget9">non-paragraph</span></p></textarea>\r
232 \r
233 <div id="iterContainer10"><p id="iterTarget10a">para1</p><p id="iterTarget10b">para2</p></div>\r
234 \r
235 </body>\r
236 </html>\r