diff --git a/frame.js b/frame.js index c0bd3d3a..06c2857d 100644 --- a/frame.js +++ b/frame.js @@ -213,7 +213,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) can.onappend._init(can, meta, list, function(sub) { can.core.Timer(10, function() { for (var k in sub._inputs) { sub._inputs[k]._target.focus(); break } }) - typeof cb == "function" && cb(sub) + can.base.isFunc(cb) && cb(sub) }, target) }, Pack: function(cmds, slient) { @@ -231,7 +231,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"") sub.page.ClassList.add(sub, field, meta.index? meta.index.split(".").pop(): meta.name) - typeof cb == "function" && cb(sub) + can.base.isFunc(cb) && cb(sub) meta.option = can.base.Obj(meta.option||"{}", {}) meta.inputs && sub.onappend._option(sub, meta, sub._option) }); return sub @@ -308,7 +308,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1") if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return } if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return } - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) }) return @@ -317,7 +317,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1") if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return } if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return } - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) if (silent) { return } var display = msg.Option("_display") || meta.display || meta.feature.display || "/plugin/table.js" @@ -380,7 +380,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split) node[name] || (node[name] = can.page.Append(can, node[last], [{view: ["item", "div", value+(index==array.length-1?"":split)], onclick: function(event) { - index < array.length - 1? can.onmotion.toggle(can, node[name]): typeof cb == "function" && cb(event, item) + index < array.length - 1? can.onmotion.toggle(can, node[name]): can.base.isFunc(cb) && cb(event, item) }}, {view: "list", style: {display: "none"}}]).last) }) }); return node @@ -506,7 +506,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) { meta.type == "story" && sub.page.Remove(sub, sub._legend) - typeof cb == "function" && cb(sub, meta) + can.base.isFunc(cb) && cb(sub, meta) + sub._legend.onclick = function(event) { + var list = can.page.Select(can, sub._option, '.args', function(item) { return item.value||"" }) + can.user.share(can, can.request(event), ["action", "share", "type", "field", + "text", JSON.stringify(list), + "river", meta.ctx||meta.key||"", "storm", meta.index||meta.cmd||meta.name]) + } }, target||can._output) }, plugin: function(can, meta, cb, target) { meta = meta || {} @@ -521,7 +527,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, sub.onmotion.hidden(sub, sub._option) sub.onmotion.hidden(sub, sub._action) sub.onmotion.hidden(sub, sub._status) - typeof cb == "function" && cb(sub) + can.base.isFunc(cb) && cb(sub) }, target) }, }, [], function(can) {}) @@ -577,7 +583,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) { resize: function(can, name, cb) { var list = []; can.onengine.listen(can, name, function(width, height) { can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() { - typeof cb == "function" && cb(event) + can.base.isFunc(cb) && cb(event) }) }) }, @@ -649,10 +655,10 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe } var map = can.onkeypop._mode[mode] - var cb = map && map[event.key]; if (typeof cb == "function" && event.key.length > 1) { + var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list } - var cb = map && map[event.key.toLowerCase()]; if (typeof cb == "function" && event.key.length > 1) { + var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list } @@ -797,7 +803,7 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can, targe can.page.Modify(can, target, {style: {opacity: 1-(index+1)/time.length}}) }, function() { can.page.Modify(can, target, {style: {display: "none"}}) - typeof cb == "function" && cb + can.base.isFunc(cb) && cb() }) }, @@ -883,7 +889,7 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can, targe can.page.Select(can, target, "div.output", function(item, index) { index == 0 && (item.style.height = "") }), target.style.height = "" - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, move: function(can, target, layout) { var begin diff --git a/lib/base.js b/lib/base.js index 9b042820..2fc2c985 100644 --- a/lib/base.js +++ b/lib/base.js @@ -1,4 +1,5 @@ Volcanos("base", {help: "数据类型", + isFunc: function(cb) { return typeof cb == "function" }, Int: function(value, def) { return parseInt(value)||def||0 }, Obj: function(value, def) { try { diff --git a/lib/user.js b/lib/user.js index 965a9dda..a6eed6f6 100644 --- a/lib/user.js +++ b/lib/user.js @@ -94,12 +94,10 @@ Volcanos("user", {help: "用户模块", agent: { }, share: function(can, msg, cmd) { can.run(msg._event, cmd||["action", "share"], function(msg) { - var src = can.user.MergeURL(can, {_path: "/share/"+msg.Result()}, true) var ui = can.user.toast(can, { - title: can.page.Format("a", "/share/"+msg.Result()+"?share="+msg.Result()), - content: can.page.Format("img", src+"/share"), + title: msg.Append("name"), content: msg.Append("text"), button: ["close"], duration: 100000, - width: 300, height: 300, + height: 300, }) }) }, @@ -122,7 +120,6 @@ Volcanos("user", {help: "用户模块", agent: { can.misc.WSS(can, {type: "chrome"}, function(event, msg, cmd, arg) { if (!msg) { return } if (cmd == "pwd") { can.user.toast(can, arg[2], arg[1], 1000000) - // can.user.share(can, can.request(event, {name: arg[0]}), ["action", "apply"]) msg.Reply() return } @@ -279,8 +276,15 @@ Volcanos("user", {help: "用户模块", agent: { }, logout: function(can) { if (can.user.confirm("logout?")) { - can.user.Cookie(can, "sessid", "") - can.user.reload(true) + can.run({}, ["action", "logout"], function(msg) { + can.user.Cookie(can, "sessid", "") + + if (can.user.Search(can, "share")) { + can.user.Search(can, "share", "") + } else { + can.user.reload(true) + } + }) } }, diff --git a/page/index.css b/page/index.css index 8dd28185..f1c0230f 100644 --- a/page/index.css +++ b/page/index.css @@ -266,7 +266,7 @@ div.story[data-type=spark] span:hover { fieldset>form.option>div.item { float:left; margin-right:3px; - min-height:26px; vertical-align:middle; + min-height:25px; vertical-align:middle; } fieldset>form.option>div.item label { display:none; diff --git a/panel/Action.js b/panel/Action.js index 488ff16d..cd65efdc 100644 --- a/panel/Action.js +++ b/panel/Action.js @@ -1,25 +1,26 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) { - var river = can.Conf("river"), storm = can.Conf("storm") + var river = can.Conf(can._RIVER), storm = can.Conf(can._STORM) can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { - item.width = parseInt(can.Conf("width")), item.height = parseInt(can.Conf("height")) + item.width = parseInt(can.Conf(can._WIDTH)), item.height = parseInt(can.Conf(can._HEIGHT)) item.feature = can.base.Obj(item.feature||item.meta) item.inputs = can.base.Obj(item.inputs||item.list) - item.type = "plugin" + item.type = can._PLUGIN can.onappend.plugin(can, item, function(sub, meta) { can.onimport._plugin(can, river, storm, sub, meta), next() sub._option.dataset = sub._option.dataset || {} item.id && (sub._option.dataset.id = item.id) + sub._target.Meta = item }) }, function() { - can.onaction._layout(can, can.Conf("layout")||can.user.Search(can, "layout")) + can.onaction._layout(can, can.Conf(can._LAYOUT)||can.user.Search(can, can._LAYOUT)) }) }, _plugin: function(can, river, storm, sub, item) { sub.run = function(event, cmds, cb) { var msg = sub.request(event) var toast = msg.Option("_toast") && can.user.toast(can, msg.Option("_toast"), "", 1000000) return can.run(event, (can.onengine[cmds[0]]? []: [river, storm, item.id||item.index||item.key+"."+item.name]).concat(cmds), function(msg) { - toast && toast.Close(), typeof cb == "function" && cb(msg) + toast && toast.Close(), can.base.isFunc(cb) && cb(msg) }) }, can._plugins = (can._plugins||[]).concat([sub]) @@ -35,20 +36,27 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) }}]) }, _share: function(can, msg, share) { - can.user.topic(can, can.user.Search(can, "topic")||msg.Option("topic")||"white") - can.user.title(can.user.Search(can, "title")||msg.Option("title")) - can.Conf("river", "_share"), can.Conf("storm", share) + can.Conf(can._WIDTH, window.innerWidth) + can.Conf(can._HEIGHT, window.innerHeight) + can.user.topic(can, can.user.Search(can, can._TOPIC)||msg.Option(can._TOPIC)||"white") + can.user.title(can.user.Search(can, can._TITLE)||msg.Option(can._TITLE)) + can.Conf(can._RIVER, "_share"), can.Conf(can._STORM, share) can.onimport._init(can, msg) }, + _menu: function(can) { + !can.user.isMobile && can.run({}, [can._SEARCH, "Header.onimport.menu", can._ACTION, + ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], + ], function(event, key) { can.onaction._layout(can, key) }) + }, }) Volcanos("onengine", {help: "解析引擎", list: [], - engine: function(event, can, msg, panel, cmds, cb) { + engine: function(event, page, msg, can, cmds, cb) { var river = can.onengine.river[cmds[0]] var storm = river && river.storm[cmds[1]] if (!storm || cmds.length != 2) { return false } - if (storm.index) { cmds = ["action", "command"].concat(storm.index) - can.misc.Runs(event, can, {names: panel._name}, cmds, cb) + if (storm.index) { cmds = [can._ACTION, "command"].concat(storm.index) + can.misc.Runs(event, can, {names: can._name}, cmds, cb) } else { can.core.List(storm.action, function(value) { msg.Push("name", value.name||"") @@ -57,13 +65,20 @@ Volcanos("onengine", {help: "解析引擎", list: [], msg.Push("feature", JSON.stringify(value.feature||{})) msg.Push("index", value.index||"") msg.Push("args", value.args||"[]") - }), typeof cb == "function" && cb(msg) + }), can.base.isFunc(cb) && cb(msg) } return true }, }) Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { - var share = can.user.Search(can, "share"); if (share) { + can.const( + "output", "fields", + "search", "action", "share", "river", "storm", + "title", "topic", "layout", "width", "height", + "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) { can.onimport._share(can, msg, share) @@ -75,8 +90,8 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.onaction._select(can, msg, river, storm) }) - can.onengine.listen(can, "search", function(msg, word) { - if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg, word) } + can.onengine.listen(can, can._SEARCH, function(msg, word) { + if (word[0] == "*" || word[0] == can._PLUGIN) { can.onexport.plugin(can, msg, word) } }) can._target.ontouchstart = function(event) { @@ -86,13 +101,11 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, 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({}, { - width: can.Conf("width"), height: can.Conf("height"), + width: can.Conf(can._WIDTH), height: can.Conf(can._HEIGHT), })) }) }) - !can.user.isMobile && can.run({}, ["search", "Header.onimport.menu", "action", - ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], - ], function(event, key) { can.onaction._layout(can, key) }) + can.onimport._menu(can) }, _layout: function(can, key) { if (!key) { return } var trans = { @@ -103,7 +116,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, "自由布局": "free", } - key = trans[key]||key, can.Conf("layout", key) + key = trans[key]||key, can.Conf(LAYOUT, key) can.page.Modify(can, can._action, {className: "action "+key}) can.page.Modify(can, can._output, {className: "output "+key}) @@ -113,13 +126,13 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, } }, _select: function(can, msg, river, storm) { - function key(name) { return can.Conf("river")+"."+can.Conf("storm")+"."+name} - can.page.Cache(key("action"), can._action, can._output.scrollTop+1) - can.page.Cache(key("output"), can._output, can._output.scrollTop+1) + function key(name) { return can.Conf(can._RIVER)+"."+can.Conf(can._STORM)+"."+name} + can.page.Cache(key(can._ACTION), can._action, can._output.scrollTop+1) + can.page.Cache(key(can._OUTPUT), can._output, can._output.scrollTop+1) - can.Conf("river", river), can.Conf("storm", storm) // 转场 - var position = can.page.Cache(key("output"), can._output) - var position = can.page.Cache(key("action"), can._action) + can.Conf(can._RIVER, river), can.Conf(can._STORM, storm) // 转场 + var position = can.page.Cache(key(can._OUTPUT), can._output) + var position = can.page.Cache(key(can._ACTION), can._action) if (position) { can._output.scrollTo(0, position-1); return } can.run({}, [river, storm], function(msg) { @@ -127,7 +140,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.onimport._init(can, msg) } else { var msg = can.request({}, {river: river, storm: storm}) - can.run(msg._event, ["search", "River.ondetail.添加工具"]) + can.run(msg._event, [can._SEARCH, "River.ondetail.添加工具"]) } }) }, @@ -142,20 +155,31 @@ Volcanos("onexport", {help: "导出数据", list: [], size: function(can, msg) { msg.Option("top", can._target.offsetTop) msg.Option("left", can._target.offsetLeft) - msg.Option("width", can._target.offsetWidth) - msg.Option("height", can._target.offsetHeight) + msg.Option(can._WIDTH, can._target.offsetWidth) + msg.Option(can._HEIGHT, can._target.offsetHeight) }, - layout: function(can, msg) { return can.Conf("layout") }, + layout: function(can, msg) { return can.Conf(LAYOUT) }, plugin: function(can, msg, word) { - var fields = (msg.Option("fields")||"ctx,cmd,type,name,text").split(",") + var fields = (msg.Option(can._FIELDS)||"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 } + var meta = item.parentNode.Meta can.core.List(fields, function(key) { switch (key) { + case "context": + msg.Push(key, meta.ctx||meta.key||"") + break + case "command": + msg.Push(key, meta.index||meta.cmd||meta.name) + break + case "argument": + var list = can.page.Select(can, item.nextSibling, '.args', function(item) { return item.value||"" }) + msg.Push(key, JSON.stringify(list)) + break case "ctx": msg.Push(key, "web.chat"); break - case "cmd": msg.Push(key, "action"); break - case "type": msg.Push(key, "plugin"); break + case "cmd": msg.Push(key, can._ACTION); break + case "type": msg.Push(key, can._PLUGIN); break case "name": msg.Push(key, item.innerHTML); break case "text": msg.Push(key, shy("跳转", function() { diff --git a/panel/Footer.js b/panel/Footer.js index 93efe8f0..94cff676 100644 --- a/panel/Footer.js +++ b/panel/Footer.js @@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onimport._title(can, msg, target) can.onimport._toast(can, msg, target) can.onimport._state(can, msg, target) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, _title: function(can, msg, target) { can.user.isMobile || can.core.List(msg.result, function(title) { diff --git a/panel/Header.js b/panel/Header.js index f19f6896..01965367 100644 --- a/panel/Header.js +++ b/panel/Header.js @@ -1,9 +1,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - if (can.user.Search(can, "grant")) { - if (can.user.confirm("grant "+can.user.Search(can, "grant"))) { - can.run(event, ["action", "grant", "space", can.user.Search(can, "grant")]) + 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", "") + can.user.Search(can, GRANT, "") return } @@ -32,22 +32,22 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onimport._agent(can, msg, target) can.onimport._menu(can, msg, target) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) can.page.Modify(can, can._output, {onmouseover: function(event) { can.menu && can.page.Remove(can, can.menu.first) }}) }, _title: function(can, msg, target) { - can.user.title(can.user.Search(can, "title")||can.user.Search(can, "pod")) + can.user.title(can.user.Search(can, can._TITLE)||can.user.Search(can, "pod")) !can.user.isMobile && can.core.List(msg.result||["github.com/shylinux/contexts"], function(item) { - can.page.Append(can, target, [{view: ["title", "div", item], onclick: function(event) { + can.page.Append(can, target, [{view: [can._TITLE, "div", item], onclick: function(event) { can.onaction.title(event, can) }}]) }) }, _state: function(can, msg, target) { - can.core.List(can.base.Obj(msg.Option("state"), can.Conf("state")||["time", "username"]), function(item) { - if (item == "avatar") { + 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.onaction.carte(event, can, [can.page.Format("img", can.Conf(item), 160)]) }}]}]) @@ -62,22 +62,22 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }, _search: function(can, msg, target) { - var ui = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { + var ui = can.page.Append(can, target, [{view: can._SEARCH, list: [{type: "input", data: {placeholder: can._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 + case "Enter": can.run(event, [can._SEARCH, "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"}}) }, _avatar: function(can, msg) { - !can.user.isLocalFile && can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf("avatar", msg.Option("avatar"))}) + !can.user.isLocalFile && can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf(can._AVATAR, msg.Option(can._AVATAR))}) }, _background: function(can, msg) { - !can.user.isLocalFile && can.onlayout.background(can, msg.Option("background"), document.body) + !can.user.isLocalFile && can.onlayout.background(can, msg.Option(can._BACKGROUND), document.body) }, _daemon: function(can, msg, target) { can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||""}, function(event, msg, cmd, arg) { if (!msg) { return } - can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) { + can.run(event, [can._SEARCH].concat(msg["detail"]||[]), function(msg) { msg.Reply() }) }) @@ -95,13 +95,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.user.isWeiXin && can.onimport._weixin(can) }, _menu: function(can, msg, target) { - can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, "pod")? ["header", "river"]: + can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, "pod")? ["header", can._RIVER]: ["header", ["setting", "black", "white", "print", "pack"]], function(event, item) { can.core.CallFunc([can.onaction, item], [event, can, item]) }) }, - _weixin: function(can, msg) { can.run({}, ["action", "agent"], function(msg) { + _weixin: function(can, msg) { can.run({}, [can._ACTION, "agent"], function(msg) { can.require(can.base.Obj(msg.Option("script")), function(can) { wx.config({debug: msg.Option("debug") == "true", appId: msg.Option("appid"), signature: msg.Option("signature"), @@ -109,10 +109,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, jsApiList: can.core.Item({ scanQRCode: function(cb) { wx.scanQRCode({needResult: cb? 1: 0, scanType: ["qrCode","barCode"], success: function (res) { - typeof cb == "function" && cb(res.resultStr) + can.base.isFunc(cb) && cb(res.resultStr) } }) }, getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) { - typeof cb == "function" && cb({type: "gcj02", name: "当前位置", text: "当前位置", latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) }) + can.base.isFunc(cb) && cb({type: "gcj02", name: "当前位置", text: "当前位置", latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) }) } }) }, openLocation: function(msg) { wx.openLocation({ latitude: parseInt(msg.Option("latitude"))/100000, @@ -121,7 +121,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, scale: msg.Option("scale")||14, infoUrl: msg.Option("link"), }) }, chooseImage: function(cb, count) { wx.chooseImage({count: count||9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (res) { - typeof cb == "function" && cb(res.localIds) + can.base.isFunc(cb) && cb(res.localIds) } }) }, }, function(key, value) { return can.user.agent[key] = value, key }), }) @@ -139,7 +139,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, 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", item], onclick: function(event) { - typeof cb == "function" && cb(event, item) + can.base.isFunc(cb) && cb(event, item) }} } else if (item.length > 0) { @@ -153,32 +153,38 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }]).first }, avatar: function(event, can, url) { - can.run(event, ["action", "avatar", url], function(msg) { + can.run(event, [can._ACTION, can._AVATAR, url], function(msg) { can.onimport._avatar(can, msg) }) }, background: function(event, can, url) { - can.run(event, ["action", "background", url], function(msg) { + 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( + "search", "action", "share", "title", "river", "storm", + "grant", + "username", "background", "avatar", + ) + function init() { can.run({}, [], function(msg) { - can.Conf("username", msg.Option("user.nick")||msg.Option("user.name")) - can.Conf("background", msg.Option("background")) - can.Conf("avatar", msg.Option("avatar")) + 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("river", river), can.Conf("storm", storm) + can.Conf(can._RIVER, river), can.Conf(can._STORM, storm) }) - can.run(msg._event, ["search", "Footer.onaction._init"]) - can.run(msg._event, ["search", "Action.onaction._init"]) - can.run(msg._event, ["search", "River.onaction._init"]) - can.run(msg._event, ["search", "Search.onaction._init"]) - typeof cb == "function" && cb(msg) + can.run(msg._event, [can._SEARCH, "Footer.onaction._init"]) + can.run(msg._event, [can._SEARCH, "Action.onaction._init"]) + can.run(msg._event, [can._SEARCH, "River.onaction._init"]) + can.run(msg._event, [can._SEARCH, "Search.onaction._init"]) + can.base.isFunc(cb) && cb(msg) }, can._output) can.page.Select(can, document.body, "fieldset.River", function(item) { @@ -191,12 +197,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, can.onlayout.topic(can) can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { - msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) + can.Conf(can._USERNAME, msg.Result())? init(): + msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) }) }, title: function(event, can) { - var args = {}; can.core.List(["pod", "title", "topic", "layout"], function(key) { + var args = {}; can.core.List(["pod", can._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)) @@ -220,7 +227,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, }) var msg = can.request(event, { name: meta.name, content: JSON.stringify(Volcanos.meta.pack), - river: can.Conf("river"), storm: can.Conf("storm"), + river: can.Conf(can._RIVER), storm: can.Conf(can._STORM), }) var toast = can.user.toast(can, "打包中...", "webpack", 1000000) @@ -235,13 +242,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, can.onlayout.figure(event, can, can.menu.first) }, shareuser: function(event, can) { - can.user.share(can, can.request(event), ["action", "share", "type", "login"]) + can.user.share(can, can.request(event), [can._ACTION, can._SHARE, "type", "login"]) }, usernick: function(event, can) { - can.user.input(event, can, [{_input: "text", name: "usernick", value: can.Conf("username")}], function(ev, button, data, list, args) { + can.user.input(event, can, [{_input: "text", name: "usernick", value: can.Conf(can._USERNAME)}], function(ev, button, data, list, args) { can.run(event, ["usernick", list[0]], function(msg) { can.page.Select(can, can._output, "div.username", function(item) { - can.page.Modify(can, item, can.Conf("username", list[0])) + can.page.Modify(can, item, can.Conf(can._USERNAME, list[0])) }), can.user.toast(can, "修改成功") }, true) }) @@ -249,8 +256,8 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, clear: function(event, can, button) { can.onimport.background(event, can, "") }, logout: function(event, can) { can.user.logout(can) }, - River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) }, - Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) }, + River: function(can) { can.run({}, [can._SEARCH, "River.onmotion.toggle"]) }, + Footer: function(can) { can.run({}, [can._SEARCH, "River.onmotion.autosize"]) }, }) Volcanos("onexport", {help: "导出数据", list: [], height: function(can) { return can._target.offsetHeight }, diff --git a/panel/River.js b/panel/River.js index a264b80c..5db48cdf 100644 --- a/panel/River.js +++ b/panel/River.js @@ -1,12 +1,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can._main_river = can.user.Search(can, "river") || Volcanos.meta.args.river || "project" - can._main_storm = can.user.Search(can, "storm") || Volcanos.meta.args.storm || "studio" - + can._main_river = "project", can._main_storm = "studio" if (can.user.isExtension) { can._main_river = "product", can._main_storm = "chrome" } if (can.user.isMobile) { can._main_river = "product", can._main_storm = "office" } if (can.user.isWeiXin) { can._main_river = "service", can._main_storm = "wx" } + can._main_river = can.user.Search(can, can._RIVER) || msg.Option("sess.river") || Volcanos.meta.args.river || can._main_river + can._main_storm = can.user.Search(can, can._STORM) || msg.Option("sess.storm") || Volcanos.meta.args.storm || can._main_storm + can._main_title = can.user.Search(can, can._TITLE) || msg.Option("sess.title") || Volcanos.meta.args.title || can.user.Search(can, "pod") || can._main_title + + can.base.isFunc(cb) && cb(msg) can.onmotion.clear(can), can.sublist = {} + if (msg.Option("sess.river") == "_share") { return can.onmotion.hide(can) } + can.onimport._menu(can) var select; msg.Table(function(value, index, array) { var view = can.onappend.item(can, "item", value, function(event, item) { // 左键选中 @@ -19,7 +24,16 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, target) if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view } - }), select && select.click(), typeof cb == "function" && cb(msg) + }), select && select.click() + }, + _menu: function(can) { + can.run({}, [can._SEARCH, "Header.onimport.menu", can._RIVER, + ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], + !can.user.isMobile && ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"], + ["共享", "共享群组", "共享应用", "共享工具", "共享主机"], + ], function(event, item) { + can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf(can._RIVER), can.Conf(can._STORM)]) + }) }, }) Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, panel, cmds, cb) { @@ -30,14 +44,17 @@ Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, ca var river = can.onengine.river[cmds[0]]; if (!river) { return false } can.core.Item(river.storm, function(key, value) { msg.Push({hash: key, name: value.name}) - }), typeof cb == "function" && cb(msg); return true + }), can.base.isFunc(cb) && cb(msg); return true }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { + can.const( + "search", "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] == "storm") { can.onexport.storm(can, msg, word) } + can.onengine.listen(can, 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() { @@ -46,14 +63,6 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.page.Remove(can, item) }) }) - - can.run({}, ["search", "Header.onimport.menu", "river", - ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], - !can.user.isMobile && ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"], - ["共享", "共享群组", "共享应用", "共享工具", "共享设备"], - ], function(event, item) { - can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")]) - }) }, storm: function(event, can, river) { var list = can.sublist[river]; if (list) { return can.page.Toggle(can, list) } @@ -65,10 +74,10 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, return {text: [storm.name, "div", "item"], onclick: function(event) { // 左键点击 can.onaction.action(event, can, river, storm.hash) - can.user.title(can.user.Search(can, "pod") || storm.name) + can.user.title(can._main_title || storm.name) }, oncontextmenu: function(event) { can.onaction.action(event, can, river, storm.hash) - can.user.title(can.user.Search(can, "pod") || storm.name) + can.user.title(can._main_title || storm.name) // 右键点击 can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { @@ -83,7 +92,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, { - river: can.Conf("river", river), storm: can.Conf("storm", storm), + river: can.Conf(can._RIVER, river), storm: can.Conf(can._STORM, storm), })) can.page.Select(can, can._output, "div.item.select", function(item) { @@ -110,9 +119,9 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, "创建": function(event, can) { can.onaction.create(event, can) }, "刷新": function(event, can) { can.user.Search(can, { - river: can.Conf("river"), storm: can.Conf("storm"), - topic: can.run(event, ["search", "Header.onexport.topic"]), - layout: can.run(event, ["search", "Action.onexport.layout"]), + river: can.Conf(can._RIVER), storm: can.Conf(can._STORM), + topic: can.run(event, [can._SEARCH, "Header.onexport.topic"]), + layout: can.run(event, [can._SEARCH, "Action.onexport.layout"]), }) }, }) @@ -124,7 +133,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 {_input: "text", name: "name", value: river}, ], function(event, button, meta, list) { var msg = can.request(event) - can.user.share(can, msg, [river, "action", "share", "type", "river", "name", meta.name]) + can.user.share(can, msg, [river, "action", "share", "type", can._RIVER, "name", meta.name]) }) }, "添加用户": function(event, can, button, river) { @@ -171,8 +180,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 {_input: "text", name: "name", value: storm}, ], function(event, button, meta, list) { var msg = can.request(event) - can.user.share(can, msg, [river, "action", "share", "type", "storm", "name", meta.name, - "storm", storm, + can.user.share(can, msg, [river, "action", "share", "type", can._STORM, "name", meta.name, + can._STORM, storm, can._RIVER, river, ]) }) }, @@ -186,7 +195,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }) }, "保存参数": function(event, can, button, river, storm) { - can.run(event, ["search", "Action.onexport.args"], function(item, next, index, array) { + can.run(event, [can._SEARCH, "Action.onexport.args"], function(item, next, index, array) { var msg = can.request({}, {hash: storm, id: item.dataset.id}) can.run(msg._event, [river, "tool", "action", "modify", "arg", item.dataset.args], function(msg) { can.user.toast(can, "保存"+(index+1)+"/"+array.length) @@ -214,7 +223,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }, "访问应用": function(event, can, button, river, storm) { var msg = can.request(event, {sort: ","}) - can.user.select(event, can, "storm", "type,name,text") + can.user.select(event, can, can._STORM, "type,name,text") }, "访问工具": function(event, can, button, river, storm) { var msg = can.request(event, {sort: ","}) @@ -231,14 +240,22 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 can.user.select(event, can, "task", "time,zone,id,type,name,text") }, - "共享设备": function(event, can, button, river, storm) { + "共享主机": function(event, can, button, river, storm) { can.run(event, ["action", "invite"], function(msg) { var toast = can.user.toast(can, { - title: "共享设备", content: msg.Result(), + title: "共享主机", content: msg.Result(), button: ["close"], duration: -1, width: -100, }) }) }, + "共享工具": function(event, can, button, river, storm) { + can.user.select(event, can, "plugin", "name,context,command,argument", function(item, next) { + can.user.share(can, can.request(event), [river, "action", "share", "type", "field", + can._RIVER, item[1], can._STORM, item[2], + "name", item[0], "text", item[3], + ]) + }) + }, "创建空间": function(event, can, button, river, storm) { can.user.input(event, {__proto__: can, run: function(event, cmds, cb, silent) { @@ -268,7 +285,7 @@ Volcanos("onexport", {help: "导出数据", list: [], can.core.List(fields, function(key) { switch (key) { case "ctx": msg.Push(key, "web.chat"); break - case "cmd": msg.Push(key, "storm"); break + case "cmd": msg.Push(key, can._STORM); break case "type": msg.Push(key, river); break case "name": msg.Push(key, storm); break case "text": diff --git a/panel/Search.js b/panel/Search.js index 208ce19f..e932cba3 100644 --- a/panel/Search.js +++ b/panel/Search.js @@ -9,17 +9,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } }]}, {view: "content"}, {view: ["display", "table"]}, {view: "preview"}, - ]), typeof cb == "function" && cb(msg) + ]), can.base.isFunc(cb) && cb(msg) can.page.ClassList.add(can, can.ui.display, "content") }, _table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content) var table = 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) { + return {text: [key == "text" && can.base.isFunc(line.text) && line.text.help || value, "td"], onclick: function(event) { 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) { var msg = can.request(event, line) can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) } }, can.ui.preview) @@ -48,7 +48,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] var fields = (cmds[2]||msg.Option("fields")||"ctx,cmd,type,name,text").split(",") can.page.Appends(can, can.ui.display, [{th: fields}]), can.cb = function() { - typeof cb == "function" && cb(can.onexport.select(can)), can.onmotion.hide(can) + can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) } can.input = function(event, word) { cmds[1] = word @@ -69,12 +69,12 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] }, "关闭": function(event, can) { can.onmotion.hide(can) }, "清空": 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() }, + "完成": function(event, can) { can.base.isFunc(can.cb) && can.cb() }, select: function(event, can, index) { if (can.list && can.list[index]) { var text = can.list[index].text || "" - if (typeof text == "function") { + if (can.base.isFunc(text)) { can.list[index].text(event) } else { var line = can.list[index] var fields = can.page.Select(can, can.ui.display, "th", function(item) { return item.innerText }) diff --git a/plugin/input.js b/plugin/input.js index a89313f0..e3a3ac34 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -2,7 +2,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) { - typeof cb == "function" && cb(); switch (meta.type) { + can.base.isFunc(cb) && cb(); switch (meta.type) { case "textarea": case "text": !target.placeholder && (target.placeholder = can.user.trans(can, meta.name) || "") diff --git a/plugin/local/chat/media.js b/plugin/local/chat/media.js index 4566f2a5..93ed06b5 100644 --- a/plugin/local/chat/media.js +++ b/plugin/local/chat/media.js @@ -11,7 +11,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, can.ui.content) can.onappend.board(can, msg.Result(), can.ui.display) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, }) Volcanos("onaction", {help: "操作数据", list: [], _init: function(can, msg, list, cb, target) { diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 43f69a05..f199fce1 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -11,7 +11,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")||1) can.onimport.project(can, msg.Option("path")) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, _content: function(can, target) { var height = can.Conf("height")-320; height < 240 && (height = 240) @@ -54,7 +54,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, } } can.run(event, ["action", "favor"].concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) can.core.Timer(10, function() { can.onappend._action(sub, ["关闭"], sub._action, { "关闭": function(event) { can.onmotion.hidden(sub, sub._target) }, @@ -83,7 +83,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.Option({path: path, file: file, line: line||parseInt(can._msg.Option("line"))||1}) can._msg.Option("line", can.Option("line")) - return can.onsyntax._init(can, can._msg), typeof cb == "function" && cb() + return can.onsyntax._init(can, can._msg), can.base.isFunc(cb) && cb() } can.run({}, [path, file], function(msg) { diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 049789f5..ee3391f8 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onimport.inner_init(can, msg, list, function() { can.onimport._input(can), can.onimport._output(can) can.keylist = [], can.onkeymap._init(can, "insert") - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, target) }, function(can, name, sub) { sub._name == "onimport" && (can.onimport.inner_init = sub._init) @@ -116,12 +116,12 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" } var p = can.onsyntax[can.parse] - var cb = (p && p.keymap || can.onkeymap[can.mode])[event.key]; if (typeof cb == "function") { + var cb = (p && p.keymap || can.onkeymap[can.mode])[event.key]; if (can.base.isFunc(cb)) { return repeat(cb, can.count) } var map = can.onkeymap[can.mode]._engine; for (var i = can.keylist.length-1; i > pre-1; i--) { - var cb = map[can.keylist[i]]; if (typeof cb == "function") { + var cb = map[can.keylist[i]]; if (can.base.isFunc(cb)) { return repeat(cb, can.count) }; if (typeof cb == "object") { map = cb; continue }; break } @@ -137,7 +137,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" can.onmotion.clear(can, can.ui.output) var ls = can.core.Split(line, " ", ",") - var cb = can.onkeymap._engine[ls[0]]; if (typeof cb == "function") { + var cb = can.onkeymap._engine[ls[0]]; if (can.base.isFunc(cb)) { can.onmotion.hidden(can, can.ui.display) can.onkeymap._normal(can) cb(event, can, line, ls) diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 6410ca29..9a12fd6d 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -1,7 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.onmotion.clear(can, target) can.ui = can.onlayout.profile(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) can.onmotion.hidden(can, can._action) can.onimport[can.Option("scale")||"week"](can, msg) can.page.Modify(can, can.ui.profile, {style: {display: "block"}}) @@ -88,7 +88,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, sub.run = function(event, cmds, cb) { var msg = can.request(event, {"task.zone": task.zone, "task.id": task.id}) can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }, true) } }, can.ui.display) diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js index e3b04b04..bcb2e2ed 100644 --- a/plugin/local/wiki/data.js +++ b/plugin/local/wiki/data.js @@ -1,6 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) { can.ui = can.onlayout.display(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) can.table = can.onappend.table(can, msg, function(value, key, index, line) { return {text: [value, "td"], oncontextmenu: function(event) { diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index cf08bb09..dac1de4b 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onkeypop._build(can) can.onmotion.hidden(can, can._action) can.ui = can.onlayout.profile(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) // 交互数据 can.svg = null, can.group = null @@ -50,7 +50,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, var figure = can.onfigure._get(can, target) key = figure && figure.data && figure.data.size && figure.data.size[key] || key - if (figure && figure.data && typeof figure.data[key] == "function") { + if (figure && figure.data && can.base.isFunc(figure.data[key])) { return figure.data[key](can, value, key, target) } diff --git a/plugin/local/wiki/draw/walk_trash.js b/plugin/local/wiki/draw/walk_trash.js index 924fbfd7..7b73e601 100644 --- a/plugin/local/wiki/draw/walk_trash.js +++ b/plugin/local/wiki/draw/walk_trash.js @@ -14,7 +14,7 @@ Volcanos("onimport", {help: "导入数据", list: [], case "TR": case "TABLE": }} - return typeof cb == "function" && cb(msg), table; + return can.base.isFunc(cb) && cb(msg), table; } // can.page.Append(can, action, [{type: "script", src: "https://cdn.bootcss.com/echarts/4.2.0-rc.2/echarts.js"}]); diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index b18bf90c..8585c3b7 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -7,7 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.hidden(can, can._action) can.ui = can.onlayout.display(can, target) can.onappend.table(can, can.path, null, can.ui.content) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) var feature = can.Conf("feature") || {} can.Action("倍速", can.rate = parseInt(msg.Option("rate"))||feature["rate"]||1) @@ -25,7 +25,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, file: function(can, path, index) { path = can.onimport._file(can, path, index) var cb = can.onfigure[can.base.Ext(path)]; can.Status("file", path) - typeof cb == "function" && can.page.Append(can, can.ui.content, [cb(can, path, index)]) + can.base.isFunc(cb) && can.page.Append(can, can.ui.content, [cb(can, path, index)]) }, }, ["/plugin/local/wiki/feel.css"]) Volcanos("onfigure", {help: "组件菜单", list: [], diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 26a5c593..04016652 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -1,6 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.onmotion.clear(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) if (msg.Length() > 0) { return can.onappend.table(can, msg) } can.page.Modify(can, target, msg.Result()) diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 945dee0c..93ec822b 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -1,16 +1,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.onmotion.clear(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) if (msg.Option("branch")) { return can.onappend.table(can, msg) } can.dir_root = msg.Option("dir_root") can._tree = can.onimport._tree(can, msg.Table(), "path", "/") + if (!can._tree[""]) { return } can._tree[""].name = can.dir_root.split("/").pop() can.size = 30, can.margin = 30 can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) { sub.run = function(event, cmds, cb) { sub.Action("go", "run") - typeof cb == "function" && cb(sub.request()) + can.base.isFunc(cb) && cb(sub.request()) can.core.Timer(100, function() { can.draw = sub._outputs[0] can.draw.onmotion.hidden(can.draw, can.draw.ui.project) @@ -82,7 +83,7 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向", if (x+tree.width > can.width) { can.width = x+tree.width } can.core.Item(can.ondetail, function(key, value) { - if (key.indexOf("on") == 0 && typeof value == "function") { + if (key.indexOf("on") == 0 && can.base.isFunc(value)) { tree.view[key] = function(event) { value(event, can, tree) } } }) diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 1c708e39..11b6b328 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -1,6 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.onmotion.clear(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) if (msg.Option("branch")) { return can.onappend.table(can, msg) } can.msg = msg, can.data = msg.Table(), can.onimport._sum(can) @@ -9,7 +9,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) { sub.run = function(event, cmds, cb) { sub.Action("go", "run") - typeof cb == "function" && cb(sub.request()) + can.base.isFunc(cb) && cb(sub.request()) can.core.Timer(100, function() { can.draw = sub._outputs[0] can.draw.onmotion.hidden(can.draw, can.draw.ui.project) @@ -90,7 +90,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图 }) can.core.Item(can.ondetail, function(key, value) { - if (key.indexOf("on") == 0 && typeof value == "function") { + if (key.indexOf("on") == 0 && can.base.isFunc(value)) { line.view[key] = function(event) { value(event, can, line) } } }) @@ -140,7 +140,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图 }) can.core.Item(can.ondetail, function(key, value) { - if (key.indexOf("on") == 0 && typeof value == "function") { + if (key.indexOf("on") == 0 && can.base.isFunc(value)) { line.view[key] = function(event) { value(event, can, line) } } }) diff --git a/plugin/table.js b/plugin/table.js index e644521b..80d9666e 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,9 +1,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - if (can.sup.onimport._process(can.sup, msg)) { return typeof cb == "function" && cb(can, msg) } - if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) } + if (can.sup.onimport._process(can.sup, msg)) { return can.base.isFunc(cb) && cb(can, msg) } + if (can.onimport._process(can, msg)) { return can.base.isFunc(cb) && cb(can, msg) } can.onmotion.clear(can) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) can.page.Append(can, target, [can.onimport._control(can, msg)]) can.onappend.table(can, msg, function(value, key, index, line, array) { @@ -32,7 +32,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, _process: function(can, msg) { var cb = can.onimport[msg.Option("_process")] - return typeof cb == "function" && cb(can, msg) + return can.base.isFunc(cb) && cb(can, msg) }, _follow: function(can, msg) { if (msg.Option("cache.status") == "stop") { return can.user.toast(can, msg.Option("cache.action")+" done!")} @@ -64,7 +64,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, _control: function(can, msg) { var cb = can.onimport[msg.Option("_control")] - return typeof cb == "function" && cb(can, msg) + return can.base.isFunc(cb) && cb(can, msg) }, _page: function(can, msg) { var ui = {} return {view: ["control", "div"], list: [ diff --git a/proto.js b/proto.js index b1f25c2b..3842585c 100644 --- a/proto.js +++ b/proto.js @@ -64,9 +64,14 @@ var Volcanos = shy("火山架", {args: {}, pack: {}, libs: [], cache: {}}, [], f event._msg = event._msg || can.misc.Message(event, can) can.core.List(arguments, function(option, index) { - index > 0 && can.core.Item(typeof option == "function"? option(): option, event._msg.Option) + index > 0 && can.core.Item(can.base.isFunc(option)? option(): option, event._msg.Option) }); return event._msg }, + const: function() { + can.core.List(arguments, function(v) { + can["_"+v.toUpperCase()] = v + }) + }, Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, }; can = can || {}; for (var k in proto) { can.hasOwnProperty(k) || (can[k] = proto[k]) } diff --git a/publish/chrome/chrome.js b/publish/chrome/chrome.js index 7d2976b5..e2909e1a 100644 --- a/publish/chrome/chrome.js +++ b/publish/chrome/chrome.js @@ -5,7 +5,7 @@ Volcanos("chrome", { can.core.List(wins, function(win) { win.wid = win.id msg.Push(win, ["wid", "state", "left", "top", "width", "height"]) }) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) return } @@ -14,7 +14,7 @@ Volcanos("chrome", { can.core.List(tabs, function(tab) { tab.tid = tab.id msg.Push(tab, ["tid", "active", "width", "height", "index", "title", "url"]) }) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) return } @@ -22,12 +22,12 @@ Volcanos("chrome", { if (cmds[1] == "") { // 当前标签 chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { cmds[1] = tabs[0].id chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) { - msg.Copy(res), typeof cb == "function" && cb(msg) + msg.Copy(res), can.base.isFunc(cb) && cb(msg) }) }) } else { chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) { - msg.Copy(res), typeof cb == "function" && cb(msg) + msg.Copy(res), can.base.isFunc(cb) && cb(msg) }) } }, @@ -38,7 +38,7 @@ Volcanos("chrome", { msg.Push(labs[i], ["pid", "id", "index", "title", "url"]) labs = labs.concat(labs[i].children||[]) } - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) }, }, ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], function(can) { diff --git a/publish/client/mp/app.js b/publish/client/mp/app.js index 334e36ba..17a1ccf4 100644 --- a/publish/client/mp/app.js +++ b/publish/client/mp/app.js @@ -3,7 +3,7 @@ const kit = require("utils/kit.js") App({ data: {}, conf: {serve: "https://shylinux.com/chat", space: ""}, requests: function(cmd, data, cb) { wx.showLoading() - this.request(cmd, data, function(msg) { wx.hideLoading(), typeof cb == "function" && cb(msg) }) + this.request(cmd, data, function(msg) { wx.hideLoading(), can.base.isFunc(cb) && cb(msg) }) }, request: function(cmd, data, cb) { var app = this; data.sessid = app.conf.sessid, data.pod = app.conf.space wx.request({method: "POST", url: app.conf.serve+"/"+cmd, data: data, success: function(res) { var msg = res.data @@ -22,7 +22,7 @@ App({ var line = {}; kit.List(msg.key, function(key, index) { line[key] = msg.value[index] }) - typeof cb == "function" && cb(line, 0, 1) + can.base.isFunc(cb) && cb(line, 0, 1) return res.push(line), res } diff --git a/publish/client/mp/pages/action/action.js b/publish/client/mp/pages/action/action.js index 3ad10595..facb89cb 100644 --- a/publish/client/mp/pages/action/action.js +++ b/publish/client/mp/pages/action/action.js @@ -74,7 +74,7 @@ Page({ var option = event._option||{}; option.cmds = cmds app.requests("action?="+field.name, option, function(msg) { field.msg = msg, page.setData({list: page.data.list}) - typeof cb == "function" && cb(msg) + can.base.isFunc(cb) && cb(msg) }) }, onInput: function(event) { var page = this, data = event.target.dataset @@ -106,7 +106,7 @@ Page({ case "刷新": // 执行命令 case "查看": page.run(event, data.order); break default: - var cb = page.plugin[input.name]; typeof cb == "function"? cb(event, page, data.order, input.name): + var cb = page.plugin[input.name]; can.base.isFunc(cb)? cb(event, page, data.order, input.name): page.run(event, data.order, ["action", input.name].concat(kit.List(field.inputs, function(input) { if (input._input != "button") { return input.value } }))) @@ -124,7 +124,7 @@ Page({ } event._option = option - var cb = page.plugin[input.name]; typeof cb == "function"? cb(event, page, data.order, input.name): + var cb = page.plugin[input.name]; can.base.isFunc(cb)? cb(event, page, data.order, input.name): page.run(event, data.order, ["action", input.name]) return } diff --git a/publish/client/mp/utils/kit.js b/publish/client/mp/utils/kit.js index dbb87f94..e0fdcdc8 100644 --- a/publish/client/mp/utils/kit.js +++ b/publish/client/mp/utils/kit.js @@ -51,9 +51,9 @@ module.exports = { }, List: function(list, cb, cbs) {var res = [], val; for (var i = 0; i < list.length; i++) { - typeof cb == "function"? (val = cb(list[i], i, list)) != undefined && res.push(val): res.push(list[i]) + can.base.isFunc(cb)? (val = cb(list[i], i, list)) != undefined && res.push(val): res.push(list[i]) } - return typeof cbs == "function" && cbs(res), res + return can.base.isFunc(cbs) && cbs(res), res }, Item: function(list, cb, cbs) { for (var k in list) { cb(k, list[k]) } @@ -93,10 +93,10 @@ module.exports = { interval = typeof interval == "object"? interval || []: [interval] var timer = {stop: false}; function loop(timer, i) { if (timer.stop || i >= interval.length && interval.length >= 0) { - return typeof cbs == "function" && cbs(timer, interval) + return can.base.isFunc(cbs) && cbs(timer, interval) } - return typeof cb == "function" && cb(timer, interval.interval||interval[i], i, interval)? - typeof cbs == "function" && cbs(timer, interval): setTimeout(function() { loop(timer, i+1) }, interval.interval||interval[i+1]) + return can.base.isFunc(cb) && cb(timer, interval.interval||interval[i], i, interval)? + can.base.isFunc(cbs) && cbs(timer, interval): setTimeout(function() { loop(timer, i+1) }, interval.interval||interval[i+1]) } setTimeout(function() { loop(timer, 0) }, interval.interval||interval[0]) return timer