diff --git a/frame.js b/frame.js index 75c81afa..932f5b36 100644 --- a/frame.js +++ b/frame.js @@ -102,19 +102,17 @@ Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) can: can, sub: sub, msg: msg, cmd: cmd, arg: arg, cb: function() { msg.Reply() }, }): can.onengine._search({}, can, msg, can, ["_search", cmd].concat(arg), function() { msg.Reply() }) }) - can.onengine.listen(can, chat.ONSEARCH, function(msg, word) { var meta = can.onengine.plugin.meta - if (word[0] != mdb.FOREACH && word[0] != ctx.COMMAND) { return } + can.onengine.listen(can, chat.ONSEARCH, function(msg, word) { if (word[0] == ctx.COMMAND || word[1] != "") { var meta = can.onengine.plugin.meta var list = word[1] == ""? meta: meta[word[1]]? kit.Dict(word[1], meta[word[1]]): {} can.core.Item(list, function(name, command) { name = can.base.trimPrefix(name, "can.") can.core.List(msg.Option(ice.MSG_FIELDS).split(ice.FS), function(item) { - msg.Push(item, kit.Dict( - ice.CTX, "onengine", ice.CMD, "command", + msg.Push(item, kit.Dict(ice.CTX, "onengine", ice.CMD, "command", mdb.TYPE, "can", mdb.NAME, name, mdb.TEXT, command.help, ctx.CONTEXT, "can", ctx.COMMAND, name )[item]||"") }) }) - }) + } }) }, _list: [""], pwd: function(can, msg, arg) { can.ondaemon._list[0] = arg[0] }, refresh: function(can, msg, sub) { sub.Update() }, @@ -166,7 +164,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, if (meta.msg) { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY)||meta.feature.display) } can.page.Modify(can, sub._legend, kit.Dict(can.Conf("legend_event")||"onmouseenter", function(event) { - can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有"].concat(can.core.Item(meta.feature._trans))], [cli.CLOSE])) + can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有"].concat(can.core.Item(meta.feature._trans))])) })), can.base.isFunc(cb) && cb(sub) }); return sub }, @@ -747,9 +745,10 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe if (target.innerText == "") { target.innerText = target.href } can.page.Modify(can, target, {target: "_blank"}) }, - copy: function(can, target, text) { + copy: function(can, target, text, cb) { target.title = "点击复制", target.onclick = function(event) { can.user.copy(event, can, text||target.innerText) + can.base.isFunc(cb) && cb(event) } }, move: function(can, target, layout, cb) { var begin; layout = layout||{} diff --git a/page/index.css b/page/index.css index 5c9ee6b1..c8611d18 100644 --- a/page/index.css +++ b/page/index.css @@ -49,6 +49,7 @@ div.code { background-color:#343a3445; color:white; padding:10px; border:solid 3 div.story[data-type=spark] { background-color:#2169a9a6; color:white; padding:4px 10px; border-left:solid 4px blue; margin:10px; } body.mobile form.option>div.item { margin-right:0px; } +form.option>div.item { margin-right:0px; margin-right:5px; } form.option>div.item.select { background-color:#0000; } form.option>div.item input.args.char { width:20px; } form.option>div.item input.args.tiny { width:40px; } @@ -99,13 +100,13 @@ body>div.toast div.progress div.current { background-color:red; height:10px; } body>div.carte { background-color:#295b61; color:white; padding:4px; min-width:80px; } body>div.carte div.item { padding:3px 12px; } -body>div.input { background-color:#0d4142a6; } +body>div.input { background-color:#0d4142a6; padding:5px; } body>div.input div.item { float:left; } -body>div.input select { width:183px; } -body>div.input input[type=text] { width:171px; } +body>div.input select { width:183px; margin:5px; } +body>div.input input[type=text] { width:171px; margin:5px; } body>div.input input[name=username] { width:171px; } body>div.input input[name=password] { width:171px; } -body>div.input textarea { background-color:cyan; padding:4px; border:2px inset #14a58e; height:60px; width:171px; } +body>div.input textarea { background-color:cyan; padding:4px; margin:5px; border:2px inset #14a58e; height:120px; width:171px; } body>div.input.login { padding:10px; } body>div.upload { background-color:black; color:yellow; padding:5px; } diff --git a/panel/action.js b/panel/action.js index e9ed7de5..337b45ee 100644 --- a/panel/action.js +++ b/panel/action.js @@ -91,10 +91,12 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, t can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN) - var gt = "❯", lt = "❮"; function toggle(view) { return !can.setRiver("display") } - can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) { - event.target.innerHTML = toggle()? gt: lt - }}]) + if (can.user.mod.isPod && !can.user.isMobile) { + var gt = "❯", lt = "❮"; function toggle(view) { return !can.setRiver("display") } + can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) { + event.target.innerHTML = toggle()? gt: lt + }}]) + } can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) { msg.Echo(JSON.stringify(can)) @@ -168,7 +170,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, t }) }, onsearch: function(can, msg, word) { - if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } + if (word[0] == mdb.PLUGIN || word[1] != "") { can.onexport.plugin(can, msg, word) } }, onsize: function(can, msg, height, width) { can.Conf({height: height, width: width}) }, diff --git a/panel/header.js b/panel/header.js index 1237c9aa..d0927cd2 100644 --- a/panel/header.js +++ b/panel/header.js @@ -56,6 +56,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, case lang.ENTER: can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: event.target.value})) } }}, "", target, "title search").parentNode + can.page.Append(can, target, [{type: "search", list: [{view: ["menu", "div", can.user.trans(can, "search")], onclick: function() { + can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: ""})) + }}] }]) can.user.isMobile && can.page.Modify(can, ui, {style: {float: html.RIGHT}}) }, _background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } @@ -66,7 +69,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, msg.Option(aaa.AVATAR) && can.page.Modify(can, "div.state.avatar>img", {src: "/share/local/avatar"}) }, _menus: function(can, msg, target) { - can.setHeaderMenu(can.user.mod.isPod||can.user.isMobile||can.user.isExtension? []: + can.setHeaderMenu(can.user.mod.isPod||can.user.isExtension||can.user.isMobile? []: can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), can.onaction._menus), function(event, button) { can.core.CallFunc(can.onaction[button]||function(event, can) { can.run(event, [button], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, button)) }) @@ -194,7 +197,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t }, usernick: function(event, can) { - can.onaction.carte(event, can, ["shareuser", "setnick", "password", [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT]) + can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile || can.onaction.carte(event, can, ["shareuser", "setnick", "password", [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT]) }, shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN]) }, setnick: function(event, can) { diff --git a/panel/river.js b/panel/river.js index 5db6c3ba..16e7d2e5 100644 --- a/panel/river.js +++ b/panel/river.js @@ -21,12 +21,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can._main_storm = can.misc.Search(can, chat.STORM)||msg.Option(ice.MSG_STORM)||Volcanos.meta.args.storm||can._main_storm }, _menu: function(can, msg) { - if (can.user.mod.isPod) { - can.setHeaderMenu(["river"], function(event, button) { - can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) - }) - return - } + if (can.user.mod.isPod) { return } var list = []; if (can.user.isMobile) { list.push("river") } can.setHeaderMenu(list.concat(can.base.Obj(msg.Option(chat.MENUS), can.Conf(chat.MENUS)||can.ondetail._menus)), function(event, button) { can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) @@ -92,13 +87,12 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, cb, t can.base.isFunc(cb) && cb() }, - _trans: {"river": "菜单"}, onlogin: function(can, msg) { can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list) can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) }, onsearch: function(can, msg, word) { - if (word[0] == "*" || word[0] == chat.STORM) { can.onexport.storm(can, msg, word) } + if (word[0] == chat.STORM || word[1] != "") { can.onexport.storm(can, msg, word) } }, onstorm_select: function(can, msg, river, storm) { var args = {river: river, storm: storm} if (can.user.isExtension) { localStorage.setItem(ctx.ARGS, JSON.stringify(args)) } @@ -165,7 +159,6 @@ Volcanos("ondetail", {help: "菜单交互", ["share", "共享群组", "共享应用", "共享工具", "下载应用", "访问空间"], ], - "river": function(event, can) { can.onmotion.toggle(can, can._target), can.onlayout._init(can) }, "创建群组": function(event, can) { can.onaction.create(event, can) }, "共享群组": function(event, can, button, river) { can.onmotion.share(event, can, [{name: chat.TITLE, value: river}], [mdb.TYPE, chat.RIVER]) diff --git a/panel/search.js b/panel/search.js index d20a67a0..93c99693 100644 --- a/panel/search.js +++ b/panel/search.js @@ -7,6 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS), function(item) { return list.indexOf(item) })); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) + can.onmotion.story.auto(can) can.onappend._status(can, can.base.Obj(msg.Option("_status"), []).concat({name: "selected", value: "0"})) can.getActionSize(function(msg, height) { @@ -93,6 +94,7 @@ Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DON }, plugin: function(event, can, index) { var line = can.list[index] + if (line.ctx == "web.wiki" && line.cmd == "word") { return } if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd) diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index bf144937..ff4a1f48 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -1,3 +1,4 @@ +fieldset.story.inner>div.action { display:none; } fieldset.inner>form.option input[name=path] { width:80px; } fieldset.inner>form.option input[name=file] { width:160px; } fieldset.inner>div.action>div.tabs { background-color:#5c809c5c; height:18px; } diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 2eedbab4..cd3804f5 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -159,7 +159,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], }, }, _engine: {}, }) -Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code.COMPILE, "script", chat.WEBSITE], +Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, "dream", code.AUTOGEN, code.COMPILE, "script", chat.WEBSITE], save: function(event, can) { var msg = can.request(event, {content: can.onexport.content(can)}) can.run(event, [ctx.ACTION, nfs.SAVE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onimport.project(can, can.Option(nfs.PATH)) @@ -184,7 +184,7 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code. }, true) }, script: function(event, can, button) { var meta = can.Conf() - can.request(event, {_handle: ice.TRUE, text: `Volcanos("onimport", {help: "导入数据", list:[], _init: function(can, msg, cb, target) { + can.request(event, {_handle: ice.TRUE, file: "hi/hi.js", text: `Volcanos("onimport", {help: "导入数据", list:[], _init: function(can, msg, cb, target) { msg.Echo("hello world") can.onappend.table(can, msg) can.onappend.board(can, msg) @@ -197,7 +197,7 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code. }) }, website: function(event, can, button) { var meta = can.Conf() - can.request(event, {_handle: ice.TRUE, text: ` + can.request(event, {_handle: ice.TRUE, file: "hi.iml", text: ` hi he cli.runtime @@ -205,7 +205,7 @@ hi hi/hi.sh hi/hi.go hi/hi.js -`}, can.Option()) +`.trim()}, can.Option()) can.user.input(event, can, meta.feature[button], function(ev, btn, data, list, args) { can.run(event, [ctx.ACTION, button].concat(args), function(msg) { can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(nfs.FILE)) diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 5acddfc7..b2f294bd 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -41,6 +41,13 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target title: function(can, data, target) { can.user.mod.isCmd && target.tagName == "H1" && can.user.title(data.text) }, + refer: function(can, data, target) { + can.page.Select(can, target, html.A, function(item) { + item.onclick = function(event) { + can.run(event, [ctx.ACTION, mdb.CREATE, mdb.TYPE, "refer", mdb.NAME, item.dataset.name, mdb.TEXT, item.href], null, true) + } + }) + }, spark: function(can, data, target) { if (data[mdb.NAME] == chat.FIELD) { function deep(text) { var d = 0 @@ -85,7 +92,11 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target } if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) } can.page.Select(can, target, html.A, function(item) { can.onmotion.link(can, item) }) - can.page.Select(can, target, html.SPAN, function(item) { can.onmotion.copy(can, item) }) + can.page.Select(can, target, html.SPAN, function(item) { + can.onmotion.copy(can, item, "", function(event) { + can.run(event, [ctx.ACTION, mdb.CREATE, mdb.TYPE, "spark", mdb.NAME, "shell", mdb.TEXT, item.innerText], null, true) + }) + }) }, chart: function(can, data, target) { target.oncontextmenu = function(event) { diff --git a/plugin/state.js b/plugin/state.js index e5f4940f..2eb3f7c2 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -75,8 +75,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }, }) Volcanos("onaction", {help: "交互操作", list: [ - "共享工具", "切换全屏", "打开链接", "生成链接", "生成图片", "生成脚本", "刷新数据", "刷新页面", [ - "其它", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具", "打包页面", "摄像头", "扩展参数", + "共享工具", "刷新数据", "切换全屏", "打开链接", "生成链接", "生成图片", "生成脚本", [ + "其它", "扩展参数", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具", ], ], _init: function(can, msg, list, cb, target) {}, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) },