X-Git-Url: https://scm.cri.minesparis.psl.eu/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/plugins/placeholder/plugin.js diff --git a/skins/ckeditor/_source/plugins/placeholder/plugin.js b/skins/ckeditor/_source/plugins/placeholder/plugin.js new file mode 100644 index 0000000..503f08a --- /dev/null +++ b/skins/ckeditor/_source/plugins/placeholder/plugin.js @@ -0,0 +1,171 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "placeholder" plugin. + * + */ + +(function() +{ + var placeholderReplaceRegex = /\[\[[^\]]+\]\]/g; + CKEDITOR.plugins.add( 'placeholder', + { + requires : [ 'dialog' ], + lang : [ 'en', 'he' ], + init : function( editor ) + { + var lang = editor.lang.placeholder; + + editor.addCommand( 'createplaceholder', new CKEDITOR.dialogCommand( 'createplaceholder' ) ); + editor.addCommand( 'editplaceholder', new CKEDITOR.dialogCommand( 'editplaceholder' ) ); + + editor.ui.addButton( 'CreatePlaceholder', + { + label : lang.toolbar, + command :'createplaceholder', + icon : this.path + 'placeholder.gif' + }); + + if ( editor.addMenuItems ) + { + editor.addMenuGroup( 'placeholder', 20 ); + editor.addMenuItems( + { + editplaceholder : + { + label : lang.edit, + command : 'editplaceholder', + group : 'placeholder', + order : 1, + icon : this.path + 'placeholder.gif' + } + } ); + + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || !element.data( 'cke-placeholder' ) ) + return null; + + return { editplaceholder : CKEDITOR.TRISTATE_OFF }; + } ); + } + } + + editor.on( 'doubleclick', function( evt ) + { + if ( CKEDITOR.plugins.placeholder.getSelectedPlaceHoder( editor ) ) + evt.data.dialog = 'editplaceholder'; + }); + + editor.addCss( + '.cke_placeholder' + + '{' + + 'background-color: #ffff00;' + + ( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) + + '}' + ); + + editor.on( 'contentDom', function() + { + editor.document.getBody().on( 'resizestart', function( evt ) + { + if ( editor.getSelection().getSelectedElement().data( 'cke-placeholder' ) ) + evt.data.preventDefault(); + }); + }); + + CKEDITOR.dialog.add( 'createplaceholder', this.path + 'dialogs/placeholder.js' ); + CKEDITOR.dialog.add( 'editplaceholder', this.path + 'dialogs/placeholder.js' ); + }, + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( dataFilter ) + { + dataFilter.addRules( + { + text : function( text ) + { + return text.replace( placeholderReplaceRegex, function( match ) + { + return CKEDITOR.plugins.placeholder.createPlaceholder( editor, null, match, 1 ); + }); + } + }); + } + + if ( htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + 'span' : function( element ) + { + if ( element.attributes && element.attributes[ 'data-cke-placeholder' ] ) + delete element.name; + } + } + }); + } + } + }); +})(); + +CKEDITOR.plugins.placeholder = +{ + createPlaceholder : function( editor, oldElement, text, isGet ) + { + var element = new CKEDITOR.dom.element( 'span', editor.document ); + element.setAttributes( + { + contentEditable : 'false', + 'data-cke-placeholder' : 1, + 'class' : 'cke_placeholder' + } + ); + + text && element.setText( text ); + + if ( isGet ) + return element.getOuterHtml(); + + if ( oldElement ) + { + if ( CKEDITOR.env.ie ) + { + element.insertAfter( oldElement ); + // Some time is required for IE before the element is removed. + setTimeout( function() + { + oldElement.remove(); + element.focus(); + }, 10 ); + } + else + element.replace( oldElement ); + } + else + editor.insertElement( element ); + + return null; + }, + + getSelectedPlaceHoder : function( editor ) + { + var range = editor.getSelection().getRanges()[ 0 ]; + range.shrink( CKEDITOR.SHRINK_TEXT ); + var node = range.startContainer; + while( node && !( node.type == CKEDITOR.NODE_ELEMENT && node.data( 'cke-placeholder' ) ) ) + node = node.getParent(); + return node; + } +};