diff --git a/frame.js b/frame.js index 14ebc0c0..32c1ec50 100644 --- a/frame.js +++ b/frame.js @@ -1,18 +1,22 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, list, cb, target) { can.core.Next(meta.panes, function(item, next) { - can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) { - pane.run = function(event, cmds, cb) { - return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb) + can.onappend._init(can, item, item.list, function(pane) { + pane.run = function(event, cmds, cb, silent) { var msg = pane.request(event); cmds = cmds || [] + return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, msg, pane, cmds, function(msg) { + return typeof cb == "function" && cb(msg) + }) }, can[item.name] = pane, next() }, target) }, function() { can.onlayout._init(can, meta, list, function() {}, target) - can.onengine._daemon(can, can.user.title()) can.onkeypop._init(can) + can.onengine._daemon(can, can.user.title()) can.require(Volcanos.meta.webpack? []: meta.main.list, function(can) { var pane = can[meta.main.name], msg = can.request({}) - pane.onaction && pane.onaction._init(pane, msg, msg.option||[], cb, target) + pane.onaction._init(pane, msg, msg.option||[], function(msg) { + return typeof cb == "function" && cb(msg) + }, pane._target) }) }) }, @@ -212,7 +216,6 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, }, }) Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) { - meta.name = meta.name.split(" ")[0] field = field || can.onappend.field(can, target, meta.type, meta).first var legend = can.page.Select(can, field, "legend")[0] var option = can.page.Select(can, field, "form.option")[0] @@ -222,30 +225,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, meta.id && (option.dataset.id = meta.id) // 添加插件 - list = Volcanos.meta.libs.concat(list) var sub = Volcanos(meta.name, { _help: meta.name, _follow: can._follow+"."+meta.name, _legend: legend, _option: option, _action: action, _output: output, _status: status, _target: field, _inputs: {}, _outputs: [], _history: [], - Pack: function(cmds, slient) { - cmds = cmds && cmds.length > 0? cmds: sub.page.Select(sub, sub._option, "textarea.args,input.args,select.args", function(item) { - return item.name && item.value || "" - }); for (var i = cmds.length-1; i >= 0; i--) { - if (!cmds[i]) { cmds.pop() } else { break } - } - - var last = sub._history[sub._history.length-1]; !sub.core.Eq(last, cmds) && cmds[0] != "action" && !slient && sub._history.push(cmds) - return cmds - }, - Clone: function() { - meta.args = sub.page.Select(sub, sub._option, "textarea.args,input.args,select.args", function(item) { - return item.name && item.value || "" - }) - sub.onappend._init(sub, meta, list, function(sub) { - cb(sub), sub.Timer(10, function() { - for (var k in sub._inputs) { sub._inputs[k]._target.focus(); break } - }) - }, target) - }, Option: function(key, value) { if (typeof key == "object") { return sub.core.Item(key, sub.Option), key } if (key == undefined) { value = {} @@ -254,13 +236,14 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) return value } - sub.page.Select(sub, option, "select[name="+key+"],input[name="+key+"]", function(item) { + sub.page.Select(sub, option, "input[name="+key+"],"+"select[name="+key+"]", function(item) { value == undefined? (value = item.value): (item.value = value) }) return value }, Action: function(key, value) { - sub.page.Select(sub, action, "select[name="+key+"],input[name="+key+"]", function(item) { + if (typeof key == "object") { return sub.core.Item(key, sub.Action), key } + sub.page.Select(sub, action, "input[name="+key+"],"+"select[name="+key+"]", function(item) { value == undefined? (value = item.value): (item.value = value) }) return value @@ -272,56 +255,65 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) return value }, - }, [Volcanos.meta.volcano].concat(list), function(sub) { cb(sub) + Clone: function() { + meta.args = sub.page.Select(sub, sub._option, "textarea.args,input.args,select.args", function(item) { + return item.name && item.value || "" + }) + can.onappend._init(can, meta, list, function(sub) { + typeof cb == "function" && cb(sub) + sub.Timer(10, function() { + for (var k in sub._inputs) { sub._inputs[k]._target.focus(); break } + }) + }, target) + }, + Pack: function(cmds, slient) { + cmds = cmds && cmds.length > 0? cmds: sub.page.Select(sub, sub._option, "textarea.args,input.args,select.args", function(item) { + return item.name && item.value || "" + }); for (var i = cmds.length-1; i >= 0; i--) { + if (!cmds[i]) { cmds.pop() } else { break } + } + + var last = sub._history[sub._history.length-1]; !sub.core.Eq(last, cmds) && cmds[0] != "action" && !slient && sub._history.push(cmds) + return cmds + }, + }, Volcanos.meta.libs.concat(list.concat([Volcanos.meta.volcano])), function(sub) { sub.Conf(meta) + typeof cb == "function" && cb(sub) meta.feature = sub.base.Obj(meta.feature, {}) sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"") - // sub.onimport && sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field) meta.inputs && sub.onappend._option(sub, meta, list, cb) - sub.onaction && sub.onappend._action(sub, sub._action, meta.button || sub.onaction.list) - sub.onexport && sub.onappend._status(sub, sub._status, sub.onexport.list) }) - return sub.Conf(meta), sub + return sub }, _option: function(can, meta, list, cb) { var index = -1, args = can.base.Obj(meta.arg||meta.args, []) function add(item, next) { item._input != "button" && index++ return can._inputs[item.name] = Volcanos(item.name, { _help: item.name, _follow: can._follow+"."+item.name, _target: can.onappend.input(can, can._option, item.type, item, args[index]), _option: can._option, _action: can._action, _output: can._output, - CloneInput: function() { add(item, function() {})._target.focus() }, + CloneInput: function() { add(item)._target.focus() }, CloneField: function() { can.Clone() }, - }, Volcanos.meta.libs.concat([item.display||"/plugin/input.js", Volcanos.meta.volcano]), function(input) { input.sup = can - input.run = function(event, cmds, cb, silent) { - var msg = can.request(event); msg.Option(can.Conf("option")) + }, Volcanos.meta.libs.concat([item.display||"/plugin/input.js", Volcanos.meta.volcano]), function(input) { + input.Conf(item), input.sup = can, input.run = function(event, cmds, cb, silent) { + var msg = can.request(event, can.Conf("option")) return can.onappend._output(can, meta, event, can.Pack(cmds), cb, silent) } - input.onimport && input.onimport._init(input, input.Conf(item), item.list||[], function() {}, input._target) - - can.core.Item(input.onaction, function(key, value) { - input._target && key.indexOf("on") == 0 && (input._target[key] = input._target[key] || function(event) { - value(event, input) - }) - }), next() - - // 自动执行 - item.type == "button" && item.action == "auto" && input._target.click() + input.onaction && input.onaction._init && input.onaction._init(input, item, [], next, input._target) }) - } - can.core.Next(can.base.Obj(meta.inputs, []), add) + }; can.core.Next(can.base.Obj(meta.inputs, []), add) }, - _action: function(can, action, list) { // [string [class item...] {}] - action.innerHTML = "", can.core.List(list, function(item) { + _action: function(can, action, list) { + can.onmotion.clear(can, action), can.core.List(list, function(item) { item === ""? /*空白*/ can.page.Append(can, action, [{view: "item space"}]): typeof item == "string"? /*按键*/ can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) { var cb = can.onaction[item] || can.onaction["_engine"] || can.onkeymap && can.onkeymap._remote cb? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true) - }}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), title: item[0], name: item[0], onchange: function(event) { + }}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", name: item[0], values: item.slice(1), title: item[0], onchange: function(event) { var which = item[event.target.selectedIndex+1] var cb = can.onaction[which] - cb && cb(event, can, which) + typeof cb == "function" && cb(event, can, which) var cb = can.onaction[item[0]] - cb && cb(event, can, item[0], which) + typeof cb == "function" && cb(event, can, item[0], which) }}): item.input? /*文本*/ can.page.Append(can, action, [{view: "item", list: [{type: "input", name: item.input[0], onkeydown: function(event) { item.input[1](event, can) }}] }]): typeof item == "object" && /*其它*/ can.page.Append(can, action, [item]) @@ -333,54 +325,57 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, item.name && item.value && msg.Option(item.name, item.value) }) - return can.run(event, cmds||[], function(msg) { + can.run(event, cmds||[], function(msg) { typeof cb == "function" && cb(msg) if (silent) { return } var display = meta.feature.display || "table.js" display.indexOf("/") == 0 || (display = "/plugin/"+display) - display.endsWith(".js") || (display += ".js") + var table = Volcanos(display, { _help: display, _follow: can._follow+"."+display, - _target: can._output, _option: can._option, _action: can._action, _output: can._output, _status: can._status, - _fields: can._target, Option: can.Option, Action: can.Action, Status: can.Status, - }, Volcanos.meta.libs.concat([display, "/frame.js"]), function(table) { table.Conf(can.Conf()), table._msg = msg - table.sup = can, table.run = function(event, cmds, cb, silent) { var msg = can.request(event) - can.core.Item(can.Conf("option"), msg.Option) + _option: can._option, _action: can._action, _output: can._output, _status: can._status, + _target: can._output, _fields: can._target, Option: can.Option, Action: can.Action, Status: can.Status, + }, Volcanos.meta.libs.concat([display, Volcanos.meta.volcano]), function(table) { + table.Conf(can.Conf()), table.sup = can, table._msg = msg + table.run = function(event, cmds, cb, silent) { + var msg = can.request(event, can.Conf("option")) return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent) } - table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function() { - can.onappend._detail(table, msg, msg["_detail"] || can.Conf("detail"), can._output) - table.onaction && table.onappend._action(table, table._action, meta._action||table.onaction.list) - table.onexport && table.onappend._status(table, table._status, table.onexport.list) + table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) { + table.onaction && table.onappend._action(table, table._action, msg._action||meta._action||table.onaction.list) + table.ondetail && table.onappend._detail(table, table._output, msg._detail||meta._detail||table.ondetail.list) + table.onexport && table.onappend._status(table, table._status, msg._export||meta._export||table.onexport.list) }, can._output) }); can._outputs.push(table) }, silent) }, - _detail: function(can, msg, list, target) { - can.ondetail && list.length > 0 && (target.oncontextmenu = function(event) { + _detail: function(can, target, list) { + list.length > 0 && (target.oncontextmenu = function(event) { can.user.carte(can, can.ondetail||{}, list, function(ev, item, meta) { (can.ondetail[item] || can.onaction[item])(event, can, item) }) }) }, _status: function(can, status, list) { - status.innerHTML = "", can.core.List(list, function(item) { - can.page.Append(can, status, [{view: "item "+item, title: item, list: [{text: [item+": ", "label"]}, {text: ["", "span"]}]}]) + can.onmotion.clear(can, status), can.core.List(list, function(item) { + can.page.Append(can, status, [{view: "item "+item, title: item, list: [ + {text: [item, "label"]}, {text: [": ", "label"]}, {text: ["", "span"]}, + ], }]) }) }, item: function(can, target, type, item, cb, cbs) { var ui = can.page.Append(can, target, [{view: [type, "div", item.nick||item.name], - oncontextmenu: function(event) { cbs(event, ui.item) }, click: function(event) { + click: function(event) { can.page.Select(can, target, "div."+type, function(item) { can.page.ClassList.del(can, item, "select") }), can.page.ClassList.add(can, ui.item, "select") cb(event, ui.item) - }, + }, oncontextmenu: function(event) { cbs(event, ui.item) }, }]) - return ui.item.Meta = item, ui.item + return ui.item }, tree: function(can, msg, field, split, target, cb) { var list = {}; msg.Table(function(value) { @@ -388,28 +383,23 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, var last = array.slice(0, index).join(split) var name = array.slice(0, index+1).join(split) list[name] || (list[name] = can.page.Append(can, list[last]||target, [{view: ["item", "div", item+(index==array.length-1?"":split)], onclick: function(event) { - var hide = list[name].style.display == "none" - can.page.Modify(can, list[name], {style: {display: hide? "": "none"}}) + can.page.Toggle(can, list[name]) + index == array.length - 1 && typeof cb == "function" && cb(event, value) }}, {view: "list", style: {display: "none"}}]).last) }) }) }, - menu: function(can, msg, value) { - can.ondetail && can.ondetail.list && can.ondetail.list.length > 0 && (can._target.oncontextmenu = function(event) { - can.user.carte(can, can.ondetail||{}, msg["_detail"] || can.Conf("detail"), function(ev, item, meta) { - (can.ondetail[item]||can.onaction[item])(event, can, value, item) - }) - }) + menu: function(can, msg, list) { + can.ondetail && can.onappend._detail(can, can._target, list||msg._detail||meta._detail||table.ondetail.list) }, field: function(can, target, type, item) { var dataset = {}; item && item.name && (dataset.names = item.name) item.help = typeof item.help == "string" && item.help.startsWith("[") && (item.help = can.base.Obj(item.help, [""])[0]) || item.help || "" - var field = can.page.Append(can, target, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [ + return can.page.Append(can, target, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [ item.pos? undefined: {text: [(item.nick||item.name||"")+"("+(item.help||"")+")", "legend"]}, {view: ["option", "form"], dataset: dataset, list: []}, {view: ["action"]}, {view: ["output"]}, {view: ["status"]}, ]}]) - return field.first.Meta = item, field }, input: function(can, option, type, item, value) { item.name && item.name.indexOf("@") == 0 && (item.name = item.name.slice(1)) && (item.position = item.position || "opts") @@ -487,15 +477,18 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, plugin: function(can, value, cb, target) { value = value || {} can.run({}, ["action", "command", value.index], function(msg) { - value.name = value.name || msg.name && msg.name[0] || "plugin" - value.help = value.help || msg.help && msg.help[0] || "plugin" - value.inputs = can.base.Obj(msg.list && msg.list[0] || "[]", []) - value.feature = can.base.Obj(msg.meta && msg.meta[0] || "{}", {}) + value.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {}) + value.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", []) - var plugin = can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { - typeof cb == "function" && cb(sub, value) - sub.page.Remove(sub, sub._legend) - }, target || document.body) + value.name = value.name || msg.name&&msg.name[0] || "story" + value.help = value.help || msg.help&&msg.help[0] || "story" + value.width = can._target.offsetWidth + value.type = "story" + + can.onappend._init(can, value, ["/plugin/state.js"], function(story) { + story.page.Remove(story, story._legend) + return typeof cb == "function" && cb(story, value) + }, target || can._output) }, true) }, }, [], function(can) {}) @@ -748,19 +741,24 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can) { }}]); ui.first.focus(), ui.first.setSelectionRange(0, -1) }, - show: function(can, target, time, cb) { time = time || {value: 100, length: 30} - can.page.Modify(can, target, {style: {opacity: 0}}) + clear: function(can, target) { target = target || can._output + target.innerHTML = "" + }, + show: function(can, time, cb, target) { target = target || can._target + time = typeof time == "object"? time: {value: 10, length: time||20} + + can.page.Modify(can, target, {style: {opacity: 0, display: "block"}}) can.Timer(time, function(event, value, index) { can.page.Modify(can, target, {style: {opacity: (index+1)/time.length}}) }, cb) }, - hide: function(can, target, time) { time = time || {value: 100, length: 30} + hide: function(can, time, cb, target) { target = target || can._target + time = typeof time == "object"? time: {value: 10, length: time||20} + can.page.Modify(can, target, {style: {opacity: 1}}) can.Timer(time, function(event, value, index) { - console.log(arguments) can.page.Modify(can, target, {style: {opacity: 1-(index+1)/time.length}}) - }, function() { - }) + }, cb) }, move: function(can, target, layout) { var begin diff --git a/lib/base.js b/lib/base.js index 384fd0e3..4bead58a 100644 --- a/lib/base.js +++ b/lib/base.js @@ -115,8 +115,7 @@ var base = Volcanos("base", {help: "基础模块", }), Format: shy("数据格式化", function(obj) {return JSON.stringify(obj)}), - isNight: function() { - var now = new Date() + isNight: function() { var now = new Date() return now.getHours() < 7 || now.getHours() > 17 }, }) diff --git a/pane/Action.js b/pane/Action.js index 4d15c85a..840a5c00 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -1,53 +1,50 @@ -const RIVER = "river", STORM = "storm" +(function() { const RIVER = "river", STORM = "storm", ACTION = "action" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - var river = can.Conf("river"), storm = can.Conf("storm") - can._output.innerHTML = "", can.core.Next(msg.Table(), function(value, next) { + var river = can.Conf(RIVER), storm = can.Conf(STORM) + can.onmotion.clear(can), can.core.Next(msg.Table(), function(value, next) { value.feature = can.base.Obj(value.feature||value.meta||"{}", {}) value.inputs = can.base.Obj(value.inputs||value.list||"[]", []) - if (value.inputs.length > 0) { - can.onimport._plugin(can, river, storm, value), next() - return - } - can.run({}, ["action", "command", value.index || value.ctx+"."+value.cmd], function(msg) { + value.inputs.length == 0? can.run({}, ["action", "command", value.index || value.ctx+"."+value.cmd], function(msg) { value.feature = can.base.Obj(msg.meta&&msg.meta[0]||"{}", {}) value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", []) - can.onimport._plugin(can, river, storm, value), next() - }) + + can.onimport._plugin(can, target, river, storm, value), next() + }): (can.onimport._plugin(can, target, river, storm, value), next()) }) - typeof cb == "function" && cb(msg) + return typeof cb == "function" && cb(msg) }, - _plugin: function(can, river, storm, value) { value.name = value.name.split(" ")[0] + _plugin: function(can, target, river, storm, value) { value.name = value.name.split(" ")[0] value.action = value.id || value.index || value.key+"."+value.name value.width = can._target.offsetWidth value.type = "plugin" - can.onappend._init(can, value, ["/plugin/state.js"], function(sub) { - sub.run = function(event, cmds, cb, silent) { var msg = can.request(event); cmds = cmds || [] + can.onappend._init(can, value, ["/plugin/state.js"], function(plugin) { + plugin.run = function(event, cmds, cb, silent) { var msg = plugin.request(event); cmds = cmds || [] return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) { return typeof cb == "function" && cb(msg) }, silent) } - }, can._output) + }, target) }, }) Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { - can.Cache(can.Conf("river")+"."+can.Conf("storm"), can._output, can._output.scrollTop+1) - var river = can.Conf("river", msg.Option("river")), storm = can.Conf("storm", msg.Option("storm")) - var position = can.Conf("action", msg.Option("action", can.Cache(river+"."+storm, can._output)||"")) + can.Cache(can.Conf(RIVER)+"."+can.Conf(STORM), can._output, can._output.scrollTop+1) + var river = can.Conf(RIVER, msg.Option(RIVER)), storm = can.Conf(STORM, msg.Option(STORM)) + var position = can.Conf(ACTION, msg.Option(ACTION, can.Cache(river+"."+storm, can._output)||"")) if (position) { can._output.scrollTo(0, position-1); return } can.run({}, [river, storm], function(msg) { - can.onimport._init(can, msg, list, cb, target) + can.onimport._init(can, msg, list, cb, can._output) }) }, }) Volcanos("onexport", {help: "导出数据", list: [], args: function(can, msg, list, cb, target) { - can.core.Next(can.page.Select(can, target, "div.output>fieldset.plugin>form.option"), function(item, next) { + can.core.Next(can.page.Select(can, target, "fieldset.plugin>form.option"), function(item, next) { var list = can.page.Select(can, item, '.args', function(item) { return item.value||"" }) item.dataset.args = JSON.stringify(list), cb(item, next) }) }, }) - +})() diff --git a/pane/Footer.js b/pane/Footer.js index 62405166..d186ba9c 100644 --- a/pane/Footer.js +++ b/pane/Footer.js @@ -1,5 +1,5 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - target.innerHTML = "" + can.onmotion.clear(can) can.onimport._title(can, msg, target) can.onimport._state(can, msg, target) typeof cb == "function" && cb(msg) diff --git a/pane/Header.js b/pane/Header.js index af07712f..4c1bfa2b 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -1,5 +1,6 @@ +(function() { const TITLE = "title", TOPIC = "topic", POD = "pod", STATE = "state", USERNAME = "username" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - target.innerHTML = "" + can.onmotion.clear(can) can.onimport._title(can, msg, target) can.onimport._state(can, msg, target) can.onimport._search(can, msg, target) @@ -7,10 +8,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, typeof cb == "function" && cb(msg) }, _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, 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], - click: function(event) { can.onaction["title"](event, can) }, + can.page.Append(can, target, [{view: [TITLE, "div", item], + click: function(event) { can.onaction.title(event, can) }, }]) }) }, @@ -21,14 +22,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } }, }], }]).input) - var ui = can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["River"]: ["pack"], function(item) { + var ui = can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["River"]: ["pack"], function(item) { return {view: "item", list: [{type: "input", data: {type: "button", name: item, value: item.toLowerCase()}, onclick: function(event) { var cb = can.onaction[item]; typeof cb == "function" && (item == "River"? cb(can): cb(event, can, item)) }, }]} })) }, _state: function(can, msg, target) { - can.core.List(can.Conf("state")||["time", USERNAME], function(item) { + can.core.List(can.Conf(STATE)||["time", USERNAME], function(item) { can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], click: function(event) { can.onaction[item](event, can, item) }, _init: function(target) { @@ -45,7 +46,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onaction.Footer(can) } else if (can.user.isExtension) { can.onaction.River(can) - } else if (can.user.Search(can, "pod")) { + } else if (can.user.Search(can, POD)) { can.onaction.River(can) can.onaction.Footer(can) } @@ -77,36 +78,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }, - time: function(can, target) { - target.innerHTML = can.base.Time(null, "%w %H:%M:%S") - - if (can.user.Search(can, "topic")) { return } - if (can.user.Search(can, "pod")) { return } - - var h = parseInt(can.base.Time(null, "%H")) - can.user.topic(can, h<7 || h>17? "black": "white") + time: function(can, target) { target.innerHTML = can.base.Time(null, "%w %H:%M:%S") + can.user.Search(can, TOPIC) || can.user.Search(can, POD) || can.user.topic(can, can.base.isNight()? "black": "white") }, }) Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - function init() { can.run({}, [], function(msg) { - const USERNAME = "username" - can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name")) - can.Conf(USERNAME).length > 10 && can.Conf(USERNAME, can.Conf(USERNAME).slice(0, 10)) - + function init() { can.run({}, [], function(msg) { can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name")) can.onimport._init(can, msg, list, function(msg) { can.run({}, ["search", "River.onaction._init"]) can.run({}, ["search", "Footer.onaction._init"]) }, can._output) }) } - can.user.topic(can, can.user.Search(can, "topic") || (can.user.Search(can, "pod") || can.base.isNight() ? "black": "white")) - - can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { - msg.Result()? init(): can.user.login(can, init) - }) + can.user.topic(can, can.user.Search(can, TOPIC) || (can.user.Search(can, POD)||can.base.isNight() ? "black": "white")) + can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { msg.Result()? init(): can.user.login(can, init) }) }, title: function(event, can) { - var args = {}; can.core.List(["pod", "topic", "title"], function(key) { + var args = {}; can.core.List([POD, TOPIC, TITLE], function(key) { var value = can.user.Search(can, key); value && (args[key] = value) }) can.user.jumps(can, can.user.Share(can, args, true)) @@ -114,14 +102,10 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, username: function(event, can) { can.user.logout(can) }, pack: function(event, can, key) { - can.core.Item(Volcanos.meta.pack, function(key, msg) { - delete(msg._event), delete(msg._can) - }) + can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) }) + var msg = can.request(event, {name: "demo", content: JSON.stringify(Volcanos.meta.pack)}) var toast = can.user.toast(can, "打包中...", "webpack", 1000000) - var msg = can.request(event) - msg.Option("name", "demo") - msg.Option("content", JSON.stringify(Volcanos.meta.pack)) can.run(event, ["pack"], function(msg) { toast.Close(), can.user.toast(can, "打包成功", "webpack") }) @@ -131,4 +115,4 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) }, }) Volcanos("onexport", {help: "导出数据", list: []}) - +})() diff --git a/pane/River.js b/pane/River.js index 3802f894..2d838773 100644 --- a/pane/River.js +++ b/pane/River.js @@ -1,16 +1,16 @@ -const RIVER = "river", STORM = "storm" +(function() { const RIVER = "river", STORM = "storm", POD = "pod" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - 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._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") - target.innerHTML = "", can.sublist = {} + can.onmotion.clear(can), can.sublist = {} var select; msg.Table(function(value, index, array) { var view = can.onappend.item(can, target, "item", value, function(event, item) { // 左键点击 can.onaction.storm(event, can, value.hash) }, function(event) { // 右键点击 - can.user.carte(can, {}, can.ondetail.list, function(ev, item, meta) { + can.user.carte(can, can.ondetail, can.ondetail.list, function(ev, item, meta) { can.ondetail[item](event, can, item, value.hash) }) }) @@ -36,23 +36,21 @@ Volcanos("onaction", {help: "控件交互", list: ["创建", "刷新"], _init: f return {text: [storm.name, "div", "subitem"], 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.user.Search(can, POD) || storm.name) }, oncontextmenu: function(event) { // 右键点击 - can.user.carte(can, {}, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { + can.user.carte(can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { can.ondetail[item](event, can, item, storm.hash, river) }) }} - }) }]).sublist, select < list.children.length && list.children[select].click() + }) }]).sublist, list.children.length > 0 && list.children[select].click() event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling) can.sublist[river] = list }) }, action: function(event, can, river, storm) { - var msg = can.request(event) - msg.Option(RIVER, can.Conf(RIVER, river)) - msg.Option(STORM, can.Conf(STORM, storm)) + var msg = can.request(event, {river: can.Conf(RIVER, river), storm: can.Conf(STORM, storm)}) can.run(event, ["search", "Action.onaction._init"]) can.page.Select(can, can._output, "div.subitem.select", function(item) { @@ -169,4 +167,4 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }, }) Volcanos("onexport", {help: "导出数据", list: []}) - +})() diff --git a/pane/Search.js b/pane/Search.js index ebd637c8..245f84dc 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -1,93 +1,31 @@ -Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb) { - typeof cb == "function" && cb() +Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { + typeof cb == "function" && cb(msg) }, - input: function(can, msg, cmd, cb) { can._output.innerHTML = "" - can.cb = cb - can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}]) - can.page.Modify(can, can._target, {style: {display: "block"}}) - - can.page.Select(can, can._action, "input[name=word]", function(item) { item.value = cmd[1] }) - var msg = can.request({}) - can.run(msg._event, ["search", "River.onexport.key"]) - - can.run(msg._event, cmd, function(msg) { - can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) { - return {text: [value, "td"], onclick: function(event) { - can.Status("index", index) - can.Status("value", value) - can.run(event, ["render", line.type, line.name, line.text], function(msg) { - can.ui.display.innerHTML = "" - can.onappend.table(can, msg, can.ui.display, "table") - can.onappend.board(can, msg, can.ui.display, "board") - }) - }} - ca.run(event, [""]) - }) - - can.Status("count", msg.append && msg.append[0] && msg[msg.append[0]].length || 0) - can.onappend.board(can, msg, can.ui.content, "board") - }) - }, - - active: function(can, msg, cmd, cb) { can._output.innerHTML = "" - function search(word) { cmd[1] = word || "" - var ev = {}; var res = can.request(ev); res.Copy(msg) - can.run(ev, cmd, function(res) { can.ui.content.innerHTML = "" - can.onappend.table(can, res, can.ui.content, "table", function(value, key, index, line) { - can.Status("count", index+1) - return {text: [value, "td"], onclick: function(event) { - typeof cb == "function" && cb(line) - can.Status("index", index) - can.Status("value", value) - }} - }) - }) - } - - can.ui = can.page.Append(can, can._output, [ - {input: ["word", function(event) { - if (event.key == "Enter") { - search(event.target.value) - } - }], value: cmd[1]||""}, - {view: "content"}, - ]) - can.page.Modify(can, can._target, {style: {display: "block"}}) - can.ui.input.focus() - search(cmd[1]) - }, - - select: function(can, msg, cmd, cb) { can._output.innerHTML = "" + select: function(can, msg, cmd, cb) { can.onmotion.clear(can) var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") function search(word, cb) { cmd[1] = word - var msg = can.request({}) - msg.Option("fields", fields.join(",")) - can.run(msg._event, cmd, function(msg) { can.ui.content.innerHTML = "" + var msg = can.request({}, {fields: fields.join(",")}) + can.run(msg._event, cmd, function(msg) { can.onmotion.clear(can, can.ui.content) can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) { can.Status("count", index+1) - return {text: [value, "td"], onclick: function(event) { - can.Status("index", index) - can.Status("value", value) + return {text: [value, "td"], onclick: function(event) { can.page.Append(can, can.ui.table, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) { can.page.Remove(can, event.target.parentNode) + can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1) }}]) + can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1) }} }) typeof cb == "function" && cb(msg) }) } - can.cb = function() { - typeof cb == "function" && cb(can.page.Select(can, can.ui.display, "tr", function(tr) { - return can.page.Select(can, tr, "td", function(td) { return td.innerHTML }) - }).slice(1)) - can.onaction.close(can) - }, can.ui = can.page.Append(can, can._output, [ + can.ui = can.page.Append(can, can._output, [ {input: ["word", function(event) { if (event.key == "Enter") { search(event.target.value, function(msg) { var list = can.page.Select(can, can.ui.content, "tr"); if (list.length == 2) { @@ -97,30 +35,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, }]}, {view: "content"}, {view: "display", list: [{type: "table", list: [{th: fields}]}]}, ]) - can.page.Modify(can, can._target, {style: {display: "block"}}) + can.cb = function() { + typeof cb == "function" && cb(can.page.Select(can, can.ui.display, "tr", function(tr) { + return can.page.Select(can, tr, "td", function(td) { return td.innerHTML }) + }).slice(1)), can.onmotion.hide(can) + } + + can.onmotion.show(can) can.ui.input.focus() search(cmd[1]) }, }) Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, msg, list, cb, target) { - can.onexport._init(can, msg, list, cb, target) - }, - close: function(can) { - can.page.Modify(can, can._target, {style: {display: "none"}}) - }, - "关闭": function(event, can, key) { - can.onaction.close(can) - }, - "清空": function(event, can, key) { - can._output.innerHTML = "" - }, - "完成": function(event, can, key) { can.cb && can.cb() }, -}) -Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"], - "共享": function(event, can, value, sub) { var msg = sub.request(event) - }, -}) -Volcanos("onexport", {help: "导出数据", list: ["count", "index", "value"], _init: function(can, msg, list, cb, target) { + can.onimport._init(can, msg, list, cb, can._output) }, + "关闭": function(event, can) { can.onmotion.hide(can) }, + "清空": function(event, can) { can.onmotion.clear(can) }, + "完成": function(event, can) { typeof can.cb == "function" && can.cb() }, }) +Volcanos("onexport", {help: "导出数据", list: ["selected", "count"]}) diff --git a/plugin/input.js b/plugin/input.js index ee65c0a0..c7dc1024 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -1,7 +1,16 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) { }, }) -Volcanos("onaction", {help: "控件交互", list: [], +Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) { + can.core.Item(can.onaction, function(key, value) { + can._target && key.indexOf("on") == 0 && (can._target[key] = can._target[key] || function(event) { + value(event, can) + }) + }) , typeof cb == "function" && cb() + // 自动执行 + meta.type == "button" && meta.action == "auto" && can._target.click() + }, + "关闭": function(event, can) { can.page.Remove(can, can.sup._target) }, "上传": function(event, can) { can.user.upload(event, can) }, "执行": function(event, can) { can.run(event) }, @@ -70,4 +79,5 @@ Volcanos("onaction", {help: "控件交互", list: [], } }, }) +Volcanos("onexport", {help: "导出数据", list: []}) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 6d2079ce..7c4ca9bc 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -40,7 +40,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _merge: function(can, sub) ]}, ]); can.core.Copy(can.ui, ui, "display", "output", "cmd") - typeof cb == "function" && cb() + typeof cb == "function" && cb(msg) can.keylist = [], can.onkeymap._init(can, "insert") }, target) }) diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 5c308a7f..66ce00ab 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -6,7 +6,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, {view: ["display", "pre"]}, ]) - typeof cb == "function" && cb() + typeof cb == "function" && cb(msg) can.onimport[can.Option("scale")](can, msg) can.page.Modify(can, can._action, {style: {display: "none"}}) diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index 1fbd7485..09adeb96 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -52,17 +52,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, return can.onappend.item(can, can.ui.project, "item", {name: name}, function(event) { can.group = target, can.core.List(["font-size", "storke-width", "stroke", "fill"], function(key) { can.Action(key, target.Value(key)||can.Action(key)) - }), can.onmotion.show(can, target, {value: 100, length: 10}) + }), can.onmotion.show(can, 10, null, target) }, function(event) { can.user.carte(can, can.onaction||{}, ["隐藏", "显示", "添加", "删除", "清空"], function(ev, item, meta) { switch (item) { case "显示": can.page.Select(can, can.ui.content, "g."+name, function(item) { - can.onmotion.show(can, target, {value: 100, length: 10}) + can.onmotion.show(can, 10, null, target) }); break case "隐藏": can.page.Select(can, can.ui.content, "g."+name, function(item) { - can.onmotion.hide(can, target, {value: 100, length: 10}) + can.onmotion.hide(can, {value: 100, length: 10}, null, target) }); break default: can.onaction[item](event, can, item) diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 335159b8..bf67f561 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -165,7 +165,7 @@ Volcanos("onaction", {help: "控件交互", list: ["演示"], "z-index": 10, }}) }, }) - can.onmotion.show(can, page, {value: 10, length: 20}, next) + can.onmotion.show(can, {value: 10, length: 20}, next, page) }) }, flash: function(can) { @@ -186,7 +186,7 @@ Volcanos("onaction", {help: "控件交互", list: ["演示"], can.onaction.show(can, index) can.ui["布局"].value = "开讲" }, }) - can.onmotion.show(can, page, {value: 10, length: 20}, next) + can.onmotion.show(can, {value: 10, length: 20}, next, page) }) }, spring: function(can) { @@ -210,7 +210,7 @@ Volcanos("onaction", {help: "控件交互", list: ["演示"], "z-index": 10, }}) }, }) - can.onmotion.show(can, page, {value: 10, length: 20}, next) + can.onmotion.show(can, {value: 10, length: 20}, next, page) }) }, diff --git a/plugin/state.js b/plugin/state.js index 053c6202..93efd487 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -51,3 +51,4 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, } }) }, }) +Volcanos("onexport", {help: "导出数据", list: []}) diff --git a/plugin/table.js b/plugin/table.js index 727a5177..ed000b96 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -231,3 +231,4 @@ Volcanos("onaction", {help: "控件交互", list: [], can.run({}) }, true) }, }) +Volcanos("onexport", {help: "导出数据", list: []}) diff --git a/proto.js b/proto.js index 41366fce..fe9ccc2b 100644 --- a/proto.js +++ b/proto.js @@ -31,7 +31,7 @@ var Volcanos = shy("火山架", {libs: [], pack: {}, order: 1, cache: {}, index: } var conf = {}, conf_cb = {}, cache = {} - can = can || {}, list.push(can) && (can.__proto__ = {_name: name, _create_time: new Date(), _load: function(name, cb) { + can = can || {}, list.push(can) && (can.__proto__ = {__proto__: Volcanos.meta, _name: name, _create_time: new Date(), _load: function(name, cb) { for (var cache = meta.cache[name] || []; meta.index < list.length; meta.index++) { if (name == "/plugin/input/date.css" && cache.length > 0) { continue } if (name == "/lib/base.js" && cache.length > 0) { continue } @@ -92,7 +92,7 @@ var Volcanos = shy("火山架", {libs: [], pack: {}, order: 1, cache: {}, index: request: function(event, option) { event = event || {} if (event._msg) { can.core.Item(option, function(key, value) { - msg.Option(key, value) + event._msg.Option(key, value) }) return event._msg }