Creating and using custom ExecCommands.
Clicking on one of the buttons below will execute a custom execCommand
on the Editor.
Working with EditorBase
EditorBase
is not a fully functional Editor, it is simply the base utility that will be used under the hood to create an Editor.
Creating the Editor
In this step we are going to do the initial render of the Editor, set its content, and focus it when it's ready.
YUI().use('editor', function(Y) { //Create the Base Editor var editor = new Y.EditorBase({ content: '<p><b>This is <i class="foo">a test</i></b></p><p><b style="color: red; font-family: Comic Sans MS">This is <span class="foo">a test</span></b></p>', extracss: '.foo { font-weight: normal; color: black; background-color: yellow; }' }); //Rendering the Editor. editor.render('#editor'); });
Registering a new execCommand
ExecCommand overrides are stored on the execCommand
plugin. This way, you can write a plugin for Editor and have it available
to all Editor instances in your sandbox.
To create a new execCommand, we simply add an object literal to the Y.Plugin.ExecCommand.COMMANDS
static object like this:
Y.mix(Y.Plugin.ExecCommand.COMMANDS, { foo: function(cmd, val) { logFn('You clicked on Foo'); var inst = this.getInstance(); inst.one('body').setStyle('backgroundColor', 'yellow'); } });
Now we can use this new command like:
editor.execCommand('foo');
Full Example Source
HTML
<p>Clicking on one of the buttons below will execute a custom <code>execCommand</code> on the Editor.</p> <div id="editor_cont"> <div id="buttons"> <button id="foo">Foo Command</button> <button id="bar">Bar Command</button> <button id="baz">Baz Command</button> </div> <div id="editor"></div> <div id="out"> </div> </div>
CSS
#editor_cont { width: 600px; border: 1px solid #999; margin: 2em; background-color: #f2f2f2; } #editor { height: 265px; background-color: #fff; } #buttons, #out { padding: 10px; } #buttons { border-bottom: 1px solid #999; } #out { font-weight: bold; border-top: 1px solid #999; }
Javascript
YUI().use('editor', function(Y) { var logFn = function(str) { Y.one('#out').set('innerHTML', str); }; //Create the Base Editor var editor = new Y.EditorBase({ content: '<p><b>This is <i class="foo">a test</i></b></p><p><b style="color: red; font-family: Comic Sans MS">This is <span class="foo">a test</span></b></p>', extracss: '.foo { font-weight: normal; color: black; background-color: yellow; }' }); //Mixin the new commands Y.mix(Y.Plugin.ExecCommand.COMMANDS, { foo: function(cmd, val) { logFn('You clicked on Foo'); var inst = this.getInstance(); inst.one('body').setStyle('backgroundColor', 'yellow'); }, bar: function(cmd, val) { logFn('You clicked on Bar'); var inst = this.getInstance(); inst.one('body').setStyle('backgroundColor', 'green'); }, baz: function(cmd, val) { logFn('You clicked on Baz'); var inst = this.getInstance(); inst.one('body').setStyle('backgroundColor', 'blue'); } }); //Rendering the Editor. editor.render('#editor'); Y.delegate('click', function(e) { editor.execCommand(e.target.get('id')); }, '#buttons', 'button'); });