1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
shaoying 2021-01-10 15:19:37 +08:00
parent 22afd972d2
commit 53d933332a
13 changed files with 158 additions and 77 deletions

View File

@ -3,7 +3,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
can.core.Next(list, function(item, next) { item.type = "pane"
can.onappend._init(can, item, item.list, function(pane) {
pane.Status = pane.Status || function(key, value) { pane.run({}, ["search", "Footer.onimport."+key, value]) }
pane.onaction && pane.onappend._action(pane, pane._action, item.action||pane.onaction.list)
pane.onaction && pane.onappend._action(pane, item.action||pane.onaction.list)
pane.run = function(event, cmds, cb, silent) { var msg = pane.request(event); cmds = cmds || []
return (can.onengine[cmds[0]]||can.onengine[meta.main.engine]||can.onengine.remote)(event, can, msg, pane, cmds, cb)
@ -162,7 +162,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
},
})
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) {
meta.name = meta.name.split(" ")[0]
meta.name = meta.name || "", meta.name = meta.name.split(" ")[0]
field = field || can.onappend.field(can, target, meta.type, meta).first
var legend = can.page.Select(can, field, "legend")[0]
var option = can.page.Select(can, field, "form.option")[0]
@ -195,8 +195,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
Status: function(key, value) {
if (typeof key == "object") { return sub.core.Item(key, sub.Status), key }
sub.page.Select(sub, status, "div."+key+">span", function(item) {
value == undefined? (value = item.innerHTML): (item.innerHTML = value)
}); return value
return value == undefined? (value = item.innerHTML): (item.innerHTML = value)
}).length == 0 && value != undefined && sub.page.Append(sub, status, [{view: "item "+key, list: [
{text: [key, "label"]}, {text: [": ", "label"]}, {text: [value+"", "span", key]},
]}]); return value
},
Clone: function() {
meta.args = sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
@ -246,17 +248,17 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}); return can._inputs[item.name] = input
}; can.core.Next(can.base.Obj(meta.inputs, []), add)
},
_action: function(can, action, list) {
_action: function(can, list, action, meta) { action = action || can._action, meta = meta || can.onaction
can.onmotion.clear(can, action), can.core.List(list, function(item) {
item === ""? /*空白*/ can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? /*按键*/ can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
var cb = can.onaction[item] || can.onaction["_engine"] || can.onkeymap && can.onkeymap._remote
var cb = meta[item] || meta["_engine"] || can.onkeymap && can.onkeymap._remote
typeof cb == "function"? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true)
}}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", name: item[0], values: item.slice(1), title: item[0], onchange: function(event) {
var which = item[event.target.selectedIndex+1]
var cb = can.onaction[which]
var cb = meta[which]
typeof cb == "function" && cb(event, can, which)
var cb = can.onaction[item[0]]
var cb = meta[item[0]]
typeof cb == "function" && cb(event, can, item[0], which)
}}): item.input? /*文本*/ can.page.Append(can, action, [{view: "item", list: [{type: "input", name: item.input[0], onkeydown: function(event) {
item.input[1](event, can)
@ -269,7 +271,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
item.name && item.value && msg.Option(item.name, item.value)
})
can.run(event, cmds||[], function(msg) {
return can.run(event, cmds||[], function(msg) {
if (can.onimport._process(can, msg, cmds, cb)) { return }
typeof cb == "function" && cb(msg)
if (silent) { return }
@ -290,9 +292,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}, table._msg = msg
msg && table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
table.onaction && table.onappend._action(table, table._action, msg._action||meta._action||table.onaction.list)
table.onaction && table.onappend._action(table, msg._action||meta._action||table.onaction.list, table._action)
table.ondetail && table.onappend._detail(table, table._output, msg._detail||meta._detail||table.ondetail.list)
table.onexport && table.onappend._status(table, table._status, msg._export||meta._export||table.onexport.list)
table.onexport && table.onappend._status(table, msg._export||meta._export||table.onexport.list, table._status)
}, can._output)
}); can._outputs.push(output)
}, silent)
@ -304,7 +306,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
})
},
_status: function(can, status, list) {
_status: function(can, list, status) { status = status || can._status
can.onmotion.clear(can, status), can.core.List(list, function(item) {
can.page.Append(can, status, [{view: "item "+item, title: item, list: [
{text: [item, "label"]}, {text: [": ", "label"]}, {text: ["", "span"]},
@ -336,7 +338,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
})
},
field: function(can, target, type, item) {
field: function(can, target, type, item) { type = type || "input", item = item || {}
return can.page.Append(can, target, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [
item.pos? undefined: {text: [(item.nick||item.name||"").split(" ")[0]+"("+(item.help||"").split(" ")[0]+")", "legend"]},
{view: ["option", "form"]}, {view: ["action"]}, {view: ["output"]}, {view: ["status"]},
@ -440,6 +442,32 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
topic: function(can, topic) { topic && (can._topic = topic)
can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, "pod")||can.base.isNight())? "black": "white"))
},
profile: function(can, target) {
can.ui = can.page.Append(can, target, [{type: "table", list: [{type: "tr", list: [
{type: "td", list: [{view: ["project", "div", "project"]}]},
{type: "td", list: [{type: "tr", list: [{type: "table", list: [
{type: "td", list: [{view: ["content", "div", "content"]}]},
{type: "td", list: [{view: ["profile", "div", "profile"]}]},
]}]}, {type: "tr", list: [
{type: "td", list: [{view: ["display", "div", "display"]}]}
]}]}
]}] }])
},
project: function(can, target) {
can.ui = can.page.Append(can, target, [{type: "table", list: [{type: "tr", list: [
{type: "td", list: [{view: "project"}]}, {type: "td", list: [
{type: "tr", list: [{view: "content"}]},
{type: "tr", list: [{view: "display"}]},
]}
]}] }])
},
display: function(can, target) {
can.ui = can.page.Appends(can, target, [{type: "table", list: [
{type: "tr", list: [{view: "content"}]},
{type: "tr", list: [{view: "display"}]},
]}])
},
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, target) {
can.core.Item(can.onkeypop._mode, function(item, value) { var engine = {}

View File

@ -74,7 +74,9 @@ Volcanos("user", {help: "用户模块", agent: {
var timer = can.core.Timer({value: 100, length: (meta.duration||1000)/100}, function(event, interval, index) {
if (index > 20) { ui.duration.innerHTML = parseInt(index/10)+"."+(index%10)+"s..." }
}, function() { can.page.Remove(can, ui.first), timer.stop = true })
}, function() {
can.page.Remove(can, ui.first), timer.stop = true
})
ui.Close = function() { can.page.Remove(can, ui.first), timer.stop = true }
return ui

View File

@ -43,6 +43,11 @@ body {
fieldset {
margin:0; border:0; padding:0;
}
fieldset.plugin {
box-shadow:2px 2px 10px 4px #626bd0;
background-color:#061c3c9e;
margin:10px; padding:10px;
}
legend {
box-shadow:4px 4px 20px 4px #626bd0;
}
@ -184,6 +189,9 @@ fieldset>div.output div.project div.list {
margin-left:10px;
}
body>fieldset.input {
position:fixed; left:0; top:32px;
}
fieldset.input {
background-color:#30a7a93d;
position:fixed;
@ -252,7 +260,7 @@ body.black a {
color:yellow;
}
body.white {
background-color:#2f3638;
background-color:#052238bf;
color:white;
}
body.white input[type=button] {
@ -280,11 +288,11 @@ body.white select {
}
body.white fieldset.Action {
background-color:#81b3c1c9;
background-color:#a2dceab3;
color:black;
}
body.white fieldset.Action fieldset.plugin {
background-color:#ffffff9c;
color:black;
}
body.white fieldset.Action fieldset.plugin legend {
background-color:#339999; color:white;
@ -294,6 +302,9 @@ body.white fieldset.Action fieldset.plugin legend:hover {
background-color:#6ee4e4;
}
body.white fieldset.plugin {
background-color:#d0dfe49e;
}
body.white fieldset.plugin table {
color:black;
}
@ -314,6 +325,9 @@ body.white fieldset.plugin table td {
body.white fieldset.plugin table td:hover {
background-color:#98ecd4;
}
body.white fieldset.story {
background-color:#7c8ea5ab;
}
body.white table input[type=button][value=结束] {
background:red;

View File

@ -1,6 +1,6 @@
fieldset.Action {
background-color:#051625; color:white;
min-width:160px;
background-color:#a2dceab3;
}
fieldset.Action div.action {
display:none;
@ -53,18 +53,13 @@ fieldset.Action div.output.free fieldset.plugin.select {
display:block;
}
fieldset.Action div.output fieldset.plugin {
box-shadow:2px 2px 10px 4px #626bd0;
background-color:#113c4a9e;
margin:10px; padding:10px;
}
fieldset.Action div.output fieldset.plugin:hover {
box-shadow:4px 4px 12px 6px #626bd0;
}
fieldset.Action div.output fieldset.plugin legend {
background-color:#477182; color:white;
font-size:16px; font-family:monospace;
margin-top:4px 5px; padding:2px 20px;
background-color:#0c739cd9;
}
fieldset.Action div.output fieldset.plugin legend:hover {
background:red;

View File

@ -22,7 +22,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onappend._init(can, value, ["/plugin/state.js"], function(plugin) {
plugin._option.dataset.id = value.action, value.target = plugin._target
plugin.run = function(event, cmds, cb, silent) { var msg = plugin.request(event); cmds = cmds || []
can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
}, silent)
}

View File

@ -2,6 +2,10 @@ fieldset.Footer {
height:32px; padding:0 5px;
clear:both;
}
fieldset.Footer div.toast {
position:static;
float:left;
}
fieldset.Footer>div.output>div {
height:22px; padding:5px;
cursor:pointer;

View File

@ -1,6 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can)
can.onimport._title(can, msg, target)
can.onimport._toast(can, msg, target)
can.onimport._state(can, msg, target)
typeof cb == "function" && cb(msg)
},
@ -9,6 +10,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Append(can, target, [{view: ["title", "div", title]}])
})
},
_toast: function(can, msg, target) {
can.toast = can.page.Append(can, target, [{view: ["toast", "div", ""]}]).first
},
_state: function(can, msg, target) {
can.core.List(can.Conf("state"), function(item) {
can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)],
@ -17,6 +21,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
},
toast: function(can, msg, text) {
can.page.Modify(can, can.toast, {innerHTML: text})
},
keys: function(can, msg, list, cb, target) {
can.page.Select(can, target, "span.keys", function(item) {
item.innerHTML = list[0]||""
@ -36,5 +43,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
})
},
})
Volcanos("onexport", {help: "导出数据", list: []})
Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },
})

View File

@ -1,5 +1,6 @@
fieldset.Header {
height:32px; padding:0 5px;
z-index:1;
}
fieldset.Header>div.output>div {
height:22px; padding:5px;

View File

@ -8,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
"white": "白色主题",
"black": "黑色主题",
"print": "打印主题",
"background": "背景图片",
"background": "清除背景",
"logout": "退出",
}
can.onmotion.clear(can)
@ -21,10 +21,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
},
_background: function(can, msg, target) { if (!msg.Option("background")) { return }
can.page.Modify(can, document.body, {style: {background: 'url("'+msg.Option("background")+'")'}})
can.page.Select(can, document.body, "fieldset.pane.Action", function(item) {
can.page.Modify(can, item, {style: {background: 'url("'+msg.Option("background")+'")'}})
})
if (msg.Option("background") == "void") {
can.page.Modify(can, document.body, {style: {background: ''}})
} else {
can.page.Modify(can, document.body, {style: {background: 'url("'+msg.Option("background")+'")'}})
}
},
_title: function(can, msg, target) {
can.user.title(can.user.Search(can, TITLE) || can.user.Search(can, POD))
@ -104,6 +105,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
can.onlayout.topic(can)
},
background: function(event, can, url) {
can.run(event, ["action", "background", url], function(msg) {
can.onimport._background(can, msg)
})
},
menu: function(can, cmds, cb) { // type item...
can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
@ -178,14 +184,15 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
black: function(event, can, button) { can.onlayout.topic(can, button) },
white: function(event, can, button) { can.onlayout.topic(can, button) },
print: function(event, can, button) { can.onlayout.topic(can, "white print") },
background: function(event, can, button) { can.user.input(event, can, ["url"], function(ev, button, data, list) {
can.run(event, ["action", "background", list[0]], function(msg) {
can.onimport._background(can, msg)
})
}) },
background: function(event, can, button) {
can.onimport.background(event, can, "void")
},
River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) },
Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) },
})
Volcanos("onexport", {help: "导出数据", list: []})
Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },
})
})()

View File

@ -237,5 +237,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
can.user.select(event, can, "github", "time,type,name,text")
},
})
Volcanos("onexport", {help: "导出数据", list: []})
Volcanos("onexport", {help: "导出数据", list: [],
width: function(can) { return can._target.offsetWidth },
height: function(can) { return can._target.offsetHeight },
})
})()

View File

@ -1,18 +1,13 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.ui = can.page.Appends(can, can._target, [
{view: "project"}, {view: "profile", style: {clear: "both"}},
])
can.path = can.request({}), can.list = []
msg.Table(function(value) { if (value.path.startsWith("/local")) { return }
value.path.endsWith("/")? can.path.Push(value): can.list.push(value)
})
can.onappend.table(can, can.path, can.ui.project, "table", function(value, key, index, line, array) {
return {type: "td", inner: value, click: function(event) {
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.run(event)
})
can.onlayout.display(can, target)
can.onappend.table(can, can.path, can.ui.content, "table", function(value, key, index, line, array) {
return {type: "td", inner: value, onclick: function(event) {
can.sup.onaction.change(event, can.sup, key, value)
}}
})
@ -21,43 +16,65 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
can.Action("倍速", can.rate = 1)
can.Action("起始", can.begin = parseInt(msg.Option("begin"))||feature["begin"]||0)
can.Action("数量", can.limit = parseInt(msg.Option("limit"))||feature["limit"]||6)
can.Action("高度", can.height = parseInt(msg.Option("height"))||feature["height"]||100)
can.Option("path") != "最近/" && can.onimport._page(can, can.list, can.begin = 0, can.limit)
can.Option("path") != "最近/" && can.onimport._page(can, can.list, can.begin, can.limit)
},
_page: function(can, list, begin, limit) { can.ui.profile.innerHTML = ""
_page: function(can, list, begin, limit) { can.onmotion.clear(can, can.ui.display)
if (!list || list.length == 0) { return }
for (var i = begin; i < begin+limit; i++) { list && list[i] && can.onimport.file(can, list[i].path) }
for (var i = begin; i < begin+limit; i++) { list && list[i] && can.onimport.file(can, list[i].path, i) }
can.Status("begin", begin), can.Status("limit", limit), can.Status("total", can.list.length)
},
file: function(can, path) { can.Status("文件", path)
_file: function(can, path, index) {
var p = location.href.startsWith("http")? "": "http://localhost:9020"
path = path.startsWith("http")? path: p+can.base.Path("/share/local", " "+(can._msg.Option("prefix")||""), path)
var ls = path.split("/")
var ls = ls[ls.length-1].split(".")
var ext = ls[ls.length-1].toLowerCase()
ext && can.page.Append(can, can.ui.profile, [can.onfigure[ext](can, path)])
return path
},
file: function(can, path, index) { path = can.onimport._file(can, path, index)
var cb = can.onfigure[can.base.Ext(path)]; can.Status("文件", path)
typeof cb == "function" && can.page.Append(can, can.ui.display, [cb(can, path, index)])
},
}, ["/plugin/local/wiki/feel.css"])
Volcanos("onfigure", {help: "组件菜单", list: [],
qrc: function(can, path) { return can.onfigure.image(can, path) },
png: function(can, path) { return can.onfigure.image(can, path) },
jpg: function(can, path) { return can.onfigure.image(can, path) },
jpeg: function(can, path) { return can.onfigure.image(can, path) },
image: function(can, path) { return {img: path, height: can.height, onclick: function(event) {
can.Status("文件", path)
can.page.Append(can, document.body, [{img: path, style: {
position: "fixed", left: 0, top: 40,
height: window.innerHeight-40,
}, onclick: function(event) {
can.page.Remove(can, event.target)
}, }])
}, onmouseover: function(event) {
can.user.toast(can, path, "image")
}, _init: function(target) {
can.Status("文件", path)
}
qrc: function(can, path, index) { return can.onfigure.image(can, path, index) },
png: function(can, path, index) { return can.onfigure.image(can, path, index) },
jpg: function(can, path, index) { return can.onfigure.image(can, path, index) },
jpeg: function(can, path, index) { return can.onfigure.image(can, path, index) },
image: function(can, path, index) { return {img: path, height: can.height, onclick: function(event) {
can.onappend._init(can, {}, [], function(sub) {
sub.run = function(event, cmds, cb, silent) {
return can.run(event, cmds, cb, true)
}
var header = sub.run({}, ["search", "Header.onexport.height"])
var footer = sub.run({}, ["search", "Footer.onexport.height"])
var river = sub.run({}, ["search", "River.onexport.width"])
var height = window.innerHeight-header-footer
sub.page.Remove(sub, sub._legend), sub.page.Modify(sub, sub._target, {style: {
left: river, top: header, height: height, background: "#4eaad0c2",
margin: "0 10px", padding: "0 10px",
}})
var order = index; function show(order) {
path = can.onimport._file(can, can.list[order].path)
sub.page.Appends(sub, sub._output, [{img: path, height: height-55}])
sub.core.Timer(100, function() { sub.Status("位置", order+1+"/"+can.list.length), sub.Status("文件", path) })
}; show(order)
sub.onappend._action(sub, ["关闭", "上一个", "设置背景", "下一个"], sub._action, {
"关闭": function(event) { sub.page.Remove(sub, sub._target) },
"上一个": function(event) { order > 0? show(--order): show(order = can.list.length-1) },
"设置背景": function(event) { var msg = can.request(event, {url: can.onimport._file(can, can.list[order].path)})
sub.run(event, ["search", "Header.onimport.background"])
},
"下一个": function(event) { order < can.list.length-1? show(++order): show(order = 0) },
}), sub.onappend._status(can, ["文件"], sub._status)
}, document.body)
}, _init: function(target) { can.Status("文件", path) },
onmouseover: function(event) { can.Status("文件", path) },
} },
video: function(can, path) { var auto = true, loop = true, total = 0

View File

@ -70,11 +70,11 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
}): can.run(event, ["action", name], function(msg) { typeof cb == "function" && cb(msg) }, true)
},
change: function(event, can, name, value, cb) {
can.page.Select(can, can._option, "input.args", function(input) { if (input.name == name) { var data = input.dataset || {}
if (value != input.value) { input.value = value;
data.action == "auto" && typeof cb == "function" && cb()
can.page.Select(can, can._option, "input.args", function(input) {
if (input.name == name && value != input.value) { input.value = value;
var data = input.dataset || {}; data.action == "auto" && can.run(event)
}
} })
})
},
getLocation: function(event, can, cmd) { var msg = can.request(can)

View File

@ -6,6 +6,7 @@
</head>
<body style="min-width:800px; min-height:600px; overflow:auto">
<script src="/proto.js"></script>
<script src="/frame.js"></script>
<script src="/publish/chrome/popup.js"></script>
</body>
<html>