1
0
forked from x/volcanos
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-09-12 00:13:02 +08:00
parent a4437facdb
commit d6d648ff90
8 changed files with 83 additions and 43 deletions

View File

@ -460,9 +460,7 @@ Volcanos(chat.ONAPPEND, {
if (["_space"].indexOf(item.view) > -1) { return can.page.Append(can, target, [item]) } if (["_space"].indexOf(item.view) > -1) { return can.page.Append(can, target, [item]) }
if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) } if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) }
if (item.type == html.SELECT) { item._selectonly = true, item.type = html.TEXT if (item.type == html.SELECT) { item._selectonly = true, item.type = html.TEXT
if (item.values && item.values.length > 0) { if (item.values && item.values.length > 0) { item._selectonly = false, item.type = html.SELECT }
item._selectonly = false, item.type = html.SELECT
}
} }
var _icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item), input = can.page.input(can, _item, value) var _icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item), input = can.page.input(can, _item, value)
if (item._selectonly) { input._selectonly = true } if (item._selectonly) { input._selectonly = true }
@ -497,7 +495,7 @@ Volcanos(chat.ONAPPEND, {
input.data.type = html.BUTTON, input.value = can.user.trans(can, item.name) input.data.type = html.BUTTON, input.value = can.user.trans(can, item.name)
} }
if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } } if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } }
var _style = can.page.buttonStyle(can, item.name) var _style = can.Conf("_style."+item.name)||can.page.buttonStyle(can, item.name)
var _input = can.page.Append(can, target, [{view: [[html.ITEM].concat(style, [item.type, item.name, item._className, item.icon? "_icon": ""], _style)], list: [item.icon && {icon: item.icon}, input].concat(_icon), _init: function(target, _input) { var _input = can.page.Append(can, target, [{view: [[html.ITEM].concat(style, [item.type, item.name, item._className, item.icon? "_icon": ""], _style)], list: [item.icon && {icon: item.icon}, input].concat(_icon), _init: function(target, _input) {
if (item.type == html.MULTIPLE) { if (item.type == html.MULTIPLE) {
can.onappend.multiple(can, item, _input.input) can.onappend.multiple(can, item, _input.input)
@ -638,6 +636,17 @@ Volcanos(chat.ONAPPEND, {
if (can.user.isMobile) { can.base.toLast(msg.append, mdb.TIME) } can.base.toLast(msg.append, web.LINK), can.base.toLast(msg.append, ctx.ACTION) if (can.user.isMobile) { can.base.toLast(msg.append, mdb.TIME) } can.base.toLast(msg.append, web.LINK), can.base.toLast(msg.append, ctx.ACTION)
if (msg.append[msg.append.length-1] == ctx.ACTION && can.core.List(msg[ctx.ACTION], function(item) { if (item) { return item } }).length == 0) { msg.append.pop() } if (msg.append[msg.append.length-1] == ctx.ACTION && can.core.List(msg[ctx.ACTION], function(item) { if (item) { return item } }).length == 0) { msg.append.pop() }
if (msg.append[msg.append.length-1] == ctx.ACTION && (!msg[ctx.ACTION] || msg[ctx.ACTION].length == 0)) { msg.append.pop() } if (msg.append[msg.append.length-1] == ctx.ACTION && (!msg[ctx.ACTION] || msg[ctx.ACTION].length == 0)) { msg.append.pop() }
if (msg.IsDetail()) {
for (var i = 0; i < msg[mdb.KEY].length; i++) {
if (msg[mdb.KEY][i] == "action") { var action = msg[mdb.VALUE][i]
for (var j = i; j < msg[mdb.KEY].length-1; j++) {
msg[mdb.KEY][j] = msg[mdb.KEY][j+1], msg[mdb.VALUE][j] = msg[mdb.VALUE][j+1]
}
msg[mdb.KEY][j] = "action", msg[mdb.VALUE][j] = action
break
}
}
}
var option = can.core.Item(can.Option()) var option = can.core.Item(can.Option())
var table = can.page.AppendTable(can, msg, target||can.ui.content||can._output, msg.append, cb||function(value, key, index, data, list) { var _value = value var table = can.page.AppendTable(can, msg, target||can.ui.content||can._output, msg.append, cb||function(value, key, index, data, list) { var _value = value
if (msg.IsDetail()) { if (msg.IsDetail()) {
@ -744,12 +753,12 @@ Volcanos(chat.ONAPPEND, {
}) } else { can.page.Select(can, code, html.INPUT_BUTTON, function(target) { }) } else { can.page.Select(can, code, html.INPUT_BUTTON, function(target) {
target.onclick = function(event) { target.onclick = function(event) {
if (can.page.ClassList.has(can, target, "disable")) { return } can.page.ClassList.add(can, target, "disable") if (can.page.ClassList.has(can, target, "disable")) { return } can.page.ClassList.add(can, target, "disable")
can.misc.Event(event, can, function(msg) { can.Update(can.request(event, can.Option(), {_toast: target.name}), [ctx.ACTION, target.name], function(msg) { can.Update(can.request(event, can.Option(), {_toast: target.name, _cancel: function(event) {
can.page.ClassList.del(can, target, "disable")
}}), [ctx.ACTION, target.name], function(msg) {
can.page.ClassList.del(can, target, "disable") can.page.ClassList.del(can, target, "disable")
// can.page.ClassList.del(can, can._fields, "form")
// can.page.ClassList.del(can, can._fields, "output")
var sup = can._fields? can.sup: can; if (sup.onimport._process(sup, msg)) { return } var sup = can._fields? can.sup: can; if (sup.onimport._process(sup, msg)) { return }
}) }) })
} }
}) } return code.scrollBy && code.scrollBy(0, 10000), code }) } return code.scrollBy && code.scrollBy(0, 10000), code
}, },

View File

@ -412,7 +412,7 @@ body>div.input tr { margin:var(--button-margin); }
body>div.input td { padding:var(--table-padding); } body>div.input td { padding:var(--table-padding); }
body>div.input td span.must { color:red; padding:0 5px; } body>div.input td span.must { color:red; padding:0 5px; }
body>div.input td:nth-child(2) { padding:var(--table-padding) 0; } body>div.input td:nth-child(2) { padding:var(--table-padding) 0; }
body.mobile>div.input tr { display:flex; flex-direction:column; margin:var(--button-margin); } body.mobile>div.input tr:not(.hide) { display:flex; flex-direction:column; margin:var(--button-margin); }
body.mobile>div.input td { padding:0 var(--button-padding); margin:var(--button-margin); } body.mobile>div.input td { padding:0 var(--button-padding); margin:var(--button-margin); }
body.mobile>div.input td:nth-child(1) { color:gray; font-size:var(--status-font-size); padding-left:var(--button-padding); margin-bottom:0; } body.mobile>div.input td:nth-child(1) { color:gray; font-size:var(--status-font-size); padding-left:var(--button-padding); margin-bottom:0; }
body.mobile>div.input td:nth-child(2) { display:none; } body.mobile>div.input td:nth-child(2) { display:none; }
@ -513,9 +513,9 @@ textarea:hover { border:var(--box-notice); } textarea:focus { border:var(--box-n
select { border-radius:var(--button-radius); } select { border-radius:var(--button-radius); }
input { background-color:var(--input-bg-color); color:var(--input-fg-color); } input { background-color:var(--input-bg-color); color:var(--input-fg-color); }
input:not([type=button]) { border:var(--input-border); } input:not([type=button]) { border:var(--input-border); }
input:not([type=button]):hover { border:var(--box-notice); } body:not(.mobile) input:not([type=button]):hover { border:var(--box-notice); }
input:not([type=button]):focus { border:var(--box-notice); } input:not([type=button]):focus { border:var(--box-notice); }
input.disable { color:var(--disable-fg-color) !important; border:unset !important; } input.disable { border:var(--box-border) !important; background-color:var(--disable-bg-color) !important; color:var(--disable-fg-color) !important; }
input.select[type=button]:hover { border:var(--box-notice); } input.select[type=button]:hover { border:var(--box-notice); }
input.select[type=button]:focus { border:var(--box-notice); } input.select[type=button]:focus { border:var(--box-notice); }
input.select[type=button] { border:var(--input-border); padding:0 var(--button-padding); } input.select[type=button] { border:var(--input-border); padding:0 var(--button-padding); }

View File

@ -142,14 +142,16 @@ Volcanos("misc", {
var input = can.user.input(event, can, meta.feature[cmds[1]], function(args) { var input = can.user.input(event, can, meta.feature[cmds[1]], function(args) {
can.page.ClassList.add(can, input._target, html.PROCESS) can.page.ClassList.add(can, input._target, html.PROCESS)
msg.result = [] msg.result = []
can.Update(can.request(event, {_handle: ice.TRUE}, msg, can.Option()), cmds.slice(0, 2).concat(args), function(msg) { can.Update(can.request(event, can.Option(), {_handle: ice.TRUE, _cancel: function(event) {
can.page.ClassList.del(can, input._target, html.PROCESS)
}}, msg), cmds.slice(0, 2).concat(args), function(msg) {
can.page.ClassList.del(can, input._target, html.PROCESS) can.page.ClassList.del(can, input._target, html.PROCESS)
if (msg.IsErr()) { if (msg.IsErr()) {
can.onappend.style(can, "warn", can.user.toastFailure(can, msg.Result())._target) can.onappend.style(can, "warn", can.user.toastFailure(can, msg.Result())._target)
input.focus() input.focus()
} else { } else {
if (cb && cb(msg)) { return } if (cb && cb(msg)) { return }
input.cancel() input.cancel({}, can)
return true return true
} }
}); return true }); return true

View File

@ -93,7 +93,8 @@ Volcanos("page", {
} else if (item.td) { type = html.TR, item.list = item.td.map(function(text) { return can.base.isObject(text)? text: {text: [text||"", html.TD]} }) } } else if (item.td) { type = html.TR, item.list = item.td.map(function(text) { return can.base.isObject(text)? text: {text: [text||"", html.TD]} }) }
// if (type == html.SELECT) { data.title = can.user.trans(can, data.title||name) } // if (type == html.SELECT) { data.title = can.user.trans(can, data.title||name) }
if (type == html.INPUT) { if (type == html.INPUT) {
if (data.type == html.TEXT || data.type == html.PASSWORD || !data.type) { data.autocomplete = data.autocomplete||"new-password" if (data.type == html.TEXT || data.type == html.PASSWORD || !data.type) {
// data.autocomplete = data.autocomplete||"new-password"
data.placeholder = (data.placeholder||name||"").split(nfs.PT).pop(), data.title = can.user.trans(can, data.title||data.placeholder, null, html.INPUT) data.placeholder = (data.placeholder||name||"").split(nfs.PT).pop(), data.title = can.user.trans(can, data.title||data.placeholder, null, html.INPUT)
} else if (data.type == html.BUTTON) { } else if (data.type == html.BUTTON) {
// data.value = can.user.trans(can, data.value) // data.value = can.user.trans(can, data.value)
@ -486,6 +487,12 @@ Volcanos("page", {
cb && cb(themeMedia.matches? html.DARK: html.LIGHT) cb && cb(themeMedia.matches? html.DARK: html.LIGHT)
return themeMedia.matches? html.DARK: html.LIGHT return themeMedia.matches? html.DARK: html.LIGHT
}, },
appendAction: function(can, value, target) { if (!value.action) { return } target.innerHTML = value.action
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
var style = can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
target.onclick = function(event) { can.onkeymap.prevent(event), can.Update(can.request(event, value), [ctx.ACTION, target.name]) }
})
},
parseAction: function(can, value) { var action = [] parseAction: function(can, value) { var action = []
can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) { can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) {
action.push(target.name), target.name != target.value && can.user.trans(can, kit.Dict(target.name, target.value)) action.push(target.name), target.name != target.value && can.user.trans(can, kit.Dict(target.name, target.value))
@ -494,7 +501,7 @@ Volcanos("page", {
}, },
buttonStyle: function(can, name) { buttonStyle: function(can, name) {
return can.core.Value(can.onaction, ["_trans", "style", name])||(can.base.isIn(name, mdb.CREATE, mdb.INSERT, mdb.IMPORT, nfs.CLONE, cli.START, ctx.RUN, web.UPLOAD, web.CONFIRM, aaa.LOGIN, code.AUTOGEN, "sso", "add", "pull", "push", "commit", "preview", "auto-preview", ice.APP)? html.NOTICE: return can.core.Value(can.onaction, ["_trans", "style", name])||(can.base.isIn(name, mdb.CREATE, mdb.INSERT, mdb.IMPORT, nfs.CLONE, cli.START, ctx.RUN, web.UPLOAD, web.CONFIRM, aaa.LOGIN, code.AUTOGEN, "sso", "add", "pull", "push", "commit", "preview", "auto-preview", ice.APP)? html.NOTICE:
can.base.isIn(name, mdb.REMOVE, mdb.DELETE, mdb.PRUNES, mdb.PRUNE, nfs.TRASH, cli.RESTART, cli.STOP, cli.CLOSE, cli.REBOOT, web.CANCEL, code.UPGRADE, "reject", "del", "drop", "access", "kill", "prockill")? html.DANGER: "") can.base.isIn(name, mdb.REMOVE, "rename", mdb.DELETE, mdb.PRUNES, mdb.PRUNE, nfs.TRASH, cli.RESTART, cli.STOP, cli.CLOSE, cli.REBOOT, web.CANCEL, code.UPGRADE, "reject", "del", "drop", "access", "kill", "prockill")? html.DANGER: "")
}, },
exportValue: function(can, msg, target) { target = target||can._output exportValue: function(can, msg, target) { target = target||can._output
msg.OptionDefault(ice.MSG_THEME, can.getHeaderTheme()) msg.OptionDefault(ice.MSG_THEME, can.getHeaderTheme())

View File

@ -242,21 +242,41 @@ Volcanos("user", {
item.need == "must" && {text: ["*", "", "must"]}, item.need == "must" && {text: ["*", "", "must"]},
]}, {type: html.TD, list: []}, ]}, {type: html.TD, list: []},
{type: html.TD, _init: function(target) { can.onappend.input(can, item, msg.Option(item.name), target) }}, {type: html.TD, _init: function(target) { can.onappend.input(can, item, msg.Option(item.name), target) }},
]} ], onclick: function(event) {
can.page.Select(can, event.currentTarget, "input", function(target) {
target.focus()
})
}}
})}]}, html.ACTION, })}]}, html.ACTION,
], onclick: function(event) { if (!can.page.tagis(event.target, html.INPUT, html.TEXTAREA)) { can.onmotion.clearCarte(can) } }}]) ], onclick: function(event) { if (!can.page.tagis(event.target, html.INPUT, html.TEXTAREA)) { can.onmotion.clearCarte(can) } }}])
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, { var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {
_trans: {submit: msg.Option(web.SUBMIT)}, _trans: {submit: msg.Option(web.SUBMIT)},
focus: function() { can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0]) }, focus: function() {
cancel: function(event) { can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, ui._target)})), can.page.Remove(can, ui._target) }, can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0])
},
Option: function(key, value, hidden) {
var target = can.page.Select(can, ui._target, "input.args[name="+key+"]")[0]
if (!target) { return }
if (value != undefined) { target.value = target.value||value }
if (target.value && hidden) { can.onmotion.hidden(can, can.page.parentNode(can, target, html.TR)) }
return target.value
},
cancel: function(event, can, button) {
button == "cancel" && msg._cancel && msg._cancel(event)
callback("afterInputs", button)
can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, ui._target)})), can.page.Remove(can, ui._target)
},
submit: function(event, can, button) { var args = [], data = {}, err = false submit: function(event, can, button) { var args = [], data = {}, err = false
var list = can.page.Select(can, ui._target, html.OPTION_ARGS, function(item) { var list = can.page.Select(can, ui._target, html.OPTION_ARGS, function(item) {
if (item.value == "" && need[item.name] == "must") { err = true, item.focus(), can.user.toast(can, item.name+" 是必选字段, 请重新输入") } if (item.value == "" && need[item.name] == "must") { err = true, item.focus(), can.user.toast(can, item.name+" 是必选字段, 请重新输入") }
return item.name && args.push(item.name, item.value||""), data[item.name] = item.value||"" return item.name && args.push(item.name, item.value||""), data[item.name] = item.value||""
}); if (err) { return } can.onkeymap.prevent(event) }); if (err) { return } can.onkeymap.prevent(event)
var _msg = can.request(event); _msg.Option(ctx.ACTION, msg.Option(ctx.ACTION)) var _msg = can.request(event); _msg.Option(ctx.ACTION, msg.Option(ctx.ACTION)), _msg.Option("_toast", msg.Option("_toast"))
_msg.Option("_toast", msg.Option("_toast")) if (can.core.CallFunc(cb, {event: can.request(event, {_handle: ice.TRUE})._event, button: button, data: data, list: list, args: args, input: action})) {
can.core.CallFunc(cb, {event: can.request(event, {_handle: ice.TRUE})._event, button: button, data: data, list: list, args: args, input: action}) || action.cancel() callback("afterInputs", button)
} else {
action.cancel(event, can, button)
}
}, _target: ui._target, _engine: function(event, can, button) { action.submit(event, can, button) }, }, _target: ui._target, _engine: function(event, can, button) { action.submit(event, can, button) },
}); });
can.page.Select(can, action._target, "input", function(target) { can.page.Select(can, action._target, "input", function(target) {
@ -264,13 +284,13 @@ Volcanos("user", {
var onclick = target.onclick; target.onclick = function(event) { can.onengine.signal(can, "onevent", can.request(event, {_type: target.name})), onclick && onclick(event) } var onclick = target.onclick; target.onclick = function(event) { can.onengine.signal(can, "onevent", can.request(event, {_type: target.name})), onclick && onclick(event) }
}) })
title && can.page.Select(can, action._target, "input[name=submit]", function(target) { target.value = can.user.trans(can, title) }) title && can.page.Select(can, action._target, "input[name=submit]", function(target) { target.value = can.user.trans(can, title) })
if (event && event.target) { if (event && event.target) { can.onlayout.figure(event, can, ui._target)
can.onlayout.figure(event, can, ui._target)
can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, 40) can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, 40)
// can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, can.getHeaderHeight(can))
} else { } else {
can.getActionSize(function(left, top, height) { can.page.style(can, ui._target, html.LEFT, left||0, html.TOP, (height/4||0)) }) can.getActionSize(function(left, top, height) { can.page.style(can, ui._target, html.LEFT, left||0, html.TOP, (height/4||0)) })
} can.onmotion.resize(can, ui._target), can.onmotion.delay(can, function() { action.focus() }, 300) } can.onmotion.resize(can, ui._target), can.onmotion.delay(can, function() { action.focus() }, 300)
function callback(key, button) { var sub = can._fields? can: can.sub; sub.onaction && sub.onaction[key] && sub.onaction[key](event, sub, button, action) }
callback("beforeInputs")
return button === true && action.submit(event, can, html.SUBMIT), action return button === true && action.submit(event, can, html.SUBMIT), action
}, },
select: function(event, can, type, fields, cb, cbs) { select: function(event, can, type, fields, cb, cbs) {
@ -315,7 +335,6 @@ Volcanos("user", {
}), resize: html.IMG, }), resize: html.IMG,
}) }, }) },
login: function(can, _cb, _msg) { login: function(can, _cb, _msg) {
debugger
can.misc.CookieSessid(can, ""), can.misc.Cookie(can, "sessid", "") can.misc.CookieSessid(can, ""), can.misc.Cookie(can, "sessid", "")
can.page.ClassList.add(can, document.body.parentNode, aaa.LOGIN), can.onimport.theme(can) can.page.ClassList.add(can, document.body.parentNode, aaa.LOGIN), can.onimport.theme(can)
function check() { function check() {

View File

@ -143,7 +143,7 @@ Volcanos(chat.ONLAYOUT, {
Volcanos(chat.ONEXPORT, { Volcanos(chat.ONEXPORT, {
size: function(can, msg) { size: function(can, msg) {
msg.Option(html.LEFT, can._output.offsetLeft), msg.Option(html.TOP, can._output.offsetTop) msg.Option(html.LEFT, can._output.offsetLeft), msg.Option(html.TOP, can._output.offsetTop)
msg.Option(html.HEIGHT, can._output.offsetHeight), msg.Option(html.WIDTH, can._output.offsetWidth) msg.Option(html.HEIGHT, can._output.offsetHeight||window.innerHeight), msg.Option(html.WIDTH, can._output.offsetWidth||window.innerWidth)
msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y)), msg.Option(html.MARGIN_X, can.Conf(html.MARGIN_X)) msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y)), msg.Option(html.MARGIN_X, can.Conf(html.MARGIN_X))
}, },
layout: function(can) { return can._layout||can.onlayout._storage(can)||can.misc.SearchOrConf(can, html.LAYOUT)||"" }, layout: function(can) { return can._layout||can.onlayout._storage(can)||can.misc.SearchOrConf(can, html.LAYOUT)||"" },

View File

@ -53,19 +53,21 @@ Volcanos(chat.ONFIGURE, {key: {
can.layout(msg) can.layout(msg)
}, },
onfocus: function(event, can, meta, target, cbs, mod) { onfocus: function(event, can, meta, target, cbs, mod) {
can.onengine.signal(can, "onevent", can.request(event)); // can.onengine.signal(can, "onevent", can.request(event));
meta._force && mod.onclick(event, can, meta, target, cbs)
if (target._selectonly) { can.onmotion.delay(can, function() { target.blur() }) } if (target._selectonly) { can.onmotion.delay(can, function() { target.blur() }) }
meta._force && mod.onclick(event, can, meta, target, cbs)
}, },
onclick: function(event, can, meta, target, cbs) { can.onengine.signal(can, "onevent", can.request(event)); onclick: function(event, can, meta, target, cbs) {
// can.onengine.signal(can, "onevent", can.request(event));
if (target._selectonly) { can.onmotion.delay(can, function() { target.blur() }) } if (target._selectonly) { can.onmotion.delay(can, function() { target.blur() }) }
(target.value == "" || meta._force || target._selectonly) && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } (target.value == "" || meta._force || target._selectonly) && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
sub.sup = can._fields? can.sup: can sub.sup = can._fields? can.sup: can
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) 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, cb, target) { if (target._hold) { return } onblur: function(event, can, sub, cb, target) {
if (target._hold) { return }
if (target._selectonly) { return } if (target._selectonly) { return }
can.onengine.signal(can, "onevent", can.request(event, {query: can.page.getquery(can, target)+","+target.value})) // can.onengine.signal(can, "onevent", can.request(event, {query: can.page.getquery(can, target)+","+target.value}))
sub && can.onmotion.delay(can, sub.close, 300) sub && can.onmotion.delay(can, sub.close, 300)
}, },
onkeyup: function(event, can, meta, cb, target, sub, last) { if (event.key == code.TAB) { return } onkeyup: function(event, can, meta, cb, target, sub, last) { if (event.key == code.TAB) { return }

View File

@ -290,6 +290,7 @@ Volcanos(chat.ONIMPORT, {
var sup = can._stacks_root; sup._stacks = sup._stacks||{}; var sub = (sup._stacks[key]||[])[0]; if (sub) { return sub._select() } var sup = can._stacks_root; sup._stacks = sup._stacks||{}; var sub = (sup._stacks[key]||[])[0]; if (sub) { return sub._select() }
var _output = sup._target.parentNode; value.style = html.OUTPUT var _output = sup._target.parentNode; value.style = html.OUTPUT
sup.onappend.plugin(sup, value, function(sub) { sup.onappend.plugin(sup, value, function(sub) {
can.onimport.myField(can, sub)
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = sup._stacks[key] = [sub], _sub._stacks_root = sup, sub._select() } sub.onexport.output = function(_sub, msg) { _sub._stacks_current = sup._stacks[key] = [sub], _sub._stacks_root = sup, sub._select() }
sub._select = function() { can.onimport.myOption(sub) sub._select = function() { can.onimport.myOption(sub)
can.page.SelectChild(can, _output, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sub._target) }) can.page.SelectChild(can, _output, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sub._target) })
@ -298,6 +299,13 @@ Volcanos(chat.ONIMPORT, {
}, sub._select(), cb && cb(sub) }, sub._select(), cb && cb(sub)
}, _output) }, _output)
}, },
myField: function(can, sub) {
sub.onexport._output = function(_sub) {
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
can.core.Item(can.onaction, function(key, value) { _sub.onaction[key] = _sub.onaction[key]||value })
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
}
},
myStory: function(can, value) { myStory: function(can, value) {
if (!can._stacks_current) { var sup = can.sup; can._stacks_root = sup, sup._stacks = {} if (!can._stacks_current) { var sup = can.sup; can._stacks_root = sup, sup._stacks = {}
var key = [can.ConfSpace(), can.ConfIndex()].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value }))).join(",") var key = [can.ConfSpace(), can.ConfIndex()].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value }))).join(",")
@ -308,7 +316,7 @@ Volcanos(chat.ONIMPORT, {
can.page.style(can, _action, html.DISPLAY, html.NONE), sup._output.innerHTML == "" && sup.Update() can.page.style(can, _action, html.DISPLAY, html.NONE), sup._output.innerHTML == "" && sup.Update()
} }
} var plugin = can._stacks_current[0], _action = plugin._action, _output = plugin._output; current = plugin.current||{} } var plugin = can._stacks_current[0], _action = plugin._action, _output = plugin._output; current = plugin.current||{}
value.type = html.STORY, value.style = html.OUTPUT, value.height = can.ConfHeight()-html.ACTION_HEIGHT value.type = html.STORY, value.style = html.OUTPUT, value.height = can.ConfHeight()-48
can.onappend.plugin(can, value, function(sub) { can._stacks_current.push(sub) can.onappend.plugin(can, value, function(sub) { can._stacks_current.push(sub)
can.core.List(["_trans", "_style", "_icons", "_trans.input", "_trans.value"], function(key) { can.core.List(["_trans", "_style", "_icons", "_trans.input", "_trans.value"], function(key) {
var value = sub.Conf(key); value && can.core.Item(can.Conf(key), function(k, v) { value[k] = value[k]||v }) var value = sub.Conf(key); value && can.core.Item(can.Conf(key), function(k, v) { value[k] = value[k]||v })
@ -323,14 +331,12 @@ Volcanos(chat.ONIMPORT, {
sub.onimport._field = function(sub, msg, cb) { sub.onimport._field = function(sub, msg, cb) {
msg.Table(function(value) { value._goback = function() { goback(true) }, can.onimport.myStory(can, value) }) msg.Table(function(value) { value._goback = function() { goback(true) }, can.onimport.myStory(can, value) })
} }
sub.onexport._output = function(_sub) { can.onimport.myField(can, sub)
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
}
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root sub.onexport.output = function(_sub, msg) { _sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root
sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true) sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true)
sub.sub.onaction._goback = goback sub.sub.onaction._goback = goback
} can.page.style(can, sub._output, "left", "0")
}, can.page.style(can, sub._output, "left", "100")
function goback(clear) { if (value._goback) { return value._goback() } function goback(clear) { if (value._goback) { return value._goback() }
if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } } if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } }
if (sub.Option(UID)) { return sub.Option(UID, ""), sub.Update() } if (sub.Option(UID)) { return sub.Option(UID, ""), sub.Update() }
@ -385,12 +391,7 @@ Volcanos(chat.ONIMPORT, {
}) })
cb = cb|| function(event) { can.Option(UID, value.uid), can.Update() } cb = cb|| function(event) { can.Option(UID, value.uid), can.Update() }
return {view: [[html.ITEM_CARD, value._uid? "uid-"+value._uid: ""].concat(value._style||[])], list: [ return {view: [[html.ITEM_CARD, value._uid? "uid-"+value._uid: ""].concat(value._style||[])], list: [
{view: html.ACTION, _init: function(target) { if (!value.action) { return } target.innerHTML = value.action {view: html.ACTION, _init: function(target) { can.page.appendAction(can, value, target) }},
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
var style = can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
target.onclick = function(event) { can.onkeymap.prevent(event), can.Update(can.request(event, value), [ctx.ACTION, target.name]) }
})
}},
{view: html.OUTPUT, list: [ {view: html.OUTPUT, list: [
{img: can.misc.ResourceIcons(can, {img: can.misc.ResourceIcons(can,
value.icons||value.icon||value.command_icon||value.service_icon|| value.icons||value.icon||value.command_icon||value.service_icon||