1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00
This commit is contained in:
harveyshao 2022-01-10 00:26:14 +08:00
parent cd20be8491
commit 72907b43b7
7 changed files with 95 additions and 145 deletions

View File

@ -245,6 +245,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.core.List(root.list, function(item) { can.core.List(root.list, function(item) {
var ui = can.page.Append(can, target, [{view: [html.ITEM, html.DIV, item.meta.name], onclick: function(event) { var ui = can.page.Append(can, target, [{view: [html.ITEM, html.DIV, item.meta.name], onclick: function(event) {
can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list) can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list)
can.onmotion.select(can, nav, "div.item", event.target)
}}, {view: html.LIST}]); can.onappend.list(can, item, cb, ui.list) }}, {view: html.LIST}]); can.onappend.list(can, item, cb, ui.list)
}) })
}, },

View File

@ -230,11 +230,11 @@ Volcanos("base", {help: "数据类型",
return str.slice(0, str.indexOf(end)) return str.slice(0, str.indexOf(end))
}, },
join: function(list, sp) { return (list||[]).join(sp||ice.SP) }, join: function(list, sp) { return (list||[]).join(sp||ice.SP) },
joins: function(list) { joins: function(list, inner, outer) {
for (var i = 0; i < list.length; i++) { for (var i = 0; i < list.length; i++) {
list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(ice.FS) list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS)
} }
return list.join(ice.SP) return list.join(outer||ice.SP)
}, },
}) })

View File

@ -93,29 +93,6 @@ fieldset.word fieldset.story:hover {
box-shadow:12px 12px 12px 6px #5764efd1; box-shadow:12px 12px 12px 6px #5764efd1;
} }
div.story[data-type=json] div.item {
margin-left:10px;
padding-left:10px;
border:solid 1px #ff000000;
border-left:dashed 1px gray;
}
div.story[data-type=json] div.item:hover {
border:solid 1px red;
}
div.story[data-type=json] span.key {
color:brown;
}
div.story[data-type=json] span.str {
color:magenta;
}
div.story[data-type=json] span.value {
cursor:copy;
}
div.story[data-type=json] span.toggle {
cursor:pointer;
color:gray;
}
fieldset.word.float { fieldset.word.float {
width:-webkit-fill-available; width:-webkit-fill-available;
position:fixed; left:0; top:0; position:fixed; left:0; top:0;
@ -128,8 +105,11 @@ fieldset.word.float>div.output {
padding:20px; padding:20px;
} }
fieldset.word.float div.project { fieldset.word.float div.project {
background-color:#bad1e6a6; background:cornsilk;
left:0; top:25px;
position:fixed;
padding:10px; padding:10px;
z-index:100;
} }
fieldset.word.float div.content div.page { fieldset.word.float div.content div.page {
background-color:#194c79d4; background-color:#194c79d4;
@ -156,9 +136,14 @@ fieldset.word.float h3 {
text-align:center; text-align:center;
} }
fieldset.word.float div.status { fieldset.word.float div.status {
color:white;
clear:none; clear:none;
} }
fieldset.word.float div.status label {
color:black;
}
fieldset.word.float div.status span {
color:black;
}
fieldset.panel.cmd fieldset.word>form.option { fieldset.panel.cmd fieldset.word>form.option {
display:none; display:none;

View File

@ -1,4 +1,4 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { Volcanos("onimport", {H6help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
if (msg.Length() > 0) { return can.onappend.table(can, msg) } if (msg.Length() > 0) { return can.onappend.table(can, msg) }
@ -6,128 +6,103 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Select(can, target, ".story", function(item) { var data = item.dataset||{} can.page.Select(can, target, ".story", function(item) { var data = item.dataset||{}
can.core.CallFunc([can.onimport, data.type], [can, data, item]) can.core.CallFunc([can.onimport, data.type], [can, data, item])
can.page.Modify(can, item, {style: can.base.Obj(data.style)}) can.page.Modify(can, item, {style: can.base.Obj(data.style)})
// delete(data.meta) }), can.onimport._navmenu(can)
}) },
_navmenu: function(can) { if (!can.sup._navmenu) { return }
if (can.user.mod.isCmd) { if (can.user.mod.isCmd) { can.page.ClassList.add(can, can._fields, "cmd")
can.page.ClassList.add(can, can._fields, "cmd") can.Conf(html.WIDTH, can.Conf(html.WIDTH)-can.sup._navmenu.offsetWidth-10)
can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight}}) can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight}})
if (can.sup._navmenu) { can.page.Modify(can, can._output, {style: {"max-width": can.Conf(html.WIDTH)}})
can.Conf("width", can.Conf("width")-can.sup._navmenu.offsetWidth-10)
can.page.Modify(can, can._output, {style: {"max-width": can.Conf("width")}})
can.page.Modify(can, can._output, {style: {height: window.innerHeight}}) can.page.Modify(can, can._output, {style: {height: window.innerHeight}})
}
} else { } else {
if (can.sup._navmenu) { can.Conf(html.WIDTH, can.Conf(html.WIDTH)-can.sup._navmenu.offsetWidth-20)
can.Conf("width", can.Conf("width")-can.sup._navmenu.offsetWidth-20)
can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight-240}}) can.page.Modify(can, can.sup._navmenu, {style: {height: window.innerHeight-240}})
can.page.Modify(can, can._output, {style: {height: window.innerHeight-240}}) can.page.Modify(can, can._output, {style: {height: window.innerHeight-240}})
} }
}
}, },
navmenu: function(can, data, target) { var nav = can.sup._navmenu navmenu: function(can, data, target) { var nav = can.sup._navmenu
nav = nav||can.page.Append(can, can._fields, [{view: "navmenu"}]).first nav = nav||can.page.Append(can, can._fields, [{view: "navmenu"}]).first
can.sup._navmenu = nav, can._fields.insertBefore(nav, can._output) can.onmotion.clear(can, nav), can._fields.insertBefore(nav, can._output)
can.onmotion.clear(can, nav) can.sup._navmenu = nav
can.page.Modify(can, can._output, {style: {float: "left", clear: "none"}})
can.page.Modify(can, can._output, {style: {float: html.LEFT, clear: html.NONE}})
can.onappend.list(can, can.base.Obj(data.data), function(event, item) { can.onappend.list(can, can.base.Obj(data.data), function(event, item) {
var link = item.meta.link, cmd = link.split(ice.PS).pop() var link = item.meta.link, cmd = link.split(ice.PS).pop()
can.onmotion.select(can, nav, "div.item", event.target)
if (can.onaction[cmd]) { return can.onaction[cmd](event, can) } if (can.onaction[cmd]) { return can.onaction[cmd](event, can) }
if (!link || link == can.Option("path")) { return } if (!link || link == can.Option(nfs.PATH)) { return }
can.page.Cache(can.Option("path"), can._output, "some")
can.Option("path", link)
var some = can.page.Cache(can.Option("path"), can._output)
can.user.title(item.meta.name)
can.page.Cache(can.Option(nfs.PATH), can._output, "some")
can.Option(nfs.PATH, link)
var some = can.page.Cache(can.Option(nfs.PATH), can._output)
if (!some) { can.sup.Update(event, [link]) } if (!some) { can.sup.Update(event, [link]) }
can.user.title(item.meta.name)
return true return true
}, nav) }, nav)
}, },
premenu: function(can, data, target) { premenu: function(can, data, target) {
can.page.Select(can, can._output, "h2.story, h3.story", function(item) { can.page.Select(can, can._output, "h2.story, h3.story", function(item) {
can.page.Append(can, target, [{text: [item.innerHTML, "li", item.tagName], onclick: function() { can.page.Append(can, target, [{text: [item.innerHTML, html.LI, item.tagName], onclick: function() {
item.scrollIntoView() item.scrollIntoView()
}}]) }}]), item.onclick = function(event) { target.scrollIntoView() }
item.onclick = function(event) { target.scrollIntoView() }
}) })
}, },
title: function(can, data, target) { title: function(can, data, target) {
can.user.mod.isCmd && can.user.title(data.text) can.user.mod.isCmd && can.user.title(data.text)
}, },
spark: function(can, data, target) { spark: function(can, data, target) {
if (data["name"] == "inner") { if (data[mdb.NAME] == html.INNER) {
target.title = "点击复制", target.onclick = function(event) { target.title = "点击复制", target.onclick = function(event) {
can.user.copy(event, can, target.innerText) can.user.copy(event, can, target.innerText)
} }
return return
} }
can.page.Select(can, target, "span", function(item) { can.page.Select(can, target, html.SPAN, function(item) {
item.title = "点击复制", item.onclick = function(event) { item.title = "点击复制", item.onclick = function(event) {
can.user.copy(event, can, item.innerText) can.user.copy(event, can, item.innerText)
} }
}) })
can.page.Select(can, target, "a", function(item) { can.page.Select(can, target, html.A, function(item) {
if (item.innerText == "") { item.innerText = item.href }
can.page.Modify(can, item, {target: "_blank"}) can.page.Modify(can, item, {target: "_blank"})
if (item.innerText == "") {
item.innerText = item.href
}
}) })
}, },
table: function(can, data, target) {
can.page.OrderTable(can, target)
can.page.ClassList.add(can, target, "content")
can.page.Select(can, target, "td", function(item) {
item.title = "点击复制", item.onclick = function(event) {
can.user.copy(event, can, item.innerText)
}
})
},
json: function(can, data, target) {
can.page.Select(can, target, "span.toggle", function(item) {
item.onclick = function(event) { can.onmotion.toggle(can, item.nextSibling) }
})
can.page.Select(can, target, "span.value", function(item) {
item.onclick = function(event) { can.user.copy(event, can, item.innerText) }
})
},
field: function(can, data, target) { var item = can.base.Obj(data.meta)
item.width = parseInt(can.Conf("width")||window.innerWidth-20), item.height = parseInt(can.Conf("height")||window.innerHeight)
item.type = chat.PLUGIN
can.onappend._init(can, item, ["/plugin/state.js"], function(sub) {
sub.run = function(event, cmds, cb, silent) {
can.run(event, can.misc.concat([ctx.ACTION, "story", data.type, data.name, data.text], cmds), cb, true)
}
sub.Conf("width", item.width=can.Conf("width")-20)
can.onengine.listen(can, "onaction_resize", function(width, height) {
can.page.Modify(can, sub._output, {style: {"max-width": sub.Conf("width", item.width=width-80)}})
})
if (can.core.Value(item, "auto.cmd")) {
can.core.Timer(100, function() {
var msg = sub.request({}, can.core.Value(item, "opts")); msg.Option("_handle", "true")
sub.Update(msg._event, [ctx.ACTION, can.core.Value(item, "auto.cmd")])
})
}
}, can._output, target)
},
chart: function(can, data, target) { chart: function(can, data, target) {
target.oncontextmenu = function(event) { target.oncontextmenu = function(event) {
var ui = can.user.carte(event, can, {"导出": function(event, can, button) { var ui = can.user.carte(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
can.user.toPNG(can, "hi.png", target.outerHTML, parseInt(target.getAttribute(html.HEIGHT)), parseInt(target.getAttribute(html.WIDTH))) can.user.toPNG(can, can.user.prompt("file name", null, "hi.png"), target.outerHTML,
}}, ["导出"]) parseInt(target.getAttribute(html.HEIGHT)), parseInt(target.getAttribute(html.WIDTH)))
}), [mdb.EXPORT])
can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}}) can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}})
} }
}, },
table: function(can, data, target) {
can.page.OrderTable(can, target)
can.page.ClassList.add(can, target, chat.CONTENT)
can.page.Select(can, target, html.TD, function(item) {
item.title = "点击复制", item.onclick = function(event) {
can.user.copy(event, can, item.innerText)
}
})
},
field: function(can, data, target, width) { var item = can.base.Obj(data.meta)
can.onappend._init(can, item, ["/plugin/state.js"], function(sub) {
sub.run = function(event, cmds, cb, silent) {
can.run(event, can.misc.concat([ctx.ACTION, chat.STORY, data.type, data.name, data.text], cmds), cb, true)
}
sub.Conf(html.WIDTH, item.width = (width||can.Conf(html.WIDTH))-20)
can.core.Value(item, "auto.cmd") && can.core.Timer(100, function() {
var msg = sub.request({}, can.core.Value(item, "opts")); msg.Option("_handle", "true")
sub.Update(msg._event, [ctx.ACTION, can.core.Value(item, "auto.cmd")])
})
}, can._output, target)
},
iframe: function(can, data, target) { var meta = can.base.Obj(data.meta) iframe: function(can, data, target) { var meta = can.base.Obj(data.meta)
can.page.Modify(can, target, {width: can.Conf("width")-200}) can.page.Modify(can, target, {width: can.Conf(html.WIDTH)-200})
}, },
}, ["/plugin/local/wiki/word.css"]) }, [""])
Volcanos("onkeypop", {help: "键盘交互", list: [], Volcanos("onkeypop", {help: "键盘交互", list: [],
_mode: { _mode: {
normal: { normal: {
@ -144,11 +119,7 @@ Volcanos("onkeypop", {help: "键盘交互", list: [],
}, _engine: {}, }, _engine: {},
}) })
Volcanos("onaction", {help: "控件交互", list: [], Volcanos("onaction", {help: "控件交互", list: [],
home: function(event, can) { play: function(event, can) { var list = [], current = []
location.href = ice.PS
},
show: function(event, can) { var list = [], current = []
can.page.Select(can, can._output, ".story", function(item) { can.page.Select(can, can._output, ".story", function(item) {
switch (item.tagName) { switch (item.tagName) {
case "H1": case "H1":
@ -160,42 +131,38 @@ Volcanos("onaction", {help: "控件交互", list: [],
current.push(item) current.push(item)
}) })
can.onappend._init(can, {type: "story word float"}, [], function(sub) { sub.sup = can can.onappend._init(can, {type: "story word float"}, [], function(sub) {
can.page.Modify(can, sub._target, {style: {"background": document.body.style.background}}) sub.run = can.run, sub.sup = can, can.sub = sub, can.onappend._action(sub, [
can.onappend._action(sub, [ ["布局", "开讲", "快闪", "网格"], "大纲", "首页", "上一页",
["布局", "开讲", "快闪", "网格"],
"大纲", "首页", "上一页",
["菜单"].concat(can.core.List(list, function(page) { return page[0].innerHTML })), ["菜单"].concat(can.core.List(list, function(page) { return page[0].innerHTML })),
"下一页", "隐藏", "结束", "下一页", "隐藏", "结束",
], sub._action, can.onaction) ], sub._action, can.onaction)
can.sub = sub, can.onkeypop._build(can)
can.onengine.signal(can, "keymap.focus", can.request(event, {cb: function(event) { can.onengine.signal(can, "keymap.focus", can.request(event, {cb: function(event) {
can.keylist = can.onkeypop._parse(event, can, "normal", can.keylist) can.keylist = can.onkeypop._parse(event, can, "normal", can.keylist)
}})) }})), can.onkeypop._build(can)
sub.onappend._status(sub, ["page", "from", "cost"]) can.page.Modify(can, sub._target, {style: {background: document.body.style.background}})
sub.list = list sub.ui = sub.page.Append(sub, sub._output, [{view: chat.PROJECT}, {view: chat.CONTENT}])
sub.page.Modify(sub, sub._output, {style: {"width": window.innerWidth-40}}) sub.page.Modify(sub, sub._output, {style: {height: window.innerHeight-93}})
sub.page.Modify(sub, sub._output, {style: {"height": window.innerHeight-93}}) sub.page.Modify(sub, sub._output, {style: {width: window.innerWidth-40}})
sub.ui = sub.page.Append(sub, sub._output, [{view: "project"}, {view: "content"}])
can.core.List(list, function(page, index) { can.core.List(sub.list = list, function(page, index) {
can.onappend.item(can, "item", {name: page[0].innerHTML}, function(event) { can.onappend.item(can, html.ITEM, {name: page[0].innerHTML}, function(event) {
can.onaction.show(sub, index) can.onaction.show(sub, index)
}, function(event) {}, sub.ui.project) }, function(event) {}, sub.ui.project)
sub.page.Append(sub, sub.ui.content, [{view: "page"+(index==0? " first": ""), list: can.core.List(page, function(item) { var data = item.dataset||{} sub.page.Append(sub, sub.ui.content, [{view: "page"+(index==0? " first": ""), list: can.core.List(page, function(item) { var data = item.dataset||{}
switch (data.type) { switch (data.type) {
case "premenu": item = item.cloneNode(false); break case "premenu": item = item.cloneNode(false); break
case "field": item = can.onappend.field(can, "story", can.base.Obj(data.meta), sub.ui.content).first; break case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content).first; break
default: item = item.cloneNode(true) default: item = item.cloneNode(true)
} }
return can.core.CallFunc([can.onimport, data.type], [can, data, item]), item return can.core.CallFunc([can.onimport, data.type], [sub, data, item, window.innerWidth-40]), item
}), }]) }), }])
}), can.onmotion.hidden(can, sub.ui.project) }), can.onmotion.hidden(can, sub.ui.project), can.onaction.show(sub, 0)
can.onaction.show(sub, 0)
sub.Status("from", can.base.Time(null, "%H:%M:%S")) sub.onappend._status(sub, ["page", "from", "cost"]), sub.Status("from", can.base.Time())
var from = new Date(); can.core.Timer({interval: 100}, function() { var now = new Date() var from = new Date(); can.core.Timer({interval: 100}, function() { var now = new Date()
sub.Status("cost", can.base.Duration(now-from)) sub.Status("cost", can.base.Duration(now-from))
}) })
@ -216,13 +183,13 @@ Volcanos("onaction", {help: "控件交互", list: [],
can.onengine.signal(can, "keymap.focus", can.request(event, {cb: null})) can.onengine.signal(can, "keymap.focus", can.request(event, {cb: null}))
}, },
show: function(sub, which) { sub.page.Modify(sub, sub.ui.content, {className: "content"}) show: function(sub, which) { sub.page.Modify(sub, sub.ui.content, {className: chat.CONTENT})
sub.page.Select(sub, sub.ui.content, "div.page", function(page, index) { sub.page.Select(sub, sub.ui.content, "div.page", function(page, index) {
if (index == which || page == which) { if (index == which || page == which) {
sub.page.Select(sub, page, "h1,h2,h3", function(item) { sub.Action("菜单", item.innerHTML) }) sub.page.Select(sub, page, "h1,h2,h3", function(item) { sub.Action("菜单", item.innerHTML) })
sub.onmotion.select(sub, sub.ui.project, "div.item", index) sub.onmotion.select(sub, sub.ui.project, "div.item", index)
sub.page.ClassList.add(sub, page, "select")
sub.Status("page", index+1+ice.PS+sub.list.length) sub.Status("page", index+1+ice.PS+sub.list.length)
sub.page.ClassList.add(sub, page, "select")
} else { } else {
sub.page.ClassList.del(sub, page, "select") sub.page.ClassList.del(sub, page, "select")
} }

View File

@ -16,17 +16,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}) })
}, },
_draw: function(can, msg, field, x, y, r, margin, which) { _draw: function(can, msg, field, x, y, r, margin, which) {
function join(list) {
for (var i = 0; i < list.length; i++) { list[i] = list[i].join(ice.SP) }
return list.join(ice.FS)
}
function pos(x, y, r, angle) { angle -= 90 function pos(x, y, r, angle) { angle -= 90
return [x + r * Math.cos(angle * Math.PI / 180), y + r * Math.sin(angle * Math.PI / 180)] return [x + r * Math.cos(angle * Math.PI / 180), y + r * Math.sin(angle * Math.PI / 180)]
} }
function pie(x, y, r, begin, span, color, cb) { can.onimport.draw({}, can, {shape: "path", style: { function pie(x, y, r, begin, span, color, cb) { can.onimport.draw({}, can, {shape: "path", style: {
"stroke-width": 1, stroke: color, fill: color, d: join([ "stroke-width": 1, stroke: color, fill: color, d: can.base.joins([
["M", x, y], ["L"].concat(pos(x, y, r, begin)), ["A", r, r, "0 0 1"].concat(pos(x, y, r, begin+span)), ["Z"] ["M", x, y], ["L"].concat(pos(x, y, r, begin)), ["A", r, r, "0", span>180? "1": "0", "1"].concat(pos(x, y, r, begin+span)), ["Z"]
]), ], ice.SP, ice.FS),
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
can.base.isFunc(cb) && cb(event) can.base.isFunc(cb) && cb(event)
} }) } } }) }

View File

@ -1,4 +1,5 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.misc.Log("what------", can.Conf())
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
if (msg.Length() == 0) { return } if (msg.Length() == 0) { return }

View File

@ -177,7 +177,7 @@ var html = {
INPUT: "input", INPUT_ARGS: ".args", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button", INPUT: "input", INPUT_ARGS: ".args", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button",
FORM: "form", FILE: "file", SPACE: "space", CLICK: "click", SUBMIT: "submit", CANCEL: "cancel", FORM: "form", FILE: "file", SPACE: "space", CLICK: "click", SUBMIT: "submit", CANCEL: "cancel",
DIV: "div", IMG: "img", CODE: "code", SPAN: "span", VIDEO: "video", DIV: "div", IMG: "img", CODE: "code", SPAN: "span", VIDEO: "video",
TABLE: "table", TR: "tr", TH: "th", TD: "td", BR: "br", TABLE: "table", TR: "tr", TH: "th", TD: "td", BR: "br", UL: "ul", LI: "li",
A: "a", LABEL: "label", INNER: "inner", TITLE: "title", A: "a", LABEL: "label", INNER: "inner", TITLE: "title",
CLASS: "class", BLOCK: "block", NONE: "none", CLASS: "class", BLOCK: "block", NONE: "none",