diff --git a/.gitignore b/.gitignore
index dd619d8a..3ade8a37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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/
diff --git a/frame.js b/frame.js
index bb68b93c..d262daa0 100644
--- a/frame.js
+++ b/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
diff --git a/lib/core.js b/lib/core.js
index 66be1b36..f88af181 100644
--- a/lib/core.js
+++ b/lib/core.js
@@ -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) {
diff --git a/lib/page.js b/lib/page.js
index 833b7b00..380f1c0b 100644
--- a/lib/page.js
+++ b/lib/page.js
@@ -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)
}),
diff --git a/lib/user.js b/lib/user.js
index fc9704d0..92eff17a 100644
--- a/lib/user.js
+++ b/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: [
diff --git a/page/cmd.html b/page/cmd.html
deleted file mode 100644
index 7316b16a..00000000
--- a/page/cmd.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/page/index.css b/page/index.css
index 31588116..deccf774 100644
--- a/page/index.css
+++ b/page/index.css
@@ -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;
diff --git a/page/share.css b/page/share.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/page/share.html b/page/share.html
deleted file mode 100644
index db886e17..00000000
--- a/page/share.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
- volcanos
-
-
-
-
-
-
-
-
-
-
-
diff --git a/page/share.js b/page/share.js
deleted file mode 100644
index 959e8b7d..00000000
--- a/page/share.js
+++ /dev/null
@@ -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"]},
- ]},
- }},
- },
-})
diff --git a/panel/action.css b/panel/action.css
index 8ce2a648..35d6bf65 100644
--- a/panel/action.css
+++ b/panel/action.css
@@ -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;
+}
diff --git a/panel/action.js b/panel/action.js
index 30f598f5..742582bb 100644
--- a/panel/action.js
+++ b/panel/action.js
@@ -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)
diff --git a/panel/cmd.css b/panel/cmd.css
deleted file mode 100644
index 7bb1aacf..00000000
--- a/panel/cmd.css
+++ /dev/null
@@ -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;
-}
diff --git a/panel/cmd.js b/panel/cmd.js
deleted file mode 100644
index daa776a6..00000000
--- a/panel/cmd.js
+++ /dev/null
@@ -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() })
- },
-})
-
diff --git a/panel/header.js b/panel/header.js
index cad4b835..2d8f1721 100644
--- a/panel/header.js
+++ b/panel/header.js
@@ -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
},
diff --git a/panel/river.js b/panel/river.js
index 2d71a8ee..38055dec 100644
--- a/panel/river.js
+++ b/panel/river.js
@@ -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])
diff --git a/plugin/input.js b/plugin/input.js
index 1604b35e..d332c975 100644
--- a/plugin/input.js
+++ b/plugin/input.js
@@ -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: []})
diff --git a/plugin/input/date.css b/plugin/input/date.css
index 588c4656..a80080ae 100644
--- a/plugin/input/date.css
+++ b/plugin/input/date.css
@@ -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 {
diff --git a/plugin/input/date.js b/plugin/input/date.js
index 7959cb83..a2617c21 100644
--- a/plugin/input/date.js
+++ b/plugin/input/date.js
@@ -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)
+})}} }, [""])
diff --git a/plugin/input/key.js b/plugin/input/key.js
index 171c983d..e58b87e8 100644
--- a/plugin/input/key.js
+++ b/plugin/input/key.js
@@ -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)
+ },
+}})
diff --git a/plugin/input/province.js b/plugin/input/province.js
index 3a022daa..2631f00a 100644
--- a/plugin/input/province.js
+++ b/plugin/input/province.js
@@ -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)
})
-}}, })
+}) }}, })
diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js
index d7555454..aab25f88 100644
--- a/plugin/local/wiki/draw.js
+++ b/plugin/local/wiki/draw.js
@@ -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
diff --git a/plugin/local/wiki/word.css b/plugin/local/wiki/word.css
index 4cbc8a86..ca82683f 100644
--- a/plugin/local/wiki/word.css
+++ b/plugin/local/wiki/word.css
@@ -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 {
diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js
index e00a6096..8fa2aef3 100644
--- a/plugin/local/wiki/word.js
+++ b/plugin/local/wiki/word.js
@@ -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) },
})
diff --git a/plugin/state.js b/plugin/state.js
index 468811e1..3f0f10b6 100644
--- a/plugin/state.js
+++ b/plugin/state.js
@@ -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) {
diff --git a/proto.js b/proto.js
index 9ecc04ab..2e610fc8 100644
--- a/proto.js
+++ b/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},
]})
}