src/cm/media/js/lib/yui/yui_3.10.3/build/exec-command/exec-command.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('exec-command', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
     * Plugin for the frame module to handle execCommands for Editor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
     * @class Plugin.ExecCommand
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
     * @extends Base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
     * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
     * @module editor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
     * @submodule exec-command
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
        var ExecCommand = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
            ExecCommand.superclass.constructor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        * This method is meant to normalize IE's in ability to exec the proper command on elements with CSS styling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
        * @method fixIETags
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
        * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
        * @param {String} cmd The command to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
        * @param {String} tag The tag to create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        * @param {String} rule The rule that we are looking for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        fixIETags = function(cmd, tag, rule) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
            var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
                doc = inst.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
                sel = doc.selection.createRange(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
                o = doc.queryCommandValue(cmd),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
                html, reg, m, p, d, s, c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
            if (o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
                html = sel.htmlText;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
                reg = new RegExp(rule, 'g');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
                m = html.match(reg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
                    html = html.replace(rule + ';', '').replace(rule, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
                    sel.pasteHTML('<var id="yui-ie-bs">');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
                    p = doc.getElementById('yui-ie-bs');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
                    d = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
                    s = doc.createElement(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
                    d.innerHTML = html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
                    if (p.parentNode !== inst.config.doc.body) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
                        p = p.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
                    c = d.childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
                    p.parentNode.replaceChild(s, p);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
                    Y.each(c, function(f) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
                        s.appendChild(f);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
                    sel.collapse();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
                    if (sel.moveToElementText) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
                        sel.moveToElementText(s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
                    sel.select();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
            this._command(cmd);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
        Y.extend(ExecCommand, Y.Base, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
            * An internal reference to the keyCode of the last key that was pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
            * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
            * @property _lastKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            _lastKey: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
            * An internal reference to the instance of the frame plugged into.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
            * @property _inst
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            _inst: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
            * Execute a command on the frame's document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
            * @method command
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
            * @param {String} action The action to perform (bold, italic, fontname)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
            * @param {String} value The optional value (helvetica)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            * @return {Node/NodeList} Should return the Node/Nodelist affected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            command: function(action, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
                var fn = ExecCommand.COMMANDS[action];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
                if (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
                    return fn.call(this, action, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
                    return this._command(action, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            * The private version of execCommand that doesn't filter for overrides.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
            * @method _command
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
            * @param {String} action The action to perform (bold, italic, fontname)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
            * @param {String} value The optional value (helvetica)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
            _command: function(action, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                var inst = this.getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
                    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
                        inst.config.doc.execCommand('styleWithCSS', null, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
                    } catch (e1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
                        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
                            inst.config.doc.execCommand('useCSS', null, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
                        } catch (e2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
                    inst.config.doc.execCommand(action, null, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            * Get's the instance of YUI bound to the parent frame
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            * @method getInstance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
            * @return {YUI} The YUI instance bound to the parent frame
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            getInstance: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                if (!this._inst) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                    this._inst = this.get('host').getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
                return this._inst;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
            initializer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
                Y.mix(this.get('host'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                    execCommand: function(action, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
                        return this.exec.command(action, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
                    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
                    _execCommand: function(action, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
                        return this.exec._command(action, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
                this.get('host').on('dom:keypress', Y.bind(function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
                    this._lastKey = e.keyCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
                }, this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            _wrapContent: function(str, override) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
                var useP = (this.getInstance().host.editorPara && !override ? true : false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                if (useP) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
                    str = '<p>' + str + '</p>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
                    str = str + '<br>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
                return str;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
        }, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
            * execCommand
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            * @property NAME
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            NAME: 'execCommand',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            * exec
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
            * @property NS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            NS: 'exec',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
            ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
                host: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
                    value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
            * Static object literal of execCommand overrides
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
            * @property COMMANDS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
            COMMANDS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
                * Wraps the content with a new element of type (tag)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
                * @method COMMANDS.wrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
                * @param {String} cmd The command executed: wrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
                * @param {String} tag The tag to wrap the selection with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
                wrap: function(cmd, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
                    var inst = this.getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
                    return (new inst.EditorSelection()).wrapContent(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
                * Inserts the provided HTML at the cursor, should be a single element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
                * @method COMMANDS.inserthtml
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
                * @param {String} cmd The command executed: inserthtml
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                * @param {String} html The html to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
                * @return {Node} Node instance of the item touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
                inserthtml: function(cmd, html) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
                    var inst = this.getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
                    if (inst.EditorSelection.hasCursor() || Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
                        return (new inst.EditorSelection()).insertContent(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
                        this._command('inserthtml', html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
                * Inserts the provided HTML at the cursor, and focuses the cursor afterwards.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
                * @method COMMANDS.insertandfocus
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                * @param {String} cmd The command executed: insertandfocus
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
                * @param {String} html The html to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                * @return {Node} Node instance of the item touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                insertandfocus: function(cmd, html) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
                    var inst = this.getInstance(), out, sel;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
                    if (inst.EditorSelection.hasCursor()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                        html += inst.EditorSelection.CURSOR;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                        out = this.command('inserthtml', html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                        sel = new inst.EditorSelection();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
                        sel.focusCursor(true, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                        this.command('inserthtml', html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
                    return out;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                * Inserts a BR at the current cursor position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
                * @method COMMANDS.insertbr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                * @param {String} cmd The command executed: insertbr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
                insertbr: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
                    var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
                        sel = new inst.EditorSelection(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                        html = '<var>|</var>', last = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                        q = (Y.UA.webkit) ? 'span.Apple-style-span,var' : 'var',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
                        insert = function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
                            var c = inst.Node.create('<br>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
                            n.insert(c, 'before');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
                            return c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
                        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
                    if (sel._selection.pasteHTML) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
                        sel._selection.pasteHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
                        this._command('inserthtml', html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
                    inst.all(q).each(function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
                        var g = true, s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
                        if (Y.UA.webkit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
                            g = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
                            if (n.get('innerHTML') === '|') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
                                g = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
                        if (g) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
                            last = insert(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
                            if ((!last.previous() || !last.previous().test('br')) && Y.UA.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
                                s = last.cloneNode();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
                                last.insert(s, 'after');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
                                last = s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
                            n.remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
                    if (Y.UA.webkit && last) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
                        insert(last);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
                        sel.selectNode(last);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
                * Inserts an image at the cursor position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
                * @method COMMANDS.insertimage
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
                * @param {String} cmd The command executed: insertimage
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
                * @param {String} img The url of the image to be inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
                * @return {Node} Node instance of the item touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
                insertimage: function(cmd, img) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                    return this.command('inserthtml', '<img src="' + img + '">');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
                * Add a class to all of the elements in the selection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
                * @method COMMANDS.addclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
                * @param {String} cmd The command executed: addclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
                * @param {String} cls The className to add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
                addclass: function(cmd, cls) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
                    var inst = this.getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
                    return (new inst.EditorSelection()).getSelected().addClass(cls);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
                * Remove a class from all of the elements in the selection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
                * @method COMMANDS.removeclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
                * @param {String} cmd The command executed: removeclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
                * @param {String} cls The className to remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
                removeclass: function(cmd, cls) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
                    var inst = this.getInstance();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
                    return (new inst.EditorSelection()).getSelected().removeClass(cls);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
                * Adds a forecolor to the current selection, or creates a new element and applies it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
                * @method COMMANDS.forecolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
                * @param {String} cmd The command executed: forecolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                * @param {String} val The color value to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
                forecolor: function(cmd, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
                    var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
                        sel = new inst.EditorSelection(), n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
                    if (!Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
                        this._command('useCSS', false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
                    if (inst.EditorSelection.hasCursor()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
                        if (sel.isCollapsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
                            if (sel.anchorNode && (sel.anchorNode.get('innerHTML') === '&nbsp;')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
                                sel.anchorNode.setStyle('color', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
                                n = sel.anchorNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
                                n = this.command('inserthtml', '<span style="color: ' + val + '">' + inst.EditorSelection.CURSOR + '</span>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
                                sel.focusCursor(true, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
                            return n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
                            return this._command(cmd, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
                        this._command(cmd, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
                * Adds a background color to the current selection, or creates a new element and applies it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
                * @method COMMANDS.backcolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                * @param {String} cmd The command executed: backcolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                * @param {String} val The color value to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
                backcolor: function(cmd, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
                    var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                        sel = new inst.EditorSelection(), n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                    if (Y.UA.gecko || Y.UA.opera) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
                        cmd = 'hilitecolor';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
                    if (!Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
                        this._command('useCSS', false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
                    if (inst.EditorSelection.hasCursor()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
                        if (sel.isCollapsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                            if (sel.anchorNode && (sel.anchorNode.get('innerHTML') === '&nbsp;')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                                sel.anchorNode.setStyle('backgroundColor', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                                n = sel.anchorNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                                n = this.command('inserthtml',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
                                    '<span style="background-color: ' + val + '">' + inst.EditorSelection.CURSOR + '</span>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
                                sel.focusCursor(true, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
                            return n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
                            return this._command(cmd, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
                        this._command(cmd, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
                * Sugar method, calles backcolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
                * @method COMMANDS.hilitecolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
                * @param {String} cmd The command executed: backcolor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
                * @param {String} val The color value to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
                hilitecolor: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
                    return ExecCommand.COMMANDS.backcolor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
                * Adds a font name to the current selection, or creates a new element and applies it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
                * @method COMMANDS.fontname2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
                * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
                * @param {String} cmd The command executed: fontname
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
                * @param {String} val The font name to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
                fontname2: function(cmd, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                    this._command('fontname', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                    var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
                        sel = new inst.EditorSelection();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                    if (sel.isCollapsed && (this._lastKey !== 32)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
                        if (sel.anchorNode.test('font')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
                            sel.anchorNode.set('face', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
                * Adds a fontsize to the current selection, or creates a new element and applies it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
                * @method COMMANDS.fontsize2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
                * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
                * @param {String} cmd The command executed: fontsize
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
                * @param {String} val The font size to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
                * @return {NodeList} NodeList of the items touched by this command.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
                fontsize2: function(cmd, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
                    this._command('fontsize', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
                    var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
                        sel = new inst.EditorSelection(), p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
                    if (sel.isCollapsed && sel.anchorNode && (this._lastKey !== 32)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
                        if (Y.UA.webkit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
                            if (sel.anchorNode.getStyle('lineHeight')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
                                sel.anchorNode.setStyle('lineHeight', '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
                        if (sel.anchorNode.test('font')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
                            sel.anchorNode.set('size', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
                        } else if (Y.UA.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
                            p = sel.anchorNode.ancestor(inst.EditorSelection.DEFAULT_BLOCK_TAG);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
                            if (p) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
                                p.setStyle('fontSize', '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
                * Overload for COMMANDS.list
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
                * @method COMMANDS.insertorderedlist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
                * @param {String} cmd The command executed: list, ul
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
                insertunorderedlist: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
                    this.command('list', 'ul');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
                * Overload for COMMANDS.list
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
                * @method COMMANDS.insertunorderedlist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
                * @param {String} cmd The command executed: list, ol
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
                insertorderedlist: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
                    this.command('list', 'ol');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
                * Noramlizes lists creation/destruction for IE. All others pass through to native calls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
                * @method COMMANDS.list
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
                * @param {String} cmd The command executed: list (not used)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
                * @param {String} tag The tag to deal with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
                list: function(cmd, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
                    var inst = this.getInstance(), html, self = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
                        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
                        The yui3- class name below is not a skinnable class,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
                        it's a utility class used internally by editor and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
                        stripped when completed, calling getClassName on this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
                        is a waste of resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
                        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
                        DIR = 'dir', cls = 'yui3-touched',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
                        dir, range, div, elm, n, str, s, par, list, lis,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
                        useP = (inst.host.editorPara ? true : false), tmp,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
                        sdir, hasPParent, fc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
                        sel = new inst.EditorSelection();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
                    cmd = 'insert' + ((tag === 'ul') ? 'un' : '') + 'orderedlist';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
                    if (Y.UA.ie && !sel.isCollapsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
                        range = sel._selection;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
                        html = range.htmlText;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
                        div = inst.Node.create(html) || inst.one('body');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
                        if (div.test('li') || div.one('li')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
                            this._command(cmd, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
                            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
                        if (div.test(tag)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
                            elm = range.item ? range.item(0) : range.parentElement();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
                            n = inst.one(elm);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
                            lis = n.all('li');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
                            str = '<div>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
                            lis.each(function(l) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
                                str = self._wrapContent(l.get('innerHTML'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
                            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
                            str += '</div>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
                            s = inst.Node.create(str);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
                            if (n.get('parentNode').test('div')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
                                n = n.get('parentNode');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
                            if (n && n.hasAttribute(DIR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
                                if (useP) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
                                    s.all('p').setAttribute(DIR, n.getAttribute(DIR));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
                                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
                                    s.setAttribute(DIR, n.getAttribute(DIR));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
                            if (useP) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
                                n.replace(s.get('innerHTML'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
                                n.replace(s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
                            if (range.moveToElementText) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
                                range.moveToElementText(s._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
                            range.select();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
                            par = Y.one(range.parentElement());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
                            if (!par.test(inst.EditorSelection.BLOCKS)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
                                par = par.ancestor(inst.EditorSelection.BLOCKS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
                            if (par) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
                                if (par.hasAttribute(DIR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
                                    dir = par.getAttribute(DIR);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
                            if (html.indexOf('<br>') > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
                                html = html.split(/<br>/i);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
                                tmp = inst.Node.create(html),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
                                ps = tmp ? tmp.all('p') : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
                                if (ps && ps.size()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
                                    html = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
                                    ps.each(function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
                                        html.push(n.get('innerHTML'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
                                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
                                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
                                    html = [html];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
                            list = '<' + tag + ' id="ie-list">';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
                            Y.each(html, function(v) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
                                var a = inst.Node.create(v);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
                                if (a && a.test('p')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
                                    if (a.hasAttribute(DIR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
                                        dir = a.getAttribute(DIR);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
                                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
                                    v = a.get('innerHTML');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
                                list += '<li>' + v + '</li>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
                            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
                            list += '</' + tag + '>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
                            range.pasteHTML(list);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
                            elm = inst.config.doc.getElementById('ie-list');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
                            elm.id = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
                            if (dir) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
                                elm.setAttribute(DIR, dir);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
                            if (range.moveToElementText) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
                                range.moveToElementText(elm);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
                            range.select();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
                    } else if (Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
                        par = inst.one(sel._selection.parentElement());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
                        if (par.test('p')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
                            if (par && par.hasAttribute(DIR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
                                dir = par.getAttribute(DIR);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
                            html = Y.EditorSelection.getText(par);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
                            if (html === '') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
                                sdir = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
                                if (dir) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
                                    sdir = ' dir="' + dir + '"';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
                                list = inst.Node.create(Y.Lang.sub('<{tag}{dir}><li></li></{tag}>', { tag: tag, dir: sdir }));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
                                par.replace(list);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
                                sel.selectNode(list.one('li'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
                                this._command(cmd, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
                            this._command(cmd, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
                        inst.all(tag).addClass(cls);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
                        if (sel.anchorNode.test(inst.EditorSelection.BLOCKS)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
                            par = sel.anchorNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
                            par = sel.anchorNode.ancestor(inst.EditorSelection.BLOCKS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
                        if (!par) { //No parent, find the first block under the anchorNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
                            par = sel.anchorNode.one(inst.EditorSelection.BLOCKS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
                        if (par && par.hasAttribute(DIR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
                            dir = par.getAttribute(DIR);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
                        if (par && par.test(tag)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
                            hasPParent = par.ancestor('p');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
                            html = inst.Node.create('<div/>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
                            elm = par.all('li');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
                            elm.each(function(h) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
                                html.append(self._wrapContent(h.get('innerHTML'), hasPParent));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
                            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
                            if (dir) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
                                if (useP) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
                                    html.all('p').setAttribute(DIR, dir);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
                                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
                                    html.setAttribute(DIR, dir);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
                            if (useP) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
                                html = inst.Node.create(html.get('innerHTML'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
                            fc = html.get('firstChild');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
                            par.replace(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
                            sel.selectNode(fc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
                            this._command(cmd, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
                        list = inst.all(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
                        if (dir) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
                            if (list.size()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
                                //Changed to a List
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
                                list.each(function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
                                    if (!n.hasClass(cls)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
                                        n.setAttribute(DIR, dir);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
                                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
                                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
                        list.removeClass(cls);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
                * Noramlizes alignment for Webkit Browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
                * @method COMMANDS.justify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
                * @param {String} cmd The command executed: justify (not used)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
                * @param {String} val The actual command from the justify{center,all,left,right} stubs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
                justify: function(cmd, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
                    if (Y.UA.webkit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
                        var inst = this.getInstance(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
                            sel = new inst.EditorSelection(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
                            aNode = sel.anchorNode, html,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
                            bgColor = aNode.getStyle('backgroundColor');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
                            this._command(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
                            sel = new inst.EditorSelection();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
                            if (sel.anchorNode.test('div')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
                                html = '<span>' + sel.anchorNode.get('innerHTML') + '</span>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
                                sel.anchorNode.set('innerHTML', html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
                                sel.anchorNode.one('span').setStyle('backgroundColor', bgColor);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
                                sel.selectNode(sel.anchorNode.one('span'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
                        this._command(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
                * Override method for COMMANDS.justify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
                * @method COMMANDS.justifycenter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
                justifycenter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
                    this.command('justify', 'justifycenter');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
                * Override method for COMMANDS.justify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
                * @method COMMANDS.justifyleft
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
                justifyleft: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
                    this.command('justify', 'justifyleft');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
                * Override method for COMMANDS.justify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
                * @method COMMANDS.justifyright
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
                justifyright: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
                    this.command('justify', 'justifyright');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
                /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
                * Override method for COMMANDS.justify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
                * @method COMMANDS.justifyfull
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
                * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
                justifyfull: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
                    this.command('justify', 'justifyfull');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
        if (Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
            ExecCommand.COMMANDS.bold = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
                fixIETags.call(this, 'bold', 'b', 'FONT-WEIGHT: bold');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
            ExecCommand.COMMANDS.italic = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
                fixIETags.call(this, 'italic', 'i', 'FONT-STYLE: italic');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
            ExecCommand.COMMANDS.underline = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
                fixIETags.call(this, 'underline', 'u', 'TEXT-DECORATION: underline');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
        Y.namespace('Plugin');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
        Y.Plugin.ExecCommand = ExecCommand;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
}, '3.10.3', {"requires": ["frame"]});