/**
 * 锚点插件，为UEditor提供插入锚点支持
 * @file
 * @since 1.2.6.1
 */
UE.plugin.register("anchor", function () {
    var me = this;
    return {
        bindEvents: {
            ready: function () {
                utils.cssRule(
                    "anchor",
                    ".anchorclass{background: url('" +
                    this.options.themePath +
                    this.options.theme +
                    "/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 16px;}",
                    this.document
                );
            }
        },
        outputRule: function (root) {
            utils.each(root.getNodesByTagName("img"), function (a) {
                var val;
                if ((val = a.getAttr("anchorname"))) {
                    a.tagName = "a";
                    a.setAttr({
                        anchorname: "",
                        name: val,
                        class: ""
                    });
                }
            });
        },
        inputRule: function (root) {
            utils.each(root.getNodesByTagName("a"), function (a) {
                var val;
                if ((val = a.getAttr("name")) && !a.getAttr("href")) {
                    //过滤掉word冗余标签
                    //_Toc\d+有可能勿命中
                    if (/^\_Toc\d+$/.test(val)) {
                        a.parentNode.removeChild(a);
                        return;
                    }
                    a.tagName = "img";
                    a.setAttr({
                        anchorname: a.getAttr("name"),
                        class: "anchorclass"
                    });
                    a.setAttr("name");
                }
            });
        },
        commands: {
            /**
             * 插入锚点
             * @command anchor
             * @method execCommand
             * @param { String } cmd 命令字符串
             * @param { String } name 锚点名称字符串
             * @example
             * ```javascript
             * //editor 是编辑器实例
             * editor.execCommand('anchor', 'anchor1');
             * ```
             */
            anchor: {
                execCommand: function (cmd, name) {
                    var range = this.selection.getRange(),
                        img = range.getClosedNode();

                    if (img && img.getAttribute("anchorname")) {
                        if (name) {
                            img.setAttribute("anchorname", name);
                        } else {
                            range.setStartBefore(img).setCursor();
                            domUtils.remove(img);
                        }
                    } else {
                        if (name) {
                            //只在选区的开始插入
                            var anchor = utils.renderTplstr('<img anchorname="${name}" class="anchorclass"></img>', {
                                name: name
                            });
                            me.execCommand("inserthtml", anchor, true);
                        }
                    }
                }
            }
        }
    };
});
