2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
7 * @fileOverview The "placeholder" plugin.
\r
13 var placeholderReplaceRegex = /\[\[[^\]]+\]\]/g;
\r
14 CKEDITOR.plugins.add( 'placeholder',
\r
16 requires : [ 'dialog' ],
\r
18 init : function( editor )
\r
20 var lang = editor.lang.placeholder;
\r
22 editor.addCommand( 'createplaceholder', new CKEDITOR.dialogCommand( 'createplaceholder' ) );
\r
23 editor.addCommand( 'editplaceholder', new CKEDITOR.dialogCommand( 'editplaceholder' ) );
\r
25 editor.ui.addButton( 'CreatePlaceholder',
\r
27 label : lang.toolbar,
\r
28 command :'createplaceholder',
\r
29 icon : this.path + 'placeholder.gif'
\r
32 if ( editor.addMenuItems )
\r
34 editor.addMenuGroup( 'placeholder', 20 );
\r
35 editor.addMenuItems(
\r
40 command : 'editplaceholder',
\r
41 group : 'placeholder',
\r
43 icon : this.path + 'placeholder.gif'
\r
47 if ( editor.contextMenu )
\r
49 editor.contextMenu.addListener( function( element, selection )
\r
51 if ( !element || !element.data( 'cke-placeholder' ) )
\r
54 return { editplaceholder : CKEDITOR.TRISTATE_OFF };
\r
59 editor.on( 'doubleclick', function( evt )
\r
61 var element = evt.data.element;
\r
62 if ( element.data( 'cke-placeholder' ) )
\r
63 evt.data.dialog = 'editplaceholder';
\r
67 '.cke_placeholder' +
\r
69 'background-color: #ffff00;' +
\r
70 ( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) +
\r
74 editor.on( 'contentDom', function()
\r
76 editor.document.getBody().on( 'resizestart', function( evt )
\r
78 if ( editor.getSelection().getSelectedElement().data( 'cke-placeholder' ) )
\r
79 evt.data.preventDefault();
\r
83 CKEDITOR.dialog.add( 'createplaceholder', this.path + 'dialogs/placeholder.js' );
\r
84 CKEDITOR.dialog.add( 'editplaceholder', this.path + 'dialogs/placeholder.js' );
\r
86 afterInit : function( editor )
\r
88 var dataProcessor = editor.dataProcessor,
\r
89 dataFilter = dataProcessor && dataProcessor.dataFilter,
\r
90 htmlFilter = dataProcessor && dataProcessor.htmlFilter;
\r
94 dataFilter.addRules(
\r
96 text : function( text )
\r
98 return text.replace( placeholderReplaceRegex, function( match )
\r
100 return CKEDITOR.plugins.placeholder.createPlaceholder( editor, null, match, 1 );
\r
108 htmlFilter.addRules(
\r
112 'span' : function( element )
\r
114 if ( element.attributes && element.attributes[ 'data-cke-placeholder' ] )
\r
115 delete element.name;
\r
124 CKEDITOR.plugins.placeholder =
\r
126 createPlaceholder : function( editor, oldElement, text, isGet )
\r
128 var element = new CKEDITOR.dom.element( 'span', editor.document );
\r
129 element.setAttributes(
\r
131 contentEditable : 'false',
\r
132 'data-cke-placeholder' : 1,
\r
133 'class' : 'cke_placeholder'
\r
137 text && element.setText( text );
\r
140 return element.getOuterHtml();
\r
144 if ( CKEDITOR.env.ie )
\r
146 element.insertAfter( oldElement );
\r
147 // Some time is required for IE before the element is removed.
\r
148 setTimeout( function()
\r
150 oldElement.remove();
\r
155 element.replace( oldElement );
\r
158 editor.insertElement( element );
\r