You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2863 lines
146 KiB
2863 lines
146 KiB
/*! wangeditor.js 2017-02-26 */
|
|
!function (a) {
|
|
"function" == typeof window.define ? window.define.amd ? window.define("wangEditor", ["jquery"], a) : window.define.cmd ? window.define(function (b, c, d) {
|
|
return a
|
|
}) : a(window.jQuery) : "object" == typeof module && "object" == typeof module.exports ? (require("../css/wangEditor.css"), module.exports = a(require("jquery"))) : a(window.jQuery)
|
|
}(function (a) {
|
|
if (!a || !a.fn || !a.fn.jquery) return void alert("在引用wangEditor.js之前,先引用jQuery,否则无法使用 wangEditor");
|
|
var b = function (b) {
|
|
var c = window.wangEditor;
|
|
c && b(c, a)
|
|
};
|
|
return function (a, b) {
|
|
if (a.wangEditor) return void alert("一个页面不能重复引用 wangEditor.js 或 wangEditor.min.js !!!");
|
|
var c = function (a) {
|
|
"string" == typeof a && (a = "#" + a);
|
|
var c = b(a);
|
|
if (1 === c.length) {
|
|
var d = c[0].nodeName;
|
|
"TEXTAREA" !== d && "DIV" !== d || (this.valueNodeName = d.toLowerCase(), this.$valueContainer = c, this.$prev = c.prev(), this.$parent = c.parent(), this.init())
|
|
}
|
|
};
|
|
c.fn = c.prototype, c.$body = b("body"), c.$document = b(document), c.$window = b(a), c.userAgent = navigator.userAgent, c.getComputedStyle = a.getComputedStyle, c.w3cRange = "function" == typeof document.createRange, c.hostname = location.hostname.toLowerCase(), c.websiteHost = "wangeditor.github.io|www.wangeditor.com|wangeditor.coding.me", c.isOnWebsite = c.websiteHost.indexOf(c.hostname) >= 0, c.docsite = "http://www.kancloud.cn/wangfupeng/wangeditor2/113961", a.wangEditor = c, c.plugin = function (a) {
|
|
c._plugins || (c._plugins = []), "function" == typeof a && c._plugins.push(a)
|
|
}
|
|
}(window, a), b(function (a, b) {
|
|
a.fn.init = function () {
|
|
this.initDefaultConfig(), this.addEditorContainer(), this.addTxt(), this.addMenuContainer(), this.menus = {}, this.commandHooks()
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.ready = function (a) {
|
|
this.readyFns || (this.readyFns = []), this.readyFns.push(a)
|
|
}, a.fn.readyHeadler = function () {
|
|
for (var a = this.readyFns; a.length;) a.shift().call(this)
|
|
}, a.fn.updateValue = function () {
|
|
var a = this, b = a.$valueContainer, c = a.txt.$txt;
|
|
if (b !== c) {
|
|
var d = c.html();
|
|
b.val(d)
|
|
}
|
|
}, a.fn.getInitValue = function () {
|
|
var a = this, b = a.$valueContainer, c = "", d = a.valueNodeName;
|
|
return "div" === d ? c = b.html() : "textarea" === d && (c = b.val()), c
|
|
}, a.fn.updateMenuStyle = function () {
|
|
var a = this.menus;
|
|
b.each(a, function (a, b) {
|
|
b.updateSelected()
|
|
})
|
|
}, a.fn.enableMenusExcept = function (a) {
|
|
this._disabled || (a = a || [], "string" == typeof a && (a = [a]), b.each(this.menus, function (b, c) {
|
|
a.indexOf(b) >= 0 || c.disabled(!1)
|
|
}))
|
|
}, a.fn.disableMenusExcept = function (a) {
|
|
this._disabled || (a = a || [], "string" == typeof a && (a = [a]), b.each(this.menus, function (b, c) {
|
|
a.indexOf(b) >= 0 || c.disabled(!0)
|
|
}))
|
|
}, a.fn.hideDropPanelAndModal = function () {
|
|
var a = this.menus;
|
|
b.each(a, function (a, b) {
|
|
var c = b.dropPanel || b.dropList || b.modal;
|
|
c && c.hide && c.hide()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
function c() {
|
|
}
|
|
|
|
var d = !a.w3cRange;
|
|
a.fn.currentRange = function (a) {
|
|
return a ? void(this._rangeData = a) : this._rangeData
|
|
}, a.fn.collapseRange = function (a, b) {
|
|
b = b || "end", b = "start" === b, a = a || this.currentRange(), a && (a.collapse(b), this.currentRange(a))
|
|
}, a.fn.getRangeText = d ? c : function (a) {
|
|
if (a = a || this.currentRange()) return a.toString()
|
|
}, a.fn.getRangeElem = d ? c : function (a) {
|
|
a = a || this.currentRange();
|
|
var b = a.commonAncestorContainer;
|
|
return 1 === b.nodeType ? b : b.parentNode
|
|
}, a.fn.isRangeEmpty = d ? c : function (a) {
|
|
return a = a || this.currentRange(), !(!a || !a.startContainer || a.startContainer !== a.endContainer || a.startOffset !== a.endOffset)
|
|
}, a.fn.saveSelection = d ? c : function (a) {
|
|
var c, d, e = this, f = e.txt.$txt.get(0);
|
|
a ? c = a.commonAncestorContainer : (d = document.getSelection(), d.getRangeAt && d.rangeCount && (a = document.getSelection().getRangeAt(0), c = a.commonAncestorContainer)), c && (b.contains(f, c) || f === c) && e.currentRange(a)
|
|
}, a.fn.restoreSelection = d ? c : function (b) {
|
|
var c;
|
|
if (b = b || this.currentRange()) try {
|
|
c = document.getSelection(), c.removeAllRanges(), c.addRange(b)
|
|
} catch (d) {
|
|
a.error("执行 editor.restoreSelection 时,IE可能会有异常,不影响使用")
|
|
}
|
|
}, a.fn.restoreSelectionByElem = d ? c : function (a, b) {
|
|
a && (b = b || "end", this.setRangeByElem(a), "start" === b && this.collapseRange(this.currentRange(), "start"), "end" === b && this.collapseRange(this.currentRange(), "end"), this.restoreSelection())
|
|
}, a.fn.initSelection = d ? c : function () {
|
|
var a = this;
|
|
if (!a.currentRange()) {
|
|
var b = a.txt.$txt, c = b.children().first();
|
|
c.length && a.restoreSelectionByElem(c.get(0))
|
|
}
|
|
}, a.fn.setRangeByElem = d ? c : function (a) {
|
|
var c = this, d = c.txt.$txt.get(0);
|
|
if (a && b.contains(d, a)) {
|
|
for (var e = a.firstChild; e && 3 !== e.nodeType;) e = e.firstChild;
|
|
for (var f = a.lastChild; f && 3 !== f.nodeType;) f = f.lastChild;
|
|
var g = document.createRange();
|
|
e && f ? (g.setStart(e, 0), g.setEnd(f, f.textContent.length)) : (g.setStart(a, 0), g.setEnd(a, 0)), c.saveSelection(g)
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
a.w3cRange || (a.fn.getRangeText = function (a) {
|
|
if (a = a || this.currentRange()) return a.text
|
|
}, a.fn.getRangeElem = function (a) {
|
|
if (a = a || this.currentRange()) {
|
|
var b = a.parentElement();
|
|
return 1 === b.nodeType ? b : b.parentNode
|
|
}
|
|
}, a.fn.isRangeEmpty = function (a) {
|
|
return a = a || this.currentRange(), !a || !a.text
|
|
}, a.fn.saveSelection = function (a) {
|
|
var c, d = this, e = d.txt.$txt.get(0);
|
|
a ? c = a.parentElement() : (a = document.selection.createRange(), c = "undefined" == typeof a.parentElement ? null : a.parentElement()), c && (b.contains(e, c) || e === c) && d.currentRange(a)
|
|
}, a.fn.restoreSelection = function (a) {
|
|
var b, c = this;
|
|
if (a = a || c.currentRange()) {
|
|
b = document.selection.createRange();
|
|
try {
|
|
b.setEndPoint("EndToEnd", a)
|
|
} catch (d) {
|
|
}
|
|
if (0 === a.text.length) try {
|
|
b.collapse(!1)
|
|
} catch (d) {
|
|
} else b.setEndPoint("StartToStart", a);
|
|
b.select()
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.fn.commandHooks = function () {
|
|
var a = this, c = {};
|
|
c.insertHtml = function (c) {
|
|
var d, e = b(c), f = a.getRangeElem();
|
|
d = a.getLegalTags(f), d && b(d).after(e)
|
|
}, a.commandHooks = c
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.command = function (a, b, c, d) {
|
|
function e() {
|
|
b && (g.queryCommandSupported(b) ? document.execCommand(b, !1, c) : (f = g.commandHooks, b in f && f[b](c)))
|
|
}
|
|
|
|
var f, g = this;
|
|
this.customCommand(a, e, d)
|
|
}, a.fn.commandForElem = function (a, b, c, d, e) {
|
|
var f, g;
|
|
"string" == typeof a ? f = a : (f = a.selector, g = a.check);
|
|
var h = this.getRangeElem();
|
|
h = this.getSelfOrParentByName(h, f, g), h && this.setRangeByElem(h), this.command(b, c, d, e)
|
|
}, a.fn.customCommand = function (a, b, c) {
|
|
function d() {
|
|
e.hideDropPanelAndModal()
|
|
}
|
|
|
|
var e = this, f = e.currentRange();
|
|
return f ? (e.undoRecord(), this.restoreSelection(f), b.call(e), this.saveSelection(), this.restoreSelection(), c && "function" == typeof c && c.call(e), e.txt.insertEmptyP(), e.txt.wrapImgAndText(), e.updateValue(), e.updateMenuStyle(), setTimeout(d, 200), void(a && a.preventDefault())) : void(a && a.preventDefault())
|
|
}, a.fn.queryCommandValue = function (a) {
|
|
var b = "";
|
|
try {
|
|
b = document.queryCommandValue(a)
|
|
} catch (c) {
|
|
}
|
|
return b
|
|
}, a.fn.queryCommandState = function (a) {
|
|
var b = !1;
|
|
try {
|
|
b = document.queryCommandState(a)
|
|
} catch (c) {
|
|
}
|
|
return b
|
|
}, a.fn.queryCommandSupported = function (a) {
|
|
var b = !1;
|
|
try {
|
|
b = document.queryCommandSupported(a)
|
|
} catch (c) {
|
|
}
|
|
return b
|
|
}
|
|
}), b(function (a, b) {
|
|
function c(a) {
|
|
var c = this, d = b(a), e = !1;
|
|
return d.each(function () {
|
|
if (this === c) return e = !0, !1
|
|
}), e
|
|
}
|
|
|
|
var d;
|
|
a.fn.getLegalTags = function (b) {
|
|
var c = this.config.legalTags;
|
|
return c ? this.getSelfOrParentByName(b, c) : void a.error("配置项中缺少 legalTags 的配置")
|
|
}, a.fn.getSelfOrParentByName = function (a, e, f) {
|
|
if (a && e) {
|
|
d || (d = a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.matchesSelector), d || (d = c);
|
|
for (var g = this.txt.$txt.get(0); a && g !== a && b.contains(g, a);) {
|
|
if (d.call(a, e)) {
|
|
if (!f) return a;
|
|
if (f(a)) return a
|
|
}
|
|
a = a.parentNode
|
|
}
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
function c(a) {
|
|
return null == a._redoList && (a._redoList = []), a._redoList
|
|
}
|
|
|
|
function d(a) {
|
|
return null == a._undoList && (a._undoList = []), a._undoList
|
|
}
|
|
|
|
function e(a, b, c) {
|
|
var d = b.val, e = a.txt.$txt.html();
|
|
if (null != d) {
|
|
if (d === e) return "redo" === c ? void a.redo() : "undo" === c ? void a.undo() : void 0;
|
|
a.txt.$txt.html(d), a.updateValue(), a.onchange && "function" == typeof a.onchange && a.onchange.call(a)
|
|
}
|
|
}
|
|
|
|
var f = 20;
|
|
a.fn.undoRecord = function () {
|
|
var a = this, b = a.txt.$txt, e = b.html(), g = d(a), h = c(a), i = g.length ? g[0] : "";
|
|
e !== i.val && (h.length && (h = []), g.unshift({range: a.currentRange(), val: e}), g.length > f && g.pop())
|
|
}, a.fn.undo = function () {
|
|
var a = this, b = d(a), f = c(a);
|
|
if (b.length) {
|
|
var g = b.shift();
|
|
f.unshift(g), e(this, g, "undo")
|
|
}
|
|
}, a.fn.redo = function () {
|
|
var a = this, b = d(a), f = c(a);
|
|
if (f.length) {
|
|
var g = f.shift();
|
|
b.unshift(g), e(this, g, "redo")
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.create = function () {
|
|
var c = this;
|
|
a.$body && 0 !== a.$body.length || (a.$body = b("body"), a.$document = b(document), a.$window = b(window)), c.addMenus(), c.renderMenus(), c.renderMenuContainer(), c.renderTxt(), c.renderEditorContainer(), c.eventMenus(), c.eventMenuContainer(), c.eventTxt(), c.readyHeadler(), c.initSelection(), c.$txt = c.txt.$txt;
|
|
var d = a._plugins;
|
|
d && d.length && b.each(d, function (a, b) {
|
|
b.call(c)
|
|
})
|
|
}, a.fn.disable = function () {
|
|
this.txt.$txt.removeAttr("contenteditable"), this.disableMenusExcept(), this._disabled = !0
|
|
}, a.fn.enable = function () {
|
|
this._disabled = !1, this.txt.$txt.attr("contenteditable", "true"), this.enableMenusExcept()
|
|
}, a.fn.destroy = function () {
|
|
var a = this, b = a.$valueContainer, c = a.$editorContainer, d = a.valueNodeName;
|
|
"div" === d ? (b.removeAttr("contenteditable"), c.after(b), c.hide()) : (b.show(), c.hide())
|
|
}, a.fn.undestroy = function () {
|
|
var a = this, b = a.$valueContainer, c = a.$editorContainer, d = a.menuContainer.$menuContainer,
|
|
e = a.valueNodeName;
|
|
"div" === e ? (b.attr("contenteditable", "true"), d.after(b), c.show()) : (b.hide(), c.show())
|
|
}, a.fn.clear = function () {
|
|
var a = this, b = a.txt.$txt;
|
|
b.html("<p><br></p>"), a.restoreSelectionByElem(b.find("p").get(0))
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a) {
|
|
this.editor = a, this.init()
|
|
};
|
|
c.fn = c.prototype, a.MenuContainer = c
|
|
}), b(function (a, b) {
|
|
var c = a.MenuContainer;
|
|
c.fn.init = function () {
|
|
var a = this, c = b('<div class="wangEditor-menu-container clearfix"></div>');
|
|
a.$menuContainer = c, a.changeShadow()
|
|
}, c.fn.changeShadow = function () {
|
|
var a = this.$menuContainer, b = this.editor, c = b.txt.$txt;
|
|
c.on("scroll", function () {
|
|
c.scrollTop() > 10 ? a.addClass("wangEditor-menu-shadow") : a.removeClass("wangEditor-menu-shadow")
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.MenuContainer;
|
|
c.fn.render = function () {
|
|
var a = this.$menuContainer, b = this.editor.$editorContainer;
|
|
b.append(a)
|
|
}, c.fn.height = function () {
|
|
var a = this.$menuContainer;
|
|
return a.height()
|
|
}, c.fn.appendMenu = function (a, b) {
|
|
return this._addGroup(a), this._addOneMenu(b)
|
|
}, c.fn._addGroup = function (a) {
|
|
var c, d = this.$menuContainer;
|
|
this.$currentGroup && this.currentGroupIdx === a || (c = b('<div class="menu-group clearfix"></div>'), d.append(c), this.$currentGroup = c, this.currentGroupIdx = a)
|
|
}, c.fn._addOneMenu = function (a) {
|
|
var c = a.$domNormal, d = a.$domSelected, e = this.$currentGroup,
|
|
f = b('<div class="menu-item clearfix"></div>');
|
|
return d.hide(), f.append(c).append(d), e.append(f), f
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a) {
|
|
this.editor = a.editor, this.id = a.id, this.title = a.title, this.$domNormal = a.$domNormal, this.$domSelected = a.$domSelected || a.$domNormal, this.commandName = a.commandName, this.commandValue = a.commandValue, this.commandNameSelected = a.commandNameSelected || a.commandName, this.commandValueSelected = a.commandValueSelected || a.commandValue
|
|
};
|
|
c.fn = c.prototype, a.Menu = c
|
|
}), b(function (a, b) {
|
|
var c = a.Menu;
|
|
c.fn.initUI = function () {
|
|
var c = this.editor, d = c.UI.menus, e = this.id, f = d[e];
|
|
this.$domNormal && this.$domSelected || (null == f && (a.warn('editor.UI配置中,没有菜单 "' + e + '" 的UI配置,只能取默认值'), f = d.default), this.$domNormal = b(f.normal), /^\./.test(f.selected) ? this.$domSelected = this.$domNormal.clone().addClass(f.selected.slice(1)) : this.$domSelected = b(f.selected))
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.Menu;
|
|
c.fn.render = function (a) {
|
|
this.initUI();
|
|
var b = this.editor, c = b.menuContainer, d = c.appendMenu(a, this), e = this.onRender;
|
|
this._renderTip(d), e && "function" == typeof e && e.call(this)
|
|
}, c.fn._renderTip = function (c) {
|
|
function d() {
|
|
j.show()
|
|
}
|
|
|
|
function e() {
|
|
j.hide()
|
|
}
|
|
|
|
var f, g = this, h = g.editor, i = g.title, j = b('<div class="menu-tip"></div>');
|
|
g.tipWidth || (f = b('<p style="opacity:0; filter:Alpha(opacity=0); position:absolute;top:-10000px;">' + i + "</p>"), a.$body.append(f), h.ready(function () {
|
|
var a = f.outerWidth() + 5, b = j.outerWidth(), c = parseFloat(j.css("margin-left"), 10);
|
|
f.remove(), f = null, j.css({width: a, "margin-left": c + (b - a) / 2}), g.tipWidth = a
|
|
})), j.append(i), c.append(j);
|
|
var k;
|
|
c.find("a").on("mouseenter", function (a) {
|
|
g.active() || g.disabled() || (k = setTimeout(d, 200))
|
|
}).on("mouseleave", function (a) {
|
|
k && clearTimeout(k), e()
|
|
}).on("click", e)
|
|
}, c.fn.bindEvent = function () {
|
|
var b = this, c = b.$domNormal, d = b.$domSelected, e = b.clickEvent;
|
|
e || (e = function (c) {
|
|
var d = b.dropPanel || b.dropList || b.modal;
|
|
if (d && d.show) return void(d.isShowing ? d.hide() : d.show());
|
|
var e, f, g = b.editor, h = b.selected;
|
|
h ? (e = b.commandNameSelected, f = b.commandValueSelected) : (e = b.commandName, f = b.commandValue), e ? g.command(c, e, f) : (a.warn('菜单 "' + b.id + '" 未定义click事件'), c.preventDefault())
|
|
});
|
|
var f = b.clickEventSelected || e;
|
|
c.click(function (a) {
|
|
b.disabled() || (e.call(b, a), b.updateSelected()), a.preventDefault()
|
|
}), d.click(function (a) {
|
|
b.disabled() || (f.call(b, a), b.updateSelected()), a.preventDefault()
|
|
})
|
|
}, c.fn.updateSelected = function () {
|
|
var a = this, b = (a.editor, a.updateSelectedEvent);
|
|
b || (b = function () {
|
|
var a = this, b = a.editor, c = a.commandName, d = a.commandValue;
|
|
if (d) {
|
|
if (b.queryCommandValue(c).toLowerCase() === d.toLowerCase()) return !0
|
|
} else if (b.queryCommandState(c)) return !0;
|
|
return !1
|
|
});
|
|
var c = b.call(a);
|
|
c = !!c, a.changeSelectedState(c)
|
|
}, c.fn.changeSelectedState = function (a) {
|
|
var b = this, c = b.selected;
|
|
if (null != a && "boolean" == typeof a) {
|
|
if (c === a) return;
|
|
b.selected = a, a ? (b.$domNormal.hide(), b.$domSelected.show()) : (b.$domNormal.show(), b.$domSelected.hide())
|
|
}
|
|
}, c.fn.active = function (a) {
|
|
return null == a ? this._activeState : void(this._activeState = a)
|
|
}, c.fn.activeStyle = function (a) {
|
|
var b = (this.selected, this.$domNormal), c = this.$domSelected;
|
|
a ? (b.addClass("active"), c.addClass("active")) : (b.removeClass("active"), c.removeClass("active")), this.active(a)
|
|
}, c.fn.disabled = function (a) {
|
|
if (null == a) return !!this._disabled;
|
|
if (this._disabled !== a) {
|
|
var b = this.$domNormal, c = this.$domSelected;
|
|
a ? (b.addClass("disable"), c.addClass("disable")) : (b.removeClass("disable"), c.removeClass("disable")), this._disabled = a
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a, b, c) {
|
|
this.editor = a, this.menu = b, this.data = c.data, this.tpl = c.tpl, this.selectorForELemCommand = c.selectorForELemCommand, this.beforeEvent = c.beforeEvent, this.afterEvent = c.afterEvent, this.init()
|
|
};
|
|
c.fn = c.prototype, a.DropList = c
|
|
}), b(function (a, b) {
|
|
var c = a.DropList;
|
|
c.fn.init = function () {
|
|
var a = this;
|
|
a.initDOM(), a.bindEvent(), a.initHideEvent()
|
|
}, c.fn.initDOM = function () {
|
|
var a, c, d = this, e = d.data, f = d.tpl || "<span>{#title}</span>",
|
|
g = b('<div class="wangEditor-drop-list clearfix"></div>');
|
|
b.each(e, function (d, e) {
|
|
a = f.replace(/{#commandValue}/gi, d).replace(/{#title}/gi, e), c = b('<a href="#" commandValue="' + d + '"></a>'), c.append(a), g.append(c)
|
|
}), d.$list = g
|
|
}, c.fn.bindEvent = function () {
|
|
var a = this, c = a.editor, d = a.menu, e = d.commandName, f = a.selectorForELemCommand, g = a.$list,
|
|
h = a.beforeEvent, i = a.afterEvent;
|
|
g.on("click", "a[commandValue]", function (a) {
|
|
h && "function" == typeof h && h.call(a);
|
|
var g = b(a.currentTarget).attr("commandValue");
|
|
d.selected && c.isRangeEmpty() && f ? c.commandForElem(f, a, e, g) : c.command(a, e, g), i && "function" == typeof i && i.call(a)
|
|
})
|
|
}, c.fn.initHideEvent = function () {
|
|
var c = this, d = c.$list.get(0);
|
|
a.$body.on("click", function (a) {
|
|
if (c.isShowing) {
|
|
var e, f = a.target, g = c.menu;
|
|
e = g.selected ? g.$domSelected.get(0) : g.$domNormal.get(0), e === f || b.contains(e, f) || d === f || b.contains(d, f) || c.hide()
|
|
}
|
|
}), a.$window.scroll(function () {
|
|
c.hide()
|
|
}), a.$window.on("resize", function () {
|
|
c.hide()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.DropList;
|
|
c.fn._render = function () {
|
|
var a = this, b = a.editor, c = a.$list;
|
|
b.$editorContainer.append(c), a.rendered = !0
|
|
}, c.fn._position = function () {
|
|
var a = this, b = a.$list, c = a.editor, d = a.menu, e = c.menuContainer.$menuContainer,
|
|
f = d.selected ? d.$domSelected : d.$domNormal, g = f.offsetParent().position(), h = g.top, i = g.left,
|
|
j = f.offsetParent().height(), k = f.offsetParent().width(), l = b.outerWidth(),
|
|
m = c.txt.$txt.outerWidth(), n = h + j, o = i + k / 2, p = 0 - k / 2, q = o + l - m;
|
|
q > -10 && (p = p - q - 10), b.css({
|
|
top: n,
|
|
left: o,
|
|
"margin-left": p
|
|
}), c._isMenufixed && (n += e.offset().top + e.outerHeight() - b.offset().top, b.css({top: n}))
|
|
}, c.fn.show = function () {
|
|
var a = this, b = a.menu;
|
|
if (a.rendered || a._render(), !a.isShowing) {
|
|
var c = a.$list;
|
|
c.show(), a._position(), a.isShowing = !0, b.activeStyle(!0)
|
|
}
|
|
}, c.fn.hide = function () {
|
|
var a = this, b = a.menu;
|
|
if (a.isShowing) {
|
|
var c = a.$list;
|
|
c.hide(), a.isShowing = !1, b.activeStyle(!1)
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a, b, c) {
|
|
this.editor = a, this.menu = b, this.$content = c.$content, this.width = c.width || 200, this.height = c.height, this.onRender = c.onRender, this.init()
|
|
};
|
|
c.fn = c.prototype, a.DropPanel = c
|
|
}), b(function (a, b) {
|
|
var c = a.DropPanel;
|
|
c.fn.init = function () {
|
|
var a = this;
|
|
a.initDOM(), a.initHideEvent()
|
|
}, c.fn.initDOM = function () {
|
|
var a = this, c = a.$content, d = a.width, e = a.height,
|
|
f = b('<div class="wangEditor-drop-panel clearfix"></div>'), g = b('<div class="tip-triangle"></div>');
|
|
f.css({width: d, height: e ? e : "auto"}), f.append(g), f.append(c), a.$panel = f, a.$triangle = g
|
|
}, c.fn.initHideEvent = function () {
|
|
var c = this, d = c.$panel.get(0);
|
|
a.$body.on("click", function (a) {
|
|
if (c.isShowing) {
|
|
var e, f = a.target, g = c.menu;
|
|
e = g.selected ? g.$domSelected.get(0) : g.$domNormal.get(0), e === f || b.contains(e, f) || d === f || b.contains(d, f) || c.hide()
|
|
}
|
|
}), a.$window.scroll(function (a) {
|
|
c.hide()
|
|
}), a.$window.on("resize", function () {
|
|
c.hide()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.DropPanel;
|
|
c.fn._render = function () {
|
|
var a = this, b = a.onRender, c = a.editor, d = a.$panel;
|
|
c.$editorContainer.append(d), b && b.call(a), a.rendered = !0
|
|
}, c.fn._position = function () {
|
|
var a = this, b = a.$panel, c = a.$triangle, d = a.editor, e = d.menuContainer.$menuContainer, f = a.menu,
|
|
g = f.selected ? f.$domSelected : f.$domNormal, h = g.offsetParent().position(), i = h.top, j = h.left,
|
|
k = g.offsetParent().height(), l = g.offsetParent().width(), m = b.outerWidth(),
|
|
n = d.txt.$txt.outerWidth(), o = i + k, p = j + l / 2, q = 0 - m / 2, r = q;
|
|
0 - q > p - 10 && (q = 0 - (p - 10));
|
|
var s = p + m + q - n;
|
|
s > -10 && (q = q - s - 10), b.css({
|
|
top: o,
|
|
left: p,
|
|
"margin-left": q
|
|
}), d._isMenufixed && (o += e.offset().top + e.outerHeight() - b.offset().top, b.css({top: o})), c.css({"margin-left": r - q - 5})
|
|
}, c.fn.focusFirstInput = function () {
|
|
var a = this, c = a.$panel;
|
|
c.find("input[type=text],textarea").each(function () {
|
|
var a = b(this);
|
|
if (null == a.attr("disabled")) return a.focus(), !1
|
|
})
|
|
}, c.fn.show = function () {
|
|
var b = this, c = b.menu;
|
|
if (b.rendered || b._render(), !b.isShowing) {
|
|
var d = b.$panel;
|
|
d.show(), b._position(), b.isShowing = !0, c.activeStyle(!0), a.w3cRange ? b.focusFirstInput() : a.placeholderForIE8(d)
|
|
}
|
|
}, c.fn.hide = function () {
|
|
var a = this, b = a.menu;
|
|
if (a.isShowing) {
|
|
var c = a.$panel;
|
|
c.hide(), a.isShowing = !1, b.activeStyle(!1)
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a, b, c) {
|
|
this.editor = a, this.menu = b, this.$content = c.$content, this.init()
|
|
};
|
|
c.fn = c.prototype, a.Modal = c
|
|
}), b(function (a, b) {
|
|
var c = a.Modal;
|
|
c.fn.init = function () {
|
|
var a = this;
|
|
a.initDom(), a.initHideEvent()
|
|
}, c.fn.initDom = function () {
|
|
var a = this, c = a.$content, d = b('<div class="wangEditor-modal"></div>'),
|
|
e = b('<div class="wangEditor-modal-close"><i class="wangeditor-menu-img-cancel-circle"></i></div>');
|
|
d.append(e), d.append(c), a.$modal = d, a.$close = e
|
|
}, c.fn.initHideEvent = function () {
|
|
var c = this, d = c.$close, e = c.$modal.get(0);
|
|
d.click(function () {
|
|
c.hide()
|
|
}), a.$body.on("click", function (a) {
|
|
if (c.isShowing) {
|
|
var d, f = a.target, g = c.menu;
|
|
g && (d = g.selected ? g.$domSelected.get(0) : g.$domNormal.get(0), d === f || b.contains(d, f)) || e === f || b.contains(e, f) || c.hide()
|
|
}
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.Modal;
|
|
c.fn._render = function () {
|
|
var b = this, c = b.editor, d = b.$modal;
|
|
d.css("z-index", c.config.zindex + 10 + ""), a.$body.append(d), b.rendered = !0
|
|
}, c.fn._position = function () {
|
|
var b = this, c = b.$modal, d = c.offset().top, e = c.outerWidth(), f = c.outerHeight(), g = 0 - e / 2,
|
|
h = 0 - f / 2, i = a.$window.scrollTop();
|
|
f / 2 > d && (h = 0 - d), c.css({"margin-left": g + "px", "margin-top": h + i + "px"})
|
|
}, c.fn.show = function () {
|
|
var a = this, b = a.menu;
|
|
if (a.rendered || a._render(), !a.isShowing) {
|
|
a.isShowing = !0;
|
|
var c = a.$modal;
|
|
c.show(), a._position(), b && b.activeStyle(!0)
|
|
}
|
|
}, c.fn.hide = function () {
|
|
var a = this, b = a.menu;
|
|
if (a.isShowing) {
|
|
a.isShowing = !1;
|
|
var c = a.$modal;
|
|
c.hide(), b && b.activeStyle(!1)
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = function (a) {
|
|
this.editor = a, this.init()
|
|
};
|
|
c.fn = c.prototype, a.Txt = c
|
|
}), b(function (a, b) {
|
|
var c = a.Txt;
|
|
c.fn.init = function () {
|
|
var a, c = this, d = c.editor, e = d.$valueContainer, f = d.getInitValue();
|
|
"DIV" === e.get(0).nodeName ? (a = e, a.addClass("wangEditor-txt"), a.attr("contentEditable", "true")) : a = b('<div class="wangEditor-txt" contentEditable="true">' + f + "</div>"), d.ready(function () {
|
|
c.insertEmptyP()
|
|
}), c.$txt = a, c.contentEmptyHandle(), c.bindEnterForDiv(), c.bindEnterForText(), c.bindTabEvent(), c.bindPasteFilter(), c.bindFormatText(), c.bindHtml()
|
|
}, c.fn.contentEmptyHandle = function () {
|
|
var a, c = this, d = c.editor, e = c.$txt;
|
|
e.on("keydown", function (a) {
|
|
if (8 === a.keyCode) {
|
|
var c = b.trim(e.html().toLowerCase());
|
|
return "<p><br></p>" === c ? void a.preventDefault() : void 0
|
|
}
|
|
}), e.on("keyup", function (c) {
|
|
if (8 === c.keyCode) {
|
|
var f = b.trim(e.html().toLowerCase());
|
|
f && "<br>" !== f || (a = b("<p><br/></p>"), e.html(""), e.append(a), d.restoreSelectionByElem(a.get(0)))
|
|
}
|
|
})
|
|
}, c.fn.bindEnterForDiv = function () {
|
|
function c() {
|
|
if (d) {
|
|
var a = b("<p>" + d.html() + "</p>");
|
|
d.after(a), d.remove()
|
|
}
|
|
}
|
|
|
|
var d, e = (a.config.legalTags, this), f = e.editor, g = e.$txt;
|
|
g.on("keydown keyup", function (a) {
|
|
if (13 === a.keyCode) {
|
|
var e, g, h = f.getRangeElem(), i = f.getLegalTags(h);
|
|
if (!i) {
|
|
if (i = f.getSelfOrParentByName(h, "div"), !i) return;
|
|
e = b(i), "keydown" === a.type && (d = e, setTimeout(c, 0)), "keyup" === a.type && (g = b("<p>" + e.html() + "</p>"), e.after(g), e.remove(), f.restoreSelectionByElem(g.get(0), "start"))
|
|
}
|
|
}
|
|
})
|
|
}, c.fn.bindEnterForText = function () {
|
|
var a, b = this, c = b.$txt;
|
|
c.on("keyup", function (c) {
|
|
13 === c.keyCode && (a || (a = function () {
|
|
b.wrapImgAndText()
|
|
}), setTimeout(a))
|
|
})
|
|
}, c.fn.bindTabEvent = function () {
|
|
var a = this, b = a.editor, c = a.$txt;
|
|
c.on("keydown", function (a) {
|
|
9 === a.keyCode && b.queryCommandSupported("insertHtml") && b.command(a, "insertHtml", " ")
|
|
})
|
|
}, c.fn.bindPasteFilter = function () {
|
|
function a(e) {
|
|
if (e && e.nodeType && e.nodeName) {
|
|
var f, h, i = e.nodeName.toLowerCase(), k = e.nodeType;
|
|
if (3 === k || 1 === k) {
|
|
if (f = b(e), "div" === i) return h = [], b.each(e.childNodes, function (a, b) {
|
|
h.push(b)
|
|
}), void b.each(h, function () {
|
|
a(this)
|
|
});
|
|
if (j.indexOf(i) >= 0) g += c(e); else if (3 === k) g += "<p>" + e.textContent + "</p>"; else if ("br" === i) g += "<br/>"; else {
|
|
if (["meta", "style", "script", "object", "form", "iframe", "hr"].indexOf(i) >= 0) return;
|
|
f = b(d(e)), g += b("<div>").append(f.clone()).html()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function c(a) {
|
|
var c, e = a.nodeName.toLowerCase(), f = "", g = "";
|
|
return ["blockquote"].indexOf(e) >= 0 ? (c = b(a), "<" + e + ">" + c.text() + "</" + e + ">") : ["p", "h1", "h2", "h3", "h4", "h5"].indexOf(e) >= 0 ? (a = d(a), c = b(a), f = c.html(), f = f.replace(/<.*?>/gi, function (a) {
|
|
return "</a>" === a || 0 === a.indexOf("<a ") || 0 === a.indexOf("<img ") ? a : ""
|
|
}), "<" + e + ">" + f + "</" + e + ">") : ["ul", "ol"].indexOf(e) >= 0 ? (c = b(a), c.children().each(function () {
|
|
var a = b(d(this)), c = a.html();
|
|
c = c.replace(/<.*?>/gi, function (a) {
|
|
return "</a>" === a || 0 === a.indexOf("<a ") || 0 === a.indexOf("<img ") ? a : ""
|
|
}), g += "<li>" + c + "</li>"
|
|
}), "<" + e + ">" + g + "</" + e + ">") : (c = b(d(a)), b("<div>").append(c).html())
|
|
}
|
|
|
|
function d(a) {
|
|
var c = a.attributes || [], e = [], f = ["href", "target", "src", "alt", "rowspan", "colspan"];
|
|
b.each(c, function (a, b) {
|
|
b && 2 === b.nodeType && e.push(b.nodeName)
|
|
}), b.each(e, function (b, c) {
|
|
f.indexOf(c) < 0 && a.removeAttribute(c)
|
|
});
|
|
var g = a.childNodes;
|
|
return g.length && b.each(g, function (a, b) {
|
|
d(b)
|
|
}), a
|
|
}
|
|
|
|
var e = this, f = e.editor, g = "", h = e.$txt, i = f.config.legalTags, j = i.split(",");
|
|
h.on("paste", function (c) {
|
|
if (f.config.pasteFilter) {
|
|
var d = f.getRangeElem().nodeName;
|
|
if ("TD" !== d && "TH" !== d) {
|
|
g = "";
|
|
var h, i, j, k = c.clipboardData || c.originalEvent.clipboardData, l = window.clipboardData;
|
|
if (f.config.pasteText) {
|
|
if (k && k.getData) h = k.getData("text/plain"); else {
|
|
if (!l || !l.getData) return;
|
|
h = l.getData("text")
|
|
}
|
|
h && (g = "<p>" + h + "</p>")
|
|
} else if (k && k.getData) h = k.getData("text/html"), j = h.split("</html>"), 2 === j.length && (h = j[0]), h ? (i = b("<div>" + h + "</div>"), a(i.get(0))) : (h = k.getData("text/plain"), h && (h = h.replace(/[ ]/g, " ").replace(/</g, "<").replace(/>/g, ">").replace(/\n/g, "</p><p>"), g = "<p>" + h + "</p>", g = g.replace(/<p>(https?:\/\/.*?)<\/p>/gi, function (a, b) {
|
|
return '<p><a href="' + b + '" target="_blank">' + b + "</p>"
|
|
}))); else {
|
|
if (!l || !l.getData) return;
|
|
if (g = l.getData("text"), !g) return;
|
|
g = "<p>" + g + "</p>", g = g.replace(new RegExp("\n", "g"), "</p><p>")
|
|
}
|
|
g && (f.command(c, "insertHtml", g), e.clearEmptyOrNestP())
|
|
}
|
|
}
|
|
})
|
|
}, c.fn.bindFormatText = function () {
|
|
var c = this, d = (c.editor, c.$txt), e = a.config.legalTags, f = e.split(","), g = (f.length, []);
|
|
b.each(f, function (a, b) {
|
|
var c = ">\\s*<(" + b + ")>";
|
|
g.push(new RegExp(c, "ig"))
|
|
}), g.push(new RegExp(">\\s*<(li)>", "ig")), g.push(new RegExp(">\\s*<(tr)>", "ig")), g.push(new RegExp(">\\s*<(code)>", "ig")), d.formatText = function () {
|
|
var a = b("<div>"), c = d.html();
|
|
return c = c.replace(/\s*</gi, "<"), b.each(g, function (a, b) {
|
|
b.test(c) && (c = c.replace(b, function (a, b) {
|
|
return ">\n<" + b + ">"
|
|
}))
|
|
}), a.html(c), a.text()
|
|
}
|
|
}, c.fn.bindHtml = function () {
|
|
var a = this, c = a.editor, d = a.$txt, e = c.$valueContainer, f = c.valueNodeName;
|
|
d.html = function (a) {
|
|
var c;
|
|
return "div" === f && (c = b.fn.html.call(d, a)), void 0 === a ? (c = b.fn.html.call(d), c = c.replace(/(href|src)\=\"(.*)\"/gim, function (a, b, c) {
|
|
return b + '="' + c.replace("&", "&") + '"'
|
|
})) : (c = b.fn.html.call(d, a), e.val(a)), void 0 === a ? c : void d.change()
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
var c = a.Txt, d = "propertychange change click keyup input paste";
|
|
c.fn.render = function () {
|
|
var a = this.$txt, b = this.editor.$editorContainer;
|
|
b.append(a)
|
|
}, c.fn.initHeight = function () {
|
|
var a = this.editor, b = this.$txt, c = a.$valueContainer.height(), d = a.menuContainer.height(), e = c - d;
|
|
e = e < 50 ? 50 : e, b.height(e), a.valueContainerHeight = c, this.initMaxHeight(e, d)
|
|
}, c.fn.initMaxHeight = function (c, d) {
|
|
var e = this.editor, f = e.menuContainer.$menuContainer, g = this.$txt, h = b("<div>");
|
|
if (window.getComputedStyle && "max-height" in window.getComputedStyle(g.get(0))) {
|
|
var i = parseInt(e.$valueContainer.css("max-height"));
|
|
if (isNaN(i)) return;
|
|
if (e.menus.fullscreen) return void a.warn("max-height和『全屏』菜单一起使用时,会有一些问题尚未解决,请暂时不要两个同时使用");
|
|
e.useMaxHeight = !0, h.css({"max-height": i - d + "px", "overflow-y": "auto"}), g.css({
|
|
height: "auto",
|
|
"overflow-y": "visible",
|
|
"min-height": c + "px"
|
|
}), h.on("scroll", function () {
|
|
g.parent().scrollTop() > 10 ? f.addClass("wangEditor-menu-shadow") : f.removeClass("wangEditor-menu-shadow")
|
|
}), g.wrap(h)
|
|
}
|
|
}, c.fn.saveSelectionEvent = function () {
|
|
function a() {
|
|
g.saveSelection()
|
|
}
|
|
|
|
function b() {
|
|
Date.now() - h < 100 || (h = Date.now(), a())
|
|
}
|
|
|
|
function c() {
|
|
e && clearTimeout(e), e = setTimeout(a, 300)
|
|
}
|
|
|
|
var e, f = this.$txt, g = this.editor, h = Date.now();
|
|
f.on(d + " focus blur", function (a) {
|
|
b(), c()
|
|
}), f.on("mousedown", function () {
|
|
f.on("mouseleave.saveSelection", function (a) {
|
|
b(), c(), g.updateMenuStyle()
|
|
})
|
|
}).on("mouseup", function () {
|
|
f.off("mouseleave.saveSelection")
|
|
})
|
|
}, c.fn.updateValueEvent = function () {
|
|
function a() {
|
|
var a = e.html();
|
|
c !== a && (f.onchange && "function" == typeof f.onchange && f.onchange.call(f), f.updateValue(), c = a)
|
|
}
|
|
|
|
var b, c, e = this.$txt, f = this.editor;
|
|
e.on(d, function (d) {
|
|
null == c && (c = e.html()), b && clearTimeout(b), b = setTimeout(a, 100)
|
|
})
|
|
}, c.fn.updateMenuStyleEvent = function () {
|
|
var a = this.$txt, b = this.editor;
|
|
a.on(d, function (a) {
|
|
b.updateMenuStyle()
|
|
})
|
|
}, c.fn.insertEmptyP = function () {
|
|
var a = this.$txt, c = a.children();
|
|
return 0 === c.length ? void a.append(b("<p><br></p>")) : void("<br>" !== b.trim(c.last().html()).toLowerCase() && a.append(b("<p><br></p>")))
|
|
}, c.fn.wrapImgAndText = function () {
|
|
var a, c, d = this.$txt, e = d.children("img"), f = d[0], g = f.childNodes, h = g.length;
|
|
for (e.length && e.each(function () {
|
|
b(this).wrap("<p>")
|
|
}), a = 0; a < h; a++) c = g[a], 3 === c.nodeType && c.textContent && b.trim(c.textContent) && b(c).wrap("<p>")
|
|
}, c.fn.clearEmptyOrNestP = function () {
|
|
var a = this.$txt, c = a.find("p");
|
|
c.each(function () {
|
|
var a, c = b(this), d = c.children(), e = d.length, f = b.trim(c.html());
|
|
return f ? void(1 === e && (a = d.first(), a.get(0) && "P" === a.get(0).nodeName && c.html(a.html()))) : void c.remove()
|
|
})
|
|
}, c.fn.scrollTop = function (a) {
|
|
var b = this, c = b.editor, d = b.$txt;
|
|
return c.useMaxHeight ? d.parent().scrollTop(a) : d.scrollTop(a)
|
|
}, c.fn.showHeightOnHover = function () {
|
|
function a(a) {
|
|
i || (e.append(h), i = !0);
|
|
var b = (g.position().top, g.outerHeight(), a.height()), c = a.position().top,
|
|
d = parseInt(a.css("margin-top"), 10), j = parseInt(a.css("padding-top"), 10),
|
|
k = parseInt(a.css("margin-bottom"), 10), l = parseInt(a.css("padding-bottom"), 10);
|
|
c + f.height();
|
|
h.css({height: b + j + d + l + k, top: c + f.height()})
|
|
}
|
|
|
|
function c() {
|
|
i && (h.remove(), i = !1)
|
|
}
|
|
|
|
var d = this.editor, e = d.$editorContainer, f = d.menuContainer, g = this.$txt,
|
|
h = b('<i class="height-tip"><i>'), i = !1;
|
|
g.on("mouseenter", "ul,ol,blockquote,p,h1,h2,h3,h4,h5,table,pre", function (c) {
|
|
a(b(c.currentTarget))
|
|
}).on("mouseleave", function () {
|
|
c()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
Array.prototype.indexOf || (Array.prototype.indexOf = function (a) {
|
|
for (var b = 0, c = this.length; b < c; b++) if (this[b] === a) return b;
|
|
return -1
|
|
}, Array.prototype.lastIndexOf = function (a) {
|
|
var b = this.length;
|
|
for (b -= 1; b >= 0; b--) if (this[b] === a) return b;
|
|
return -1
|
|
}), Date.now || (Date.now = function () {
|
|
return (new Date).valueOf()
|
|
});
|
|
var c = window.console, d = function () {
|
|
};
|
|
b.each(["info", "log", "warn", "error"], function (b, e) {
|
|
null == c ? a[e] = d : a[e] = function (b) {
|
|
a.config && a.config.printLog && c[e]()
|
|
}
|
|
}), a.random = function () {
|
|
return Math.random().toString().slice(2)
|
|
}, a.placeholder = "placeholder" in document.createElement("input"), a.placeholderForIE8 = function (c) {
|
|
a.placeholder || c.find("input[placeholder]").each(function () {
|
|
var a = b(this), c = a.attr("placeholder");
|
|
"" === a.val() && (a.css("color", "#666"), a.val(c), a.on("focus.placeholder click.placeholder", function () {
|
|
a.val(""), a.css("color", "#333"), a.off("focus.placeholder click.placeholder")
|
|
}))
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
a.langs = {}, a.langs["zh-cn"] = {
|
|
bold: "粗体",
|
|
underline: "下划线",
|
|
italic: "斜体",
|
|
forecolor: "文字颜色",
|
|
bgcolor: "背景色",
|
|
strikethrough: "删除线",
|
|
eraser: "清空格式",
|
|
source: "源码",
|
|
quote: "引用",
|
|
fontfamily: "字体",
|
|
fontsize: "字号",
|
|
head: "标题",
|
|
orderlist: "有序列表",
|
|
unorderlist: "无序列表",
|
|
alignleft: "左对齐",
|
|
aligncenter: "居中",
|
|
alignright: "右对齐",
|
|
link: "链接",
|
|
text: "文本",
|
|
submit: "提交",
|
|
cancel: "取消",
|
|
unlink: "取消链接",
|
|
table: "表格",
|
|
emotion: "表情",
|
|
img: "图片",
|
|
uploadImg: "上传图片",
|
|
linkImg: "网络图片",
|
|
video: "视频",
|
|
width: "宽",
|
|
height: "高",
|
|
location: "位置",
|
|
loading: "加载中",
|
|
searchlocation: "搜索位置",
|
|
dynamicMap: "动态地图",
|
|
clearLocation: "清除位置",
|
|
langDynamicOneLocation: "动态地图只能显示一个位置",
|
|
insertcode: "插入代码",
|
|
undo: "撤销",
|
|
redo: "重复",
|
|
fullscreen: "全屏",
|
|
openLink: "打开链接"
|
|
}, a.langs.en = {
|
|
bold: "Bold",
|
|
underline: "Underline",
|
|
italic: "Italic",
|
|
forecolor: "Color",
|
|
bgcolor: "Backcolor",
|
|
strikethrough: "Strikethrough",
|
|
eraser: "Eraser",
|
|
source: "Codeview",
|
|
quote: "Quote",
|
|
fontfamily: "Font family",
|
|
fontsize: "Font size",
|
|
head: "Head",
|
|
orderlist: "Ordered list",
|
|
unorderlist: "Unordered list",
|
|
alignleft: "Align left",
|
|
aligncenter: "Align center",
|
|
alignright: "Align right",
|
|
link: "Insert link",
|
|
text: "Text",
|
|
submit: "Submit",
|
|
cancel: "Cancel",
|
|
unlink: "Unlink",
|
|
table: "Table",
|
|
emotion: "Emotions",
|
|
img: "Image",
|
|
uploadImg: "Upload",
|
|
linkImg: "Link",
|
|
video: "Video",
|
|
width: "width",
|
|
height: "height",
|
|
location: "Location",
|
|
loading: "Loading",
|
|
searchlocation: "search",
|
|
dynamicMap: "Dynamic",
|
|
clearLocation: "Clear",
|
|
langDynamicOneLocation: "Only one location in dynamic map",
|
|
insertcode: "Insert Code",
|
|
undo: "Undo",
|
|
redo: "Redo",
|
|
fullscreen: "Full screnn",
|
|
openLink: "open link"
|
|
}
|
|
}), b(function (a, b) {
|
|
a.config = {}, a.config.zindex = 1e4, a.config.printLog = !0, a.config.menuFixed = 0, a.config.jsFilter = !0, a.config.legalTags = "p,h1,h2,h3,h4,h5,h6,blockquote,table,ul,ol,pre", a.config.lang = a.langs["zh-cn"], a.config.menus = ["source", "|", "bold", "underline", "italic", "strikethrough", "eraser", "forecolor", "bgcolor", "|", "quote", "fontfamily", "fontsize", "head", "unorderlist", "orderlist", "alignleft", "aligncenter", "alignright", "|", "link", "unlink", "table", "emotion", "|", "img", "video", "location", "insertcode", "|", "undo", "redo", "fullscreen"], a.config.colors = {
|
|
"#880000": "暗红色",
|
|
"#800080": "紫色",
|
|
"#ff0000": "红色",
|
|
"#ff00ff": "鲜粉色",
|
|
"#000080": "深蓝色",
|
|
"#0000ff": "蓝色",
|
|
"#00ffff": "湖蓝色",
|
|
"#008080": "蓝绿色",
|
|
"#008000": "绿色",
|
|
"#808000": "橄榄色",
|
|
"#00ff00": "浅绿色",
|
|
"#ffcc00": "橙黄色",
|
|
"#808080": "灰色",
|
|
"#c0c0c0": "银色",
|
|
"#000000": "黑色",
|
|
"#ffffff": "白色"
|
|
}, a.config.familys = ["宋体", "黑体", "楷体", "微软雅黑", "Arial", "Verdana", "Georgia", "Times New Roman", "Microsoft JhengHei", "Trebuchet MS", "Courier New", "Impact", "Comic Sans MS", "Consolas"], a.config.fontsizes = {
|
|
1: "12px",
|
|
2: "13px",
|
|
3: "16px",
|
|
4: "18px",
|
|
5: "24px",
|
|
6: "32px",
|
|
7: "48px"
|
|
}, a.config.emotionsShow = "icon", a.config.emotions = {
|
|
weibo: {
|
|
title: "微博表情", data: [
|
|
{
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif",
|
|
value: "[草泥马]"
|
|
},
|
|
{
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif",
|
|
value: "[神马]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif",
|
|
value: "[浮云]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_thumb.gif",
|
|
value: "[给力]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f2/wg_thumb.gif",
|
|
value: "[围观]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/70/vw_thumb.gif",
|
|
value: "[威武]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6e/panda_thumb.gif",
|
|
value: "[熊猫]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/81/rabbit_thumb.gif",
|
|
value: "[兔子]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/otm_thumb.gif",
|
|
value: "[奥特曼]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/15/j_thumb.gif",
|
|
value: "[囧]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/89/hufen_thumb.gif",
|
|
value: "[互粉]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c4/liwu_thumb.gif",
|
|
value: "[礼物]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/ac/smilea_thumb.gif",
|
|
value: "[呵呵]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/0b/tootha_thumb.gif",
|
|
value: "[嘻嘻]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6a/laugh.gif",
|
|
value: "[哈哈]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/14/tza_thumb.gif",
|
|
value: "[可爱]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/af/kl_thumb.gif",
|
|
value: "[可怜]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/a0/kbsa_thumb.gif",
|
|
value: "[挖鼻屎]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f4/cj_thumb.gif",
|
|
value: "[吃惊]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6e/shamea_thumb.gif",
|
|
value: "[害羞]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c3/zy_thumb.gif",
|
|
value: "[挤眼]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/29/bz_thumb.gif",
|
|
value: "[闭嘴]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/71/bs2_thumb.gif",
|
|
value: "[鄙视]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6d/lovea_thumb.gif",
|
|
value: "[爱你]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/9d/sada_thumb.gif",
|
|
value: "[泪]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/19/heia_thumb.gif",
|
|
value: "[偷笑]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/8f/qq_thumb.gif",
|
|
value: "[亲亲]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/b6/sb_thumb.gif",
|
|
value: "[生病]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/58/mb_thumb.gif",
|
|
value: "[太开心]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/17/ldln_thumb.gif",
|
|
value: "[懒得理你]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/98/yhh_thumb.gif",
|
|
value: "[右哼哼]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6d/zhh_thumb.gif",
|
|
value: "[左哼哼]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/a6/x_thumb.gif",
|
|
value: "[嘘]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/af/cry.gif",
|
|
value: "[衰]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/73/wq_thumb.gif",
|
|
value: "[委屈]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/9e/t_thumb.gif",
|
|
value: "[吐]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f3/k_thumb.gif",
|
|
value: "[打哈欠]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/27/bba_thumb.gif",
|
|
value: "[抱抱]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7c/angrya_thumb.gif",
|
|
value: "[怒]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/5c/yw_thumb.gif",
|
|
value: "[疑问]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/a5/cza_thumb.gif",
|
|
value: "[馋嘴]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/70/88_thumb.gif",
|
|
value: "[拜拜]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/e9/sk_thumb.gif",
|
|
value: "[思考]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/24/sweata_thumb.gif",
|
|
value: "[汗]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7f/sleepya_thumb.gif",
|
|
value: "[困]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6b/sleepa_thumb.gif",
|
|
value: "[睡觉]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/90/money_thumb.gif",
|
|
value: "[钱]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/0c/sw_thumb.gif",
|
|
value: "[失望]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/40/cool_thumb.gif",
|
|
value: "[酷]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/8c/hsa_thumb.gif",
|
|
value: "[花心]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/49/hatea_thumb.gif",
|
|
value: "[哼]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/36/gza_thumb.gif",
|
|
value: "[鼓掌]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d9/dizzya_thumb.gif",
|
|
value: "[晕]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/1a/bs_thumb.gif",
|
|
value: "[悲伤]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/62/crazya_thumb.gif",
|
|
value: "[抓狂]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/91/h_thumb.gif",
|
|
value: "[黑线]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6d/yx_thumb.gif",
|
|
value: "[阴险]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/89/nm_thumb.gif",
|
|
value: "[怒骂]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/40/hearta_thumb.gif",
|
|
value: "[心]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/ea/unheart.gif",
|
|
value: "[伤心]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/58/pig.gif",
|
|
value: "[猪头]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d6/ok_thumb.gif",
|
|
value: "[ok]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d9/ye_thumb.gif",
|
|
value: "[耶]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d8/good_thumb.gif",
|
|
value: "[good]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c7/no_thumb.gif",
|
|
value: "[不要]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d0/z2_thumb.gif",
|
|
value: "[赞]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/40/come_thumb.gif",
|
|
value: "[来]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d8/sad_thumb.gif",
|
|
value: "[弱]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/91/lazu_thumb.gif",
|
|
value: "[蜡烛]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6a/cake.gif",
|
|
value: "[蛋糕]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d3/clock_thumb.gif",
|
|
value: "[钟]"
|
|
}, {
|
|
icon: "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/1b/m_thumb.gif",
|
|
value: "[话筒]"
|
|
}
|
|
|
|
|
|
]
|
|
}
|
|
}, a.config.mapAk = "TVhjYjq1ICT2qqL5LdS8mwas", a.config.uploadImgUrl = "", a.config.uploadTimeout = 2e4, a.config.uploadImgFns = {}, a.config.customUpload = !1, a.config.uploadParams = {}, a.config.uploadHeaders = {}, a.config.withCredentials = !0, a.config.hideLinkImg = !1, a.config.pasteFilter = !0, a.config.pasteText = !1, a.config.codeDefaultLang = "javascript"
|
|
}), b(function (a, b) {
|
|
a.UI = {}, a.UI.menus = {
|
|
default: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-command"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
bold: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-bold"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
underline: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-underline"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
italic: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-italic"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
forecolor: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-pencil"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
bgcolor: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-brush"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
strikethrough: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-strikethrough"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
eraser: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-eraser"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
quote: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-quotes-left"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
source: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-code"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
fontfamily: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-font2"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
fontsize: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-text-height"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
head: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-header"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
orderlist: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-list-numbered"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
unorderlist: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-list-bullet"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
alignleft: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-align-left"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
aligncenter: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-align-center"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
alignright: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-align-right"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
link: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-link"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
unlink: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-unlink"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
table: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-table"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
emotion: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-happy"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
img: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-picture"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
video: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-play"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
location: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-location"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
insertcode: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-terminal"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
undo: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-ccw"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
redo: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-cw"></i></a>',
|
|
selected: ".selected"
|
|
},
|
|
fullscreen: {
|
|
normal: '<a href="#" tabindex="-1"><i class="wangeditor-menu-img-enlarge2"></i></a>',
|
|
selected: '<a href="#" tabindex="-1" class="selected"><i class="wangeditor-menu-img-shrink2"></i></a>'
|
|
}
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.initDefaultConfig = function () {
|
|
var c = this;
|
|
c.config = b.extend({}, a.config), c.UI = b.extend({}, a.UI)
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.addEditorContainer = function () {
|
|
this.$editorContainer = b('<div class="wangEditor-container"></div>')
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.addTxt = function () {
|
|
var b = this, c = new a.Txt(b);
|
|
b.txt = c
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.addMenuContainer = function () {
|
|
var b = this;
|
|
b.menuContainer = new a.MenuContainer(b)
|
|
}
|
|
}), b(function (a, b) {
|
|
a.createMenuFns = [], a.createMenu = function (b) {
|
|
a.createMenuFns.push(b)
|
|
}, a.fn.addMenus = function () {
|
|
function c(a) {
|
|
return e.indexOf(a) >= 0
|
|
}
|
|
|
|
var d = this, e = d.config.menus;
|
|
b.each(a.createMenuFns, function (a, b) {
|
|
b.call(d, c)
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "bold";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang, f = new a.Menu({editor: d, id: c, title: e.bold, commandName: "Bold"});
|
|
f.clickEventSelected = function (a) {
|
|
var b = d.isRangeEmpty();
|
|
b ? d.commandForElem("b,strong,h1,h2,h3,h4,h5", a, "Bold") : d.command(a, "Bold")
|
|
}, d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "underline";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang,
|
|
f = new a.Menu({editor: d, id: c, title: e.underline, commandName: "Underline"});
|
|
f.clickEventSelected = function (a) {
|
|
var b = d.isRangeEmpty();
|
|
b ? d.commandForElem("u,a", a, "Underline") : d.command(a, "Underline")
|
|
}, d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "italic";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang,
|
|
f = new a.Menu({editor: d, id: c, title: e.italic, commandName: "Italic"});
|
|
f.clickEventSelected = function (a) {
|
|
var b = d.isRangeEmpty();
|
|
b ? d.commandForElem("i", a, "Italic") : d.command(a, "Italic")
|
|
}, d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "forecolor";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang, g = e.config.colors,
|
|
h = new a.Menu({editor: e, id: d, title: f.forecolor}), i = b("<div></div>");
|
|
b.each(g, function (a, b) {
|
|
i.append(['<a href="#" class="color-item"', ' title="' + b + '" commandValue="' + a + '" ', ' style="color: ' + a + '" ', '><i class="wangeditor-menu-img-pencil"></i></a>'].join(""))
|
|
}), i.on("click", "a[commandValue]", function (a) {
|
|
var c = b(this), d = c.attr("commandValue");
|
|
h.selected && e.isRangeEmpty() ? e.commandForElem("font[color]", a, "forecolor", d) : e.command(a, "forecolor", d)
|
|
}), h.dropPanel = new a.DropPanel(e, h, {
|
|
$content: i,
|
|
width: 125
|
|
}), h.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "font[color]"), !!a
|
|
}, e.menus[d] = h
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
function d(a) {
|
|
var b;
|
|
return !!(a && a.style && null != a.style.cssText && (b = a.style.cssText, b && b.indexOf("background-color:") >= 0))
|
|
}
|
|
|
|
var e = "bgcolor";
|
|
if (c(e)) {
|
|
var f = this, g = f.config.lang, h = f.config.colors,
|
|
i = new a.Menu({editor: f, id: e, title: g.bgcolor}), j = b("<div></div>");
|
|
b.each(h, function (a, b) {
|
|
j.append(['<a href="#" class="color-item"', ' title="' + b + '" commandValue="' + a + '" ', ' style="color: ' + a + '" ', '><i class="wangeditor-menu-img-brush"></i></a>'].join(""))
|
|
}), j.on("click", "a[commandValue]", function (a) {
|
|
var c = b(this), e = c.attr("commandValue");
|
|
i.selected && f.isRangeEmpty() ? f.commandForElem({
|
|
selector: "span,font",
|
|
check: d
|
|
}, a, "BackColor", e) : f.command(a, "BackColor", e)
|
|
}), i.dropPanel = new a.DropPanel(f, i, {
|
|
$content: j,
|
|
width: 125
|
|
}), i.updateSelectedEvent = function () {
|
|
var a = f.getRangeElem();
|
|
return a = f.getSelfOrParentByName(a, "span,font", d), !!a
|
|
}, f.menus[e] = i
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "strikethrough";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang,
|
|
f = new a.Menu({editor: d, id: c, title: e.strikethrough, commandName: "StrikeThrough"});
|
|
f.clickEventSelected = function (a) {
|
|
var b = d.isRangeEmpty();
|
|
b ? d.commandForElem("strike", a, "StrikeThrough") : d.command(a, "StrikeThrough")
|
|
}, d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "eraser";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang,
|
|
g = new a.Menu({editor: e, id: d, title: f.eraser, commandName: "RemoveFormat"});
|
|
g.clickEvent = function (a) {
|
|
function c() {
|
|
var a, c, d, e, f, h, i, j = this;
|
|
a = j.getRangeElem(), e = j.getSelfOrParentByName(a, "blockquote"), e && (f = b(e), g = b("<p>" + f.text() + "</p>"), f.after(g).remove()), c = j.getSelfOrParentByName(a, "p,h1,h2,h3,h4,h5"), c && (d = b(c), g = b("<p>" + d.text() + "</p>"), d.after(g).remove()), h = j.getSelfOrParentByName(a, "ul,ol"), h && (i = b(h), g = b("<p>" + i.text() + "</p>"), i.after(g).remove())
|
|
}
|
|
|
|
function d() {
|
|
var a = this;
|
|
g && a.restoreSelectionByElem(g.get(0))
|
|
}
|
|
|
|
var f = e.isRangeEmpty();
|
|
if (!f) return void e.command(a, "RemoveFormat");
|
|
var g;
|
|
e.customCommand(a, c, d)
|
|
}, e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
function d() {
|
|
var a = i.$codeTextarea, c = g.txt.$txt, d = b.trim(a.val());
|
|
d || (d = "<p><br></p>"), g.config.jsFilter && (d = d.replace(/<script[\s\S]*?<\/script>/gi, ""));
|
|
try {
|
|
c.html(d)
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
var e = "source";
|
|
if (c(e)) {
|
|
var f, g = this, h = g.config.lang, i = new a.Menu({editor: g, id: e, title: h.source});
|
|
i.isShowCode = !1, i.clickEvent = function (a) {
|
|
var c = this, e = c.editor, g = e.txt.$txt, h = g.outerHeight(), j = g.height();
|
|
c.$codeTextarea || (c.$codeTextarea = b('<textarea class="code-textarea"></textarea>'));
|
|
var k = c.$codeTextarea;
|
|
k.css({height: j, "margin-top": h - j}), k.val(g.html()), k.on("change", function (a) {
|
|
d()
|
|
}), g.after(k).hide(), k.show(), i.isShowCode = !0, this.updateSelected(), e.disableMenusExcept("source"), f = g.html()
|
|
}, i.clickEventSelected = function (a) {
|
|
var b = this, c = b.editor, e = c.txt.$txt, g = b.$codeTextarea;
|
|
g && (d(), g.after(e).hide(), e.show(), i.isShowCode = !1, this.updateSelected(), c.enableMenusExcept("source"), e.html() !== f && c.onchange && "function" == typeof c.onchange && c.onchange.call(c))
|
|
}, i.updateSelectedEvent = function () {
|
|
return this.isShowCode
|
|
}, g.menus[e] = i
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "quote";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang, g = new a.Menu({
|
|
editor: e,
|
|
id: d,
|
|
title: f.quote,
|
|
commandName: "formatBlock",
|
|
commandValue: "blockquote"
|
|
});
|
|
g.clickEvent = function (a) {
|
|
function c() {
|
|
h = b("<p>" + f.text() + "</p>"), f.after(h).remove(), h.wrap("<blockquote>")
|
|
}
|
|
|
|
function d() {
|
|
var a = this;
|
|
h && a.restoreSelectionByElem(h.get(0))
|
|
}
|
|
|
|
var f, g = e.getRangeElem();
|
|
if (!g) return void a.preventDefault();
|
|
var h, i = e.getSelfOrParentByName(g, "blockquote");
|
|
return i ? void a.preventDefault() : (g = e.getLegalTags(g), f = b(g), f.text() ? g ? void e.customCommand(a, c, d) : void e.command(a, "formatBlock", "blockquote") : void 0)
|
|
}, g.clickEventSelected = function (a) {
|
|
function c() {
|
|
var a, c;
|
|
if (a = b(g), c = a.children(), c.length) return c.each(function (c) {
|
|
var d = b(this);
|
|
"P" === d.get(0).nodeName ? a.after(d) : a.after("<p>" + d.text() + "</p>"), h = d
|
|
}), void a.remove()
|
|
}
|
|
|
|
function d() {
|
|
var a = this;
|
|
h && a.restoreSelectionByElem(h.get(0))
|
|
}
|
|
|
|
var f, g, h;
|
|
return f = e.getRangeElem(), (g = e.getSelfOrParentByName(f, "blockquote")) ? void e.customCommand(a, c, d) : void a.preventDefault()
|
|
}, g.updateSelectedEvent = function () {
|
|
var a, b = this, c = b.editor;
|
|
return a = c.getRangeElem(), a = c.getSelfOrParentByName(a, "blockquote"), !!a
|
|
}, e.menus[d] = g, e.ready(function () {
|
|
var a = this, c = a.txt.$txt, d = !1;
|
|
c.on("keydown", function (c) {
|
|
if (13 !== c.keyCode) return void(d = !1);
|
|
var e = a.getRangeElem();
|
|
if (e = a.getSelfOrParentByName(e, "blockquote"), !e) return void(d = !1);
|
|
if (!d) return void(d = !0);
|
|
var f = a.getRangeElem(), g = b(f);
|
|
g.length && g.parent().after(g), a.restoreSelectionByElem(f, "start"), d = !1, c.preventDefault()
|
|
})
|
|
}), e.ready(function () {
|
|
function a() {
|
|
d && d.remove()
|
|
}
|
|
|
|
function c() {
|
|
if (d) {
|
|
var a = d.prev();
|
|
a.length ? e.restoreSelectionByElem(a.get(0)) : e.initSelection()
|
|
}
|
|
}
|
|
|
|
var d, e = this, f = e.txt.$txt;
|
|
f.on("keydown", function (f) {
|
|
if (8 === f.keyCode) {
|
|
var g = e.getRangeElem();
|
|
if (g = e.getSelfOrParentByName(g, "blockquote")) {
|
|
d = b(g);
|
|
var h = d.text();
|
|
h || e.customCommand(f, a, c)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "fontfamily";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang, g = e.config.familys,
|
|
h = new a.Menu({editor: e, id: d, title: f.fontfamily, commandName: "fontName"}), i = {};
|
|
b.each(g, function (a, b) {
|
|
i[b] = b
|
|
});
|
|
var j = '<span style="font-family:{#commandValue};">{#title}</span>';
|
|
h.dropList = new a.DropList(e, h, {
|
|
data: i,
|
|
tpl: j,
|
|
selectorForELemCommand: "font[face]"
|
|
}), h.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "font[face]"), !!a
|
|
}, e.menus[d] = h
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "fontsize";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang, f = d.config.fontsizes,
|
|
g = new a.Menu({editor: d, id: c, title: e.fontsize, commandName: "fontSize"}), h = f,
|
|
i = '<span style="font-size:{#title};">{#title}</span>';
|
|
g.dropList = new a.DropList(d, g, {
|
|
data: h,
|
|
tpl: i,
|
|
selectorForELemCommand: "font[size]"
|
|
}), g.updateSelectedEvent = function () {
|
|
var a = d.getRangeElem();
|
|
return a = d.getSelfOrParentByName(a, "font[size]"), !!a
|
|
}, d.menus[c] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
function c(a) {
|
|
g.queryCommandState("InsertOrderedList") ? (f = !0, g.command(a, "InsertOrderedList")) : f = !1
|
|
}
|
|
|
|
function d(a) {
|
|
f && g.command(a, "InsertOrderedList")
|
|
}
|
|
|
|
var e = "head";
|
|
if (b(e)) {
|
|
var f, g = this, h = g.config.lang,
|
|
i = new a.Menu({editor: g, id: e, title: h.head, commandName: "formatBlock"}),
|
|
j = {"<h1>": "标题1", "<h2>": "标题2", "<h3>": "标题3", "<h4>": "标题4", "<h5>": "标题5"},
|
|
k = "{#commandValue}{#title}";
|
|
i.dropList = new a.DropList(g, i, {
|
|
data: j,
|
|
tpl: k,
|
|
beforeEvent: c,
|
|
afterEvent: d
|
|
}), i.updateSelectedEvent = function () {
|
|
var a = g.getRangeElem();
|
|
return a = g.getSelfOrParentByName(a, "h1,h2,h3,h4,h5"), !!a
|
|
}, g.menus[e] = i
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "unorderlist";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang,
|
|
f = new a.Menu({editor: d, id: c, title: e.unorderlist, commandName: "InsertUnorderedList"});
|
|
d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "orderlist";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang,
|
|
f = new a.Menu({editor: d, id: c, title: e.orderlist, commandName: "InsertOrderedList"});
|
|
d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "alignleft";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang,
|
|
g = new a.Menu({editor: e, id: d, title: f.alignleft, commandName: "JustifyLeft"});
|
|
g.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "p,h1,h2,h3,h4,h5,li", function (a) {
|
|
var c;
|
|
return !!(a && a.style && null != a.style.cssText && (c = a.style.cssText, c && /text-align:\s*left;/.test(c))) || "left" === b(a).attr("align")
|
|
}), !!a
|
|
}, e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "aligncenter";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang,
|
|
g = new a.Menu({editor: e, id: d, title: f.aligncenter, commandName: "JustifyCenter"});
|
|
g.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "p,h1,h2,h3,h4,h5,li", function (a) {
|
|
var c;
|
|
return !!(a && a.style && null != a.style.cssText && (c = a.style.cssText, c && /text-align:\s*center;/.test(c))) || "center" === b(a).attr("align")
|
|
}), !!a
|
|
}, e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "alignright";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang,
|
|
g = new a.Menu({editor: e, id: d, title: f.alignright, commandName: "JustifyRight"});
|
|
g.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "p,h1,h2,h3,h4,h5,li", function (a) {
|
|
var c;
|
|
return !!(a && a.style && null != a.style.cssText && (c = a.style.cssText, c && /text-align:\s*right;/.test(c))) || "right" === b(a).attr("align")
|
|
}), !!a
|
|
}, e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "link";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang, g = new a.Menu({editor: e, id: d, title: f.link}),
|
|
h = b("<div></div>"), i = b('<div style="margin:20px 10px;" class="clearfix"></div>'),
|
|
j = i.clone(), k = i.clone().css("margin", "0 10px"),
|
|
l = b('<input type="text" class="block" placeholder="' + f.text + '"/>'),
|
|
m = b('<input type="text" class="block" placeholder="' + f.link + '"/>'),
|
|
n = b('<button class="right">' + f.submit + "</button>"),
|
|
o = b('<button class="right gray">' + f.cancel + "</button>");
|
|
i.append(l), j.append(m), k.append(n).append(o), h.append(i).append(j).append(k), g.dropPanel = new a.DropPanel(e, g, {
|
|
$content: h,
|
|
width: 300
|
|
}), g.clickEvent = function (a) {
|
|
var b = this, c = b.dropPanel;
|
|
if (c.isShowing) return void c.hide();
|
|
l.val(""), m.val("http://");
|
|
var d = "", f = e.getRangeElem();
|
|
f = e.getSelfOrParentByName(f, "a"), f && (d = f.href || "");
|
|
var g = "", h = e.isRangeEmpty();
|
|
h ? f && (g = f.textContent || f.innerHTML) : g = e.getRangeText() || "", d && m.val(d), g && l.val(g), h ? l.removeAttr("disabled") : l.attr("disabled", !0), c.show()
|
|
}, g.updateSelectedEvent = function () {
|
|
var a = e.getRangeElem();
|
|
return a = e.getSelfOrParentByName(a, "a"), !!a
|
|
}, o.click(function (a) {
|
|
a.preventDefault(), g.dropPanel.hide()
|
|
}), n.click(function (c) {
|
|
c.preventDefault();
|
|
var d, f, h, i, j, k, n = e.getRangeElem(), o = e.getSelfOrParentByName(n, "a"),
|
|
p = e.isRangeEmpty(), q = e.txt.$txt, r = "link" + a.random(), s = b.trim(m.val()),
|
|
t = b.trim(l.val());
|
|
return s ? (t || (t = s), void(p ? o ? (d = b(o), h = function () {
|
|
d.attr("href", s), d.text(t)
|
|
}, i = function () {
|
|
var a = this;
|
|
a.restoreSelectionByElem(o)
|
|
}, e.customCommand(c, h, i)) : (f = '<a href="' + s + '" target="_blank">' + t + "</a>", a.userAgent.indexOf("Firefox") > 0 && (f += "<span> </span>"), e.command(c, "insertHtml", f)) : (j = q.find("a"), j.attr(r, "1"), e.command(c, "createLink", s), k = q.find("a").not("[" + r + "]"), k.attr("target", "_blank"), j.removeAttr(r)))) : void g.dropPanel.focusFirstInput()
|
|
}), e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "unlink";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang,
|
|
g = new a.Menu({editor: e, id: d, title: f.unlink, commandName: "unLink"});
|
|
g.clickEvent = function (a) {
|
|
function c() {
|
|
i.after(j).remove()
|
|
}
|
|
|
|
function d() {
|
|
e.restoreSelectionByElem(j.get(0))
|
|
}
|
|
|
|
var f = e.isRangeEmpty();
|
|
if (!f) return void e.command(a, "unLink");
|
|
var g = e.getRangeElem(), h = e.getSelfOrParentByName(g, "a");
|
|
if (!h) return void a.preventDefault();
|
|
var i = b(h), j = b("<span>" + i.text() + "</span>");
|
|
e.customCommand(a, c, d)
|
|
}, e.menus[d] = g
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "table";
|
|
if (c(d)) {
|
|
var e, f, g, h = this, i = h.config.lang, j = new a.Menu({editor: h, id: d, title: i.table}),
|
|
k = b('<div style="font-size: 14px; color: #666; text-align:right;"></div>'),
|
|
l = b('<table class="choose-table" style="margin-bottom:10px;margin-top:5px;">'),
|
|
m = b("<span>0</span>"), n = b("<span> 行 </span>"), o = b("<span>0</span>"),
|
|
p = b("<span> 列</span>");
|
|
for (f = 0; f < 15; f++) {
|
|
for (e = b('<tr index="' + (f + 1) + '">'), g = 0; g < 20; g++) e.append(b('<td index="' + (g + 1) + '">'));
|
|
l.append(e)
|
|
}
|
|
k.append(l), k.append(m).append(n).append(o).append(p), l.on("mouseenter", "td", function (a) {
|
|
var c = b(a.currentTarget), d = c.attr("index"), e = c.parent(), f = e.attr("index");
|
|
m.text(f), o.text(d), l.find("tr").each(function () {
|
|
var a = b(this), c = a.attr("index");
|
|
parseInt(c, 10) <= parseInt(f, 10) ? a.find("td").each(function () {
|
|
var a = b(this), c = a.attr("index");
|
|
parseInt(c, 10) <= parseInt(d, 10) ? a.addClass("active") : a.removeClass("active")
|
|
}) : a.find("td").removeClass("active")
|
|
})
|
|
}).on("mouseleave", function (a) {
|
|
l.find("td").removeClass("active"), m.text(0), o.text(0)
|
|
}), l.on("click", "td", function (a) {
|
|
var c, d, e = b(a.currentTarget), f = e.attr("index"), g = e.parent(), i = g.attr("index"),
|
|
j = parseInt(i, 10), k = parseInt(f, 10), l = "<table>";
|
|
for (c = 0; c < j; c++) {
|
|
for (l += "<tr>", d = 0; d < k; d++) l += "<td><span> </span></td>";
|
|
l += "</tr>"
|
|
}
|
|
l += "</table>", h.command(a, "insertHtml", l)
|
|
}), j.dropPanel = new a.DropPanel(h, j, {$content: k, width: 262}), h.menus[d] = j
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
function d(a, c) {
|
|
b.each(a, function (a, d) {
|
|
var e = d.icon || d.url, g = d.value || d.title, h = "icon" === j ? e : g,
|
|
i = b('<a href="#" commandValue="' + h + '"></a>'), k = b("<img>");
|
|
k.attr("_src", e), i.append(k), c.append(i), f.emotionUrls.push(e)
|
|
})
|
|
}
|
|
|
|
var e = "emotion";
|
|
if (c(e)) {
|
|
var f = this, g = f.config, h = g.lang, i = g.emotions, j = g.emotionsShow;
|
|
f.emotionUrls = [];
|
|
var k = new a.Menu({editor: f, id: e, title: h.emotion}), l = b('<div class="panel-tab"></div>'),
|
|
m = b('<div class="tab-container"></div>'),
|
|
n = b('<div class="content-container emotion-content-container"></div>');
|
|
b.each(i, function (c, e) {
|
|
var f = e.title, g = e.data;
|
|
a.log("正在处理 " + f + " 表情的数据...");
|
|
var h = b('<a href="#">' + f + " </a>");
|
|
m.append(h);
|
|
var i = b('<div class="content"></div>');
|
|
if (n.append(i), h.click(function (a) {
|
|
m.children().removeClass("selected"), n.children().removeClass("selected"), i.addClass("selected"), h.addClass("selected"), a.preventDefault()
|
|
}), "string" == typeof g) a.log("将通过 " + g + " 地址ajax下载表情包"), b.get(g, function (c) {
|
|
c = b.parseJSON(c), a.log("下载完毕,得到 " + c.length + " 个表情"), d(c, i)
|
|
}); else {
|
|
if (!(Object.prototype.toString.call(g).toLowerCase().indexOf("array") > 0)) return void a.error("data 数据格式错误,请修改为正确格式,参考文档:" + a.docsite);
|
|
d(g, i)
|
|
}
|
|
}), l.append(m).append(n), m.children().first().addClass("selected"), n.children().first().addClass("selected"), n.on("click", "a[commandValue]", function (a) {
|
|
var c = b(a.currentTarget), d = c.attr("commandValue");
|
|
"icon" === j ? f.command(a, "InsertImage", d) : f.command(a, "insertHtml", "<span>" + d + "</span>"), a.preventDefault()
|
|
}), k.dropPanel = new a.DropPanel(f, k, {$content: l, width: 350}), k.clickEvent = function (c) {
|
|
var d = this, e = d.dropPanel;
|
|
return e.isShowing ? void e.hide() : (e.show(), void(d.imgLoaded || (n.find("img").each(function () {
|
|
var c = b(this), d = c.attr("_src");
|
|
c.on("error", function () {
|
|
a.error("加载不出表情图片 " + d)
|
|
}), c.attr("src", d), c.removeAttr("_src")
|
|
}), d.imgLoaded = !0)))
|
|
}, f.menus[e] = k
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
function c(a, c, d) {
|
|
function e() {
|
|
h.val("")
|
|
}
|
|
|
|
var f = a.config.lang, g = b('<div style="margin:20px 10px 10px 10px;"></div>'),
|
|
h = b('<input type="text" class="block" placeholder="http://"/>');
|
|
g.append(h);
|
|
var i = b('<button class="right">' + f.submit + "</button>"),
|
|
j = b('<button class="right gray">' + f.cancel + "</button>");
|
|
d.append(g).append(i).append(j), j.click(function (a) {
|
|
a.preventDefault(), c.dropPanel.hide()
|
|
}), i.click(function (c) {
|
|
c.preventDefault();
|
|
var d = b.trim(h.val());
|
|
if (!d) return void h.focus();
|
|
var f = '<img style="max-width:100%;" src="' + d + '"/>';
|
|
a.command(c, "insertHtml", f, e)
|
|
})
|
|
}
|
|
|
|
a.createMenu(function (d) {
|
|
function e() {
|
|
o.click(function (a) {
|
|
m.children().removeClass("selected"), n.children().removeClass("selected"), q.addClass("selected"), o.addClass("selected"), a.preventDefault()
|
|
}), p.click(function (b) {
|
|
m.children().removeClass("selected"), n.children().removeClass("selected"), r.addClass("selected"), p.addClass("selected"), b.preventDefault(), a.placeholder && r.find("input[type=text]").focus()
|
|
}), o.click()
|
|
}
|
|
|
|
function f() {
|
|
m.remove(), q.remove(), r.addClass("selected")
|
|
}
|
|
|
|
function g() {
|
|
m.remove(), r.remove(), q.addClass("selected")
|
|
}
|
|
|
|
var h = "img";
|
|
if (d(h)) {
|
|
var i = this, j = i.config.lang, k = new a.Menu({editor: i, id: h, title: j.img}),
|
|
l = b('<div class="panel-tab"></div>'), m = b('<div class="tab-container"></div>'),
|
|
n = b('<div class="content-container"></div>');
|
|
l.append(m).append(n);
|
|
var o = b('<a href="#">' + j.uploadImg + "</a>"), p = b('<a href="#">' + j.linkImg + "</a>");
|
|
m.append(o).append(p);
|
|
var q = b('<div class="content"></div>');
|
|
n.append(q);
|
|
var r = b('<div class="content"></div>');
|
|
n.append(r), c(i, k, r), k.dropPanel = new a.DropPanel(i, k, {
|
|
$content: l,
|
|
width: 400,
|
|
onRender: function () {
|
|
var a = i.config.customUploadInit;
|
|
a && a.call(i)
|
|
}
|
|
}), i.menus[h] = k, i.ready(function () {
|
|
function a() {
|
|
k.dropPanel.hide()
|
|
}
|
|
|
|
var b = this, c = b.config, d = c.uploadImgUrl, h = c.customUpload, i = c.hideLinkImg;
|
|
d || h ? (b.$uploadContent = q, e(), i && g()) : f(), q.click(function () {
|
|
setTimeout(a)
|
|
})
|
|
})
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "video";
|
|
if (c(d)) {
|
|
var e = this, f = e.config.lang, g = /^<(iframe)|(embed)/i,
|
|
h = new a.Menu({editor: e, id: d, title: f.video}), i = b("<div></div>"),
|
|
j = b('<div style="margin:20px 10px;"></div>'),
|
|
k = b('<input type="text" class="block" placeholder=\'格式如:<iframe src="..." frameborder=0 allowfullscreen></iframe>\'/>');
|
|
j.append(k);
|
|
var l = b('<div style="margin:20px 10px;"></div>'),
|
|
m = b('<input type="text" value="640" style="width:50px;text-align:center;"/>'),
|
|
n = b('<input type="text" value="498" style="width:50px;text-align:center;"/>');
|
|
l.append("<span> " + f.width + " </span>").append(m).append("<span> px </span>").append("<span> " + f.height + " </span>").append(n).append("<span> px </span>");
|
|
var o = b("<div></div>"),
|
|
p = b('<a href="http://www.kancloud.cn/wangfupeng/wangeditor2/134973" target="_blank" style="display:inline-block;margin-top:10px;margin-left:10px;color:#999;">如何复制视频链接?</a>'),
|
|
q = b('<button class="right">' + f.submit + "</button>"),
|
|
r = b('<button class="right gray">' + f.cancel + "</button>");
|
|
o.append(p).append(q).append(r), i.append(j).append(l).append(o), r.click(function (a) {
|
|
a.preventDefault(), k.val(""), h.dropPanel.hide()
|
|
}), q.click(function (a) {
|
|
a.preventDefault();
|
|
var c, d = b.trim(k.val()), f = parseInt(m.val()), i = parseInt(n.val()), j = b("<div>"),
|
|
l = "<p>{content}</p>";
|
|
return d ? g.test(d) ? isNaN(f) || isNaN(i) ? void alert("宽度或高度不是数字!") : (c = b(d), c.attr("width", f).attr("height", i), l = l.replace("{content}", j.append(c).html()), e.command(a, "insertHtml", l), void k.val("")) : (alert("视频链接格式错误!"), void h.dropPanel.focusFirstInput()) : void h.dropPanel.focusFirstInput()
|
|
}), h.dropPanel = new a.DropPanel(e, h, {$content: i, width: 400}), e.menus[d] = h
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
var c = function (a) {
|
|
return "onkeyup" in a
|
|
}(document.createElement("input"));
|
|
a.baiduMapAk = "TVhjYjq1ICT2qqL5LdS8mwas", a.numberOfLocation = 0, a.createMenu(function (d) {
|
|
function e() {
|
|
q.val("")
|
|
}
|
|
|
|
var f = "location";
|
|
if (d(f)) {
|
|
if (++a.numberOfLocation > 1) return void a.error("目前不支持在一个页面多个编辑器上同时使用地图,可通过自定义菜单配置去掉地图菜单");
|
|
var g = this, h = g.config, i = h.lang, j = h.mapAk;
|
|
g.mapData = {};
|
|
var k = g.mapData;
|
|
k.markers = [], k.mapContainerId = "map" + a.random(), k.clearLocations = function () {
|
|
var a = k.map;
|
|
a && (a.clearOverlays(), k.markers = [])
|
|
}, k.searchMap = function () {
|
|
var a = k.map;
|
|
if (a) {
|
|
var b, c, d = window.BMap, e = p.val(), f = q.val();
|
|
"" !== e && (f && "" !== f || a.centerAndZoom(e, 11), f && "" !== f && (b = new d.Geocoder, b.getPoint(f, function (b) {
|
|
b ? (a.centerAndZoom(b, 13), c = new d.Marker(b), a.addOverlay(c), c.enableDragging(), k.markers.push(c)) : a.centerAndZoom(e, 11)
|
|
}, e)))
|
|
}
|
|
};
|
|
var l = !1;
|
|
window.baiduMapCallBack = function () {
|
|
function b(b) {
|
|
var d = b.name;
|
|
e.setCenter(d), p.val(d), a.placeholder && q.focus();
|
|
var f, g;
|
|
c ? (g = function (a) {
|
|
"keyup" === a.type && 13 === a.keyCode && a.preventDefault(), f && clearTimeout(f), f = setTimeout(k.searchMap, 500)
|
|
}, p.on("keyup change paste", g), q.on("keyup change paste", g)) : (g = function () {
|
|
if (!n.is(":visible")) return void clearTimeout(f);
|
|
var a = "", b = "", c = p.val(), d = q.val();
|
|
c === a && d === b || (k.searchMap(), a = c, b = d), f && clearTimeout(f), f = setTimeout(g, 1e3)
|
|
}, f = setTimeout(g, 1e3))
|
|
}
|
|
|
|
if (!l) {
|
|
l = !0;
|
|
var d = window.BMap;
|
|
k.map || (k.map = new d.Map(k.mapContainerId));
|
|
var e = k.map;
|
|
e.centerAndZoom(new d.Point(116.404, 39.915), 11), e.addControl(new d.MapTypeControl), e.setCurrentCity("北京"), e.enableScrollWheelZoom(!0);
|
|
var f = new d.LocalCity;
|
|
f.get(b), e.addEventListener("click", function (a) {
|
|
var b = new d.Marker(new d.Point(a.point.lng, a.point.lat));
|
|
e.addOverlay(b), b.enableDragging(), k.markers.push(b)
|
|
}, !1)
|
|
}
|
|
}, k.loadMapScript = function () {
|
|
var b = document.createElement("script");
|
|
b.type = "text/javascript", b.src = "https://api.map.baidu.com/api?v=2.0&ak=" + j + "&s=1&callback=baiduMapCallBack";
|
|
try {
|
|
document.body.appendChild(b)
|
|
} catch (c) {
|
|
a.error("加载地图过程中发生错误")
|
|
}
|
|
}, k.initMap = function () {
|
|
window.BMap ? window.baiduMapCallBack() : k.loadMapScript()
|
|
};
|
|
var m = new a.Menu({editor: g, id: f, title: i.location});
|
|
g.menus[f] = m;
|
|
var n = b("<div></div>"), o = b('<div style="margin:10px 0;"></div>'), p = b('<input type="text"/>');
|
|
p.css({width: "80px", "text-align": "center"});
|
|
var q = b('<input type="text"/>');
|
|
q.css({width: "300px", "margin-left": "10px"}).attr("placeholder", i.searchlocation);
|
|
var r = b('<button class="right link">' + i.clearLocation + "</button>");
|
|
o.append(r).append(p).append(q), n.append(o), r.click(function (a) {
|
|
q.val(""), q.focus(), k.clearLocations(), a.preventDefault()
|
|
});
|
|
var s = b('<div id="' + k.mapContainerId + '"></div>');
|
|
s.css({
|
|
height: "260px",
|
|
width: "100%",
|
|
position: "relative",
|
|
"margin-top": "10px",
|
|
border: "1px solid #f1f1f1"
|
|
});
|
|
var t = b("<span>" + i.loading + "</span>");
|
|
t.css({
|
|
position: "absolute",
|
|
width: "100px",
|
|
"text-align": "center",
|
|
top: "45%",
|
|
left: "50%",
|
|
"margin-left": "-50px"
|
|
}), s.append(t), n.append(s);
|
|
var u = b('<div style="margin:10px 0;"></div>'),
|
|
v = b('<button class="right">' + i.submit + "</button>"),
|
|
w = b('<button class="right gray">' + i.cancel + "</button>"),
|
|
x = b('<label style="display:inline-block;margin-top:10px;color:#666;"></label>'),
|
|
y = b('<input type="checkbox">');
|
|
x.append(y).append('<span style="display:inline-block;margin-left:5px;"> ' + i.dynamicMap + "</span>"), u.append(x).append(v).append(w), n.append(u), w.click(function (a) {
|
|
a.preventDefault(), e(), m.dropPanel.hide()
|
|
}), v.click(function (a) {
|
|
a.preventDefault();
|
|
var c, d, f, h = k.map, j = y.is(":checked"), l = k.markers, m = h.getCenter(), n = m.lng,
|
|
o = m.lat, p = h.getZoom(), q = h.getSize(), r = q.width, s = q.height;
|
|
if (d = j ? "http://ueditor.baidu.com/ueditor/dialogs/map/show.html#" : "http://api.map.baidu.com/staticimage?", d = d + "center=" + n + "," + o + "&zoom=" + p + "&width=" + r + "&height=" + s, l.length > 0 && (d += "&markers=", b.each(l, function (a, b) {
|
|
c = b.getPosition(), a > 0 && (d += "|"), d = d + c.lng + "," + c.lat
|
|
})), j) {
|
|
if (l.length > 1) return void alert(i.langDynamicOneLocation);
|
|
d += "&markerStyles=l,A", f = '<iframe class="ueditor_baidumap" src="{src}" frameborder="0" width="' + r + '" height="' + s + '"></iframe>', f = f.replace("{src}", d), g.command(a, "insertHtml", f, e)
|
|
} else g.command(a, "insertHtml", '<img style="max-width:100%;" src="' + d + '"/>', e)
|
|
}), m.dropPanel = new a.DropPanel(g, m, {$content: n, width: 500}), m.onRender = function () {
|
|
j === a.baiduMapAk && a.warn("建议在配置中自定义百度地图的mapAk,否则可能影响地图功能,文档:" + a.docsite)
|
|
}, m.clickEvent = function (a) {
|
|
var b = this, c = b.dropPanel, d = !1;
|
|
return c.isShowing ? void c.hide() : (k.map || (d = !0), c.show(), k.initMap(), void(d || q.focus()))
|
|
}
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
function c() {
|
|
if (!(a.userAgent.indexOf("MSIE 8") > 0 || window.hljs)) {
|
|
var b = document.createElement("script");
|
|
b.type = "text/javascript", b.src = "//cdn.bootcss.com/highlight.js/9.2.0/highlight.min.js", document.body.appendChild(b)
|
|
}
|
|
}
|
|
|
|
a.createMenu(function (d) {
|
|
function e(a) {
|
|
var c = b("<div></div>");
|
|
c.css({margin: "15px 5px 5px 5px", height: "160px", "text-align": "center"}), n.css({
|
|
width: "100%",
|
|
height: "100%",
|
|
padding: "10px"
|
|
}), n.on("keydown", function (a) {
|
|
9 === a.keyCode && a.preventDefault()
|
|
}), c.append(n), a.append(c);
|
|
var d = b("<div></div>"), e = b('<button class="right">' + j.submit + "</button>"),
|
|
f = b('<button class="right gray">' + j.cancel + "</button>");
|
|
d.append(e).append(f).append(o), a.append(d), f.click(function (a) {
|
|
a.preventDefault(), l.dropPanel.hide()
|
|
});
|
|
var g = '<pre style="max-width:100%;overflow-x:auto;"><code{#langClass}>{#content}</code></pre>';
|
|
e.click(function (a) {
|
|
function c() {
|
|
var a;
|
|
i && (a = q.attr("class"), a !== i + " hljs" && q.attr("class", i + " hljs")), q.html(e)
|
|
}
|
|
|
|
function d() {
|
|
h.restoreSelectionByElem(r), m()
|
|
}
|
|
|
|
a.preventDefault();
|
|
var e = n.val();
|
|
if (!e) return void n.focus();
|
|
var f = h.getRangeElem();
|
|
b.trim(b(f).text()) && 0 !== g.indexOf("<p><br></p>") && (g = "<p><br></p>" + g);
|
|
var i = o ? o.val() : "", j = "", m = function () {
|
|
k.find("pre code").each(function (a, c) {
|
|
var d = b(c);
|
|
d.attr("codemark") || window.hljs && (window.hljs.highlightBlock(c), d.attr("codemark", "1"))
|
|
})
|
|
};
|
|
if (i && (j = ' class="' + i + ' hljs"'), e = e.replace(/&/gm, "&").replace(/</gm, "<").replace(/>/gm, ">"), !l.selected) {
|
|
var p = g.replace("{#langClass}", j).replace("{#content}", e);
|
|
return void h.command(a, "insertHtml", p, m)
|
|
}
|
|
var q, r = h.getSelfOrParentByName(f, "pre");
|
|
r && (r = h.getSelfOrParentByName(f, "code")), r && (q = b(r), h.customCommand(a, c, d))
|
|
})
|
|
}
|
|
|
|
function f() {
|
|
var a = h.getRangeElem(), b = h.getSelfOrParentByName(a, "code");
|
|
b ? h.disableMenusExcept("insertcode") : h.enableMenusExcept("insertcode")
|
|
}
|
|
|
|
var g = "insertcode";
|
|
if (d(g)) {
|
|
setTimeout(c, 0);
|
|
var h = this, i = h.config, j = i.lang, k = h.txt.$txt,
|
|
l = new a.Menu({editor: h, id: g, title: j.insertcode});
|
|
l.clickEvent = function (a) {
|
|
var c = this, d = c.dropPanel;
|
|
if (d.isShowing) return void d.hide();
|
|
n.val(""), d.show();
|
|
var e = window.hljs;
|
|
if (e && e.listLanguages) {
|
|
if (0 !== o.children().length) return;
|
|
o.css({"margin-top": "9px", "margin-left": "5px"}), b.each(e.listLanguages(), function (a, b) {
|
|
"xml" === b && (b = "html"), b === i.codeDefaultLang ? o.append('<option value="' + b + '" selected="selected">' + b + "</option>") : o.append('<option value="' + b + '">' + b + "</option>")
|
|
})
|
|
} else o.hide()
|
|
}, l.clickEventSelected = function (a) {
|
|
var c = this, d = c.dropPanel;
|
|
if (d.isShowing) return void d.hide();
|
|
d.show();
|
|
var e, f, g = h.getRangeElem(), i = h.getSelfOrParentByName(g, "pre");
|
|
i && (i = h.getSelfOrParentByName(g, "code")), i && (e = b(i), n.val(e.text()), o && (f = e.attr("class"), f && o.val(f.split(" ")[0])))
|
|
}, l.updateSelectedEvent = function () {
|
|
var a, b = this, c = b.editor;
|
|
return a = c.getRangeElem(), a = c.getSelfOrParentByName(a, "pre"), !!a
|
|
};
|
|
var m = b("<div></div>"), n = b("<textarea></textarea>"), o = b("<select></select>");
|
|
e(m), l.dropPanel = new a.DropPanel(h, l, {
|
|
$content: m,
|
|
width: 500
|
|
}), h.menus[g] = l, k.on("keydown", function (a) {
|
|
if (13 === a.keyCode) {
|
|
var b = h.getRangeElem(), c = h.getSelfOrParentByName(b, "code");
|
|
c && h.command(a, "insertHtml", "\n")
|
|
}
|
|
}), k.on("keydown click", function (a) {
|
|
setTimeout(f)
|
|
})
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "undo";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang, f = new a.Menu({editor: d, id: c, title: e.undo});
|
|
f.clickEvent = function (a) {
|
|
d.undo()
|
|
}, d.menus[c] = f, d.ready(function () {
|
|
function a() {
|
|
c.undoRecord()
|
|
}
|
|
|
|
var b, c = this, d = c.txt.$txt;
|
|
d.on("keydown", function (d) {
|
|
var e = d.keyCode;
|
|
return d.ctrlKey && 90 === e ? void c.undo() : void(13 === e ? a() : (b && clearTimeout(b), b = setTimeout(a, 1e3)))
|
|
}), c.undoRecord()
|
|
})
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (b) {
|
|
var c = "redo";
|
|
if (b(c)) {
|
|
var d = this, e = d.config.lang, f = new a.Menu({editor: d, id: c, title: e.redo});
|
|
f.clickEvent = function (a) {
|
|
d.redo()
|
|
}, d.menus[c] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
var c;
|
|
a.createMenu(function (b) {
|
|
var d = "fullscreen";
|
|
if (b(d)) {
|
|
var e, f, g = this, h = g.txt.$txt, i = g.config, j = i.zindex || 1e4, k = i.lang, l = !1,
|
|
m = new a.Menu({editor: g, id: d, title: k.fullscreen});
|
|
m.clickEvent = function (b) {
|
|
var d = g.$editorContainer;
|
|
d.addClass("wangEditor-fullscreen"), e = d.css("z-index"), d.css("z-index", j);
|
|
var i, k = h.height(), m = h.outerHeight();
|
|
g.useMaxHeight && (f = h.css("max-height"), h.css("max-height", "none"), i = h.parent(), i.after(h), i.remove(), h.css("overflow-y", "auto"));
|
|
var n = g.menuContainer;
|
|
h.height(a.$window.height() - n.height() - (m - k)), g.menuContainer.$menuContainer.attr("style", ""), l = !0, g.isFullScreen = !0, c = a.$window.scrollTop()
|
|
}, m.clickEventSelected = function (b) {
|
|
var d = g.$editorContainer;
|
|
d.removeClass("wangEditor-fullscreen"), d.css("z-index", e), g.useMaxHeight ? h.css("max-height", f) : g.$valueContainer.css("height", g.valueContainerHeight), g.txt.initHeight(), l = !1, g.isFullScreen = !1, null != c && a.$window.scrollTop(c)
|
|
}, m.updateSelectedEvent = function (a) {
|
|
return l
|
|
}, g.menus[d] = m
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.fn.renderMenus = function () {
|
|
var a, c = this, d = c.menus, e = c.config.menus, f = (c.menuContainer, 0);
|
|
b.each(e, function (b, c) {
|
|
return "|" === c ? void f++ : (a = d[c], void(a && a.render(f)))
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.renderMenuContainer = function () {
|
|
var a = this, b = a.menuContainer;
|
|
a.$editorContainer;
|
|
b.render()
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.renderTxt = function () {
|
|
var a = this, b = a.txt;
|
|
b.render(), a.ready(function () {
|
|
b.initHeight()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.renderEditorContainer = function () {
|
|
var a, b, c = this, d = c.$valueContainer, e = c.$editorContainer, f = c.txt.$txt;
|
|
d === f ? (a = c.$prev, b = c.$parent, a && a.length ? a.after(e) : b.prepend(e)) : (d.after(e), d.hide())
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.eventMenus = function () {
|
|
var a = this.menus;
|
|
b.each(a, function (a, b) {
|
|
b.bindEvent()
|
|
})
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.eventMenuContainer = function () {
|
|
}
|
|
}), b(function (a, b) {
|
|
a.fn.eventTxt = function () {
|
|
var a = this.txt;
|
|
a.saveSelectionEvent(), a.updateValueEvent(), a.updateMenuStyleEvent()
|
|
}
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
var b = this, c = b.config.uploadImgFns;
|
|
c.onload || (c.onload = function (b, c) {
|
|
a.log("上传结束,返回结果为 " + b);
|
|
var d, e = this, f = e.uploadImgOriginalName || "";
|
|
0 === b.indexOf("error|") ? (a.warn("上传失败:" + b.split("|")[1]), alert(b.split("|")[1])) : (a.log("上传成功,即将插入编辑区域,结果为:" + b), d = document.createElement("img"), d.onload = function () {
|
|
var c = '<img src="' + b + '" alt="' + f + '" style="max-width:100%;"/>';
|
|
e.command(null, "insertHtml", c), a.log("已插入图片,地址 " + b), d = null
|
|
}, d.onerror = function () {
|
|
a.error("使用返回的结果获取图片,发生错误。请确认以下结果是否正确:" + b), d = null
|
|
}, d.src = b)
|
|
}), c.ontimeout || (c.ontimeout = function (b) {
|
|
a.error("上传图片超时"), alert("上传图片超时")
|
|
}), c.onerror || (c.onerror = function (b) {
|
|
a.error("上传上图片发生错误"), alert("上传上图片发生错误")
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
window.FileReader && window.FormData && a.plugin(function () {
|
|
function c(a, b) {
|
|
var c, d = window.atob(a.split(",")[1]), e = new ArrayBuffer(d.length), f = new Uint8Array(e);
|
|
for (c = 0; c < d.length; c++) f[c] = d.charCodeAt(c);
|
|
return new Blob([e], {type: b})
|
|
}
|
|
|
|
function d(b, c) {
|
|
var d = document.createElement("img");
|
|
d.onload = function () {
|
|
var e = '<img src="' + b + '" style="max-width:100%;"/>';
|
|
f.command(c, "insertHtml", e), a.log("已插入图片,地址 " + b), d = null
|
|
}, d.onerror = function () {
|
|
a.error("使用返回的结果获取图片,发生错误。请确认以下结果是否正确:" + b), d = null
|
|
}, d.src = b
|
|
}
|
|
|
|
function e(a) {
|
|
if (a.lengthComputable) {
|
|
var b = a.loaded / a.total;
|
|
f.showUploadProgress(100 * b)
|
|
}
|
|
}
|
|
|
|
var f = this, g = f.config, h = g.uploadImgUrl, i = g.uploadTimeout, j = g.uploadImgFns, k = j.onload,
|
|
l = j.ontimeout, m = j.onerror;
|
|
h && (f.xhrUploadImg = function (g) {
|
|
function j() {
|
|
y && clearTimeout(y), z && z.abort && z.abort(), n.preventDefault(), u && u.call(f, z), f.hideUploadProgress()
|
|
}
|
|
|
|
var n = g.event, o = g.filename || "", p = g.base64, q = g.fileType || "image/png",
|
|
r = g.name || "wangEditor_upload_file", s = g.loadfn || k, t = g.errorfn || m, u = g.timeoutfn || l,
|
|
v = f.config.uploadParams || {}, w = f.config.uploadHeaders || {}, x = "png";
|
|
if (o.indexOf(".") > 0 ? x = o.slice(o.lastIndexOf(".") - o.length + 1) : q.indexOf("/") > 0 && q.split("/")[1] && (x = q.split("/")[1]), a.isOnWebsite) return a.log("预览模拟上传"), void d(p, n);
|
|
var y, z = new XMLHttpRequest, A = new FormData;
|
|
z.onload = function () {
|
|
y && clearTimeout(y), f.uploadImgOriginalName = o, o.indexOf(".") > 0 && (f.uploadImgOriginalName = o.split(".")[0]), s && s.call(f, z.responseText, z), f.hideUploadProgress()
|
|
}, z.onerror = function () {
|
|
y && clearTimeout(y), n.preventDefault(), t && t.call(f, z), f.hideUploadProgress()
|
|
}, z.upload.onprogress = e, A.append(r, c(p, q), a.random() + "." + x), b.each(v, function (a, b) {
|
|
A.append(a, b)
|
|
}), z.open("POST", h, !0), b.each(w, function (a, b) {
|
|
z.setRequestHeader(a, b)
|
|
}), z.withCredentials = f.config.withCredentials || !0, z.send(A), y = setTimeout(j, i), a.log("开始上传...并开始超时计算")
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
function a() {
|
|
j || (j = !0, i.css({top: f + "px"}), g.append(i))
|
|
}
|
|
|
|
function c() {
|
|
i.hide(), k = null
|
|
}
|
|
|
|
var d = this, e = d.menuContainer, f = e.height(), g = d.$editorContainer, h = g.width(),
|
|
i = b('<div class="wangEditor-upload-progress"></div>'), j = !1;
|
|
d.showUploadProgress = function (b) {
|
|
k && clearTimeout(k), a(), i.show(), i.width(b * h / 100)
|
|
};
|
|
var k;
|
|
d.hideUploadProgress = function (a) {
|
|
k && clearTimeout(k), a = a || 750, k = setTimeout(c, a)
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
var c, d = this, e = d.config, f = e.uploadImgUrl, g = e.uploadTimeout;
|
|
if (f) {
|
|
var h = d.$uploadContent;
|
|
if (h) {
|
|
var i = b('<div class="upload-icon-container"><i class="wangeditor-menu-img-upload"></i></div>');
|
|
h.append(i);
|
|
var j = new a.UploadFile({
|
|
editor: d,
|
|
uploadUrl: f,
|
|
timeout: g,
|
|
fileAccept: "image/jpg,image/jpeg,image/png,image/gif,image/bmp"
|
|
});
|
|
i.click(function (a) {
|
|
c = a, j.selectFiles()
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
if (window.FileReader && window.FormData) {
|
|
var c = function (a) {
|
|
this.editor = a.editor, this.uploadUrl = a.uploadUrl, this.timeout = a.timeout, this.fileAccept = a.fileAccept, this.multiple = !0
|
|
};
|
|
c.fn = c.prototype, c.fn.clear = function () {
|
|
this.$input.val(""), a.log("input value 已清空")
|
|
}, c.fn.render = function () {
|
|
var c = this;
|
|
if (!c._hasRender) {
|
|
a.log("渲染dom");
|
|
var d = c.fileAccept, e = d ? 'accept="' + d + '"' : "", f = c.multiple,
|
|
g = f ? 'multiple="multiple"' : "", h = b('<input type="file" ' + e + " " + g + "/>"),
|
|
i = b('<div style="display:none;"></div>');
|
|
i.append(h), a.$body.append(i), h.on("change", function (a) {
|
|
c.selected(a, h.get(0))
|
|
}), c.$input = h, c._hasRender = !0
|
|
}
|
|
}, c.fn.selectFiles = function () {
|
|
var b = this;
|
|
a.log("使用 html5 方式上传"), b.render(), a.log("选择文件"), b.$input.click()
|
|
}, c.fn.selected = function (c, d) {
|
|
var e = this, f = d.files || [];
|
|
0 !== f.length && (a.log("选中 " + f.length + " 个文件"), b.each(f, function (a, b) {
|
|
e.upload(b)
|
|
}))
|
|
}, c.fn.upload = function (b) {
|
|
function c() {
|
|
d.clear()
|
|
}
|
|
|
|
var d = this, e = d.editor, f = b.name || "", g = b.type || "", h = e.config.uploadImgFns,
|
|
i = e.config.uploadImgFileName || "wangEditorH5File", j = h.onload, k = h.ontimeout, l = h.onerror,
|
|
m = new FileReader;
|
|
return j && k && l ? (a.log("开始执行 " + f + " 文件的上传"), m.onload = function (b) {
|
|
a.log("已读取" + f + "文件");
|
|
var d = b.target.result || this.result;
|
|
e.xhrUploadImg({
|
|
event: b, filename: f, base64: d, fileType: g, name: i, loadfn: function (a, b) {
|
|
c();
|
|
var d = this;
|
|
j.call(d, a, b)
|
|
}, errorfn: function (b) {
|
|
c(), a.isOnWebsite && alert("wangEditor官网暂时没有服务端,因此报错。实际项目中不会发生");
|
|
var d = this;
|
|
l.call(d, b)
|
|
}, timeoutfn: function (b) {
|
|
c(), a.isOnWebsite && alert("wangEditor官网暂时没有服务端,因此超时。实际项目中不会发生");
|
|
var d = this;
|
|
k(d, b)
|
|
}
|
|
})
|
|
}, void m.readAsDataURL(b)) : void a.error("请为编辑器配置上传图片的 onload ontimeout onerror 回调事件")
|
|
}, a.UploadFile = c
|
|
}
|
|
}), b(function (a, b) {
|
|
if (!window.FileReader || !window.FormData) {
|
|
var c = function (a) {
|
|
this.editor = a.editor, this.uploadUrl = a.uploadUrl, this.timeout = a.timeout, this.fileAccept = a.fileAccept, this.multiple = !1
|
|
};
|
|
c.fn = c.prototype, c.fn.clear = function () {
|
|
this.$input.val(""), a.log("input value 已清空")
|
|
}, c.fn.hideModal = function () {
|
|
this.modal.hide()
|
|
}, c.fn.render = function () {
|
|
var c = this, d = c.editor, e = d.config.uploadImgFileName || "wangEditorFormFile";
|
|
if (!c._hasRender) {
|
|
var f = c.uploadUrl;
|
|
a.log("渲染dom");
|
|
var g = "iframe" + a.random(),
|
|
h = b('<iframe name="' + g + '" id="' + g + '" frameborder="0" width="0" height="0"></iframe>'),
|
|
i = c.multiple, j = i ? 'multiple="multiple"' : "", k = b("<p>选择图片并上传</p>"),
|
|
l = b('<input type="file" ' + j + ' name="' + e + '"/>'),
|
|
m = b('<input type="submit" value="上传"/>'),
|
|
n = b('<form enctype="multipart/form-data" method="post" action="' + f + '" target="' + g + '"></form>'),
|
|
o = b('<div style="margin:10px 20px;"></div>');
|
|
n.append(k).append(l).append(m), b.each(d.config.uploadParams, function (a, c) {
|
|
n.append(b('<input type="hidden" name="' + a + '" value="' + c + '"/>'))
|
|
}), o.append(n), o.append(h), c.$input = l, c.$iframe = h;
|
|
var p = new a.Modal(d, (void 0), {$content: o});
|
|
c.modal = p, c._hasRender = !0
|
|
}
|
|
}, c.fn.bindLoadEvent = function () {
|
|
function a() {
|
|
var a = b.trim(g.document.body.innerHTML);
|
|
if (a) {
|
|
var e = c.$input.val(), f = e;
|
|
e.lastIndexOf("\\") >= 0 && (f = e.slice(e.lastIndexOf("\\") + 1), f.indexOf(".") > 0 && (f = f.split(".")[0])), d.uploadImgOriginalName = f, h.call(d, a), c.clear(), c.hideModal()
|
|
}
|
|
}
|
|
|
|
var c = this;
|
|
if (!c._hasBindLoad) {
|
|
var d = c.editor, e = c.$iframe, f = e.get(0), g = f.contentWindow,
|
|
h = d.config.uploadImgFns.onload;
|
|
f.attachEvent ? f.attachEvent("onload", a) : f.onload = a, c._hasBindLoad = !0
|
|
}
|
|
}, c.fn.show = function () {
|
|
function a() {
|
|
c.show(), b.bindLoadEvent()
|
|
}
|
|
|
|
var b = this, c = b.modal;
|
|
setTimeout(a)
|
|
}, c.fn.selectFiles = function () {
|
|
var b = this;
|
|
a.log("使用 form 方式上传"), b.render(), b.clear(), b.show()
|
|
}, a.UploadFile = c
|
|
}
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
function c() {
|
|
var c = /^data:(image\/\w+);base64/, g = h.find("img");
|
|
a.log("粘贴后,检查到编辑器有" + g.length + "个图片。开始遍历图片,试图找到刚刚粘贴过来的图片"), b.each(g, function () {
|
|
var g, h, i = this, j = b(i), l = j.attr("src");
|
|
e.each(function () {
|
|
if (i === this) return g = !0, !1
|
|
}), g || (a.log("找到一个粘贴过来的图片"), c.test(l) ? (a.log("src 是 base64 格式,可以上传"), h = l.match(c)[1], f.xhrUploadImg({
|
|
event: d,
|
|
base64: l,
|
|
fileType: h,
|
|
name: k
|
|
})) : a.log("src 为 " + l + " ,不是 base64 格式,暂时不支持上传"), j.remove())
|
|
}), a.log("遍历结束")
|
|
}
|
|
|
|
var d, e, f = this, g = f.txt, h = g.$txt, i = f.config, j = i.uploadImgUrl,
|
|
k = i.uploadImgFileName || "wangEditorPasteFile";
|
|
j && h.on("paste", function (g) {
|
|
d = g;
|
|
var i, j, l = d.clipboardData || d.originalEvent.clipboardData;
|
|
i = null == l ? window.clipboardData && window.clipboardData.getData("text") : l.getData("text/plain") || l.getData("text/html"), i || (j = l && l.items, j ? (a.log("通过 data.items 得到了数据"), b.each(j, function (b, c) {
|
|
var e = c.type || "";
|
|
if (!(e.indexOf("image") < 0)) {
|
|
var g = c.getAsFile(), h = new FileReader;
|
|
a.log("得到一个粘贴图片"), h.onload = function (b) {
|
|
a.log("读取到粘贴的图片");
|
|
var c = b.target.result || this.result;
|
|
f.xhrUploadImg({event: d, base64: c, fileType: e, name: k})
|
|
}, h.readAsDataURL(g)
|
|
}
|
|
})) : (a.log("未从 data.items 得到数据,使用检测粘贴图片的方式"), e = h.find("img"), a.log("粘贴前,检查到编辑器有" + e.length + "个图片"), setTimeout(c, 0)))
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
var c = this, d = c.txt, e = d.$txt, f = c.config, g = f.uploadImgUrl,
|
|
h = f.uploadImgFileName || "wangEditorDragFile";
|
|
g && (a.$document.on("dragleave drop dragenter dragover", function (a) {
|
|
a.preventDefault()
|
|
}), e.on("drop", function (d) {
|
|
d.preventDefault();
|
|
var e = d.originalEvent, f = e.dataTransfer && e.dataTransfer.files;
|
|
f && f.length && b.each(f, function (b, e) {
|
|
var f = e.type, g = e.name;
|
|
if (!(f.indexOf("image/") < 0)) {
|
|
a.log("得到图片 " + g);
|
|
var i = new FileReader;
|
|
i.onload = function (b) {
|
|
a.log("读取到图片 " + g);
|
|
var e = b.target.result || this.result;
|
|
c.xhrUploadImg({event: d, base64: e, fileType: f, name: h})
|
|
}, i.readAsDataURL(e)
|
|
}
|
|
})
|
|
}))
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
function c() {
|
|
m || (d(), n.append(o).append(p).append(q).append(r), h.$editorContainer.append(n), m = !0)
|
|
}
|
|
|
|
function d() {
|
|
function a(a, c) {
|
|
k = j.html();
|
|
var d = function () {
|
|
c && c(), k !== j.html() && j.change()
|
|
};
|
|
b && h.customCommand(a, b, d)
|
|
}
|
|
|
|
var b;
|
|
p.click(function (c) {
|
|
b = function () {
|
|
g.remove()
|
|
}, a(c, function () {
|
|
setTimeout(f, 100)
|
|
})
|
|
}), r.click(function (c) {
|
|
b = function () {
|
|
g.css({width: "100%"})
|
|
}, a(c, function () {
|
|
setTimeout(e)
|
|
})
|
|
}), q.click(function (c) {
|
|
b = function () {
|
|
g.css({width: "auto"})
|
|
}, a(c, function () {
|
|
setTimeout(e)
|
|
})
|
|
})
|
|
}
|
|
|
|
function e() {
|
|
if (!h._disabled && null != g) {
|
|
g.addClass("clicked");
|
|
var a = g.position(), b = a.top, c = a.left, d = g.outerHeight(), e = g.outerWidth(), f = b + d,
|
|
i = c, j = 0, k = l.position().top, m = l.outerHeight();
|
|
f > k + m && (f = k + m), n.show();
|
|
var p = n.outerWidth();
|
|
j = e / 2 - p / 2, n.css({
|
|
top: f + 5,
|
|
left: i,
|
|
"margin-left": j
|
|
}), j < 0 ? (n.css("margin-left", "0"), o.hide()) : o.show()
|
|
}
|
|
}
|
|
|
|
function f() {
|
|
null != g && (g.removeClass("clicked"), g = null, n.hide())
|
|
}
|
|
|
|
var g, h = this, i = h.txt, j = i.$txt, k = "", l = h.useMaxHeight ? j.parent() : j, m = !1,
|
|
n = b('<div class="txt-toolbar"></div>'), o = b('<div class="tip-triangle"></div>'),
|
|
p = b('<a href="#"><i class="wangeditor-menu-img-trash-o"></i></a>'),
|
|
q = b('<a href="#"><i class="wangeditor-menu-img-search-minus"></i></a>'),
|
|
r = b('<a href="#"><i class="wangeditor-menu-img-search-plus"></i></a>');
|
|
l.on("click", "table", function (a) {
|
|
var d = b(a.currentTarget);
|
|
return c(), g && g.get(0) === d.get(0) ? void setTimeout(f, 100) : (g = d, e(), a.preventDefault(), void a.stopPropagation())
|
|
}).on("click keydown scroll", function (a) {
|
|
setTimeout(f, 100)
|
|
}), a.$body.on("click keydown scroll", function (a) {
|
|
setTimeout(f, 100)
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
a.userAgent.indexOf("MSIE 8") > 0 || a.plugin(function () {
|
|
function c(a, c) {
|
|
if (j) {
|
|
var d, e, f = function () {
|
|
null != c && (q = c), o !== n.html() && n.change()
|
|
}, g = !1, h = j.parent();
|
|
if ("a" === h.get(0).nodeName.toLowerCase() ? (e = h, g = !0) : e = b('<a target="_blank"></a>'), null == c) return e.attr("href") || "";
|
|
if ("" === c) g && (d = function () {
|
|
j.unwrap()
|
|
}); else {
|
|
if (c === q) return;
|
|
d = function () {
|
|
e.attr("href", c), g || j.wrap(e)
|
|
}
|
|
}
|
|
d && (o = n.html(), k.customCommand(a, d, f))
|
|
}
|
|
}
|
|
|
|
function d() {
|
|
r || (e(), f(), v.append(w).append(x).append(y).append(z).append(A).append(B).append(C).append(D), E.append(F).append(H).append(G), t.append(u).append(v).append(E), k.$editorContainer.append(t).append(s), r = !0)
|
|
}
|
|
|
|
function e() {
|
|
function a(a, b) {
|
|
var c;
|
|
o = n.html(), c = function () {
|
|
b && b(), o !== n.html() && n.change()
|
|
}, d && k.customCommand(a, d, c)
|
|
}
|
|
|
|
var d;
|
|
w.click(function (b) {
|
|
c(b, ""), d = function () {
|
|
j.remove()
|
|
}, a(b, function () {
|
|
setTimeout(h, 100)
|
|
})
|
|
}), y.click(function (b) {
|
|
d = function () {
|
|
var a = j.get(0), b = a.width, c = a.height;
|
|
b = 1.1 * b, c = 1.1 * c, j.css({width: b + "px", height: c + "px"})
|
|
}, a(b, function () {
|
|
setTimeout(g)
|
|
})
|
|
}), x.click(function (b) {
|
|
d = function () {
|
|
var a = j.get(0), b = a.width, c = a.height;
|
|
b = .9 * b, c = .9 * c, j.css({width: b + "px", height: c + "px"})
|
|
}, a(b, function () {
|
|
setTimeout(g)
|
|
})
|
|
}), z.click(function (b) {
|
|
d = function () {
|
|
j.parents("p").css({"text-align": "left"}).attr("align", "left")
|
|
}, a(b, function () {
|
|
setTimeout(h, 100)
|
|
})
|
|
}), B.click(function (b) {
|
|
d = function () {
|
|
j.parents("p").css({"text-align": "right"}).attr("align", "right")
|
|
}, a(b, function () {
|
|
setTimeout(h, 100)
|
|
})
|
|
}), A.click(function (b) {
|
|
d = function () {
|
|
j.parents("p").css({"text-align": "center"}).attr("align", "center")
|
|
}, a(b, function () {
|
|
setTimeout(h, 100)
|
|
})
|
|
}), C.click(function (a) {
|
|
a.preventDefault(), q = c(a), F.val(q), v.hide(), E.show()
|
|
}), G.click(function (a) {
|
|
a.preventDefault();
|
|
var d = b.trim(F.val());
|
|
d && c(a, d), setTimeout(h)
|
|
}), H.click(function (a) {
|
|
a.preventDefault(), F.val(q), v.show(), E.hide()
|
|
}), D.click(function (a) {
|
|
a.preventDefault(), c(a, ""), setTimeout(h)
|
|
})
|
|
}
|
|
|
|
function f() {
|
|
function b(a) {
|
|
var b, h;
|
|
b = a.pageX - c, h = a.pageY - d;
|
|
var k = e + b, l = f + h;
|
|
s.css({"margin-left": k, "margin-top": l});
|
|
var m = g + b, n = i + h;
|
|
j && j.css({width: m, height: n})
|
|
}
|
|
|
|
var c, d, e, f, g, i;
|
|
s.on("mousedown", function (k) {
|
|
j && (c = k.pageX, d = k.pageY, e = parseFloat(s.css("margin-left"), 10), f = parseFloat(s.css("margin-top"), 10), g = j.width(), i = j.height(), t.hide(), a.$document.on("mousemove._dragResizeImg", b), a.$document.on("mouseup._dragResizeImg", function (b) {
|
|
a.$document.off("mousemove._dragResizeImg"), a.$document.off("mouseup._dragResizeImg"), h(), s.css({
|
|
"margin-left": e,
|
|
"margin-top": f
|
|
}), I = !1
|
|
}), I = !0)
|
|
})
|
|
}
|
|
|
|
function g() {
|
|
if (!k._disabled && null != j) {
|
|
j.addClass("clicked");
|
|
var a = j.position(), b = a.top, c = a.left, d = j.outerHeight(), e = j.outerWidth();
|
|
s.css({top: b + d, left: c + e});
|
|
var f = b + d, g = c, h = 0, i = p.position().top, l = p.outerHeight();
|
|
f > i + l ? f = i + l : s.show(), t.show();
|
|
var m = t.outerWidth();
|
|
h = e / 2 - m / 2, t.css({
|
|
top: f + 5,
|
|
left: g,
|
|
"margin-left": h
|
|
}), h < 0 ? (t.css("margin-left", "0"), u.hide()) : u.show(), k.disableMenusExcept()
|
|
}
|
|
}
|
|
|
|
function h() {
|
|
null != j && (j.removeClass("clicked"), j = null, t.hide(), s.hide(), k.enableMenusExcept())
|
|
}
|
|
|
|
function i(a) {
|
|
var c = !1;
|
|
return k.emotionUrls ? (b.each(k.emotionUrls, function (b, d) {
|
|
var e = !1;
|
|
if (a === d && (c = !0, e = !0), e) return !1
|
|
}), c) : c
|
|
}
|
|
|
|
var j, k = this, l = k.config.lang, m = k.txt, n = m.$txt, o = "", p = k.useMaxHeight ? n.parent() : n,
|
|
q = (k.$editorContainer, ""), r = !1, s = b('<div class="img-drag-point"></div>'),
|
|
t = b('<div class="txt-toolbar"></div>'), u = b('<div class="tip-triangle"></div>'),
|
|
v = b("<div></div>"), w = b('<a href="#"><i class="wangeditor-menu-img-trash-o"></i></a>'),
|
|
x = b('<a href="#"><i class="wangeditor-menu-img-search-minus"></i></a>'),
|
|
y = b('<a href="#"><i class="wangeditor-menu-img-search-plus"></i></a>'),
|
|
z = b('<a href="#"><i class="wangeditor-menu-img-align-left"></i></a>'),
|
|
A = b('<a href="#"><i class="wangeditor-menu-img-align-center"></i></a>'),
|
|
B = b('<a href="#"><i class="wangeditor-menu-img-align-right"></i></a>'),
|
|
C = b('<a href="#"><i class="wangeditor-menu-img-link"></i></a>'),
|
|
D = b('<a href="#"><i class="wangeditor-menu-img-unlink"></i></a>'),
|
|
E = b('<div style="display:none;"></div>'),
|
|
F = b('<input type="text" style="height:26px; margin-left:10px; width:200px;"/>'),
|
|
G = b('<button class="right">' + l.submit + "</button>"),
|
|
H = b('<button class="right gray">' + l.cancel + "</button>"), I = !1;
|
|
p.on("mousedown", "img", function (a) {
|
|
a.preventDefault()
|
|
}).on("click", "img", function (a) {
|
|
var c = b(a.currentTarget), e = c.attr("src");
|
|
if (e && !i(e)) {
|
|
if (d(), j && j.get(0) === c.get(0)) return void setTimeout(h, 100);
|
|
j = c, g(), v.show(), E.hide(), a.preventDefault(), a.stopPropagation()
|
|
}
|
|
}).on("click keydown scroll", function (a) {
|
|
I || setTimeout(h, 100)
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
function a() {
|
|
g || (n.append(o).append(p), k.$editorContainer.append(n), g = !0)
|
|
}
|
|
|
|
function c() {
|
|
if (f) {
|
|
var a = f.position(), b = a.left, c = a.top, d = f.height(), e = c + d + 5,
|
|
g = k.menuContainer.height(), h = k.txt.$txt.outerHeight();
|
|
e > g + h && (e = g + h + 5), n.css({top: e, left: b})
|
|
}
|
|
}
|
|
|
|
function d() {
|
|
if (!q && f) {
|
|
a(), n.show();
|
|
var b = f.attr("href");
|
|
p.attr("href", b), c(), q = !0
|
|
}
|
|
}
|
|
|
|
function e() {
|
|
q && f && (n.hide(), q = !1)
|
|
}
|
|
|
|
var f, g, h, i, j, k = this, l = k.config.lang, m = k.txt.$txt, n = b('<div class="txt-toolbar"></div>'),
|
|
o = b('<div class="tip-triangle"></div>'),
|
|
p = b('<a href="#" target="_blank"><i class="wangeditor-menu-img-link"></i> ' + l.openLink + "</a>"),
|
|
q = !1;
|
|
m.on("mouseenter", "a", function (a) {
|
|
h && clearTimeout(h), h = setTimeout(function () {
|
|
var c = a.currentTarget, g = b(c);
|
|
f = g;
|
|
var h = g.children("img");
|
|
h.length && (h.click(function (a) {
|
|
e()
|
|
}), h.hasClass("clicked")) || d()
|
|
}, 500)
|
|
}).on("mouseleave", "a", function (a) {
|
|
i && clearTimeout(i), i = setTimeout(e, 500)
|
|
}).on("click keydown scroll", function (a) {
|
|
setTimeout(e, 100)
|
|
}), n.on("mouseenter", function (a) {
|
|
i && clearTimeout(i)
|
|
}).on("mouseleave", function (a) {
|
|
j && clearTimeout(j), j = setTimeout(e, 500)
|
|
})
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
var b = this, c = b.config.menuFixed;
|
|
if (c !== !1 && "number" == typeof c) {
|
|
var d = parseFloat(a.$body.css("margin-top"), 10);
|
|
isNaN(d) && (d = 0);
|
|
var e = b.$editorContainer, f = e.offset().top, g = e.outerHeight(), h = b.menuContainer.$menuContainer,
|
|
i = h.css("position"), j = h.css("top"), k = h.offset().top, l = h.outerHeight();
|
|
b.txt.$txt;
|
|
a.$window.scroll(function () {
|
|
if (!b.isFullScreen) {
|
|
var m = a.$window.scrollTop(), n = h.width();
|
|
0 === k && (k = h.offset().top, f = e.offset().top, g = e.outerHeight(), l = h.outerHeight()), m >= k && m + c + l + 30 < f + g ? (h.css({
|
|
position: "fixed",
|
|
top: c
|
|
}), h.width(n), a.$body.css({"margin-top": d + l}), b._isMenufixed || (b._isMenufixed = !0)) : (h.css({
|
|
position: i,
|
|
top: j
|
|
}), h.css("width", "100%"), a.$body.css({"margin-top": d}), b._isMenufixed && (b._isMenufixed = !1))
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "indent";
|
|
if (c(d)) {
|
|
var e = this, f = new a.Menu({
|
|
editor: e,
|
|
id: d,
|
|
title: "缩进",
|
|
$domNormal: b('<a href="#" tabindex="-1"><i class="wangeditor-menu-img-indent-left"></i></a>'),
|
|
$domSelected: b('<a href="#" tabindex="-1" class="selected"><i class="wangeditor-menu-img-indent-left"></i></a>')
|
|
});
|
|
f.clickEvent = function (a) {
|
|
function c() {
|
|
d.css("text-indent", "2em")
|
|
}
|
|
|
|
var d, f = e.getRangeElem(), g = e.getSelfOrParentByName(f, "p");
|
|
return g ? (d = b(g), void e.customCommand(a, c)) : a.preventDefault()
|
|
}, f.clickEventSelected = function (a) {
|
|
function c() {
|
|
d.css("text-indent", "0")
|
|
}
|
|
|
|
var d, f = e.getRangeElem(), g = e.getSelfOrParentByName(f, "p");
|
|
return g ? (d = b(g), void e.customCommand(a, c)) : a.preventDefault()
|
|
}, f.updateSelectedEvent = function () {
|
|
var a, c, d = e.getRangeElem(), f = e.getSelfOrParentByName(d, "p");
|
|
return !!f && (a = b(f), c = a.css("text-indent"), !(!c || "0px" === c))
|
|
}, e.menus[d] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.createMenu(function (c) {
|
|
var d = "lineheight";
|
|
if (c(d)) {
|
|
var e = this;
|
|
e.commandHooks.lineHeight = function (a) {
|
|
var c = e.getRangeElem(), d = e.getSelfOrParentByName(c, "p,h1,h2,h3,h4,h5,pre");
|
|
d && b(d).css("line-height", a + "")
|
|
};
|
|
var f = new a.Menu({
|
|
editor: e,
|
|
id: d,
|
|
title: "行高",
|
|
commandName: "lineHeight",
|
|
$domNormal: b('<a href="#" tabindex="-1"><i class="wangeditor-menu-img-arrows-v"></i></a>'),
|
|
$domSelected: b('<a href="#" tabindex="-1" class="selected"><i class="wangeditor-menu-img-arrows-v"></i></a>')
|
|
}), g = {"1.0": "1.0倍", 1.5: "1.5倍", 1.8: "1.8倍", "2.0": "2.0倍", 2.5: "2.5倍", "3.0": "3.0倍"},
|
|
h = '<span style="line-height:{#commandValue}">{#title}</span>';
|
|
f.dropList = new a.DropList(e, f, {data: g, tpl: h}), e.menus[d] = f
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.plugin(function () {
|
|
var c = this, d = c.config.customUpload;
|
|
if (d) {
|
|
if (c.config.uploadImgUrl) return alert("自定义上传无效,详看浏览器日志console.log"), void a.error("已经配置了 uploadImgUrl ,就不能再配置 customUpload ,两者冲突。将导致自定义上传无效。");
|
|
var e = c.$uploadContent;
|
|
e || a.error("自定义上传,无法获取 editor.$uploadContent");
|
|
var f = b('<div class="upload-icon-container"><i class="wangeditor-menu-img-upload"></i></div>');
|
|
e.append(f);
|
|
var g = "upload" + a.random(), h = "upload" + a.random();
|
|
f.attr("id", g), e.attr("id", h), c.customUploadBtnId = g, c.customUploadContainerId = h
|
|
}
|
|
})
|
|
}), b(function (a, b) {
|
|
a.info("本页面富文本编辑器由 wangEditor 提供 http://wangeditor.github.io/ ")
|
|
}), window.wangEditor
|
|
});
|