mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt onappend
This commit is contained in:
parent
72907b43b7
commit
02c53dc63b
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,8 +1,8 @@
|
||||
*.swp
|
||||
*.swo
|
||||
cmd.js
|
||||
cmd.css
|
||||
cache.js
|
||||
cache.css
|
||||
.DS_Store
|
||||
page/can.js
|
||||
page/can.css
|
||||
page/cache.js
|
||||
page/cache.css
|
||||
pack/
|
||||
|
217
frame.js
217
frame.js
@ -137,7 +137,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
},
|
||||
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) },
|
||||
Update: function(event, cmds, cb, silent) { sub.onappend._output0(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)
|
||||
@ -153,19 +153,26 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"")
|
||||
|
||||
sub.page.Modify(sub, sub._legend, {onmouseenter: function(event) {
|
||||
sub.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有 ->"].concat(can.core.Item(meta.feature._trans))], ["close"]))
|
||||
}}), meta.inputs && sub.onappend._option(sub, meta, sub._option)
|
||||
sub.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有 ->"].concat(can.core.Item(meta.feature._trans))], [cli.CLOSE]))
|
||||
}})
|
||||
|
||||
if (meta.msg) { var msg = sub.request(); msg.Copy(sub.base.Obj(meta.msg))
|
||||
sub.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY))
|
||||
meta.inputs && sub.onappend._option(sub, meta, sub._option, true)
|
||||
} else {
|
||||
meta.inputs && sub.onappend._option(sub, meta, sub._option)
|
||||
}
|
||||
|
||||
can.base.isFunc(cb) && cb(sub)
|
||||
}); return sub
|
||||
},
|
||||
_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, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
|
||||
function add(item, next) { 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),
|
||||
_target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option),
|
||||
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
||||
Option: can.Option, Action: can.Action, Status: can.Status,
|
||||
CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, CloneField: function() { can.Clone() },
|
||||
Option: can.Option, Action: can.Action, Status: can.Status, CloneField: function() { can.Clone() },
|
||||
CloneInput: function() { can.onmotion.focus(can, add(item)._target) },
|
||||
}, [item.display||"/plugin/input.js"], function(input) { input.Conf(item)
|
||||
input.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||
if (msg.RunAction(event, input, cmds)) { return }
|
||||
@ -175,14 +182,14 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
|
||||
can.core.ItemCB(input.onaction, function(key, cb) {
|
||||
input._target[key] = function(event) { cb(event, input) }
|
||||
}), can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target]);
|
||||
}), skip? next(): can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target]);
|
||||
|
||||
(item.action||meta.feature["inputs"]) && can.onappend.figure(input, item, input._target)
|
||||
(item.action||can.core.Value(meta, "feature.inputs")) && can.onappend.figure(input, item, input._target)
|
||||
})
|
||||
}; can.core.Next(can.base.Obj(meta.inputs, []).concat(meta.type == chat.FLOAT? [{type: html.BUTTON, name: cli.CLOSE}]: []), add)
|
||||
}; can.core.Next(can.base.Obj(meta.inputs, can.core.Value(can, "onimport.list")).concat(meta.type == chat.FLOAT? [{type: html.BUTTON, name: cli.CLOSE}]: []), add)
|
||||
},
|
||||
_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: html.SPACE}:
|
||||
_action: function(can, list, action, meta) { meta = meta||can.onaction, action = action||can._action, can.onmotion.clear(can, action)
|
||||
can.core.List(can.base.Obj(list, can.core.Value(can, "onaction.list")), function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: html.SPACE}:
|
||||
can.base.isString(item)? /*按键*/ {type: html.BUTTON, value: can.user.trans(can, item), onclick: function(event) {
|
||||
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()))
|
||||
@ -196,7 +203,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
, "", action)})
|
||||
return meta
|
||||
},
|
||||
_output: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event)
|
||||
_output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event)
|
||||
if (msg.RunAction(event, can, cmds)) { return }
|
||||
|
||||
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { can.request(event, {action: cmds[1]})
|
||||
@ -205,47 +212,50 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
})
|
||||
}
|
||||
|
||||
can.base.isUndefined(can._daemon) && (can._daemon = can.ondaemon._list.push(can)-1), msg._daemon = msg._daemon||can._daemon
|
||||
if (can.base.isUndefined(msg._daemon)) {
|
||||
can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1)
|
||||
if (can._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
|
||||
var process = msg._can == can || msg._can == sub
|
||||
if (process && can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return }
|
||||
if (process && can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return }
|
||||
if (process && can.core.CallFunc([sub, "onimport._process"], {can: sub, msg: msg, cb: cb})) { return }
|
||||
if (process && can.core.CallFunc([can, "onimport._process"], {can: can, msg: msg, cb: cb})) { return }
|
||||
if (can.base.isFunc(cb) && can.core.CallFunc(cb, {can: can, msg: msg})) { return }
|
||||
if (silent) { return }
|
||||
|
||||
var display = msg.Option(ice.MSG_DISPLAY)||meta.display||meta.feature.display||"/plugin/table.js"
|
||||
can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)||meta.display||meta.feature.display)
|
||||
})
|
||||
},
|
||||
_output: function(can, msg, display, output) { display = display||"/plugin/table.js", output = output||can._output
|
||||
Volcanos(display, {_follow: can.core.Keys(can._follow, display), _display: display, _target: output, _fields: can._target,
|
||||
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
|
||||
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status,
|
||||
}, [display, "/plugin/table.js"], function(table) { table.Conf(can.Conf())
|
||||
table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||
if (msg.RunAction(event, table, cmds)) { return }
|
||||
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
||||
}, can._outputs.push(table), table.sup = can, table._msg = msg
|
||||
|
||||
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,
|
||||
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status,
|
||||
}, [display, "/plugin/table.js"], function(table) { table.Conf(can.Conf())
|
||||
table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||
if (msg.RunAction(event, table, cmds)) { return }
|
||||
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
||||
}, can._outputs.push(table), table.sup = can, table._msg = 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, "")
|
||||
table.onaction && table.onappend._action(table, can.base.Obj(msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION), table.onaction.list))
|
||||
table.onexport && table.onappend._status(table, can.base.Obj(msg.Option(ice.MSG_STATUS), table.onexport.list))
|
||||
}, can._output)
|
||||
})
|
||||
table.onimport && can.core.CallFunc(table.onimport._init, {can: table, msg: msg, list: msg.result||msg.append||[], cb: function(msg) {
|
||||
table.onappend._action(table, msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION))
|
||||
table.onappend._status(table, msg.Option(ice.MSG_STATUS))
|
||||
}, target: output})
|
||||
})
|
||||
},
|
||||
_status: function(can, list, status) { status = status||can._status, can.onmotion.clear(can, status)
|
||||
can.core.List(list, function(item) { item = can.base.isObject(item)? item: {name: item}
|
||||
can.core.List(can.base.Obj(list, can.core.Value(can, "onexport.list")), function(item) { item = can.base.isObject(item)? item: {name: item}
|
||||
can.page.Append(can, status, [{view: can.base.join([html.ITEM, item.name]), title: item.name, list: [
|
||||
{text: [item.name, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value||"")+"", html.SPAN, item.name]},
|
||||
], }])
|
||||
})
|
||||
},
|
||||
|
||||
list: function(can, root, cb, target) {
|
||||
list: function(can, root, cb, target) { target = target||can._output
|
||||
can.core.List(root.list, function(item) {
|
||||
var ui = can.page.Append(can, target, [{view: [html.ITEM, html.DIV, item.meta.name], onclick: function(event) {
|
||||
can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list)
|
||||
can.onmotion.select(can, nav, "div.item", event.target)
|
||||
can.onmotion.select(can, target, "div.item", event.target)
|
||||
}}, {view: html.LIST}]); can.onappend.list(can, item, cb, ui.list)
|
||||
})
|
||||
},
|
||||
@ -257,7 +267,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
}]); return ui.first
|
||||
},
|
||||
tree: function(can, list, field, split, cb, target, node) {
|
||||
node = node || {"": target}; can.core.List(list, function(item) {
|
||||
node = node||{"": target}; can.core.List(list, function(item) {
|
||||
item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return }
|
||||
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split)
|
||||
|
||||
@ -306,11 +316,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
if (target.tagName == "INPUT" && target.type == html.BUTTON) { var msg = can.sup.request(event, line, can.Option())
|
||||
return can.run(event, [ctx.ACTION, target.name], function(msg) { can.run() }, true)
|
||||
}
|
||||
|
||||
if (key == mdb.HASH && can.user.mod.isDiv) {
|
||||
can.user.jumps("/chat/div/"+value)
|
||||
return
|
||||
}
|
||||
if (key == mdb.HASH && can.user.mod.isDiv) { return can.user.jumps("/chat/div/"+value) }
|
||||
can.sup.onaction.change(event, can.sup, key, value)
|
||||
}, ondblclick: function(event) { if ([mdb.KEY].indexOf(key) > -1) { return }
|
||||
var item = can.core.List(can.Conf("feature.insert"), function(item) {
|
||||
@ -324,7 +330,6 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
}, item)
|
||||
}}
|
||||
}); table && can.page.Modify(can, table, {className: chat.CONTENT})
|
||||
|
||||
return sort && can.page.RangeTable(can, table, sort), table
|
||||
},
|
||||
board: function(can, text, target) { text && text.Result && (text = text.Result()); if (!text) { return }
|
||||
@ -337,38 +342,6 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
return code.scrollBy(0, 10000), code
|
||||
},
|
||||
|
||||
figure: function(can, meta, target, cb) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
|
||||
var input = meta.action||mdb.KEY; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) {
|
||||
can.core.ItemCB(can.onfigure[input], function(key, on) {
|
||||
target[key] = function(event) {
|
||||
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, [], function(sub) { sub.Conf(meta)
|
||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
|
||||
(meta.run||can.run)(event, cmds, cb, true)
|
||||
}
|
||||
|
||||
meta.style && sub.page.Modify(sub, sub._target, {style: meta.style})
|
||||
can.onmotion.float.add(can, chat.INPUT, sub)
|
||||
on(event, sub, meta, cb, target)
|
||||
}, document.body)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
plugin: function(can, meta, cb, target) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)
|
||||
var p = can.onengine.plugin.meta[meta.index]
|
||||
var res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) }
|
||||
(meta.meta || meta.inputs && meta.inputs.length > 0)? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target):
|
||||
p? can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) {
|
||||
can.base.isFunc(cbs) && cbs(sub, meta, skip)
|
||||
sub.run = function(event, cmds, cb) {
|
||||
can.core.CallFunc(p, {msg: can.request(event), cmds: cmds, cb: cb})
|
||||
}
|
||||
}, target):
|
||||
can.run(can.request({}, meta)._event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) {
|
||||
can.onappend._plugin(can, value, meta, cbs, target)
|
||||
}) }, true)
|
||||
return res
|
||||
},
|
||||
_plugin: function(can, value, meta, cb, target) {
|
||||
meta.feature = meta.feature||can.base.Obj(value.meta, {})
|
||||
meta.inputs = meta.inputs||can.base.Obj(value.list, [])
|
||||
@ -385,45 +358,70 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
can.base.isFunc(cb) && cb(sub, meta, skip)
|
||||
}, target||can._output)
|
||||
},
|
||||
plugin: function(can, meta, cb, target) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)
|
||||
var p = can.onengine.plugin.meta[meta.index]
|
||||
var res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) }
|
||||
(meta.meta || meta.inputs && meta.inputs.length > 0)? /* 局部命令 */ can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target):
|
||||
p? /* 前端命令 */ can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) {
|
||||
sub.run = function(event, cmds, cb) { can.core.CallFunc(p, {msg: can.request(event), cmds: cmds, cb: cb}) }
|
||||
can.base.isFunc(cbs) && cbs(sub, meta, skip)
|
||||
}, target): /* 后端命令 */ can.run(can.request({}, meta)._event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) {
|
||||
can.onappend._plugin(can, value, meta, cbs, target)
|
||||
}) }, true)
|
||||
return res
|
||||
},
|
||||
figure: function(can, meta, target, cbs) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
|
||||
var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+".js"], function(can) {
|
||||
can.core.ItemCB(can.onfigure[input], function(key, on) { target[key] = function(event) { on(event, can, meta, function(cb) {
|
||||
can.sub? can.base.isFunc(cb) && cb(can.sub, cbs): can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta)
|
||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
|
||||
(meta.run||can.run)(event, cmds, cb, true)
|
||||
}, can.sub = sub
|
||||
|
||||
sub.close = function() { sub.page.Remove(sub, sub._target), delete(can.sub) }
|
||||
sub.onappend._action(sub, [cli.CLOSE, cli.CLEAR], sub._action, kit.Dict(
|
||||
cli.CLOSE, function(event) { sub.close() },
|
||||
cli.CLEAR, function(event) { target.value = "" },
|
||||
)), sub.onappend._status(sub, [mdb.TOTAL, mdb.INDEX])
|
||||
|
||||
meta.style && sub.page.Modify(sub, sub._target, {style: meta.style})
|
||||
can.base.isFunc(cb) && cb(sub, cbs)
|
||||
}, document.body)
|
||||
}, target) } })
|
||||
})
|
||||
},
|
||||
float: function(can, msg, cb) {
|
||||
var ui = can.onappend.field(can, "story toast float", {}, document.body)
|
||||
ui.close = function() { can.page.Remove(can, ui.first), can.onengine.signal(can, "keymap.focus") }
|
||||
can.onmotion.float.auto(can, ui.output, chat.CARTE, chat.INPUT)
|
||||
ui.close = function() { can.page.Remove(can, ui.first) }
|
||||
|
||||
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
|
||||
can.page.Modify(can, ui.output, {style: {"max-height": height-28, "max-width": width}})
|
||||
can.page.Modify(can, ui.first, {style: {top: top, left: left}})
|
||||
can.getActionSize(function(left, top, height, width) {
|
||||
can.page.Modify(can, ui.output, {style: kit.Dict(html.MAX_HEIGHT, height-28, html.MAX_WIDTH, width)})
|
||||
can.page.Modify(can, ui.first, {style: {left: left, top: top}})
|
||||
})
|
||||
|
||||
can.onappend._action(can, [cli.CLOSE, cli.REFRESH, {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
|
||||
can.onappend._action(can, [cli.CLOSE, cli.REFRESH, {input: html.TEXT, placeholder: "filter", _init: function(input) {
|
||||
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
|
||||
if (event.target.tagName == "INPUT") { return }
|
||||
if (event.key == lang.ESCAPE) { ui.close(); return }
|
||||
if (event.key == ice.SP) { input.focus(), event.stopPropagation(), event.preventDefault() }
|
||||
}}))
|
||||
}, onkeydown: function(event) {
|
||||
can.onkeypop.input(event, can)
|
||||
}, onkeydown: function(event) { can.onkeypop.input(event, can)
|
||||
if (event.key != lang.ENTER) { return }
|
||||
event.target.setSelectionRange(0, -1)
|
||||
|
||||
can.page.Select(can, ui.output, html.TR, function(tr, index) { if (index == 0) { return }
|
||||
can.page.Modify(can, tr, {style: {display: html.NONE}})
|
||||
can.page.Select(can, tr, html.TD, function(td) {
|
||||
if (td.innerText.indexOf(event.target.value) > -1) {
|
||||
can.page.Modify(can, tr, {style: {display: ""}})
|
||||
}
|
||||
})
|
||||
can.page.ClassList.add(can, tr, html.HIDDEN)
|
||||
can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(event.target.value) > -1) {
|
||||
can.page.ClassList.del(can, tr, html.HIDDEN)
|
||||
} })
|
||||
})
|
||||
}}], ui.action, {"close": ui.close,
|
||||
"refresh": function(event) { ui.close(), can.toast.click() },
|
||||
})
|
||||
}}], ui.action, kit.Dict(cli.CLOSE, ui.close, cli.REFRESH, function(event) { ui.close(), can.toast.click()}))
|
||||
|
||||
can.onappend.table(can, msg, function(value, key, index, line, list) {
|
||||
return {text: [value, html.TD], onclick: function(event) {
|
||||
can.base.isFunc(cb) && cb(value, key, index, line, list)
|
||||
}}
|
||||
}, ui.output)
|
||||
can.onappend.board(can, msg.Result(), ui.output)
|
||||
}, ui.output), can.onappend.board(can, msg.Result(), ui.output)
|
||||
return ui
|
||||
},
|
||||
}, [], function(can) {})
|
||||
@ -468,20 +466,22 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
|
||||
background: function(can, url, target) {
|
||||
can.page.Modify(can, target||document.body, {style: {background: url == "" || url == "void"? "": 'url("'+url+'")'}})
|
||||
},
|
||||
figure: function(event, can, target, right) { target = target||can._target; if (!event || !event.target) { return }
|
||||
var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight-5; if (right) {
|
||||
var left = event.clientX-event.offsetX+event.target.offsetWidth, top = event.clientY-event.offsetY
|
||||
figure: function(event, can, target, right, layout) { target = target||can._target
|
||||
if (!layout) { if (!event || !event.target) { return }
|
||||
var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight-5; if (right) {
|
||||
var left = event.clientX-event.offsetX+event.target.offsetWidth, top = event.clientY-event.offsetY
|
||||
}
|
||||
if (left+target.offsetWidth>window.innerWidth) { left = window.innerWidth - target.offsetWidth }
|
||||
if (top+target.offsetHeight>window.innerHeight-100) { top = window.innerHeight - target.offsetHeight - 100 }
|
||||
|
||||
|
||||
layout = {left: left, top: top}
|
||||
if (layout.left < 0) { layout.left = 0 }
|
||||
if (layout.top < 0) { layout.top = 0 }
|
||||
}
|
||||
|
||||
if (left+target.offsetWidth>window.innerWidth) { left = window.innerWidth - target.offsetWidth }
|
||||
if (top+target.offsetHeight>window.innerHeight-100) { top = window.innerHeight - target.offsetHeight - 100 }
|
||||
|
||||
var layout = {left: left, top: top}
|
||||
if (layout.left < 0) { layout.left = 0 }
|
||||
if (layout.top < 0) { layout.top = 0 }
|
||||
|
||||
can.page.Modify(can, target, {style: layout})
|
||||
can.onmotion.move(can, target, layout)
|
||||
return layout
|
||||
},
|
||||
|
||||
display: function(can, target) { target = target||can._target
|
||||
@ -652,6 +652,15 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
||||
}}])
|
||||
},
|
||||
|
||||
link: function(can, target, text) {
|
||||
if (target.innerText == "") { target.innerText = target.href }
|
||||
can.page.Modify(can, target, {target: "_blank"})
|
||||
},
|
||||
copy: function(can, target, text) {
|
||||
target.title = "点击复制", target.onclick = function(event) {
|
||||
can.user.copy(event, can, text||target.innerText)
|
||||
}
|
||||
},
|
||||
move: function(can, target, layout, cb) { var begin
|
||||
target.onmousedown = function(event) {
|
||||
layout.height = target.offsetHeight, layout.width = target.offsetWidth
|
||||
|
@ -37,7 +37,7 @@ Volcanos("core", {help: "数据结构",
|
||||
// 字符定义
|
||||
function _list(str) { var res = {}; for (var i = 0; i < str.length; i++) { res[str[i]] = true }; return res }
|
||||
var space = _list(arg[0]||"\t ,;\n") // 空白符
|
||||
var block = _list(arg[1]||"{[(.:)]}") // 分隔符
|
||||
var block = _list(arg[1]||"{[()]}") // 分隔符
|
||||
var quote = _list(arg[2]||"'\"`") // 引用符
|
||||
var trans = _list(arg[3]||"\\") // 转义符
|
||||
|
||||
@ -174,6 +174,7 @@ Volcanos("core", {help: "数据结构",
|
||||
}),
|
||||
|
||||
Timer300ms: function(cb) { this.Timer(300, cb) },
|
||||
Timer300: function(cb) { this.Timer(300, cb) },
|
||||
Timer3s: function(cb) { this.Timer(3000, cb) },
|
||||
Timer: shy("定时器, value, [1,2,3,4], {interval, length}", function(interval, cb, cbs) {
|
||||
var timer = {stop: false}; function loop(i) {
|
||||
|
@ -208,9 +208,10 @@ Volcanos("page", {help: "用户界面", ClassList: {
|
||||
})
|
||||
}])
|
||||
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index, array) {
|
||||
return {type: html.TR, dataset: {index: index}, list: can.core.List(list, function(key) { if (key.indexOf("_") == 0) { return }
|
||||
var _list = can.core.List(list, function(key) { if (key.indexOf("_") == 0) { return }
|
||||
return cb(can.page.Color(line[key]).trim(), key, index, line, array)
|
||||
})}
|
||||
})
|
||||
return _list.length > 0? {type: html.TR, dataset: {index: index}, list: _list}: undefined
|
||||
}))
|
||||
return can.page.OrderTable(can, table)
|
||||
}),
|
||||
|
10
lib/user.js
10
lib/user.js
@ -37,7 +37,7 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
|
||||
alert: function(text) { alert(JSON.stringify(text)) },
|
||||
confirm: function(text) { return confirm(JSON.stringify(text)) },
|
||||
prompt: function(text, cb, def, silent) { (text = silent? def: prompt(text, def||"")) != undefined && typeof cb == lang.FUNCTION && cb(text); return text },
|
||||
prompt: function(tip, def, cb, silent) { (text = silent? def: prompt(tip, def||"")) != undefined && typeof cb == lang.FUNCTION && cb(text); return text },
|
||||
reload: function(force) { (force || confirm("重新加载页面?")) && location.reload() },
|
||||
jumps: function(url) { location.href = url },
|
||||
open: function(url) { window.open(url) },
|
||||
@ -65,6 +65,7 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
if (can.base.isFunction(text)) { text = text.name||"" }
|
||||
return can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || {
|
||||
"create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "编辑",
|
||||
"inputs": "补全", "prunes": "清理", "export": "导出", "import": "导入",
|
||||
"list": "查看", "back": "返回", "run": "执行", "done": "完成", "share": "共享",
|
||||
"edit": "编辑", "save": "保存", "copy": "复制", "show": "显示", "hide": "隐藏",
|
||||
"project": "项目", "profile": "详情", "actions": "参数",
|
||||
@ -218,7 +219,7 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
}
|
||||
return event.stopPropagation(), event.preventDefault(), carte
|
||||
},
|
||||
cartes: function(event, can, meta, list, cb, parent) {
|
||||
carteRight: function(event, can, meta, list, cb, parent) {
|
||||
var carte = can.user.carte(event, can, meta, list, cb, parent)
|
||||
can.page.Modify(can, carte._target, {style: {
|
||||
left: event.clientX-event.offsetX+event.target.offsetWidth-3,
|
||||
@ -226,6 +227,11 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
}})
|
||||
return carte
|
||||
},
|
||||
carteClient: function(event, can, meta, list, cb, parent) {
|
||||
var ui = can.user.carte(event, can, meta, list, cb, parent)
|
||||
can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}})
|
||||
},
|
||||
|
||||
input: function(event, can, form, cb, button) { // form [ string, array, object, {type: "select", values: []}
|
||||
var msg = can.request(event)
|
||||
var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [
|
||||
|
@ -1,10 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="/page/cmd.css">
|
||||
</head>
|
||||
<body>
|
||||
<script src="/page/cmd.js"></script>
|
||||
<script>cmd()</script>
|
||||
</body>
|
@ -9,12 +9,18 @@ a {
|
||||
h1, h2, h3 {
|
||||
clear:both;
|
||||
}
|
||||
tr.show {
|
||||
background:red;
|
||||
}
|
||||
h1:hover, h2:hover, h3:hover {
|
||||
background:green; cursor:pointer;
|
||||
}
|
||||
.hide {
|
||||
display:none;
|
||||
}
|
||||
.hidden {
|
||||
display:none;
|
||||
}
|
||||
div.item {
|
||||
cursor:pointer;
|
||||
}
|
||||
@ -35,7 +41,7 @@ div.story[data-type=spark] {
|
||||
box-shadow:4px 4px 10px 1px #626bd0;
|
||||
margin:10px 0px; padding:4px 10px;
|
||||
border-left:solid 4px blue;
|
||||
cursor:copy;
|
||||
overflow:auto; cursor:copy;
|
||||
}
|
||||
div.story[data-type=spark] span:hover {
|
||||
box-shadow: 4px 4px 10px 1px #29318e;
|
||||
|
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<link rel="apple-touch-icon-precomposed" href="/publish/app.png"/>
|
||||
<link rel="apple-touch-startup-image" href="/publish/splash.png"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
||||
<meta charset="utf-8">
|
||||
<title>volcanos</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
||||
<link rel="stylesheet" type="text/css" href="/page/index.css">
|
||||
<link rel="stylesheet" type="text/css" href="/page/share.css">
|
||||
</head>
|
||||
<body>
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/frame.js"></script>
|
||||
<script src="/page/share.js"></script>
|
||||
</body>
|
||||
|
@ -1,24 +0,0 @@
|
||||
Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
|
||||
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [
|
||||
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]},
|
||||
{name: "Search", help: "搜索框", pos: "auto"},
|
||||
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
|
||||
{name: "Action", help: "工作台", pos: "main"},
|
||||
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
|
||||
], main: {name: "Header"}, river: {
|
||||
"serivce": {name: "运营群", storm: {
|
||||
"wx": {name: "公众号 wx", action: [
|
||||
{name: "微信公众号", help: "wx", index: "web.wiki.word", args: ["usr/icebergs/misc/wx/wx.shy"]},
|
||||
]},
|
||||
"mp": {name: "小程序 mp", action: [
|
||||
{name: "微信小程序", help: "mp", index: "web.wiki.word", args: ["usr/icebergs/misc/mp/mp.shy"]},
|
||||
]},
|
||||
"lark": {name: "机器人 lark", action: [
|
||||
{name: "飞书机器人", help: "lark", index: "web.wiki.word", args: ["usr/icebergs/misc/lark/lark.shy"]},
|
||||
]},
|
||||
"share": {name: "上下文 share", action: [
|
||||
{name: "系统上下文", help: "shylinux/contexts", index: "web.wiki.word", args: ["usr/learning/社会/管理/20200724.shy"]},
|
||||
]},
|
||||
}},
|
||||
},
|
||||
})
|
@ -75,3 +75,22 @@ fieldset.Action div.output fieldset.plugin legend {
|
||||
fieldset.Action div.output fieldset.plugin legend:hover {
|
||||
background:red;
|
||||
}
|
||||
|
||||
fieldset.panel.cmd>div.legend {
|
||||
display:none;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin {
|
||||
margin:0; padding:0;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin>legend {
|
||||
display:none;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin>div.legend {
|
||||
float:left; padding:0 10px; margin-right:3px;
|
||||
height:25px; font-size:18px;
|
||||
background-color:darkcyan;
|
||||
cursor:pointer;
|
||||
}
|
||||
body.white fieldset.panel.cmd>div.output>fieldset.plugin>div.legend {
|
||||
background-color:honeydew;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) {
|
||||
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM)
|
||||
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { item.type = chat.PLUGIN
|
||||
item.height = parseInt(can.Conf(html.HEIGHT))-40, item.width = parseInt(can.Conf(html.WIDTH))-40
|
||||
item.height = parseInt(can.Conf(html.HEIGHT))-240, item.width = parseInt(can.Conf(html.WIDTH))-40
|
||||
item.feature = can.base.Obj(item.feature||item.meta), item.inputs = can.base.Obj(item.inputs||item.list)
|
||||
|
||||
can.onappend.plugin(can, item, function(sub, meta, skip) {
|
||||
@ -46,7 +46,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
|
||||
can.user.title(can.misc.Search(can, chat.TITLE)||msg.Option(chat.TITLE))
|
||||
can.onaction.layout(can, "auto")
|
||||
|
||||
if (msg[mdb.INDEX].length == 1) { can.require(["/panel/cmd.css"])
|
||||
if (msg[mdb.INDEX].length == 1) {
|
||||
can.user.mod.isCmd = true, can.page.ClassList.add(can, can._target, "cmd")
|
||||
can.page.Select(can, document.body, "fieldset.panel", function(item) {
|
||||
item != can._target && can.onmotion.hidden(can, item)
|
||||
@ -61,6 +61,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
|
||||
},
|
||||
})
|
||||
Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) {
|
||||
if (!can._root.river) { return false }
|
||||
var list = can._root.river; var river = list[cmds[0]]
|
||||
var storm = river && river.storm[cmds[1]]
|
||||
if (!storm || cmds.length != 2) { return false }
|
||||
@ -91,6 +92,22 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
||||
can.onimport._share(can, can.misc.Search(can, web.SHARE))
|
||||
can.onkeypop._init(can)
|
||||
},
|
||||
onlogin: function(can) { if (!can.user.mod.isCmd) { return }
|
||||
can.page.ClassList.add(can, can._target, "cmd")
|
||||
can._names = location.pathname
|
||||
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
||||
can.core.Timer(500, function() { can.onaction._plugin(can, item, next) })
|
||||
|
||||
}): can.run(can.request()._event, [ctx.ACTION, ctx.COMMAND], function(msg) {
|
||||
can.core.Next(msg.Table(), function(item, next) {
|
||||
can.onaction._plugin(can, item, next)
|
||||
})
|
||||
})
|
||||
},
|
||||
_plugin: function(can, item, next) {
|
||||
can.base.Copy(item, {height: window.innerHeight, width: window.innerWidth, opts: can.misc.Search(can)})
|
||||
can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() })
|
||||
},
|
||||
onstorm_select: function(can, msg, river, storm) { can.onlayout._init(can)
|
||||
function key(name) { return can.core.Keys(can.Conf(chat.RIVER), can.Conf(chat.STORM), name) }
|
||||
can.page.Cache(key(html.ACTION), can._action, can._output.scrollTop+1)
|
||||
|
@ -1,18 +0,0 @@
|
||||
fieldset.panel.cmd>div.legend {
|
||||
display:none;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin {
|
||||
margin:0; padding:0;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin>legend {
|
||||
display:none;
|
||||
}
|
||||
fieldset.panel.cmd>div.output>fieldset.plugin>div.legend {
|
||||
float:left; padding:0 10px; margin-right:3px;
|
||||
height:25px; font-size:18px;
|
||||
background-color:darkcyan;
|
||||
cursor:pointer;
|
||||
}
|
||||
body.white fieldset.panel.cmd>div.output>fieldset.plugin>div.legend {
|
||||
background-color:honeydew;
|
||||
}
|
20
panel/cmd.js
20
panel/cmd.js
@ -1,20 +0,0 @@
|
||||
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.page.ClassList.add(can, can._target, "Action")
|
||||
can.base.isFunc(cb) && cb()
|
||||
},
|
||||
onlogin: function(can) { can._names = location.pathname
|
||||
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
||||
can.core.Timer(500, function() { can.onaction._plugin(can, item, next) })
|
||||
|
||||
}): can.run(can.request()._event, [ctx.ACTION, ctx.COMMAND], function(msg) {
|
||||
can.core.Next(msg.Table(), function(item, next) {
|
||||
can.onaction._plugin(can, item, next)
|
||||
})
|
||||
})
|
||||
},
|
||||
_plugin: function(can, item, next) {
|
||||
can.base.Copy(item, {height: window.innerHeight, width: window.innerWidth, opts: can.misc.Search(can)})
|
||||
can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() })
|
||||
},
|
||||
})
|
||||
|
@ -72,7 +72,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
msg.Option(aaa.BACKGROUND) && can.onlayout.background(can, "/share/local/background", document.body)
|
||||
},
|
||||
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return }
|
||||
msg.Option(aaa.AVATAR) && can.page.Modify(can, "div.output div.state.avatar>img", {src: "/share/local/avatar"})
|
||||
msg.Option(aaa.AVATAR) && can.page.Modify(can, "div.state.avatar>img", {src: "/share/local/avatar"})
|
||||
},
|
||||
_menus: function(can, msg, target) {
|
||||
var menus = can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), [chat.HEADER, ["setting", chat.BLACK, chat.WHITE, chat.PRINT]])
|
||||
@ -87,7 +87,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
|
||||
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) {
|
||||
can.get("Action", "size", function(msg, top) {
|
||||
can.page.Modify(can, sub._target, {style: {top: top, left: window.innerWidth-sub._target.offsetWidth}})
|
||||
can.page.Modify(can, sub._target, {style: {top: top, right: 0, left: null}})
|
||||
})
|
||||
}), target.onmouseenter = target.click
|
||||
},
|
||||
|
@ -101,7 +101,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
|
||||
},
|
||||
|
||||
carte: function(event, can, list, cb) {
|
||||
can.user.cartes(event, can, can.ondetail, list, cb)
|
||||
can.user.carteRight(event, can, can.ondetail, list, cb)
|
||||
},
|
||||
storm: function(event, can, river) { can.sublist = can.sublist||{}
|
||||
can.onmotion.select(can, can._output, "div.item", can.river_list[river])
|
||||
|
@ -1,6 +1,3 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) {
|
||||
can.base.isFunc(cb) && cb(); switch (meta.type) {
|
||||
case html.SELECT: meta.value && (target.value = meta.value); break
|
||||
@ -23,18 +20,18 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
|
||||
onchange: function(event, can) {
|
||||
if (can.Conf(mdb.TYPE) == html.SELECT) { can.run(event) }
|
||||
},
|
||||
onkeydown: function(event, can) {
|
||||
onkeydown: function(event, can) { can.onkeypop.input(event, can, event.target)
|
||||
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
|
||||
can.onkeypop.input(event, can, event.target); switch (event.key) {
|
||||
case lang.ENTER:
|
||||
switch (can.Conf(mdb.TYPE)) {
|
||||
case html.TEXTAREA: if (!event.ctrlKey) { return }
|
||||
case html.TEXT: event.target.setSelectionRange(0, -1); break
|
||||
}; can.run(event), event.stopPropagation(), event.preventDefault(); break
|
||||
case "b": if (event.ctrlKey) { can.CloneInput() } break
|
||||
case "m": if (event.ctrlKey) { can.CloneField(), event.stopPropagation(), event.preventDefault() } break
|
||||
}
|
||||
if (event.key == lang.ENTER) {
|
||||
can.run(event), event.target.setSelectionRange(0, -1)
|
||||
event.stopPropagation(), event.preventDefault()
|
||||
} if (!event.ctrlKey) { return }
|
||||
|
||||
switch (event.key) {
|
||||
case "b": can.CloneInput(); break
|
||||
case "m": can.CloneField(); break
|
||||
default: return
|
||||
} event.stopPropagation(), event.preventDefault()
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
fieldset.input.date div.action div.space {
|
||||
clear:both; width:0;
|
||||
}
|
||||
fieldset.input.date div.output td.last {
|
||||
fieldset.input.date div.output td.prev {
|
||||
color:gray;
|
||||
}
|
||||
fieldset.input.date div.output td.next {
|
||||
|
@ -1,16 +1,13 @@
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, meta, cb, target) {
|
||||
function set(now) { target.value = can.user.time(can, now), can.page.Remove(can, can._target)
|
||||
meta && meta.action == ice.AUTO && can.run({})
|
||||
}
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) {
|
||||
function set(now) { target.value = can.user.time(can, now), can.close(), meta && meta.action == ice.AUTO && can.run({}) }
|
||||
|
||||
// 添加控件
|
||||
var now = target.value? new Date(target.value): new Date()
|
||||
can.onappend._action(can, [cli.CLOSE,
|
||||
can.onmotion.clear(can, can._action), can.onappend._action(can, [cli.CLOSE,
|
||||
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
|
||||
"今天", "", "上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
|
||||
["month"].concat(can.core.List(1, 13)), "下一月",
|
||||
], can._action, {
|
||||
close: function(event) { can.page.Remove(can, can._target) },
|
||||
], can._action, { close: function(event) { can.close() },
|
||||
"hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) },
|
||||
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) },
|
||||
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
|
||||
@ -26,11 +23,12 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
|
||||
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
|
||||
})
|
||||
|
||||
can._table = can.page.Append(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
|
||||
can.onmotion.clear(can, can._status)
|
||||
can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
|
||||
var today = new Date(); function show(now) {
|
||||
// 设置控件
|
||||
can.Action("month", now.getMonth()+1)
|
||||
can.Action("year", now.getFullYear())
|
||||
can.Action("month", now.getMonth()+1)
|
||||
can.Action("hour", now.getHours())
|
||||
can.Action("minute", parseInt(now.getMinutes()/5)*5)
|
||||
can.Action("second", parseInt(now.getSeconds()/5)*5)
|
||||
@ -52,11 +50,11 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
|
||||
var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay())
|
||||
|
||||
// 时间序列
|
||||
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) {add(day, "last")}
|
||||
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
|
||||
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
|
||||
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) { add(day, mdb.PREV) }
|
||||
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) { add(day, mdb.MAIN) }
|
||||
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) }
|
||||
|
||||
return can.onlayout.figure(event, can), can.base.isFunc(cb) && cb(can), now
|
||||
}; show(now)
|
||||
}} }, ["/plugin/input/date.css"])
|
||||
return now
|
||||
} show(now), can.onlayout.figure(event, can), can.base.isFunc(cbs) && cbs(can)
|
||||
})}} }, [""])
|
||||
|
||||
|
@ -1,22 +1,67 @@
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, meta, cb, target) {
|
||||
can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
|
||||
if (msg.Length() == 0) { return can.page.Remove(can, can._target) }
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], key: {
|
||||
_init: function(can, msg, target) { var call = arguments.callee
|
||||
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) {
|
||||
return {text: [value, html.TD], onclick: function(event) { target.value = line[key]
|
||||
if (msg.Option(ice.MSG_PROCESS) != ice.PROCESS_AGAIN) { return can.close() }
|
||||
can.run(event, [ctx.ACTION, mdb.INPUTS, can.Conf(mdb.NAME), target.value], function(msg) {
|
||||
call(can, msg, target)
|
||||
})
|
||||
}}
|
||||
})
|
||||
},
|
||||
_select: function(event, can, target) {
|
||||
function select(order) { if (order == 0) { target.value = target._value }
|
||||
var index = 0; return can.page.Select(can, can._output, html.TR, function(tr) {
|
||||
if (can.page.ClassList.has(can, tr, html.HIDDEN)) { return }
|
||||
can.page.ClassList.del(can, tr, html.SELECT); if (order != index++) { return tr }
|
||||
can.page.ClassList.add(can, tr, html.SELECT), can.page.Select(can, tr, html.TD, function(td, index) {
|
||||
target._value = target._value||target.value, index == 0 && (target.value = td.innerText)
|
||||
}); return tr
|
||||
}).length
|
||||
}
|
||||
switch (event.key) {
|
||||
case "n":
|
||||
var total = select(target._index)
|
||||
select(target._index = ((target._index)+1) % total)
|
||||
break
|
||||
case "p":
|
||||
var total = select(target._index)
|
||||
select(target._index = (target._index-1) < 0? total-1: (target._index-1))
|
||||
break
|
||||
default: target._index = 0, target._value = ""
|
||||
}
|
||||
},
|
||||
onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) {
|
||||
can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
|
||||
if (msg.Length() == 0) { return can.close() }
|
||||
can.onfigure.key._init(can, msg, target), can.Status(mdb.TOTAL, msg.Length())
|
||||
target._msg = msg, target._figure = can.onlayout.figure(event, can)
|
||||
can.base.isFunc(cbs) && cbs(can)
|
||||
})
|
||||
}) },
|
||||
onkeydown: function(event, can, meta, cb, target) {
|
||||
var msg = target._msg; msg && cb(function(can, cbs) {
|
||||
if (event.ctrlKey) { can.onfigure.key._select(event, can, target) } else {
|
||||
target._index = 0, target._value = ""
|
||||
switch (event.key) { case lang.ENTER: can.close(); return }
|
||||
can.page.Select(can, can._output, html.TR, function(tr, index) {
|
||||
var has = false; can.page.Select(can, tr, html.TD, function(td) {
|
||||
has = has || td.innerText.indexOf(target.value)>-1
|
||||
}), can.page.ClassList.set(can, tr, html.HIDDEN, !has && index != 0)
|
||||
})
|
||||
}
|
||||
|
||||
can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, {
|
||||
close: function(event) { can.page.Remove(can, can._target) },
|
||||
clear: function(event) { target.value = "" },
|
||||
can.onlayout.figure(event, can, can._target, false, target._figure)
|
||||
var total = can.page.Select(can, can._output, html.TR, function(tr) {
|
||||
if (!can.page.ClassList.has(can, tr, html.HIDDEN)) { return tr}
|
||||
}).length-1
|
||||
can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index))
|
||||
can.base.isFunc(cbs) && cbs(can)
|
||||
})
|
||||
|
||||
function show(msg) { can.onmotion.clear(can)
|
||||
can.onappend.table(can, msg, function(value, key, index, line) {
|
||||
return {text: [value, html.TD], onclick: function() { target.value = line[key]
|
||||
msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN? can.run({}, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
|
||||
show(msg)
|
||||
}): can.page.Remove(can, can._target)
|
||||
}}
|
||||
}), can.Status(mdb.COUNT, msg.Length())
|
||||
}
|
||||
show(msg), can.onlayout.figure(event, can)
|
||||
})
|
||||
}}})
|
||||
if (event.ctrlKey && ["n", "p"].indexOf(event.key) > -1) {
|
||||
return event.stopPropagation(), event.preventDefault()
|
||||
} can.onaction.onkeydown(event, can)
|
||||
},
|
||||
}})
|
||||
|
||||
|
@ -1,15 +1,9 @@
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, meta, cb, target) {
|
||||
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) {
|
||||
can.require(["/require/shylinux.com/x/echarts/echarts.js", "/require/shylinux.com/x/echarts/china.js"], function() {
|
||||
can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, {
|
||||
close: function(event) { can.page.Remove(can, can._target) },
|
||||
clear: function(event) { target.value = "" },
|
||||
})
|
||||
|
||||
var china_chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIVk, style: {width: "600px", height: "400px"}}]).first)
|
||||
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
|
||||
target.value = params.name, can.page.Remove(can, can._target)
|
||||
}), can.Status(mdb.COUNT, 34)
|
||||
can.onlayout.figure(event, can)
|
||||
var china_chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: 600, height: 400}}]).first)
|
||||
china_chart.setOption({geo: {map: 'china'}}), china_chart.on(html.CLICK, function (params) {
|
||||
target.value = params.name, can.close()
|
||||
}), can.Status(mdb.TOTAL, 34), can.onlayout.figure(event, can), can.base.isFunc(cbs) && cbs(can)
|
||||
})
|
||||
}}, })
|
||||
}) }}, })
|
||||
|
||||
|
@ -40,7 +40,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
return (name || target == can.svg) && can.onappend.item(can, html.ITEM, {name: name||html.SVG}, function(event) { show(event)
|
||||
can.onaction.show(event, can)
|
||||
}, function(event) {
|
||||
can.user.cartes(event, can, can.onaction, [ice.HIDE, ice.SHOW, mdb.CREATE, cli.CLEAR, mdb.REMOVE])
|
||||
can.user.carteRight(event, can, can.onaction, [ice.HIDE, ice.SHOW, mdb.CREATE, cli.CLEAR, mdb.REMOVE])
|
||||
}, can.ui.project)
|
||||
},
|
||||
_block: function(can, target) {
|
||||
@ -286,7 +286,7 @@ Volcanos("onaction", {help: "组件菜单", list: [
|
||||
show: function(event, can) { can.onmotion.show(can, {interval: 100, length: 10}, null, can.group) },
|
||||
hide: function(event, can) { can.onmotion.hide(can, {interval: 100, length: 10}, null, can.group) },
|
||||
create: function(event, can) {
|
||||
can.user.prompt("group", function(name) {
|
||||
can.user.prompt("group", "some", function(name) {
|
||||
var group = document.createElementNS('http://www.w3.org/2000/svg', svg.G)
|
||||
can.group.append(group), can.onimport._block(can, group)
|
||||
group.Value(html.CLASS, name), can.core.List([html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(name) {
|
||||
@ -425,7 +425,7 @@ Volcanos("ondetail", {help: "组件详情", list: [cli.START, ice.RUN, ice.COPY,
|
||||
var def = target.Value(mdb.TEXT); def && can.page.Select(can, can.svg, ice.PT+def, function(item) {
|
||||
def = item.Value(html.INNER)
|
||||
})
|
||||
can.user.prompt(html.LABEL, function(text) {
|
||||
can.user.prompt(html.LABEL, def, function(text) {
|
||||
if (target.tagName == html.TEXT) { return target.innerHTML = text }
|
||||
|
||||
if (def && can.page.Select(can, can.svg, ice.PT+def, function(item) {
|
||||
@ -438,7 +438,7 @@ Volcanos("ondetail", {help: "组件详情", list: [cli.START, ice.RUN, ice.COPY,
|
||||
var data = can.onexport._text(can, target, figure, {inner: text})
|
||||
var item = can.onfigure._push(can, html.TEXT, data, target.Group())
|
||||
target.Value(mdb.TEXT, can.onfigure._pid(can, item))
|
||||
}, def)
|
||||
})
|
||||
},
|
||||
modify: function(event, can) { can.onimport._profile(can, event.target) },
|
||||
"delete": function(event, can) { var target = event.target
|
||||
|
@ -104,7 +104,7 @@ fieldset.word.float>div.output {
|
||||
overflow:auto;
|
||||
padding:20px;
|
||||
}
|
||||
fieldset.word.float div.project {
|
||||
fieldset.word.float>div.output>div.project {
|
||||
background:cornsilk;
|
||||
left:0; top:25px;
|
||||
position:fixed;
|
||||
@ -116,7 +116,7 @@ fieldset.word.float div.content div.page {
|
||||
margin-top:30px;
|
||||
display:none;
|
||||
}
|
||||
fieldset.word.float div.content div.page.select {
|
||||
fieldset.word.float div.content div.page.show {
|
||||
display:block;
|
||||
}
|
||||
fieldset.word.float div.content.grid div.page {
|
||||
|
@ -1,4 +1,4 @@
|
||||
Volcanos("onimport", {H6help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target) {
|
||||
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
|
||||
if (msg.Length() > 0) { return can.onappend.table(can, msg) }
|
||||
|
||||
@ -6,39 +6,32 @@ Volcanos("onimport", {H6help: "导入数据", list: [], _init: function(can, msg
|
||||
can.page.Select(can, target, ".story", function(item) { var data = item.dataset||{}
|
||||
can.core.CallFunc([can.onimport, data.type], [can, data, item])
|
||||
can.page.Modify(can, item, {style: can.base.Obj(data.style)})
|
||||
}), can.onimport._navmenu(can)
|
||||
},
|
||||
_navmenu: function(can) { if (!can.sup._navmenu) { return }
|
||||
if (can.user.mod.isCmd) { can.page.ClassList.add(can, can._fields, "cmd")
|
||||
can.Conf(html.WIDTH, can.Conf(html.WIDTH)-can.sup._navmenu.offsetWidth-10)
|
||||
can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight}})
|
||||
can.page.Modify(can, can._output, {style: {"max-width": can.Conf(html.WIDTH)}})
|
||||
can.page.Modify(can, can._output, {style: {height: window.innerHeight}})
|
||||
} else {
|
||||
can.Conf(html.WIDTH, can.Conf(html.WIDTH)-can.sup._navmenu.offsetWidth-20)
|
||||
can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight-240}})
|
||||
can.page.Modify(can, can._output, {style: {height: window.innerHeight-240}})
|
||||
}
|
||||
})
|
||||
},
|
||||
navmenu: function(can, data, target) { var nav = can.sup._navmenu
|
||||
nav = nav||can.page.Append(can, can._fields, [{view: "navmenu"}]).first
|
||||
nav = nav||can.page.Append(can, can._fields, [{view: wiki.NAVMENU}]).first
|
||||
can.onmotion.clear(can, nav), can._fields.insertBefore(nav, can._output)
|
||||
can.sup._navmenu = nav
|
||||
|
||||
can.page.Modify(can, can._output, {style: {float: html.LEFT, clear: html.NONE}})
|
||||
|
||||
can.page.Modify(can, nav, {style: {height: can.Conf(html.HEIGHT)}})
|
||||
can.onappend.list(can, can.base.Obj(data.data), function(event, item) {
|
||||
var link = item.meta.link, cmd = link.split(ice.PS).pop()
|
||||
if (can.onaction[cmd]) { return can.onaction[cmd](event, can) }
|
||||
if (!link || link == can.Option(nfs.PATH)) { return }
|
||||
var link = item.meta.link, list = can.core.Split(item.meta.link)
|
||||
if (can.core.Value(can, list[0])) { return can.core.CallFunc([can, list[0]], list.slice(1)) }
|
||||
if (!link || link == can.Option(nfs.PATH)) { return false }
|
||||
|
||||
can.page.Cache(can.Option(nfs.PATH), can._output, "some")
|
||||
can.Option(nfs.PATH, link)
|
||||
var some = can.page.Cache(can.Option(nfs.PATH), can._output)
|
||||
if (!some) { can.sup.Update(event, [link]) }
|
||||
can.user.title(item.meta.name)
|
||||
can.page.Cache(can.Option(nfs.PATH), can._output, can._output.scrollTop+1)
|
||||
can.Option(nfs.PATH, link), can.user.mod.isCmd && can.user.title(item.meta.name)
|
||||
var position = can.page.Cache(can.Option(nfs.PATH), can._output)
|
||||
if (position) { can._output.scrollTo(0, position-1); return true }
|
||||
|
||||
can.sup.Update(event, [link])
|
||||
return true
|
||||
}, nav)
|
||||
}, nav), can.sup._navmenu = nav
|
||||
|
||||
can.Conf(html.WIDTH, can.Conf(html.WIDTH)-nav.offsetWidth-(can.user.mod.isCmd? 10: 20))
|
||||
can.page.Modify(can, can._output, {style: kit.Dict(
|
||||
html.HEIGHT, can.sup._navmenu.offsetHeight, html.MAX_WIDTH, can.Conf(html.WIDTH),
|
||||
html.FLOAT, html.LEFT, html.CLEAR, html.NONE
|
||||
)})
|
||||
},
|
||||
premenu: function(can, data, target) {
|
||||
can.page.Select(can, can._output, "h2.story, h3.story", function(item) {
|
||||
@ -51,54 +44,34 @@ Volcanos("onimport", {H6help: "导入数据", list: [], _init: function(can, msg
|
||||
can.user.mod.isCmd && can.user.title(data.text)
|
||||
},
|
||||
spark: function(can, data, target) {
|
||||
if (data[mdb.NAME] == html.INNER) {
|
||||
target.title = "点击复制", target.onclick = function(event) {
|
||||
can.user.copy(event, can, target.innerText)
|
||||
}
|
||||
return
|
||||
}
|
||||
can.page.Select(can, target, html.SPAN, function(item) {
|
||||
item.title = "点击复制", item.onclick = function(event) {
|
||||
can.user.copy(event, can, item.innerText)
|
||||
}
|
||||
})
|
||||
can.page.Select(can, target, html.A, function(item) {
|
||||
if (item.innerText == "") { item.innerText = item.href }
|
||||
can.page.Modify(can, item, {target: "_blank"})
|
||||
})
|
||||
if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) }
|
||||
can.page.Select(can, target, html.A, function(item) { can.onmotion.link(can, item) })
|
||||
can.page.Select(can, target, html.SPAN, function(item) { can.onmotion.copy(can, item) })
|
||||
},
|
||||
chart: function(can, data, target) {
|
||||
target.oncontextmenu = function(event) {
|
||||
var ui = can.user.carte(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
|
||||
can.user.toPNG(can, can.user.prompt("file name", null, "hi.png"), target.outerHTML,
|
||||
parseInt(target.getAttribute(html.HEIGHT)), parseInt(target.getAttribute(html.WIDTH)))
|
||||
can.user.carteClient(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
|
||||
can.user.toPNG(can, can.user.prompt("please input file name", "hi")+".png", target.outerHTML,
|
||||
parseInt(target.getAttribute(html.HEIGHT))||200, parseInt(target.getAttribute(html.WIDTH))||200)
|
||||
}), [mdb.EXPORT])
|
||||
can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}})
|
||||
}
|
||||
},
|
||||
table: function(can, data, target) {
|
||||
can.page.OrderTable(can, target)
|
||||
can.page.ClassList.add(can, target, chat.CONTENT)
|
||||
can.page.Select(can, target, html.TD, function(item) {
|
||||
item.title = "点击复制", item.onclick = function(event) {
|
||||
can.user.copy(event, can, item.innerText)
|
||||
}
|
||||
})
|
||||
can.page.OrderTable(can, target), can.page.ClassList.add(can, target, chat.CONTENT)
|
||||
can.page.Select(can, target, html.TD, function(item) { can.onmotion.copy(can, item) })
|
||||
},
|
||||
field: function(can, data, target, width) { var item = can.base.Obj(data.meta)
|
||||
can.onappend._init(can, item, ["/plugin/state.js"], function(sub) {
|
||||
sub.run = function(event, cmds, cb, silent) {
|
||||
can.run(event, can.misc.concat([ctx.ACTION, chat.STORY, data.type, data.name, data.text], cmds), cb, true)
|
||||
}
|
||||
sub.Conf(html.WIDTH, item.width = (width||can.Conf(html.WIDTH))-20)
|
||||
}, sub.Conf(html.WIDTH, item.width = (width||can.Conf(html.WIDTH))-20)
|
||||
|
||||
can.core.Value(item, "auto.cmd") && can.core.Timer(100, function() {
|
||||
var msg = sub.request({}, can.core.Value(item, "opts")); msg.Option("_handle", "true")
|
||||
can.core.Value(item, "auto.cmd") && can.core.Timer300ms(function() {
|
||||
var msg = sub.request({}, can.core.Value(item, "opts")); msg.Option("_handle", ice.TRUE)
|
||||
sub.Update(msg._event, [ctx.ACTION, can.core.Value(item, "auto.cmd")])
|
||||
})
|
||||
}, can._output, target)
|
||||
},
|
||||
|
||||
iframe: function(can, data, target) { var meta = can.base.Obj(data.meta)
|
||||
can.page.Modify(can, target, {width: can.Conf(html.WIDTH)-200})
|
||||
},
|
||||
@ -106,15 +79,15 @@ Volcanos("onimport", {H6help: "导入数据", list: [], _init: function(can, msg
|
||||
Volcanos("onkeypop", {help: "键盘交互", list: [],
|
||||
_mode: {
|
||||
normal: {
|
||||
"n": function(event, can) { can.onaction.next(can.sub) },
|
||||
"j": function(event, can) { can.onaction.next(can.sub) },
|
||||
"ArrowRight": function(event, can) { can.onaction.next(can.sub) },
|
||||
"ArrowLeft": function(event, can) { can.onaction.prev(can.sub) },
|
||||
"k": function(event, can) { can.onaction.prev(can.sub) },
|
||||
"p": function(event, can) { can.onaction.prev(can.sub) },
|
||||
"n": function(event, can) { can.ondetail.next(can.sub) },
|
||||
"j": function(event, can) { can.ondetail.next(can.sub) },
|
||||
"ArrowRight": function(event, can) { can.ondetail.next(can.sub) },
|
||||
"ArrowLeft": function(event, can) { can.ondetail.prev(can.sub) },
|
||||
"k": function(event, can) { can.ondetail.prev(can.sub) },
|
||||
"p": function(event, can) { can.ondetail.prev(can.sub) },
|
||||
|
||||
"q": function(event, can) { can.onaction["结束"](event, can.sub) },
|
||||
"h": function(event, can) { can.onaction["隐藏"](event, can.sub) },
|
||||
"q": function(event, can) { can.ondetail["结束"](event, can.sub) },
|
||||
"h": function(event, can) { can.ondetail["隐藏"](event, can.sub) },
|
||||
},
|
||||
}, _engine: {},
|
||||
})
|
||||
@ -136,7 +109,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
["布局", "开讲", "快闪", "网格"], "大纲", "首页", "上一页",
|
||||
["菜单"].concat(can.core.List(list, function(page) { return page[0].innerHTML })),
|
||||
"下一页", "隐藏", "结束",
|
||||
], sub._action, can.onaction)
|
||||
], sub._action, can.ondetail)
|
||||
|
||||
can.onengine.signal(can, "keymap.focus", can.request(event, {cb: function(event) {
|
||||
can.keylist = can.onkeypop._parse(event, can, "normal", can.keylist)
|
||||
@ -149,76 +122,72 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
|
||||
can.core.List(sub.list = list, function(page, index) {
|
||||
can.onappend.item(can, html.ITEM, {name: page[0].innerHTML}, function(event) {
|
||||
can.onaction.show(sub, index)
|
||||
can.ondetail.show(sub, index)
|
||||
}, function(event) {}, sub.ui.project)
|
||||
|
||||
sub.page.Append(sub, sub.ui.content, [{view: "page"+(index==0? " first": ""), list: can.core.List(page, function(item) { var data = item.dataset||{}
|
||||
switch (data.type) {
|
||||
case "premenu": item = item.cloneNode(false); break
|
||||
case wiki.PREMENU: item = item.cloneNode(false); break
|
||||
case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content).first; break
|
||||
default: item = item.cloneNode(true)
|
||||
}
|
||||
return can.core.CallFunc([can.onimport, data.type], [sub, data, item, window.innerWidth-40]), item
|
||||
}), }])
|
||||
}), can.onmotion.hidden(can, sub.ui.project), can.onaction.show(sub, 0)
|
||||
}), can.onmotion.hidden(can, sub.ui.project), can.ondetail.show(sub, 0)
|
||||
|
||||
sub.onappend._status(sub, ["page", "from", "cost"]), sub.Status("from", can.base.Time())
|
||||
sub.onappend._status(sub, [mdb.PAGE, cli.FROM, cli.COST]), sub.Status(cli.FROM, can.base.Time())
|
||||
var from = new Date(); can.core.Timer({interval: 100}, function() { var now = new Date()
|
||||
sub.Status("cost", can.base.Duration(now-from))
|
||||
sub.Status(cli.COST, can.base.Duration(now-from))
|
||||
})
|
||||
}, document.body)
|
||||
},
|
||||
|
||||
"开讲": function(event, can) { can.sup.onaction.show(can, 0) },
|
||||
"快闪": function(event, can) { can.sup.onaction.flash(can) },
|
||||
"网格": function(event, can) { can.sup.onaction.grid(can) },
|
||||
|
||||
"大纲": function(event, can) { can.onmotion.toggle(can, can.ui.project) },
|
||||
"首页": function(event, can) { can.sup.onaction.show(can, 0) },
|
||||
"上一页": function(event, can) { can.sup.onaction.prev(can, can.ui.content) },
|
||||
"菜单": function(event, can) { can.sup.onaction.show(can, event.target.selectedIndex) },
|
||||
"下一页": function(event, can) { can.sup.onaction.next(can, can.ui.content) },
|
||||
"隐藏": function(event, can) { can.onmotion.toggle(can, can._output) },
|
||||
"结束": function(event, can) { can.page.Remove(can, can._target)
|
||||
can.onengine.signal(can, "keymap.focus", can.request(event, {cb: null}))
|
||||
})
|
||||
Volcanos("ondetail", {help: "交互操作", list: ["删除"], _init: function(can, msg, list, cb, target) {
|
||||
},
|
||||
|
||||
show: function(sub, which) { sub.page.Modify(sub, sub.ui.content, {className: chat.CONTENT})
|
||||
sub.page.Select(sub, sub.ui.content, "div.page", function(page, index) {
|
||||
if (index == which || page == which) {
|
||||
sub.page.Select(sub, page, "h1,h2,h3", function(item) { sub.Action("菜单", item.innerHTML) })
|
||||
sub.onmotion.select(sub, sub.ui.project, "div.item", index)
|
||||
sub.Status("page", index+1+ice.PS+sub.list.length)
|
||||
sub.page.ClassList.add(sub, page, "select")
|
||||
sub.Status(mdb.PAGE, index+1+ice.PS+sub.list.length)
|
||||
sub.page.ClassList.add(sub, page, html.SHOW)
|
||||
} else {
|
||||
sub.page.ClassList.del(sub, page, "select")
|
||||
sub.page.ClassList.del(sub, page, html.SHOW)
|
||||
}
|
||||
})
|
||||
},
|
||||
next: function(sub) {
|
||||
sub.page.Select(sub, sub.ui.content, "div.page.select", function(page) {
|
||||
page.nextSibling? sub.sup.onaction.show(sub, page.nextSibling):
|
||||
sub.page.Select(sub, sub.ui.content, "div.page.show", function(page) {
|
||||
page.nextSibling? sub.sup.ondetail.show(sub, page.nextSibling):
|
||||
sub.user.toast(sub, "end")
|
||||
})
|
||||
},
|
||||
prev: function(sub) {
|
||||
sub.page.Select(sub, sub.ui.content, "div.page.select", function(page) {
|
||||
page.previousSibling? sub.sup.onaction.show(sub, page.previousSibling):
|
||||
sub.page.Select(sub, sub.ui.content, "div.page.show", function(page) {
|
||||
page.previousSibling? sub.sup.ondetail.show(sub, page.previousSibling):
|
||||
sub.user.toast(sub, "end")
|
||||
})
|
||||
},
|
||||
flash: function(sub) {
|
||||
sub.core.Next(sub.page.Select(sub, sub.ui.content, "div.page"), function(page, next) {
|
||||
sub.core.Timer(500, function() { next() })
|
||||
sub.sup.onaction.show(sub, page)
|
||||
sub.sup.ondetail.show(sub, page)
|
||||
})
|
||||
},
|
||||
grid: function(sub) { sub.page.Modify(sub, sub.ui.content, {className: "content grid"}) },
|
||||
})
|
||||
Volcanos("ondetail", {help: "交互操作", list: ["删除"], _init: function(can, msg, list, cb, target) {
|
||||
},
|
||||
"删除": function(event, sub) {
|
||||
sub.page.Remove(sub, sub._target)
|
||||
},
|
||||
|
||||
"开讲": function(event, can) { can.sup.ondetail.show(can, 0) },
|
||||
"快闪": function(event, can) { can.sup.ondetail.flash(can) },
|
||||
"网格": function(event, can) { can.sup.ondetail.grid(can) },
|
||||
|
||||
"大纲": function(event, can) { can.onmotion.toggle(can, can.ui.project) },
|
||||
"首页": function(event, can) { can.sup.ondetail.show(can, 0) },
|
||||
"上一页": function(event, can) { can.sup.ondetail.prev(can, can.ui.content) },
|
||||
"菜单": function(event, can) { can.sup.ondetail.show(can, event.target.selectedIndex) },
|
||||
"下一页": function(event, can) { can.sup.ondetail.next(can, can.ui.content) },
|
||||
"隐藏": function(event, can) { can.onmotion.toggle(can, can._output) },
|
||||
"结束": function(event, can) { can.page.Remove(can, can._target) },
|
||||
"删除": function(event, sub) { sub.page.Remove(sub, sub._target) },
|
||||
})
|
||||
|
||||
|
@ -186,23 +186,18 @@ Volcanos("onaction", {help: "交互操作", list: [
|
||||
can.Update(event, [ctx.ACTION, "prev", can.Status("total")||0, can.Option("limit"), can.Option("offend")])
|
||||
},
|
||||
|
||||
listTags: function(event, can, button) {
|
||||
var list = []
|
||||
can.core.List([
|
||||
can.base, can.core, can.misc, can.page, can.user,
|
||||
can.onengine, can.ondaemon,
|
||||
can.onappend, can.onlayout,
|
||||
can.onmotion, can.onkeypop,
|
||||
listTags: function(event, can, button) { var list = []
|
||||
can.core.List([can.base, can.core, can.misc, can.page, can.user,
|
||||
can.onengine, can.ondaemon, can.onappend, can.onlayout, can.onmotion, can.onkeypop,
|
||||
], function(lib) {
|
||||
can.core.Item(lib, function(key, value) { if (!lib.hasOwnProperty(key)) { return }
|
||||
if (key.indexOf("_") == 0) { return }
|
||||
list.push({zone: lib._name, type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0], file: lib._path})
|
||||
can.core.Item(lib, function(key, value) { if (key.indexOf("_") == 0 || !lib.hasOwnProperty(key)) { return }
|
||||
list.push({zone: lib._name, type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0],
|
||||
path: "usr/volcanos/", file: lib._path, line: 1,
|
||||
})
|
||||
})
|
||||
})
|
||||
var msg = can.request(event, {_handle: true, content: can.base.Format(list)})
|
||||
can.run(event, [button], function() {
|
||||
can.user.toastSuccess(can)
|
||||
})
|
||||
var msg = can.request(event, {_handle: true, text: can.base.Format(list)})
|
||||
can.run(event, [ctx.ACTION, button], function() { can.user.toastSuccess(can) })
|
||||
},
|
||||
getClipboardData: function(event, can, button) {
|
||||
function add(text) {
|
||||
|
44
proto.js
44
proto.js
@ -56,11 +56,10 @@ var ctx = {
|
||||
INDEX: "index", ARGS: "args",
|
||||
}
|
||||
var cli = {
|
||||
OPEN: "open", CLOSE: "close",
|
||||
START: "start", STOP: "stop",
|
||||
DONE: "done", ERROR: "error",
|
||||
CODE: "code", COST: "cost", FROM: "from", BACK: "back",
|
||||
OPEN: "open", CLOSE: "close", BEGIN: "begin", END: "end",
|
||||
START: "start", STOP: "stop", DONE: "done", ERROR: "error",
|
||||
CLEAR: "clear", REFRESH: "refresh",
|
||||
BACK: "back",
|
||||
|
||||
RED: "red", GREEN: "green", BLUE: "blue",
|
||||
YELLOW: "yellow", CYAN: "cyan", PURPLE: "purple", MAGENTA: "magenta",
|
||||
@ -75,23 +74,26 @@ var aaa = {
|
||||
LOGIN: "login", LOGOUT: "logout", INVITE: "invite",
|
||||
}
|
||||
var mdb = {
|
||||
PLUGIN: "plugin", RENDER: "render", SEARCH: "search", INPUTS: "inputs",
|
||||
CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete",
|
||||
MODIFY: "modify", SELECT: "select",
|
||||
|
||||
META: "meta", HASH: "hash", LIST: "list",
|
||||
DICT: "dict", META: "meta", HASH: "hash", LIST: "list",
|
||||
|
||||
ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text",
|
||||
LINK: "link", SCAN: "scan", SHOW: "show", HELP: "help",
|
||||
SHORT: "short", FIELD: "field", COUNT: "count", LIMIT: "limit",
|
||||
INDEX: "index", VALUE: "value", EXTRA: "extra", EXPIRE: "expire",
|
||||
SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit",
|
||||
INDEX: "index", VALUE: "value", EXTRA: "extra", ALIAS: "alias", EXPIRE: "expire",
|
||||
|
||||
CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete",
|
||||
MODIFY: "modify", SELECT: "select",
|
||||
INPUTS: "inputs", PRUNES: "prunes", EXPORT: "export", IMPORT: "import",
|
||||
|
||||
PLUGIN: "plugin", RENDER: "render", SEARCH: "search", ENGINE: "engine",
|
||||
NEXT: "next", PREV: "prev", PAGE: "page", MAIN: "main",
|
||||
}
|
||||
var ssh = {
|
||||
SCRIPT: "script",
|
||||
}
|
||||
var nfs = {
|
||||
HTML: "html", CSS: "css", JS: "js", GO: "go", SH: "sh", CSV: "csv", JSON: "json",
|
||||
PATH: "path", FILE: "file", LINE: "line",
|
||||
PATH: "path", FILE: "file", LINE: "line", SIZE: "size",
|
||||
DIR: "dir", CAT: "cat", TRASH: "trash",
|
||||
DIR_ROOT: "dir_root",
|
||||
}
|
||||
@ -107,11 +109,12 @@ var wiki = {
|
||||
TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark",
|
||||
ORDER: "order", TABLE: "table", CHART: "chart", IMAGE: "image", VIDEO: "video",
|
||||
FIELD: "field", SHELL: "shell", LOCAL: "local", PARSE: "parse",
|
||||
|
||||
NAVMENU: "navmenu", PREMENU: "premenu",
|
||||
}
|
||||
var chat = {
|
||||
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", OUTPUT: "output",
|
||||
TOAST: "toast", CARTE: "carte", INPUT: "input", UPLOAD: "upload",
|
||||
STORY: "story", FLOAT: "float", CONTEXTS: "contexts",
|
||||
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", OUTPUT: "output", INPUT: "input", UPLOAD: "upload",
|
||||
STORY: "story", FLOAT: "float", CONTEXTS: "contexts", CARTE: "carte", TOAST: "toast",
|
||||
LEGNED: "legend", OPTION: "option", ACTION: "action", OUTPUT: "output", STATUS: "status",
|
||||
LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile",
|
||||
|
||||
@ -137,8 +140,8 @@ var chat = {
|
||||
{name: "Header", help: "标题栏", pos: "head", state: ["time", "usernick", "avatar"]},
|
||||
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
|
||||
{name: "Action", help: "工作台", pos: "main"},
|
||||
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
|
||||
{name: "Search", help: "搜索框", pos: "auto"},
|
||||
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
|
||||
],
|
||||
plugin_list: [
|
||||
"/plugin/state.js",
|
||||
@ -180,10 +183,11 @@ var html = {
|
||||
TABLE: "table", TR: "tr", TH: "th", TD: "td", BR: "br", UL: "ul", LI: "li",
|
||||
A: "a", LABEL: "label", INNER: "inner", TITLE: "title",
|
||||
|
||||
CLASS: "class", BLOCK: "block", NONE: "none",
|
||||
CLASS: "class", BLOCK: "block", NONE: "none", FLOAT: "float", CLEAR: "clear",
|
||||
STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", MONOSPACE: "monospace",
|
||||
SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom",
|
||||
MAX_HEIGHT: "max-height", MAX_WIDTH: "max-width",
|
||||
HIDDEN: "hidden", SELECT: "select",
|
||||
|
||||
WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe", CHROME: "chrome",
|
||||
LIST: "list", ITEM: "item", MENU: "menu", NODE: "node",
|
||||
@ -192,7 +196,7 @@ var html = {
|
||||
var lang = {
|
||||
STRING: "string", NUMBER: "number",
|
||||
OBJECT: "object", FUNCTION: "function",
|
||||
ESCAPE: "Escape", ENTER: "Enter",
|
||||
ESCAPE: "Escape", ENTER: "Enter", TAB: "Tab",
|
||||
}
|
||||
function shy(help, meta, list, cb) {
|
||||
var index = 0, args = arguments; function next(type) {
|
||||
@ -317,9 +321,9 @@ Volcanos.meta._load = function(url, cb) {
|
||||
return document.body.appendChild(item), item
|
||||
}
|
||||
}
|
||||
function cmd(tool) {
|
||||
function can(tool) {
|
||||
Volcanos({name: "chat", panels: [
|
||||
{name: "Header", help: "标题栏", pos: "hide", state: ["time", "usernick", "avatar"]},
|
||||
{name: "cmd", help: "工作台", pos: chat.MAIN, tool: tool},
|
||||
{name: "Action", help: "工作台", pos: chat.MAIN, tool: tool},
|
||||
]})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user