X-Git-Url: https://scm.cri.minesparis.psl.eu/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/plugins/toolbar/plugin.js
diff --git a/skins/ckeditor/_source/plugins/toolbar/plugin.js b/skins/ckeditor/_source/plugins/toolbar/plugin.js
new file mode 100644
index 0000000..5b6878a
--- /dev/null
+++ b/skins/ckeditor/_source/plugins/toolbar/plugin.js
@@ -0,0 +1,545 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in
+ * the editor.
+ */
+
+(function()
+{
+ var toolbox = function()
+ {
+ this.toolbars = [];
+ this.focusCommandExecuted = false;
+ };
+
+ toolbox.prototype.focus = function()
+ {
+ for ( var t = 0, toolbar ; toolbar = this.toolbars[ t++ ] ; )
+ {
+ for ( var i = 0, item ; item = toolbar.items[ i++ ] ; )
+ {
+ if ( item.focus )
+ {
+ item.focus();
+ return;
+ }
+ }
+ }
+ };
+
+ var commands =
+ {
+ toolbarFocus :
+ {
+ modes : { wysiwyg : 1, source : 1 },
+ readOnly : 1,
+
+ exec : function( editor )
+ {
+ if ( editor.toolbox )
+ {
+ editor.toolbox.focusCommandExecuted = true;
+
+ // Make the first button focus accessible for IE. (#3417)
+ // Adobe AIR instead need while of delay.
+ if ( CKEDITOR.env.ie || CKEDITOR.env.air )
+ setTimeout( function(){ editor.toolbox.focus(); }, 100 );
+ else
+ editor.toolbox.focus();
+ }
+ }
+ }
+ };
+
+ CKEDITOR.plugins.add( 'toolbar',
+ {
+ init : function( editor )
+ {
+ var endFlag;
+
+ var itemKeystroke = function( item, keystroke )
+ {
+ var next, toolbar;
+ var rtl = editor.lang.dir == 'rtl',
+ toolbarGroupCycling = editor.config.toolbarGroupCycling;
+
+ toolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling;
+
+ switch ( keystroke )
+ {
+ case 9 : // TAB
+ case CKEDITOR.SHIFT + 9 : // SHIFT + TAB
+ // Cycle through the toolbars, starting from the one
+ // closest to the current item.
+ while ( !toolbar || !toolbar.items.length )
+ {
+ toolbar = keystroke == 9 ?
+ ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] ) :
+ ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] );
+
+ // Look for the first item that accepts focus.
+ if ( toolbar.items.length )
+ {
+ item = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ];
+ while ( item && !item.focus )
+ {
+ item = endFlag ? item.previous : item.next;
+
+ if ( !item )
+ toolbar = 0;
+ }
+ }
+ }
+
+ if ( item )
+ item.focus();
+
+ return false;
+
+ case rtl ? 37 : 39 : // RIGHT-ARROW
+ case 40 : // DOWN-ARROW
+ next = item;
+ do
+ {
+ // Look for the next item in the toolbar.
+ next = next.next;
+
+ // If it's the last item, cycle to the first one.
+ if ( !next && toolbarGroupCycling )
+ next = item.toolbar.items[ 0 ];
+ }
+ while ( next && !next.focus )
+
+ // If available, just focus it, otherwise focus the
+ // first one.
+ if ( next )
+ next.focus();
+ else
+ // Send a TAB.
+ itemKeystroke( item, 9 );
+
+ return false;
+
+ case rtl ? 39 : 37 : // LEFT-ARROW
+ case 38 : // UP-ARROW
+ next = item;
+ do
+ {
+ // Look for the previous item in the toolbar.
+ next = next.previous;
+
+ // If it's the first item, cycle to the last one.
+ if ( !next && toolbarGroupCycling )
+ next = item.toolbar.items[ item.toolbar.items.length - 1 ];
+ }
+ while ( next && !next.focus )
+
+ // If available, just focus it, otherwise focus the
+ // last one.
+ if ( next )
+ next.focus();
+ else
+ {
+ endFlag = 1;
+ // Send a SHIFT + TAB.
+ itemKeystroke( item, CKEDITOR.SHIFT + 9 );
+ endFlag = 0;
+ }
+
+ return false;
+
+ case 27 : // ESC
+ editor.focus();
+ return false;
+
+ case 13 : // ENTER
+ case 32 : // SPACE
+ item.execute();
+ return false;
+ }
+ return true;
+ };
+
+ editor.on( 'themeSpace', function( event )
+ {
+ if ( event.data.space == editor.config.toolbarLocation )
+ {
+ editor.toolbox = new toolbox();
+
+ var labelId = CKEDITOR.tools.getNextId();
+
+ var output = [ '
' : ' style="display:none">' );
+
+ // Sends the ARIA label.
+ output.push( '', editor.lang.toolbars, '' );
+
+ var toolbars = editor.toolbox.toolbars,
+ toolbar =
+ ( editor.config.toolbar instanceof Array ) ?
+ editor.config.toolbar
+ :
+ editor.config[ 'toolbar_' + editor.config.toolbar ];
+
+ for ( var r = 0 ; r < toolbar.length ; r++ )
+ {
+ var toolbarId,
+ toolbarObj = 0,
+ toolbarName,
+ row = toolbar[ r ],
+ items;
+
+ // It's better to check if the row object is really
+ // available because it's a common mistake to leave
+ // an extra comma in the toolbar definition
+ // settings, which leads on the editor not loading
+ // at all in IE. (#3983)
+ if ( !row )
+ continue;
+
+ if ( groupStarted )
+ {
+ output.push( '
' );
+ groupStarted = 0;
+ }
+
+ if ( row === '/' )
+ {
+ output.push( '' );
+ continue;
+ }
+
+ items = row.items || row;
+
+ // Create all items defined for this toolbar.
+ for ( var i = 0 ; i < items.length ; i++ )
+ {
+ var item,
+ itemName = items[ i ],
+ canGroup;
+
+ item = editor.ui.create( itemName );
+
+ if ( item )
+ {
+ canGroup = item.canGroup !== false;
+
+ // Initialize the toolbar first, if needed.
+ if ( !toolbarObj )
+ {
+ // Create the basic toolbar object.
+ toolbarId = CKEDITOR.tools.getNextId();
+ toolbarObj = { id : toolbarId, items : [] };
+ toolbarName = row.name && ( editor.lang.toolbarGroups[ row.name ] || row.name );
+
+ // Output the toolbar opener.
+ output.push( '' );
+
+ // If a toolbar name is available, send the voice label.
+ toolbarName && output.push( '', toolbarName, '' );
+
+ output.push( '' );
+
+ // Add the toolbar to the "editor.toolbox.toolbars"
+ // array.
+ var index = toolbars.push( toolbarObj ) - 1;
+
+ // Create the next/previous reference.
+ if ( index > 0 )
+ {
+ toolbarObj.previous = toolbars[ index - 1 ];
+ toolbarObj.previous.next = toolbarObj;
+ }
+ }
+
+ if ( canGroup )
+ {
+ if ( !groupStarted )
+ {
+ output.push( '' );
+ groupStarted = 1;
+ }
+ }
+ else if ( groupStarted )
+ {
+ output.push( '' );
+ groupStarted = 0;
+ }
+
+ var itemObj = item.render( editor, output );
+ index = toolbarObj.items.push( itemObj ) - 1;
+
+ if ( index > 0 )
+ {
+ itemObj.previous = toolbarObj.items[ index - 1 ];
+ itemObj.previous.next = itemObj;
+ }
+
+ itemObj.toolbar = toolbarObj;
+ itemObj.onkey = itemKeystroke;
+
+ /*
+ * Fix for #3052:
+ * Prevent JAWS from focusing the toolbar after document load.
+ */
+ itemObj.onfocus = function()
+ {
+ if ( !editor.toolbox.focusCommandExecuted )
+ editor.focus();
+ };
+ }
+ }
+
+ if ( groupStarted )
+ {
+ output.push( '' );
+ groupStarted = 0;
+ }
+
+ if ( toolbarObj )
+ output.push( '' );
+ }
+
+ output.push( '' );
+
+ if ( editor.config.toolbarCanCollapse )
+ {
+ var collapserFn = CKEDITOR.tools.addFunction(
+ function()
+ {
+ editor.execCommand( 'toolbarCollapse' );
+ });
+
+ editor.on( 'destroy', function () {
+ CKEDITOR.tools.removeFunction( collapserFn );
+ });
+
+ var collapserId = CKEDITOR.tools.getNextId();
+
+ editor.addCommand( 'toolbarCollapse',
+ {
+ readOnly : 1,
+ exec : function( editor )
+ {
+ var collapser = CKEDITOR.document.getById( collapserId ),
+ toolbox = collapser.getPrevious(),
+ contents = editor.getThemeSpace( 'contents' ),
+ toolboxContainer = toolbox.getParent(),
+ contentHeight = parseInt( contents.$.style.height, 10 ),
+ previousHeight = toolboxContainer.$.offsetHeight,
+ collapsed = !toolbox.isVisible();
+
+ if ( !collapsed )
+ {
+ toolbox.hide();
+ collapser.addClass( 'cke_toolbox_collapser_min' );
+ collapser.setAttribute( 'title', editor.lang.toolbarExpand );
+ }
+ else
+ {
+ toolbox.show();
+ collapser.removeClass( 'cke_toolbox_collapser_min' );
+ collapser.setAttribute( 'title', editor.lang.toolbarCollapse );
+ }
+
+ // Update collapser symbol.
+ collapser.getFirst().setText( collapsed ?
+ '\u25B2' : // BLACK UP-POINTING TRIANGLE
+ '\u25C0' ); // BLACK LEFT-POINTING TRIANGLE
+
+ var dy = toolboxContainer.$.offsetHeight - previousHeight;
+ contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );
+
+ editor.fire( 'resize' );
+ },
+
+ modes : { wysiwyg : 1, source : 1 }
+ } );
+
+ output.push( '',
+ '▲', // BLACK UP-POINTING TRIANGLE
+ '' );
+ }
+
+ event.data.html += output.join( '' );
+ }
+ });
+
+ editor.on( 'destroy', function()
+ {
+ var toolbars, index = 0, i,
+ items, instance;
+ toolbars = this.toolbox.toolbars;
+ for ( ; index < toolbars.length; index++ )
+ {
+ items = toolbars[ index ].items;
+ for ( i = 0; i < items.length; i++ )
+ {
+ instance = items[ i ];
+ if ( instance.clickFn ) CKEDITOR.tools.removeFunction( instance.clickFn );
+ if ( instance.keyDownFn ) CKEDITOR.tools.removeFunction( instance.keyDownFn );
+ }
+ }
+ });
+
+ editor.addCommand( 'toolbarFocus', commands.toolbarFocus );
+
+ editor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} );
+ editor.ui.addHandler( CKEDITOR.UI_SEPARATOR,
+ {
+ create: function()
+ {
+ return {
+ render : function( editor, output )
+ {
+ output.push( '' );
+ return {};
+ }
+ };
+ }
+ });
+ }
+ });
+})();
+
+CKEDITOR.UI_SEPARATOR = 'separator';
+
+/**
+ * The "theme space" to which rendering the toolbar. For the default theme,
+ * the recommended options are "top" and "bottom".
+ * @type String
+ * @default 'top'
+ * @see CKEDITOR.config.theme
+ * @example
+ * config.toolbarLocation = 'bottom';
+ */
+CKEDITOR.config.toolbarLocation = 'top';
+
+/**
+ * The toolbar definition. It is an array of toolbars (strips),
+ * each one being also an array, containing a list of UI items.
+ * Note that this setting is composed by "toolbar_" added by the toolbar name,
+ * which in this case is called "Basic". This second part of the setting name
+ * can be anything. You must use this name in the
+ * {@link CKEDITOR.config.toolbar} setting, so you instruct the editor which
+ * toolbar_(name) setting to you.
+ * @type Array
+ * @example
+ * // Defines a toolbar with only one strip containing the "Source" button, a
+ * // separator and the "Bold" and "Italic" buttons.
+ * config.toolbar_Basic =
+ * [
+ * [ 'Source', '-', 'Bold', 'Italic' ]
+ * ];
+ * config.toolbar = 'Basic';
+ */
+CKEDITOR.config.toolbar_Basic =
+[
+ ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink','-','About']
+];
+
+/**
+ * This is the default toolbar definition used by the editor. It contains all
+ * editor features.
+ * @type Array
+ * @default (see example)
+ * @example
+ * // This is actually the default value.
+ * config.toolbar_Full =
+ * [
+ * { name: 'document', items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+ * { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+ * { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+ * { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+ * '/',
+ * { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+ * { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+ * { name: 'links', items : [ 'Link','Unlink','Anchor' ] },
+ * { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak' ] },
+ * '/',
+ * { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+ * { name: 'colors', items : [ 'TextColor','BGColor' ] },
+ * { name: 'tools', items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+ * ];
+ */
+CKEDITOR.config.toolbar_Full =
+[
+ { name: 'document', items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+ { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+ { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+ { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+ '/',
+ { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+ { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+ { name: 'links', items : [ 'Link','Unlink','Anchor' ] },
+ { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+ '/',
+ { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+ { name: 'colors', items : [ 'TextColor','BGColor' ] },
+ { name: 'tools', items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+];
+
+/**
+ * The toolbox (alias toolbar) definition. It is a toolbar name or an array of
+ * toolbars (strips), each one being also an array, containing a list of UI items.
+ * @type Array|String
+ * @default 'Full'
+ * @example
+ * // Defines a toolbar with only one strip containing the "Source" button, a
+ * // separator and the "Bold" and "Italic" buttons.
+ * config.toolbar =
+ * [
+ * [ 'Source', '-', 'Bold', 'Italic' ]
+ * ];
+ * @example
+ * // Load toolbar_Name where Name = Basic.
+ * config.toolbar = 'Basic';
+ */
+CKEDITOR.config.toolbar = 'Full';
+
+/**
+ * Whether the toolbar can be collapsed by the user. If disabled, the collapser
+ * button will not be displayed.
+ * @type Boolean
+ * @default true
+ * @example
+ * config.toolbarCanCollapse = false;
+ */
+CKEDITOR.config.toolbarCanCollapse = true;
+
+/**
+ * Whether the toolbar must start expanded when the editor is loaded.
+ * @name CKEDITOR.config.toolbarStartupExpanded
+ * @type Boolean
+ * @default true
+ * @example
+ * config.toolbarStartupExpanded = false;
+ */
+
+/**
+ * When enabled, makes the arrow keys navigation cycle within the current
+ * toolbar group. Otherwise the arrows will move trought all items available in
+ * the toolbar. The TAB key will still be used to quickly jump among the
+ * toolbar groups.
+ * @name CKEDITOR.config.toolbarGroupCycling
+ * @since 3.6
+ * @type Boolean
+ * @default true
+ * @example
+ * config.toolbarGroupCycling = false;
+ */