|
|
- /*!
- * ====================================================
- * kityminder-editor - v1.0.67 - 2021-01-07
- * https://github.com/fex-team/kityminder-editor
- * GitHub: https://github.com/fex-team/kityminder-editor
- * Copyright (c) 2021 ; Licensed
- * ====================================================
- */
-
- !
- function() {
- var d = {
- r: function(e) {
- if (d[e].inited) return d[e].value;
- if ("function" != typeof d[e].value) return d[e].inited = !0,
- d[e].value;
- var t = {
- exports: {}
- },
- n = d[e].value(null, t.exports, t);
- if (d[e].inited = !0, void 0 !== (d[e].value = n)) return n;
- for (var i in t.exports) if (t.exports.hasOwnProperty(i)) return d[e].inited = !0,
- d[e].value = t.exports,
- t.exports
- }
- };
- d[0] = {
- value: function(e, t, n) {
- var i = [];
- function r(e) {
- i.push(e)
- }
- function o(e) {
- this.selector = e;
- for (var t = 0; t < i.length; t++)"function" == typeof i[t] && i[t].call(this, this)
- }
- return (o.assemble = r)(d.r(7)),
- r(d.r(9)),
- r(d.r(14)),
- r(d.r(18)),
- r(d.r(11)),
- r(d.r(12)),
- r(d.r(5)),
- r(d.r(6)),
- r(d.r(8)),
- r(d.r(15)),
- r(d.r(10)),
- r(d.r(13)),
- r(d.r(16)),
- r(d.r(17)),
- n.exports = o
- }
- },
- d[1] = {
- value: function(e, t, n) {
- return n.exports = kityminder.Editor = d.r(0)
- }
- },
- d[2] = {
- value: function(e, t, n) {
- return n.exports = window.HotBox
- }
- },
- d[3] = {
- value: function(e, t, n) {}
- },
- d[4] = {
- value: function(e, t, n) {
- return n.exports = window.kityminder.Minder
- }
- },
- d[5] = {
- value: function(e, t, n) {
- function i() {
- var n = "\ufeff",
- i = {
- "application/km": ""
- },
- r = {
- "\ufeff": "SPLITOR",
- "": "application/km"
- };
- function o(e, t) {
- if (!this.isPureText(t)) {
- if (!this.whichMimeType(t)) throw new Error("unknow mimetype!");
- t = this.getPureText(t)
- }
- return ! 1 === e ? t: e + n + t
- }
- this.registMimeTypeProtocol = function(e, t) {
- if (t && r[t]) throw new Error("sing has registed!");
- if (e && i[e]) throw new Error("mimetype has registed!");
- r[t] = e,
- i[e] = t
- },
- this.getMimeTypeProtocol = function(e, t) {
- var n = i[e] || !1;
- return void 0 === t ? o.bind(this, n) : o(n, t)
- },
- this.getSpitor = function() {
- return n
- },
- this.getMimeType = function(e) {
- return void 0 !== e ? r[e] || null: i
- }
- }
- return i.prototype.isPureText = function(e) {
- return ! ~e.indexOf(this.getSpitor())
- },
- i.prototype.getPureText = function(e) {
- return this.isPureText(e) ? e: e.split(this.getSpitor())[1]
- },
- i.prototype.whichMimeType = function(e) {
- return this.isPureText(e) ? null: this.getMimeType(e.split(this.getSpitor())[0])
- },
- n.exports = function() {
- this.minder.supportClipboardEvent && !kity.Browser.gecko && (this.MimeType = new i)
- }
- }
- },
- d[6] = {
- value: function(e, t, n) {
- return n.exports = function() {
- var c = this.minder,
- r = window.kityminder.data;
- if (c.supportClipboardEvent && !kity.Browser.gecko) {
- var d = this.fsm,
- u = this.receiver,
- s = this.MimeType,
- o = s.getMimeTypeProtocol("application/km"),
- m = r.getRegisterProtocol("json").decode,
- p = [];
- document.addEventListener("copy",
- function(e) {
- if (document.activeElement == u.element) {
- var t = e;
- switch (d.state()) {
- case "input":
- break;
- case "normal":
- var n = [].concat(c.getSelectedNodes());
- if (n.length) {
- var i;
- if (1 < n.length && (n.sort(function(e, t) {
- return e.getLevel() - t.getLevel()
- }), (i = n[0].getLevel()) !== n[n.length - 1].getLevel())) {
- var r, o = 0,
- a = n.length,
- l = a - 1;
- for (r = n[l]; r.getLevel() !== i;) {
- for (o = 0; o < a && n[o].getLevel() === i;) {
- if (n[o].isAncestorOf(r)) {
- n.splice(l, 1);
- break
- }
- o++
- }
- r = n[--l]
- }
- }
- var s = g(n);
- t.clipboardData.setData("text/plain", s)
- }
- e.preventDefault()
- }
- }
- }),
- document.addEventListener("cut",
- function(e) {
- if (document.activeElement == u.element) {
- if ("normal" !== c.getStatus()) return void e.preventDefault();
- var t = e;
- switch (d.state()) {
- case "input":
- break;
- case "normal":
- var n = c.getSelectedNodes();
- n.length && (t.clipboardData.setData("text/plain", g(n)), c.execCommand("removenode")),
- e.preventDefault()
- }
- }
- }),
- document.addEventListener("paste",
- function(e) {
- if (document.activeElement == u.element) {
- if ("normal" !== c.getStatus()) return void e.preventDefault();
- var t = e,
- n = d.state(),
- i = t.clipboardData.getData("text/plain");
- switch (n) {
- case "input":
- if (!s.isPureText(i)) return void e.preventDefault();
- break;
- case "normal":
- var r = c.getSelectedNodes();
- if ("application/km" === s.whichMimeType(i)) {
- var o, a = m(s.getPureText(i));
- r.forEach(function(e) {
- for (var t = a.length - 1; 0 <= t; t--) o = c.createNode(null, e),
- c.importNode(o, a[t]),
- p.push(o),
- e.appendChild(o)
- }),
- c.select(p, !0),
- p = [],
- c.refresh()
- } else {
- if (t.clipboardData && -1 < t.clipboardData.items[0].type.indexOf("image")) {
- var l = t.clipboardData.items[0].getAsFile();
- return angular.element(document.body).injector().get("server").uploadImage(l).then(function(e) {
- var t = e.data;
- 0 === t.errno && c.execCommand("image", t.data.url)
- })
- }
- r.forEach(function(e) {
- c.Text2Children(e, i)
- })
- }
- e.preventDefault()
- }
- }
- })
- }
- function g(e) {
- for (var t = [], n = 0, i = e.length; n < i; n++) t.push(c.exportNode(e[n]));
- return o(r.getRegisterProtocol("json").encode(t))
- }
- }
- }
- },
- d[7] = {
- value: function(e, t, n) {
- return n.exports = function() {
- var e;
- if (! (e = "string" == typeof this.selector ? document.querySelector(this.selector) : this.selector)) throw new Error("Invalid selector: " + this.selector);
- e.classList.add("km-editor"),
- this.container = e
- }
- }
- },
- d[8] = {
- value: function(e, t, n) {
- var v = d.r(2);
- new(d.r(19))("drag");
- return n.exports = function() {
- var n, i, t = this.fsm,
- o = this.minder,
- r = this.hotbox;
- this.receiver.element,
- t.when("* -> drag",
- function() {}),
- t.when("drag -> *",
- function(e, t, n) {});
- var a, l, s, c, d, u, m = 1,
- p = !1,
- g = !1;
- function f(e, t) {
- if (!e) return p = g = !1,
- u && kity.releaseFrame(u),
- void(u = null);
- var n, i, r;
- u || (u = kity.requestFrame((n = e, i = t, r = o,
- function(e) {
- switch (n) {
- case "left":
- r._viewDragger.move({
- x:
- -i,
- y: 0
- },
- 0);
- break;
- case "top":
- r._viewDragger.move({
- x:
- 0,
- y: -i
- },
- 0);
- break;
- case "right":
- r._viewDragger.move({
- x:
- i,
- y: 0
- },
- 0);
- break;
- case "bottom":
- r._viewDragger.move({
- x:
- 0,
- y: i
- },
- 0);
- break;
- default:
- return
- }
- e.next()
- })))
- }
- o.on("mousedown",
- function(e) {
- m = 0;
- var t = o.getPaper().container.getBoundingClientRect();
- n = e.originEvent.clientX,
- i = e.originEvent.clientY,
- d = t.top,
- a = t.width,
- l = t.height
- }),
- o.on("mousemove",
- function(e) {
- if ("drag" === t.state() && 0 == m && o.getSelectedNode() && (20 < Math.abs(n - e.originEvent.clientX) || 20 < Math.abs(i - e.originEvent.clientY)) && (s = e.originEvent.clientX, c = e.originEvent.clientY - d, s < 20 ? f("right", 20 - s) : a - 20 < s ? f("left", 20 + s - a) : p = !0, c < 20 ? f("bottom", c) : l - 20 < c ? f("top", 20 + c - l) : g = !0, p && g && f(!1)), "drag" !== t.state() && 0 === m && o.getSelectedNode() && (20 < Math.abs(n - e.originEvent.clientX) || 20 < Math.abs(i - e.originEvent.clientY))) return "hotbox" === t.state() && r.active(v.STATE_IDLE),
- t.jump("drag", "user-drag")
- }),
- window.addEventListener("mouseup",
- function() {
- if (m = 1, "drag" === t.state()) return f(!1),
- t.jump("normal", "drag-finish")
- },
- !1)
- }
- }
- },
- d[9] = {
- value: function(e, t, n) {
- var s = new(d.r(19))("fsm");
- function c(e, t, n, i) {
- return e.when == t && (("*" == e.enter || e.enter == i) && ("*" == e.exit || e.exit == n || void 0))
- }
- return n.exports = function() {
- this.fsm = new
- function(e) {
- var a = e,
- l = [];
- this.jump = function(e, t) {
- if (!t) throw new Error("Please tell fsm the reason to jump");
- var n, i, r = a,
- o = [r, e].concat([].slice.call(arguments, 1));
- for (n = 0; n < l.length; n++) if (c((i = l[n]).condition, "before", r, e) && i.apply(null, o)) return;
- for (a = e, s.log("[{0}] {1} -> {2}", t, r, e), n = 0; n < l.length; n++) c((i = l[n]).condition, "after", r, e) && i.apply(null, o);
- return a
- },
- this.state = function() {
- return a
- },
- this.when = function(e, t) {
- var n, i, r, o;
- if (1 == arguments.length && (t = e, e = "* -> *"), 2 == (i = e.split(" - ")).length ? n = "before": 2 == (i = e.split(" -> ")).length && (n = "after"), !n) throw new Error("Illegal fsm condition: " + e);
- r = i[0],
- o = i[1],
- t.condition = {
- when: n,
- exit: r,
- enter: o
- },
- l.push(t)
- }
- } ("normal")
- }
- }
- },
- d[10] = {
- value: function(e, t, n) {
- var g = d.r(22);
- return window.diff = g,
- n.exports = function() {
- var n, i, r, o, a = this.minder,
- e = this.hotbox,
- l = 100;
- function t() {
- r = [],
- o = [],
- n = a.exportJson()
- }
- function s() {
- var e = a.exportJson(),
- t = g(e, n);
- if (t.length) {
- for (r.push(t); r.length > l;) r.shift();
- return n = e,
- !0
- }
- }
- function c() {
- i = !0;
- var e, t = r.pop();
- t && (a.applyPatches(t), e = a.exportJson(), o.push(g(e, n)), n = e),
- i = !1
- }
- function d() {
- i = !0;
- var e = o.pop();
- e && (a.applyPatches(e), s()),
- i = !1
- }
- function u() {
- return !! r.length
- }
- function m() {
- return !! o.length
- }
- this.history = {
- reset: t,
- undo: c,
- redo: d,
- hasUndo: u,
- hasRedo: m
- },
- t(),
- a.on("contentchange",
- function() {
- i || s() && (o = [])
- }),
- a.on("import", t),
- a.on("patch",
- function(e) {
- if (i) {
- var t = e.patch;
- switch (t.express) {
- case "node.add":
- a.select(t.node.getChild(t.index), !0);
- break;
- case "node.remove":
- case "data.replace":
- case "data.remove":
- case "data.add":
- a.select(t.node, !0)
- }
- }
- });
- var p = e.state("main");
- p.button({
- position: "top",
- label: "撤销",
- key: "Ctrl + Z",
- enable: u,
- action: c,
- next: "idle"
- }),
- p.button({
- position: "top",
- label: "重做",
- key: "Ctrl + Y",
- enable: m,
- action: d,
- next: "idle"
- })
- }
- }
- },
- d[11] = {
- value: function(e, t, n) {
- var i = d.r(2);
- return n.exports = function() {
- var e = this.fsm,
- a = this.minder,
- r = this.receiver,
- t = this.container,
- l = new i(t);
- l.setParentFSM(e),
- e.when("normal -> hotbox",
- function(e, t, n) {
- var i, r = a.getSelectedNode();
- if (r) {
- var o = r.getRenderBox();
- i = {
- x: o.cx,
- y: o.cy
- }
- }
- l.active("main", i)
- }),
- e.when("normal -> normal",
- function(e, t, n, i) {
- "shortcut-handle" == n && (l.dispatch(i) ? i.preventDefault() : a.dispatchKeyEvent(i))
- }),
- e.when("modal -> normal",
- function(e, t, n, i) {
- "import-text-finish" == n && r.element.focus()
- }),
- this.hotbox = l
- }
- }
- },
- d[12] = {
- value: function(e, t, n) {
- d.r(21);
- var s = new(d.r(19))("input");
- return n.exports = function() {
- var r = this.fsm,
- p = this.minder,
- e = this.hotbox,
- o = this.receiver,
- a = o.element,
- l = window.kity.Browser.gecko;
- function t() {
- var e = p.getSelectedNode();
- if (e) {
- var t = a;
- if (a.innerText = "", "bold" === e.getData("font-weight")) {
- var n = document.createElement("b");
- t.appendChild(n),
- t = n
- }
- if ("italic" === e.getData("font-style")) {
- var i = document.createElement("i");
- t.appendChild(i),
- t = i
- }
- t.innerText = p.queryCommandValue("text"),
- l && o.fixFFCaretDisappeared(),
- r.jump("input", "input-request"),
- o.selectAll()
- }
- }
- function n() {
- var e = p.getSelectedNode();
- if (e) {
- var t = e.getData("font-size") || e.getStyle("font-size");
- a.style.fontSize = t + "px",
- a.style.minWidth = 0,
- a.style.minWidth = a.clientWidth + "px",
- a.style.fontWeight = e.getData("font-weight") || "",
- a.style.fontStyle = e.getData("font-style") || "",
- a.classList.add("input"),
- a.focus()
- }
- }
- function g() {
- a.classList.remove("input"),
- o.selectAll()
- }
- function i() {
- var t = i,
- n = p.getSelectedNode();
- n && (t.timer || (t.timer = setTimeout(function() {
- var e = n.getRenderBox("TextRenderer");
- a.style.left = Math.round(e.x) + "px",
- a.style.top = (s.flaged ? Math.round(e.bottom + 30) : Math.round(e.y)) + "px",
- t.timer = 0
- })))
- }
- s.flaged && a.classList.add("debug"),
- a.onmousedown = function(e) {
- e.stopPropagation()
- },
- p.on("layoutallfinish viewchange viewchanged selectionchange",
- function(e) {
- "viewchange" == e.type && "input" != r.state() || i()
- }),
- i(),
- r.when("* -> input", n),
- r.when("input -> *",
- function(e, t, n) {
- switch (n) {
- case "input-cancel":
- return g();
- case "input-commit":
- default:
- return function() {
- var e = [].slice.call(a.childNodes);
- setTimeout(function() {
- a.innerHTML = ""
- },
- 0);
- var t = p.getSelectedNode();
- if (e = function(e) {
- for (var t, n, i, r = "",
- o = /\S/,
- a = new RegExp("( |" + String.fromCharCode(160) + ")"), l = document.createElement("br"), s = !1, c = !1, d = 0, u = e.length; d < u; d++) switch (t = e[d], Object.prototype.toString.call(t)) {
- case "[object HTMLBRElement]":
- r += "\n";
- break;
- case "[object Text]":
- if (t = t.textContent.replace(" ", " "), o.test(t)) r += t;
- else for (i = t.length; i--;) a.test(t[i]) ? r += " ": "\t" === t[i] && (r += "\t");
- break;
- case "[object HTMLElement]":
- switch (t.nodeName) {
- case "B":
- s = !0;
- break;
- case "I":
- c = !0
- } [].splice.apply(e, [d, 1].concat([].slice.call(t.childNodes))),
- u = e.length,
- d--;
- break;
- case "[object HTMLSpanElement]":
- [].splice.apply(e, [d, 1].concat([].slice.call(t.childNodes))),
- u = e.length,
- d--;
- break;
- case "[object HTMLImageElement]":
- t.src && /http(|s):\/\//.test(t.src) && p.execCommand("Image", t.src, t.alt);
- break;
- case "[object HTMLDivElement]":
- n = [];
- for (var m = 0,
- u = t.childNodes.length; m < u; m++) n.push(t.childNodes[m]);
- n.push(l),
- [].splice.apply(e, [d, 1].concat(n)),
- u = e.length,
- d--;
- break;
- default:
- if (t && t.childNodes.length) {
- n = [];
- for (var m = 0,
- u = t.childNodes.length; m < u; m++) n.push(t.childNodes[m]);
- n.push(l),
- [].splice.apply(e, [d, 1].concat(n)),
- u = e.length,
- d--
- } else t && void 0 !== t.textContent ? r += t.textContent: r += ""
- }
- return r = (r = r.replace(/^\n*|\n*$/g, "")).replace(new RegExp("(\n|\r|\n\r)( |" + String.fromCharCode(160) + "){4}", "g"), "$1\t"),
- p.getSelectedNode().setText(r),
- s ? p.queryCommandState("bold") || p.execCommand("bold") : p.queryCommandState("bold") && p.execCommand("bold"),
- c ? p.queryCommandState("italic") || p.execCommand("italic") : p.queryCommandState("italic") && p.execCommand("italic"),
- g(),
- r
- } (e),
- function(t, e) {
- try {
- p.decodeData("text", e).then(function(e) { !
- function e(t, n, i) {
- var r = n.data;
- t.setText(r.text || "");
- for (var o = n.children || [], a = 0; a < o.length; a++) {
- var l = i.createNode(null, t);
- e(l, o[a], i)
- }
- return t
- } (t, e, p),
- p.fire("contentchange"),
- p.getRoot().renderTree(),
- p.layout(300)
- })
- } catch(e) {
- if (p.fire("contentchange"), p.getRoot().renderTree(), "Error: Invalid local format" !== e.toString()) throw e
- }
- } (t, e), "root" == t.type) {
- var n = p.getRoot().getText();
- p.fire("initChangeRoot", {
- text: n
- })
- }
- } ()
- }
- }),
- o.onblur(function(e) {
- "input" == r.state() && r.jump("normal", "input-commit")
- }),
- p.on("beforemousedown",
- function() {
- "input" == r.state() && r.jump("normal", "input-commit")
- }),
- p.on("dblclick",
- function() {
- p.getSelectedNode() && "readonly" !== p._status && t()
- }),
- e.state("main").button({
- position: "center",
- label: "编辑",
- key: "F2",
- enable: function() {
- return - 1 != p.queryCommandState("text")
- },
- action: t
- }),
- this.editText = t
- }
- }
- },
- d[13] = {
- value: function(e, t, n) {
- var c = d.r(2);
- return n.exports = function() {
- var t, n, i = this.fsm,
- r = this.minder,
- o = this.receiver,
- e = this.container,
- a = o.element,
- l = this.hotbox,
- s = !1;
- o.listen("normal",
- function(e) {
- if (o.enable(), e.is("Space")) return e.preventDefault(),
- kity.Browser.safari && (a.innerHTML = ""),
- i.jump("hotbox", "space-trigger");
- switch (e.type) {
- case "keydown":
- if (r.getSelectedNode()) {
- if (! ((t = e).ctrlKey || t.metaKey || t.altKey) && (65 <= t.keyCode && t.keyCode <= 90 || 48 <= t.keyCode && t.keyCode <= 57 || 108 != t.keyCode && 96 <= t.keyCode && t.keyCode <= 111 || 108 != t.keyCode && 96 <= t.keyCode && t.keyCode <= 111 || 229 == t.keyCode || 0 === t.keyCode)) return i.jump("input", "user-input")
- } else a.innerHTML = "";
- i.jump("normal", "shortcut-handle", e)
- }
- var t
- }), o.listen("hotbox",
- function(e) {
- if (o.disable(), e.preventDefault(), l.dispatch(e), l.state() == c.STATE_IDLE && "hotbox" == i.state()) return i.jump("normal", "hotbox-idle")
- }),
- o.listen("input",
- function(e) {
- if (o.enable(), "keydown" == e.type) {
- if (e.is("Enter")) return e.preventDefault(),
- i.jump("normal", "input-commit");
- if (e.is("Esc")) return e.preventDefault(),
- i.jump("normal", "input-cancel"); (e.is("Tab") || e.is("Shift + Tab")) && e.preventDefault()
- } else if ("keyup" == e.type && e.is("Esc")) {
- if (e.preventDefault(), !s) return i.jump("normal", "input-cancel")
- } else "compositionstart" == e.type ? s = !0 : "compositionend" == e.type && setTimeout(function() {
- s = !1
- })
- }),
- e.addEventListener("mousedown",
- function(e) {
- 2 == e.button && e.preventDefault(),
- "hotbox" == i.state() ? (l.active(c.STATE_IDLE), i.jump("normal", "blur")) : "normal" == i.state() && 2 == e.button && (t = e.clientX, n = e.clientY)
- },
- !1),
- e.addEventListener("mousewheel",
- function(e) {
- "hotbox" == i.state() && (l.active(c.STATE_IDLE), i.jump("normal", "mousemove-blur"))
- },
- !1),
- e.addEventListener("contextmenu",
- function(e) {
- e.preventDefault()
- }),
- e.addEventListener("mouseup",
- function(e) {
- "normal" == i.state() && 2 == e.button && e.clientX == t && e.clientY == n && r.getSelectedNode() && i.jump("hotbox", "content-menu")
- },
- !1),
- l.$element.addEventListener("mousedown",
- function(e) {
- e.stopPropagation()
- })
- }
- }
- },
- d[14] = {
- value: function(e, t, n) {
- var i = d.r(4);
- return n.exports = function() {
- var e = new i({
- enableKeyReceiver: !1,
- enableAnimation: !0
- });
- e.renderTo(this.selector),
- e.setTheme(null),
- e.select(e.getRoot(), !0),
- e.execCommand("text", "中心主题"),
- this.minder = e
- }
- }
- },
- d[15] = {
- value: function(e, t, n) {
- return n.exports = function() {
- var o = this,
- a = this.minder,
- e = this.hotbox,
- l = this.fsm,
- s = e.state("main"),
- c = 0; ["前移:Alt+Up:ArrangeUp", "下级:Tab|Insert:AppendChildNode", "同级:Enter:AppendSiblingNode", "后移:Alt+Down:ArrangeDown", "删除:Delete|Backspace:RemoveNode", "上级:Shift+Tab|Shift+Insert:AppendParentNode"].forEach(function(e) {
- var t = e.split(":"),
- n = t.shift(),
- i = t.shift(),
- r = t.shift();
- s.button({
- position: "ring",
- label: n,
- key: i,
- action: function() {
- 0 === r.indexOf("Append") ? (c++, a.execCommand(r, "分支主题"), a.on("layoutallfinish",
- function e() {--c || o.editText(),
- a.off("layoutallfinish", e)
- })) : (a.execCommand(r), l.jump("normal", "command-executed"))
- },
- enable: function() {
- return - 1 != a.queryCommandState(r)
- }
- })
- }),
- s.button({
- position: "bottom",
- label: "导入节点",
- key: "Alt + V",
- enable: function() {
- return 1 == a.getSelectedNodes().length
- },
- action: function() {
- a.fire("importNodeData")
- },
- next: "idle"
- }),
- s.button({
- position: "bottom",
- label: "导出节点",
- key: "Alt + C",
- enable: function() {
- return 1 == a.getSelectedNodes().length
- },
- action: function() {
- a.fire("exportNodeData")
- },
- next: "idle"
- })
- }
- }
- },
- d[16] = {
- value: function(e, t, n) {
- return n.exports = function() {
- var t = this.minder,
- e = this.hotbox;
- e.state("main").button({
- position: "top",
- label: "优先级",
- key: "P",
- next: "priority",
- enable: function() {
- return - 1 != t.queryCommandState("priority")
- }
- });
- var n = e.state("priority");
- "123456789".replace(/./g,
- function(e) {
- n.button({
- position: "ring",
- label: "P" + e,
- key: e,
- action: function() {
- t.execCommand("Priority", e)
- }
- })
- }),
- n.button({
- position: "center",
- label: "移除",
- key: "Del",
- action: function() {
- t.execCommand("Priority", 0)
- }
- }),
- n.button({
- position: "top",
- label: "返回",
- key: "esc",
- next: "back"
- })
- }
- }
- },
- d[17] = {
- value: function(e, t, n) {
- return n.exports = function() {
- var t = this.minder,
- e = this.hotbox;
- e.state("main").button({
- position: "top",
- label: "进度",
- key: "G",
- next: "progress",
- enable: function() {
- return - 1 != t.queryCommandState("progress")
- }
- });
- var n = e.state("progress");
- "012345678".replace(/./g,
- function(e) {
- n.button({
- position: "ring",
- label: "G" + e,
- key: e,
- action: function() {
- t.execCommand("Progress", parseInt(e) + 1)
- }
- })
- }),
- n.button({
- position: "center",
- label: "移除",
- key: "Del",
- action: function() {
- t.execCommand("Progress", 0)
- }
- }),
- n.button({
- position: "top",
- label: "返回",
- key: "esc",
- next: "back"
- })
- }
- }
- },
- d[18] = {
- value: function(e, t, n) {
- var a = d.r(23);
- d.r(2);
- return n.exports = function() {
- var i = this.fsm,
- e = this.minder,
- n = document.createElement("div");
- n.contentEditable = !0,
- n.setAttribute("tabindex", -1),
- n.classList.add("receiver"),
- n.onkeydown = n.onkeypress = n.onkeyup = o,
- n.addEventListener("compositionstart", o),
- this.container.appendChild(n);
- var t = {
- element: n,
- selectAll: function() {
- n.innerHTML || (n.innerHTML = " ");
- var e = document.createRange(),
- t = window.getSelection();
- e.selectNodeContents(n),
- t.removeAllRanges(),
- t.addRange(e),
- n.focus()
- },
- enable: function() {
- n.setAttribute("contenteditable", !0)
- },
- disable: function() {
- n.setAttribute("contenteditable", !1)
- },
- fixFFCaretDisappeared: function() {
- n.removeAttribute("contenteditable"),
- n.setAttribute("contenteditable", "true"),
- n.blur(),
- n.focus()
- },
- onblur: function(e) {
- n.onblur = e
- }
- };
- t.selectAll(),
- e.on("beforemousedown", t.selectAll),
- e.on("receiverfocus", t.selectAll),
- e.on("readonly",
- function() {
- e.disable(),
- editor.receiver.element.parentElement.removeChild(editor.receiver.element),
- editor.hotbox.$container.removeChild(editor.hotbox.$element)
- });
- var r = [];
- function o(e) {
- var t;
- e.is = function(e) {
- for (var t = e.split("|"), n = 0; n < t.length; n++) if (a.is(this, t[n])) return ! 0;
- return ! 1
- };
- for (var n = 0; n < r.length; n++) if (("*" == (t = r[n]).notifyState || t.notifyState == i.state()) && t.call(null, e)) return
- }
- t.listen = function(e, t) {
- 1 == arguments.length && (t = e, e = "*"),
- t.notifyState = e,
- r.push(t)
- },
- this.receiver = t
- }
- }
- },
- d[19] = {
- value: function(e, t, n) {
- var i = d.r(20);
- function r() {}
- return n.exports = function(t) {
- if (this.flaged = -1 != window.location.search.indexOf(t)) {
- var e = function(e) {
- for (var t = 0,
- n = 0; n < e.length; n++) t += e.charCodeAt(n);
- return t
- } (t) % 360,
- n = i("background: hsl({0}, 50%, 80%); color: hsl({0}, 100%, 30%); padding: 2px 3px; margin: 1px 3px 0 0;border-radius: 2px;", e);
- this.log = function() {
- var e = i.apply(null, arguments);
- console.log(i("%c{0}%c{1}", t, e), n, "background: none; color: black;")
- }
- } else this.log = r
- }
- }
- },
- d[20] = {
- value: function(e, t, n) {
- return n.exports = function(e, n) {
- return "object" != typeof n && (n = [].slice.call(arguments, 1)),
- String(e).replace(/\{(\w+)\}/gi,
- function(e, t) {
- return n[t] || t
- })
- }
- }
- },
- d[21] = {
- value: function(e, t, n) { ! ("innerText" in document.createElement("a")) && "getSelection" in window && (HTMLElement.prototype.__defineGetter__("innerText",
- function() {
- var e, t, n = window.getSelection(),
- i = [];
- for (t = 0; t < n.rangeCount; t++) i[t] = n.getRangeAt(t);
- for (n.removeAllRanges(), n.selectAllChildren(this), e = n.toString(), n.removeAllRanges(), t = 0; t < i.length; t++) n.addRange(i[t]);
- return e
- }), HTMLElement.prototype.__defineSetter__("innerText",
- function(e) {
- this.innerHTML = (e || "").replace(/</g, "<").replace(/>/g, ">").replace(/\n/g, "<br>")
- }))
- }
- },
- d[22] = {
- value: function(e, t, n) {
- var m = Object.keys ? Object.keys: function(e) {
- var t = [];
- for (var n in e) e.hasOwnProperty(n) && t.push(n);
- return t
- };
- function p(e) {
- return - 1 === e.indexOf("/") && -1 === e.indexOf("~") ? e: e.replace(/~/g, "~0").replace(/\//g, "~1")
- }
- function g(e) {
- return "object" == typeof e ? JSON.parse(JSON.stringify(e)) : e
- }
- return n.exports = function(e, t) {
- var n = [];
- return function e(t, n, i, r) {
- for (var o = m(n), a = m(t), l = !1, s = a.length - 1; 0 <= s; s--) {
- var c = t[u = a[s]];
- if (n.hasOwnProperty(u)) {
- var d = n[u];
- "object" == typeof c && null != c && "object" == typeof d && null != d ? e(c, d, i, r + "/" + p(u)) : c != d && i.push({
- op: "replace",
- path: r + "/" + p(u),
- value: g(d)
- })
- } else i.push({
- op: "remove",
- path: r + "/" + p(u)
- }),
- l = !0
- }
- if (l || o.length != a.length) for (s = 0; s < o.length; s++) {
- var u = o[s];
- t.hasOwnProperty(u) || i.push({
- op: "add",
- path: r + "/" + p(u),
- value: g(n[u])
- })
- }
- } (e, t, n, ""),
- n
- }
- }
- },
- d[23] = {
- value: function(e, t, n) {
- var i = d.r(24),
- r = 4096,
- o = 8192,
- a = 16384;
- function l(e) {
- return "string" == typeof e ? (t = 0, e.toLowerCase().split(/\s*\+\s*/).forEach(function(e) {
- switch (e) {
- case "ctrl":
- case "cmd":
- t |= r;
- break;
- case "alt":
- t |= o;
- break;
- case "shift":
- t |= a;
- break;
- default:
- t |= i[e]
- }
- }), t) : function(e) {
- var t = 0; (e.ctrlKey || e.metaKey) && (t |= r);
- e.altKey && (t |= o);
- e.shiftKey && (t |= a);
- if ( - 1 === [16, 17, 18, 91].indexOf(e.keyCode)) {
- if (229 === e.keyCode && e.keyIdentifier) return t |= parseInt(e.keyIdentifier.substr(2), 16);
- t |= e.keyCode
- }
- return t
- } (e);
- var t
- }
- t.hash = l,
- t.is = function(e, t) {
- return e && t && l(e) == l(t)
- }
- }
- },
- d[24] = {
- value: function(e, t, n) {
- var i = {
- Shift: 16,
- Control: 17,
- Alt: 18,
- CapsLock: 20,
- BackSpace: 8,
- Tab: 9,
- Enter: 13,
- Esc: 27,
- Space: 32,
- PageUp: 33,
- PageDown: 34,
- End: 35,
- Home: 36,
- Insert: 45,
- Left: 37,
- Up: 38,
- Right: 39,
- Down: 40,
- Direction: {
- 37 : 1,
- 38 : 1,
- 39 : 1,
- 40 : 1
- },
- Del: 46,
- NumLock: 144,
- Cmd: 91,
- CmdFF: 224,
- F1: 112,
- F2: 113,
- F3: 114,
- F4: 115,
- F5: 116,
- F6: 117,
- F7: 118,
- F8: 119,
- F9: 120,
- F10: 121,
- F11: 122,
- F12: 123,
- "`": 192,
- "=": 187,
- "-": 189,
- "/": 191,
- ".": 190
- };
- for (var r in i) i.hasOwnProperty(r) && (i[r.toLowerCase()] = i[r]);
- var o = "a".charCodeAt(0);
- "abcdefghijklmnopqrstuvwxyz".split("").forEach(function(e) {
- i[e] = e.charCodeAt(0) - o + 65
- });
- for (var a = 9; i[a.toString()] = a + 48, --a;);
- n.exports = i
- }
- };
- var e, t = {
- "expose-editor": 1
- };
- angular.module("kityminderEditor", ["ui.bootstrap", "ui.codemirror", "ui.colorpicker"]).config(["$sceDelegateProvider",
- function(e) {
- e.resourceUrlWhitelist(["self", "http://agroup.baidu.com:8910/**", "http://cq01-fe-rdtest01.vm.baidu.com:8910/**", "http://agroup.baidu.com:8911/**"])
- }]),
- angular.module("kityminderEditor").run(["$templateCache",
- function(e) {
- "use strict";
- e.put()
- e.put("ui/directive/appendNode/appendNode.html", "<div class=\"km-btn-group append-group\"><div class=\"km-btn-item append-child-node\" ng-disabled=\"minder.queryCommandState('AppendChildNode') === -1\" ng-click=\"minder.queryCommandState('AppendChildNode') === -1 || execCommand('AppendChildNode')\" title=\"{{ 'appendchildnode' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'appendchildnode' | lang:'ui/command' }}</span></div><div class=\"km-btn-item append-parent-node\" ng-disabled=\"minder.queryCommandState('AppendParentNode') === -1\" ng-click=\"minder.queryCommandState('AppendParentNode') === -1 || execCommand('AppendParentNode')\" title=\"{{ 'appendparentnode' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'appendparentnode' | lang:'ui/command' }}</span></div><div class=\"km-btn-item append-sibling-node\" ng-disabled=\"minder.queryCommandState('AppendSiblingNode') === -1\" ng-click=\"minder.queryCommandState('AppendSiblingNode') === -1 ||execCommand('AppendSiblingNode')\" title=\"{{ 'appendsiblingnode' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'appendsiblingnode' | lang:'ui/command' }}</span></div></div>"),
- e.put("ui/directive/arrange/arrange.html", "<div class=\"km-btn-group arrange-group\"><div class=\"km-btn-item arrange-up\" ng-disabled=\"minder.queryCommandState('ArrangeUp') === -1\" ng-click=\"minder.queryCommandState('ArrangeUp') === -1 || minder.execCommand('ArrangeUp')\" title=\"{{ 'arrangeup' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'arrangeup' | lang:'ui/command' }}</span></div><div class=\"km-btn-item arrange-down\" ng-disabled=\"minder.queryCommandState('ArrangeDown') === -1\" ng-click=\"minder.queryCommandState('ArrangeDown') === -1 || minder.execCommand('ArrangeDown');\" title=\"{{ 'arrangedown' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'arrangedown' | lang:'ui/command' }}</span></div></div>"),
- e.put("ui/directive/colorPanel/colorPanel.html", '<div class="bg-color-wrap"><span class="quick-bg-color" ng-click="minder.queryCommandState(\'background\') === -1 || minder.execCommand(\'background\', bgColor)" ng-disabled="minder.queryCommandState(\'background\') === -1"></span> <span color-picker class="bg-color" set-color="setDefaultBg()" ng-disabled="minder.queryCommandState(\'background\') === -1"><span class="caret"></span></span> <span class="bg-color-preview" ng-style="{ \'background-color\': bgColor }" ng-click="minder.queryCommandState(\'background\') === -1 || minder.execCommand(\'background\', bgColor)" ng-disabled="minder.queryCommandState(\'background\') === -1"></span></div>'),
- e.put("ui/directive/expandLevel/expandLevel.html", '<div class="btn-group-vertical" dropdown is-open="isopen"><button type="button" class="btn btn-default expand" title="{{ \'expandtoleaf\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="minder.execCommand(\'ExpandToLevel\', 9999)"></button> <button type="button" class="btn btn-default expand-caption dropdown-toggle" title="{{ \'expandtoleaf\' | lang:\'ui\' }}" dropdown-toggle><span class="caption">{{ \'expandtoleaf\' | lang:\'ui\' }}</span> <span class="caret"></span> <span class="sr-only">{{ \'expandtoleaf\' | lang:\'ui\' }}</span></button><ul class="dropdown-menu" role="menu"><li ng-repeat="level in levels"><a href ng-click="minder.execCommand(\'ExpandToLevel\', level)">{{ \'expandtolevel\' + level | lang:\'ui/command\' }}</a></li></ul></div>'),
- e.put("ui/directive/fontOperator/fontOperator.html", '<div class="font-operator"><div class="dropdown font-family-list" dropdown><div class="dropdown-toggle current-font-item" dropdown-toggle ng-disabled="minder.queryCommandState(\'fontfamily\') === -1"><a href class="current-font-family" title="{{ \'fontfamily\' | lang: \'ui\' }}">{{ getFontfamilyName(minder.queryCommandValue(\'fontfamily\')) || \'字体\' }}</a> <span class="caret"></span></div><ul class="dropdown-menu font-list"><li ng-repeat="f in fontFamilyList" class="font-item-wrap"><a ng-click="minder.execCommand(\'fontfamily\', f.val)" class="font-item" ng-class="{ \'font-item-selected\' : f == minder.queryCommandValue(\'fontfamily\') }" ng-style="{\'font-family\': f.val }">{{ f.name }}</a></li></ul></div><div class="dropdown font-size-list" dropdown><div class="dropdown-toggle current-font-item" dropdown-toggle ng-disabled="minder.queryCommandState(\'fontsize\') === -1"><a href class="current-font-size" title="{{ \'fontsize\' | lang: \'ui\' }}">{{ minder.queryCommandValue(\'fontsize\') || \'字号\' }}</a> <span class="caret"></span></div><ul class="dropdown-menu font-list"><li ng-repeat="f in fontSizeList" class="font-item-wrap"><a ng-click="minder.execCommand(\'fontsize\', f)" class="font-item" ng-class="{ \'font-item-selected\' : f == minder.queryCommandValue(\'fontsize\') }" ng-style="{\'font-size\': f + \'px\'}">{{ f }}</a></li></ul></div><span class="s-btn-icon font-bold" ng-click="minder.queryCommandState(\'bold\') === -1 || minder.execCommand(\'bold\')" ng-class="{\'font-bold-selected\' : minder.queryCommandState(\'bold\') == 1}" ng-disabled="minder.queryCommandState(\'bold\') === -1"></span> <span class="s-btn-icon font-italics" ng-click="minder.queryCommandState(\'italic\') === -1 || minder.execCommand(\'italic\')" ng-class="{\'font-italics-selected\' : minder.queryCommandState(\'italic\') == 1}" ng-disabled="minder.queryCommandState(\'italic\') === -1"></span><div class="font-color-wrap"><span class="quick-font-color" ng-click="minder.queryCommandState(\'forecolor\') === -1 || minder.execCommand(\'forecolor\', foreColor)" ng-disabled="minder.queryCommandState(\'forecolor\') === -1">A</span> <span color-picker class="font-color" set-color="setDefaultColor()" ng-disabled="minder.queryCommandState(\'forecolor\') === -1"><span class="caret"></span></span> <span class="font-color-preview" ng-style="{ \'background-color\': foreColor }" ng-click="minder.queryCommandState(\'forecolor\') === -1 || minder.execCommand(\'forecolor\', foreColor)" ng-disabled="minder.queryCommandState(\'forecolor\') === -1"></span></div><color-panel minder="minder" class="inline-directive"></color-panel></div>'),
- e.put("ui/directive/hyperLink/hyperLink.html", '<div class="btn-group-vertical" dropdown is-open="isopen"><button type="button" class="btn btn-default hyperlink" title="{{ \'link\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="addHyperlink()" ng-disabled="minder.queryCommandState(\'HyperLink\') === -1"></button> <button type="button" class="btn btn-default hyperlink-caption dropdown-toggle" ng-disabled="minder.queryCommandState(\'HyperLink\') === -1" title="{{ \'link\' | lang:\'ui\' }}" dropdown-toggle><span class="caption">{{ \'link\' | lang:\'ui\' }}</span> <span class="caret"></span> <span class="sr-only">{{ \'link\' | lang:\'ui\' }}</span></button><ul class="dropdown-menu" role="menu"><li><a href ng-click="addHyperlink()">{{ \'insertlink\' | lang:\'ui\' }}</a></li><li><a href ng-click="minder.execCommand(\'HyperLink\', null)">{{ \'removelink\' | lang:\'ui\' }}</a></li></ul></div>'),
- //e.put("ui/directive/imageBtn/imageBtn.html", '<div class="btn-group-vertical" dropdown is-open="isopen"><button type="button" class="btn btn-default image-btn" title="{{ \'image\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="addImage()" ng-disabled="minder.queryCommandState(\'Image\') === -1"></button> <button type="button" class="btn btn-default image-btn-caption dropdown-toggle" ng-disabled="minder.queryCommandState(\'Image\') === -1" title="{{ \'image\' | lang:\'ui\' }}" dropdown-toggle><span class="caption">{{ \'image\' | lang:\'ui\' }}</span> <span class="caret"></span> <span class="sr-only">{{ \'image\' | lang:\'ui\' }}</span></button><ul class="dropdown-menu" role="menu"><li><a href ng-click="addImage()">{{ \'insertimage\' | lang:\'ui\' }}</a></li><li><a href ng-click="minder.execCommand(\'Image\', \'\')">{{ \'removeimage\' | lang:\'ui\' }}</a></li></ul></div>'),
- e.put("ui/directive/kityminderEditor/kityminderEditor.html", '<div class="minder-editor-container"><div class="top-tab" top-tab="minder" editor="editor" ng-if="minder"></div><div search-box minder="minder" ng-if="minder"></div><div class="minder-editor"></div><div class="km-note" note-editor minder="minder" ng-if="minder"></div><div class="note-previewer" note-previewer ng-if="minder"></div><div class="navigator" navigator minder="minder" ng-if="minder"></div></div>'),
- e.put("ui/directive/kityminderViewer/kityminderViewer.html", '<div class="minder-editor-container"><div class="minder-viewer"></div><div class="note-previewer" note-previewer ng-if="minder"></div><div class="navigator" navigator minder="minder" ng-if="minder"></div></div>'),
- e.put("ui/directive/layout/layout.html", '<div class="readjust-layout"><a ng-click="minder.queryCommandState(\'resetlayout\') === -1 || minder.execCommand(\'resetlayout\')" class="btn-wrap" ng-disabled="minder.queryCommandState(\'resetlayout\') === -1"><span class="btn-icon reset-layout-icon"></span> <span class="btn-label">{{ \'resetlayout\' | lang: \'ui/command\' }}</span></a></div>'),
- e.put("ui/directive/navigator/navigator.html", '<div class="nav-bar"><div class="nav-btn zoom-in" ng-click="minder.execCommand(\'zoomIn\')" title="{{ \'zoom-in\' | lang : \'ui\' }}" ng-class="{ \'active\' : getZoomRadio(zoom) == 0 }"><div class="icon"></div></div><div class="zoom-pan"><div class="origin" ng-style="{\'transform\': \'translate(0, \' + getHeight(100) + \'px)\'}" ng-click="minder.execCommand(\'zoom\', 100);"></div><div class="indicator" ng-style="{\n \'transform\': \'translate(0, \' + getHeight(zoom) + \'px)\',\n \'transition\': \'transform 200ms\'\n }"></div></div><div class="nav-btn zoom-out" ng-click="minder.execCommand(\'zoomOut\')" title="{{ \'zoom-out\' | lang : \'ui\' }}" ng-class="{ \'active\' : getZoomRadio(zoom) == 1 }"><div class="icon"></div></div><div class="nav-btn hand" ng-click="minder.execCommand(\'hand\')" title="{{ \'hand\' | lang : \'ui\' }}" ng-class="{ \'active\' : minder.queryCommandState(\'hand\') == 1 }"><div class="icon"></div></div><div class="nav-btn camera" ng-click="minder.execCommand(\'camera\', minder.getRoot(), 600);" title="{{ \'camera\' | lang : \'ui\' }}"><div class="icon"></div></div><div class="nav-btn nav-trigger" ng-class="{\'active\' : isNavOpen}" ng-click="toggleNavOpen()" title="{{ \'navigator\' | lang : \'ui\' }}"><div class="icon"></div></div></div><div class="nav-previewer" ng-show="isNavOpen"></div>'),
- e.put("ui/directive/noteBtn/noteBtn.html", '<div class="btn-group-vertical note-btn-group" dropdown is-open="isopen"><button type="button" class="btn btn-default note-btn" title="{{ \'note\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="addNote()" ng-disabled="minder.queryCommandState(\'note\') === -1"></button> <button type="button" class="btn btn-default note-btn-caption dropdown-toggle" ng-disabled="minder.queryCommandState(\'note\') === -1" title="{{ \'note\' | lang:\'ui\' }}" dropdown-toggle><span class="caption">{{ \'note\' | lang:\'ui\' }}</span> <span class="caret"></span> <span class="sr-only">{{ \'note\' | lang:\'ui\' }}</span></button><ul class="dropdown-menu" role="menu"><li><a href ng-click="addNote()">{{ \'insertnote\' | lang:\'ui\' }}</a></li><li><a href ng-click="minder.execCommand(\'note\', null)">{{ \'removenote\' | lang:\'ui\' }}</a></li></ul></div>'),
- e.put("ui/directive/noteEditor/noteEditor.html", '<div class="panel panel-default" ng-init="noteEditorOpen = false" ng-show="noteEditorOpen"><div class="panel-heading"><h3 class="panel-title">备注</h3><span>(<a class="help" href="https://www.zybuluo.com/techird/note/46064" target="_blank">支持 GFM 语法书写</a>)</span> <i class="close-note-editor glyphicon glyphicon-remove" ng-click="closeNoteEditor()"></i></div><div class="panel-body"><div ng-show="noteEnabled" ui-codemirror="{ onLoad: codemirrorLoaded }" ng-model="noteContent" ui-codemirror-opts="{\n gfm: true,\n breaks: true,\n lineWrapping : true,\n mode: \'gfm\',\n dragDrop: false,\n lineNumbers:true\n }"></div><p ng-show="!noteEnabled" class="km-note-tips">请选择节点编辑备注</p></div></div>'),
- e.put("ui/directive/notePreviewer/notePreviewer.html", '<div id="previewer-content" ng-show="showNotePreviewer" ng-style="previewerStyle" ng-bind-html="noteContent"></div>'),
- e.put("ui/directive/operation/operation.html", "<div class=\"km-btn-group operation-group\"><div class=\"km-btn-item edit-node\" ng-disabled=\"minder.queryCommandState('text') === -1\" ng-click=\"minder.queryCommandState('text') === -1 || editNode()\" title=\"{{ 'editnode' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'editnode' | lang:'ui/command' }}</span></div><div class=\"km-btn-item remove-node\" ng-disabled=\"minder.queryCommandState('RemoveNode') === -1\" ng-click=\"minder.queryCommandState('RemoveNode') === -1 || minder.execCommand('RemoveNode');\" title=\"{{ 'removenode' | lang:'ui/command' }}\"><i class=\"km-btn-icon\"></i> <span class=\"km-btn-caption\">{{ 'removenode' | lang:'ui/command' }}</span></div></div>"),
- e.put("ui/directive/priorityEditor/priorityEditor.html", '<ul class="km-priority tool-group" ng-disabled="commandDisabled"><li class="km-priority-item tool-group-item" ng-repeat="p in priorities" ng-click="commandDisabled || minder.execCommand(\'priority\', p)" ng-class="{ active: commandValue == p }" title="{{ getPriorityTitle(p) }}"><div class="km-priority-icon tool-group-icon priority-{{p}}"></div></li></ul>'),
- e.put("ui/directive/progressEditor/progressEditor.html", '<ul class="km-progress tool-group" ng-disabled="commandDisabled"><li class="km-progress-item tool-group-item" ng-repeat="p in progresses" ng-click="commandDisabled || minder.execCommand(\'progress\', p)" ng-class="{ active: commandValue == p }" title="{{ getProgressTitle(p) }}"><div class="km-progress-icon tool-group-icon progress-{{p}}"></div></li></ul>'),
- //e.put("ui/directive/resourceEditor/resourceEditor.html", '<div class="resource-editor"><div class="input-group"><input class="form-control" type="text" ng-model="newResourceName" ng-required ng-keypress="$event.keyCode == 13 && addResource(newResourceName)" ng-disabled="!enabled"> <span class="input-group-btn"><button class="btn btn-default" ng-click="addResource(newResourceName)" ng-disabled="!enabled">添加</button></span></div><div class="resource-dropdown clearfix" id="resource-dropdown"><ul class="km-resource" ng-init="resourceListOpen = false" ng-class="{\'open\': resourceListOpen}"><li ng-repeat="resource in used" ng-disabled="!enabled" ng-blur="blurCB()"><label style="background: {{resourceColor(resource.name)}}"><input type="checkbox" ng-model="resource.selected" ng-disabled="!enabled"> <span>{{resource.name}}</span></label></li></ul><div class="resource-caret" click-anywhere-but-here="resourceListOpen = false" is-active="resourceListOpen" ng-click="resourceListOpen = !resourceListOpen"><span class="caret"></span></div></div></div>'),
- e.put("ui/directive/searchBox/searchBox.html", '<div id="search" class="search-box clearfix" ng-show="showSearch"><div class="input-group input-group-sm search-input-wrap"><input type="text" id="search-input" class="form-control search-input" ng-model="keyword" ng-keydown="handleKeyDown($event)" aria-describedby="basic-addon2"> <span class="input-group-addon search-addon" id="basic-addon2" ng-show="showTip" ng-bind="\'第 \' + curIndex + \' 条,共 \' + resultNum + \' 条\'"></span></div><div class="btn-group btn-group-sm prev-and-next-btn" role="group"><button type="button" class="btn btn-default" ng-click="doSearch(keyword, \'prev\')"><span class="glyphicon glyphicon-chevron-up"></span></button> <button type="button" class="btn btn-default" ng-click="doSearch(keyword, \'next\')"><span class="glyphicon glyphicon-chevron-down"></span></button></div><div class="close-search" ng-click="exitSearch()"><span class="glyphicon glyphicon-remove"></span></div></div>'),
- e.put("ui/directive/searchBtn/searchBtn.html", '<div class="btn-group-vertical" dropdown is-open="isopen"><button type="button" class="btn btn-default search" title="{{ \'search\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="enterSearch()"></button> <button type="button" class="btn btn-default search-caption dropdown-toggle" ng-click="enterSearch()" title="{{ \'search\' | lang:\'ui\' }}"><span class="caption">{{ \'search\' | lang:\'ui\' }}</span> <span class="sr-only">{{ \'search\' | lang:\'ui\' }}</span></button></div>'),
- e.put("ui/directive/selectAll/selectAll.html", '<div class="btn-group-vertical" dropdown is-open="isopen"><button type="button" class="btn btn-default select" title="{{ \'selectall\' | lang:\'ui\' }}" ng-class="{\'active\': isopen}" ng-click="select[\'all\']()"></button> <button type="button" class="btn btn-default select-caption dropdown-toggle" title="{{ \'selectall\' | lang:\'ui\' }}" dropdown-toggle><span class="caption">{{ \'selectall\' | lang:\'ui\' }}</span> <span class="caret"></span> <span class="sr-only">{{ \'selectall\' | lang:\'ui\' }}</span></button><ul class="dropdown-menu" role="menu"><li ng-repeat="item in items"><a href ng-click="select[item]()">{{ \'select\' + item | lang:\'ui\' }}</a></li></ul></div>'),
- e.put("ui/directive/styleOperator/styleOperator.html", '<div class="style-operator"><a ng-click="minder.queryCommandState(\'clearstyle\') === -1 || minder.execCommand(\'clearstyle\')" class="btn-wrap clear-style" ng-disabled="minder.queryCommandState(\'clearstyle\') === -1"><span class="btn-icon clear-style-icon"></span> <span class="btn-label">{{ \'clearstyle\' | lang: \'ui\' }}</span></a><div class="s-btn-group-vertical"><a class="s-btn-wrap" href ng-click="minder.queryCommandState(\'copystyle\') === -1 || minder.execCommand(\'copystyle\')" ng-disabled="minder.queryCommandState(\'copystyle\') === -1"><span class="s-btn-icon copy-style-icon"></span> <span class="s-btn-label">{{ \'copystyle\' | lang: \'ui\' }}</span></a> <a class="s-btn-wrap paste-style-wrap" href ng-click="minder.queryCommandState(\'pastestyle\') === -1 || minder.execCommand(\'pastestyle\')" ng-disabled="minder.queryCommandState(\'pastestyle\') === -1"><span class="s-btn-icon paste-style-icon"></span> <span class="s-btn-label">{{ \'pastestyle\' | lang: \'ui\' }}</span></a></div></div>'),
- e.put("ui/directive/templateList/templateList.html", '<div class="dropdown temp-panel" dropdown on-toggle="toggled(open)"><div class="dropdown-toggle current-temp-item" ng-disabled="minder.queryCommandState(\'template\') === -1" dropdown-toggle><a href class="temp-item {{ minder.queryCommandValue(\'template\') }}" title="{{ minder.queryCommandValue(\'template\') | lang: \'template\' }}"></a> <span class="caret"></span></div><ul class="dropdown-menu temp-list"><li ng-repeat="(key, templateObj) in templateList" class="temp-item-wrap"><a ng-click="minder.execCommand(\'template\', key);" class="temp-item {{key}}" ng-class="{ \'temp-item-selected\' : key == minder.queryCommandValue(\'template\') }" title="{{ key | lang: \'template\' }}"></a></li></ul></div>'),
- e.put("ui/directive/themeList/themeList.html", '<div class="dropdown theme-panel" dropdown><div class="dropdown-toggle theme-item-selected" dropdown-toggle ng-disabled="minder.queryCommandState(\'theme\') === -1"><a href class="theme-item" ng-style="getThemeThumbStyle(minder.queryCommandValue(\'theme\'))" title="{{ minder.queryCommandValue(\'theme\') | lang: \'theme\'; }}">{{ minder.queryCommandValue(\'theme\') | lang: \'theme\'; }}</a> <span class="caret"></span></div><ul class="dropdown-menu theme-list"><li ng-repeat="key in themeKeyList" class="theme-item-wrap"><a ng-click="minder.execCommand(\'theme\', key);" class="theme-item" ng-style="getThemeThumbStyle(key)" title="{{ key | lang: \'theme\'; }}">{{ key | lang: \'theme\'; }}</a></li></ul></div>'),
- e.put("ui/directive/topTab/topTab.html", '<tabset><tab heading="{{ \'idea\' | lang: \'ui/tabs\'; }}" ng-click="toggleTopTab(\'idea\')" select="setCurTab(\'idea\')"><undo-redo editor="editor"></undo-redo><append-node minder="minder"></append-node><arrange minder="minder"></arrange><operation minder="minder"></operation><hyper-link minder="minder"></hyper-link><image-btn minder="minder"></image-btn><note-btn minder="minder"></note-btn><priority-editor minder="minder"></priority-editor><progress-editor minder="minder"></progress-editor><resource-editor minder="minder"></resource-editor></tab><tab heading="{{ \'appearence\' | lang: \'ui/tabs\'; }}" ng-click="toggleTopTab(\'appearance\')" select="setCurTab(\'appearance\')"><template-list minder="minder" class="inline-directive"></template-list><theme-list minder="minder"></theme-list><layout minder="minder" class="inline-directive"></layout><style-operator minder="minder" class="inline-directive"></style-operator><font-operator minder="minder" class="inline-directive"></font-operator></tab><tab heading="{{ \'view\' | lang: \'ui/tabs\'; }}" ng-click="toggleTopTab(\'view\')" select="setCurTab(\'view\')"><expand-level minder="minder"></expand-level><select-all minder="minder"></select-all><search-btn minder="minder"></search-btn></tab></tabset>'),
- e.put("ui/directive/undoRedo/undoRedo.html", '<div class="km-btn-group do-group"><div class="km-btn-item undo" ng-disabled="editor.history.hasUndo() == false" ng-click="editor.history.hasUndo() == false || editor.history.undo();" title="{{ \'undo\' | lang:\'ui\' }}"><i class="km-btn-icon"></i></div><div class="km-btn-item redo" ng-disabled="editor.history.hasRedo() == false" ng-click="editor.history.hasRedo() == false || editor.history.redo()" title="{{ \'redo\' | lang:\'ui\' }}"><i class="km-btn-icon"></i></div></div>'),
- e.put("ui/dialog/hyperlink/hyperlink.tpl.html", '<div class="modal-header"><h3 class="modal-title">链接</h3></div><div class="modal-body"><form><div class="form-group" id="link-url-wrap" ng-class="{true: \'has-success\', false: \'has-error\'}[urlPassed]"><label for="link-url">链接地址:</label><input type="text" class="form-control" ng-model="url" ng-blur="urlPassed = R_URL.test(url)" ng-focus="this.value = url" ng-keydown="shortCut($event)" id="link-url" placeholder="必填:以 http(s):// 或 ftp:// 开头"></div><div class="form-group" ng-class="{\'has-success\' : titlePassed}"><label for="link-title">提示文本:</label><input type="text" class="form-control" ng-model="title" ng-blur="titlePassed = true" id="link-title" placeholder="选填:鼠标在链接上悬停时提示的文本"></div></form></div><div class="modal-footer"><button class="btn btn-primary" ng-click="ok()">确定</button> <button class="btn btn-warning" ng-click="cancel()">取消</button></div>'),
- e.put("ui/dialog/imExportNode/imExportNode.tpl.html", '<div class="modal-header"><h3 class="modal-title">{{ title }}</h3></div><div class="modal-body"><textarea type="text" class="form-control single-input" rows="8" ng-keydown="shortCut($event);" ng-model="value" ng-readonly="type === \'export\'">\n </textarea></div><div class="modal-footer"><button class="btn btn-primary" ng-click="ok()" ng-disabled="type === \'import\' && value == \'\'">OK</button> <button class="btn btn-warning" ng-click="cancel()">Cancel</button></div>'),
- e.put("ui/dialog/image/image.tpl.html", '<div class="modal-header"><h3 class="modal-title">图片</h3></div><div class="modal-body"><tabset><tab heading="图片搜索"><form class="form-inline"><div class="form-group"><label for="search-keyword">关键词:</label><input type="text" class="form-control" ng-model="data.searchKeyword2" id="search-keyword" placeholder="请输入搜索的关键词"></div><button class="btn btn-primary" ng-click="searchImage()">百度一下</button></form><div class="search-result" id="search-result"><ul><li ng-repeat="image in list" id="{{ \'img-item\' + $index }}" ng-class="{\'selected\' : isSelected}" ng-click="selectImage($event)"><img id="{{ \'img-\' + $index }}" ng-src="{{ image.src || \'\' }}" alt="{{ image.title }}" onerror="this.parentNode.removeChild(this)"> <span>{{ image.title }}</span></li></ul></div></tab><tab heading="外链图片"><form><div class="form-group" ng-class="{true: \'has-success\', false: \'has-error\'}[urlPassed]"><label for="image-url">链接地址:</label><input type="text" class="form-control" ng-model="data.url" ng-blur="urlPassed = data.R_URL.test(data.url)" ng-focus="this.value = data.url" ng-keydown="shortCut($event)" id="image-url" placeholder="必填:以 http(s):// 开头"></div><div class="form-group" ng-class="{\'has-success\' : titlePassed}"><label for="image-title">提示文本:</label><input type="text" class="form-control" ng-model="data.title" ng-blur="titlePassed = true" id="image-title" placeholder="选填:鼠标在图片上悬停时提示的文本"></div><div class="form-group"><label for="image-preview">图片预览:</label><img class="image-preview" id="image-preview" ng-src="{{ data.url }}" alt="{{ data.title }}"></div></form></tab><tab heading="上传图片" active="true"><form><div class="form-group"><input type="file" name="upload-image" id="upload-image" class="upload-image" accept=".jpg,.JPG,jpeg,JPEG,.png,.PNG,.gif,.GIF" onchange="angular.element(this).scope().uploadImage()"><label for="upload-image" class="btn btn-primary"><span>选择文件…</span></label></div><div class="form-group" ng-class="{\'has-success\' : titlePassed}"><label for="image-title">提示文本:</label><input type="text" class="form-control" ng-model="data.title" ng-blur="titlePassed = true" id="image-title" placeholder="选填:鼠标在图片上悬停时提示的文本"></div><div class="form-group"><label for="image-preview">图片预览:</label><img class="image-preview" id="image-preview" ng-src="{{ data.url }}" title="{{ data.title }}" alt="{{ data.title }}"></div></form></tab></tabset></div><div class="modal-footer"><button class="btn btn-primary" ng-click="ok()">确定</button> <button class="btn btn-warning" ng-click="cancel()">取消</button></div>')
- }]),
- angular.module("kityminderEditor").service("commandBinder",
- function() {
- return {
- bind: function(e, t, n) {
- e.on("interactchange",
- function() {
- n.commandDisabled = -1 === e.queryCommandState(t),
- n.commandValue = e.queryCommandValue(t),
- n.$apply()
- })
- }
- }
- }),
- angular.module("kityminderEditor").provider("config",
- function() {
- this.config = {
- ctrlPanelMin: 250,
- ctrlPanelWidth: parseInt(window.localStorage.__dev_minder_ctrlPanelWidth) || 250,
- dividerWidth: 3,
- defaultLang: "zh-cn",
- zoom: [10, 20, 30, 50, 80, 100, 120, 150, 200],
- imageUpload: "server/imageUpload.php"
- },
- this.set = function(e, t) {
- var n = Object.keys(this.config),
- i = {};
- for (var r in "object" == typeof e ? i = e: i[e] = t, i) {
- if (!i.hasOwnProperty(r) || -1 === n.indexOf(r)) return console.error("Unsupported config key: ", e, ", please choose in :", n.join(", ")),
- !1;
- this.config[r] = i[r]
- }
- return ! 0
- },
- this.$get = function() {
- var t = this;
- return {
- get: function(e) {
- return 0 === arguments.length ? t.config: t.config.hasOwnProperty(e) ? t.config[e] : (console.warn("Missing config key pair for : ", e), "")
- }
- }
- }
- }),
- angular.module("kityminderEditor").service("lang.zh-cn",
- function() {
- return {
- "zh-cn": {
- template: {
- default:
- "思维导图",
- tianpan: "天盘图",
- structure: "组织结构图",
- filetree: "目录组织图",
- right: "逻辑结构图",
- "fish-bone": "鱼骨头图"
- },
- theme: {
- classic: "脑图经典",
- "classic-compact": "紧凑经典",
- snow: "温柔冷光",
- "snow-compact": "紧凑冷光",
- fish: "鱼骨图",
- wire: "线框",
- "fresh-red": "清新红",
- "fresh-soil": "泥土黄",
- "fresh-green": "文艺绿",
- "fresh-blue": "天空蓝",
- "fresh-purple": "浪漫紫",
- "fresh-pink": "脑残粉",
- "fresh-red-compat": "紧凑红",
- "fresh-soil-compat": "紧凑黄",
- "fresh-green-compat": "紧凑绿",
- "fresh-blue-compat": "紧凑蓝",
- "fresh-purple-compat": "紧凑紫",
- "fresh-pink-compat": "紧凑粉",
- tianpan: "经典天盘",
- "tianpan-compact": "紧凑天盘"
- },
- maintopic: "中心主题",
- topic: "分支主题",
- panels: {
- history: "历史",
- template: "模板",
- theme: "皮肤",
- layout: "布局",
- style: "样式",
- font: "文字",
- color: "颜色",
- background: "背景",
- insert: "插入",
- arrange: "调整",
- nodeop: "当前",
- priority: "优先级",
- progress: "进度",
- resource: "资源",
- note: "备注",
- attachment: "附件",
- word: "文字"
- },
- error_message: {
- title: "哎呀,脑图出错了",
- err_load: "加载脑图失败",
- err_save: "保存脑图失败",
- err_network: "网络错误",
- err_doc_resolve: "文档解析失败",
- err_unknown: "发生了奇怪的错误",
- err_localfile_read: "文件读取错误",
- err_download: "文件下载失败",
- err_remove_share: "取消分享失败",
- err_create_share: "分享失败",
- err_mkdir: "目录创建失败",
- err_ls: "读取目录失败",
- err_share_data: "加载分享内容出错",
- err_share_sync_fail: "分享内容同步失败",
- err_move_file: "文件移动失败",
- err_rename: "重命名失败",
- unknownreason: "可能是外星人篡改了代码...",
- pcs_code: {
- 3 : "不支持此接口",
- 4 : "没有权限执行此操作",
- 5 : "IP未授权",
- 110 : "用户会话已过期,请重新登录",
- 31001 : "数据库查询错误",
- 31002 : "数据库连接错误",
- 31003 : "数据库返回空结果",
- 31021 : "网络错误",
- 31022 : "暂时无法连接服务器",
- 31023 : "输入参数错误",
- 31024 : "app id为空",
- 31025 : "后端存储错误",
- 31041 : "用户的cookie不是合法的百度cookie",
- 31042 : "用户未登陆",
- 31043 : "用户未激活",
- 31044 : "用户未授权",
- 31045 : "用户不存在",
- 31046 : "用户已经存在",
- 31061 : "文件已经存在",
- 31062 : "文件名非法",
- 31063 : "文件父目录不存在",
- 31064 : "无权访问此文件",
- 31065 : "目录已满",
- 31066 : "文件不存在",
- 31067 : "文件处理出错",
- 31068 : "文件创建失败",
- 31069 : "文件拷贝失败",
- 31070 : "文件删除失败",
- 31071 : "不能读取文件元信息",
- 31072 : "文件移动失败",
- 31073 : "文件重命名失败",
- 31079 : "未找到文件MD5,请使用上传API上传整个文件。",
- 31081 : "superfile创建失败",
- 31082 : "superfile 块列表为空",
- 31083 : "superfile 更新失败",
- 31101 : "tag系统内部错误",
- 31102 : "tag参数错误",
- 31103 : "tag系统错误",
- 31110 : "未授权设置此目录配额",
- 31111 : "配额管理只支持两级目录",
- 31112 : "超出配额",
- 31113 : "配额不能超出目录祖先的配额",
- 31114 : "配额不能比子目录配额小",
- 31141 : "请求缩略图服务失败",
- 31201 : "签名错误",
- 31202 : "文件不存在",
- 31203 : "设置acl失败",
- 31204 : "请求acl验证失败",
- 31205 : "获取acl失败",
- 31206 : "acl不存在",
- 31207 : "bucket已存在",
- 31208 : "用户请求错误",
- 31209 : "服务器错误",
- 31210 : "服务器不支持",
- 31211 : "禁止访问",
- 31212 : "服务不可用",
- 31213 : "重试出错",
- 31214 : "上传文件data失败",
- 31215 : "上传文件meta失败",
- 31216 : "下载文件data失败",
- 31217 : "下载文件meta失败",
- 31218 : "容量超出限额",
- 31219 : "请求数超出限额",
- 31220 : "流量超出限额",
- 31298 : "服务器返回值KEY非法",
- 31299 : "服务器返回值KEY不存在"
- }
- },
- ui: {
- shared_file_title: "[分享的] {0} (只读)",
- load_share_for_edit: "正在加载分享的文件...",
- share_sync_success: "分享内容已同步",
- recycle_clear_confirm: "确认清空回收站么?清空后的文件无法恢复。",
- fullscreen_exit_hint: "按 Esc 或 F11 退出全屏",
- error_detail: "详细信息",
- copy_and_feedback: "复制并反馈",
- move_file_confirm: '确定把 "{0}" 移动到 "{1}" 吗?',
- rename: "重命名",
- rename_success: "{0} 重命名成功",
- move_success: "{0} 移动成功到 {1}",
- command: {
- appendsiblingnode: "插入同级主题",
- appendparentnode: "插入上级主题",
- appendchildnode: "插入下级主题",
- removenode: "删除",
- editnode: "编辑",
- arrangeup: "上移",
- arrangedown: "下移",
- resetlayout: "整理布局",
- expandtoleaf: "展开全部节点",
- expandtolevel1: "展开到一级节点",
- expandtolevel2: "展开到二级节点",
- expandtolevel3: "展开到三级节点",
- expandtolevel4: "展开到四级节点",
- expandtolevel5: "展开到五级节点",
- expandtolevel6: "展开到六级节点",
- fullscreen: "全屏",
- outline: "大纲"
- },
- search: "搜索",
- expandtoleaf: "展开",
- back: "返回",
- undo: "撤销 (Ctrl + Z)",
- redo: "重做 (Ctrl + Y)",
- tabs: {
- idea: "思路",
- appearence: "外观",
- view: "视图"
- },
- quickvisit: {
- new: "新建 (Ctrl + Alt + N)",
- save: "保存 (Ctrl + S)",
- share: "分享 (Ctrl + Alt + S)",
- feedback: "反馈问题(F1)",
- editshare: "编辑"
- },
- menu: {
- mainmenutext: "百度脑图",
- newtab: "新建",
- opentab: "打开",
- savetab: "保存",
- sharetab: "分享",
- preferencetab: "设置",
- helptab: "帮助",
- feedbacktab: "反馈",
- recenttab: "最近使用",
- netdisktab: "百度云存储",
- localtab: "本地文件",
- drafttab: "草稿箱",
- downloadtab: "导出到本地",
- createsharetab: "当前脑图",
- managesharetab: "已分享",
- newheader: "新建脑图",
- openheader: "打开",
- saveheader: "保存到",
- draftheader: "草稿箱",
- shareheader: "分享我的脑图",
- downloadheader: "导出到指定格式",
- preferenceheader: "偏好设置",
- helpheader: "帮助",
- feedbackheader: "反馈"
- },
- mydocument: "我的文档",
- emptydir: "目录为空!",
- pickfile: "选择文件...",
- acceptfile: "支持的格式:{0}",
- dropfile: "或将文件拖至此处",
- unsupportedfile: "不支持的文件格式",
- untitleddoc: "未命名文档",
- overrideconfirm: "{0} 已存在,确认覆盖吗?",
- checklogin: "检查登录状态中...",
- loggingin: "正在登录...",
- recent: "最近打开",
- clearrecent: "清空",
- clearrecentconfirm: "确认清空最近文档列表?",
- cleardraft: "清空",
- cleardraftconfirm: "确认清空草稿箱?",
- none_share: "不分享",
- public_share: "公开分享",
- password_share: "私密分享",
- email_share: "邮件邀请",
- url_share: "脑图 URL 地址:",
- sns_share: "社交网络分享:",
- sns_share_text: "“{0}” - 我用百度脑图制作的思维导图,快看看吧!(地址:{1})",
- none_share_description: "不分享当前脑图",
- public_share_description: "创建任何人可见的分享",
- share_button_text: "创建",
- password_share_description: "创建需要密码才可见的分享",
- email_share_description: "创建指定人可见的分享,您还可以允许他们编辑",
- ondev: "敬请期待!",
- create_share_failed: "分享失败:{0}",
- remove_share_failed: "删除失败:{1}",
- copy: "复制",
- copied: "已复制",
- shared_tip: "当前脑图被 {0} 分享,你可以修改之后保存到自己的网盘上或再次分享",
- current_share: "当前脑图",
- manage_share: "我的分享",
- share_remove_action: "不分享该脑图",
- share_view_action: "打开分享地址",
- share_edit_action: "编辑分享的文件",
- login: "登录",
- logout: "注销",
- switchuser: "切换账户",
- userinfo: "个人信息",
- gotonetdisk: "我的网盘",
- requirelogin: '请 <a class="login-button">登录</a> 后使用',
- saveas: "保存为",
- filename: "文件名",
- fileformat: "保存格式",
- save: "保存",
- mkdir: "新建目录",
- recycle: "回收站",
- newdir: "未命名目录",
- bold: "加粗",
- italic: "斜体",
- forecolor: "字体颜色",
- fontfamily: "字体",
- fontsize: "字号",
- layoutstyle: "主题",
- node: "节点操作",
- saveto: "另存为",
- hand: "允许拖拽",
- camera: "定位根节点",
- "zoom-in": "放大(Ctrl+)",
- "zoom-out": "缩小(Ctrl-)",
- markers: "标签",
- resource: "资源",
- help: "帮助",
- preference: "偏好设置",
- expandnode: "展开到叶子",
- collapsenode: "收起到一级节点",
- template: "模板",
- theme: "皮肤",
- clearstyle: "清除样式",
- copystyle: "复制样式",
- pastestyle: "粘贴样式",
- appendsiblingnode: "同级主题",
- appendchildnode: "下级主题",
- arrangeup: "前调",
- arrangedown: "后调",
- editnode: "编辑",
- removenode: "移除",
- priority: "优先级",
- progress: {
- p1: "未开始",
- p2: "完成 1/8",
- p3: "完成 1/4",
- p4: "完成 3/8",
- p5: "完成一半",
- p6: "完成 5/8",
- p7: "完成 3/4",
- p8: "完成 7/8",
- p9: "已完成",
- p0: "清除进度"
- },
- link: "链接",
- image: "图片",
- note: "备注",
- insertlink: "插入链接",
- insertimage: "插入图片",
- insertnote: "插入备注",
- removelink: "移除已有链接",
- removeimage: "移除已有图片",
- removenote: "移除已有备注",
- resetlayout: "整理",
- justnow: "刚刚",
- minutesago: "{0} 分钟前",
- hoursago: "{0} 小时前",
- yesterday: "昨天",
- daysago: "{0} 天前",
- longago: "很久之前",
- redirect: "您正在打开连接 {0},百度脑图不能保证连接的安全性,是否要继续?",
- navigator: "导航器",
- unsavedcontent: "当前文件还没有保存到网盘:\n\n{0}\n\n虽然未保存的数据会缓存在草稿箱,但是清除浏览器缓存会导致草稿箱清除。",
- shortcuts: "快捷键",
- contact: "联系与反馈",
- email: "邮件组",
- qq_group: "QQ 群",
- github_issue: "Github",
- baidu_tieba: "贴吧",
- clipboardunsupported: "您的浏览器不支持剪贴板,请使用快捷键复制",
- load_success: "{0} 加载成功",
- save_success: "{0} 已保存于 {1}",
- autosave_success: "{0} 已自动保存于 {1}",
- selectall: "全选",
- selectrevert: "反选",
- selectsiblings: "选择兄弟节点",
- selectlevel: "选择同级节点",
- selectpath: "选择路径",
- selecttree: "选择子树"
- },
- popupcolor: {
- clearColor: "清空颜色",
- standardColor: "标准颜色",
- themeColor: "主题颜色"
- },
- dialogs: {
- markers: {
- static: {
- lang_input_text: "文本内容:",
- lang_input_url: "链接地址:",
- lang_input_title: "标题:",
- lang_input_target: "是否在新窗口:"
- },
- priority: "优先级",
- none: "无",
- progress: {
- title: "进度",
- notdone: "未完成",
- done1: "完成 1/8",
- done2: "完成 1/4",
- done3: "完成 3/8",
- done4: "完成 1/2",
- done5: "完成 5/8",
- done6: "完成 3/4",
- done7: "完成 7/8",
- done: "已完成"
- }
- },
- help: {},
- hyperlink: {},
- image: {},
- resource: {}
- },
- hyperlink: {
- hyperlink: "链接...",
- unhyperlink: "移除链接"
- },
- image: {
- image: "图片...",
- removeimage: "移除图片"
- },
- marker: {
- marker: "进度/优先级..."
- },
- resource: {
- resource: "资源..."
- }
- }
- }
- }),
- angular.module("kityminderEditor").service("memory",
- function() {
- return {
- get: function(e) {
- var t = window.localStorage.getItem(e);
- return JSON.parse(t)
- },
- set: function(e, t) {
- try {
- return window.localStorage.setItem(e, JSON.stringify(t)),
- !0
- } catch(e) {
- if (function(e) {
- var t = !1;
- if (e) if (e.code) switch (e.code) {
- case 22:
- t = !0;
- break;
- case 1014:
- "NS_ERROR_DOM_QUOTA_REACHED" === e.name && (t = !0)
- } else - 2147024882 === e.number && (t = !0);
- return t
- } (e)) return ! 1
- }
- },
- remove: function(e) {
- var t = window.localStorage.getItem(e);
- return window.localStorage.removeItem(e),
- t
- },
- clear: function() {
- window.localStorage.clear()
- }
- }
- }),
- angular.module("kityminderEditor").service("minder.service",
- function() {
- var t = [];
- return {
- registerEvent: function(e) {
- t.push(e)
- },
- executeCallback: function() {
- t.forEach(function(e) {
- e.apply(this, arguments)
- })
- }
- }
- }),
- angular.module("kityminderEditor").service("resourceService", ["$document",
- function(t) {
- var n = null;
- this.open = function(e) {
- n || (t.bind("click", i), t.bind("keydown", r)),
- n && n !== e && (n.resourceListOpen = !1),
- n = e
- },
- this.close = function(e) {
- n === e && (n = null, t.unbind("click", i), t.unbind("keydown", r))
- };
- var i = function(e) {
- if (n) {
- var t = n.getToggleElement();
- e && t && t[0].contains(e.target) || n.$apply(function() {
- console.log("to close the resourcelist"),
- n.resourceListOpen = !1
- })
- }
- },
- r = function(e) {
- 27 === e.which && (n.focusToggleElement(), i())
- }
- }]),
- angular.module("kityminderEditor").service("revokeDialog", ["$modal", "minder.service",
- function(e, t) {
- return t.registerEvent(function() {
- var t = window.minder,
- n = window.editor,
- i = n.hotbox.getParentFSM();
- t.on("importNodeData",
- function() {
- i.jump("modal", "import-text-modal"),
- e.open({
- animation: !0,
- templateUrl: "ui/dialog/imExportNode/imExportNode.tpl.html",
- controller: "imExportNode.ctrl",
- size: "md",
- resolve: {
- title: function() {
- return "导入节点"
- },
- defaultValue: function() {
- return ""
- },
- type: function() {
- return "import"
- }
- }
- }).result.then(function(e) {
- try {
- t.Text2Children(t.getSelectedNode(), e)
- } catch(e) {
- alert(e)
- }
- i.jump("normal", "import-text-finish"),
- n.receiver.selectAll()
- },
- function() {
- i.jump("normal", "import-text-finish"),
- n.receiver.selectAll()
- })
- }),
- t.on("exportNodeData",
- function() {
- i.jump("modal", "export-text-modal"),
- e.open({
- animation: !0,
- templateUrl: "ui/dialog/imExportNode/imExportNode.tpl.html",
- controller: "imExportNode.ctrl",
- size: "md",
- resolve: {
- title: function() {
- return "导出节点"
- },
- defaultValue: function() {
- var e = t.getSelectedNode();
- return (0, window.kityminder.data.getRegisterProtocol("text").Node2Text)(e)
- },
- type: function() {
- return "export"
- }
- }
- }).result.then(function(e) {
- i.jump("normal", "export-text-finish"),
- n.receiver.selectAll()
- },
- function() {
- i.jump("normal", "export-text-finish"),
- n.receiver.selectAll()
- })
- })
- }),
- {}
- }]),
- angular.module("kityminderEditor").service("server", ["config", "$http",
- function(i, r) {
- return {
- uploadImage: function(e) {
- var t = i.get("imageUpload"),
- n = new FormData;
- return n.append("upload_file", e),
- r.post(t, n, {
- transformRequest: angular.identity,
- headers: {
- "Content-Type": void 0
- }
- })
- }
- }
- }]),
- angular.module("kityminderEditor").service("valueTransfer",
- function() {
- return {}
- }),
- angular.module("kityminderEditor").filter("commandState",
- function() {
- return function(e, t) {
- return e.queryCommandState(t)
- }
- }).filter("commandValue",
- function() {
- return function(e, t) {
- return e.queryCommandValue(t)
- }
- }),
- angular.module("kityminderEditor").filter("lang", ["config", "lang.zh-cn",
- function(r, o) {
- return function(e, t) {
- var n = r.get("defaultLang");
- if (null == o[n]) return "未发现对应语言包,请检查 lang.xxx.service.js!";
- var i = o[n];
- return t.split("/").forEach(function(e, t) {
- i = i[e]
- }),
- i[e] || null
- }
- }]),
- angular.module("kityminderEditor").controller("hyperlink.ctrl", ["$scope", "$modalInstance", "link",
- function(t, n, e) {
- t.R_URL = new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", "i"),
- t.url = e.url || "",
- t.title = e.title || "",
- setTimeout(function() {
- var e = $("#link-url");
- e.focus(),
- e[0].setSelectionRange(0, t.url.length)
- },
- 30),
- t.shortCut = function(e) {
- e.stopPropagation(),
- 13 == e.keyCode ? t.ok() : 27 == e.keyCode && t.cancel()
- },
- t.ok = function() {
- if (t.R_URL.test(t.url)) n.close({
- url: t.url,
- title: t.title
- });
- else {
- t.urlPassed = !1;
- var e = $("#link-url");
- e.focus(),
- e[0].setSelectionRange(0, t.url.length)
- }
- editor.receiver.selectAll()
- },
- t.cancel = function() {
- n.dismiss("cancel"),
- editor.receiver.selectAll()
- }
- }]),
- angular.module("kityminderEditor").controller("imExportNode.ctrl", ["$scope", "$modalInstance", "title", "defaultValue", "type",
- function(r, e, t, n, o) {
- r.title = t,
- r.value = n,
- r.type = o,
- r.ok = function() {
- "" != r.value && (e.close(r.value), editor.receiver.selectAll())
- },
- r.cancel = function() {
- e.dismiss("cancel"),
- editor.receiver.selectAll()
- },
- setTimeout(function() {
- $(".single-input").focus(),
- $(".single-input")[0].setSelectionRange(0, n.length)
- },
- 30),
- r.shortCut = function(e) {
- if (e.stopPropagation(), 27 == e.keyCode && r.cancel(), 8 == e.keyCode && "export" == o && e.preventDefault(), 9 == e.keyCode) {
- e.preventDefault();
- var t = e.target,
- n = function(e) {
- var t = 0;
- if (document.selection) {
- e.focus();
- var n = document.selection.createRange();
- n.moveStart("character", -e.value.length),
- t = n.text.length
- } else(e.selectionStart || "0" == e.selectionStart) && (t = e.selectionStart);
- return t
- } (t),
- i = t.value;
- t.value = i.substr(0, n) + "\t" + i.substr(n),
- function(e, t) {
- if (e.setSelectionRange) e.focus(),
- e.setSelectionRange(t, t);
- else if (e.createTextRange) {
- var n = e.createTextRange();
- n.collapse(!0),
- n.moveEnd("character", t),
- n.moveStart("character", t),
- n.select()
- }
- } (t, n + 1)
- }
- }
- }]),
- angular.module("kityminderEditor").controller("image.ctrl", ["$http", "$scope", "$modalInstance", "image", "server",
- function(i, r, t, e, n) {
- r.data = {
- list: [],
- url: e.url || "",
- title: e.title || "",
- R_URL: /^https?\:\/\/\w+/
- },
- setTimeout(function() {
- var e = $("#image-url");
- e.focus(),
- e[0].setSelectionRange(0, r.data.url.length)
- },
- 300),
- r.searchImage = function() {
- var e, t, n;
- r.list = [],
- (e = r.data.searchKeyword2, t = new Date, n = "http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&queryWord=" + e + "&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word=" + e + "&face=0&istype=2&nc=1&pn=60&rn=60&gsm=3c&" + t.getTime() + "=&callback=JSON_CALLBACK", i.jsonp(n)).success(function(e) {
- if (e && e.data) for (var t = 0; t < e.data.length; t++) e.data[t].objURL && r.list.push({
- title: e.data[t].fromPageTitleEnc,
- src: e.data[t].middleURL,
- url: e.data[t].middleURL
- })
- }).error(function() {})
- },
- r.selectImage = function(e) {
- var t = $("#img-item" + this.$index),
- n = $("#img-" + this.$index);
- t.siblings(".selected").removeClass("selected"),
- t.addClass("selected"),
- r.data.url = n.attr("src"),
- r.data.title = n.attr("alt")
- },
- r.uploadImage = function() {
- var e = $("#upload-image");
- if (e.val()) {
- if (/^.*\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG)$/.test(e.val())) {
- var t = e[0].files[0];
- return n.uploadImage(t).then(function(e) {
- var t = e.data;
- 0 === t.errno && (r.data.url = t.data.url)
- })
- }
- alert("后缀只能是 jpg、gif 及 png")
- }
- },
- r.shortCut = function(e) {
- e.stopPropagation(),
- 13 == e.keyCode ? r.ok() : 27 == e.keyCode && r.cancel()
- },
- r.ok = function() {
- if (r.data.R_URL.test(r.data.url)) t.close({
- url: r.data.url,
- title: r.data.title
- });
- else {
- r.urlPassed = !1;
- var e = $("#image-url");
- e && (e.focus(), e[0].setSelectionRange(0, r.data.url.length))
- }
- editor.receiver.selectAll()
- },
- r.cancel = function() {
- t.dismiss("cancel"),
- editor.receiver.selectAll()
- }
- }]),
- angular.module("kityminderEditor").directive("appendNode", ["commandBinder",
- function(t) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/appendNode/appendNode.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- var r = e.minder;
- t.bind(r, "appendchildnode", e),
- e.execCommand = function(e) {
- var t, n, i;
- r.execCommand(e, "分支主题"),
- t = editor.receiver.element,
- n = editor.fsm,
- i = editor.receiver,
- t.innerText = r.queryCommandValue("text"),
- n.jump("input", "input-request"),
- i.selectAll()
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("arrange", ["commandBinder",
- function(e) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/arrange/arrange.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.minder
- }
- }
- }]),
- angular.module("kityminderEditor").directive("colorPanel",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/colorPanel/colorPanel.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(n) {
- var i = n.minder;
- i.getThemeItems();
- n.$on("colorPicked",
- function(e, t) {
- e.stopPropagation(),
- n.bgColor = t,
- i.execCommand("background", t)
- }),
- n.setDefaultBg = function() {
- var e = i.getSelectedNode(),
- t = i.getNodeStyle(e, "background");
- return "object" == typeof t ? t.toHEX() : t
- },
- n.bgColor = n.setDefaultBg() || "#fff"
- }
- }
- }),
- angular.module("kityminderEditor").directive("expandLevel",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/expandLevel/expandLevel.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.levels = [1, 2, 3, 4, 5, 6]
- }
- }
- }),
- angular.module("kityminderEditor").directive("fontOperator",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/fontOperator/fontOperator.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(n) {
- var i = n.minder;
- i.getThemeItems();
- n.fontSizeList = [10, 12, 16, 18, 24, 32, 48],
- n.fontFamilyList = [{
- name: "宋体",
- val: "宋体,SimSun"
- },
- {
- name: "微软雅黑",
- val: "微软雅黑,Microsoft YaHei"
- },
- {
- name: "楷体",
- val: "楷体,楷体_GB2312,SimKai"
- },
- {
- name: "黑体",
- val: "黑体, SimHei"
- },
- {
- name: "隶书",
- val: "隶书, SimLi"
- },
- {
- name: "Andale Mono",
- val: "andale mono"
- },
- {
- name: "Arial",
- val: "arial,helvetica,sans-serif"
- },
- {
- name: "arialBlack",
- val: "arial black,avant garde"
- },
- {
- name: "Comic Sans Ms",
- val: "comic sans ms"
- },
- {
- name: "Impact",
- val: "impact,chicago"
- },
- {
- name: "Times New Roman",
- val: "times new roman"
- },
- {
- name: "Sans-Serif",
- val: "sans-serif"
- }],
- n.$on("colorPicked",
- function(e, t) {
- e.stopPropagation(),
- n.foreColor = t,
- i.execCommand("forecolor", t)
- }),
- n.setDefaultColor = function() {
- var e = i.getSelectedNode(),
- t = i.getNodeStyle(e, "color");
- return "object" == typeof t ? t.toHEX() : t
- },
- n.foreColor = n.setDefaultColor() || "#000",
- n.getFontfamilyName = function(i) {
- var r = "";
- return n.fontFamilyList.forEach(function(e, t, n) {
- if (e.val === i) return r = e.name,
- ""
- }),
- r
- }
- }
- }
- }),
- angular.module("kityminderEditor").directive("hyperLink", ["$modal",
- function(n) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/hyperLink/hyperLink.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- var t = e.minder;
- e.addHyperlink = function() {
- var e = t.queryCommandValue("HyperLink");
- n.open({
- animation: !0,
- templateUrl: "ui/dialog/hyperlink/hyperlink.tpl.html",
- controller: "hyperlink.ctrl",
- size: "md",
- resolve: {
- link: function() {
- return e
- }
- }
- }).result.then(function(e) {
- t.execCommand("HyperLink", e.url, e.title || "")
- })
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("imageBtn", ["$modal",
- function(n) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/imageBtn/imageBtn.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- var t = e.minder;
- e.addImage = function() {
- var e = t.queryCommandValue("image");
- n.open({
- animation: !0,
- templateUrl: "ui/dialog/image/image.tpl.html",
- controller: "image.ctrl",
- size: "md",
- resolve: {
- image: function() {
- return e
- }
- }
- }).result.then(function(e) {
- t.execCommand("image", e.url, e.title || "")
- })
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("kityminderEditor", ["config", "minder.service", "revokeDialog",
- function(a, l, e) {
- return {
- restrict: "EA",
- templateUrl: "ui/directive/kityminderEditor/kityminderEditor.html",
- replace: !0,
- scope: {
- onInit: "&"
- },
- link: function(i, e, t) {
- var r = e.children(".minder-editor")[0];
- function o(e, t) {
- i.onInit({
- editor: e,
- minder: t
- }),
- l.executeCallback()
- }
- if ("undefined" != typeof seajs) seajs.config({
- base: "./src"
- }),
- define("demo",
- function(e) {
- var t = e("editor"),
- n = window.editor = new t(r);
- window.localStorage.__dev_minder_content && n.minder.importJson(JSON.parse(window.localStorage.__dev_minder_content)),
- n.minder.on("contentchange",
- function() {
- window.localStorage.__dev_minder_content = JSON.stringify(n.minder.exportJson())
- }),
- window.minder = window.km = n.minder,
- i.editor = n,
- i.minder = minder,
- i.config = a.get(),
- i.$apply(),
- o(n, minder)
- }),
- seajs.use("demo");
- else if (window.kityminder && window.kityminder.Editor) {
- var n = new kityminder.Editor(r);
- window.editor = i.editor = n,
- window.minder = i.minder = n.minder,
- i.config = a.get(),
- o(n, n.minder)
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("kityminderViewer", ["config", "minder.service",
- function(e, l) {
- return {
- restrict: "EA",
- templateUrl: "ui/directive/kityminderViewer/kityminderViewer.html",
- replace: !0,
- scope: {
- onInit: "&"
- },
- link: function(e, t, n) {
- var i, r, o = t.children(".minder-viewer")[0];
- if (window.kityminder && window.kityminder.Editor) {
- var a = new kityminder.Editor(o);
- window.editor = e.editor = a,
- window.minder = e.minder = a.minder,
- r = (i = a).minder,
- e.onInit({
- editor: i,
- minder: r
- }),
- l.executeCallback()
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("layout",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/layout/layout.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {}
- }
- }),
- angular.module("kityminderEditor").directive("navigator", ["memory", "config",
- function(g, f) {
- return {
- restrict: "A",
- templateUrl: "ui/directive/navigator/navigator.html",
- scope: {
- minder: "="
- },
- link: function(n) {
- function e() {
- minder.on("layout layoutallfinish", m),
- minder.on("viewchange", p)
- }
- function t() {
- minder.off("layout layoutallfinish", m),
- minder.off("viewchange", p)
- }
- minder.setDefaultOptions({
- zoom: f.get("zoom")
- }),
- n.isNavOpen = !g.get("navigator-hidden"),
- n.getZoomRadio = function(e) {
- var t = minder.getOption("zoom"),
- n = t[0];
- return 1 - (e - n) / (t[t.length - 1] - n)
- },
- n.getHeight = function(e) {
- var t = $(".zoom-pan").height();
- return n.getZoomRadio(e) * t
- },
- n.zoom = 100,
- minder.on("zoom",
- function(e) {
- n.zoom = e.zoom
- }),
- n.toggleNavOpen = function() {
- n.isNavOpen = !n.isNavOpen,
- g.set("navigator-hidden", !n.isNavOpen),
- n.isNavOpen ? (e(), m(), p()) : t()
- },
- setTimeout(function() {
- n.isNavOpen ? (e(), m(), p()) : t()
- },
- 0);
- var i = $(".nav-previewer"),
- r = new kity.Paper(i[0]),
- o = r.put(new kity.Path),
- a = r.put(new kity.Path),
- l = r.put(new kity.Rect(100, 100).stroke("red", "1%")),
- s = new kity.Box,
- c = new kity.Box,
- d = u(minder.getTheme());
- function u(e) {
- switch (e) {
- case "tianpan":
- case "tianpan-compact":
- return function(e, t, n, i, r) {
- var o = i >> 1;
- e.push("M", t, n + o, "a", o, o, 0, 1, 1, 0, .01, "z")
- };
- default:
- return function(e, t, n, i, r) {
- e.push("M", t, n, "h", i, "v", r, "h", -i, "z")
- }
- }
- }
- function m() {
- var e = minder.getRenderContainer().getBoundaryBox();
- s = e;
- r.setViewBox(e.x - 30 - .5, e.y - 30 - .5, e.width + 60 + 1, e.height + 60 + 1);
- var n = [],
- i = [];
- minder.getRoot().traverse(function(e) {
- var t = e.getLayoutBox();
- d(n, t.x, t.y, t.width, t.height),
- e.getConnection() && e.parent && e.parent.isExpanded() && i.push(e.getConnection().getPathData())
- }),
- r.setStyle("background", minder.getStyle("background")),
- n.length ? o.fill(minder.getStyle("root-background")).setPathData(n) : o.setPathData(null),
- i.length ? a.stroke(minder.getStyle("connect-color"), "0.5%").setPathData(i) : a.setPathData(null),
- p()
- }
- function p() {
- c = minder.getViewDragger().getView(),
- l.setBox(c.intersect(s))
- }
- minder.on("themechange",
- function(e) {
- d = u(e.theme)
- }),
- function() {
- function t(e, t) {
- var n = c;
- e.x = -e.x,
- e.y = -e.y;
- var i = minder.getPaper().getViewPortMatrix();
- n = i.transformBox(n);
- var r = e.offset(n.width / 2, n.height / 2);
- minder.getViewDragger().moveTo(r, t)
- }
- var n = !1;
- r.on("mousedown",
- function(e) {
- n = !0,
- t(e.getPosition("top"), 200),
- i.addClass("grab")
- }),
- r.on("mousemove",
- function(e) {
- n && t(e.getPosition("top"))
- }),
- $(window).on("mouseup",
- function() {
- n = !1,
- i.removeClass("grab")
- })
- } ()
- }
- }
- }]),
- angular.module("kityminderEditor").directive("noteBtn", ["valueTransfer",
- function(t) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/noteBtn/noteBtn.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.minder;
- e.addNote = function() {
- t.noteEditorOpen = !0
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("noteEditor", ["valueTransfer",
- function(a) {
- return {
- restrict: "A",
- templateUrl: "ui/directive/noteEditor/noteEditor.html",
- scope: {
- minder: "="
- },
- replace: !0,
- controller: ["$scope",
- function(n) {
- var i, r = n.minder,
- o = !1;
- n.codemirrorLoaded = function(e) {
- i = n.cmEditor = e,
- e.setSize("100%", "100%")
- },
- n.$watch("noteContent",
- function(e) {
- var t = -1 != r.queryCommandState("note");
- e && t && !o && r.execCommand("note", e),
- setTimeout(function() {
- i.refresh()
- })
- });
- n.$watch(function() {
- return a.noteEditorOpen
- },
- function(e, t) {
- e && setTimeout(function() {
- i.refresh(),
- i.focus()
- }),
- n.noteEditorOpen = a.noteEditorOpen
- },
- !0),
- n.closeNoteEditor = function() {
- a.noteEditorOpen = !1,
- editor.receiver.selectAll()
- },
- r.on("interactchange",
- function() {
- var e = n.noteEnabled = -1 != r.queryCommandState("note"),
- t = r.queryCommandValue("note") || "";
- e && (n.noteContent = t),
- o = !0,
- n.$apply(),
- o = !1
- })
- }]
- }
- }]),
- angular.module("kityminderEditor").directive("notePreviewer", ["$sce", "valueTransfer",
- function(v, e) {
- return {
- restrict: "A",
- templateUrl: "ui/directive/notePreviewer/notePreviewer.html",
- link: function(m, e) {
- var t, n = m.minder,
- p = e.parent(),
- g = e.children();
- m.showNotePreviewer = !1,
- marked.setOptions({
- gfm: !0,
- tables: !0,
- breaks: !0,
- pedantic: !1,
- sanitize: !0,
- smartLists: !0,
- smartypants: !1
- }),
- n.on("shownoterequest",
- function(e) {
- t = setTimeout(function() { !
- function(e, t) {
- var n = e.getRenderer("NoteIconRenderer").getRenderShape().getRenderBox("screen"),
- i = e.getData("note");
- g[0].scrollTop = 0;
- var r = marked(i);
- t && (r = r.replace(new RegExp("(" + t + ")", "ig"), '<span class="highlight">$1</span>'));
- m.noteContent = v.trustAsHtml(r),
- m.$apply();
- var o = $(p[0]).width(),
- a = $(p[0]).height(),
- l = $(g).outerWidth(),
- s = $(g).outerHeight(),
- c = n.cx - l / 2 - p[0].offsetLeft,
- d = n.bottom + 10 - p[0].offsetTop;
- c < 0 && (c = 10);
- o < c + l && (c = n.left - l - 10 - p[0].offsetLeft);
- a < d + s && (d = n.top - s - 10 - p[0].offsetTop);
- m.previewerStyle = {
- left: Math.round(c) + "px",
- top: Math.round(d) + "px"
- },
- m.showNotePreviewer = !0;
- var u = g[0].querySelector(".highlight");
- u && u.scrollIntoView();
- f = !0,
- m.$apply()
- } (e.node, e.keyword)
- },
- 300)
- }),
- n.on("hidenoterequest",
- function() {
- clearTimeout(t),
- m.showNotePreviewer = !1
- });
- var f = !1;
- $(document).on("mousedown mousewheel DOMMouseScroll",
- function() {
- f && (m.showNotePreviewer = !1, m.$apply())
- }),
- e.on("mousedown mousewheel DOMMouseScroll",
- function(e) {
- e.stopPropagation()
- })
- }
- }
- }]),
- angular.module("kityminderEditor").directive("operation",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/operation/operation.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.editNode = function() {
- var e = editor.receiver.element,
- t = editor.fsm,
- n = editor.receiver;
- e.innerText = minder.queryCommandValue("text"),
- t.jump("input", "input-request"),
- n.selectAll()
- }
- }
- }
- }),
- angular.module("kityminderEditor").directive("priorityEditor", ["commandBinder",
- function(r) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/priorityEditor/priorityEditor.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- for (var t = e.minder,
- n = [], i = 0; i < 10; i++) n.push(i);
- r.bind(t, "priority", e),
- e.priorities = n,
- e.getPriorityTitle = function(e) {
- switch (e) {
- case 0:
- return "移除优先级";
- default:
- return "优先级" + e
- }
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("progressEditor", ["commandBinder",
- function(r) {
- return {
- restrict: "E",
- templateUrl: "ui/directive/progressEditor/progressEditor.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- for (var t = e.minder,
- n = [], i = 0; i < 10; i++) n.push(i);
- r.bind(t, "progress", e),
- e.progresses = n,
- e.getProgressTitle = function(e) {
- switch (e) {
- case 0:
- return "移除进度";
- case 1:
- return "未开始";
- case 9:
- return "全部完成";
- default:
- return "完成" + (e - 1) + "/8"
- }
- }
- }
- }
- }]),
- angular.module("kityminderEditor").directive("resourceEditor",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/resourceEditor/resourceEditor.html",
- scope: {
- minder: "="
- },
- replace: !0,
- controller: ["$scope",
- function(n) {
- var i = n.minder,
- r = !1;
- i.on("interactchange",
- function() {
- var t = (n.enabled = -1 != i.queryCommandState("resource")) ? i.queryCommandValue("resource") : [],
- e = i.getUsedResource().map(function(e) {
- return {
- name: e,
- selected: -1 < t.indexOf(e)
- }
- });
- n.used = e,
- r = !0,
- n.$apply(),
- r = !1
- }),
- n.$watch("used",
- function(e) {
- if ( - 1 != i.queryCommandState("resource") && e) {
- var t = e.filter(function(e) {
- return e.selected
- }).map(function(e) {
- return e.name
- });
- if (r) return;
- i.execCommand("resource", t)
- }
- },
- !0),
- n.resourceColor = function(e) {
- return i.getResourceColor(e).toHEX()
- },
- n.addResource = function(e) {
- var t = i.queryCommandValue("resource");
- e && /\S/.test(e) && ( - 1 == t.indexOf(e) && n.used.push({
- name: e,
- selected: !0
- }), n.newResourceName = null)
- }
- }]
- }
- }).directive("clickAnywhereButHere", ["$document",
- function(o) {
- return {
- link: function(i, e, r) {
- var n = function(e) {
- var t = 0 < $("#resource-dropdown").has(e.target).length,
- n = $("#resource-dropdown") == e.target;
- t || n || i.$apply(r.clickAnywhereButHere)
- };
- i.$watch(r.isActive,
- function(e, t) {
- e !== t && 1 == e ? o.bind("click", n) : e !== t && 0 == e && o.unbind("click", n)
- })
- }
- }
- }]),
- angular.module("kityminderEditor").directive("searchBox",
- function() {
- return {
- restrict: "A",
- templateUrl: "ui/directive/searchBox/searchBox.html",
- scope: {
- minder: "="
- },
- replace: !0,
- controller: ["$scope",
- function(a) {
- var l = a.minder,
- e = window.editor;
- function n() {
- $("#search-input").blur(),
- a.showSearch = !1,
- l.fire("hidenoterequest"),
- e.receiver.selectAll()
- }
- function t() {
- a.showSearch = !0,
- setTimeout(function() {
- $("#search-input").focus()
- },
- 10),
- a.keyword && $("#search-input")[0].setSelectionRange(0, a.keyword.length)
- }
- a.handleKeyDown = function(e) {
- if (13 == e.keyCode) {
- var t = e.shiftKey ? "prev": "next";
- d(a.keyword, t)
- }
- 27 == e.keyCode && n()
- },
- a.doSearch = d,
- a.exitSearch = n,
- a.showTip = !1,
- a.showSearch = !1,
- $("body").on("keydown",
- function(e) {
- 70 != e.keyCode || !e.ctrlKey && !e.metaKey || e.shiftKey || (t(), a.$apply(), e.preventDefault())
- }),
- l.on("searchNode",
- function() {
- t()
- });
- var s = [],
- c = [];
- function i() {
- s = [],
- l.getRoot().traverse(function(e) {
- s.push(e)
- })
- }
- function d(e, t) {
- if (a.showTip = !1, l.fire("hidenoterequest"), e && /\S/.exec(e)) {
- a.showTip = !0,
- a.curIndex = 0,
- a.resultNum = 0,
- e = e.toLowerCase();
- var n, i, r = d.lastKeyword != e;
- if (d.lastKeyword = e, r &&
- function(e) {
- c = [];
- for (var t = 0; t < s.length; t++) {
- var n = s[t]; - 1 != n.getText().toLowerCase().indexOf(e) && c.push({
- node: n
- });
- var i = n.getData("note");
- i && -1 != i.toLowerCase().indexOf(e) && c.push({
- node: n,
- keyword: e
- })
- }
- } (e), a.resultNum = c.length, c.length) {
- var o = r ? 0 : ("next" === t ? d.lastIndex + 1 : d.lastIndex - 1) || 0;
- o = (c.length + o) % c.length,
- n = c[o].node,
- i = c[o].keyword,
- l.execCommand("camera", n, 50),
- setTimeout(function() {
- l.select(n, !0),
- n.isExpanded() || l.execCommand("expand", !0),
- i && l.fire("shownoterequest", {
- node: n,
- keyword: i
- })
- },
- 60),
- d.lastIndex = o,
- a.curIndex = o + 1
- }
- } else $("#search-input").focus()
- }
- l.on("contentchange", i),
- i()
- }]
- }
- }),
- angular.module("kityminderEditor").directive("searchBtn",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/searchBtn/searchBtn.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.enterSearch = function() {
- minder.fire("searchNode")
- }
- }
- }
- }),
- angular.module("kityminderEditor").directive("selectAll",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/selectAll/selectAll.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- var i = e.minder;
- e.items = ["revert", "siblings", "level", "path", "tree"],
- e.select = {
- all: function() {
- var t = [];
- i.getRoot().traverse(function(e) {
- t.push(e)
- }),
- i.select(t, !0),
- i.fire("receiverfocus")
- },
- revert: function() {
- var t = i.getSelectedNodes(),
- n = [];
- i.getRoot().traverse(function(e) { - 1 == t.indexOf(e) && n.push(e)
- }),
- i.select(n, !0),
- i.fire("receiverfocus")
- },
- siblings: function() {
- var e = i.getSelectedNodes(),
- t = [];
- e.forEach(function(e) {
- e.parent && e.parent.children.forEach(function(e) { - 1 == t.indexOf(e) && t.push(e)
- })
- }),
- i.select(t, !0),
- i.fire("receiverfocus")
- },
- level: function() {
- var t = i.getSelectedNodes().map(function(e) {
- return e.getLevel()
- }),
- n = [];
- i.getRoot().traverse(function(e) { - 1 != t.indexOf(e.getLevel()) && n.push(e)
- }),
- i.select(n, !0),
- i.fire("receiverfocus")
- },
- path: function() {
- var e = i.getSelectedNodes(),
- t = [];
- e.forEach(function(e) {
- for (; e && -1 == t.indexOf(e);) t.push(e),
- e = e.parent
- }),
- i.select(t, !0),
- i.fire("receiverfocus")
- },
- tree: function() {
- var e = i.getSelectedNodes(),
- t = [];
- e.forEach(function(e) {
- e.traverse(function(e) { - 1 == t.indexOf(e) && t.push(e)
- })
- }),
- i.select(t, !0),
- i.fire("receiverfocus")
- }
- }
- }
- }
- }),
- angular.module("kityminderEditor").directive("styleOperator",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/styleOperator/styleOperator.html",
- scope: {
- minder: "="
- },
- replace: !0
- }
- }),
- angular.module("kityminderEditor").directive("templateList",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/templateList/templateList.html",
- scope: {
- minder: "="
- },
- replace: !0,
- link: function(e) {
- e.templateList = kityminder.Minder.getTemplateList()
- }
- }
- }),
- angular.module("kityminderEditor").directive("themeList",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/themeList/themeList.html",
- replace: !0,
- link: function(e) {
- var i = kityminder.Minder.getThemeList();
- e.getThemeThumbStyle = function(e) {
- var t = i[e];
- if (t) {
- var n = {
- color: t["root-color"],
- "border-radius": t["root-radius"] / 2
- };
- return t["root-background"] && (n.background = t["root-background"].toString()),
- n
- }
- },
- e.themeKeyList = ["classic", "classic-compact", "fresh-blue", "fresh-blue-compat", "fresh-green", "fresh-green-compat", "fresh-pink", "fresh-pink-compat", "fresh-purple", "fresh-purple-compat", "fresh-red", "fresh-red-compat", "fresh-soil", "fresh-soil-compat", "snow", "snow-compact", "tianpan", "tianpan-compact", "fish", "wire"]
- }
- }
- }),
- angular.module("kityminderEditor").directive("topTab",
- function() {
- return {
- restrict: "A",
- templateUrl: "ui/directive/topTab/topTab.html",
- scope: {
- minder: "=topTab",
- editor: "="
- },
- link: function(e) {
- var r = !1,
- o = !0,
- a = !0;
- e.setCurTab = function(e) {
- setTimeout(function() {
- r = !0,
- "idea" != e && (o = !1)
- })
- },
- e.toggleTopTab = function() {
- setTimeout(function() {
- var e, t, n, i;
- r && !o || (o = !1, a ? (n = $(".tab-content"), i = $(".minder-editor"), n.animate({
- height: 0,
- display: "none"
- }), i.animate({
- top: "32px"
- })) : (e = $(".tab-content"), t = $(".minder-editor"), e.animate({
- height: "60px",
- display: "block"
- }), t.animate({
- top: "92px"
- })), a = !a),
- r = !1
- })
- }
- }
- }
- }),
- angular.module("kityminderEditor").directive("undoRedo",
- function() {
- return {
- restrict: "E",
- templateUrl: "ui/directive/undoRedo/undoRedo.html",
- scope: {
- editor: "="
- },
- replace: !0,
- link: function(e) {}
- }
- }),
- e = "expose-editor",
- d.r([t[e]])
- } ();
|