forked from x/volcanos
add parse
This commit is contained in:
parent
8a8d33b6b4
commit
9870f700a2
121
frame.js
121
frame.js
@ -98,7 +98,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
|
|||||||
listen: shy("监听事件", {}, [], function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }),
|
listen: shy("监听事件", {}, [], function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }),
|
||||||
signal: shy("触发事件", function(can, name, msg) { msg = msg||can.request()
|
signal: shy("触发事件", function(can, name, msg) { msg = msg||can.request()
|
||||||
can.misc.Log(gdb.SIGNAL, name, name == chat.ONREMOTE? msg.Option("_msg"): msg)
|
can.misc.Log(gdb.SIGNAL, name, name == chat.ONREMOTE? msg.Option("_msg"): msg)
|
||||||
can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) })
|
return can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) }).length
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return }
|
Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return }
|
||||||
@ -417,6 +417,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
}}
|
}}
|
||||||
}); table && can.page.Modify(can, table, {className: chat.CONTENT})
|
}); table && can.page.Modify(can, table, {className: chat.CONTENT})
|
||||||
if (msg.append && msg.append[msg.append.length-1] == "action") { can.page.ClassList.add(can, table, "action") }
|
if (msg.append && msg.append[msg.append.length-1] == "action") { can.page.ClassList.add(can, table, "action") }
|
||||||
|
can._table = table, can.sup && (can.sup._table = table)
|
||||||
return sort && can.page.RangeTable(can, table, sort), table
|
return sort && can.page.RangeTable(can, table, sort), table
|
||||||
},
|
},
|
||||||
board: function(can, text, target) { text && text.Result && (text = text.Result()); if (!text) { return }
|
board: function(can, text, target) { text && text.Result && (text = text.Result()); if (!text) { return }
|
||||||
@ -428,124 +429,6 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
})
|
})
|
||||||
return (code.scrollBy && code.scrollBy(0, 10000)), code
|
return (code.scrollBy && code.scrollBy(0, 10000)), code
|
||||||
},
|
},
|
||||||
parse: function(can, list, target, type, data) { target = target||can._output, data = data || {}
|
|
||||||
if (!list) { return } else if (can.base.isArray(list)) {
|
|
||||||
return can.core.List(list, function(meta) { return can.onappend.parse(can, meta, target, type, data) })
|
|
||||||
|
|
||||||
} else if (can.base.isString(list)) {
|
|
||||||
var ls = can.core.Split(list, "", ":="); if (ls.length == 1) {
|
|
||||||
var meta = type? {type: type, name: ls[0]}: {type: ls[0]}
|
|
||||||
} else {
|
|
||||||
var meta = {name: ls[0]}; for (var i = 1; i < ls.length; i += 2) { switch (ls[i]) {
|
|
||||||
case ":": meta.type = ls[i+1]; break
|
|
||||||
case "=": meta.value = ls[i+1]; break
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (can.base.isObject(list)) { var meta = list }
|
|
||||||
|
|
||||||
var item = {view: meta.type}, init; switch (meta.type) {
|
|
||||||
case "head": data = {}
|
|
||||||
init = function(target) {
|
|
||||||
data.head = target
|
|
||||||
can.page.ClassList.add(can, target, "layout")
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "left":
|
|
||||||
init = function(target) {
|
|
||||||
can.page.ClassList.add(can, target, "layout")
|
|
||||||
can.core.Timer(10, function() {
|
|
||||||
var height = target.parentNode.offsetHeight
|
|
||||||
can.page.Select(can, target.parentNode, "div.layout.head", function(item) {
|
|
||||||
height -= item.offsetHeight
|
|
||||||
})
|
|
||||||
can.page.Select(can, target.parentNode, "div.layout.foot", function(item) {
|
|
||||||
height -= item.offsetHeight
|
|
||||||
})
|
|
||||||
can.page.style(can, target, html.HEIGHT, height)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "main":
|
|
||||||
init = function(target) {
|
|
||||||
data.main = target
|
|
||||||
var width = target.parentNode.offsetWidth
|
|
||||||
can.page.Select(can, target.parentNode, "div.layout.left", function(item) {
|
|
||||||
width -= item.offsetWidth+1
|
|
||||||
})
|
|
||||||
can.page.style(can, target, html.HEIGHT, height, html.WIDTH, width)
|
|
||||||
|
|
||||||
can.core.Timer(10, function() {
|
|
||||||
var height = target.parentNode.offsetHeight
|
|
||||||
can.page.Select(can, target.parentNode, "div.layout.head", function(item) {
|
|
||||||
height -= item.offsetHeight
|
|
||||||
})
|
|
||||||
can.page.Select(can, target.parentNode, "div.layout.foot", function(item) {
|
|
||||||
height -= item.offsetHeight
|
|
||||||
})
|
|
||||||
can.page.style(can, target, html.HEIGHT, height)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "foot":
|
|
||||||
init = function(target) {
|
|
||||||
can.page.ClassList.add(can, target, "layout")
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "tabs":
|
|
||||||
var height = target.offsetHeight
|
|
||||||
item.list = [{view: "name"}, {view: "page", style: {width: 240}}], item._init = function(_target, ui) {
|
|
||||||
can.core.Timer(100, function() {
|
|
||||||
var height = target.offsetHeight
|
|
||||||
can.page.style(can, _target, html.HEIGHT, height-10)
|
|
||||||
can.page.style(can, ui.page, html.HEIGHT, height-10-(meta.style? 0: ui.name.offsetHeight))
|
|
||||||
})
|
|
||||||
can.page.Append(can, ui.page, [{view: "input", list: [{type: "input", onkeyup: function(event) {
|
|
||||||
can.page.Select(can, _target, ["div.page", html.DIV_ITEM], function(item) {
|
|
||||||
can.page.ClassList.set(can, item, "hide", item.innerText.indexOf(event.target.value) == -1)
|
|
||||||
})
|
|
||||||
}}]}])
|
|
||||||
can.core.List(meta.list, function(item, index) {
|
|
||||||
can.page.Append(can, ui.name, [{view: ["item", html.DIV, item.name||item], onclick: function(event) {
|
|
||||||
can.onmotion.select(can, _target, [["div.page", "div.list"]], index)
|
|
||||||
can.onmotion.select(can, ui.name, html.DIV_ITEM, index)
|
|
||||||
ui.page.scrollTo(0, 0)
|
|
||||||
}}])
|
|
||||||
can.page.Append(can, ui.page, [{view: ["item", html.DIV, item.name], onclick: function(event) {
|
|
||||||
can.page.ClassList.neg(can, event.target.nextSibling, html.SELECT)
|
|
||||||
can.onmotion.select(can, ui.name, html.DIV_ITEM, index)
|
|
||||||
}}, {view: ["list"], _init: function(target) { can.onappend.parse(can, item.list, target, "item", data) }}])
|
|
||||||
})
|
|
||||||
can.page.Select(can, ui.name, html.DIV_ITEM)[0].click()
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "plugin":
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
|
|
||||||
item._init = item._init||function(target) { meta.list && can.onappend.parse(can, meta.list, target, type, data), can.base.isFunc(init) && init(target) }
|
|
||||||
if (can.base.isString(meta.style)) { item.className = meta.style }
|
|
||||||
if (can.base.isObject(meta.style)) { item.style = meta.style }
|
|
||||||
if (type == "item") {
|
|
||||||
can.page.Append(can, target, [{view: ["item", "div", meta.name||meta], onclick: function(event) {
|
|
||||||
switch (meta.type) {
|
|
||||||
case "plugin":
|
|
||||||
can.onappend.plugin(can, {index: meta.index}, function(sub) {
|
|
||||||
sub.ConfWidth(data.main.offsetWidth)
|
|
||||||
sub.run = function(event, cmds, cb, silent) {
|
|
||||||
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true)
|
|
||||||
}
|
|
||||||
}, data.main)
|
|
||||||
default:
|
|
||||||
meta.list && can.onmotion.toggle(can, event.target.nextSibling)
|
|
||||||
}
|
|
||||||
}}])
|
|
||||||
if (!meta.list) { return }
|
|
||||||
item.view = "list"
|
|
||||||
}
|
|
||||||
return can.page.Append(can, target, [item]).first
|
|
||||||
},
|
|
||||||
|
|
||||||
_plugin: function(can, value, meta, cb, target) {
|
_plugin: function(can, value, meta, cb, target) {
|
||||||
meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{}
|
meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{}
|
||||||
|
@ -200,12 +200,14 @@ Volcanos("page", {help: "用户界面", ClassList: {
|
|||||||
if (!msg.append||msg.append.length == 0) {return}
|
if (!msg.append||msg.append.length == 0) {return}
|
||||||
|
|
||||||
var table = can.page.Append(can, target, html.TABLE)
|
var table = can.page.Append(can, target, html.TABLE)
|
||||||
can.page.Append(can, table, [{type: html.TR, data: {dataset: {index: -1}}, list:
|
var thead = can.page.Append(can, table, "thead")
|
||||||
|
var tbody = can.page.Append(can, table, "tbody")
|
||||||
|
can.page.Append(can, thead, [{type: html.TR, data: {dataset: {index: -1}}, list:
|
||||||
can.core.List(list, function(key) {
|
can.core.List(list, function(key) {
|
||||||
return key[0] == "_"? undefined: {text: [key.trim(), html.TH]}
|
return key[0] == "_"? undefined: {text: [key.trim(), html.TH]}
|
||||||
})
|
})
|
||||||
}])
|
}])
|
||||||
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index, array) {
|
can.page.Append(can, tbody, can.core.List(msg.Table(), function(line, index, array) {
|
||||||
var _list = can.core.List(list, function(key) { if (key.indexOf("_") == 0) { return }
|
var _list = can.core.List(list, function(key) { if (key.indexOf("_") == 0) { return }
|
||||||
return cb(can.page.Color(line[key]).trim(), key, index, line, array)
|
return cb(can.page.Color(line[key]).trim(), key, index, line, array)
|
||||||
})
|
})
|
||||||
|
11
lib/user.js
11
lib/user.js
@ -204,16 +204,21 @@ Volcanos("user", {help: "用户操作", agent: {
|
|||||||
var ui = can.page.Append(can, document.body, [{view: chat.CARTE, style: {left: 0, top: 0}, onmouseleave: function(event) {
|
var ui = can.page.Append(can, document.body, [{view: chat.CARTE, style: {left: 0, top: 0}, onmouseleave: function(event) {
|
||||||
// can.page.Remove(can, ui._target)
|
// can.page.Remove(can, ui._target)
|
||||||
}, list: can.core.List(list, function(item, index) {
|
}, list: can.core.List(list, function(item, index) {
|
||||||
return can.base.isString(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item), click: function(event) {
|
return can.base.isString(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item), onclick: function(event) {
|
||||||
can.user.isMobile && can.page.Remove(can, ui._target)
|
can.user.isMobile && can.page.Remove(can, ui._target)
|
||||||
can.base.isFunc(cb) && cb(event, item, meta, index)
|
can.base.isFunc(cb) && cb(event, item, meta, index)
|
||||||
}, onmouseenter: function(event) {
|
}, onmouseenter: function(event) {
|
||||||
carte._float && can.page.Remove(can, carte._float._target)
|
carte._float && can.page.Remove(can, carte._float._target)
|
||||||
} }] }: {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) {
|
} }] }: can.base.isArray(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) {
|
||||||
var sub = can.user.carte(event, can, meta, item.slice(1), cb, carte)
|
var sub = can.user.carte(event, can, meta, item.slice(1), cb, carte)
|
||||||
carte._float && can.page.Remove(can, carte._float._target), carte._float = sub
|
carte._float && can.page.Remove(can, carte._float._target), carte._float = sub
|
||||||
can.onlayout.figure(event, can, sub._target, true)
|
can.onlayout.figure(event, can, sub._target, true)
|
||||||
} }
|
} }: {view: html.ITEM, list: [{text: can.user.trans(can, item.name), onclick: function(event) {
|
||||||
|
can.user.isMobile && can.page.Remove(can, ui._target)
|
||||||
|
can.base.isFunc(cb) && cb(event, item.name, meta, index)
|
||||||
|
}, onmouseenter: function(event) {
|
||||||
|
carte._float && can.page.Remove(can, carte._float._target)
|
||||||
|
} }] }
|
||||||
}) }] )
|
}) }] )
|
||||||
|
|
||||||
ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) }
|
ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) }
|
||||||
|
@ -33,7 +33,7 @@ table.content tr.show { background-color:red; }
|
|||||||
table.content th { background-color:#0fbd45; padding:2px 6px; }
|
table.content th { background-color:#0fbd45; padding:2px 6px; }
|
||||||
table.content td { 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.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 thead { position:sticky; top:-1px; }
|
||||||
|
|
||||||
td>input[type=button][name=create] { background-color:blue; }
|
td>input[type=button][name=create] { background-color:blue; }
|
||||||
td>input[type=button][name=remove] { background-color:red; }
|
td>input[type=button][name=remove] { background-color:red; }
|
||||||
|
114
panel/action.css
114
panel/action.css
@ -32,117 +32,3 @@ div.output.form div.item div.label {
|
|||||||
margin:5px 0px;
|
margin:5px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.head {
|
|
||||||
height:32px;
|
|
||||||
background-color:#404040;
|
|
||||||
clear:both;
|
|
||||||
}
|
|
||||||
div.left {
|
|
||||||
background-color:blue; float:left;
|
|
||||||
}
|
|
||||||
div.main {
|
|
||||||
background-color:#cccccc; height:180px; width:180px; float:left;
|
|
||||||
overflow:auto;
|
|
||||||
}
|
|
||||||
div.foot {
|
|
||||||
height:32px; clear:both;
|
|
||||||
background-color:#404040;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.left {
|
|
||||||
overflow:auto;
|
|
||||||
background-color:#323232;
|
|
||||||
}
|
|
||||||
div.left:hover {
|
|
||||||
background-color:#323232;
|
|
||||||
}
|
|
||||||
div.left div.item:hover {
|
|
||||||
background-color:#404040;
|
|
||||||
}
|
|
||||||
div.left div.item {
|
|
||||||
background-color:#323232;
|
|
||||||
}
|
|
||||||
div.tabs:hover {
|
|
||||||
background-color:#272727;
|
|
||||||
}
|
|
||||||
div.tabs div.list.select {
|
|
||||||
background-color:#323232;
|
|
||||||
}
|
|
||||||
div.tabs div.name {
|
|
||||||
float:left;
|
|
||||||
position:sticky;
|
|
||||||
top:5px;
|
|
||||||
}
|
|
||||||
div.tabs div.name div.item {
|
|
||||||
float:left;
|
|
||||||
padding:10px;
|
|
||||||
color:gray;
|
|
||||||
}
|
|
||||||
div.tabs div.name div.item.select {
|
|
||||||
background-color:#404040;
|
|
||||||
/* background-color:red; */
|
|
||||||
border-bottom:solid red 2px;
|
|
||||||
color:white;
|
|
||||||
|
|
||||||
}
|
|
||||||
div.tabs div.page {
|
|
||||||
overflow:auto;
|
|
||||||
clear:both;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.input {
|
|
||||||
position:sticky;
|
|
||||||
padding:5px;
|
|
||||||
top:0px;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.input input {
|
|
||||||
color:white;
|
|
||||||
background-color:#212121;
|
|
||||||
width:230px;
|
|
||||||
border:0;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.input input:focus {
|
|
||||||
border:0;
|
|
||||||
outline:none;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.item {
|
|
||||||
display:none; clear:both;
|
|
||||||
background-color:#404040;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.list {
|
|
||||||
clear:both;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.list {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
div.tabs div.page>div.list.select {
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
div.tabs div.page div.list {
|
|
||||||
padding-left:20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.tabs.left div.name {
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
div.tabs.left div.name div.item.select {
|
|
||||||
border-right:solid red 2px;
|
|
||||||
}
|
|
||||||
div.tabs.left div.name div.item {
|
|
||||||
float:none;
|
|
||||||
border-bottom:none;
|
|
||||||
}
|
|
||||||
div.tabs.left div.page {
|
|
||||||
float:left;
|
|
||||||
clear:none;
|
|
||||||
}
|
|
||||||
div.tabs.left div.page>div.item {
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.tabs.void div.name {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
div.tabs.void div.page>div.item {
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
|
@ -72,6 +72,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
|||||||
cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) },
|
cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) },
|
||||||
cli.SHOW, function(event) { can.onaction["展示"](event, can) },
|
cli.SHOW, function(event) { can.onaction["展示"](event, can) },
|
||||||
"加载", function(event) { can.onaction["加载"](event, can), can.user.toastSuccess(can) },
|
"加载", function(event) { can.onaction["加载"](event, can), can.user.toastSuccess(can) },
|
||||||
|
"链接", function(event) { can.user.open(can.base.Path("/chat/cmd/", can.Option(nfs.PATH), can.Option(nfs.FILE))) },
|
||||||
mdb.PLUGIN, function(event) {
|
mdb.PLUGIN, function(event) {
|
||||||
can.user.input(event, can, [ctx.INDEX, ctx.ARGS], function(event, button, data) {
|
can.user.input(event, can, [ctx.INDEX, ctx.ARGS], function(event, button, data) {
|
||||||
can.onimport.plugin(can, data, ui.output)
|
can.onimport.plugin(can, data, ui.output)
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
|
||||||
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action)
|
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)) {
|
var cbs = can.onimport[can._args["style"]]; if (can.base.isFunc(cbs)) {
|
||||||
can.page.ClassList.add(can, target, can._args["style"])
|
can.page.ClassList.add(can, target, can._args["style"])
|
||||||
return cbs(can, msg, target)
|
return cbs(can, msg, target)
|
||||||
}
|
}
|
||||||
|
can.onmotion.clear(can, target)
|
||||||
can.onappend.table(can, msg, null, target)
|
can.onappend.table(can, msg, null, target)
|
||||||
can.onappend.board(can, msg, target)
|
can.onappend.board(can, msg, target)
|
||||||
can.onmotion.story.auto(can, target)
|
can.onmotion.story.auto(can, target)
|
||||||
|
can.base.isFunc(cb) && cb(msg)
|
||||||
},
|
},
|
||||||
|
|
||||||
_process: function(can, msg) {
|
_process: function(can, msg) {
|
||||||
|
14
proto.js
14
proto.js
@ -238,6 +238,20 @@ var html = {
|
|||||||
DIV_ITEM: "div.item", DIV_FLOAT: "div.float",
|
DIV_ITEM: "div.item", DIV_FLOAT: "div.float",
|
||||||
TABS: "tabs", DIV_TABS: "div.tabs",
|
TABS: "tabs", DIV_TABS: "div.tabs",
|
||||||
HIDE: "hide", SHOW: "show",
|
HIDE: "hide", SHOW: "show",
|
||||||
|
|
||||||
|
HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot",
|
||||||
|
TABS: "tabs", MENU: "menu",
|
||||||
|
LIST: "list", ITEM: "item",
|
||||||
|
PAGE: "page",
|
||||||
|
HIDE: "hide",
|
||||||
|
LAYOUT: "layout",
|
||||||
|
PLUGIN: "plugin",
|
||||||
|
DIV_PAGE: "div.page",
|
||||||
|
DIV_LIST: "div.list",
|
||||||
|
DIV_ITEM: "div.item",
|
||||||
|
DIV_LAYOUT_HEAD: "div.layout.head",
|
||||||
|
DIV_LAYOUT_LEFT: "div.layout.left",
|
||||||
|
DIV_LAYOUT_FOOT: "div.layout.foot",
|
||||||
}
|
}
|
||||||
var lang = {
|
var lang = {
|
||||||
UNDEFINED: "undefined",
|
UNDEFINED: "undefined",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user