2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3 For licensing, see LICENSE.html or http://ckeditor.com/license
7 * @fileOverview The "placeholder" plugin.
13 var placeholderReplaceRegex
= /\[\[[^\]]+\]\]/g;
14 CKEDITOR
.plugins
.add( 'placeholder',
16 requires
: [ 'dialog' ],
17 lang
: [ 'en', 'he' ],
18 init : function( editor
)
20 var lang
= editor
.lang
.placeholder
;
22 editor
.addCommand( 'createplaceholder', new CKEDITOR
.dialogCommand( 'createplaceholder' ) );
23 editor
.addCommand( 'editplaceholder', new CKEDITOR
.dialogCommand( 'editplaceholder' ) );
25 editor
.ui
.addButton( 'CreatePlaceholder',
28 command
:'createplaceholder',
29 icon
: this.path
+ 'placeholder.gif'
32 if ( editor
.addMenuItems
)
34 editor
.addMenuGroup( 'placeholder', 20 );
40 command
: 'editplaceholder',
41 group
: 'placeholder',
43 icon
: this.path
+ 'placeholder.gif'
47 if ( editor
.contextMenu
)
49 editor
.contextMenu
.addListener( function( element
, selection
)
51 if ( !element
|| !element
.data( 'cke-placeholder' ) )
54 return { editplaceholder
: CKEDITOR
.TRISTATE_OFF
};
59 editor
.on( 'doubleclick', function( evt
)
61 if ( CKEDITOR
.plugins
.placeholder
.getSelectedPlaceHoder( editor
) )
62 evt
.data
.dialog
= 'editplaceholder';
68 'background-color: #ffff00;' +
69 ( CKEDITOR
.env
.gecko
? 'cursor: default;' : '' ) +
73 editor
.on( 'contentDom', function()
75 editor
.document
.getBody().on( 'resizestart', function( evt
)
77 if ( editor
.getSelection().getSelectedElement().data( 'cke-placeholder' ) )
78 evt
.data
.preventDefault();
82 CKEDITOR
.dialog
.add( 'createplaceholder', this.path
+ 'dialogs/placeholder.js' );
83 CKEDITOR
.dialog
.add( 'editplaceholder', this.path
+ 'dialogs/placeholder.js' );
85 afterInit : function( editor
)
87 var dataProcessor
= editor
.dataProcessor
,
88 dataFilter
= dataProcessor
&& dataProcessor
.dataFilter
,
89 htmlFilter
= dataProcessor
&& dataProcessor
.htmlFilter
;
95 text : function( text
)
97 return text
.replace( placeholderReplaceRegex
, function( match
)
99 return CKEDITOR
.plugins
.placeholder
.createPlaceholder( editor
, null, match
, 1 );
111 'span' : function( element
)
113 if ( element
.attributes
&& element
.attributes
[ 'data-cke-placeholder' ] )
123 CKEDITOR
.plugins
.placeholder
=
125 createPlaceholder : function( editor
, oldElement
, text
, isGet
)
127 var element
= new CKEDITOR
.dom
.element( 'span', editor
.document
);
128 element
.setAttributes(
130 contentEditable
: 'false',
131 'data-cke-placeholder' : 1,
132 'class' : 'cke_placeholder'
136 text
&& element
.setText( text
);
139 return element
.getOuterHtml();
143 if ( CKEDITOR
.env
.ie
)
145 element
.insertAfter( oldElement
);
146 // Some time is required for IE before the element is removed.
147 setTimeout( function()
154 element
.replace( oldElement
);
157 editor
.insertElement( element
);
162 getSelectedPlaceHoder : function( editor
)
164 var range
= editor
.getSelection().getRanges()[ 0 ];
165 range
.shrink( CKEDITOR
.SHRINK_TEXT
);
166 var node
= range
.startContainer
;
167 while( node
&& !( node
.type
== CKEDITOR
.NODE_ELEMENT
&& node
.data( 'cke-placeholder' ) ) )
168 node
= node
.getParent();