From f3c7e1fe62378f44f6baa91c24310051317d18d7 Mon Sep 17 00:00:00 2001 From: shaoying Date: Mon, 22 Jun 2020 20:32:15 +0800 Subject: [PATCH] opt wiki --- frame.js | 10 ++- lib/misc.js | 2 +- pane/Search.css | 1 - plugin/local/code/inner.css | 3 + plugin/local/wiki/data.js | 144 ++++++++++++++++-------------------- plugin/local/wiki/feel.js | 61 ++++++++++----- proto.js | 3 +- 7 files changed, 119 insertions(+), 105 deletions(-) diff --git a/frame.js b/frame.js index 643b5e2e..14fd71dd 100644 --- a/frame.js +++ b/frame.js @@ -223,7 +223,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met if (silent) { typeof cb == "function" && cb(msg); return } // 添加组件 - var display = (msg.Option("_display")||meta.feature.display||"table.js") + var display = (msg.Option("_plugin")||msg.Option("_display")||meta.feature.plugin||meta.feature.display||"table.js") display.indexOf("/") == 0 || (display = "/plugin/"+display) var table = Volcanos(display, { _help: display, _follow: can._follow+"."+meta.name+"."+display, @@ -263,11 +263,14 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met action && (action.innerHTML = ""), can.onaction && can.core.List(list||can.onaction.list, function(item) { item === ""? /*空白*/ can.page.Append(can, action, [{view: "item space"}]): typeof item == "string"? /*按键*/ can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) { - var cb = can.onaction[item] || can.onkeymap && can.onkeymap._remote + var cb = can.onaction[item] || can.onaction["_engine"] || can.onkeymap && can.onkeymap._remote cb? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true) }}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), name: item[0], onchange: function(event) { + var which = item[event.target.selectedIndex+1] + var cb = can.onaction[which] + cb && cb(event, can, which) var cb = can.onaction[item[0]] - cb && cb(event, can, item[0], item[event.target.selectedIndex+1]) + cb && cb(event, can, item[0], which) }}): item.input? /*文本*/ can.page.Append(can, action, [{view: "item", list: [{type: "input", name: item.input[0], onkeydown: function(event) { item.input[1](event, can) }}] }]): typeof item == "object" && /*其它*/ can.page.Append(can, action, [item]) @@ -406,6 +409,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met }) }, } }) + return table }, board: function(can, target, type, msg) { msg.result && can.page.AppendBoard(can, target, can.page.Display(msg.Result())) diff --git a/lib/misc.js b/lib/misc.js index bcbbb0b8..201b5352 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -64,7 +64,7 @@ var misc = Volcanos("misc", {help: "工具模块", return msg[key] = value, key }) - msg._hand = true, can.misc.POST(can, msg, can.Conf("iceberg")+(msg.names||dataset.names||event.names||"").toLowerCase(), option, function(msg) { + msg._hand = true, can.misc.POST(can, msg, can.Conf("iceberg")+(msg.names||dataset.names||event.names||"").toLowerCase()+"?="+event._pane, option, function(msg) { typeof cb == "function" && cb(msg) }), delete(event.msg) }), diff --git a/pane/Search.css b/pane/Search.css index e0b76fd0..fbccddf6 100644 --- a/pane/Search.css +++ b/pane/Search.css @@ -6,7 +6,6 @@ fieldset.Search { background:black; } fieldset.Search div.output div.content { - max-height:400px; max-width:1000px; overflow:auto; } diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 7f272c86..9085259a 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -16,6 +16,9 @@ fieldset.editor>div.action>div.file.select { fieldset.editor>div.output>div.project { max-width:120px; overflow:auto; } +fieldset.editor>div.output>div.project div.item { + cursor:pointer; +} fieldset.editor>div.output>div.profile { position:absolute; right:0; width:80px; overflow:auto; diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js index 72731fa7..07958d04 100644 --- a/plugin/local/wiki/data.js +++ b/plugin/local/wiki/data.js @@ -1,23 +1,19 @@ -Volcanos("onimport", {help: "导入数据", list: [], - init: function(can, msg, cb, output, action, option) {output.innerHTML = ""; - can.table = can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) { - can.Export(event, value, key) - }, function(event, value, key, index, tr, td) { - can.user.carte(event, shy("上下文菜单", can.ondetail, can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd]; - var sub = can.Event(event); - msg.append.forEach(function(key) {sub.Option(key, msg[key][index].trim())}) - - typeof cb == "function"? cb(event, can, msg, index, key, cmd, td, tr): - (cb = can.onchoice[cmd], typeof cb == "function")? cb(event, can, msg, index, key, cmd, td, tr): - (cb = can.onaction[cmd], typeof cb == "function")? cb(event, can, msg, index, key, cmd, td, tr): - can.run(event, ["action", typeof cb == "string"? cb: cmd, key, value.trim(), msg.Ids(index)], function(msg) { - can.user.toast(msg.Result()) - }, true) - })) - }); +Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) { + can._target.innerHTML = "", can.ui = can.page.Append(can, can._target, [ + {view: "content"}, {view: "display"}, + ]) + can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) { + return {text: [value, "td"], oncontextmenu: function(event) { + can.onappend.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) { + var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line) + }) + }, ondblclick: function(event) { + can.page.Modify(can, event.target, {contenteditable: true}) + }} + }) }, }) -Volcanos("onfigure", {help: "组件菜单", list: ["保存", "求和"], +Volcanos("onfigure", {help: "组件菜单", list: [], "求和": function(event, can, res, td, index) { res[index] = parseInt(td.innerText) + (res[index]||0); }, @@ -37,111 +33,97 @@ Volcanos("onfigure", {help: "组件菜单", list: ["保存", "求和"], }, }) Volcanos("onaction", {help: "组件菜单", list: ["保存", ["mode", "正常", "块选", "反选", "多选", "拖动", "编辑"], "求和", "最大", "最小", "平均"], - "保存": function(event, can, msg, cmd, target) { - can.run(event, ["action", cmd, can.Option("path"), can.Export(event, "", "file")], function(msg) { + _engine: function(event, can, cmd) { + var mul = "tr" + (can.Action("mode") == "正常"? "": ".select") + var method = can.onfigure[cmd] + var res = {} + + + can.page.Select(can, can.ui.content, mul, function(tr, nrow, rows) { + (mul != "tr" || nrow > 0) && can.page.Select(can, tr, "td", function(td, ncol, cols) { + method && method(event, can, res, td, ncol, cols, rows, nrow) + }) + }) + can.page.Append(can, can.ui.display, [{type: "table", list: [{type: "tr", list: can.core.Item(res, function(key, value) { + return {text: [value, "td"]} + }).concat([{text: [cmd, "td"]}]) }] }]) + }, + + "保存": function(event, can, cmd) { + can.run(event, ["action", cmd, can.Option("path"), can.onexport.file(can)], function(msg) { can.user.toast("保存成功") }, true) }, - "正常": function(event, can, msg, cmd, target) { + "正常": function(event, can, cmd) { cmd && can.Action("mode", cmd) - can.page.Select(can, can.table, "tr", function(item) { + can.page.Select(can, can.ui.content, "tr", function(item) { + can.page.ClassList.del(can, item, "over") + can.page.ClassList.del(can, item, "select") item.setAttribute("contenteditable", false) item.setAttribute("draggable", false) item.onmouseenter = null item.onclick = null }) }, - "块选": function(event, can, msg, cmd, target) { + "块选": function(event, can, cmd) { cmd && can.Action("mode", cmd) - can.page.Select(can, can.table, "tr", function(item) { + can.page.Select(can, can.ui.content, "tr", function(item) { item.onmouseenter = function() { can.page.ClassList.add(can, item, "select") } }) }, - "反选": function(event, can, msg, cmd, target) { + "反选": function(event, can, cmd) { cmd && can.Action("mode", cmd) - can.page.Select(can, can.table, "tr", function(item) { + can.page.Select(can, can.ui.content, "tr", function(item) { item.onmouseenter = function() { can.page.ClassList.del(can, item, "select") } }) }, - "多选": function(event, can, msg, cmd, target) { + "多选": function(event, can, cmd) { cmd && can.Action("mode", cmd) - can.page.Select(can, can.table, "tr", function(item) { + can.page.Select(can, can.ui.content, "tr", function(item) { item.onclick = function() { can.page.ClassList.neg(can, item, "select") } }) }, - "拖动": function(event, can, msg, cmd, target) { - can.onaction["正常"](event, can, msg, cmd, target) - can.page.Select(can, can.table, "tr", function(item) { + "拖动": function(event, can, cmd) { + can.onaction["正常"](event, can, cmd) + can.page.Select(can, can.ui.content, "tr", function(item) { item.setAttribute("draggable", true) - item.ondragstart = function(event) {can.drag = item} - item.ondragover = function(event) { - event.preventDefault(), - can.page.ClassList.add(can, item, "over")} - item.ondragleave = function(event) { - can.page.ClassList.del(can, item, "over") - } - item.ondrop = function(event) {event.preventDefault() - can.table.insertBefore(can.drag, item) + item.ondragstart = function(event) { can.drag = item } + item.ondragover = function(event) { event.preventDefault(), can.page.ClassList.add(can, item, "over")} + item.ondragleave = function(event) { can.page.ClassList.del(can, item, "over") } + item.ondrop = function(event) { event.preventDefault() + can.page.Select(can, can.ui.content, "table", function(table) { + table.insertBefore(can.drag, item) + }) } }) }, - "编辑": function(event, can, msg, cmd, target) { + "编辑": function(event, can, cmd) { cmd && can.Action("mode", cmd) - can.page.Select(can, can.table, "tr", function(item) { + can.page.Select(can, can.ui.content, "tr", function(item) { item.setAttribute("contenteditable", true) }) }, - - show: function(event, can, msg, cmd, target) { - var res = {}; - var method = can.onfigure[cmd]; - var mul = "tr" + (can.Action("mode") == "正常"? "": ".select"); - - - can.page.Select(can, can.table, mul, function(tr, nrow, rows) { - (mul != "tr" || nrow > 0) && can.page.Select(can, tr, "td", function(td, ncol, cols) { - method && method(event, can, res, td, ncol, cols, rows, nrow) - }) - }); - can.page.Append(can, can.target, [{type: "table", list: [{type: "tr", list: can.core.Item(res, function(key, value) { - return {text: [value, "td"]} - }).concat([{text: [cmd, "td"]}])}]}]); - }, - "求和": function(event, can, msg, cmd, target) { - can.onaction.show(event, can, msg, cmd, target) - }, - "最大": function(event, can, msg, cmd, target) { - can.onaction.show(event, can, msg, cmd, target) - }, - "最小": function(event, can, msg, cmd, target) { - can.onaction.show(event, can, msg, cmd, target) - }, - "平均": function(event, can, msg, cmd, target) { - can.onaction.show(event, can, msg, cmd, target) - }, }) -Volcanos("onchoice", {help: "组件交互", list: ["保存", "块选", "反选", "求和"]}) -Volcanos("ondetail", {help: "组件详情", list: ["复制", "块选", "反选", "编辑", "删除"], - "复制": function(event, can, msg, index, key, cmd, td, tr) { - var end = can.page.Append(can, can.table, [{type: "tr", list: can.page.Select(can, tr, "td", function(item) { - return {text: [item.innerHTML, "td"]} +Volcanos("ondetail", {help: "组件详情", list: ["复制", "删除"], + "复制": function(event, can, cmd, value, key, index, line) { + var end = can.page.Append(can, can.table, [{type: "tr", list: can.core.List(can._msg.append, function(key) { + return {text: [line[key], "td"]} })}]).tr - can.table.insertBefore(end, tr) + can.table.insertBefore(end, event.target.parentNode) }, - "删除": function(event, can, msg, index, key, cmd, td, tr) { - can.page.Remove(can, tr) + "删除": function(event, can, cmd) { + can.page.Remove(can, event.target.parentNode) }, }) -Volcanos("onstatus", {help: "组件状态", list: []}) Volcanos("onexport", {help: "导出数据", list: [], - file: function(event, can, csv, cmd, target) { - return can.page.Select(can, target, "tr", function(tr) { + file: function(can) { + return can.page.Select(can, can.ui.content, "tr", function(tr) { return can.page.Select(can, tr, "th,td", function(td) {return td.innerHTML}).join(",") }).join("\n") }, diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 863533a7..d48c44b9 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -1,4 +1,24 @@ -Volcanos("onimport", {help: "导入数据", list: [], +Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) { + can._target.innerHTML = "", can.ui = can.page.Append(can, can._target, [ + {view: "content"}, {view: "display"}, + ]) + can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) { + return {text: [value, "td"], oncontextmenu: function(event) { + can.onappend.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) { + var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line) + }) + }, ondblclick: function(event) { + can.page.Modify(can, event.target, {contenteditable: true}) + }} + }) + + can.core.List(msg.result, function(item) { + var ls = item.split("/") + var ls = ls[ls.length-1].split(".") + var ext = ls[ls.length-1].toLowerCase() + can.page.Append(can, can.ui.content, [can.onfigure[ext](can, item)]) + }) + }, init: function(can, msg, cb, output, action, option) {output.innerHTML = ""; if (!msg.append || msg.append.length == 0) {return} @@ -18,13 +38,6 @@ Volcanos("onimport", {help: "导入数据", list: [], return {className: "preview", img: "/share/local/web.wiki.feel/"+item.path, width: width, oncontextmenu: menu} case "MOV": case "m4v": - return {className: "preview", type: "video", width: width, oncontextmenu: menu, - onplay: cb, onpause: cb, - onloadedmetadata: cb, - onloadeddata: cb, - ontimeupdate: cb, - onended: cb, - data: {src: "/share/local/web.wiki.feel/"+item.path, controls: "controls", autoplay: auto, loop: false}} default: return } @@ -138,19 +151,31 @@ Volcanos("onimport", {help: "导入数据", list: [], }) }, }) -Volcanos("onaction", {help: "组件菜单", list: ["预览", "上传"], - "预览": function(event, can, msg, cmd, target) { + +Volcanos("onfigure", {help: "组件菜单", list: [], + image: function(can, path) { + return {img: "/share/local/"+path} }, - "上传": function(event, can, msg, cmd, target) { - can.run(event, ["action", cmd, can.Option("name"), can.page.Select(can, target, "tr", function(tr) {return can.page.Select(can, tr, "th,td", function(td) {return td.innerHTML}).join(",")}).join("\n")], function() { - can.user.toast("保存成功") - }, true) + jpg: function(can, path) { return can.onfigure.image(can, path) }, + qrc: function(can, path) { return can.onfigure.image(can, path) }, + + video: function(can, path) { + function cb(event) { + } + return {className: "preview", type: "video", width: width, oncontextmenu: menu, + onplay: cb, onpause: cb, + onloadedmetadata: cb, + onloadeddata: cb, + ontimeupdate: cb, + onended: cb, + data: {src: "/share/local/"+path, controls: "controls", autoplay: auto, loop: false, + }} }, + m4v: function(can, path) { return can.onfigure.image(can, path) }, }) -Volcanos("onchoice", {help: "组件交互", list: ["保存", "清空", ["rect", "rect", "line", "circle"]], - "清空": function(event, can, msg, cmd, target) { - console.log("choice", cmd) - }, + +Volcanos("onaction", {help: "组件菜单", list: ["上传"], + "上传": function(event, can) { can.onappend.upload(can) }, }) Volcanos("ondetail", {help: "组件详情", list: ["标签"], "标签": function(event, can, msg, index, key, cmd, target) { diff --git a/proto.js b/proto.js index 0cb00534..189624a8 100644 --- a/proto.js +++ b/proto.js @@ -85,7 +85,8 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, debug: { }, request: function(event, msg, proto) { event = event || {}; if (!msg && event._msg) { return event._msg } - + var ls = (can._name||can._help).split("/") + event._pane = ls[ls.length-1] event._msg = msg = msg || {}, msg._event = event, msg._can = can; msg.__proto__ = proto || { _name: meta.order++, _create_time: new Date(), Option: function(key, val) {