1
0
forked from x/volcanos
This commit is contained in:
harveyshao 2022-10-28 14:16:42 +08:00
parent 4b6410c645
commit a41445b91f
7 changed files with 109 additions and 93 deletions

View File

@ -37,11 +37,11 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return }
if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return }
var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }) } var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }, 1000) }
msg.option = can.core.List(msg.option, function(item) { return [chat._TOAST, ice.MSG_HANDLE].indexOf(item) > -1 && delete(msg[item])? undefined: item }) msg.option = can.core.List(msg.option, function(item) { return [chat._TOAST, ice.MSG_HANDLE].indexOf(item) > -1 && delete(msg[item])? undefined: item })
can.getHeader(chat.TOPIC, function(topic) { msg.Option(chat.TOPIC, topic) }) can.getHeader(chat.TOPIC, function(topic) { msg.Option(chat.TOPIC, topic) })
if (can.base.isUndefined(msg._daemon)) { var sub = msg._can if (can.base.isUndefined(msg._daemon)) { var sub = msg._can
can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(can)-1) can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(sub)-1)
if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) } if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) }
} can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds})) } can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds}))
@ -85,13 +85,13 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
}) })
Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return } Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||"", text: can.user.title()}, function(event, msg, cmd, arg) { if (!msg) { return } can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||"", text: can.user.title()}, function(event, msg, cmd, arg) { if (!msg) { return }
var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]; can.base.isFunc(sub.ondaemon[cmd])? var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]||can; can.base.isFunc(sub.ondaemon[cmd])?
can.core.CallFunc(sub.ondaemon[cmd], {can: can, sub: sub, msg: msg, cmd: cmd, arg: arg, cb: function() { msg.Reply() }}): can.core.CallFunc(sub.ondaemon[cmd], {can: can, msg: msg, sub: sub, cmd: cmd, arg: arg, cb: function() { msg.Reply() }}):
can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), function() { msg.Reply() }) can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), function() { msg.Reply() })
}) })
}, _list: [""], }, _list: [""],
pwd: function(can, msg, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] }, pwd: function(can, msg, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] },
toast: function(can, msg, arg) { can.core.CallFunc(can.user.toast, [can].concat(arg)) }, toast: function(can, msg, sub, arg) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) },
refresh: function(can, msg, sub) { sub.Update() }, refresh: function(can, msg, sub) { sub.Update() },
input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) }, input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) },
action: function(can, msg, sub, arg) { action: function(can, msg, sub, arg) {
@ -160,7 +160,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
Option: can.Option, Action: can.Action, Status: can.Status, Input: can.Input, Option: can.Option, Action: can.Action, Status: can.Status, Input: can.Input,
CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, CloneField: can.Clone,
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item) }, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item)
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event) sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))
if (msg.RunAction(event, sub, cmds)) { return } if (msg.RunAction(event, sub, cmds)) { return }
if (msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds)) { return } if (msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds)) { return }
can.Update(event, can.Input(cmds, !silent), cb, silent) can.Update(event, can.Input(cmds, !silent), cb, silent)
@ -169,7 +169,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } }) can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } })
can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } }) can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } })
skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target}); skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target});
(item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) { // (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) {
can.onappend.figure(sub, item, sub._target, function(_sub, value) {
sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() }) sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() })
}) })
}) })
@ -178,7 +179,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
_action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action) _action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action)
return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), can.core.Item(meta))||[]), function(item) { return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), can.core.Item(meta))||[]), function(item) {
!can.base.isUndefined(item) && can.onappend.input(can, item == ""? /* 空白 */ {type: html.SPACE}: !can.base.isUndefined(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) { can.base.isString(item)? /* 按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item), onclick: function(event) {
var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input())) var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
}, onkeydown: function(event) { if (event.key == lang.ENTER) { }, onkeydown: function(event) { if (event.key == lang.ENTER) {
var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input())) var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
@ -251,7 +252,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
case html.SPACE: return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}]) case html.SPACE: return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}])
} }
var input = can.page.input(can, can.base.Copy({}, item), value) var input = can.page.input(can, can.base.Copy({}, item), value)
if (item.type == html.SELECT && item.value) { input._init = function(target) { target.value = item.value } } if (item.type == html.SELECT && item.value) {
input._init = function(target) { target.value = item.value }
}
if (item.type == html.TEXT) { input.onkeydown = item.onkeydown||function(event) { if (item.type == html.TEXT) { input.onkeydown = item.onkeydown||function(event) {
can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can), event.key == lang.ENTER && can.onkeymap.prevent(event) can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can), event.key == lang.ENTER && can.onkeymap.prevent(event)
} } } }
@ -330,19 +333,22 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.onappend._plugin(can, value, meta, cbs, target, field) can.onappend._plugin(can, value, meta, cbs, target, field)
}) }); return res }) }); return res
}, },
figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || can.base.In(meta.type, html.BUTTON, html.SELECT)) { return } figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || can.base.isIn(meta.type, html.BUTTON)) { return }
var input = meta.action||mdb.KEY; can.require([chat.PLUGIN_INPUT+input+nfs._JS], function(can) { var input = meta.action||mdb.KEY; can.require([chat.PLUGIN_INPUT+input+nfs._JS], function(can) {
function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value||"", can.onmotion.focus(can, target) } function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value||"", can.onmotion.focus(can, target) }
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function(){}; target[key] = function(event) {
can.core.CallFunc(on, {event: event, can: can, meta: meta, target: target, last: last||function(){}, sub: target._can, cb: _cb, cbs: function(cb) { target._can && can.onlayout.figure(event, can, target._can._target)
can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) {
if (target._can) { return can.onmotion.toggle(can, target._can._target, true), can.base.isFunc(cb) && cb(target._can, _cb) } if (target._can) { return can.onmotion.toggle(can, target._can._target, true), can.base.isFunc(cb) && cb(target._can, _cb) }
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, [chat.PLUGIN_INPUT+input+nfs._JS], function(sub) { sub.Conf(meta) can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, [chat.PLUGIN_INPUT+input+nfs._JS], function(sub) { sub.Conf(meta)
sub.run = function(event, cmds, cb) { var msg = sub.request(event) sub.run = function(event, cmds, cb) { var msg = sub.request(event)
if (meta.range) { for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push(mdb.VALUE, i) } cb(msg); return } if (meta.range) { for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push(mdb.VALUE, i) } cb(msg); return }
(meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true) (meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true)
}, target._can = sub, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) } }, target._can = sub, can.base.Copy(sub, can.onfigure[input], true)
sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
sub.hidden = function() { return sub._target.style.display == html.NONE }
can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style) can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style)
can.page.style(can, sub._outupt, html.MAX_HEIGHT, can.page.height()-sub._target.offsetTop-2*html.ACTION_HEIGHT) can.page.style(can, sub._output, html.MAX_HEIGHT, can.base.Max(can.page.height()-sub._target.offsetTop-2*html.ACTION_HEIGHT, can.page.height()/2))
can.base.isFunc(cb) && cb(sub, _cb), can.base.isFunc(meta._init) && meta._init(sub, sub._target) can.base.isFunc(cb) && cb(sub, _cb), can.base.isFunc(meta._init) && meta._init(sub, sub._target)
}, document.body) }, document.body)
}}) }})
@ -509,7 +515,6 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
document.body.onclick = function(event) { document.body.onclick = function(event) {
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
if (can.page.tagis(event.target, html.A) && can.user.isWebview) { return event.shiftKey? window.outopen(event.target.href): can.user.open(event.target.href) } if (can.page.tagis(event.target, html.A) && can.user.isWebview) { return event.shiftKey? window.outopen(event.target.href): can.user.open(event.target.href) }
// can.page.Select(can, document.body, can.page.Keys("div.carte.float", "fieldset.input.key.float"), function(target) { can.page.Remove(can, target) })
can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) }) can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) })
} }
can.onkeymap._build(can), document.body.onkeydown = function(event) { can.onkeymap._build(can), document.body.onkeydown = function(event) {
@ -636,4 +641,3 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
}, },
prevent: function(event) { event && (event.stopPropagation(), event.preventDefault()); return true }, prevent: function(event) { event && (event.stopPropagation(), event.preventDefault()); return true },
}) })

View File

@ -8,12 +8,12 @@ Volcanos("base", {
if (val.length > 0) { return val } for (var k in val) { return val } return def if (val.length > 0) { return val } for (var k in val) { return val } return def
} catch (e) { return val&&val.split&&val.split(ice.FS) || def } } catch (e) { return val&&val.split&&val.split(ice.FS) || def }
}, },
Copy: function(to, from, skip) { if (!from) { return to } Copy: function(to, from, hold) { if (!from) { return to }
if (arguments.length == 2 || typeof skip == lang.BOOLEAN) { if (arguments.length == 2 || typeof hold == lang.BOOLEAN) {
for (var k in from) { for (var k in from) {
if (skip && to[k] != undefined) { continue } if (k == undefined) { continue }
if (from[k] === "") { delete(to[k]); continue } if (hold && to.hasOwnProperty(k) && to[k] != undefined) { continue }
to[k] = from[k] if (from[k] === "") { delete(to[k]) } else { to[k] = from[k] }
} return to } return to
} for (var i = 2; i < arguments.length; i++) { var k = arguments[i]; to[k] = from[k] } return to } for (var i = 2; i < arguments.length; i++) { var k = arguments[i]; to[k] = from[k] } return to
}, },
@ -95,7 +95,7 @@ Volcanos("base", {
} return res } return res
}, },
AddUniq: function(list, value) { list = list||[]; return list.indexOf(value) == -1 && list.push(value), list }, AddUniq: function(list, value) { list = list||[]; return list.indexOf(value) == -1 && list.push(value), list },
In: function(item) { var args = arguments; for (var i = 1; i < args; i++) { isIn: function(item) { var args = arguments; for (var i = 1; i < args; i++) {
if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true } if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true }
if (item == args[i]) { return true } if (item == args[i]) { return true }
} }, } },

View File

@ -84,7 +84,7 @@ Volcanos("user", {info: {}, agent: {
can.user.copy(event, can, meta.title) can.user.copy(event, can, meta.title)
}}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }}, }}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }},
can.base.isObject(meta.content)? meta.content: {text: [meta.content||"", html.DIV, nfs.CONTENT]}, can.base.isObject(meta.content)? meta.content: {text: [meta.content||"", html.DIV, nfs.CONTENT]},
html.ACTION, can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [ html.ACTION, !can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [
{view: "current", style: {width: (meta.progress||0)/100*width}}, {view: "current", style: {width: (meta.progress||0)/100*width}},
]}, ]},
] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(-3)})) ] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(-3)}))
@ -95,7 +95,8 @@ Volcanos("user", {info: {}, agent: {
timer: can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) { timer: can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) {
if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+ice.PT+(index%10)+"s..." } if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+ice.PT+(index%10)+"s..." }
}, function() { action.close() }), _target: ui._target, ui: ui, }, function() { action.close() }), _target: ui._target, ui: ui,
}); can.onmotion.story.auto(can, ui._target); return action }); can.onmotion.story.auto(can, ui._target)
return can._toast && (can._toast.close(), delete(can._toast)), can._toast = action
}, },
share: function(can, msg, cmd) { share: function(can, msg, cmd) {
can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) { can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) {

View File

@ -176,7 +176,7 @@ div.output.card div.item.stop { color:gray; }
/* white */ /* white */
body.white { background-color:rgba(5,34,56,0.75); color:white; } body.white { background-color:rgba(5,34,56,0.75); color:white; }
body.white select { background-color:yellowgreen; color:white; } body.white select { background-color:yellowgreen; color:white; opacity:1; }
body.white textarea { background-color:white; } body.white textarea { background-color:white; }
body.white input[type=password] { background-color:white; } body.white input[type=password] { background-color:white; }
body.white input[type=text] { background-color:white; } body.white input[type=text] { background-color:white; }

View File

@ -1,12 +1,12 @@
Volcanos(chat.ONACTION, { Volcanos(chat.ONACTION, {
_init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() }, _init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() },
run: function(event, can) { can.run(can.request(event, {_toast: ice.PROCESS})) }, run: function(event, can) { can.run(event) },
list: function(event, can) { can.sup.Conf("mode") != chat.SIMPLE && can.run(event) }, list: function(event, can) { can.sup.isSimpleMode() || can.run(event) },
back: function(event, can) { can.sup.onimport._back(can.sup) }, back: function(event, can) { can.sup.onimport._back(can.sup) },
refresh: function(event, can) { can.run(event) }, refresh: function(event, can) { can.run(event) },
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(can.request(event, {_toast: ice.PROCESS}), [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) }, onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) },
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(can.request(event, {_toast: ice.PROCESS})) }, onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) },
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target) onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } } if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) } if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) }

View File

@ -1,9 +1,9 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", date: {onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) { Volcanos(chat.ONFIGURE, {date: {
function set(now) { cbs(can, can.user.time(can, now), target.value) } onclick: function(event, can, meta, target, cbs) { cbs(function(can, cb) {
function set(now) { cb(can, can.user.time(can, now), target.value) }
// 添加控件
var now = target.value? new Date(target.value): new Date() var now = target.value? new Date(target.value): new Date()
can._trans = kit.Dict("today", "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月") can.user.trans(can, kit.Dict("today", "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月"))
can.onmotion.clear(can, can._action), 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)), ["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
"today", "", mdb.PREV, ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)), "today", "", mdb.PREV, ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
@ -14,47 +14,48 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", date: {onclick: function(event, c
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) }, "second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
"today": function(event) { now = new Date(), set(show(now)) }, "today": function(event) { now = new Date(), set(show(now)) },
"prev": function(event) { now.setMonth(now.getMonth()-1), show(now) }, "prev": function(event) { now.setMonth(now.getMonth()-1), set(show(now)) },
"year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) }, "year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) }, "month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) },
"next": function(event) { now.setMonth(now.getMonth()+1), show(now) }, "next": function(event) { now.setMonth(now.getMonth()+1), set(show(now)) },
"随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) }, "随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) }, "前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) },
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) }, "后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
}) })
can.onmotion.clear(can, can._status)
can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
var today = new Date(); function show(now) { var today = new Date(); function show(now) {
// 设置控件
can.Action("year", now.getFullYear()) can.Action("year", now.getFullYear())
can.Action("month", now.getMonth()+1) can.Action("month", now.getMonth()+1)
can.Action("hour", now.getHours()) can.Action("hour", now.getHours())
can.Action("minute", parseInt(now.getMinutes()/5)*5) can.Action("minute", parseInt(now.getMinutes()/5)*5)
can.Action("second", parseInt(now.getSeconds()/5)*5) can.Action("second", parseInt(now.getSeconds()/5)*5)
// 设置组件
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}]) can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last } var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type], can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type],
dataset: {date: day.getTime()}, onclick: function(event) { dataset: {date: day.getTime()}, onclick: function(event) { set(now = new Date(parseInt(event.target.dataset.date))) },
set(now = new Date(parseInt(event.target.dataset.date)))
},
}]) }])
} }
// 时间区间
var one = new Date(now); one.setDate(1) var one = new Date(now); one.setDate(1)
var end = new Date(now); end.setMonth(now.getMonth()+1), end.setDate(1) var end = new Date(now); end.setMonth(now.getMonth()+1), end.setDate(1)
var head = new Date(one); head.setDate(one.getDate()-one.getDay()) var head = new Date(one); head.setDate(one.getDate()-one.getDay())
var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay()) 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, mdb.PREV) } 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(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) } for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) }
return now return now
} show(now), can.onlayout.figure(event, can) } show(now)
})}} }) can._show = function(_now) { set(now = show(_now)) }
can._now = function() { return now }
})},
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub.hidden()) { return } switch (event.key) {
case "n": can.page.Select(can, sub._action, "input[name=next]", function(target) { target.click() }); break
case "p": can.page.Select(can, sub._action, "input[name=prev]", function(target) { target.click() }); break
case "j": sub._show(can.base.TimeAdd(sub._now(), 1)); break
case "k": sub._show(can.base.TimeAdd(sub._now(), -1)); break
} },
} })

View File

@ -1,24 +1,34 @@
Volcanos(chat.ONFIGURE, {key: { Volcanos(chat.ONFIGURE, {key: {
_show: function(can, msg, cb, target, name) { if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return } _show: function(can, msg, cb, target, name) { if (msg.Length() == 0 || msg.Length() == 1 && msg.Append(name) == target.value) { return can.onmotion.hidden(can) }
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) { value = line[key] can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) { value = line[key]
return {text: [value, html.TD], style: msg.append && msg.append.length == 1? kit.Dict(html.MIN_WIDTH, target.offsetWidth-16): {}, onclick: function(event) { return {text: [value, html.TD], style: msg.append && msg.append.length == 1? kit.Dict(html.MIN_WIDTH, target.offsetWidth-16): {}, onclick: function(event) {
cb(can, value, target.value), msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN && can.onmotion.delay(can, function() { can.onfigure.key._load(event, can, cb, target, name, value) }) cb(can, value, target.value), msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN && can.onmotion.delay(can, function() { can._load(event, can, cb, target, name, value) })
can._delay_hidden = true
}} }}
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()) }), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
}, },
_load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) { _load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||""], function(msg) {
name == ctx.INDEX && can.core.Item(can.onengine.plugin.meta, function(key) { msg.Push(ctx.INDEX, can.core.Keys(ice.CAN, key)) }) name == ctx.INDEX && can.core.Item(can.onengine.plugin.meta, function(key) { msg.Push(ctx.INDEX, can.core.Keys(ice.CAN, key)) })
can.onfigure.key._show(can, msg, cb, target, name) can._show(can, msg, cb, target, name)
}) }, }) },
onfocus: function(event, can, meta, target, cbs) { can.onmotion.delay(can, function() { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } onfocus: function(event, can, meta, target, cbs) {
meta.msg && meta.msg.Length() > 0? can.onfigure.key._show(sub, meta.msg, cb, target, meta.name): can.onfigure.key._load(event, sub, cb, target, meta.name) cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
}) }, 30) }, meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value)
onblur: function(event, can, sub) { can.onmotion.delay(can, function() { can.onmotion.hidden(can, sub._target) }, 10) }, }) },
onkeydown: function(event, can, meta, cb, target, sub, last) { switch (event.key) { onclick: function(event, can, meta, target, cbs) {
cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value)
})
},
onblur: function(event, can, sub) {
can.onmotion.delay(can, function() { sub._delay_hidden || can.onmotion.hidden(can, sub._target), sub._delay_hidden = false }, 300)
},
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub.hidden()) { return } switch (event.key) {
case "n": case "n":
case "p": case "p":
case lang.TAB: can.onkeymap.selectInputs(event, sub, function() { can.onfigure.key._load(event, sub, cb, target, meta.name) }, target); break case lang.TAB: can.onkeymap.selectInputs(event, sub, function() { sub._load(event, sub, cb, target, meta.name) }, target); break
case lang.ENTER: if (meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)) { break } case lang.ENTER: if (meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)) { break }
default: can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden) td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || last(event) default: can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || last(event)
target.value == "" && sub._load(event, sub, cb, target, meta.name)
} }, } },
}}) }})