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