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 | })();
|
---|