Version 3.18.1
Show:

File: editor/js/createlink-base.js

            
                /**
                 * Adds prompt style link creation. Adds an override for the
                 * <a href="Plugin.ExecCommand.html#method_COMMANDS.createlink">createlink execCommand</a>.
                 * @class Plugin.CreateLinkBase
                 * @static
                 * @submodule createlink-base
                 * @module editor
                 */
            
                var CreateLinkBase = {};
                /**
                * Strings used by the plugin
                * @property STRINGS
                * @static
                */
                CreateLinkBase.STRINGS = {
                        /**
                        * String used for the Prompt
                        * @property PROMPT
                        * @static
                        */
                        PROMPT: 'Please enter the URL for the link to point to:',
                        /**
                        * String used as the default value of the Prompt
                        * @property DEFAULT
                        * @static
                        */
                        DEFAULT: 'http://'
                };
            
                Y.namespace('Plugin');
                Y.Plugin.CreateLinkBase = CreateLinkBase;
            
                Y.mix(Y.Plugin.ExecCommand.COMMANDS, {
                    /**
                    * Override for the createlink method from the <a href="Plugin.CreateLinkBase.html">CreateLinkBase</a> plugin.
                    * @for Plugin.ExecCommand.COMMANDS
                    * @method createlink
                    * @static
                    * @param {String} cmd The command executed: createlink
                    * @return {Node} Node instance of the item touched by this command.
                    */
                    createlink: function(cmd) {
                        var inst = this.get('host').getInstance(), out, a, sel, holder,
                            url = prompt(CreateLinkBase.STRINGS.PROMPT, CreateLinkBase.STRINGS.DEFAULT);
            
                        if (url) {
                            holder = inst.config.doc.createElement('div');
                            url = url.replace(/"/g, '').replace(/'/g, ''); //Remove single & double quotes
                            url = inst.config.doc.createTextNode(url);
                            holder.appendChild(url);
                            url = holder.innerHTML;
            
                            Y.log('Adding link: ' + url, 'info', 'createLinkBase');
            
                            this.get('host')._execCommand(cmd, url);
                            sel = new inst.EditorSelection();
                            out = sel.getSelected();
                            if (!sel.isCollapsed && out.size()) {
                                //We have a selection
                                a = out.item(0).one('a');
                                if (a) {
                                    out.item(0).replace(a);
                                }
                                if (Y.UA.gecko) {
                                    if (a.get('parentNode').test('span')) {
                                        if (a.get('parentNode').one('br.yui-cursor')) {
                                            a.get('parentNode').insert(a, 'before');
                                        }
                                    }
                                }
                            } else {
                                //No selection, insert a new node..
                                this.get('host').execCommand('inserthtml', '<a href="' + url + '">' + url + '</a>');
                            }
                        }
                        return a;
                    }
                });