From 8557dee71aa15e750c75e3b670ef55891fd5bc50 Mon Sep 17 00:00:00 2001 From: shaoying Date: Fri, 22 Jan 2021 09:22:42 +0800 Subject: [PATCH] opt river --- frame.js | 6 ++++-- lib/page.js | 4 +++- lib/user.js | 39 ++++++++++++++++++++++++++++++++++++++ page/index.css | 5 +++++ pane/Action.js | 4 ++-- pane/River.js | 21 ++++++++++++++++---- pane/Search.css | 4 ++++ pane/Search.js | 12 ++++++++---- plugin/input/key.js | 10 +++++----- plugin/input/province.js | 8 ++++---- plugin/local/wiki/word.css | 4 ++-- proto.js | 6 ++++-- 12 files changed, 97 insertions(+), 26 deletions(-) diff --git a/frame.js b/frame.js index 1e4a038e..81e1d638 100644 --- a/frame.js +++ b/frame.js @@ -218,10 +218,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) }, _option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []) + meta.option = can.base.Obj(meta.option||"{}", {}) function add(item, next) { item._input != "button" && item.type != "button" && index++ Volcanos(item.name, {_follow: can._follow+"."+item.name, _option: can._option, _action: can._action, _output: can._output, _status: can._status, - _target: can.onappend.input(can, item, args[index], option), + _target: can.onappend.input(can, item, args[index]||meta.option[item.name], option), Option: can.Option, Action: can.Action, Status: can.Status, CloneInput: function() { add(item)._target.focus() }, CloneField: function() { can.Clone() }, @@ -312,8 +313,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent) }, can._outputs.push(table), table._msg = msg - can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "") table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) { + can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "") table.onaction && table.onappend._action(table, msg._action||meta._action||table.onaction.list) table.ondetail && table.onappend._detail(table, msg._detail||meta._detail||table.ondetail.list) table.onexport && table.onappend._status(table, msg._export||meta._export||table.onexport.list) @@ -423,6 +424,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, var figure = can.onappend.field(can, "input "+pkey, {}, document.body) can._figure = figure; can.onlayout.figure(can, figure, event) + meta.run = meta.run||can.run cb(event, can, meta, target, figure) } } }) diff --git a/lib/page.js b/lib/page.js index d31381c5..70b7da2b 100644 --- a/lib/page.js +++ b/lib/page.js @@ -118,7 +118,7 @@ Volcanos("page", {help: "网页模块", data.placeholder = data.placeholder || data.name data.placeholder = data.placeholder.split(".").pop() data.title = data.title || data.placeholder - data.autocomplete = "none" + data.autocomplete = "off" data.onfocus = data.onfocus || function(event) { event.target.setSelectionRange(0, -1) @@ -164,6 +164,7 @@ Volcanos("page", {help: "网页模块", } item.type == "input" && data.type == "button" && (data.value = can.user.trans(can, data.value)) + item.type == "input" && data.type == "text" && (data.autocomplete = data.autocomplete||"off") data.placeholder && (data.placeholder = can.user.trans(can, data.placeholder)) data.title && (data.title = can.user.trans(can, data.title)) @@ -224,6 +225,7 @@ Volcanos("page", {help: "网页模块", }).slice(1) index = typeof index == "object"? index: [index] + index = can.core.List(index, function(item) { if (item > -1) { return item} }) var is_time = true, is_number = true can.core.List(list, function(tr) { diff --git a/lib/user.js b/lib/user.js index 45767930..bbc5e843 100644 --- a/lib/user.js +++ b/lib/user.js @@ -67,6 +67,7 @@ Volcanos("user", {help: "用户模块", agent: { toast: function(can, text, title, duration, progress) { var meta = typeof text == "object"? text: {text: text, title: title||can._help, duration: duration, progress: progress} var width = meta.width||400, height = meta.height||100 + if (width < 0) { width = window.innerWidth + width } var ui = can.page.Append(can, document.body, [{view: "toast", style: { width: width, bottom: 100, left: document.body.clientWidth/2-width/2, @@ -87,6 +88,24 @@ Volcanos("user", {help: "用户模块", agent: { }) ui.Close = function() { can.page.Remove(can, ui.first), timer.stop = true } + + can.page.Select(can, ui.first, ".story", function(target) { var data = target.dataset + can.page.Modify(can, target, {style: can.base.Obj(data.style)}) + switch (data.type) { + case "spark": + if (data["name"] == "inner") { + target.title = "点击复制", target.onclick = function(event) { + can.user.copy(event, can, target.innerText) + } + return + } + can.page.Select(can, target, "span", function(item) { + item.title = "点击复制", item.onclick = function(event) { + can.user.copy(event, can, item.innerText) + } + }) + } + }) return ui }, share: function(can, msg, cmd) { @@ -159,12 +178,32 @@ Volcanos("user", {help: "用户模块", agent: { var x = event.clientX||200, y = event.clientY||48; y += 10; if (x > 600) { x -= 160 } if (can.user.isMobile) { x = 100, y = 100 } + function Option(key, value) { + if (key == undefined) { value = {} + can.page.Select(can, ui.first, "input", function(item) { + item.name && item.value && (value[item.name] = item.value) + }); return value + } + if (typeof key == "object") { + return can.core.Item(key, arguments.callee), key + } + can.page.Select(can, ui.first, 'input[name='+key+']', function(item) { + value == undefined? value = item.value: item.value = value + }); return value + } + + var button; var ui = can.page.Append(can, document.body, [{view: ["input", "fieldset"], style: {left: x+"px", top: y+"px"}, list: [ {view: ["option", "table"], list: can.core.List(form, function(item) { if (item.button) { button = can.core.List(item.button, function(item) { return {button: typeof item == "object"? item: [item, function(event) { cbs(event, item) }]} }); return } + item.run = function(event, cmds, cb) { + var msg = can.request(event, Option()) + can.run(event, cmds, cb, true) + } + function _init(target) { can.onappend.figure(can, item, item.value, target) } return {type: ["tr"], list: [ diff --git a/page/index.css b/page/index.css index 02e23ff7..c9e059d6 100644 --- a/page/index.css +++ b/page/index.css @@ -281,6 +281,7 @@ div.upload div.item { div.toast { background:#0e3369b3; color:yellow; position:fixed; + overflow:auto; padding:5px; z-index:20; } @@ -408,3 +409,7 @@ body.print fieldset.Action fieldset.plugin>form.option { body.print fieldset.River>div.output div.list div.item { background-color:white; } + +div.story { + text-align:left; +} diff --git a/pane/Action.js b/pane/Action.js index b9a48c59..4c831fcf 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -70,7 +70,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, }) can.onengine.listen(can, "search", function(msg, word) { - if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg) } + if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg, word) } }) can._target.ontouchstart = function(event) { @@ -129,7 +129,7 @@ Volcanos("onexport", {help: "导出数据", list: [], item.dataset.args = JSON.stringify(list), cb(item, next) }) }, - plugin: function(can, msg) { + plugin: function(can, msg, word) { var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) { if (item.innerHTML.indexOf(word[1]) == -1) { return } diff --git a/pane/River.js b/pane/River.js index 1e865b81..9e52fd35 100644 --- a/pane/River.js +++ b/pane/River.js @@ -33,7 +33,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.run({}, [], function(msg) { can.onimport._init(can, msg, list, cb, can._output) }) can.onengine.listen(can, "search", function(msg, word) { - if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg) } + if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg, word) } }) can.onengine.listen(can, "action.touch", function() { @@ -45,7 +45,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.run({}, ["search", "Header.onimport.menu", "river", ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"], ["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"], - ["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"], + ["共享", "共享群组", "共享应用", "共享工具", "邀请用户", "邀请设备"], ], function(event, item) { can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")]) }) @@ -211,13 +211,26 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }, "访问任务": function(event, can, button, river, storm) { var msg = can.request(event, {index: "web.team.task"}) - can.user.select(event, can, "task", "time,type,name,text") + can.user.select(event, can, "task", "time,zone,id,type,name,text") + }, + "邀请用户": function(event, can, button, river, storm) { + can.user.toast(can, "what", "邀请用户") + }, + "邀请设备": function(event, can, button, river, storm) { + can.run(event, ["action", "invite"], function(msg) { + var toast = can.user.toast(can, { + text: msg.Result(), title: "邀请设备", + width: -100, duration: -1, button: [ + {button: ["关闭", function() { toast.Close() }]}, + ] + }) + }) }, }) Volcanos("onexport", {help: "导出数据", list: [], width: function(can) { return can._target.offsetWidth }, height: function(can) { return can._target.offsetHeight }, - storm: function(can, msg) { + storm: function(can, msg, word) { var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") can.core.Item(can.onengine.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { diff --git a/pane/Search.css b/pane/Search.css index 3fc6b2f5..94189b61 100644 --- a/pane/Search.css +++ b/pane/Search.css @@ -6,6 +6,10 @@ fieldset.Search { fieldset.Search input.word { width:-webkit-fill-available; } +fieldset.Search div.output { + max-height:600px; + overflow:auto; +} fieldset.Search div.output div.content { max-height:400px; overflow:auto; diff --git a/pane/Search.js b/pane/Search.js index 7bc3cd02..465248c8 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -10,12 +10,16 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }]}, {view: "content"}, {view: ["display", "table"]}, {view: "preview"}, ]), typeof cb == "function" && cb(msg) + + var header = can.run({}, ["search", "Header.onexport.height"])||0 + var footer = can.run({}, ["search", "Footer.onexport.height"])||0 + can.page.Modify(can, can._output, {style: {"max-height": window.innerHeight-header-footer-64}}) }, _table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content) can.onappend.table(can, msg, function(value, key, index, line) { can.Status("count", index+1) return {text: [key == "text" && typeof line.text == "function" && line.text.help || value, "td"], onclick: function(event) { - if (event.shiftKey) { var msg = can.request(event, line) - return can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(sub) { + if (event.shiftKey) { event.stopPropagation(), event.preventDefault() + return can.onappend.plugin(can, {index: line.ctx? line.ctx+"."+line.cmd: msg.Option("index"), option: line}, function(sub, meta) { sub.run = function(event, cmds, cb) { can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { typeof cb == "function" && cb(msg) @@ -42,7 +46,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, _word: function(can, msg, cmds, fields) { - msg = can.request({}, {fields: fields.join(","), word: cmds}) + msg = can.request({}, {fields: fields.join(","), word: cmds, index: msg.Option("index")}) can.onengine.signal(can, "search", msg) can.run(msg._event, cmds, function(msg) { can.list = msg.Table() @@ -76,7 +80,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] can.onimport._init(can, msg, list, cb, can._output) }, "关闭": function(event, can) { can.onmotion.hide(can) }, - "清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.display) }, + "清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.preview) }, "完成": function(event, can) { typeof can.cb == "function" && can.cb() }, select: function(event, can, index) { diff --git a/plugin/input/key.js b/plugin/input/key.js index fdb96865..8f5d36d6 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -1,12 +1,12 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target, figure) { function run() { var msg = can.request(event, can.Option()) - can.run(event, ["action", "inputs", item.name, target.value], function(msg) { + item.run(event, ["action", "inputs", item.name, target.value], function(msg) { if (!msg.append) { return } - can.onappend._action(can, [ - {button: ["清空", function(event) { target.value = "" }]}, - {button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]}, - ], figure.action) + can.onappend._action(can, ["关闭", "清空"], figure.action, { + "关闭": function(event) { can.page.Remove(can, figure.fieldset) }, + "清空": function(event) { target.value = "" }, + }) can.onappend.table(can, msg, function(value, key, index, line) { return {type: "td", inner: value, onclick: function() { diff --git a/plugin/input/province.js b/plugin/input/province.js index 1ac50ca4..1c823650 100644 --- a/plugin/input/province.js +++ b/plugin/input/province.js @@ -1,9 +1,9 @@ Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target, figure) { can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() { - can.onappend._action(can, [ - {type: "button", name: "清空", onclick: function(event) { target.value = "" }}, - {type: "button", name: "关闭", onclick: function(event) { can.page.Remove(can, figure.fieldset) }}, - ], figure.action) + can.onappend._action(can, ["关闭", "清空"], figure.action, { + "关闭": function(event) { can.page.Remove(can, figure.fieldset) }, + "清空": function(event) { target.value = "" }, + }) can.page.Modify(can, figure.fieldset, {style: {left: 120}}) var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first); diff --git a/plugin/local/wiki/word.css b/plugin/local/wiki/word.css index be7654b0..4ea941a7 100644 --- a/plugin/local/wiki/word.css +++ b/plugin/local/wiki/word.css @@ -19,13 +19,13 @@ body fieldset p.story[data-name=inner] { body fieldset p.story[data-name=inner]:hover { cursor:copy; } -body fieldset div.story[data-type=spark] { +body div.story[data-type=spark] { background-color:#2169a9; color:white; box-shadow: 4px 4px 10px 1px #626bd0; border-left:solid 4px blue; padding:4px 10px; margin:10px 0px; } -body fieldset div.story[data-type=spark] span:hover { +body div.story[data-type=spark] span:hover { background-color:#c10c8a; cursor:copy; box-shadow: 4px 4px 10px 1px #626bd0; diff --git a/proto.js b/proto.js index d167f03d..205ded51 100644 --- a/proto.js +++ b/proto.js @@ -58,8 +58,10 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l }, request: function(event, option) { event = event || {} event._msg = event._msg || can.misc.Message(event, can) - can.core.Item(option, event._msg.Option) - return event._msg + + can.core.List(arguments, function(arg, index) { + index > 0 && can.core.Item(arg, event._msg.Option) + }); return event._msg }, Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, }