mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.0 KiB
144 lines
4.0 KiB
/** |
|
* @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. |
|
* For licensing, see LICENSE.md or http://ckeditor.com/license |
|
*/ |
|
|
|
/** |
|
* @fileOverview The "placeholder" plugin. |
|
* |
|
*/ |
|
|
|
(function() { |
|
var placeholderReplaceRegex = /\[[^]+\]/gm; |
|
CKEDITOR.plugins.add( 'placeholder', { |
|
requires: 'dialog', |
|
lang: 'en,bg,cs,cy,da,de,el,eo,et,fa,fi,fr,he,hr,it,ku,nb,nl,no,pl,tr,ug,uk,vi,zh-cn', // %REMOVE_LINE_CORE% |
|
icons: 'placeholder', // %REMOVE_LINE_CORE% |
|
hidpi: true, // %REMOVE_LINE_CORE% |
|
onLoad: function() { |
|
CKEDITOR.addCss( '.cke_placeholder' + |
|
'{' + |
|
'background-color: #ffff00;' + |
|
'border: 1px dashed #ff0000;' + |
|
( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) + |
|
'}' |
|
); |
|
}, |
|
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 && editor.ui.addButton( 'CreatePlaceholder', { |
|
label: lang.toolbar, |
|
command: 'createplaceholder', |
|
toolbar: 'insert,5', |
|
icon: 'placeholder' |
|
}); |
|
|
|
if ( editor.addMenuItems ) { |
|
editor.addMenuGroup( 'placeholder', 20 ); |
|
editor.addMenuItems({ |
|
editplaceholder: { |
|
label: lang.edit, |
|
command: 'editplaceholder', |
|
group: 'placeholder', |
|
order: 1, |
|
icon: 'placeholder' |
|
} |
|
}); |
|
|
|
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.getSelectedPlaceHolder( editor ) ) |
|
evt.data.dialog = 'editplaceholder'; |
|
}); |
|
|
|
editor.on( 'contentDom', function() { |
|
editor.editable().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; |
|
}, |
|
|
|
getSelectedPlaceHolder: 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; |
|
} |
|
};
|
|
|