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

opt inner

This commit is contained in:
harveyshao 2022-04-04 09:59:50 +08:00
parent 6685ff8486
commit 0e48f88874
15 changed files with 369 additions and 102 deletions

View File

@ -1,4 +1,5 @@
Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) {
Volcanos.meta._load_time = can.base.Time()
can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[]
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb)
}
@ -48,8 +49,13 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
if (cmds[0] == ctx.ACTION && cmds[1] == ice.RUN && can.onengine.plugin.meta[cmds[2]]) {
return can.core.CallFunc(can.onengine.plugin.meta[cmds[2]], {msg: msg, cmds: cmds.slice(3), cb: cb}), true
}
if (can.onengine.plugin.meta[cmds[0]]) {
return can.core.CallFunc(can.onengine.plugin.meta[cmds[0]], {msg: msg, cmds: cmds.slice(1), cb: cb}), true
var p = can.onengine.plugin.meta[cmds[0]]; if (p) {
if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) {
return can.core.CallFunc(p.meta[cmds[1]], {msg: msg, cmds: cmds.slice(3), cb: cb}), true
} else if (p.meta && p.meta[cmds[0]]) {
return can.core.CallFunc(p.meta[cmds[0]], {msg: msg, cmds: cmds.slice(2), cb: cb}), true
}
return can.core.CallFunc(p, {msg: msg, cmds: cmds.slice(1), cb: cb}), true
}
return false
},
@ -78,14 +84,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
var type = html.TEXT; command.list = can.core.List(command.list, function(item) {
switch (typeof item) {
case lang.OBJECT: return type = item.type||type, item
case lang.STRING:
switch (item) {
case mdb.LIST:
case cli.BACK: return {type: type = html.BUTTON, name: item}
case mdb.NAME: return {type: type = html.TEXT, name: item}
case mdb.TEXT: return {type: type = html.TEXTAREA, name: item}
default: return {type: type, name: item}
}
case lang.STRING: return can.core.SplitInput(item)
}
}), arguments.callee.meta[can.core.Keys("can", name)] = command
}),
@ -195,24 +194,15 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
list = can.base.Obj(list, can.core.Value(can, [chat.ONACTION, mdb.LIST]))
var _list = []; for (var i = 0; i < list.length; i++) {
switch (list[i]) { case "": _list.push(""); break
case "page":
_list.push({type: "text", name: "limit", value: can._msg.Option("limit")})
_list.push({type: "text", name: "offend", value: can._msg.Option("offend")})
_list.push("prev", "next")
case mdb.PAGE:
_list.push({type: html.TEXT, name: mdb.LIMIT, value: can._msg.Option(mdb.LIMIT)})
_list.push({type: html.TEXT, name: mdb.OFFEND, value: can._msg.Option(mdb.OFFEND)})
_list.push(mdb.PREV, mdb.NEXT)
break
default:
if (can.base.isObject(list[i])) { _list.push(list[i]); break }
var ls = can.core.Split(list[i], "\t \n", ":=@"); if (ls.length == 1) { _list.push(list[i]) } else {
var item = {name: ls[0]}; for (var j = 1; j < ls.length; j+=2) {
switch (ls[j]) {
case ":": item.type = ls[j+1]; break
case "=": item.value = ls[j+1]; break
case "@": item.action = ls[j+1]; (function() {
item._init = function(target) { can.onappend.figure(can, item, target) }
})(); break
}
}; _list.push(item)
}
var item = can.core.SplitInput(list[i], html.BUTTON); item.action && (function() {
item._init = function(target) { can.onappend.figure(can, item, target) }
})(), item.type == html.BUTTON? _list.push(list[i]): _list.push(item)
}
}
meta = meta||can.onaction, action = action||can._action, can.onmotion.clear(can, action)
@ -220,6 +210,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.base.isString(item)? /*按键*/ {type: html.BUTTON, value: can.user.trans(can, item), onclick: function(event) {
var cb = meta[item]||meta["_engine"]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
}, onkeydown: function(event) {
if (event.key == lang.ENTER) {
var cb = meta[item]||meta["_engine"]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
}
}}: item.length > 0? /*列表*/ {type: html.SELECT, name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]
can.core.CallFunc(meta[which], [event, can, which])
@ -228,7 +223,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}}: /*其它*/ item, "", action)}), meta
},
_output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event); if (msg.RunAction(event, can, cmds)) { return }
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { can.request(event, {action: cmds[1]})
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { var msg = can.request(event, {action: cmds[1]})
if (can.base.isFunc(meta.feature[cmds[1]])) { return can.core.CallFunc(meta.feature[cmds[1]], {can: can, msg: msg, cmds: cmds.slice(2)}) }
return can.user.input(event, can, meta.feature[cmds[1]], function(ev, button, data, list, args) { var msg = can.request(event, {_handle: ice.TRUE}, can.Option())
can.Update(event, cmds.slice(0, 2).concat(args), cb||function() {
if (can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg})) { return }
@ -277,6 +273,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: table.onimport.list})
}
table._args = can.base.ParseURL(table._display)
table._trans = can.base.Copy(table._trans||{}, can.core.Value(table, "onaction._trans"))
can.core.CallFunc([table, chat.ONIMPORT, "_init"], {can: table, msg: msg, list: msg.result||msg.append||[], cb: function(msg) {
action === false || table.onappend._action(table, msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION), action)
@ -293,9 +290,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
},
tabs: function(can, list, cb, cbs, action) { action = action||can._action
tabs: function(can, list, cb, cbs, action, each) { action = action||can._action
return can.page.Append(can, action, can.core.List(list, function(meta) {
return {text: [meta.name, html.DIV, html.TABS], title: meta.text, onclick: function(event) {
can.onmotion.select(can, action, "div.tabs", event.target)
can.base.isFunc(cb) && cb(event, meta)
}, _init: function(item) { const OVER = "over"
function close(item) { var next = item.nextSibling||item.previousSibling
@ -317,6 +315,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
ondragover: function(event) { event.preventDefault(), action._drop(event, event.target) },
ondrop: function(event) { event.preventDefault(), action._drop(event, event.target) },
}), can.core.Timer(10, function() { item.click() })
can.base.isFunc(each) && each(item)
}}
})).first
},
@ -339,11 +338,16 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
node = node||{"": target}; can.core.List(list, function(item) {
item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return }
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split)
node[name] || (node[name] = can.page.Append(can, node[last], [{view: [html.ITEM, html.DIV, value+(index==array.length-1?"":split)], onclick: function(event) {
index < array.length - 1? can.onmotion.toggle(can, node[name]): can.base.isFunc(cb) && cb(event, item)
if (node[name]) { return }
var ui = can.page.Append(can, node[last], [{view: "item", list: [{view: ["switch", "div", (index==array.length-1?"":"&#8963;")]}, {view: ["name", html.DIV, value+(index==array.length-1?"":"")]}], onclick: function(event) {
index < array.length - 1? can.onmotion.toggle(can, node[name], function() {
can.page.ClassList.add(can, ui["switch"], "open")
}, function() {
can.page.ClassList.del(can, ui["switch"], "open")
}): can.base.isFunc(cb) && cb(event, item)
if (node[name].childElementCount == 2) { node[name].firstChild.click() }
}}, {view: html.LIST, style: {display: html.NONE}, _init: function(list) { item.expand && can.page.style(can, list, html.DISPLAY, html.BLOCK) }}]).last)
}}, {view: html.LIST, style: {display: html.NONE}, _init: function(list) { item.expand && can.page.style(can, list, html.DISPLAY, html.BLOCK) }}])
node[name] = ui.list
})
}); return node
},
@ -439,7 +443,15 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var p = can.onengine.plugin.meta[meta.index], res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) }
(meta.meta || meta.inputs && meta.inputs.length > 0)? /* 局部命令 */ can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target):
p? /* 前端命令 */ can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) {
sub.run = function(event, cmds, cb) { can.core.CallFunc(p, {msg: can.request(event), cmds: cmds, cb: cb}) }
sub.run = function(event, cmds, cb) {
if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) {
can.core.CallFunc(p.meta[cmds[1]], {msg: can.request(event), cmds: cmds, cb: cb})
} else if (p.meta && p.meta[cmds[0]]) {
can.core.CallFunc(p.meta[cmds[0]], {msg: can.request(event), cmds: cmds, cb: cb})
} else {
can.core.CallFunc(p, {msg: can.request(event), cmds: cmds, cb: cb})
}
}
can.base.isFunc(cbs) && cbs(sub, meta, skip)
}, target): /* 后端命令 */ can.run(can.request({}, meta)._event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) {
can.onappend._plugin(can, value, meta, cbs, target)
@ -545,7 +557,6 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
},
topic: function(can, topic) { topic && (can._topic = topic)
can.user.topic(can, can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE))
can.page.ClassList.add(can, document.body, can.user.language(can))
},
background: function(can, url, target) {
can.page.style(can, target||document.body, html.BACKGROUND, url == "" || url == "void"? "": 'url("'+url+'")')

View File

@ -172,6 +172,23 @@ Volcanos("core", {help: "数据结构",
return list
}),
SplitInput: function(item, type) { if (typeof item == lang.OBJECT) { return item }
type = type||html.TEXT; switch (item) {
case mdb.LIST: return {type: type = html.BUTTON, name: item, action: ice.AUTO}
case cli.BACK: return {type: type = html.BUTTON, name: item}
case mdb.NAME: return {type: type = html.TEXT, name: item}
case mdb.TEXT: return {type: type = html.TEXTAREA, name: item}
default: var ls = this.Split(item, " ", ":=@"), res = {type: type, name: ls[0]}; for (var i = 1; i < ls.length; i += 2) {
switch (ls[i]) {
case ":": res[mdb.TYPE] = ls[i+1]; break
case "=":
if (res[mdb.TYPE] == html.SELECT) { res["values"] = this.Split(ls[i+1]) } else { res["value"] = ls[i+1] }
break
case "@": res[ctx.ACTION] = ls[i+1]; break
}
} return res
}
},
Timer300ms: function(cb) { this.Timer(300, cb) },
Timer300: function(cb) { this.Timer(300, cb) },
Timer3s: function(cb) { this.Timer(3000, cb) },

View File

@ -7,6 +7,8 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
}
return false
},
Display: function(file) { msg.Option(ice.MSG_DISPLAY, file) },
DisplayStory: function(file) { msg.Option(ice.MSG_DISPLAY, "/plugin/story/"+file) },
OptionStatus: function() { return msg.Option(ice.MSG_STATUS) },
OptionProcess: function() { return msg.Option(ice.MSG_PROCESS) },
OptionOrSearch: function(key) { return can.misc.Search(can, key)||msg.Option(key) },
@ -74,6 +76,8 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
msg[key].push(can.base.isString(value)||can.base.isFunction(value)? value: JSON.stringify(value))
return msg
},
Status: function(obj) { msg.Option(ice.MSG_STATUS, JSON.stringify(can.core.Item(obj, function(key, value) { return {name: key, value: value} }))) },
StatusTimeCount: function(obj) { msg.append && msg.Status(can.base.Copy({"time": can.base.Time(), "count": msg.Length()+"x"+msg.append.length}, obj)) },
Echo: function(res) { msg.result = msg.result || []
for (var i = 0; i < arguments.length; i++) { msg.result.push(arguments[i]) }
return msg._hand = true, msg
@ -172,7 +176,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
var val = (new RegExp(key+"=([^;]*);?")).exec(document.cookie)
return val && val.length > 0? val[1]: ""
}),
SearchOrConf: function(can, key, def) { can.base.getValid(can.misc.Search(can, key), can.Conf(key), def) },
SearchOrConf: function(can, key, def) { return can.base.getValid(can.misc.Search(can, key), can.Conf(key), def) },
Search: shy("请求参数", function(can, key, value) { var args = {}
if (value == undefined && can.base.isString(key)) {
var ls = location.pathname.split(ice.PS); if (ls[1] == chat.SHARE) { args[chat.SHARE] = ls[2] }

View File

@ -422,5 +422,11 @@ Volcanos("page", {help: "用户界面", ClassList: {
})
})
},
insertBefore: function(can, list, before) {
var item = can.page.Append(can, before.parentNode, list).first
before.parentNode.insertBefore(item, before)
return item
},
})

View File

@ -50,7 +50,10 @@ Volcanos("user", {help: "用户操作", agent: {
title: function(text) { return text && (document.title = Volcanos.meta.args.name||text), document.title },
topic: function(can, name) {
can.user.mod.isCmd && (name += " simple")
can.Conf("display") && (name += " "+can.Conf("display"))
can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape")
can.user.language(can) && (name += " "+can.user.language(can))
can.page.Modify(can, document.body, {className: name})
},
language: function(can) { return can.misc.Search(can, "language") },
@ -269,6 +272,7 @@ Volcanos("user", {help: "用户操作", agent: {
})
var msg = can.request(event, {_handle: ice.TRUE})
can.base.isFunc(cb) && !cb(event, button, data, list, args) && action.cancel()
can.onkeymap.prevent(event)
}, _target: ui._target,
})
if (button === true) { return action.submit(event, can, "submit"), action }

View File

@ -30,11 +30,8 @@ table.content tr { background-color:#04272f45; }
table.content tr.show { background-color:red; }
table.content th { background-color:#0fbd45; padding:2px 6px; }
table.content td { padding:2px 6px; }
table.content.action td:last-child, table.content.action th:last-child {
background-color:#7dc6d7eb;
position:sticky;
right:0;
}
table.content tr:first-child { position:sticky; top:2px; }
table.content.action td:last-child, table.content.action th:last-child { background-color:#7dc6d7eb; position:sticky; right:0; }
td>input[type=button][name=create] { background-color:blue; }
td>input[type=button][name=remove] { background-color:red; }
@ -102,6 +99,7 @@ body>div.carte { background-color:#295b61; color:white; padding:4px; min-width:8
body>div.carte div.item { padding:3px 12px; }
body>div.input { background-color:#0d4142a6; padding:5px; }
body>div.input div.item { float:left; }
body>div.input tr td:first-child { text-align:center; }
body>div.input select { width:183px; margin:5px; }
body>div.input input[type=text] { width:171px; margin:5px; }
body>div.input input[name=username] { width:171px; }
@ -251,3 +249,102 @@ body.white table.content tr:hover { background-color:#4682b46b; }
body.white div.item.select, body.white div.item:hover { background-color:steelblue; }
body.white fieldset.float table { color:white; }
div.output.card div.item {
/* background-color:#48959a66; */
padding:10px; margin:10px; height:120px; float:left;
position:relative;
border:solid 1px #e7e7e7;
}
div.output.card div.item>div.title {
font-size:1.2rem; font-weight:bold;
padding:10px;
border-bottom: solid 1px #e7e7e7;
}
div.output.card div.item>div.content {
padding:10px;
}
div.output.card div.item>div.operate {
position:absolute;
bottom:10px;
}
body.simple { background-color:white; }
body.simple fieldset.Header { border-bottom:solid 1px #e7e7e7; height:60px; display:block; }
body.simple fieldset.River { border-right:solid 1px #e7e7e7; }
body.simple fieldset.River>div.output { padding:10px 10px; width:200px; }
body.simple fieldset.River>div.output div.item { color:black; padding:10px 40px; border-left:none; }
body.simple fieldset.River>div.output div.item.select { background-color:white; }
body.simple fieldset.River>div.output div.item:hover { background-color:#0152d9; color:white; }
body.simple fieldset.River>div.output div.list div.item { background-color:white; color:black; border-left:none; }
body.simple fieldset.River>div.output div.list div.item.select { background-color:#0152d9; color:white; }
body.simple fieldset.River>div.output div.list div.item:hover { background-color:#0152d9; color:white; }
body.simple fieldset.Action { background-color:white; }
body.simple fieldset.Action>div.action { background:white; padding:10px; border-bottom: solid 1px red; height:38px; width:600px; }
body.simple fieldset.Action>div.action div.tabs { padding:10px; margin:10px; }
body.simple fieldset.Action.tabs>div.output { margin-top:58px; }
body.simple fieldset.Action>div.output>fieldset.plugin { box-shadow:none; }
body.simple fieldset.Action>div.output>fieldset.plugin>legend { display:none; }
body.simple fieldset.Action>div.output>fieldset.plugin>form.option { display:none; }
body.simple fieldset.Action>div.output>fieldset.plugin>div.action { display:none; }
body.simple fieldset.Action>div.output>fieldset.plugin>div.status { display:none; }
body.simple div.output.card div.item { min-width:240px; border-radius:5px; box-shadow:2px 2px 6px 1px gray; }
body.simple div.output.card div.item:hover { background-color:white; box-shadow:5px 5px 10px 5px gray; }
body.simple div.output.card div.item>div.title { border-bottom:solid 1px #e7e7e7; }
body.white.simple div.output.card input[type=button]:hover { box-shadow:2px 2px 8px 2px gray; }
body.white.simple div.output.card input[type=button] { box-shadow:2px 2px 6px 1px gray; }
body.white.simple div.output.card input[type=button] { background-color:#0152d9; font-size:0.8rem; font-weight:100; padding:5px 10px; border:none; border-radius:5px; }
body.white.simple>div.carte { background-color:white; color:black; border:solid 1px #e7e7e7; }
body.white.simple>div.carte div.item { font-size:1rem; }
body.white.simple>div.carte div.item:hover { background-color:#0152d9; color:white; }
body.white.simple input[type=button] { background-color:#0152d9; border:none; border-radius:5px; height:31px; box-shadow:2px 2px 6px 1px gray; }
body.white.simple fieldset.panel.cmd>div.output>fieldset.plugin>legend { background-color:white; color:black; border-radius:0px; }
div.switch { color:#0d1bc2; width:12px; float:left; transform: rotate(90deg) translate(2px, 0px); }
div.switch.open { transform: rotate(180deg) translate(-4px, 1px); }
body fieldset.inner>div.output td.content>div.tabs { display:none; }
body fieldset.inner>div.output td.content>div.path { display:none; }
body.simple fieldset.inner>div.output td.content>div.tabs { background:#546E7A; padding:0px; height:38px; overflow:auto; display:block; }
body.simple fieldset.inner>div.output td.content>div.tabs div.tabs { background:#B0BEC5; color:white; font-size:1rem; padding:10px; float:left; }
body.simple fieldset.inner>div.output td.content>div.tabs div.tabs.select { background:#455A64; box-shadow:0px 0px 5px 1px grey; }
body.simple fieldset.inner>div.output td.content>div.path {
background:#455A64; color:white; padding:4px 10px;
margin-bottom:4px; box-shadow:0px 0px 5px 1px #90A4AE;
clear:both; display:block;
}
body.simple fieldset.inner>div.output td.project div.project { width:240px; }
body.simple fieldset.inner>div.output td.project div.project div.kind { color: white; font-size: 1.2rem; font-family: monospace; height:18px; }
body.simple fieldset.inner>div.output td.project div.project div.kind:first-child { position:sticky; top:0 }
body.simple fieldset.inner>div.output div.content { background-color:#263238; font-size:16px; }
body.simple fieldset.inner>div.output div.toggle { display:none; }
body.white.simple fieldset.inner>div.output div.project div.action div.item { float:left; width:auto; padding:unset; }
body.white.simple fieldset.inner>div.output div.project { background:lightyellow; }
body.white.simple fieldset.inner>div.output div.project div.item { color:black; font-size:16px; width:-webkit-fill-available; }
body.white.simple fieldset.inner>div.output div.project div.item:hover { background:#e3e6f1; }
body.white.simple fieldset.inner>div.output div.content { background-color:white; font-size:16px; }
body.white.simple fieldset.inner>div.output div.content tr.select { background-color:white; }
body.white.simple fieldset.inner>div.output div.content tr.select td.line { background-color:white; color:black; border:none; }
body.white.simple fieldset.inner>div.output div.content tr.select td.text { border:solid 1px #e7e7e7; }
body.white.simple fieldset.inner>div.output div.content td.line { background-color:white; color:#237893; padding-top:4px; border-right:none; }
body.white.simple fieldset.inner>div.output div.content td.text { color:black; padding-top:2px; border:solid 1px white; }
body.white.simple fieldset.inner>div.output div.content td.text span.string { color:#a31515; }
body.white.simple fieldset.inner>div.output div.content td.text span.function { color:#795e26; }
body.white.simple fieldset.inner>div.output div.content td.text span.keyword { color:blue; }
body.white.simple td.content>div.content { background: white; box-shadow:0px 0px 5px 1px grey; }
body.white.simple div.status { color:black; }
body.white fieldset.inner>div.output td.content>div.tabs { background:#f3f3f3; }
body.white fieldset.inner>div.output td.content>div.tabs div.tabs { background:#ececec; color:black; font-size:1rem; padding:10px; float:left; }
body.white fieldset.inner>div.output td.content>div.tabs div.tabs.select { background: white; box-shadow:0px 0px 5px 1px grey; }
body.white fieldset.inner>div.output td.content>div.path { background:white; color:black; box-shadow:0px 0px 5px 1px grey; }
body.white.simple fieldset.plugin div.output.json div.item span { color:black; }
body.white.simple fieldset.plugin div.output.json div.item span.key { color:blue; }
body.simple fieldset.plugin div.output.json div.item span.string { color:magenta; }

View File

@ -19,6 +19,7 @@ Volcanos({name: "chat", panels: [
{name: "vimer", help: "编辑器", index: "web.code.vimer"},
{name: "repos", help: "代码库", index: "web.code.git.status"},
{name: "plan", help: "任务表", index: "web.team.plan"},
{name: "todo", help: "待办项", index: "web.team.todo"},
{name: "ctx", help: "上下文", index: "web.wiki.word"},
]},
}},

View File

@ -1,5 +1,4 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) {
can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout||"auto", true)
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) {
item.height = can.Conf(html.HEIGHT)-can.Conf(html.MARGIN_Y)
@ -10,7 +9,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
can.onappend.plugin(can, item, function(sub, meta, skip) {
can.onimport._plugin(can, river, storm, sub, meta), skip || next()
})
}, function() { can.onimport._menu(can, msg), can.onkeymap._init(can) })
}, function() {
can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout||"auto", true)
can.onimport._menu(can, msg), can.onkeymap._init(can)
})
},
_plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta
sub.run = function(event, cmds, cb) { var msg = sub.request(event)
@ -98,14 +100,30 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, t
}}])
}
can.onengine.plugin(can, "cookie", shy("提示", {}, ["text", "list", "back"], function(msg, cmds) {
can.core.Item(can.misc.Cookie(can), function(key, value) {
msg.Push("key", key)
msg.Push("value", value)
})
}))
can.onengine.plugin(can, "alert", shy("提示", {}, ["text", "list", "back"], function(msg, cmds) {
can.user.alert(cmds[0])
}))
can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) {
msg.Echo(JSON.stringify(can))
msg.Echo("hello world")
}))
can.onengine.plugin(can, "log", shy("日志", {}, ["text", "list", "back"], function(msg, cmds) {
console.log(cmds[0])
}))
can.onengine.plugin(can, "nfs.save", shy("保存文件", {}, ["file=hi.txt", "text:textarea='hello world'", "save:button"], function(msg, cmds, cb) {
can.misc.runAction(can, msg, cmds, cb, kit.Dict(
"save", function(cmds) { can.user.downloads(can, cmds[1], cmds[0]) }
))
}))
can.onengine.plugin(can, "pie", shy("比例图", {}, ["list", "back"], function(msg, cmds) {
msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js")
msg.DisplayStory("pie.js")
msg.Push("value", 200)
msg.Push("value", 300)
msg.Push("value", 400)

View File

@ -1,15 +1,30 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNICK))
can.onengine.plugin(can, "topic", shy("主题", {
"demo": function(can, msg, cmds) { can.onlayout.topic(can, cmds[0]) },
}, ["topic:select=white,black", "run:button", "demo:button"], function(msg, cmds) {
can.onlayout.topic(can, cmds[0])
}))
can.onlayout.topic(can, can.Conf("topic"))
if (can.user.mod.isCmd) {
can.onmotion.hidden(can, can._fields)
can.page.ClassList.add(can, document.body, "simple")
}
can.onmotion.clear(can)
can.onimport._agent(can, msg, target)
can.onimport._grant(can, msg, target)
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._avatar(can, msg, target)
can.onimport._menus(can, msg, target)
if (can.Conf("display") != "simple") {
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._avatar(can, msg, target)
can.onimport._menus(can, msg, target)
}
can.base.isFunc(cb) && cb(msg)
},
_agent: function(can, msg, target) {
@ -61,7 +76,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}}] }])
can.user.isMobile && can.page.Modify(can, ui, {style: {float: html.RIGHT}})
},
_background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return }
_background: function(can, msg) {
if (can.Conf("background") == "_") { return }
if (can.user.isExtension || can.user.isLocalFile) { return }
msg.Option(aaa.BACKGROUND) && can.onlayout.background(can, "/share/local/background", document.body)
},
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return }

View File

@ -6,18 +6,22 @@ fieldset.inner>div.action>div.tabs:hover { background-color:#013b675c; }
fieldset.inner>div.action>div.tabs.select { background-color:#013b675c; border-bottom:solid 2px #7999b2; font-size:1rem; height:19px; }
fieldset.inner>div.output { color:white; }
fieldset.inner>div.output div.content { color:white; font-size:1.2rem; font-family:monospace; position:relative; }
fieldset.inner>div.output td.project div.project { width:180px; }
fieldset.inner>div.output div.project div.kind { background-color:cornflowerblue; color:black; text-align:center; padding:10px; clear:both; }
fieldset.inner>div.output div.project div.item div.name { padding:0 16px; }
fieldset.inner>div.output div.content { color:white; font-size:1.1rem; font-family:monospace; position:relative; }
fieldset.inner>div.output div.content tr.select { background-color:#0000ff6b; }
fieldset.inner>div.output div.content tr.select td.line { background-color:blue; border:solid 1px red; border-right:solid 2px red; }
fieldset.inner>div.output div.content td.line:hover { background-color:green; }
fieldset.inner>div.output div.content td.line { text-align:right; padding:0 6px; border-right:solid 2px red; }
fieldset.inner>div.output div.content td.text { text-align:left; white-space:pre; padding-left:10px; height:20px; }
fieldset.inner>div.output div.content td.line { position:sticky; left:0; text-align:right; padding:0 6px; border-right:solid 2px red; }
fieldset.inner>div.output div.content td.text { text-align:left; white-space:pre; padding-left:10px; cursor:text; }
fieldset.inner>div.output div.content td.text span.comment { background-color:blue; color:cyan; }
fieldset.inner>div.output div.content td.text span.keyword { color:yellow; font-weight:bold; }
fieldset.inner>div.output div.content td.text span.datatype { color:lightgreen; font-weight:bold; }
fieldset.inner>div.output div.content td.text span.function { color:cyan; font-weight:bold; }
fieldset.inner>div.output div.content td.text span.constant { color:magenta; }
fieldset.inner>div.output div.content td.text span.string { color:magenta; }
fieldset.inner>div.output div.content legend { margin-right:4px; height:30px; float:left; }
fieldset.inner>div.output div.profile>div.output>fieldset>legend { padding:0.1rem; float:left; }
fieldset.inner>div.output div.display { border:solid 1px greenyellow; }

View File

@ -1,7 +1,27 @@
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target) {
can.onengine.plugin(can, "can.code.inner.plugin", shy("插件", {}, [{type: "button", name: "list", action: "auto"}, "back"], function(msg, cmds) {
can.onengine.plugin(can, "can.code.inner.plugin", shy("插件", {}, [ice.LIST, ice.BACK], function(msg, cmds) {
console.log("what")
}))
can.onengine.plugin(can, "can.code.inner.keymap", shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(msg, cmds) {
can.core.Item(can.onkeymap._mode, function(mode, value) {
(!cmds[0] || cmds[0] == mode) && can.core.Item(value, function(key, func) {
if (cmds[0] == mode && cmds[1] == key) {
msg.Push("key", "mode")
msg.Push("value", mode)
msg.Push("key", "key")
msg.Push("value", key)
msg.Push("key", "help")
msg.Push("value", func.help)
msg.Push("key", "func")
msg.Push("value", func.toString())
} else if (!cmds[0] || !cmds[1]) {
func.help && msg.Push(kit.Dict("mode", mode, "key", key, "help", func.help))
}
})
}), msg.StatusTimeCount()
}))
can.onengine.listen(can, "orientationchange", function(event) {
if (can.user.mod.isCmd) { can.ConfHeight(window.innerHeight), can.ConfWidth(window.innerWidth) }
can.user.toast(can, can.ConfHeight()+"")
@ -10,13 +30,17 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0])
var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0])
can.tabview = can.tabview||{}, can.tabview[can.onexport.keys(can)] = msg
// can.tabview = can.tabview||{}, can.tabview[can.onexport.keys(can)] = msg
can.tabview = can.tabview||{}
can.history = can.history||[], can.toolkit = {}, can.extentions = {}, can.profile_size = {}
can.onmotion.clear(can), can.onlayout.profile(can)
can.onimport._project(can, can.ui.project)
can.onimport._profile(can, can.ui.profile)
can.onimport._display(can, can.ui.display)
can.ui._tabs = can.page.insertBefore(can, [{view: "tabs"}], can.ui.content)
can.ui._path = can.page.insertBefore(can, [{view: "path"}], can.ui.content)
can.base.isFunc(cb) && cb(msg)
can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE))
@ -25,7 +49,8 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
can.onmotion.delay(can, function() {
can.core.Next(files.slice(1), function(file, next) {
can.onimport.tabview(can, can.Option(nfs.PATH), file, can.Option(nfs.LINE), next)
}, function() { can.onimport.tabview(can, paths[0], files[0]) })
// }, function() { can.onimport.tabview(can, paths[0], files[0]) })
})
})
})
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project)
@ -97,9 +122,35 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
},
project: function(can, path, cb) { can.onmotion.clear(can, can.ui.project)
// can.onappend._action(can, ["执行", "预览", "保存"], can.page.Append(can, can.ui.project, [{view: "action"}]).first, {
// "执行": function(event) { can.onaction["执行"](event, can) },
// "预览": function(event) { can.onaction["展示"](event, can) },
// "保存": function(event) { can.onaction["保存"](event, can) },
// })
// can.page.Append(can, can.ui.project, [{view: "item", list: [{type: "input", data: {type: "text"}, onkeyup: function(event) {
// can.page.Select(can, can.ui.project, "div.item", function(item) {
// if (item.innerText.indexOf(event.target.value) == -1) {
// can.page.ClassList.add(can, item, "hide")
// } else {
// can.page.ClassList.del(can, item, "hide")
// }
// })
// }} ]}, ])
var project = can.page.Append(can, can.ui.project, [
{view: "kind", inner: "projects", onclick: function(event) {
can.onmotion.toggle(can, event.target.nextSibling)
}}, {view: "projects"},
{view: "kind", inner: "icebergs", onclick: function(event) {
can.onmotion.toggle(can, event.target.nextSibling)
}}, {view: "icebergs"},
{view: "kind", inner: "volcanos", onclick: function(event) {
can.onmotion.toggle(can, event.target.nextSibling)
}}, {view: "volcanos"},
])
can.core.Next(path, function(path, next, index, array) {
var list = can.ui.project; if (array.length > 1) {
var ui = can.page.Append(can, can.ui.project, [{view: [html.ITEM, html.DIV, path], onclick: function(event) {
var list = project.projects; if (array.length > 1) {
var ui = can.page.Append(can, project.projects, [{view: [html.ITEM, html.DIV, path], onclick: function(event) {
can.onmotion.toggle(can, ui.list)
}}, {view: html.LIST}]); list = ui.list
if (index > 0) { ui.item.click() }
@ -111,6 +162,16 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
}, list), can.onimport.layout(can), can.Status("文件数", msg.Length()), next()
}, true)
}, function() { can.base.isFunc(cb) && cb() })
can.run(can.request({}, {fields: "index"})._event, [ctx.ACTION, ctx.COMMAND, "search", "command"], function(msg) {
can.onappend.tree(can, msg.Table(), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), item.index, ctx.INDEX)
}, project.icebergs)
})
can.onappend.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return {index: can.base.trimPrefix(key, "can.")} }), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), "can."+item.index, ctx.INDEX)
}, project.volcanos)
},
tabview: function(can, path, file, line, cb, skip, skip2) { var key = can.onexport.keys(can, file, path)
if (!skip && can.tabview[key]) { can.user.mod.isCmd && can.user.title(path+file)
@ -121,9 +182,12 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
function show(msg) { can.tabview[key] = msg
var skip2 = skip
msg._tab = can.onappend.tabs(can, [{name: file.split(ice.PS).pop(), text: file}], function(event, meta) {
msg._tab = can.onappend.tabs(can, [{name: file.split(msg.Option(nfs.LINE) == ctx.INDEX? ice.PT: ice.PS).pop(), text: file}], function(event, meta) {
can.onimport.tabview(can, path, file, "", cb, false, skip2), cb = null, skip2 = false
}, function(item) { delete(can.tabview[key]) })
}, function(item) { delete(can.tabview[key]) }, can.ui._tabs, function(item) {
can.page.Modify(can, item, {onmouseenter: function(event) {
}})
})
}
can.Option({path: path, file: file, line: line||1})
@ -189,33 +253,29 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
}, target)
},
layout: function(can) {
var height = can.ConfHeight()-(can.user.isMobile && can.user.mod.isCmd? (can.user.isLandscape()? 14: 54): 0)-(can.user.isWindows? 20: 0),
width = can.ConfWidth()-(can.user.isWindows && !can.user.mod.isCmd? 20: 0)+(can.user.isMobile && can.user.mod.isCmd && can.user.isLandscape()? 16: 0)
if (!height || height > window.innerHeight) { height = window.innerHeight - 200 }
if (can.user.isMobile && can.user.isLandscape() && height < 200) { height = 200 }
var width = can.ConfWidth()+(can.user.isMobile && can.user.mod.isCmd && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.user.mod.isCmd? 20: 0)
can.page.styleWidth(can, can.ui.profile_output, can.profile_size[can.onexport.keys(can)]||(width-can.ui.project.offsetWidth)/2)
can.page.styleWidth(can, can.ui.content, width-can.ui.project.offsetWidth-can.ui.profile.offsetWidth)
can.page.styleWidth(can, can.ui.display, width-can.ui.project.offsetWidth)
if (!height) { return }
can.page.style(can, can.ui.content, can.user.mod.isCmd? html.HEIGHT: html.MAX_HEIGHT, height)
if (can.ui.project.style.display != html.NONE) {
if (!can.user.mod.isCmd && can.ui.display.style.display != html.NONE) {
can.page.styleHeight(can, can.ui.project, can.ui.content.offsetHeight+can.ui.display.offsetHeight+html.ACTION_HEIGHT)
var height = can.ConfHeight()-(can.user.isMobile && can.user.mod.isCmd? (can.user.isLandscape()? 14: 54): 0)-(can.user.isWindows? 20: 0)
if (!height || height > window.innerHeight) { height = window.innerHeight - 200 }
if (can.user.isMobile && can.user.isLandscape() && height < 200) { height = 200 }
var rest = can.ui.display.offsetHeight+can.ui._path.offsetHeight+can.ui._tabs.offsetHeight+5
if (can.user.mod.isCmd) { can.page.styleHeight(can, can.ui.project, height+2*html.ACTION_HEIGHT)
can.page.styleHeight(can, can.ui.content, (can.ui.project.offsetHeight||height)-rest)
can.page.styleHeight(can, can.ui.profile_output, can.ui.project.offsetHeight-html.ACTION_HEIGHT-2)
} else {
can.page.style(can, can.ui.content, can.user.mod.isCmd? html.HEIGHT: html.MAX_HEIGHT, height)
can.page.styleHeight(can, can.ui.project, can.ui.content.offsetHeight+rest)
if (can.page.ClassList.has(can, can._fields, "full")) {
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight)
} else {
can.page.styleHeight(can, can.ui.project, can.ui.content.offsetHeight)
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight-html.ACTION_HEIGHT-2)
}
}
if (can.user.mod.isCmd) {
can.page.styleHeight(can, can.ui.content, (can.ui.project.offsetHeight||height)-can.ui.display.offsetHeight)
}
if (can.page.ClassList.has(can, can._fields, "full")) {
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight)
} else {
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight-html.ACTION_HEIGHT-2)
}
can.page.Select(can, can.ui.profile_output, html.IFRAME, function(item) {
can.page.style(can, item,
html.HEIGHT, can.ui.profile_output.offsetHeight-4,
@ -239,6 +299,12 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
},
}, [""])
Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg, cb, skip) {
if (msg.Option(ctx.INDEX)) {
can.ui._path.innerText = msg.Option(nfs.FILE)
} else {
can.ui._path.innerText = can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE))
}
if (can.onmotion.cache(can, function(cache_data) {
can.file && (cache_data[can.file] = {current: can.current, max: can.max,
profile_display: can.ui.profile.style.display, display_display: can.ui.display.style.display,
@ -250,6 +316,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
can.page.Modify(can, can.ui.profile, {style: {display: p? p.profile_display: html.NONE}})
can.page.Modify(can, can.ui.display, {style: {display: p? p.display_display: html.NONE}})
can.onmotion.select(can, can._action, html.DIV_TABS, msg._tab)
can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab)
can.onmotion.delay(can, function() { can.onimport.layout(can)
msg.Option(ctx.INDEX) && can.onmotion.focus(can, can.page.Select(can, can.ui.content, html.OPTION_ARGS)[0])
})
@ -260,6 +327,9 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
if (msg.Option(ctx.INDEX)) {
can.onimport.plugin(can, {index: msg.Option(ctx.INDEX)}, can.ui.content, function(sub) {
can.onimport.layout(can)
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ui.content.offsetWidth))
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT))
can.onmotion.delay(can, function() {
can.onmotion.focus(can, can.page.Select(can, can.ui.content, html.OPTION_ARGS)[0])
}), can.base.isFunc(cb) && cb()
@ -276,6 +346,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
p && p.render && can.onaction["展示"]({}, can)
p && p.engine && can.onaction["执行"]({}, can)
}
can.onimport.layout(can)
if (!can.page.ClassList.has(can, can._fields, chat.STORY) && !can.user.mod.isCmd) {
can.page.style(can, can.ui.project, html.MIN_HEIGHT, can.ConfHeight()-200)
can.page.style(can, can.ui.content, html.MIN_HEIGHT, can.ConfHeight()-200)
@ -323,21 +394,20 @@ Volcanos("onkeymap", {help: "导入数据", _init: function(can, msg, cb, target
_insert: function(event, can) {},
_mode: {
plugin: {
Escape: function(event, can) { can.actions(event, "清屏") },
g: function(event, can) { can.actions(event, "搜索") },
f: function(event, can) { can.actions(event, "打开") },
t: function(event, can) { can.actions(event, "添加") },
p: function(event, can) { can.actions(event, "插件") },
e: function(event, can) { can.actions(event, "扩展") },
Escape: shy("清屏", function(event, can) { can.actions(event, "清屏") }),
g: shy("搜索", function(event, can) { can.actions(event, "搜索") }),
f: shy("打开文件", function(event, can) { can.actions(event, "打开") }),
t: shy("添加命令", function(event, can) { can.actions(event, "添加") }),
p: shy("添加插件", function(event, can) { can.actions(event, "插件") }),
e: shy("添加扩展", function(event, can) { can.actions(event, "扩展") }),
m: function(event, can) { can.actions(event, "autogen") },
c: function(event, can) { can.actions(event, "compile") },
w: function(event, can) { can.actions(event, "website") },
r: function(event, can) { can.actions(event, "执行") },
v: function(event, can) { can.actions(event, "展示") },
// s: function(event, can) { can.actions(event, "保存") },
a: function(event, can) { can.actions(event, "全屏") },
r: shy("执行命令", function(event, can) { can.actions(event, "执行") }),
v: shy("展示", function(event, can) { can.actions(event, "展示") }),
a: shy("全屏", function(event, can) { can.actions(event, "全屏") }),
j: function(event, can) { can.current.scroll(1) },
k: function(event, can) { can.current.scroll(-1) },

View File

@ -1,7 +1,7 @@
fieldset.vimer>div.output input.current {
background-color:#00000000; color:#00000000; font-size:1em; font-family:monospace;
padding:0; padding-left:9px; margin:0; margin-top:-2px; position:absolute; left:0;
width:-webkit-fill-available;
padding:0; padding-left:11px; border:none; outline:none; margin:0; margin-top:-1px;
height:22px; position:absolute;
}
fieldset.vimer>div.output input.current.insert { caret-color:yellow; }
fieldset.vimer>div.output input.current.insert { caret-color:black; }
fieldset.vimer>div.output input.current.normal { caret-color:blue; }

View File

@ -18,12 +18,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
_input: function(can) {
can.ui.current = can.page.Append(can, can.ui.content.parentNode, [
{view: ["current", html.INPUT], onkeydown: function(event) { if (event.metaKey) { return }
{view: ["current", html.INPUT], spellcheck: false, onkeydown: function(event) { if (event.metaKey) { return }
can.misc.Debug("key", event.key)
can._keylist = can.onkeymap._parse(event, can, can.mode+(event.ctrlKey? "_ctrl": ""), can._keylist, can.ui.current)
can.mode == "insert" && can.core.Timer(10, function() { can.current.text(can.ui.current.value) })
can.mode == "normal" && can.Status("按键", can._keylist.join(""))
can.mode == "normal" && can.onkeymap.prevent(event)
}, onfocus: function(event) {
can.page.styleWidth(can, can.ui.current, can.ui.content.style.width)
}, onclick: function(event) { can.onkeymap._insert(event, can) },
ondblclick: function(event) { var target = event.target
can.onaction.searchLine(event, can, target.value.slice(target.selectionStart, target.selectionEnd))

View File

@ -1,16 +1,31 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.onmotion.clear(can, target)
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action)
can.onmotion.clear(can, target), can.base.isFunc(cb) && cb(msg)
var cbs = can.onimport[can._args["style"]]; if (can.base.isFunc(cbs)) {
can.page.ClassList.add(can, target, can._args["style"])
return cbs(can, msg, target)
}
can.onappend.table(can, msg, null, target)
can.onappend.board(can, msg, target)
can.onmotion.story.auto(can)
can.base.isFunc(cb) && cb(msg)
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action)
can.onmotion.story.auto(can, target)
},
_process: function(can, msg) {
msg.Option(ice.MSG_TOAST) && can.user.toast(can, msg.Option(ice.MSG_TOAST))
return can.core.CallFunc([can.onimport, msg.Option(ice.MSG_PROCESS)], [can, msg])
},
card: function(can, msg, target) {
can.page.Append(can, target, msg.Table(function(value) {
return {view: "item", list: [
{view: ["title", "div", value.name]},
{view: ["content", "div", value.text]},
{view: "operate", inner: value.action, onclick: function(event) {
can.request(event, value)
can.run(event, [ctx.ACTION, event.target.name])
}},
]}
}))
},
})
Volcanos("onaction", {help: "控件交互", list: []})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -13,9 +13,9 @@ var ice = {
OK: "ok", TRUE: "true", FALSE: "false", SUCCESS: "success", FAILURE: "failure", PROCESS: "process",
AUTO: "auto", HELP: "help", HTTP: "http",
VIEW: "view", MODE: "mode", SHIP: "ship",
COPY: "copy", SHOW: "show", HIDE: "hide",
AUTO: "auto", LIST: "list", BACK: "back", EXEC: "exec",
SHOW: "show", HIDE: "hide", HELP: "help", HTTP: "http",
VIEW: "view", MODE: "mode", SHIP: "ship", COPY: "copy",
MSG_DETAIL: "detail",
MSG_OPTION: "option",
@ -92,7 +92,8 @@ var mdb = {
UPLOAD: "upload",
SEARCH: "search", ENGINE: "engine", RENDER: "render", PLUGIN: "plugin",
NEXT: "next", PREV: "prev", PAGE: "page", MAIN: "main",
PAGE: "page", NEXT: "next", PREV: "prev", LIMIT: "limit", OFFEND: "offend",
MAIN: "main",
FOREACH: "*", RANDOMS: "%",
}