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