--- /dev/null
+/*\r
+Copyright (c) 2003-2011, 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', 'styles' ],\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.data( 'cke-div-added' ) )\r
+ {\r
+ toRemove.push( div );\r
+ div.data( '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 || element.isReadOnly() )\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