1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt input

This commit is contained in:
harveyshao 2022-10-28 22:42:47 +08:00
parent a41445b91f
commit b50208ed8b
13 changed files with 142 additions and 225 deletions

View File

@ -179,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)
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.isString(item)? /* 按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item), onclick: function(event) {
can.base.isString(item)? /* 按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item, meta._trans), 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()))
}, 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()))
@ -335,7 +335,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
},
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) {
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.delay(can, function() { can.onmotion.focus(can, target) }) }
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function(){}; target[key] = function(event) {
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) {
@ -345,14 +345,14 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
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)
}, 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.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)
sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
can.onmotion.delay(can, function() { can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style)
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)
}, document.body)
}})
} }), can.onfigure[input]._init && can.onfigure[input]._init(can, target, _cb)
} }), can.onfigure[input]._init && can.onfigure[input]._init(can, meta, target, _cb)
})
},
})
@ -471,7 +471,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
}) },
delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) },
clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), true },
clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), target },
cache: function(can, next) { var list = can.base.Obj(can.core.List(arguments).slice(2), [can._output])
can.core.List(list, function(target) { target && target._cache_key && can.page.Cache(target._cache_key, target, target.scrollTop+1) })
var key = next(can._cache_data = can._cache_data||{}, arguments[2]._cache_key); if (!key) { return }

View File

@ -95,7 +95,7 @@ Volcanos("base", {
} return res
},
AddUniq: function(list, value) { list = list||[]; return list.indexOf(value) == -1 && list.push(value), list },
isIn: function(item) { var args = arguments; for (var i = 1; i < args; i++) {
isIn: function(item) { var args = arguments; for (var i = 1; i < args.length; i++) {
if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true }
if (item == args[i]) { return true }
} },
@ -146,7 +146,7 @@ Volcanos("base", {
},
beginWith: function(str, begin) { return typeof str == lang.STRING && str.trim().indexOf(begin) == 0 },
endWith: function(str, end) { return str.lastIndexOf(end) + end.length == str.length },
endWith: function(str, end) { return typeof str == lang.STRING && str.lastIndexOf(end) + end.length == str.length },
trim: function(args) { if (this.isString(args)) { return args.trim() }
if (this.isArray(args)) { for (var i = args.length-1; i >= 0; i--) { if (!args[i]) { args.pop() } else { break } } }
return args

View File

@ -13,6 +13,7 @@ Volcanos("page", {ClassList: {
can.page.Select(can, target, html.IFRAME, function(item) { can.page.SelectAll(can, item.contentWindow.document.body, key, cb, interval, cbs) })
return can.core.List(target && target.querySelectorAll(key), cb, interval, cbs)
},
SelectInput: function(can, target, name, cb) { return can.page.Select(can, target, "input[name="+name+"]", cb) },
SelectArgs: function(can, option, key, cb) {
if (can.base.isUndefined(key)) { var value = {}; can.page.SelectArgs(can, option, "", function(item) { item.name && item.value && (value[item.name] = item.value) }); return [value] }
if (can.base.isObject(key)) { return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [key] }
@ -29,10 +30,10 @@ Volcanos("page", {ClassList: {
can.base.isString(value)? (target.innerHTML = value): can.core.Item(value, function(key, val) {
key == "className" && can.base.isArray(val) && (val = val.join(ice.SP))
!can.base.isObject(val)? (target[key] = val): can.core.Item(val, function(k, v) {
if (["height", "max-height", "min-height", "width", "max-width", "min-width"].indexOf(k) > -1 && parseInt(v) < 0) { return target[key] && (target[key][k] = "") }
if (["height", "max-height", "min-height", "width", "max-width", "min-width",
"left", "right", "top", "bottom", "margin-left", "margin-top", "padding", "font-size",
].indexOf(k) > -1 && v && (v&&v.indexOf&&v.indexOf("px") == -1 || can.base.isNumber(v))) { v += "px" }
if (can.base.isIn(k, "height", "width", "min-height", "max-height", "min-width", "max-width") && parseInt(v) < 0) { return target[key] && (target[key][k] = "") }
if (can.base.isIn(k, "height", "width", "min-height", "max-height", "min-width", "max-width",
"left", "top", "right", "bottom", "margin-left", "margin-top", "margin", "padding", "font-size",
) && v && (can.base.isNumber(v) || !can.base.endWidth(v, "px"))) { v += "px" }
target[key] && (target[key][k] = v)
})
}); return target

View File

@ -173,7 +173,7 @@ Volcanos("user", {info: {}, agent: {
can.core.Next(list, cb, cbs||function() { can.user.toastSuccess(can) })
})
},
upload: function(event, can, cb) { var begin = new Date()
upload: function(event, can, cb, silent) { var begin = new Date()
var ui = can.page.Append(can, document.body, [{view: [[html.UPLOAD, chat.FLOAT]], list: [
html.ACTION, {view: html.OUTPUT, list: ["progress"]}, {view: html.STATUS, list: [ice.SHOW, cli.COST, nfs.SIZE]},
]}]); can.onlayout.figure(event, can, ui._target)
@ -182,15 +182,18 @@ Volcanos("user", {info: {}, agent: {
begin: function(event) { begin = new Date()
var upload = can.page.Select(can, ui.action, html.INPUT_FILE)[0]; if (upload.files.length == 0) { return upload.focus() }
var msg = can.request(event, can.Option(), {_handle: ice.TRUE}); msg._upload = upload.files[0], msg._progress = action.show
can.runAction(event, html.UPLOAD, [], cb||function(msg) { can.user.toastSuccess(can), can.Update(), action.close() })
can.runAction(event, html.UPLOAD, [], function(msg) { action.close()
if (can.base.isFunc(cb)) { return cb(msg) }
can.user.toastSuccess(can), can.Update()
})
},
show: function (event, value, total, loaded) {
ui.cost.innerHTML = can.base.Duration(new Date() - begin)
ui.show.innerHTML = value+"%", value == 0 && action.begin(event)
ui.size.innerHTML = can.base.Size(loaded)+ice.PS+can.base.Size(total)
can.page.styleWidth(can, ui.progress, value*(ui.output.offsetWidth-2)/100)
},
}); can.page.Select(can, ui.action, html.INPUT_FILE)[0].click(); return action
}, _target: ui._target,
}); can.page.Select(can, ui.action, html.INPUT_FILE)[0].click(), silent && can.onmotion.hidden(can, ui._target); return action
},
download: function(can, path, name, ext) {
var a = can.page.Append(can, document.body, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}]).first

View File

@ -2,7 +2,7 @@ body, fieldset, table, tr, th, td { padding:0; border:0; margin:0; }
body { background-color:black; color:cyan; font-size:16px; overflow:hidden; }
legend { background-color:cadetblue; color:white; padding:0 20px; margin-right:2px; float:left; }
select { background-color:black; color:cyan; padding:0 10px; margin:0 2px; border:0; }
textarea { background-color:cyan; width:400px; padding:5px; border:0; }
textarea { background-color:cyan; width:400px; padding:5px; border:0; margin:2px; }
input[type=password] { background-color:cyan; color:black; padding:0 5px; border:0; width:90px; }
input[type=text] { background-color:cyan; color:black; padding:0 5px; margin:0 2px; border:0; width:90px; }
input[name=cmd] { background-color:black; color:white; width:320px; }
@ -85,6 +85,9 @@ fieldset.input.date div.output td.prev { color:gray; }
fieldset.input.date div.output td.next { color:gray; }
fieldset.input.date div.output td { padding:2px 10px; }
fieldset.input.date table { text-align:center; width:280px; }
fieldset.input.date select { width:63px; }
fieldset.input.date select[name=month] { width:70px; }
fieldset.input.date select[name=year] { width:88px; }
body>div.toast div.action>div.item.space { height:unset; }
body>div.float { background-color:#0e3369b3; color:white; padding:5px; }

View File

@ -53,7 +53,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
_time: function(can, target) {
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target), target.onmouseenter = target.click
can.onappend.figure(can, {action: "date"}, target), target.onmouseenter = target.click
},
time: function(can, target) {
can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")

View File

@ -1,41 +1,36 @@
Volcanos(chat.ONFIGURE, {date: {
onclick: function(event, can, meta, target, cbs) { cbs(function(can, cb) {
function set(now) { cb(can, can.user.time(can, now), target.value) }
const TODAY = "today", YEAR = "year", MONTH = "month", HOUR = "hour", MINUTE = "minute", SECOND = "second"
var today = new Date(), now = can.base.Date(target.value); function _cb(_now) { cb(can, can.user.time(can, now = _now), target.value) }
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)),
TODAY, "", mdb.PREV, [YEAR].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)), [MONTH].concat(can.core.List(1, 13)), mdb.NEXT,
], can.onmotion.clear(can, can._action), kit.Dict(cli.CLOSE, function() { can.close() },
HOUR, function(event, can, button, value) { now.setHours(parseInt(value)||0), show(now) },
MINUTE, function(event, can, button, value) { now.setMinutes(parseInt(value)||0), show(now) },
SECOND, function(event, can, button, value) { now.setSeconds(parseInt(value)||0), show(now) },
TODAY, function() { _cb(show(today)) },
var now = target.value? new Date(target.value): new Date()
can.user.trans(can, kit.Dict("today", "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月"))
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)),
"today", "", mdb.PREV, ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), mdb.NEXT,
], 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) },
"today": function(event) { now = new Date(), set(show(now)) },
mdb.PREV, function() { now.setMonth(now.getMonth()-1), _cb(show(now)) },
YEAR, function(event, can, button, value) { now.setFullYear(parseInt(value)), show(now) },
MONTH, function(event, can, button, value) { now.setMonth(parseInt(value)-1), show(now) },
mdb.NEXT, function() { now.setMonth(now.getMonth()+1), _cb(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) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-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.setFullYear(now.getFullYear()-1), show(now) },
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
})
can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
var today = new Date(); function show(now) {
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)
"rand", function() { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"over", function() { now.setFullYear(now.getFullYear()-1), show(now) },
"come", function() { now.setFullYear(now.getFullYear()+1), show(now) },
chat._TRANS, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月", "over", "去年", "come", "今年"),
)), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
function show(now) {
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)
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 }
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) { set(now = new Date(parseInt(event.target.dataset.date))) },
can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.isIn(can.base.Time(day, "%y-%m-%d"), can.base.Time(now, "%y-%m-%d"), can.base.Time(today, "%y-%m-%d"))? html.SELECT: type],
onclick: function(event) { _cb(day) },
}])
}
@ -48,14 +43,16 @@ Volcanos(chat.ONFIGURE, {date: {
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 now
} show(now)
can._show = function(_now) { set(now = show(_now)) }
can._now = function() { return now }
} show(now), can._show = function(d) { _cb(show(new Date(now.getTime()+d*24*3600*1000))) }
})},
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
} },
case "n": can.page.SelectInput(can, sub._action, mdb.NEXT, function(target) { target.click() }); break
case "p": can.page.SelectInput(can, sub._action, mdb.PREV, function(target) { target.click() }); break
case "t": can.page.SelectInput(can, sub._action, "today", function(target) { target.click() }); break
case "j": sub._show(7); break
case "k": sub._show(-7); break
case "h": sub._show(-1); break
case "l": sub._show(1); break
default: return
} can.onkeymap.prevent(event) },
} })

View File

@ -1,12 +1,14 @@
Volcanos(chat.ONFIGURE, {img: {
_init: function(can, target) { can.onmotion.hidden(can, target)
for (var i = 0; i < 1; i++) {
can.page.Append(can, target.parentNode, [{type: html.DIV, style: {width: 90, height: 90, "background-color": "yellow"}, onclick: function(event) {
can.user.upload(event, can, function(msg) {
target.value = can.core.Split(target.value).concat([msg.Result()]).join(ice.FS)
can.page.Append(can, event.target, [{img: can.misc.MergeURL(can, {_path: "/share/cache/"+msg.Result()}, true), width: 90, height: 90}])
})
}}])
_init: function(can, meta, target) { var images = can.core.Split(target.value); can.onmotion.hidden(can, target)
var count = parseInt(meta.value||"1"), width = target.parentNode.offsetWidth-12; for (var n = 1; n < 10; n++) { if (n * n >= count) { width = width/n; break } } width -= 1
function add(target, hash) { target._hash = hash, can.page.Appends(can, target, [{img: can.misc.MergeURL(can, {_path: web.SHARE_CACHE+hash}, true), height: width, width: width}]) }
function set() { target.value = can.page.SelectChild(can, target.parentNode, html.DIV, function(target) { return target._hash }).join(ice.FS) }
for (var i = 0; i < count; i++) {
can.page.Append(can, target.parentNode, [{type: html.DIV, style: {
"background-color": "yellow", "float": "left", "clear": i%n == 0? "both": "none", "margin": 1, height: width, width: width,
}, _init: function(target) { images[i] && add(target, images[i]), target.onclick = function(event) {
can.user.upload(event, can, function(msg) { add(target, msg.Result()), set() }, true)
} } }])
}
},
}})

View File

@ -2,8 +2,7 @@ Volcanos(chat.ONFIGURE, {key: {
_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]
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._load(event, can, cb, target, name, value) })
can._delay_hidden = true
can._delay_hidden = false, 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.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
},
@ -11,21 +10,15 @@ Volcanos(chat.ONFIGURE, {key: {
name == ctx.INDEX && can.core.Item(can.onengine.plugin.meta, function(key) { msg.Push(ctx.INDEX, can.core.Keys(ice.CAN, key)) })
can._show(can, msg, cb, target, name)
}) },
onfocus: function(event, can, meta, target, cbs) {
cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
onclick: function(event, can, meta, target, cbs) { can.onfigure.key.onfocus(event, can, meta, target, cbs) },
onfocus: 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)
}) },
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)
},
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 "p":
case lang.ESCAPE: target.blur(); 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 }
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)

View File

@ -1,70 +1,28 @@
fieldset.keyboard div.output div.key {
fieldset.keyboard>div.output { min-width:750px; }
fieldset.keyboard>div.output>br { clear:both; }
fieldset.keyboard>div.output>div.key {
font-size:24px; text-align:center;
background-color:green; color:white; padding:0; margin:5px;
height:40px; width:40px; float:left;
cursor:pointer;
}
fieldset.keyboard div.output div.key.double {
font-size:16px; white-space:pre;
}
fieldset.keyboard div.output div.key.special {
font-size:16px;
background-color:red;
}
fieldset.keyboard div.output div.key.special.hold {
background-color:green;
}
fieldset.keyboard div.output div.key.tail {
width:70px;
}
fieldset.keyboard div.output div.key.Tab {
width:60px;
}
fieldset.keyboard div.output div.key.Ctrl {
width:70px;
}
fieldset.keyboard div.output div.key.Shift {
width:90px;
}
fieldset.keyboard div.output div.key.Win {
width:60px;
}
fieldset.keyboard div.output div.key.Alt {
width:60px;
}
fieldset.keyboard div.output div.key.Space {
width:300px;
}
fieldset.keyboard div.output div.key.Shift.tail {
width:140px;
}
fieldset.keyboard div.output div.key.Enter {
width:110px;
}
fieldset.keyboard div.output div.key.Backspace {
width:90px;
}
fieldset.keyboard div.output div.key span {
margin-top:2px; display:block;
}
fieldset.keyboard div.output div.key.special span {
margin-top:10px; display:block;
}
fieldset.keyboard div.output br {
clear:both;
}
fieldset.keyboard div.output div.key:hover {
background-color:red;
}
fieldset.keyboard div.output div.key.special:hover {
background-color:green;
}
fieldset.keyboard div.output {
min-width:750px;
}
fieldset.keyboard>div.output>div.key:hover { background-color:red; }
fieldset.keyboard>div.output>div.key.double { font-size:16px; white-space:pre; }
fieldset.keyboard>div.output>div.key.special { font-size:16px; background-color:red; }
fieldset.keyboard>div.output>div.key.special:hover { background-color:green; }
fieldset.keyboard>div.output>div.key.special.hold { background-color:green; }
fieldset.keyboard>div.output>div.key.tail { width:70px; }
fieldset.keyboard>div.output>div.key.Tab { width:60px; }
fieldset.keyboard>div.output>div.key.Ctrl { width:70px; }
fieldset.keyboard>div.output>div.key.Shift { width:90px; }
fieldset.keyboard>div.output>div.key.Win { width:60px; }
fieldset.keyboard>div.output>div.key.Alt { width:60px; }
fieldset.keyboard>div.output>div.key.Space { width:300px; }
fieldset.keyboard>div.output>div.key.Shift.tail { width:140px; }
fieldset.keyboard>div.output>div.key.Enter { width:110px; }
fieldset.keyboard>div.output>div.key.Backspace { width:90px; }
fieldset.keyboard>div.output>div.key>span { margin-top:2px; display:block; }
fieldset.keyboard>div.output>div.key.special>span { margin-top:10px; }
table.content td input {
width:50px;
}
body.mobile table.content td input {
width:80px;
}
table.content td input { width:50px; }
body.mobile table.content td input { width:80px; }

View File

@ -1,77 +1,34 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", keyboard: {
onclick: function(event, can, meta, cb, target) {
can.onfigure.keyboard._make(event, can, meta, cb, target)
},
onfocus: function(event, can, meta, cb, target, last) {
can.onfigure.keyboard._make(event, can, meta, cb, target)
},
_make: function(event, can, meta, cb, target, last) {
var sub = target._can; if (sub && sub._cbs) { return }
cb(function(sub, cbs) { sub._cbs = cbs
can.onfigure.keyboard._show(sub, target)
})
},
_show: function(can, target) { can.require(["/plugin/input/keyboard.css"])
var msg = can.request({}); can.onfigure.keyboard._normal(can, msg)
var keys = {}; function hold(value, div) { keys[value.name] = div, can.page.ClassList.add(can, div, "hold") }
msg.Table(function(value) { value.type == "head" && can.page.Append(can, can._output, "br")
var t = value.type+" "+value.name+(value.name.indexOf("\n")>-1? " double": value.name.length>1? " special": "")
var div = can.page.Append(can, can._output, [{view: t, list: [{text: [value.name]}], onclick: function(event) {
switch (value.name) {
case "Esc":
can.page.Remove(can, can._target)
delete(target._can)
break
case "Ctrl":
can._ctrl = !can._ctrl, hold(value, div)
break
case "Shift":
can._shift = !can._shift, hold(value, div)
break
case "Backspace":
if (can.base.isFunc(target)) {
target(value.name)
} else {
target.value = target.value.slice(0, -1)
}
target.focus(), can.user.toast(can, value.name)
break
case "Enter":
break
case "Esc":
break
default:
function add(value) {
if (can.base.isFunc(target)) {
target(value)
} else {
target.value += value
target.focus(), can.user.toast(can, value.name)
}
}
can._shift = can._shift||event.shiftKey
if (value.name == "Tab") {
add("\t")
} else if (value.name == "Space") {
add(" ")
} else if (value.name.indexOf("\n") > -1) {
var ls = can.core.Split(value.name, "\n", "\n", "\n")
Volcanos(chat.ONFIGURE, {keyboard: {
onclick: function(can, cbs, target) { cbs(function(sub) { var msg = can.request(); sub._normal(can, msg), can.onfigure.keyboard._show(sub, msg, target) }) },
_show: function(can, msg, target) { can.require(["/plugin/input/keyboard.css"])
msg.Table(function(item) { item.type == "head" && can.page.Append(can, can._output, html.BR)
function add(value) { target.value += value, target.focus(), can.user.toast(can, value||item.name) }
function hold() { can.page.ClassList.add(can, div, "hold") }
var div = can.page.Append(can, can._output, [{view: item.type+ice.SP+item.name+(item.name.indexOf(ice.NL)>-1? " double": item.name.length>1? " special": ""), list: [{text: [item.name]}], onclick: function(event) {
switch (item.name) {
case "clear": target.value = "", target.focus(); break
case "close": can.close(); break
case "Esc": can.close(); break
case "Ctrl": can._ctrl = !can._ctrl, hold(); break
case "Shift": can._shift = !can._shift, hold(); break
case "Backspace": target.value = target.value.slice(0, -1), add(""); break
case "Enter": break
default: can._shift = can._shift||event.shiftKey
if (item.name == lang.TAB) {
add(ice.TB)
} else if (item.name == "Space") {
add(ice.SP)
} else if (item.name.indexOf(ice.NL) > -1) { var ls = can.core.Split(item.name, ice.NL, ice.NL, ice.NL)
add(can._shift? ls[0]: ls[1])
} else if (can._shift) {
add(value.name.toUpperCase())
} else {
add(value.name)
}
can.core.Item(keys, function(key, div) {
can.page.ClassList.del(can, div, "hold")
}), can._ctrl = false, can._shift = false
add(can._shift? item.name.toUpperCase(): item.name)
} can._shift = false, can._ctrl = false, can.page.Select(can, can._output, "div.hold", function(target) { can.page.ClassList.del(can, div, "hold") })
}
} }]).first
})
},
_normal: function(can, msg) {
can.core.List([["Esc"],
can.core.List([["Esc", "close", "clear"],
["~\n`", "!\n1", "@\n2", "#\n3", "$\n4", "%\n5", "^\n6", "&\n7", "*\n8", "(\n9", ")\n0", "_\n-", "+\n=", "Backspace"],
["Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "{\n[", "}\n]", "|\n\\"],
["Ctrl", "a", "s", "d", "f", "g", "h", "j", "k", "l", ":\n;", "\"\n'", "Enter"],

View File

@ -1,8 +1,9 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", 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() {
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)
})
}) }}, })
Volcanos(chat.ONFIGURE, {province: {
onclick: function(event, can, meta, cbs, target) { cbs(function(can, cb) {
can.require(["/require/shylinux.com/x/echarts/echarts.js", "/require/shylinux.com/x/echarts/china.js"], function() {
var chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: 600, height: 400}}]).first)
chart.setOption({geo: {map: 'china'}}), chart.on(html.CLICK, function(params) { target.value = params.name, can.close() })
can.Status(mdb.TOTAL, 34)
})
}) }
}})

View File

@ -2,12 +2,14 @@ Volcanos(chat.ONIMPORT, {
_init: function(can, msg, target) {
can.page.Appends(can, target, msg.Table(function(item) {
return {view: html.ITEM, list: [
{view: wiki.IMAGE, list: [{img: can.misc.MergeCache(can, can.core.Split(item.image)[0]), width: 150}]},
{view: wiki.IMAGE, list: [{img: can.misc.MergeCache(can, can.core.Split(item.image)[0]), width: 150, height: 150}]},
{view: wiki.CONTENT, list: [
{view: [wiki.TITLE, html.DIV, item.name]},
{view: [wiki.CONTENT, html.DIV, item.text]},
{view: [mall.PRICE, html.DIV, "¥ "+(item.price||0)]},
{view: [mall.COUNT, html.DIV, "还剩 "+(item.count||0)]},
{view: [html.TITLE, html.DIV, item.name]},
{view: [html.CONTENT, html.DIV, item.text]},
{view: html.DISPLAY, list: [
{view: [mall.PRICE, html.DIV, "¥ "+(item.price||0)], style: {"float": "left"}},
{view: [mall.COUNT, html.DIV, " 还剩 "+(item.count||0)+" 件"], style: {"float": "left"}},
]},
{view: html.ACTION, inner: item.action},
]},
], onclick: function(event) {