From d2403f6b3db57b6b9d7dc52b7fa2a6b64f219089 Mon Sep 17 00:00:00 2001 From: shylinux Date: Tue, 18 May 2021 08:39:28 +0800 Subject: [PATCH] opt frame.js --- frame.js | 20 +++++---- panel/Action.js | 43 ++++++++++--------- panel/Footer.js | 5 ++- panel/Header.js | 109 ++++++++++++++++++++++-------------------------- panel/River.js | 28 ++++++------- panel/Search.js | 9 ++-- proto.js | 2 +- 7 files changed, 108 insertions(+), 108 deletions(-) diff --git a/frame.js b/frame.js index 26c99a1c..28c95224 100644 --- a/frame.js +++ b/frame.js @@ -2,18 +2,19 @@ var _can_name = "/frame.js" Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) { can.core.Next(list, function(item, next) { item.type = "panel" can.onappend._init(can, item, item.list, function(panel) { - panel.onaction && panel.onappend._action(panel, item.action||panel.onaction.list) - panel.Status = panel.Status || function(key, value) { panel.set("Footer", key, value) } - panel.run = function(event, cmds, cb) { var msg = panel.request(event); cmds = cmds || [] return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb) - }, can[item.name] = panel, next() + }, can[item.name] = panel + + can.core.Item(panel.onaction, function(key, item) { if (key.indexOf("on") == 0) { + can.onengine.listen(can, key, function(msg) { can.core.CallFunc(item, {can: panel, msg: msg}) }) + } }), panel.const(panel.onaction._const||[]), panel._trans = panel.onaction._trans + panel.onaction._init(panel, item, item.list, next, panel._target) }, target) - }, function() { can.base.Copy(can.onengine.river, can.Conf("river")) - var panel = can[meta.main.name]; panel.onaction._init(panel, can.request(), [], function(msg) { cb(msg) - panel.onmotion._init(panel, target), panel.onkeypop._init(panel, target) - can.misc.Log(can.user.title(), "run", can) - }, panel._target) + }, function() { can.onlayout.topic(can) + can.misc.Log(can.user.title(), "run", can) + can.base.Copy(can.onengine.river, can.Conf("river")) + can.onengine.signal(can, "onmain", can.request()) }) }, _search: function(event, can, msg, panel, cmds, cb) { @@ -49,6 +50,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }), signal: shy("触发事件", function(can, name, msg) { msg = msg || can.request() + can.misc.Log("signal", name, msg) can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {msg: msg}) }) diff --git a/panel/Action.js b/panel/Action.js index 22e5463a..7092b15a 100644 --- a/panel/Action.js +++ b/panel/Action.js @@ -47,7 +47,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) can.onaction._layout(can, "flow") }, _menu: function(can) { - !can.user.isMobile && can.search({}, ["Header.onimport.menu", can._ACTION, + if (can.user.isMobile) { return } + can._menu && can.page.Remove(can, can._menu) + can._menu = can.search({}, ["Header.onimport.menu", can._ACTION, ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], ], function(event, key) { can.onaction._layout(can, key) }) }, @@ -83,13 +85,6 @@ Volcanos("onengine", {help: "解析引擎", list: [], }, }) Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { - can.const( - "output", "fields", - "action", "share", "river", "storm", - "title", "topic", "layout", "width", "height", "top", "left", "scroll", - "plugin", - ) - var share = can.user.Search(can, can._SHARE); if (share) { can.run({}, ["_share", share], function(msg) { msg.Length()>0? can.onimport._share(can, msg, share): can.onengine._engine({}, can, msg, can, [msg.Option("sess.river"), msg.Option("sess.storm")], function(msg) { @@ -98,18 +93,6 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, }) } - can.onengine.listen(can, "storm.select", function(msg, river, storm) { - can.onaction._select(can, msg, river, storm) - }) - - can.onengine.listen(can, "search", function(msg, word) { - if (word[0] == "*" || word[0] == can._PLUGIN) { can.onexport.plugin(can, msg, word) } - }) - - can._target.ontouchstart = function(event) { - can.onengine.signal(can, "action.touch", can.request(event)) - } - var list = []; can.onengine.listen(can, "resize", function(width, height) { can.Conf({width: width, height: height}), can.core.Delay(list, 1000, function() { can.onengine.signal(can, "action.resize", can.request({}, { @@ -117,6 +100,26 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, })) }) }) + + can._target.ontouchstart = function(event) { + can.onengine.signal(can, "onaction_touch", can.request(event)) + can.onmotion.float.del(can, "carte") + } + + can.base.isFunc(cb) && cb() + }, + _const: [ + "output", "fields", + "action", "share", "river", "storm", + "title", "topic", "layout", "width", "height", "top", "left", "scroll", + "plugin", + ], + + onsearch: function(can, msg, word) { + if (word[0] == "*" || word[0] == can._PLUGIN) { can.onexport.plugin(can, msg, word) } + }, + onstorm_select: function(can, msg, river, storm) { + can.onaction._select(can, msg, river, storm) can.onimport._menu(can) }, _layout: function(can, key) { if (!key) { return } diff --git a/panel/Footer.js b/panel/Footer.js index 38634eca..420f20a8 100644 --- a/panel/Footer.js +++ b/panel/Footer.js @@ -48,7 +48,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, }) Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - can.run({}, [], function(msg) { can.onimport._init(can, msg, list, cb, can._output) }) + can.base.isFunc(cb) && cb(msg) + }, + onlogin: function(can, msg) { + can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) }, }) Volcanos("onexport", {help: "导出数据", list: [], diff --git a/panel/Header.js b/panel/Header.js index bd298ead..6de06a3a 100644 --- a/panel/Header.js +++ b/panel/Header.js @@ -1,19 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can._trans = { - "river": "菜单", - "search": "搜索", - - "setting": "设置", - "black": "黑色主题", - "white": "白色主题", - "print": "打印主题", - "clear": "清除背景", - "pack": "打包页面", - - "shareuser": "共享用户", - "usernick": "修改昵称", - "logout": "退出登录", - } + can.Conf(can._USERNAME, msg.Option("user.nick")||msg.Option("user.name")||can.Conf(can._USERNAME)) + can.Conf(can._BACKGROUND, msg.Option(can._BACKGROUND)) + can.Conf(can._AVATAR, msg.Option(can._AVATAR)) can.onmotion.clear(can) can.onimport._agent(can, msg, target) @@ -39,13 +27,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } can.user.isWeiXin && can.onimport._weixin(can) }, - _grant: function() { - const GRANT = "grant"; if (can.user.Search(can, GRANT)) { + _grant: function(can, msg, target) { const GRANT = "grant" + if (can.user.Search(can, GRANT)) { if (can.user.confirm(GRANT+" "+can.user.Search(can, GRANT))) { can.run(event, [can._ACTION, GRANT, "space", can.user.Search(can, GRANT)]) } can.user.Search(can, GRANT, "") - return true } }, _title: function(can, msg, target) { @@ -56,34 +43,34 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }}]) }) }, - _state: function(can, msg, target) { - can.core.List(can.base.Obj(msg.Option("state"), can.Conf("state")||["time", can._USERNAME]), function(item) { + _state: function(can, msg, target) { const STATE = "state" + can.core.List(can.base.Obj(msg.Option(STATE), can.Conf(STATE)||["time", can._USERNAME]), function(item) { if (item == can._AVATAR) { - can.page.Append(can, target, [{view: ["state "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) { + can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) { can.onaction.carte(event, can, [can.page.Format("img", can.Conf(item), 160)]) }}]) return } - can.page.Append(can, target, [{view: ["state "+item, "div", (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) { + can.page.Append(can, target, [{view: [STATE+" "+item, "div", (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) { can.core.CallFunc([can.onaction, item], [event, can, item]) }, _init: function(target) { item == "time" && can.onimport._time(can, target) }}]) }) }, - _search: function(can, msg, target) { - var ui = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { + _search: function(can, msg, target) { const SEARCH = "search" + var ui = can.page.Append(can, target, [{view: SEARCH, list: [{type: "input", data: {placeholder: SEARCH}, onkeydown: function(event) { can.onkeypop.input(event, can); switch (event.key) { case "Enter": can.search(event, ["Search.onimport.select", "*", event.target.value]); break } }}] }]) - // ; can.onmotion.autosize(can, ui.input, 240, 120) can.user.isMobile && can.page.Modify(can, ui.first, {style: {float: "right"}}) + // can.onmotion.autosize(can, ui.input, 240, 120) }, _background: function(can, msg) { - if (can.user.isLocalFile) { return } if (can.user.isExtension) { return } + if (can.user.isLocalFile) { return } can.onlayout.background(can, msg.Option(can._BACKGROUND), document.body) }, _menu: function(can, msg, target) { @@ -120,10 +107,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }, _avatar: function(can, msg) { - !can.user.isLocalFile && can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf(can._AVATAR, msg.Option(can._AVATAR))}) + can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf(can._AVATAR, msg.Option(can._AVATAR))}) }, _time: function(can, target) { - can.core.Timer({interval: 1000}, function() { can.onimport.time(can, target) }) + can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) can.onappend.figure(can, {style: {"min-width": 306}}, "@date", function(sub) { can.search({}, ["Action.onexport.size"], function(msg, top) { can.page.Modify(can, sub._target, {style: {top: top, left: window.innerWidth-sub._target.offsetWidth}}) @@ -134,7 +121,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, time: function(can, target) { can.onlayout.topic(can) target.innerHTML = can.base.Time(null, "%w %H:%M:%S") }, - menu: function(can, cmds, cb) { // type item... + menu: function(can, cmds, cb) { return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { if (typeof item == "string") { return {view: ["menu", "div", can.user.trans(can, item)], onclick: function(event) { @@ -152,58 +139,60 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }]).first }, avatar: function(event, can, url) { - can.run(event, [can._ACTION, can._AVATAR, url], function(msg) { + !can.user.isLocalFile && can.run(event, [can._ACTION, can._AVATAR, url], function(msg) { can.onimport._avatar(can, msg) }) }, background: function(event, can, url) { - can.run(event, [can._ACTION, can._BACKGROUND, url], function(msg) { + !can.user.isLocalFile && can.run(event, [can._ACTION, can._BACKGROUND, url], function(msg) { can.onimport._background(can, msg) }) }, }) -Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - can.const( - "action", "share", "title", "river", "storm", - "grant", - "username", "background", "avatar", - ) +Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, list, cb, target) { + can.base.isFunc(cb) && cb() + }, + _const: [ + "action", "share", "grant", "title", "river", "storm", + "avatar", "username", "background", + ], + _trans: { + "river": "菜单", + "search": "搜索", + "setting": "设置", + "black": "黑色主题", + "white": "白色主题", + "print": "打印主题", + "clear": "清除背景", + "pack": "打包页面", + + "shareuser": "共享用户", + "usernick": "修改昵称", + "logout": "退出登录", + }, + onmain: function(can, msg) { function init() { can.run({}, [], function(msg) { - can.Conf(can._USERNAME, msg.Option("user.nick")||msg.Option("user.name")||can.Conf(can._USERNAME)) - can.Conf(can._BACKGROUND, msg.Option(can._BACKGROUND)) - can.Conf(can._AVATAR, msg.Option(can._AVATAR)) - - can.onimport._init(can, msg, list, function(msg) { - can.onengine.listen(can, "storm.select", function(msg, river, storm) { - can.Conf(can._RIVER, river), can.Conf(can._STORM, storm) - }) - - can.search(msg._event, ["Footer.onaction._init"]) - can.search(msg._event, ["Action.onaction._init"]) - can.search(msg._event, ["River.onaction._init"]) - can.search(msg._event, ["Search.onaction._init"]) - can.base.isFunc(cb) && cb(msg) + can.onimport._init(can, msg, [], function(msg) { + can.onengine.signal(can, "onlogin", msg) can.ondaemon._init(can) }, can._output) - can.page.Select(can, document.body, "fieldset.River", function(item) { - can.onmotion.toggle(can, item) - }) - }) } - can.page.Select(can, document.body, "fieldset.River", function(item) { - can.onmotion.hidden(can, item) - }) + can.search({}, ["River.onmotion.toggle"]) + }) }; can.search({}, ["River.onmotion.hidden"]) - can.onlayout.topic(can) + // 登录检查 can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { can.Conf(can._USERNAME, msg.Result())? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) }) }, + onstorm_select: function(can, msg, river, storm) { + can.Conf(can._RIVER, river), can.Conf(can._STORM, storm) + }, title: function(event, can) { - var args = {}; can.core.List(["pod", can._TITLE, "topic", "layout"], function(key) { + var args = {}; can.core.List(["pod", "title", "topic", "layout"], function(key) { var value = can.user.Search(can, key); value && (args[key] = value) }) can.user.jumps(can.user.MergeURL(can, args, true)) diff --git a/panel/River.js b/panel/River.js index 5adca586..c38ec0d2 100644 --- a/panel/River.js +++ b/panel/River.js @@ -101,20 +101,20 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, c }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { - can.const( - "title", "river", "storm", - ) - 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] == can._STORM) { can.onexport.storm(can, msg, word) } - }) - - can.onengine.listen(can, "action.touch", function() { - can.user.isMobile && can.onmotion.hidden(can) - can.onmotion.float.del(can, "carte") - }) + can.base.isFunc(cb) && cb() }, + _const: ["title", "river", "storm"], + onlogin: function(can, msg) { + can.onappend._action(can, can.Conf("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] == can._STORM) { can.onexport.storm(can, msg, word) } + }, + onaction_touch: function(can, msg) { + can.user.isMobile && can.onmotion.hidden(can) + }, + storm: function(event, can, river) { var list = can.sublist[river]; if (list) { return can.onmotion.Toggle(can, list) } @@ -130,7 +130,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, }, action: function(event, can, river, storm) { // can.onlayout._init(can) - can.onengine.signal(can, "storm.select", can.request(event, { + can.onengine.signal(can, "onstorm_select", can.request(event, { river: can.Conf(can._RIVER, river), storm: can.Conf(can._STORM, storm), })) diff --git a/panel/Search.js b/panel/Search.js index 1b258d45..10956cfd 100644 --- a/panel/Search.js +++ b/panel/Search.js @@ -10,7 +10,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, _word: function(can, msg, cmds, fields) { can.type = cmds[0] var sub = can.request({}, {word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index")}) - can.onengine.signal(can, "search", sub) + can.onengine.signal(can, "onsearch", sub) can.run(sub._event, cmds, function(sub) { can.list = sub.Table() can.onimport._init(can, sub, fields) @@ -35,7 +35,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } ) }, }) -Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, msg, list, cb, target) { +Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, meta, list, cb, target) { + can.base.isFunc(cb) && cb() + }, + onlogin: function(can, msg) { can.ui = can.page.Append(can, can._output, [ {input: ["word", function(event) { can.onkeypop.input(event, can) if (event.key == "Escape") { can.onmotion.hide(can) } @@ -50,7 +53,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] } }]}, {view: "content"}, {view: ["display", "table"]}, {view: "preview"}, - ]), can.base.isFunc(cb) && cb(msg) + ]) }, "关闭": function(event, can) { can.onmotion.hide(can) }, "清空": function(event, can) { can.onmotion.clear(can, can.ui.preview) }, diff --git a/proto.js b/proto.js index 37e6a53f..628b2294 100644 --- a/proto.js +++ b/proto.js @@ -72,7 +72,7 @@ var Volcanos = shy("火山架", {args: {}, pack: {}, libs: [], cache: {}}, [], f }, search: function(event, cmds, cb) { can.run && can.run(event, ["_search"].concat(cmds), cb, true) }, - const: function() { can.core.List(arguments, function(v) { can["_"+v.toUpperCase()] = v }) }, + const: function(list) { can.core.List(typeof list == "object"? list: arguments, function(v) { can["_"+v.toUpperCase()] = v }) }, Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, }; can = can || {}; can.__proto__ = proto