1
0
forked from x/volcanos
This commit is contained in:
shaoying 2020-12-05 10:55:27 +08:00
parent 9ff9c2469e
commit 296257255a
15 changed files with 186 additions and 267 deletions

192
frame.js
View File

@ -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)
input.onaction && input.onaction._init && input.onaction._init(input, item, [], next, input._target)
})
}), next()
// 自动执行
item.type == "button" && item.action == "auto" && input._target.click()
})
}
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

View File

@ -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
},
})

View File

@ -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)
})
},
})
})()

View File

@ -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)

View File

@ -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: []})
})()

View File

@ -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: []})
})()

View File

@ -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"]})

View File

@ -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: []})

View File

@ -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)
})

View File

@ -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"}})

View File

@ -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)

View File

@ -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)
})
},

View File

@ -51,3 +51,4 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
} })
},
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -231,3 +231,4 @@ Volcanos("onaction", {help: "控件交互", list: [],
can.run({})
}, true) },
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -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
}