From efd69415a2a2cd5f951cda68e0ae21efb556b7b9 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sat, 26 Dec 2020 10:30:15 +0800 Subject: [PATCH] opt some --- frame.js | 8 +++---- index.css | 19 ++------------- lib/misc.js | 4 ++-- lib/page.js | 9 +++++--- pane/Action.js | 27 ++++++++++++++++++++++ pane/Header.css | 9 ++++++++ pane/Header.js | 61 ++++++++++++++++++++++++++----------------------- pane/River.js | 6 ++--- pane/Search.js | 49 +++++++++++---------------------------- proto.js | 7 +++--- 10 files changed, 100 insertions(+), 99 deletions(-) diff --git a/frame.js b/frame.js index 99006c80..e6bae3fa 100644 --- a/frame.js +++ b/frame.js @@ -1,13 +1,11 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, list, cb, target) { can.core.Next(list, function(item, next) { item.type = "pane" can.onappend._init(can, item, item.list, function(pane) { - pane.Status = function(key, value) { pane.run({}, ["search", "Footer.onimport."+key, value]) } - + pane.Status = pane.Status || function(key, value) { pane.run({}, ["search", "Footer.onimport."+key, value]) } pane.onaction && pane.onappend._action(pane, pane._action, item.action||pane.onaction.list) + pane.run = function(event, cmds, cb, silent) { var msg = pane.request(event); cmds = cmds || [] - return (can.onengine[cmds[0]]||can.onengine[meta.main.engine]||can.onengine.remote)(event, can, msg, pane, cmds, function(msg) { - typeof cb == "function" && cb(msg) - }) + return (can.onengine[cmds[0]]||can.onengine[meta.main.engine]||can.onengine.remote)(event, can, msg, pane, cmds, cb) }, can[item.name] = pane, next() }, target) }, function() { diff --git a/index.css b/index.css index 1a99aafa..e14b86c8 100644 --- a/index.css +++ b/index.css @@ -187,33 +187,18 @@ fieldset.input.date { z-index:11; } -div.menu { +div.carte { position:absolute; background:#295b61; color:white; padding:4px; } -div.menu div.item { +div.carte div.item { padding:3px 12px; cursor:pointer; } -div.menu div.item:hover { - background:red; -} -div.carte { - color:cyan; - background:black; - border:solid 2px red; - position:fixed; - z-index:100; -} -div.carte div.item { - padding:0 5px; -} div.carte div.item:hover { background:red; - border:solid 2px yellow; - cursor:pointer; } div.upload { diff --git a/lib/misc.js b/lib/misc.js index 1c0fd685..6a1cb836 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -22,7 +22,7 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg }) return can.core.List(msg[max], function(value, index, array) { var one = {}, res - can.core.List(msg.append, function(key) { one[key] = (msg[key]&&msg[key][index]||"").trim() }) + can.core.List(msg.append, function(key) { one[key] = (msg[key]&&msg[key][index]||"") }) return typeof cb == "function" && (res = cb(one, index, array)) && res != undefined && res || one }) }, @@ -58,7 +58,7 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg }; i >= msg.append.length && msg.append.push(key) msg[key] = msg[key] || [] - msg[key].push(""+(typeof value == "string"? value: JSON.stringify(value))+"") + msg[key].push(typeof value == "string" || typeof value == "function"? value: JSON.stringify(value)) return msg }, Echo: function(res) { msg.result = msg.result || [] diff --git a/lib/page.js b/lib/page.js index a615e2bb..4a846a8d 100644 --- a/lib/page.js +++ b/lib/page.js @@ -117,8 +117,8 @@ Volcanos("page", {help: "网页模块", data.name = data.name || name data.className = data.className || data.name data.placeholder = data.placeholder || data.name - data.placeholder = can.user.trans(can, data.placeholder.split(".").pop()) - data.title = can.user.trans(can, data.title || data.placeholder) + data.placeholder = data.placeholder.split(".").pop() + data.title = data.title || data.placeholder data.autocomplete = "none" data.onfocus = data.onfocus || function(event) { @@ -164,6 +164,9 @@ Volcanos("page", {help: "网页模块", data.onload = list[1] } + data.placeholder && (data.placeholder = can.user.trans(can, data.placeholder)) + data.title && (data.title = can.user.trans(can, data.title)) + // 创建节点 name = name || data.className || type || "" !data.name && item.name && (data.name = item.name) @@ -266,7 +269,7 @@ Volcanos("page", {help: "网页模块", }) }, - Display: function(text) { + Display: function(text) { if (typeof text != "string") { return "" } if (text.startsWith("http://") || text.startsWith("https://") || text.startsWith("ftp://")) { var ls = text.split(" ") return ""+ls[0]+""+ls.slice(1).join(" ") diff --git a/pane/Action.js b/pane/Action.js index bce8c5b0..650ae88b 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -66,6 +66,33 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.onimport._init(can, msg, list, cb, can._output) }) }) + can.onengine.listen(can, "search", function(msg, word) { + if (word[0] != "*" && word[0] != "fieldset") { return } + + 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 } + + can.core.List(fields, function(key) { + switch (key) { + case "type": + msg.Push(key, "fieldset") + break + case "name": + msg.Push(key, item.innerHTML) + break + case "text": + msg.Push(key, function() { + var input = can.page.Select(can, item.parentNode, "input.args")[0] + input && input.focus() + }) + break + default: + msg.Push(key, "") + } + }) + }) + }) }, }) Volcanos("onexport", {help: "导出数据", list: [], diff --git a/pane/Header.css b/pane/Header.css index 44a50978..62eed618 100644 --- a/pane/Header.css +++ b/pane/Header.css @@ -29,3 +29,12 @@ fieldset.Header>div.output>div.state { float:right; } +fieldset.Header>div.output div.menu { + height:22px; padding:5px; + cursor:pointer; + float:left; +} +fieldset.Header>div.output div.menu:hover { + border-bottom:solid 2px red; + background-color:#2e515f; +} diff --git a/pane/Header.js b/pane/Header.js index 7cb61e62..ab6724cc 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -2,6 +2,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._trans = { "river": "菜单", + "search": "搜索", "setting": "设置", "pack": "打包页面", "white": "白色主题", @@ -13,6 +14,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onimport._state(can, msg, target) can.onimport._search(can, msg, target) can.onimport._agent(can, msg, target) + can.onimport._menu(can, msg, target) typeof cb == "function" && cb(msg) }, _title: function(can, msg, target) { @@ -23,21 +25,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }]) }) }, - _search: function(can, msg, target) { - can.user.isMobile || (can.search = 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.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break - } - }, }], }]).input) - - var ui = can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["river", "setting"]: ["setting"], function(item) { - return {view: ["menus", "div", item], onclick: function(event) { - var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item) - }} - })) - }, _state: function(can, msg, target) { can.core.List(can.Conf(STATE)||["time", USERNAME], function(item) { can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], @@ -50,6 +37,15 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }]) }) }, + _search: function(can, msg, target) { + can.user.isMobile || (can.search = 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.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break + } + }, }], }]).input) + }, _agent: function(can, msg, target) { if (can.user.isMobile) { can.onaction.River(can) @@ -63,9 +59,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.user.isWeiXin && can.onimport._weixin(can) }, _weixin: function(can, msg) { can.run({}, ["action", "wx"], function(msg) { - can.user.toast(can, "weixin") can.require(["https://res.wx.qq.com/open/js/jweixin-1.6.0.js"], function(can) { - can.user.toast(can, "weixin") can.user.agent = { __proto__: can.user.agent, getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) { typeof cb == "function" && cb({latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) }) @@ -89,9 +83,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }) }, + _menu: function(can, msg, target) { + can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["river", "setting"]: ["setting"], function(item) { + return {view: ["menus", "div", item], onclick: function(event) { + var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item) + }} + })) + can.menu = can.page.Append(can, target, [{view: ["menu", "some"], style: {float: "left"}}]).first + }, - topic: function(can, topic) { - can.user.topic(can, topic || can._topic || can.user.Search(can, TOPIC) || can.user.Search(can, POD) || (can.base.isNight()? "black": "white")) + topic: function(can, topic) { topic && (can._topic = topic) + can.user.topic(can, can._topic || can.user.Search(can, TOPIC) || can.user.Search(can, POD) || (can.base.isNight()? "black": "white")) }, time: function(can, target) { target.innerHTML = can.base.Time(null, "%w %H:%M:%S") @@ -99,19 +101,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, menu: function(can, cmds, cb) { + can.onmotion.clear(can, can.menu) can.core.List(cmds, function(item) { if (typeof item == "string") { - can.page.Append(can, can._output, [{view: ["menus", "div", item], onclick: function(event) { + can.page.Append(can, can.menu, [{view: ["menu", "div", item], onclick: function(event) { typeof cb == "function" && cb(event, item) }}]) + } else if (item.length > 0) { - can.page.Append(can, can._output, [{view: ["menus", "div", item[0]], onclick: function(event) { + can.page.Append(can, can.menu, [{view: ["menu", "div", item[0]], onclick: function(event) { var ui = can.user.carte(event, can, can.onaction, item.slice(1), cb) - can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}, className: "menu"}) + can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) }}]) } else if (typeof item == "object") { - + can.page.Append(can, can.menu, [item]) } }) }, @@ -138,7 +142,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, }, username: function(event, can) { var ui = can.user.carte(event, can, can.onaction, ["logout"]) - can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}, className: "menu"}) + can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) }, logout: function(event, can) { can.user.logout(can) @@ -163,12 +167,11 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) }, setting: function(event, can) { - var ui = can.user.carte(event, can, can.onaction, ["pack", "white", "black", "toast"]) - can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}, className: "menu"}) + var ui = can.user.carte(event, can, can.onaction, ["pack", "white", "black"]) + can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) }, - black: function(event, can, button) { can.user.topic(can, can._topic = button) }, - white: function(event, can, button) { can.user.topic(can, can._topic = button) }, - toast: function(event, can, button) { can.user.toast(can, "nice", "hi", 1000000)}, + black: function(event, can, button) { can.onimport.topic(can, button) }, + white: function(event, can, button) { can.onimport.topic(can, button) }, River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) }, Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) }, diff --git a/pane/River.js b/pane/River.js index 430913ec..d24145fe 100644 --- a/pane/River.js +++ b/pane/River.js @@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can._main_river = can.user.Search(can, RIVER) || (can.user.isMobile||can.user.isExtension? "product": "project") can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile||can.user.isExtension? "office": "studio") - can.run({}, ["search", "Header.onimport.menu", ["操作", "添加"]], function(event, item) { + can.run({}, ["search", "Header.onimport.menu", ["群组", "添加用户", "添加设备", "添加应用"], ["应用", "添加工具"]], function(event, item) { var cb = can.ondetail[item]; typeof cb == "function" && cb(event, can, item, can.Conf(RIVER), can.Conf(STORM)) }) @@ -16,7 +16,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, // 右键点击 var ui = can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) { can.ondetail[item](event, can, item, value.hash) - }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}, className: "menu"}) + }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}}) }) if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view } @@ -58,7 +58,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, // 右键点击 var ui = can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { can.ondetail[item](event, can, item, storm.hash, river) - }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}, className: "menu"}) + }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}}) }} }) }]).first, list.children.length > 0 && list.children[select].click() diff --git a/pane/Search.js b/pane/Search.js index e8eea56f..80d0e581 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -6,14 +6,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.Status("count", index+1) return {text: [value, "td"], onclick: function(event) { - if (line.type == "fieldset") { - can.page.Select(can, document.body, "fieldset.pane.Action fieldset.plugin>legend", function(item) { - if (item.innerHTML == line.name) { - var cb = can.page.Select(can, item.parentNode, "input.args")[0] - can.onmotion.hide(can) - cb && cb.focus() - } - }) + if (typeof line.text == "function") { + can.onmotion.hide(can) + line.text() + return } can.page.Append(can, can.ui.table, [{td: can.core.List(fields, function(item) { @@ -27,40 +23,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }, - select: function(can, msg, cmd, cb) { can.onmotion.clear(can) + select: function(can, msg, cmds, cb) { can.onmotion.clear(can) var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") - function search(word, cb) { cmd[1] = word - if (word == "" && can.list && can.list[0] && can.list[0].type == "fieldset") { - can.page.Select(can, document.body, "fieldset.pane.Action fieldset.plugin>legend", function(item) { - if (item.innerHTML == can.list[0].name) { - var cb = can.page.Select(can, item.parentNode, "input.args")[0] - can.onmotion.hide(can) - cb && cb.focus() - } - }) + function search(word, cb) { cmds[1] = word + if (word == "" && can.list && can.list[0] && typeof can.list[0].text == "function") { + can.onmotion.hide(can) + can.list[0].text() return } - var msg = can.request({}, {fields: fields.join(",")}) - can.page.Select(can, document.body, "fieldset.pane.Action fieldset.plugin>legend", function(item) { - if (item.innerHTML.indexOf(word) == -1) { return } + var msg = can.request({}, {fields: fields.join(","), word: cmds}) + can.onengine.trigger(can, msg, "search") - can.core.List(fields, function(key) { - switch (key) { - case "type": - msg.Push(key, "fieldset") - break - case "name": - msg.Push(key, item.innerHTML) - break - default: - msg.Push(key, "") - } - }) - }) can.onmotion.clear(can, can.ui.content) - can.run(msg._event, cmd, function(msg) { + can.run(msg._event, cmds, function(msg) { can.list = msg.Table() can.onimport._table(can, msg, fields, search) typeof cb == "function" && cb(msg) @@ -90,7 +67,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.show(can) can.ui.input.focus() - search(cmd[1]) + search(cmds[1]) }, }) Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, msg, list, cb, target) { diff --git a/proto.js b/proto.js index 45fc869a..9ce47396 100644 --- a/proto.js +++ b/proto.js @@ -11,10 +11,10 @@ function shy(help, meta, list, cb) { cb.list = next("object") || [] return cb }; var _can_name = "" -var Volcanos = shy("火山架", {cache: {}, libs: [], _target: document.body}, [], function(name, can, libs, cb) { +var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, libs, cb) { var meta = arguments.callee.meta, list = arguments.callee.list if (typeof name == "object") { var Config = name; _can_name = "" - meta.libs = Config.libs, meta.volcano = Config.volcano + meta.volcano = Config.volcano, meta.libs = Config.libs // 预加载 var Preload = Config.libs; Config.panes.forEach(function(pane) { @@ -23,7 +23,7 @@ var Volcanos = shy("火山架", {cache: {}, libs: [], _target: document.body}, [ // 根模块 name = Config.name, can = {_follow: Config.name, - _width: window.innerWidth, _height: window.innerHeight, + _target: document.body, _width: window.innerWidth, _height: window.innerHeight, }, libs = Preload.concat(Config.volcano), cb = function(can) { can.onengine._init(can, can.Conf(Config), Config.panes, function(msg) { can.base.Log(name, "run", window.can = can) @@ -32,7 +32,6 @@ var Volcanos = shy("火山架", {cache: {}, libs: [], _target: document.body}, [ }, can.onlayout._init(can, can._target, window.innerWidth, window.innerHeight-8) }, can._target) } - } list.push(can = can || {}), can.__proto__ = {__proto__: Volcanos.meta, _name: name, _load: function(name, cb) {