exec-command.js revision e57824e27f47a76dae7b14c6ff1c7ed1186d16c1
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Plugin for the frame module to handle execCommands for Editor
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @module editor
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @submodule exec-command
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Plugin for the frame module to handle execCommands for Editor
daeb6d531149c45a2ceb543ae2cf1e56e5235bbeDav Glass * @class Plugin.ExecCommand
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @extends Base
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @constructor
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var ExecCommand = function() {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass ExecCommand.superclass.constructor.apply(this, arguments);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass };
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.extend(ExecCommand, Y.Base, {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass /**
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * An internal reference to the keyCode of the last key that was pressed.
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @private
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @property _lastKey
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass */
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass _lastKey: null,
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * An internal reference to the instance of the frame plugged into.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @private
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property _inst
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass _inst: null,
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Execute a command on the frame's document.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method command
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} action The action to perform (bold, italic, fontname)
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} value The optional value (helvetica)
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {Node/NodeList} Should return the Node/Nodelist affected
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass command: function(action, value) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var fn = ExecCommand.COMMANDS[action];
96c1e6aab172b57cf3566abee931c26676990044Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.log('execCommand(' + action + '): "' + value + '"', 'info', 'exec-command');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (fn) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return fn.call(this, action, value);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass } else {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return this._command(action, value);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * The private version of execCommand that doesn't filter for overrides.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @private
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method _command
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} action The action to perform (bold, italic, fontname)
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} value The optional value (helvetica)
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass _command: function(action, value) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var inst = this.getInstance();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass try {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass try {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass inst.config.doc.execCommand('styleWithCSS', null, 1);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass } catch (e1) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass try {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass inst.config.doc.execCommand('useCSS', null, 0);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass } catch (e2) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.log('Internal execCommand(' + action + '): "' + value + '"', 'info', 'exec-command');
905f59668fbc4df1a3acb1e28f2629ae57fd216cDav Glass inst.config.doc.execCommand(action, null, value);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass } catch (e) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.log(e.message, 'error', 'exec-command');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Get's the instance of YUI bound to the parent frame
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method getInstance
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {YUI} The YUI instance bound to the parent frame
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass getInstance: function() {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (!this._inst) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass this._inst = this.get('host').getInstance();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return this._inst;
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass initializer: function() {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.mix(this.get('host'), {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass execCommand: function(action, value) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return this.exec.command(action, value);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass _execCommand: function(action, value) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return this.exec._command(action, value);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass });
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass this.get('host').on('dom:keypress', Y.bind(function(e) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass this._lastKey = e.keyCode;
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass }, this));
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }, {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * execCommand
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property NAME
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass NAME: 'execCommand',
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * exec
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property NS
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass NS: 'exec',
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass ATTRS: {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass host: {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass value: false
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Static object literal of execCommand overrides
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property COMMANDS
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass COMMANDS: {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Wraps the content with a new element of type (tag)
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method COMMANDS.wrap
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cmd The command executed: wrap
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} tag The tag to wrap the selection with
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {NodeList} NodeList of the items touched by this command.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass wrap: function(cmd, tag) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var inst = this.getInstance();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return (new inst.Selection()).wrapContent(tag);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Inserts the provided HTML at the cursor, should be a single element.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method COMMANDS.inserthtml
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cmd The command executed: inserthtml
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} html The html to insert
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {Node} Node instance of the item touched by this command.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass inserthtml: function(cmd, html) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var inst = this.getInstance();
905f59668fbc4df1a3acb1e28f2629ae57fd216cDav Glass if (inst.Selection.hasCursor() || Y.UA.ie) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass return (new inst.Selection()).insertContent(html);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass this._command('inserthtml', html);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * Inserts the provided HTML at the cursor, and focuses the cursor afterwards.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @method COMMANDS.insertandfocus
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @static
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} cmd The command executed: insertandfocus
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} html The html to insert
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @return {Node} Node instance of the item touched by this command.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass */
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass insertandfocus: function(cmd, html) {
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass var inst = this.getInstance(), out, sel;
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (inst.Selection.hasCursor()) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass html += inst.Selection.CURSOR;
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass out = this.command('inserthtml', html);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel = new inst.Selection();
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel.focusCursor(true, true);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass this.command('inserthtml', html);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass }
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass return out;
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass },
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass /**
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass * Inserts a BR at the current cursor position
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass * @method COMMANDS.insertbr
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass * @static
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass * @param {String} cmd The command executed: insertbr
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass */
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass insertbr: function(cmd) {
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass var inst = this.getInstance(), cur,
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass sel = new inst.Selection();
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass sel.setCursor();
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass cur = sel.getCursor();
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass cur.insert('<br>', 'before');
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass sel.focusCursor(true, false);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass return ((cur && cur.previous) ? cur.previous() : null);
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass },
9002d9b85f99bb503c702f12a20f829f732d22f8Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Inserts an image at the cursor position
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method COMMANDS.insertimage
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cmd The command executed: insertimage
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} img The url of the image to be inserted
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {Node} Node instance of the item touched by this command.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass insertimage: function(cmd, img) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return this.command('inserthtml', '<img src="' + img + '">');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Add a class to all of the elements in the selection
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method COMMANDS.addclass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cmd The command executed: addclass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cls The className to add
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {NodeList} NodeList of the items touched by this command.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass addclass: function(cmd, cls) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var inst = this.getInstance();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return (new inst.Selection()).getSelected().addClass(cls);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Remove a class from all of the elements in the selection
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method COMMANDS.removeclass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cmd The command executed: removeclass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {String} cls The className to remove
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @return {NodeList} NodeList of the items touched by this command.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass removeclass: function(cmd, cls) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var inst = this.getInstance();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass return (new inst.Selection()).getSelected().removeClass(cls);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass /**
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * Adds a forecolor to the current selection, or creates a new element and applies it
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @method COMMANDS.forecolor
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @static
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @param {String} cmd The command executed: forecolor
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} val The color value to apply
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @return {NodeList} NodeList of the items touched by this command.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass */
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass forecolor: function(cmd, val) {
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass var inst = this.getInstance(),
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass sel = new inst.Selection(), n;
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass if (!Y.UA.ie) {
aa2ac226ad6e45232f8416eecc99d2165ce74d03Dav Glass this._command('useCSS', false);
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass }
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (inst.Selection.hasCursor()) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (sel.isCollapsed) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (sel.anchorNode && (sel.anchorNode.get('innerHTML') === '&nbsp;')) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel.anchorNode.setStyle('color', val);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass n = sel.anchorNode;
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass n = this.command('inserthtml', '<span style="color: ' + val + '">' + inst.Selection.CURSOR + '</span>');
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel.focusCursor(true, true);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass }
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass return n;
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass return this._command(cmd, val);
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass }
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass this._command(cmd, val);
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass }
58b0694c5cd8077e8c1f73624a56c8880927375fDav Glass },
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass /**
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * Adds a background color to the current selection, or creates a new element and applies it
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @method COMMANDS.backcolor
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @static
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @param {String} cmd The command executed: backcolor
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @param {String} val The color value to apply
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass * @return {NodeList} NodeList of the items touched by this command.
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass backcolor: function(cmd, val) {
f8b3e367f0b400ff8b4feeb35c56d9387a31f9e0Dav Glass var inst = this.getInstance(),
f8b3e367f0b400ff8b4feeb35c56d9387a31f9e0Dav Glass sel = new inst.Selection(), n;
28be365412206244e6767c4375345327b74298b0Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (Y.UA.gecko || Y.UA.opera) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass cmd = 'hilitecolor';
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (!Y.UA.ie) {
6dcd63a9962ebe13f3b428d1f71c51a93c1700cfDav Glass this._command('useCSS', false);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (inst.Selection.hasCursor()) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (sel.isCollapsed) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass if (sel.anchorNode && (sel.anchorNode.get('innerHTML') === '&nbsp;')) {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel.anchorNode.setStyle('backgroundColor', val);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass n = sel.anchorNode;
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass n = this.command('inserthtml', '<span style="background-color: ' + val + '">' + inst.Selection.CURSOR + '</span>');
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass sel.focusCursor(true, true);
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass }
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass return n;
9a68201f57ed1257e4735227620d7ec556fe99e5Dav Glass } else {
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass return this._command(cmd, val);
9a68201f57ed1257e4735227620d7ec556fe99e5Dav Glass }
f8b3e367f0b400ff8b4feeb35c56d9387a31f9e0Dav Glass } else {
6dcd63a9962ebe13f3b428d1f71c51a93c1700cfDav Glass this._command(cmd, val);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass /**
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * Sugar method, calles backcolor
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @method COMMANDS.hilitecolor
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @static
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} cmd The command executed: backcolor
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} val The color value to apply
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @return {NodeList} NodeList of the items touched by this command.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass hilitecolor: function() {
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass return ExecCommand.COMMANDS.backcolor.apply(this, arguments);
bc7d05651658bd1302a26ba8015c432c8b4a1519Dav Glass },
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass /**
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * Adds a font name to the current selection, or creates a new element and applies it
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.fontname2
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @deprecated
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @static
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} cmd The command executed: fontname
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} val The font name to apply
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @return {NodeList} NodeList of the items touched by this command.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass fontname2: function(cmd, val) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass this._command('fontname', val);
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass var inst = this.getInstance(),
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass sel = new inst.Selection();
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass if (sel.isCollapsed && (this._lastKey != 32)) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass if (sel.anchorNode.test('font')) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass sel.anchorNode.set('face', val);
bc05130527c2137971e590e2d5860025ecf00ebbDav Glass }
bc7d05651658bd1302a26ba8015c432c8b4a1519Dav Glass }
bc7d05651658bd1302a26ba8015c432c8b4a1519Dav Glass },
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass /**
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * Adds a fontsize to the current selection, or creates a new element and applies it
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.fontsize2
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @deprecated
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @static
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} cmd The command executed: fontsize
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @param {String} val The font size to apply
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass * @return {NodeList} NodeList of the items touched by this command.
a2621d519886de7d60c30c5a0850f5c17fd2fb36Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass fontsize2: function(cmd, val) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass this._command('fontsize', val);
bc7d05651658bd1302a26ba8015c432c8b4a1519Dav Glass
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass var inst = this.getInstance(),
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass sel = new inst.Selection();
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (sel.isCollapsed && sel.anchorNode && (this._lastKey != 32)) {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (Y.UA.webkit) {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (sel.anchorNode.getStyle('lineHeight')) {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass sel.anchorNode.setStyle('lineHeight', '');
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass if (sel.anchorNode.test('font')) {
20ce20f1b8ee0bcb928f97d3725e77889d5b27aeDav Glass sel.anchorNode.set('size', val);
e04e9b42ef212618f77fd4b0f9a71cab4c55d8a0Dav Glass } else if (Y.UA.gecko) {
96c1e6aab172b57cf3566abee931c26676990044Dav Glass var p = sel.anchorNode.ancestor(inst.Selection.DEFAULT_BLOCK_TAG);
e04e9b42ef212618f77fd4b0f9a71cab4c55d8a0Dav Glass if (p) {
e04e9b42ef212618f77fd4b0f9a71cab4c55d8a0Dav Glass p.setStyle('fontSize', '');
e04e9b42ef212618f77fd4b0f9a71cab4c55d8a0Dav Glass }
bc05130527c2137971e590e2d5860025ecf00ebbDav Glass }
bc7d05651658bd1302a26ba8015c432c8b4a1519Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Overload for COMMANDS.list
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.insertorderedlist
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} cmd The command executed: list, ul
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass insertunorderedlist: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('list', 'ul');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Overload for COMMANDS.list
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.insertunorderedlist
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} cmd The command executed: list, ol
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass insertorderedlist: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('list', 'ol');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Noramlizes lists creation/destruction for IE. All others pass through to native calls
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.list
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} cmd The command executed: list (not used)
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} tag The tag to deal with
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass list: function(cmd, tag) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var inst = this.getInstance(),
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel = new inst.Selection();
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass cmd = 'insert' + ((tag === 'ul') ? 'un' : '') + 'orderedlist';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass if (Y.UA.ie && !sel.isCollapsed) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var range = sel._selection;
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var html = range.htmlText;
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var div = inst.Node.create(html);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass if (div.test(tag)) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var elm = range.item ? range.item(0) : range.parentElement();
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var n = inst.one(elm),
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass lis = n.all('li');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var str = '<div>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass lis.each(function(l) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass str += l.get('innerHTML') + '<br>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass });
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass str += '</div>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var s = inst.Node.create(str);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass if (n.get('parentNode').test('div')) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass n = n.get('parentNode');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass n.replace(s);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass range.moveToElementText(s._node);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass range.select();
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass } else {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass html = html.split(/<br>/i);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var list = '<' + tag + ' id="ie-list">';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass Y.each(html, function(v) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass list += '<li>' + v + '</li>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass });
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass list += '<' + tag + '>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass range.pasteHTML(list);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var el = inst.config.doc.getElementById('ie-list');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass el.id = '';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass range.moveToElementText(el);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass range.select();
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass }
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass } else if (Y.UA.ie) {
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass var p = inst.one(sel._selection.parentElement());
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass if (p.test('p')) {
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass var html = Y.Selection.getText(p);
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass if (html == '') {
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass var l = inst.Node.create(Y.Lang.sub('<{tag}><li></li></{tag}>', { tag: tag }));
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass p.replace(l);
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass sel.selectNode(l.one('li'));
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass }
e57824e27f47a76dae7b14c6ff1c7ed1186d16c1Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass } else {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this._command(cmd, null);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Noramlizes alignment for Webkit Browsers
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.justify
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} cmd The command executed: justify (not used)
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @param {String} val The actual command from the justify{center,all,left,right} stubs
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass justify: function(cmd, val) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass if (Y.UA.webkit) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var inst = this.getInstance(),
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel = new inst.Selection(),
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass aNode = sel.anchorNode;
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var bgColor = aNode.getStyle('backgroundColor');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this._command(val);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel = new inst.Selection();
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass if (sel.anchorNode.test('div')) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass var html = '<span>' + sel.anchorNode.get('innerHTML') + '</span>';
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel.anchorNode.set('innerHTML', html);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel.anchorNode.one('span').setStyle('backgroundColor', bgColor);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass sel.selectNode(sel.anchorNode.one('span'));
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass } else {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this._command(val);
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass }
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Override method for COMMANDS.justify
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.justifycenter
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass justifycenter: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('justify', 'justifycenter');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Override method for COMMANDS.justify
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.justifyleft
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass justifyleft: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('justify', 'justifyleft');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Override method for COMMANDS.justify
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.justifyright
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass justifyright: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('justify', 'justifyright');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass },
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass /**
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * Override method for COMMANDS.justify
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @method COMMANDS.justifyfull
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass * @static
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass */
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass justifyfull: function(cmd) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass this.command('justify', 'justifyfull');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass });
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass /**
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * This method is meant to normalize IE's in ability to exec the proper command on elements with CSS styling.
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * @method fixIETags
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * @protected
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * @param {String} cmd The command to execute
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * @param {String} tag The tag to create
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass * @param {String} rule The rule that we are looking for.
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass */
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass var fixIETags = function(cmd, tag, rule) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass var inst = this.getInstance(),
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass doc = inst.config.doc,
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass sel = doc.selection.createRange(),
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass o = doc.queryCommandValue(cmd),
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass html, reg, m, p, d, s, c;
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass if (o) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass html = sel.htmlText;
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass reg = new RegExp(rule, 'g');
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass m = html.match(reg);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass if (m) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass html = html.replace(rule + ';', '').replace(rule, '');
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass sel.pasteHTML('<var id="yui-ie-bs">');
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass p = doc.getElementById('yui-ie-bs');
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass d = doc.createElement('div');
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass s = doc.createElement(tag);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass d.innerHTML = html;
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass if (p.parentNode !== inst.config.doc.body) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass p = p.parentNode;
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass c = d.childNodes;
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass p.parentNode.replaceChild(s, p);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass Y.each(c, function(f) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass s.appendChild(f);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass });
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass sel.collapse();
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass sel.moveToElementText(s);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass sel.select();
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass this._command(cmd);
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass };
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass if (Y.UA.ie) {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass ExecCommand.COMMANDS.bold = function() {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass fixIETags.call(this, 'bold', 'b', 'FONT-WEIGHT: bold');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass };
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass ExecCommand.COMMANDS.italic = function() {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass fixIETags.call(this, 'italic', 'i', 'FONT-STYLE: italic');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass };
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass ExecCommand.COMMANDS.underline = function() {
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass fixIETags.call(this, 'underline', 'u', 'TEXT-DECORATION: underline');
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass };
052dcc53d425df9224bfc720b2feca1e92903382Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.namespace('Plugin');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.Plugin.ExecCommand = ExecCommand;
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass