/**
* @ignore
* link editor support for kissy editor ,innovation from google doc and ckeditor
* @author yiminghe@gmail.com
*/
KISSY.add("editor/plugin/link", function (S, Editor, Bubble, Utils, DialogLoader) {
var $ = S.all,
tipHTML = '<a ' +
'href="" '
+ ' target="_blank" ' +
'class="{prefixCls}editor-bubble-url">' +
'在新窗口查看' +
'</a> – '
+ ' <span ' +
'class="{prefixCls}editor-bubble-link {prefixCls}editor-bubble-change">' +
'编辑' +
'</span> | '
+ ' <span ' +
'class="{prefixCls}editor-bubble-link {prefixCls}editor-bubble-remove">' +
'去除' +
'</span>';
function checkLink(lastElement) {
lastElement = $(lastElement);
return lastElement.closest('a', undefined);
}
function LinkPlugin(config) {
this.config = config || {};
}
S.augment(LinkPlugin, {
pluginRenderUI: function (editor) {
var prefixCls = editor.get('prefixCls');
editor.addButton("link", {
tooltip: "插入链接",
listeners: {
click: function () {
showLinkEditDialog();
}
},
mode: Editor.Mode.WYSIWYG_MODE
});
var self = this;
function showLinkEditDialog(selectedEl) {
DialogLoader.useDialog(editor, "link",
self.config,
selectedEl);
}
editor.addBubble("link", checkLink, {
listeners: {
afterRenderUI: function () {
var bubble = this,
el = bubble.get("contentEl");
el.html(S.substitute(tipHTML, {
prefixCls: prefixCls
}));
var tipUrl = el.one("." + prefixCls + "editor-bubble-url"),
tipChange = el.one("." + prefixCls + "editor-bubble-change"),
tipRemove = el.one("." + prefixCls + "editor-bubble-remove");
//ie focus not lose
Editor.Utils.preventFocus(el);
tipChange.on("click", function (ev) {
showLinkEditDialog(bubble.get("editorSelectedEl"));
ev.halt();
});
tipRemove.on("click", function (ev) {
Utils.removeLink(editor, bubble.get("editorSelectedEl"));
ev.halt();
});
bubble.on("show", function () {
var a = bubble.get("editorSelectedEl");
if (!a) {
return;
}
var href = a.attr(Utils._ke_saved_href) ||
a.attr("href");
tipUrl.html(href);
tipUrl.attr("href", href);
});
}
}
});
}
});
return LinkPlugin;
}, {
requires: ['editor', './bubble',
'./link/utils', './dialog-loader', './button']
});