JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1
[ckeditor.git] / _source / plugins / div / plugin.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 /**\r
7  * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes.\r
8  *\r
9  */\r
10 \r
11 (function()\r
12 {\r
13         CKEDITOR.plugins.add( 'div',\r
14         {\r
15                 requires : [ 'editingblock', 'domiterator' ],\r
16 \r
17                 init : function( editor )\r
18                 {\r
19                         var lang = editor.lang.div;\r
20 \r
21                         editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv' ) );\r
22                         editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv' ) );\r
23                         editor.addCommand( 'removediv',\r
24                                 {\r
25                                         exec : function( editor )\r
26                                         {\r
27                                                 var selection = editor.getSelection(),\r
28                                                         ranges = selection && selection.getRanges(),\r
29                                                         range,\r
30                                                         bookmarks = selection.createBookmarks(),\r
31                                                         walker,\r
32                                                         toRemove = [];\r
33 \r
34                                                 function findDiv( node )\r
35                                                 {\r
36                                                         var path = new CKEDITOR.dom.elementPath( node ),\r
37                                                                 blockLimit = path.blockLimit,\r
38                                                                 div = blockLimit.is( 'div' ) && blockLimit;\r
39 \r
40                                                         if ( div && !div.getAttribute( '_cke_div_added' ) )\r
41                                                         {\r
42                                                                 toRemove.push( div );\r
43                                                                 div.setAttribute( '_cke_div_added' );\r
44                                                         }\r
45                                                 }\r
46 \r
47                                                 for ( var i = 0 ; i < ranges.length ; i++ )\r
48                                                 {\r
49                                                         range = ranges[ i ];\r
50                                                         if( range.collapsed )\r
51                                                                 findDiv( selection.getStartElement() );\r
52                                                         else\r
53                                                         {\r
54                                                                 walker = new CKEDITOR.dom.walker( range );\r
55                                                                 walker.evaluator = findDiv;\r
56                                                                 walker.lastForward();\r
57                                                         }\r
58                                                 }\r
59 \r
60                                                 for ( i = 0 ; i < toRemove.length ; i++ )\r
61                                                         toRemove[ i ].remove( true );\r
62 \r
63                                                 selection.selectBookmarks( bookmarks );\r
64                                         }\r
65                                 } );\r
66 \r
67                         editor.ui.addButton( 'CreateDiv',\r
68                         {\r
69                                 label : lang.toolbar,\r
70                                 command :'creatediv'\r
71                         } );\r
72 \r
73                         if ( editor.addMenuItems )\r
74                         {\r
75                                 editor.addMenuItems(\r
76                                         {\r
77                                                 editdiv :\r
78                                                 {\r
79                                                         label : lang.edit,\r
80                                                         command : 'editdiv',\r
81                                                         group : 'div',\r
82                                                         order : 1\r
83                                                 },\r
84 \r
85                                                 removediv:\r
86                                                 {\r
87                                                         label : lang.remove,\r
88                                                         command : 'removediv',\r
89                                                         group : 'div',\r
90                                                         order : 5\r
91                                                 }\r
92                                         } );\r
93 \r
94                                 if ( editor.contextMenu )\r
95                                 {\r
96                                         editor.contextMenu.addListener( function( element, selection )\r
97                                                 {\r
98                                                         if ( !element )\r
99                                                                 return null;\r
100 \r
101                                                         var elementPath = new CKEDITOR.dom.elementPath( element ),\r
102                                                                 blockLimit = elementPath.blockLimit;\r
103 \r
104                                                         if ( blockLimit && blockLimit.getAscendant( 'div', true ) )\r
105                                                         {\r
106                                                                 return {\r
107                                                                         editdiv : CKEDITOR.TRISTATE_OFF,\r
108                                                                         removediv : CKEDITOR.TRISTATE_OFF\r
109                                                                 };\r
110                                                         }\r
111 \r
112                                                         return null;\r
113                                                 } );\r
114                                 }\r
115                         }\r
116 \r
117                         CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' );\r
118                         CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' );\r
119                 }\r
120         } );\r
121 })();\r