2009-10-10 00:15:12 -07:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
2010-04-26 18:15:27 -07:00
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
2009-10-10 00:15:12 -07:00
For licensing, see LICENSE.html or http://ckeditor.com/license
-->
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
2010-04-26 18:15:27 -07:00
< title > Using API to customize dialogs - CKEditor Sample< / title >
< meta content = "text/html; charset=utf-8" http-equiv = "content-type" / >
2009-10-10 00:15:12 -07:00
< script type = "text/javascript" src = "../ckeditor.js" > < / script >
< script src = "sample.js" type = "text/javascript" > < / script >
2010-04-26 18:15:27 -07:00
< link href = "sample.css" rel = "stylesheet" type = "text/css" / >
2009-10-10 00:15:12 -07:00
< style id = "styles" type = "text/css" >
2010-04-26 18:15:27 -07:00
.cke_button_myDialogCmd .cke_icon
{
display: none !important;
}
2009-10-10 00:15:12 -07:00
2010-04-26 18:15:27 -07:00
.cke_button_myDialogCmd .cke_label
{
display: inline !important;
}
2009-10-10 00:15:12 -07:00
< / style >
2010-04-26 18:15:27 -07:00
< script type = "text/javascript" >
2009-10-10 00:15:12 -07:00
//< ![CDATA[
// When opening a dialog, its "definition" is created for it, for
// each editor instance. The "dialogDefinition" event is then
// fired. We should use this event to make customizations to the
// definition of existing dialogs.
CKEDITOR.on( 'dialogDefinition', function( ev )
{
// Take the dialog name and its definition from the event
// data.
var dialogName = ev.data.name;
var dialogDefinition = ev.data.definition;
// Check if the definition is from the dialog we're
// interested on (the "Link" dialog).
if ( dialogName == 'link' )
{
// Get a reference to the "Link Info" tab.
var infoTab = dialogDefinition.getContents( 'info' );
// Add a text field to the "info" tab.
infoTab.add( {
type : 'text',
label : 'My Custom Field',
id : 'customField',
'default' : 'Sample!',
validate : function()
{
if ( /\d/.test( this.getValue() ) )
return 'My Custom Field must not contain digits';
}
});
// Remove the "Link Type" combo and the "Browser
// Server" button from the "info" tab.
infoTab.remove( 'linkType' );
infoTab.remove( 'browse' );
// Set the default value for the URL field.
var urlField = infoTab.get( 'url' );
urlField['default'] = 'www.example.com';
// Remove the "Target" tab from the "Link" dialog.
dialogDefinition.removeContents( 'target' );
// Add a new tab to the "Link" dialog.
dialogDefinition.addContents({
id : 'customTab',
label : 'My Tab',
accessKey : 'M',
elements : [
{
id : 'myField1',
type : 'text',
label : 'My Text Field'
},
{
id : 'myField2',
type : 'text',
label : 'Another Text Field'
}
]
});
}
});
//]]>
< / script >
2010-04-26 18:15:27 -07:00
2009-10-10 00:15:12 -07:00
< / head >
< body >
< h1 >
CKEditor Sample
< / h1 >
<!-- This <div> holds alert messages to be display in the sample page. -->
< div id = "alerts" >
< noscript >
< p >
< strong > CKEditor requires JavaScript to run< / strong > . In a browser with no JavaScript
support, like yours, you should still see the contents (HTML data) and you should
be able to edit it normally, without a rich editor interface.
< / p >
< / noscript >
< / div >
<!-- This <fieldset> holds the HTML that you will usually find in your
pages. -->
< p >
2010-04-26 18:15:27 -07:00
This sample shows how to use the dialog API to customize dialogs whithout changing
the original editor code. The following customizations are being done::< / p >
< ol >
< li > < strong > Add dialog pages< / strong > ("My Tab" in the Link dialog).< / li >
< li > < strong > Remove a dialog tab< / strong > ("Target" tab from the Link dialog).< / li >
< li > < strong > Add dialog fields< / strong > ("My Custom Field" into the Link dialog).< / li >
< li > < strong > Remove dialog fields< / strong > ("Link Type" and "Browser Server" the Link
dialog).< / li >
< li > < strong > Set default values for dialog fields< / strong > (for the "URL" field in the
Link dialog). < / li >
< li > < strong > Create a custom dialog< / strong > ("My Dialog" button).< / li >
< / ol >
< textarea cols = "80" id = "editor1" name = "editor1" rows = "10" > < p> This is some < strong> sample text< /strong> . You are using < a href="http://ckeditor.com/"> CKEditor< /a> .< /p> < / textarea >
< script type = "text/javascript" >
2009-10-10 00:15:12 -07:00
//< ![CDATA[
// Replace the < textarea id = "editor1" > with an CKEditor instance.
var editor = CKEDITOR.replace( 'editor1',
{
// Defines a simpler toolbar to be used in this sample.
// Note that we have added out "MyButton" button here.
toolbar : [ [ 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike','-','Link', '-', 'MyButton' ] ]
});
// Listen for the "pluginsLoaded" event, so we are sure that the
// "dialog" plugin has been loaded and we are able to do our
// customizations.
editor.on( 'pluginsLoaded', function( ev )
{
// If our custom dialog has not been registered, do that now.
if ( !CKEDITOR.dialog.exists( 'myDialog' ) )
{
// We need to do the following trick to find out the dialog
// definition file URL path. In the real world, you would simply
// point to an absolute path directly, like "/mydir/mydialog.js".
var href = document.location.href.split( '/' );
href.pop();
href.push( 'api_dialog', 'my_dialog.js' );
href = href.join( '/' );
// Finally, register the dialog.
CKEDITOR.dialog.add( 'myDialog', href );
}
// Register the command used to open the dialog.
editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) );
// Add the a custom toolbar buttons, which fires the above
// command..
editor.ui.addButton( 'MyButton',
{
label : 'My Dialog',
command : 'myDialogCmd'
} );
});
//]]>
2010-04-26 18:15:27 -07:00
< / script >
2009-10-10 00:15:12 -07:00
< div id = "footer" >
2010-04-26 18:15:27 -07:00
< hr / >
2009-10-10 00:15:12 -07:00
< p >
2010-04-26 18:15:27 -07:00
CKEditor - The text editor for Internet - < a href = "http://ckeditor.com/" > http://ckeditor.com< / a >
2009-10-10 00:15:12 -07:00
< / p >
< p id = "copy" >
2010-04-26 18:15:27 -07:00
Copyright © 2003-2010, < a href = "http://cksource.com/" > CKSource< / a > - Frederico
Knabben. All rights reserved.
2009-10-10 00:15:12 -07:00
< / p >
< / div >
< / body >
< / html >