forked from extern/egroupware
225 lines
5.5 KiB
JavaScript
225 lines
5.5 KiB
JavaScript
/*
|
|
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
|
|
For licensing, see LICENSE.html or http://ckeditor.com/license
|
|
*/
|
|
|
|
/**
|
|
* @fileOverview The default editing block plugin, which holds the editing area
|
|
* and source view.
|
|
*/
|
|
|
|
(function()
|
|
{
|
|
var getMode = function( editor, mode )
|
|
{
|
|
return editor._.modes && editor._.modes[ mode || editor.mode ];
|
|
};
|
|
|
|
// This is a semaphore used to avoid recursive calls between
|
|
// the following data handling functions.
|
|
var isHandlingData;
|
|
|
|
CKEDITOR.plugins.add( 'editingblock',
|
|
{
|
|
init : function( editor )
|
|
{
|
|
if ( !editor.config.editingBlock )
|
|
return;
|
|
|
|
editor.on( 'themeSpace', function( event )
|
|
{
|
|
if ( event.data.space == 'contents' )
|
|
event.data.html += '<br>';
|
|
});
|
|
|
|
editor.on( 'themeLoaded', function()
|
|
{
|
|
editor.fireOnce( 'editingBlockReady' );
|
|
});
|
|
|
|
editor.on( 'uiReady', function()
|
|
{
|
|
editor.setMode( editor.config.startupMode );
|
|
});
|
|
|
|
editor.on( 'afterSetData', function()
|
|
{
|
|
if ( !isHandlingData )
|
|
{
|
|
function setData()
|
|
{
|
|
isHandlingData = true;
|
|
getMode( editor ).loadData( editor.getData() );
|
|
isHandlingData = false;
|
|
}
|
|
|
|
if ( editor.mode )
|
|
setData();
|
|
else
|
|
{
|
|
editor.on( 'mode', function()
|
|
{
|
|
setData();
|
|
editor.removeListener( 'mode', arguments.callee );
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
editor.on( 'beforeGetData', function()
|
|
{
|
|
if ( !isHandlingData && editor.mode )
|
|
{
|
|
isHandlingData = true;
|
|
editor.setData( getMode( editor ).getData() );
|
|
isHandlingData = false;
|
|
}
|
|
});
|
|
|
|
editor.on( 'getSnapshot', function( event )
|
|
{
|
|
if ( editor.mode )
|
|
event.data = getMode( editor ).getSnapshotData();
|
|
});
|
|
|
|
editor.on( 'loadSnapshot', function( event )
|
|
{
|
|
if ( editor.mode )
|
|
getMode( editor ).loadSnapshotData( event.data );
|
|
});
|
|
|
|
// For the first "mode" call, we'll also fire the "instanceReady"
|
|
// event.
|
|
editor.on( 'mode', function( event )
|
|
{
|
|
// Do that once only.
|
|
event.removeListener();
|
|
|
|
if ( editor.config.startupFocus )
|
|
editor.focus();
|
|
|
|
// Fire instanceReady for both the editor and CKEDITOR, but
|
|
// defer this until the whole execution has completed
|
|
// to guarantee the editor is fully responsible.
|
|
setTimeout( function(){
|
|
editor.fireOnce( 'instanceReady' );
|
|
CKEDITOR.fire( 'instanceReady', null, editor );
|
|
} );
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* The current editing mode. An editing mode is basically a viewport for
|
|
* editing or content viewing. By default the possible values for this
|
|
* property are "wysiwyg" and "source".
|
|
* @type String
|
|
* @example
|
|
* alert( CKEDITOR.instances.editor1.mode ); // "wysiwyg" (e.g.)
|
|
*/
|
|
CKEDITOR.editor.prototype.mode = '';
|
|
|
|
/**
|
|
* Registers an editing mode. This function is to be used mainly by plugins.
|
|
* @param {String} mode The mode name.
|
|
* @param {Object} modeEditor The mode editor definition.
|
|
* @example
|
|
*/
|
|
CKEDITOR.editor.prototype.addMode = function( mode, modeEditor )
|
|
{
|
|
modeEditor.name = mode;
|
|
( this._.modes || ( this._.modes = {} ) )[ mode ] = modeEditor;
|
|
};
|
|
|
|
/**
|
|
* Sets the current editing mode in this editor instance.
|
|
* @param {String} mode A registered mode name.
|
|
* @example
|
|
* // Switch to "source" view.
|
|
* CKEDITOR.instances.editor1.setMode( 'source' );
|
|
*/
|
|
CKEDITOR.editor.prototype.setMode = function( mode )
|
|
{
|
|
var data,
|
|
holderElement = this.getThemeSpace( 'contents' ),
|
|
isDirty = this.checkDirty();
|
|
|
|
// Unload the previous mode.
|
|
if ( this.mode )
|
|
{
|
|
if ( mode == this.mode )
|
|
return;
|
|
|
|
this.fire( 'beforeModeUnload' );
|
|
|
|
var currentMode = getMode( this );
|
|
data = currentMode.getData();
|
|
currentMode.unload( holderElement );
|
|
this.mode = '';
|
|
}
|
|
|
|
holderElement.setHtml( '' );
|
|
|
|
// Load required mode.
|
|
var modeEditor = getMode( this, mode );
|
|
if ( !modeEditor )
|
|
throw '[CKEDITOR.editor.setMode] Unknown mode "' + mode + '".';
|
|
|
|
if ( !isDirty )
|
|
{
|
|
this.on( 'mode', function()
|
|
{
|
|
this.resetDirty();
|
|
this.removeListener( 'mode', arguments.callee );
|
|
});
|
|
}
|
|
|
|
modeEditor.load( holderElement, ( typeof data ) != 'string' ? this.getData() : data);
|
|
};
|
|
|
|
/**
|
|
* Moves the selection focus to the editing are space in the editor.
|
|
*/
|
|
CKEDITOR.editor.prototype.focus = function()
|
|
{
|
|
var mode = getMode( this );
|
|
if ( mode )
|
|
mode.focus();
|
|
};
|
|
})();
|
|
|
|
/**
|
|
* The mode to load at the editor startup. It depends on the plugins
|
|
* loaded. By default, the "wysiwyg" and "source" modes are available.
|
|
* @type String
|
|
* @default 'wysiwyg'
|
|
* @example
|
|
* config.startupMode = 'source';
|
|
*/
|
|
CKEDITOR.config.startupMode = 'wysiwyg';
|
|
|
|
/**
|
|
* Sets whether the editor should have the focus when the page loads.
|
|
* @type Boolean
|
|
* @default false
|
|
* @example
|
|
* config.startupFocus = true;
|
|
*/
|
|
CKEDITOR.config.startupFocus = false;
|
|
|
|
/**
|
|
* Whether to render or not the editing block area in the editor interface.
|
|
* @type Boolean
|
|
* @default true
|
|
* @example
|
|
* config.editingBlock = false;
|
|
*/
|
|
CKEDITOR.config.editingBlock = true;
|
|
|
|
/**
|
|
* Fired when a CKEDITOR instance is created, fully initialized and ready for interaction.
|
|
* @name CKEDITOR#instanceReady
|
|
* @event
|
|
* @param {CKEDITOR.editor} editor The editor instance that has been created.
|
|
*/
|