From b0653a81e5d6f29820f2082aa36129bf34fe4053 Mon Sep 17 00:00:00 2001 From: shy Date: Thu, 16 Nov 2023 13:11:09 +0800 Subject: [PATCH] add stats --- const.js | 1 + frame.js | 8 ++++++-- index.css | 6 ++++++ panel/footer.css | 4 ++-- plugin/story/stats.js | 17 +++++++++++++++++ 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 plugin/story/stats.js diff --git a/const.js b/const.js index 16b2dfd4..9cf1aa50 100644 --- a/const.js +++ b/const.js @@ -240,6 +240,7 @@ var chat = { } var team = { TASK: "task", PLAN: "plan", + ASSET: "asset", BEGIN_TIME: "begin_time", END_TIME: "end_time", LONG: "long", YEAR: "year", MONTH: "month", WEEK: "week", DAY: "day", HOUR: "hour", TASK_POD: "task.pod", TASK_ZONE: "task.zone", TASK_ID: "task.id", diff --git a/frame.js b/frame.js index 4f8216d6..bbf3064f 100644 --- a/frame.js +++ b/frame.js @@ -352,6 +352,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { function run(event, cmd, arg) { can.misc.Event(event, can, function(msg) { can.run(can.request(event, data, can.Option()), [ctx.ACTION, cmd].concat(arg)) }) } if (key == web.SPACE && value) { value = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: value}), value) } if (key == mdb.ICONS && value) { value = can.page.Format(html.IMG, can.misc.Resource(can, data[key]), msg.IsDetail()? 128: 48, msg.IsDetail()? null: 48) } + if (key == mdb.NAME) { value = can.user.trans(can, value, null, html.INPUT) } return {text: [msg.IsDetail() && key == mdb.KEY? can.user.trans(can, value, null, html.INPUT): can.user.trans(can, value, null, html.VALUE), html.TD], onclick: function(event) { var target = event.target if (key == cli.QRCODE && can.page.tagis(event.target, html.IMG)) { can.user.opens(event.target.title) } if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) { can.requestAction(event, target.name) @@ -553,9 +554,12 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro }), can.onengine.signal(can, chat.ONSIZE, can.request({}, {height: height, width: width})) can.user.isMobile && can.user.isLandscape() || can.page.style(can, document.body, kit.Dict(html.OVERFLOW, html.HIDDEN)) }, - expand: function(can, target, width) { var n = parseInt(target.offsetWidth/(width+20)); width = target.offsetWidth/n - 20 + expand: function(can, target, width, height) { var n = parseInt(target.offsetWidth/(width+20)); width = target.offsetWidth/n - 20 if (width+20 >= target.offsetWidth) { n = 1, width = target.offsetWidth - 20 } - can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { can.page.styleWidth(can, target, width) }) + can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { + can.page.styleWidth(can, target, width) + height = can.page.styleHeight(can, target, height) + }) }, background: function(can, url, target) { can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, figure: function(event, can, target, right, min) { if (!event || !event.target) { return {} } target = target||can._fields||can._target diff --git a/index.css b/index.css index c7d466d2..68dd1713 100644 --- a/index.css +++ b/index.css @@ -180,6 +180,12 @@ body>div.input.login>div.display div.sso div.item:hover { background-color:var(- body>div.input.login>div.display div.sso div.item>img { height:32px; width:32px; } body>div.input.login>div.display div.sso div.item>span { line-height:32px; padding:5px; } body>div.input.simple td:first-child { display:none; } +div.output.stats { display:flex; +/* justify-content:space-between; */ + flex-wrap:wrap; } +div.output.stats>div.item { text-align:center; padding:10px; margin:10px; float:left; display:flex; flex-direction:column; justify-content:center; } +div.output.stats>div.item>div.value { font-size:32px; } +div.output.stats>div.item>div.name { font-style:italic; color:var(--disable-fg-color); } body>div.upload div.action input[type=file] { width:320px; } body>div.upload div.output { border:var(--box-notice); } body>div.upload div.output div.progress { background-color:var(--progress-bg-color); height:10px; width:0; } diff --git a/panel/footer.css b/panel/footer.css index 950a2db7..0aee332f 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -10,10 +10,10 @@ fieldset.Footer>div.output div.cmd>input[name=cmd] { padding-left:30px; width:12 fieldset.Footer>div.output div.cmd>input[name=cmd]:focus { width:320px; transition:all 0.5s; } fieldset.Footer>div.output div.cmd>span.delete { padding:6px; } fieldset.Footer>div.output div.menu>div.River { display:flex; justify-content:space-around; } -fieldset.Footer>div.output div.menu>div.River>div.item { display:flex; flex-direction:column; text-align:center; flex-grow:1; } +fieldset.Footer>div.output div.menu>div.River>div.item { height:60px; display:flex; flex-direction:column; text-align:center; flex-grow:1; } fieldset.Footer>div.output div.menu>div.River>div.item>i { font-size:24px; margin-right:0; } fieldset.Footer>div.output div.menu>div.River>div.item>span { font-size:12px; } -body.mobile fieldset.Footer>div.output { font-style:italic; height:80px; overflow:hidden; } +body.mobile fieldset.Footer>div.output { font-style:italic; height:60px; overflow:hidden; } body.mobile fieldset.Footer>div.output div.cmd { display:none; } body.mobile fieldset.Footer>div.output div.toast { display:none; } diff --git a/plugin/story/stats.js b/plugin/story/stats.js new file mode 100644 index 00000000..864c31e0 --- /dev/null +++ b/plugin/story/stats.js @@ -0,0 +1,17 @@ +Volcanos(chat.ONIMPORT, { + _init: function(can, msg) { can.onappend.style(can, "stats", can._output) + // can.onimport.layout = function() { can.onlayout.expand(can, can._output, 150, 100) } + var units = {} + var stats = {}; msg.Table(function(value) { + stats[value.name] = parseFloat(stats[value.name]||"0") + parseFloat(value.value) + units[value.name] = value.units + }) + can.core.Item(stats, function(name, value) { + can.page.Append(can, can._output, [{view: [[html.ITEM, name]], list: [ + {view: [mdb.VALUE, "", can.base.trimSuffix(parseFloat(value).toFixed(2)+"", ".00")+" "+units[name]]}, + {view: [mdb.NAME, "", can.user.trans(can, name, null, html.INPUT)]}, + ]}]) + }) + can.isCmdMode() && can.onappend.table(can, msg) + }, +})