JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1
[ckeditor.git] / _source / plugins / div / plugin.js
diff --git a/_source/plugins/div/plugin.js b/_source/plugins/div/plugin.js
new file mode 100644 (file)
index 0000000..3a7ec8d
--- /dev/null
@@ -0,0 +1,121 @@
+/*\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes.\r
+ *\r
+ */\r
+\r
+(function()\r
+{\r
+       CKEDITOR.plugins.add( 'div',\r
+       {\r
+               requires : [ 'editingblock', 'domiterator' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var lang = editor.lang.div;\r
+\r
+                       editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv' ) );\r
+                       editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv' ) );\r
+                       editor.addCommand( 'removediv',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection(),\r
+                                                       ranges = selection && selection.getRanges(),\r
+                                                       range,\r
+                                                       bookmarks = selection.createBookmarks(),\r
+                                                       walker,\r
+                                                       toRemove = [];\r
+\r
+                                               function findDiv( node )\r
+                                               {\r
+                                                       var path = new CKEDITOR.dom.elementPath( node ),\r
+                                                               blockLimit = path.blockLimit,\r
+                                                               div = blockLimit.is( 'div' ) && blockLimit;\r
+\r
+                                                       if ( div && !div.getAttribute( '_cke_div_added' ) )\r
+                                                       {\r
+                                                               toRemove.push( div );\r
+                                                               div.setAttribute( '_cke_div_added' );\r
+                                                       }\r
+                                               }\r
+\r
+                                               for ( var i = 0 ; i < ranges.length ; i++ )\r
+                                               {\r
+                                                       range = ranges[ i ];\r
+                                                       if( range.collapsed )\r
+                                                               findDiv( selection.getStartElement() );\r
+                                                       else\r
+                                                       {\r
+                                                               walker = new CKEDITOR.dom.walker( range );\r
+                                                               walker.evaluator = findDiv;\r
+                                                               walker.lastForward();\r
+                                                       }\r
+                                               }\r
+\r
+                                               for ( i = 0 ; i < toRemove.length ; i++ )\r
+                                                       toRemove[ i ].remove( true );\r
+\r
+                                               selection.selectBookmarks( bookmarks );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.ui.addButton( 'CreateDiv',\r
+                       {\r
+                               label : lang.toolbar,\r
+                               command :'creatediv'\r
+                       } );\r
+\r
+                       if ( editor.addMenuItems )\r
+                       {\r
+                               editor.addMenuItems(\r
+                                       {\r
+                                               editdiv :\r
+                                               {\r
+                                                       label : lang.edit,\r
+                                                       command : 'editdiv',\r
+                                                       group : 'div',\r
+                                                       order : 1\r
+                                               },\r
+\r
+                                               removediv:\r
+                                               {\r
+                                                       label : lang.remove,\r
+                                                       command : 'removediv',\r
+                                                       group : 'div',\r
+                                                       order : 5\r
+                                               }\r
+                                       } );\r
+\r
+                               if ( editor.contextMenu )\r
+                               {\r
+                                       editor.contextMenu.addListener( function( element, selection )\r
+                                               {\r
+                                                       if ( !element )\r
+                                                               return null;\r
+\r
+                                                       var elementPath = new CKEDITOR.dom.elementPath( element ),\r
+                                                               blockLimit = elementPath.blockLimit;\r
+\r
+                                                       if ( blockLimit && blockLimit.getAscendant( 'div', true ) )\r
+                                                       {\r
+                                                               return {\r
+                                                                       editdiv : CKEDITOR.TRISTATE_OFF,\r
+                                                                       removediv : CKEDITOR.TRISTATE_OFF\r
+                                                               };\r
+                                                       }\r
+\r
+                                                       return null;\r
+                                               } );\r
+                               }\r
+                       }\r
+\r
+                       CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' );\r
+                       CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' );\r
+               }\r
+       } );\r
+})();\r