mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt frame.js
This commit is contained in:
parent
62ed9c8d73
commit
10c84c61fc
306
frame.js
306
frame.js
@ -4,26 +4,26 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
|
|||||||
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb)
|
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb)
|
||||||
}, can.river = can.Conf(chat.RIVER)||{}
|
}, can.river = can.Conf(chat.RIVER)||{}
|
||||||
|
|
||||||
can.core.Next(list, function(item, next) { item.type = "panel"
|
can.core.Next(list, function(item, next) { item.type = chat.PANEL
|
||||||
can.onappend._init(can, item, item.list, function(panel) {
|
can.onappend._init(can, item, item.list, function(panel) {
|
||||||
panel.run = function(event, cmds, cb) { var msg = panel.request(event); cmds = cmds||[]
|
panel.run = function(event, cmds, cb) { var msg = panel.request(event); cmds = cmds||[]
|
||||||
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb)
|
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb)
|
||||||
}, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction._trans
|
}, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction._trans
|
||||||
|
|
||||||
can.core.Item(panel.onaction, function(key, item) { if (key.indexOf("on") == 0) {
|
can.core.Item(panel.onaction, function(key, cb) { if (key.indexOf("on") == 0) {
|
||||||
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(item, {can: panel, msg: msg}) })
|
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) })
|
||||||
} }), panel.onaction._init(panel, item, item.list, next, panel._target)
|
} }), panel.onaction._init(panel, item, item.list, next, panel._target)
|
||||||
|
|
||||||
can.onmotion.float.auto(can, panel._output, "carte", "input")
|
can.onmotion.float.auto(can, panel._output)
|
||||||
}, target)
|
}, target)
|
||||||
}, function() { can.misc.Log(can.user.title(), cli.RUN, can)
|
}, function() { can.misc.Log(can.user.title(), cli.RUN, can)
|
||||||
can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target)
|
can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target)
|
||||||
can.onlayout.topic(can), can.onengine.signal(can, "onmain", can.request())
|
can.onlayout.topic(can), can.onengine.signal(can, chat.ONMAIN, can.request())
|
||||||
can.base.isFunc(cb) && cb()
|
can.base.isFunc(cb) && cb()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
_search: function(event, can, msg, panel, cmds, cb) {
|
_search: function(event, can, msg, panel, cmds, cb) {
|
||||||
var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) {
|
var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split(ice.PT), function(value) {
|
||||||
fun && (sub = mod, mod = fun, fun = mod[value], key = value)
|
fun && (sub = mod, mod = fun, fun = mod[value], key = value)
|
||||||
}); if (!sub || !mod || !fun) { can.misc.Warn("not found", cmds)
|
}); if (!sub || !mod || !fun) { can.misc.Warn("not found", cmds)
|
||||||
return can.base.isFunc(cb) && cb(msg.Echo("warn: ", "not found: ", cmds))
|
return can.base.isFunc(cb) && cb(msg.Echo("warn: ", "not found: ", cmds))
|
||||||
@ -40,8 +40,8 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
|
|||||||
if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return }
|
if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return }
|
||||||
can.search({follow: panel._follow, msg, cmds}, ["Footer.onimport.ncmd"])
|
can.search({follow: panel._follow, msg, cmds}, ["Footer.onimport.ncmd"])
|
||||||
|
|
||||||
var key = panel._name+"."+cmds.join(",")
|
var key = can.core.Keys(panel._name, cmds.join(","))
|
||||||
if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear("append")
|
if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear(ice.MSG_APPEND)
|
||||||
var res = Volcanos.meta.pack[key]; res? msg.Copy(res): can.user.toast(can, "缺失数据")
|
var res = Volcanos.meta.pack[key]; res? msg.Copy(res): can.user.toast(can, "缺失数据")
|
||||||
return can.base.isFunc(cb) && cb(msg)
|
return can.base.isFunc(cb) && cb(msg)
|
||||||
}
|
}
|
||||||
@ -77,86 +77,56 @@ Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name)
|
|||||||
can.ondaemon._list[0] = arg[0]
|
can.ondaemon._list[0] = arg[0]
|
||||||
},
|
},
|
||||||
grow: function(can, msg, arg) {
|
grow: function(can, msg, arg) {
|
||||||
var sub = can.ondaemon._list[msg.Option("_target")]
|
var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]
|
||||||
sub.onimport._grow(sub, can.page.Color(arg.join("")))
|
sub.onimport._grow(sub, can.page.Color(arg.join("")))
|
||||||
},
|
},
|
||||||
toast: function(can, msg, arg) {
|
toast: function(can, msg, arg) {
|
||||||
can.onmotion.float.add(can, "float", can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}))
|
can.onmotion.float.add(can, chat.FLOAT, can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}))
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) {
|
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) {
|
||||||
meta.name = meta.name || "", meta.name = meta.name.split(" ")[0].split(".").pop()
|
meta.name = meta.name||"", meta.name = meta.name.split(ice.SP)[0].split(ice.PT).pop()
|
||||||
field = field || can.onappend.field(can, meta.type, meta, target).first
|
field = field||can.onappend.field(can, meta.type, meta, target).first
|
||||||
var legend = can.page.Select(can, field, ".legend")[0]||can.page.Select(can, field, "legend")[0]
|
var legend = can.page.Select(can, field, ice.PT+html.LEGEND)[0]||can.page.Select(can, field, html.LEGEND)[0]
|
||||||
var option = can.page.Select(can, field, "form.option")[0]
|
var option = can.page.Select(can, field, html.FORM_OPTION)[0]
|
||||||
var action = can.page.Select(can, field, "div.action")[0]
|
var action = can.page.Select(can, field, html.DIV_ACTION)[0]
|
||||||
var output = can.page.Select(can, field, "div.output")[0]
|
var output = can.page.Select(can, field, html.DIV_OUTPUT)[0]
|
||||||
var status = can.page.Select(can, field, "div.status")[0]
|
var status = can.page.Select(can, field, html.DIV_STATUS)[0]
|
||||||
|
|
||||||
var sub = Volcanos(meta.name, {_follow: can.core.Keys(can._follow, meta.name), _target: field,
|
var sub = Volcanos(meta.name, {_follow: can.core.Keys(can._follow, meta.name), _target: field,
|
||||||
_legend: legend, _option: option, _action: action, _output: output, _status: status,
|
_legend: legend, _option: option, _action: action, _output: output, _status: status,
|
||||||
_inputs: {}, _outputs: [], _history: [],
|
_inputs: {}, _outputs: [], _history: [],
|
||||||
Option: function(key, value) {
|
|
||||||
if (key == undefined) { value = {}
|
|
||||||
sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
|
|
||||||
item.name && item.value && (value[item.name] = item.value)
|
|
||||||
}); return value
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof key == "object") { return sub.core.Item(key, sub.Option), key }
|
|
||||||
sub.page.Select(sub, option, "textarea[name="+key+"],"+"input[name="+key+"],"+"select[name="+key+"]", function(item) {
|
|
||||||
value == undefined? (value = item.value): (item.value = value)
|
|
||||||
}); return value
|
|
||||||
},
|
|
||||||
Update: function(event, cmds, cb, silent) {
|
|
||||||
sub.onappend._output(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent)
|
|
||||||
},
|
|
||||||
Action: function(key, value) {
|
|
||||||
if (typeof key == "object") { return sub.core.Item(key, sub.Action), key }
|
|
||||||
sub.page.Select(sub, action, "textarea[name="+key+"],"+"input[name="+key+"],"+"select[name="+key+"]", function(item) {
|
|
||||||
value == undefined? (value = item.value): (item.value = value)
|
|
||||||
}); return value
|
|
||||||
},
|
|
||||||
Status: function(key, value) {
|
Status: function(key, value) {
|
||||||
if (typeof key == "object") {
|
if (sub.base.isObject(key)) { return sub.core.Item(key, sub.Status), key }
|
||||||
value? sub.core.List(value, function(k) { sub.Status(k, key[k]) }): sub.core.Item(key, sub.Status)
|
|
||||||
return key
|
|
||||||
}
|
|
||||||
sub.page.Select(sub, status, "div."+key+">span", function(item) {
|
sub.page.Select(sub, status, "div."+key+">span", function(item) {
|
||||||
return value == undefined? (value = item.innerHTML): (item.innerHTML = value)
|
return value == undefined? (value = item.innerHTML): (item.innerHTML = value)
|
||||||
}).length == 0 && value != undefined && sub.page.Append(sub, status, [{view: "item "+key, list: [
|
}); return value
|
||||||
{text: [key, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [value+"", html.SPAN, key]},
|
},
|
||||||
]}]); return value
|
Action: function(key, value) { return sub.page.SelectArgs(sub, action, key, value)[0] },
|
||||||
|
Option: function(key, value) { return sub.page.SelectArgs(sub, option, key, value)[0] },
|
||||||
|
Update: function(event, cmds, cb, silent) { sub.onappend._output(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent) },
|
||||||
|
Input: function(cmds, silent) {
|
||||||
|
cmds = cmds && cmds.length > 0? cmds: sub.page.SelectArgs(sub, option, ""), cmds = can.base.trim(cmds)
|
||||||
|
silent || cmds[0] == ctx.ACTION || sub.base.Eq(sub._history[sub._history.length-1], cmds) || sub._history.push(cmds)
|
||||||
|
return cmds
|
||||||
},
|
},
|
||||||
Clone: function() {
|
Clone: function() {
|
||||||
meta.args = sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
|
meta.args = sub.page.SelectArgs(sub, option, "")
|
||||||
return item.name && item.value || ""
|
|
||||||
})
|
|
||||||
can.onappend._init(can, meta, list, function(sub) {
|
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 } })
|
can.core.Timer(10, function() { for (var k in sub._inputs) { sub._inputs[k]._target.focus(); break } })
|
||||||
can.base.isFunc(cb) && cb(sub)
|
can.base.isFunc(cb) && cb(sub)
|
||||||
}, target)
|
}, target)
|
||||||
},
|
},
|
||||||
Input: function(cmds, silent) {
|
}, list.concat(Volcanos.meta.libs, Volcanos.meta.volcano), function(sub) { sub.Conf(meta)
|
||||||
cmds = cmds && cmds.length > 0? cmds: sub.page.Select(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.base.Eq(last, cmds) && cmds[0] != ctx.ACTION && !silent && sub._history.push(cmds)
|
|
||||||
return cmds
|
|
||||||
},
|
|
||||||
}, list.concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(sub) { sub.Conf(meta)
|
|
||||||
meta.feature = sub.base.Obj(meta.feature, {})
|
meta.feature = sub.base.Obj(meta.feature, {})
|
||||||
sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"")
|
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)
|
sub.page.ClassList.add(sub, field, meta.index? meta.index.split(ice.PT).pop(): meta.name)
|
||||||
|
|
||||||
sub.page.Modify(sub, sub._legend, {
|
sub.page.Modify(sub, sub._legend, {onmouseenter: function(event) {
|
||||||
onmouseenter: function(event) {
|
sub.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有 ->"].concat(can.core.Item(meta.feature._trans))]))
|
||||||
sub.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有 ->"].concat(can.core.Item(meta.feature._trans))]))
|
}})
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
meta.inputs && sub.onappend._option(sub, meta, sub._option)
|
meta.inputs && sub.onappend._option(sub, meta, sub._option)
|
||||||
can.base.isFunc(cb) && cb(sub)
|
can.base.isFunc(cb) && cb(sub)
|
||||||
@ -164,41 +134,33 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
},
|
},
|
||||||
_option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
|
_option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
|
||||||
function add(item, next) { item._input != html.BUTTON && item.type != html.BUTTON && index++
|
function add(item, next) { item._input != html.BUTTON && item.type != html.BUTTON && index++
|
||||||
return Volcanos(item.name, {_follow: can.core.Keys(can._follow, item.name), _target: can.onappend.input(can, item, args[index]||opts[item.name], option),
|
Volcanos(item.name, {_follow: can.core.Keys(can._follow, item.name),
|
||||||
|
_target: can.onappend.input(can, item, args[index]||opts[item.name], option),
|
||||||
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
||||||
Option: can.Option, Action: can.Action, Status: can.Status,
|
Option: can.Option, Action: can.Action, Status: can.Status,
|
||||||
CloneInput: function() { add(item)._target.focus() }, CloneField: function() { can.Clone() },
|
CloneInput: function() { add(item)._target.focus() }, CloneField: function() { can.Clone() },
|
||||||
}, [item.display||"/plugin/input.js"].concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(input) {
|
}, ([item.display||"/plugin/input.js"]).concat(Volcanos.meta.libs, Volcanos.meta.volcano), function(input) { input.Conf(item)
|
||||||
input.Conf(item), input.sup = can, input.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
input.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||||
if (msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && input.onaction[cmds[1]]) {
|
if (msg.RunAction(event, input, cmds)) { return }
|
||||||
return msg.Option("_handle", "true"), can.core.CallFunc(input.onaction[cmds[1]], {event: event, can: input, msg: msg})
|
if (msg.RunAction(event, can.core.Value(can, "_outputs.-1"), cmds)) { return }
|
||||||
}
|
|
||||||
|
|
||||||
var table = can.core.Value(can, "_outputs.-1")
|
|
||||||
if (msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && table && table.onaction[cmds[1]]) {
|
|
||||||
return msg.Option("_handle", "true"), can.core.CallFunc(table.onaction[cmds[1]], {event: event, can: table, msg: msg})
|
|
||||||
}
|
|
||||||
|
|
||||||
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
||||||
}, can._inputs[item.name] = input
|
}, can._inputs[item.name] = input, input.sup = can
|
||||||
|
|
||||||
can.core.Item(input.onaction, function(key, value) {
|
can.core.Item(input.onaction, function(key, cb) { if(key.indexOf("on") == 0) {
|
||||||
key.indexOf("on") == 0 && !input._target[key] && (input._target[key] = function(event) {
|
input._target[key] = function(event) { cb(event, input) }
|
||||||
value(event, input)
|
} }), can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
|
||||||
})
|
|
||||||
}), can.onappend.figure(input, item, input._target)
|
|
||||||
|
|
||||||
can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
|
can.onappend.figure(input, item, input._target)
|
||||||
})
|
})
|
||||||
}; can.core.Next(can.base.Obj(meta.inputs, []), add)
|
}; can.core.Next(can.base.Obj(meta.inputs, []), add)
|
||||||
},
|
},
|
||||||
_action: function(can, list, action, meta) { action = action || can._action, meta = meta || can.onaction
|
_action: function(can, list, action, meta) { action = action||can._action, meta = meta||can.onaction
|
||||||
can.core.List(list||can.onaction.list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
|
can.core.List(list||can.onaction.list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: html.SPACE}:
|
||||||
typeof item == "string"? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) {
|
can.base.isString(item)? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) {
|
||||||
var cb = meta[item]||meta["_engine"]
|
var cb = meta[item]||meta["_engine"]
|
||||||
cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION,item].concat(can.sup.Input()))
|
cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
|
||||||
|
|
||||||
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
|
}}: item.length > 0? /*列表*/ {type: html.SELECT, name: item[0], values: item.slice(1), onchange: function(event) {
|
||||||
var which = item[event.target.selectedIndex+1]
|
var which = item[event.target.selectedIndex+1]
|
||||||
can.core.CallFunc(meta[which], [event, can, which])
|
can.core.CallFunc(meta[which], [event, can, which])
|
||||||
can.core.CallFunc(meta[item[0]], [event, can, item[0], which])
|
can.core.CallFunc(meta[item[0]], [event, can, item[0], which])
|
||||||
@ -208,22 +170,15 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
return meta
|
return meta
|
||||||
},
|
},
|
||||||
_output: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event)
|
_output: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event)
|
||||||
if (msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && can.onaction[cmds[1]]) {
|
if (msg.RunAction(event, can, cmds)) { return }
|
||||||
return msg.Option("_handle", "true"), can.core.CallFunc(can.onaction[cmds[1]], {event: event, can: can, msg: msg, cmd: cmds[1]})
|
|
||||||
}
|
|
||||||
|
|
||||||
var feature = can.Conf("feature")
|
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) {
|
||||||
var input = msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && feature && feature[cmds[1]]; if (input) {
|
return can.user.input(event, can, meta.feature[cmds[1]], function(ev, button, data, list, args) { var msg = can.request(event, {_handle: ice.TRUE}, can.Option())
|
||||||
can.user.input(event, can, input, function(ev, button, data, list, args) {
|
can.Update(event, cmds.slice(0, 2).concat(args), function(msg) { can.Update({}, can.Input(), cb) }, true)
|
||||||
var msg = can.request(event, {_handle: "true"}, can.Option())
|
|
||||||
can.Update(event, cmds.slice(0, 2).concat(args), function(msg) {
|
|
||||||
can.Update({}, can.Input(), cb)
|
|
||||||
}, true)
|
|
||||||
})
|
})
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
can._daemon == undefined && (can._daemon = can.ondaemon._list.push(can)-1), msg._daemon = msg._daemon||can._daemon
|
can.base.isUndefined(can._daemon) && (can._daemon = can.ondaemon._list.push(can)-1), msg._daemon = msg._daemon||can._daemon
|
||||||
|
|
||||||
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")||{}; can._msg = msg, sub._msg = msg
|
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")||{}; can._msg = msg, sub._msg = msg
|
||||||
var process = msg._can == can || msg._can == sub
|
var process = msg._can == can || msg._can == sub
|
||||||
@ -232,32 +187,28 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
if (can.base.isFunc(cb) && can.core.CallFunc(cb, {can: can, msg: msg})) { return }
|
if (can.base.isFunc(cb) && can.core.CallFunc(cb, {can: can, msg: msg})) { return }
|
||||||
if (silent) { return }
|
if (silent) { return }
|
||||||
|
|
||||||
var display = msg.Option("_display") || meta.display || meta.feature.display || "/plugin/table.js"
|
var display = msg.Option(ice.MSG_DISPLAY)||meta.display||meta.feature.display||"/plugin/table.js"
|
||||||
|
|
||||||
Volcanos(display, {_follow: can._follow+"."+display, _target: can._output, _fields: can._target,
|
Volcanos(display, {_follow: can.core.Keys(can._follow, display), _display: display, _target: can._output, _fields: can._target,
|
||||||
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
||||||
Option: can.Option, Action: can.Action, Status: can.Status,
|
Option: can.Option, Action: can.Action, Status: can.Status,
|
||||||
}, [display].concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(table) {
|
}, [display].concat(Volcanos.meta.libs, Volcanos.meta.volcano), function(table) { table.Conf(can.Conf())
|
||||||
table.Conf(can.Conf()), table.sup = can, table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||||
if (msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && table.onaction[cmds[1]]) {
|
if (msg.RunAction(event, table, cmds)) { return }
|
||||||
return msg.Option("_handle", "true"), can.core.CallFunc(table.onaction[cmds[1]], {event: event, can: table, msg: msg})
|
|
||||||
}
|
|
||||||
|
|
||||||
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
||||||
}, can._outputs.push(table), table._msg = msg
|
}, can._outputs.push(table), table.sup = can, table._msg = msg
|
||||||
|
|
||||||
table._display = display
|
|
||||||
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
|
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
|
||||||
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
|
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
|
||||||
table.onaction && table.onappend._action(table, can.base.Obj(msg.Option("_action"), meta._action||table.onaction.list))
|
table.onaction && table.onappend._action(table, can.base.Obj(msg.Option(ice.MSG_ACTION), table.onaction.list))
|
||||||
table.onexport && table.onappend._status(table, can.base.Obj(msg.Option("_status"), meta._export||table.onexport.list))
|
table.onexport && table.onappend._status(table, can.base.Obj(msg.Option(ice.MSG_STATUS), table.onexport.list))
|
||||||
}, can._output)
|
}, can._output)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
_status: function(can, list, status) { status = status || can._status
|
_status: function(can, list, status) { status = status||can._status
|
||||||
can.core.List(list, function(item) { item = typeof item == "object"? item: {name: item}
|
can.core.List(list, function(item) { item = can.base.isObject(item)? item: {name: item}
|
||||||
can.page.Append(can, status, [{view: "item "+item.name, title: item.name, list: [
|
can.page.Append(can, status, [{view: can.base.join(["item", item.name]), title: item.name, list: [
|
||||||
{text: [item.name, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value||"")+"", html.SPAN, item.name]},
|
{text: [item.name, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value||"")+"", html.SPAN, item.name]},
|
||||||
], }])
|
], }])
|
||||||
})
|
})
|
||||||
@ -288,96 +239,79 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
})
|
})
|
||||||
}); return node
|
}); return node
|
||||||
},
|
},
|
||||||
field: function(can, type, item, target) { type = type || html.INPUT, item = item || {}
|
field: function(can, type, item, target) { type = type||html.INPUT, item = item||{}
|
||||||
var name = (item.nick||item.name||"").split(" ")[0]
|
var name = (item.nick||item.name||"").split(ice.SP)[0]
|
||||||
var title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(" ")[0]+")"
|
var title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(ice.SP)[0]+")"
|
||||||
return can.page.Append(can, target||can._output, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), html.FIELDSET], list: [
|
return can.page.Append(can, target||can._output, [{view: [can.base.join([type||"", item.name||"", item.pos||""]), html.FIELDSET], list: [
|
||||||
name && {text: [title, html.LEGEND]},
|
name && {text: [title, html.LEGEND]},
|
||||||
can.user.mod.isCmd && type == "plugin" && {view: [html.LEGEND, html.DIV, title]},
|
can.user.mod.isCmd && type == chat.PLUGIN && {view: [html.LEGEND, html.DIV, title]},
|
||||||
{view: ["option", "form"]}, {view: ["action"]}, {view: ["output"]}, {view: ["status"]},
|
{view: [html.OPTION, html.FORM]}, {view: [html.ACTION]}, {view: [html.OUTPUT]}, {view: [html.STATUS]},
|
||||||
]}])
|
]}])
|
||||||
},
|
},
|
||||||
input: function(can, item, value, target) {
|
input: function(can, item, value, target) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
case "space": return can.page.Append(can, target, [{view: "item space"}])
|
|
||||||
case "": return can.page.Append(can, target, [item])
|
case "": return can.page.Append(can, target, [item])
|
||||||
|
case "space": return can.page.Append(can, target, [{view: "item space"}])
|
||||||
}
|
}
|
||||||
|
|
||||||
var input = can.page.input(can, item, value)
|
var input = can.page.input(can, item, value)
|
||||||
var br = input.type == html.TEXTAREA? [{type: "br"}]: []
|
var br = input.type == html.TEXTAREA? [{type: html.BR}]: []
|
||||||
var title = can.Conf(["feature", "title", item.name].join("."))||""; title && (input.title = title)
|
var title = can.Conf(["feature", chat.TITLE, item.name].join(ice.PT))||""; title && (input.title = title)
|
||||||
return can.page.Append(can, target, ([{view: ["item "+item.type], list: [input]}]).concat(br))[item.name]
|
return can.page.Append(can, target, ([{view: ["item "+item.type], list: [input]}]).concat(br))[item.name]
|
||||||
},
|
},
|
||||||
table: function(can, msg, cb, target, sort) {
|
table: function(can, msg, cb, target, sort) {
|
||||||
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
|
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
|
||||||
if (key == "value") { key = line.key||line.name, line = {}
|
if (msg.append.length == 2 && msg.append[0] == kit.MDB_KEY && msg.append[1] == kit.MDB_VALUE) {
|
||||||
can.core.List(array, function(item, index) { line[item.key||line.name] = item.value })
|
if (key == kit.MDB_VALUE) { key = line.key }
|
||||||
key == "extra.cmd" && can.onappend.plugin(can, {ctx: line["extra.ctx"], cmd: line["extra.cmd"], arg: line["extra.arg"]}, function(sub) {
|
line = {}, can.core.List(array, function(item) { line[item.key] = item.value })
|
||||||
sub.run = function(event, cmds, cb) { var msg = can.request(event, can.Option(), line)
|
}
|
||||||
can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN], cmds), function(msg) {
|
|
||||||
can.base.isFunc(cb) && cb(msg)
|
|
||||||
}, true)
|
if (key == "extra.cmd") {
|
||||||
|
can.onappend.plugin(can, {ctx: line["extra.ctx"], cmd: line["extra.cmd"], arg: line["extra.arg"]}, function(sub) {
|
||||||
|
sub.run = function(event, cmds, cb) { var msg = can.request(event, line, can.Option())
|
||||||
|
can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN], cmds), cb, true)
|
||||||
}
|
}
|
||||||
}, target)
|
}, target)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {text: [value, "td"], onclick: function(event) { var target = event.target
|
return {text: [value, html.TD], onclick: function(event) { var target = event.target
|
||||||
if (target.tagName == "INPUT" && target.type == html.BUTTON) { var msg = can.sup.request(event, can.Option())
|
if (target.tagName == "INPUT" && target.type == html.BUTTON) { var msg = can.sup.request(event, line, can.Option())
|
||||||
key == "value"? can.core.List(array, function(item, index) { msg.Option(item.key, item.value) }): msg.Option(line)
|
|
||||||
return can.run(event, [ctx.ACTION, target.name], function(msg) { can.run() }, true)
|
return can.run(event, [ctx.ACTION, target.name], function(msg) { can.run() }, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
|
can.sup.onaction.change(event, can.sup, key, value)
|
||||||
can.onimport._init(can, msg, [], cb, can._output)
|
}, ondblclick: function(event) { if ([kit.MDB_KEY].indexOf(key) > -1) { return }
|
||||||
})
|
|
||||||
}, ondblclick: function(event) { var target = event.target
|
|
||||||
var item = can.core.List(can.Conf("feature.insert"), function(item) {
|
var item = can.core.List(can.Conf("feature.insert"), function(item) {
|
||||||
var list = can.core.Split(item.value, "@=", "@=")
|
if (item.name == key) { return item }
|
||||||
var pkey = list[0], pval = list[1]||""
|
})[0]||{name: key, value: value}
|
||||||
|
|
||||||
if (item.name == key) { return {name: key, value: "@"+pkey+"="+value} }
|
item.run = function(event, cmds, cb) { can.run(can.request(event, line)._event, cmds, cb, true) }
|
||||||
})[0]||{name: key, value: "@key="+value}
|
|
||||||
can.onmotion.modifys(can, target, function(event, value, old) { var msg = can.sup.request(event, can.Option())
|
can.onmotion.modifys(can, event.target, function(event, value, old) { var msg = can.sup.request(event, line, can.Option())
|
||||||
key == kit.MDB_VALUE? can.core.List(array, function(item, index) { msg.Option(item.key, item.value) }): msg.Option(line)
|
can.run(event, [ctx.ACTION, mdb.MODIFY, key, value], function(msg) { can.run() }, true)
|
||||||
can.run(event, [ctx.ACTION, mdb.MODIFY, key == kit.MDB_VALUE? line.key||line.name: key, value], function(msg) { can.run() }, true)
|
|
||||||
}, item)
|
}, item)
|
||||||
}}
|
}}
|
||||||
}); table && can.page.Modify(can, table, {className: "content"})
|
}); table && can.page.Modify(can, table, {className: "content"})
|
||||||
|
|
||||||
can.page.Select(can, table, "input[type=button]", function(button) {
|
|
||||||
button.value = can.user.trans(can, button.value)
|
|
||||||
})
|
|
||||||
|
|
||||||
return sort && can.page.RangeTable(can, table, sort), table
|
return sort && can.page.RangeTable(can, table, sort), table
|
||||||
},
|
},
|
||||||
board: function(can, text, target) { text && text.Result && (text = text.Result())
|
board: function(can, text, target) { text && text.Result && (text = text.Result()); if (!text) { return }
|
||||||
// text = text.replace(/</g, "<"), text = text.replace(/>/g, ">"), text = can.page.Color(text||"")
|
var code = can.page.Append(can, target||can._output, [{text: [can.page.Color(text), html.DIV, html.CODE]}]).code
|
||||||
text = can.page.Color(text||"")
|
|
||||||
var code = text && can.page.Append(can, target||can._output, [{text: [text, html.DIV, html.CODE]}]).code
|
|
||||||
can.page.Select(can, code, "input[type=button]", function(target) {
|
can.page.Select(can, code, "input[type=button]", function(target) {
|
||||||
target.onclick = function(event) {
|
target.onclick = function(event) { var msg = can.sup.request(event, can.Option())
|
||||||
var msg = can.sup.request(event, can.Option())
|
|
||||||
return can.run(event, [ctx.ACTION, target.name], function(msg) { can.run() }, true)
|
return can.run(event, [ctx.ACTION, target.name], function(msg) { can.run() }, true)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
code && code.scrollBy(0, 10000)
|
return code.scrollBy(0, 10000), code
|
||||||
return code
|
|
||||||
},
|
|
||||||
style: function(can, cb) {
|
|
||||||
can.require([can._display.replace(/.js$/, ".css")], function() {
|
|
||||||
can.base.isFunc(cb) && cb()
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
figure: function(can, meta, target, cb) {
|
figure: function(can, meta, target, cb) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
|
||||||
if (meta.type == html.BUTTON) { return }
|
var input = meta.action||"key"; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) {
|
||||||
if (meta.type == html.SELECT) { return }
|
|
||||||
var input = meta.action||"key"; can.require(["/plugin/input/"+input+".js"], function(can) {
|
|
||||||
can.core.Item(can.onfigure[input], function(key, on) { if (key.indexOf("on") != 0) { return }
|
can.core.Item(can.onfigure[input], function(key, on) { if (key.indexOf("on") != 0) { return }
|
||||||
target[key] = function(event) {
|
target[key] = function(event) {
|
||||||
can.onappend._init(can, {type: html.INPUT, name: input, pos: "float"}, [], function(sub) {
|
can.onappend._init(can, {type: html.INPUT, name: input, pos: html.FLOAT}, [], function(sub) { sub.Conf(meta)
|
||||||
sub.Conf(meta), sub.run = function(event, cmds, cb) {
|
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
|
||||||
var msg = sub.request(event, can.Option());
|
|
||||||
(meta.run||can.run)(event, cmds, cb, true)
|
(meta.run||can.run)(event, cmds, cb, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,33 +327,23 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
meta.feature = can.base.Obj(value.meta, meta.feature||{})
|
meta.feature = can.base.Obj(value.meta, meta.feature||{})
|
||||||
meta.inputs = can.base.Obj(value.list, meta.inputs||[])
|
meta.inputs = can.base.Obj(value.list, meta.inputs||[])
|
||||||
|
|
||||||
meta.name = meta.name||value.name||"story"
|
meta.height = meta.height||can.Conf(html.HEIGHT)
|
||||||
meta.help = meta.help||value.help||"story"
|
meta.width = meta.width||can.Conf(html.WIDTH)
|
||||||
meta.type = meta.type||"story"
|
|
||||||
|
|
||||||
meta.width = meta.width||can.Conf("width")
|
meta.name = value.name||meta.name||html.STORY
|
||||||
meta.height = meta.height||can.Conf("height")
|
meta.help = value.help||meta.help||html.STORY
|
||||||
|
meta.type = meta.type||html.STORY
|
||||||
|
|
||||||
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) {
|
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) {
|
||||||
sub.base.isFunc(cb) && cb(sub, meta)
|
sub.base.isFunc(cb) && cb(sub, meta)
|
||||||
}, target||can._output)
|
}, target||can._output)
|
||||||
},
|
},
|
||||||
plugin: function(can, meta, cb, target) { meta = meta || {}
|
plugin: function(can, meta, cb, target) { meta = meta||{}
|
||||||
meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target):
|
meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target):
|
||||||
can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index||can.core.Keys(meta.ctx, meta.cmd)], function(msg) { msg.Table(function(value) {
|
can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index||can.core.Keys(meta.ctx, meta.cmd)], function(msg) { msg.Table(function(value) {
|
||||||
can.onappend._plugin(can, value, meta, cb, target)
|
can.onappend._plugin(can, value, meta, cb, target)
|
||||||
}) }, true)
|
}) }, true)
|
||||||
},
|
},
|
||||||
plugins: function(can, meta, cb, target) {
|
|
||||||
can.onappend.plugin(can, meta, function(sub) {
|
|
||||||
can.page.Modify(can, sub._target, {style: {margin: 0}})
|
|
||||||
sub.onmotion.hidden(sub, sub._legend)
|
|
||||||
sub.onmotion.hidden(sub, sub._option)
|
|
||||||
sub.onmotion.hidden(sub, sub._action)
|
|
||||||
sub.onmotion.hidden(sub, sub._status)
|
|
||||||
can.base.isFunc(cb) && cb(sub)
|
|
||||||
}, target)
|
|
||||||
},
|
|
||||||
|
|
||||||
float: function(can, msg, cb) {
|
float: function(can, msg, cb) {
|
||||||
var ui = can.onappend.field(can, "story toast float", {}, document.body)
|
var ui = can.onappend.field(can, "story toast float", {}, document.body)
|
||||||
@ -431,19 +355,17 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
can.page.Modify(can, ui.first, {style: {top: top, left: left}})
|
can.page.Modify(can, ui.first, {style: {top: top, left: left}})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
can.onappend._action(can, ["close", "refresh", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
|
can.onappend._action(can, ["close", "refresh", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
|
||||||
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
|
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
|
||||||
if (event.target.tagName == "INPUT") { return }
|
if (event.target.tagName == "INPUT") { return }
|
||||||
if (event.key == "Escape") { ui.close(); return }
|
if (event.key == "Escape") { ui.close(); return }
|
||||||
if (event.key == " ") { input.focus()
|
if (event.key == " ") { input.focus(), event.stopPropagation(), event.preventDefault() }
|
||||||
event.stopPropagation(), event.preventDefault()
|
|
||||||
}
|
|
||||||
}}))
|
}}))
|
||||||
}, onkeydown: function(event) {
|
}, onkeydown: function(event) {
|
||||||
can.onkeypop.input(event, can)
|
can.onkeypop.input(event, can)
|
||||||
if (event.key != "Enter") { return }
|
if (event.key != "Enter") { return }
|
||||||
event.target.setSelectionRange(0, -1)
|
event.target.setSelectionRange(0, -1)
|
||||||
|
|
||||||
can.page.Select(can, ui.output, "tr", function(tr, index) { if (index == 0) { return }
|
can.page.Select(can, ui.output, "tr", function(tr, index) { if (index == 0) { return }
|
||||||
can.page.Modify(can, tr, {style: {display: "none"}})
|
can.page.Modify(can, tr, {style: {display: "none"}})
|
||||||
can.page.Select(can, tr, "td", function(td) {
|
can.page.Select(can, tr, "td", function(td) {
|
||||||
@ -456,7 +378,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
"refresh": function(event) { ui.close(), can.toast.click() },
|
"refresh": function(event) { ui.close(), can.toast.click() },
|
||||||
})
|
})
|
||||||
can.onappend.table(can, msg, function(value, key, index, line, list) {
|
can.onappend.table(can, msg, function(value, key, index, line, list) {
|
||||||
return {text: [value, "td"], onclick: function(event) {
|
return {text: [value, html.TD], onclick: function(event) {
|
||||||
can.base.isFunc(cb) && cb(value, key, index, line, list)
|
can.base.isFunc(cb) && cb(value, key, index, line, list)
|
||||||
}}
|
}}
|
||||||
}, ui.output)
|
}, ui.output)
|
||||||
@ -596,6 +518,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
|||||||
|
|
||||||
auto: function(can, target, key) { var that = this
|
auto: function(can, target, key) { var that = this
|
||||||
var list = can.core.List(arguments).slice(2)
|
var list = can.core.List(arguments).slice(2)
|
||||||
|
if (list.length == 0) { list = [chat.CARTE, chat.INPUT] }
|
||||||
can.page.Modify(can, target, {onmouseover: function(event) {
|
can.page.Modify(can, target, {onmouseover: function(event) {
|
||||||
if (event.target.tagName == "IMG") { return }
|
if (event.target.tagName == "IMG") { return }
|
||||||
can.core.List(list, function(key, index) { that.del(can, key) })
|
can.core.List(list, function(key, index) { that.del(can, key) })
|
||||||
@ -665,7 +588,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
|||||||
item && can.onappend.figure(can, item, target), target.value = text
|
item && can.onappend.figure(can, item, target), target.value = text
|
||||||
}}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
|
}}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
|
||||||
},
|
},
|
||||||
modifys: function(can, target, cb) { var back = target.innerHTML
|
modifys: function(can, target, cb, item) { var back = target.innerHTML
|
||||||
var ui = can.page.Appends(can, target, [{type: html.TEXTAREA, value: target.innerText, style: {
|
var ui = can.page.Appends(can, target, [{type: html.TEXTAREA, value: target.innerText, style: {
|
||||||
width: target.offsetWidth > 400? 400: target.offsetWidth-20, height: target.offsetHeight < 60? 60: target.offsetHeight-20,
|
width: target.offsetWidth > 400? 400: target.offsetWidth-20, height: target.offsetHeight < 60? 60: target.offsetHeight-20,
|
||||||
}, onkeydown: function(event) {
|
}, onkeydown: function(event) {
|
||||||
@ -685,6 +608,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
|||||||
can.onkeypop.input(event, can)
|
can.onkeypop.input(event, can)
|
||||||
}
|
}
|
||||||
}}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
|
}}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
|
||||||
|
can.onappend.figure(can, item, ui.first)
|
||||||
},
|
},
|
||||||
|
|
||||||
autosize: function(can, target, max, min) {
|
autosize: function(can, target, max, min) {
|
||||||
|
17
lib/base.js
17
lib/base.js
@ -200,11 +200,18 @@ Volcanos("base", {help: "数据类型",
|
|||||||
isNight: function() { var now = new Date()
|
isNight: function() { var now = new Date()
|
||||||
return now.getHours() < 7 || now.getHours() > 17
|
return now.getHours() < 7 || now.getHours() > 17
|
||||||
},
|
},
|
||||||
isArray: function(arg) {
|
|
||||||
return typeof arg == "object" && arg.length != undefined
|
join: function(str, sp) { return str.join(sp||" ") },
|
||||||
},
|
trim: function(args) { if (this.isString(args)) { return args.trim() }
|
||||||
isFunc: function(cb) {
|
if (this.isArray(args)) { for (var i = args.length-1; i >= 0; i--) { if (!args[i]) { args.pop() } else { break } } }
|
||||||
return typeof cb == "function"
|
return args
|
||||||
},
|
},
|
||||||
|
isString: function(arg) { return typeof arg == "string" },
|
||||||
|
isObject: function(arg) { return typeof arg == "object" },
|
||||||
|
isArray: function(arg) { return typeof arg == "object" && arg.length != undefined },
|
||||||
|
isFunction: function(arg) { return typeof arg == "function" },
|
||||||
|
isFunc: function(cb) { return typeof cb == "function" },
|
||||||
|
isUndefined: function(arg) { return arg == undefined },
|
||||||
|
isNull: function(arg) { return arg == null },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg = {}
|
Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg = {}
|
||||||
var proto = {_event: event, _can: can,
|
var proto = {_event: event, _can: can,
|
||||||
|
RunAction: function(event, sub, cmds) { var msg = can.request(event)
|
||||||
|
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && sub && sub.onaction[cmds[1]]) {
|
||||||
|
return msg.Option(ice.MSG_HANDLE, ice.TRUE), can.core.CallFunc(sub.onaction[cmds[1]], {event: event, can: sub, msg: msg, cmd: cmds[1]}), true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
OptionStatus: function() { return msg.Option("_status") },
|
OptionStatus: function() { return msg.Option("_status") },
|
||||||
OptionProcess: function() { return msg.Option("_process") },
|
OptionProcess: function() { return msg.Option("_process") },
|
||||||
Option: function(key, val) {
|
Option: function(key, val) {
|
||||||
|
16
lib/page.js
16
lib/page.js
@ -332,5 +332,21 @@ Volcanos("page", {help: "用户界面", ClassList: {
|
|||||||
}
|
}
|
||||||
return input
|
return input
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SelectArgs: function(can, option, key, cb) {
|
||||||
|
if (can.base.isUndefined(key)) { var value = {}
|
||||||
|
can.page.SelectArgs(can, option, "", function(item) {
|
||||||
|
item.name && item.value && (value[item.name] = item.value)
|
||||||
|
}); return [value]
|
||||||
|
}
|
||||||
|
if (can.base.isObject(key)) {
|
||||||
|
return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [key]
|
||||||
|
}
|
||||||
|
if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) {
|
||||||
|
return item.name && (can.base.isUndefined(value)? item.value: (item.value = value)) || ""
|
||||||
|
} }
|
||||||
|
if (key.indexOf(".") > -1) { return [""]}
|
||||||
|
return can.page.Select(can, option, key? "textarea[name="+key+"],"+"input[name="+key+"],"+"select[name="+key+"]": ".args", cb)
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -286,6 +286,21 @@ fieldset.plugin>div.status {
|
|||||||
fieldset.story>div.status {
|
fieldset.story>div.status {
|
||||||
border-top:1px solid darkcyan;
|
border-top:1px solid darkcyan;
|
||||||
}
|
}
|
||||||
|
fieldset.output {
|
||||||
|
margin:0; padding:0;
|
||||||
|
}
|
||||||
|
fieldset.output>legend {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
fieldset.output>form.option {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
fieldset.output>div.action {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
fieldset.output>div.status {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
fieldset.float {
|
fieldset.float {
|
||||||
background-color:#023531cf;
|
background-color:#023531cf;
|
||||||
position:absolute;
|
position:absolute;
|
||||||
|
@ -17,7 +17,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
|
|||||||
can.onmotion.float.auto(can, can._output, "carte")
|
can.onmotion.float.auto(can, can._output, "carte")
|
||||||
},
|
},
|
||||||
_plugin: function(can, river, storm, sub, meta) {
|
_plugin: function(can, river, storm, sub, meta) {
|
||||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds || [];
|
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[]
|
||||||
var toast = msg.Option("_toast") && can.user.toast(can, msg.Option("_toast"), "", -1)
|
var toast = msg.Option("_toast") && can.user.toast(can, msg.Option("_toast"), "", -1)
|
||||||
return can.run(event, can.misc.Concat([river, storm, meta.id||meta.index||can.core.Keys(meta.key, meta.name)], cmds), function(msg) {
|
return can.run(event, can.misc.Concat([river, storm, meta.id||meta.index||can.core.Keys(meta.key, meta.name)], cmds), function(msg) {
|
||||||
toast && toast.close(), can.base.isFunc(cb) && cb(msg)
|
toast && toast.close(), can.base.isFunc(cb) && cb(msg)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
can.onmotion.clear(can)
|
can.onmotion.clear(can)
|
||||||
if (msg.Option("content")) {
|
if (msg.Option("content")) {
|
||||||
can.onappend.plugins(can, {index: "web.code.vimer"}, function(sub) {
|
can.onappend.plugin(can, {index: "web.code.vimer", style: "full"}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) { var res = can.request(event)
|
sub.run = function(event, cmds, cb) { var res = can.request(event)
|
||||||
if (cmds[1] == "plugin") {
|
if (cmds[1] == "plugin") {
|
||||||
can.run(event, can.misc.Concat(["action", "vimer"], cmds), cb, true)
|
can.run(event, can.misc.Concat(["action", "vimer"], cmds), cb, true)
|
||||||
|
@ -24,7 +24,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
},
|
},
|
||||||
_task: function(can, msg, list, time, view) { return {text: ["", "td"],
|
_task: function(can, msg, list, time, view) { return {text: ["", "td"],
|
||||||
ondblclick: function(event) {
|
ondblclick: function(event) {
|
||||||
can.onaction.insertTask(event, can, time+can.base.Time().slice(time.length))
|
can.onaction.insertTask(event, can, time+can.base.Time(null, "%y-%m-%d %H:%M:%S").slice(time.length))
|
||||||
},
|
},
|
||||||
ondrop: function(event) { event.preventDefault()
|
ondrop: function(event) { event.preventDefault()
|
||||||
can.drop(event, event.target, time)
|
can.drop(event, event.target, time)
|
||||||
|
@ -9,7 +9,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can._tree[""].name = can.dir_root.split("/").pop()
|
can._tree[""].name = can.dir_root.split("/").pop()
|
||||||
|
|
||||||
can.size = 30, can.margin = 30
|
can.size = 30, can.margin = 30
|
||||||
can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) {
|
can.onappend.plugin(can, {index: "web.wiki.draw", style: "output"}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
can.base.isFunc(cb) && cb(sub.request())
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can.Action("height", msg.Option("height")||can.user.mod.isCmd? "max": can.user.isMobile&&can.user.isLandscape? "200": "400")
|
can.Action("height", msg.Option("height")||can.user.mod.isCmd? "max": can.user.isMobile&&can.user.isLandscape? "200": "400")
|
||||||
can.Action("speed", parseInt(msg.Option("speed")||"100"))
|
can.Action("speed", parseInt(msg.Option("speed")||"100"))
|
||||||
|
|
||||||
can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) {
|
can.onappend.plugin(can, {index: "web.wiki.draw", style: "output"}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
can.base.isFunc(cb) && cb(sub.request())
|
||||||
|
|
||||||
|
87
proto.js
87
proto.js
@ -17,12 +17,27 @@ const kit = {
|
|||||||
MDB_LIST: "list",
|
MDB_LIST: "list",
|
||||||
}
|
}
|
||||||
const ice = {
|
const ice = {
|
||||||
|
SP: " ",
|
||||||
|
PT: ".",
|
||||||
|
NL: "\n",
|
||||||
|
|
||||||
|
TRUE: "true",
|
||||||
|
|
||||||
MSG_USERNAME: "user.name",
|
MSG_USERNAME: "user.name",
|
||||||
MSG_USERNICK: "user.nick",
|
MSG_USERNICK: "user.nick",
|
||||||
MSG_TITLE: "sess.title",
|
MSG_TITLE: "sess.title",
|
||||||
MSG_RIVER: "sess.river",
|
MSG_RIVER: "sess.river",
|
||||||
MSG_STORM: "sess.storm",
|
MSG_STORM: "sess.storm",
|
||||||
MSG_FIELDS: "fields",
|
MSG_FIELDS: "fields",
|
||||||
|
|
||||||
|
MSG_APPEND: "append",
|
||||||
|
|
||||||
|
MSG_TARGET: "_target",
|
||||||
|
|
||||||
|
MSG_ACTION: "_action",
|
||||||
|
MSG_STATUS: "_status",
|
||||||
|
MSG_HANDLE: "_handle",
|
||||||
|
MSG_DISPLAY: "_display",
|
||||||
}
|
}
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
@ -94,6 +109,18 @@ const wiki = {
|
|||||||
SHELL: "shell",
|
SHELL: "shell",
|
||||||
}
|
}
|
||||||
const chat = {
|
const chat = {
|
||||||
|
LIB: "lib",
|
||||||
|
PAGE: "page",
|
||||||
|
PANEL: "panel",
|
||||||
|
PLUGIN: "plugin",
|
||||||
|
|
||||||
|
STORY: "story",
|
||||||
|
CARTE: "carte",
|
||||||
|
INPUT: "input",
|
||||||
|
FLOAT: "float",
|
||||||
|
|
||||||
|
ONMAIN: "onmain",
|
||||||
|
|
||||||
RIVER: "river",
|
RIVER: "river",
|
||||||
STORM: "storm",
|
STORM: "storm",
|
||||||
FIELD: "field",
|
FIELD: "field",
|
||||||
@ -135,25 +162,45 @@ const mall = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const html = {
|
const html = {
|
||||||
|
FIELDSET: "fieldset",
|
||||||
|
LEGEND: "legend",
|
||||||
|
OPTION: "option",
|
||||||
|
ACTION: "action",
|
||||||
|
OUTPUT: "output",
|
||||||
|
STATUS: "status",
|
||||||
|
|
||||||
|
FORM_OPTION: "form.option",
|
||||||
|
DIV_ACTION: "div.action",
|
||||||
|
DIV_OUTPUT: "div.output",
|
||||||
|
DIV_STATUS: "div.status",
|
||||||
|
|
||||||
|
INPUT: "input", TEXT: "text",
|
||||||
|
TEXTAREA: "textarea",
|
||||||
|
SELECT: "select",
|
||||||
|
BUTTON: "button",
|
||||||
|
SPACE: "space",
|
||||||
|
BR: "br",
|
||||||
|
TD: "td",
|
||||||
|
|
||||||
|
INPUT_ARGS: ".args",
|
||||||
|
|
||||||
DIV: "div",
|
DIV: "div",
|
||||||
IMG: "img",
|
IMG: "img",
|
||||||
CODE: "code",
|
CODE: "code",
|
||||||
SPAN: "span",
|
SPAN: "span",
|
||||||
LABEL: "label",
|
LABEL: "label",
|
||||||
VIDEO: "video",
|
VIDEO: "video",
|
||||||
BUTTON: "button",
|
|
||||||
LEGEND: "legend",
|
|
||||||
TEXTAREA: "textarea",
|
|
||||||
FIELDSET: "fieldset",
|
|
||||||
SELECT: "select",
|
|
||||||
OPTION: "option",
|
|
||||||
INPUT: "input",
|
|
||||||
TEXT: "text",
|
|
||||||
FILE: "file",
|
FILE: "file",
|
||||||
|
FORM: "form",
|
||||||
|
|
||||||
ITEM: "item",
|
ITEM: "item",
|
||||||
LIST: "list",
|
LIST: "list",
|
||||||
}
|
}
|
||||||
|
const lang = {
|
||||||
|
STRING: "string",
|
||||||
|
OBJECT: "object",
|
||||||
|
FUNCTION: "function",
|
||||||
|
}
|
||||||
|
|
||||||
function shy(help, meta, list, cb) {
|
function shy(help, meta, list, cb) {
|
||||||
var index = 0, args = arguments; function next(type) {
|
var index = 0, args = arguments; function next(type) {
|
||||||
@ -163,14 +210,14 @@ function shy(help, meta, list, cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cb = args[args.length-1] || function() {}
|
cb = args[args.length-1] || function() {}
|
||||||
cb.help = next("string") || ""
|
cb.help = next(lang.STRING) || ""
|
||||||
cb.meta = next("object") || {}
|
cb.meta = next(lang.OBJECT) || {}
|
||||||
cb.list = next("object") || []
|
cb.list = next(lang.OBJECT) || []
|
||||||
return cb
|
return cb
|
||||||
}; var _can_name = ""
|
}; var _can_name = ""
|
||||||
var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: {}, pack: {}, libs: [], cache: {}}, function(name, can, libs, cb) {
|
var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: {}, pack: {}, libs: [], cache: {}}, function(name, can, libs, cb) {
|
||||||
var meta = arguments.callee.meta, list = arguments.callee.list
|
var meta = arguments.callee.meta, list = arguments.callee.list
|
||||||
if (typeof name == "object") { var Config = name; Config.panels = Config.panels||[], Config.main = Config.main||{}
|
if (typeof name == lang.OBJECT) { var Config = name; Config.panels = Config.panels||[], Config.main = Config.main||{}
|
||||||
meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"]
|
meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"]
|
||||||
|
|
||||||
// 预加载
|
// 预加载
|
||||||
@ -193,7 +240,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
|
|||||||
|
|
||||||
// 加载模块
|
// 加载模块
|
||||||
for (var i = 0; i < cache.length; i++) { var sub = cache[i]
|
for (var i = 0; i < cache.length; i++) { var sub = cache[i]
|
||||||
if (typeof cb == "function" && cb(can, name, sub)) { continue }
|
if (typeof cb == lang.FUNCTION && cb(can, name, sub)) { continue }
|
||||||
if (can[sub._name] && can[sub._name]._merge && can[sub._name]._merge(can, sub)) { continue }
|
if (can[sub._name] && can[sub._name]._merge && can[sub._name]._merge(can, sub)) { continue }
|
||||||
if (sub._name == "onkeypop") { can[sub._name] = sub; continue }
|
if (sub._name == "onkeypop") { can[sub._name] = sub; continue }
|
||||||
!can[sub._name] && (can[sub._name] = {}); for (var k in sub) {
|
!can[sub._name] && (can[sub._name] = {}); for (var k in sub) {
|
||||||
@ -202,7 +249,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
require: function(libs, cb, each) { if (!libs || libs.length == 0) {
|
require: function(libs, cb, each) { if (!libs || libs.length == 0) {
|
||||||
typeof cb == "function" && setTimeout(function() { cb(can) }, 10)
|
typeof cb == lang.FUNCTION && setTimeout(function() { cb(can) }, 10)
|
||||||
return // 加载完成
|
return // 加载完成
|
||||||
}
|
}
|
||||||
if (!libs[0]) { return can.require(libs.slice(1), cb, each) }
|
if (!libs[0]) { return can.require(libs.slice(1), cb, each) }
|
||||||
@ -225,9 +272,9 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
|
|||||||
|
|
||||||
set: function(name, key, value) {
|
set: function(name, key, value) {
|
||||||
var msg = can.request({}); msg.Option(key, value)
|
var msg = can.request({}); msg.Option(key, value)
|
||||||
return can.search(msg._event, [name+".onimport."+key])
|
return can.search(msg._event, [can.base.Keys(name, "onimport", key)])
|
||||||
},
|
},
|
||||||
get: function(name, key) { return can.search({}, [name+".onexport."+key]) },
|
get: function(name, key) { return can.search({}, [can.base.Keys(name, "onexport", key)]) },
|
||||||
search: function(event, cmds, cb) { return can.run && can.run(event, ["_search"].concat(cmds), cb, true) },
|
search: function(event, cmds, cb) { return can.run && can.run(event, ["_search"].concat(cmds), cb, true) },
|
||||||
|
|
||||||
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
|
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
|
||||||
@ -242,19 +289,17 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
|
|||||||
return can.require(libs, cb), can
|
return can.require(libs, cb), can
|
||||||
})
|
})
|
||||||
Volcanos.meta._load = function(url, cb) {
|
Volcanos.meta._load = function(url, cb) {
|
||||||
switch (url.split("?")[0].split(".").pop().toLowerCase()) {
|
switch (url.split("?")[0].split(ice.PT).pop().toLowerCase()) {
|
||||||
case "css":
|
case "css":
|
||||||
var item = document.createElement(kit.MDB_LINK)
|
var item = document.createElement(kit.MDB_LINK)
|
||||||
item.rel = "stylesheet", item.type = "text/css"
|
item.rel = "stylesheet", item.type = "text/css"
|
||||||
item.onload = cb, item.href = url
|
item.onload = cb, item.href = url
|
||||||
break
|
return document.head.appendChild(item), item
|
||||||
case "js":
|
case "js":
|
||||||
var item = document.createElement(ssh.SCRIPT)
|
var item = document.createElement(ssh.SCRIPT)
|
||||||
item.onload = cb, item.src = url
|
item.onload = cb, item.src = url
|
||||||
break
|
return document.body.appendChild(item), item
|
||||||
default: return
|
|
||||||
}
|
}
|
||||||
return document.body.appendChild(item), item
|
|
||||||
}
|
}
|
||||||
function cmd(tool) {
|
function cmd(tool) {
|
||||||
Volcanos({name: "chat", panels: [
|
Volcanos({name: "chat", panels: [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user