From cda9ab80c59e4314cc01a1149d8c153f661990aa Mon Sep 17 00:00:00 2001 From: shaoying Date: Mon, 15 Jun 2020 09:56:22 +0800 Subject: [PATCH] opt table --- frame.js | 80 ++++++++++++++++++++++++------------------------- index.css | 3 ++ lib/page.js | 26 +++++++++++++++- plugin/table.js | 7 +++-- 4 files changed, 73 insertions(+), 43 deletions(-) diff --git a/frame.js b/frame.js index cf97a040..c34014a7 100644 --- a/frame.js +++ b/frame.js @@ -359,47 +359,47 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met return target; }, table: function(can, target, type, msg, cb) { - var table = can.page.AppendTable(can, target, msg, msg.append, function(event, value, key, index, tr, td) { - can.page.Select(can, can._option, "input.args", function(input) { if (input.name == key) { var data = input.dataset || {} - input.value = value; typeof cb == "function" && cb(event, value); if (data.action == "auto") { - var sub = can.request(event) - can.core.Item(can.Option(), sub.Option) - sub.Option("_action", msg.Option("_action")) - can.run(event, can.page.Select(can, can._option, "input.args", function(item) { - return item.name && item.value || "" - })) + var table = can.page.AppendTables(can, target, msg, msg.append, cb || function(value, key, index, line) { + function run(event, item, value) { + var msg = can.request(event); msg.Option(line) + var cb = can.onaction[item] || can.onaction["运行"] + cb? cb(event, can, item): can.run(event, ["action", item, key, value.trim()], function(res) { + can.ui.display.innerHTML = "" + can.onappend.table(can, can.ui.display, "table", res) + can.onappend.board(can, can.ui.display, "board", res) + }, true) + } + return {type: "td", inner: value, click: function(event) { + var target = event.target; if (target.tagName == "INPUT" && target.type == "button") { + return run(event, event.target.value, value) } - } }) - }, function(event, value, key, index, tr, td) { - can.onappend.carte(can, can.ondetail||{}, msg["_detail"] || can.Conf("detail") || can.ondetail.list, function(event, item, meta) { - var back = td.innerHTML - switch (item) { - case "编辑": - var ui = can.page.Appends(can, td, [{type: "input", value: back, onkeydown: function(event) { - switch (event.key) { - case "Enter": - td.innerHTML = event.target.value - - var res = can.request(event); can.core.List(msg.append, function(key) { - res.Option(key, msg[key][index]) - }); can.run(event, ["action", item, key, event.target.value.trim(), value.trim()], function(res) {}, true) - break - case "Escape": - td.innerHTML = back - break - } - }, onkeyup: function(event) { - - }}]); - ui.input.focus() - ui.input.setSelectionRange(0, -1) - return - } - - var res = can.request(event); can.core.List(msg.append, function(key) { - res.Option(key, msg[key][index]) - }); can.run(event, ["action", item, key, value.trim()], function(res) {}, true) - }) + can.page.Select(can, can._option, "input.args", function(input) { if (input.name == key) { var data = input.dataset || {} + input.value = value; typeof cb == "function" && cb(event, value); if (data.action == "auto") { + var sub = can.request(event) + can.core.Item(can.Option(), sub.Option) + sub.Option("_action", msg.Option("_action")) + can.run(event, can.page.Select(can, can._option, "input.args", function(item) { + return item.name && item.value || "" + })) + } + } }) + }, ondblclick: function(event) { + can.onappend.modify(can, event.target, function(event, value, old) { + run(event, "编辑", value) + }) + }, oncontextmenu: function(event) { + can.onappend.carte(can, can.ondetail||{}, msg["_detail"] || can.Conf("detail") || can.ondetail.list, function(event, item, meta) { + switch (item) { + case "编辑": + can.onappend.modify(can, event.target, function(event, value, old) { + run(event, "编辑", value) + }) + break + default: + run(event, item, value) + } + }) + }, } }) }, board: function(can, target, type, msg) { diff --git a/index.css b/index.css index a4d4ae37..52eaa440 100644 --- a/index.css +++ b/index.css @@ -111,6 +111,9 @@ fieldset>div.output { overflow:auto; position:relative; } +fieldset>div.output div.code a { + color:yellow; +} fieldset>div.output>div.project { float:left; /* position:fixed; */ diff --git a/lib/page.js b/lib/page.js index 63e0e78e..3f6cd960 100644 --- a/lib/page.js +++ b/lib/page.js @@ -252,6 +252,26 @@ var page = Volcanos("page", {help: "网页模块", })) return table; }), + AppendTables: shy("添加表格", function(can, target, msg, list, cb) { + if (!msg.append || msg.append.length == 0) {return} + + var table = can.page.Append(can, target, "table"); + var tr = can.page.Append(can, table, "tr", {dataset: {index: -1}}); + can.core.List(list, function(key, index) {if (key.indexOf("_") == 0) {return} + can.page.Append(can, tr, "th", key.trim()).onclick = function(event) { + var dataset = event.target.dataset; + dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1; + can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1"); + } + }); + + can.page.Append(can, table, can.core.List(msg.Table(), function(line, index) { + return {type: "tr", dataset: {index: index}, list: can.core.List(list, function(key) {if (key.indexOf("_") == 0) {return} + return cb(can.page.Display(line[key]).trim(), key, index, line) + })} + })) + return table; + }), RangeTable: function(can, table, index, sort_asc) { var list = can.page.Select(can, table, "tr", function(tr) { return tr.style.display == "none" || can.page.ClassList.has(can, tr, "hide")? null: tr @@ -328,7 +348,11 @@ var page = Volcanos("page", {help: "网页模块", }), Display: function(text) { - if (text.startsWith("http")) {return ""+text+""} + if (text.startsWith("http")) { + var ls = text.split(" ") + return ""+ls[0]+""+ls.slice(1).join(" ") + } + text = text.replace(/\033\[31m/g, "") text = text.replace(/\033\[32m/g, "") text = text.replace(/\033\[33m/g, "") diff --git a/plugin/table.js b/plugin/table.js index e108cd77..93eb5ac0 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,7 +1,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = ""; - can.onappend.table(can, target, "table", msg) - can.onappend.board(can, target, "board", msg) + can.ui = can.page.Append(can, can._target, [ + {view: ["content", "div"]}, {view: ["display", "pre"]}, + ]) + can.onappend.table(can, can.ui.content, "table", msg) + can.onappend.board(can, can.ui.display, "board", msg) return typeof cb == "function" && cb(msg) }, })