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-24 13:41:48 +08:00
parent 8c2eb17215
commit 4a03a7d29a
24 changed files with 228 additions and 222 deletions

View File

@ -215,7 +215,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
meta.inputs && sub.onappend._option(sub, meta, sub._option)
typeof cb == "function" && cb(sub)
})
}); return sub
},
_option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, [])
meta.option = can.base.Obj(meta.option||"{}", {})
@ -253,7 +253,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
_action: function(can, list, action, meta) { action = action || can._action, meta = meta || can.onaction
can.core.List(list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: "button", value: item, onclick: function(event) {
can.core.CallFunc(meta[item]||meta["_engine"], [event, can, item])
var cb = meta[item]||meta["_engine"]
cb? can.core.CallFunc(cb, [event, can, item]): can.run(event, ["action",item])
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]
@ -319,6 +320,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
table.onaction && table.onappend._action(table, msg._action||meta._action||table.onaction.list)
table.ondetail && table.onappend._detail(table, msg._detail||meta._detail||table.ondetail.list)
table.onexport && table.onappend._status(table, msg._export||meta._export||table.onexport.list)
}, can._output)
})
})
@ -331,9 +333,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
},
_status: function(can, list, status) { status = status || 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"]},
can.core.List(list, function(item) { item = typeof item == "object"? item: {name: item}
can.page.Append(can, status, [{view: "item "+item.name, title: item.name, list: [
{text: [item.name, "label"]}, {text: [": ", "label"]}, {text: [(item.value||"")+"", "span", item.name]},
], }])
})
},
@ -358,7 +360,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
},
field: function(can, type, item, target) { type = type || "input", item = item || {}
return can.page.Append(can, target||can._output, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [
item.pos? undefined: {text: [(item.nick||item.name||"").split(" ")[0]+"("+(item.help||"").split(" ")[0]+")", "legend"]},
{text: [(item.nick||item.name||"").split(" ")[0]+"("+(item.help||"").split(" ")[0]+")", "legend"]},
{view: ["option", "form"]}, {view: ["action"]}, {view: ["output"]}, {view: ["status"]},
]}])
},
@ -416,17 +418,19 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var list = can.core.Split(key, "@=", "@=")
var pkey = list[0], pval = list[1]||""
target.type != "button" && target.value && target.value.startsWith("@") && (target.value = pval||"")
target.type != "button" && target.value && target.value.indexOf("@") == 0 && (target.value = pval||"")
pkey && can.require(["/plugin/input/"+pkey+".js"], function(can) {
can.onfigure && can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.startsWith("on")) {
target[key] = function(event) {
can._figure && can.page.Remove(can, can._figure.fieldset)
var figure = can.onappend.field(can, "input "+pkey, {}, document.body)
can._figure = figure; can.onlayout.figure(can, figure, event)
can.onfigure && can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.indexOf("on") == 0) {
target[key] = function(event) { can._figure && can.page.Remove(can, can._figure._target)
can.onappend._init(can, {type: "input", name: pkey, pos: "float"}, [], function(sub) {
sub.Conf(meta), sub.run = function(event, cmds, cb) {
var msg = sub.request(event, can.Option());
(meta.run||can.run)(event, cmds, cb, true)
}, can._figure = sub
meta.run = meta.run||can.run
cb(event, can, meta, target, figure)
meta.style && sub.page.Modify(sub, sub._target, {style: meta.style})
cb(event, sub, meta, target)
}, document.body)
}
} })
})
@ -461,7 +465,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}, target)
},
}, [], function(can) {})
Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, target, width, height) {
Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) {
var target = document.body, width = window.innerWidth, height = window.innerHeight
can.page.Select(can, target, ["fieldset.head", "fieldset.foot"], function(field) {
can.page.Modify(can, field, {style: {display: can.user.isMobile && width > height? "none": ""}})
height -= field.offsetHeight
@ -488,24 +494,21 @@ 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"))
},
figure: function(can, ui, event) { var p = ui.fieldset
var layout = {top: event.clientY+10, left: event.clientX}
figure: function(can, event) { var p = can._target
var layout = {left: event.clientX, top: event.clientY+10}
can.page.Modify(can, p, {style: layout})
can.onmotion.move(can, p, layout)
can.page.Remove(can, ui.legend)
var left = p.offsetLeft
if (p.offsetLeft+p.offsetWidth > window.innerWidth) {
var left = p.offsetLeft; if (p.offsetLeft+p.offsetWidth > window.innerWidth) {
left = window.innerWidth - p.offsetWidth
}
if (left < 120) { left = 120 }
can.page.Modify(can, p, {style: {left: left}})
},
background: function(can, url, target) { target = target || document.body
can.page.Modify(can, target, {style: {background: url == "" || url == "void"? "": 'url("'+url+'")'}})
},
} if (left < 120) { left = 120 }
var top = p.offsetTop; if (p.offsetTop+p.offsetHeight > window.innerHeight) {
top = window.innerHeight - p.offsetHeight
} if (top < 32) { top = 32 }
can.page.Modify(can, p, {style: {left: left, top: top}})
},
resize: function(can, name, cb) {
var list = []; can.onengine.listen(can, name, function(width, height) {
can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() {
@ -513,28 +516,26 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
})
})
},
profile: function(can, target) { target = target || can._target
return can.page.Append(can, target, [{view: ["void", "table"], list: [{type: "tr", list: [
{type: "td", list: [{view: ["project"]}]},
background: function(can, url, target) { target = target || document.body
can.page.Modify(can, target, {style: {background: url == "" || url == "void"? "": 'url("'+url+'")'}})
},
profile: function(can, target) { target = target || can._output
return can.page.Append(can, target, [{view: ["layout", "table"], list: [
{view: ["project", "td"], list: [{view: ["project"]}]},
{type: "td", list: [
{view: ["void", "table"], list: [
{type: "tr", list: [{view: ["void", "table"], list: [
{type: "tr", list: [
{type: "td", list: [{view: ["content"]}]},
{type: "td", list: [{view: ["profile"]}]},
]}
{type: "tr", list: [{type: "tr", list: [
{view: ["content", "td"], list: [{view: ["content"]}]},
{view: ["profile", "td"], list: [{view: ["profile"]}]},
]}]},
{type: "tr", list: [
{type: "td", list: [{view: ["display"]}]}
{view: ["display", "tr"], list: [{view: ["display"]}]}
]}
]}
]}
]}] }])
] }])
},
project: function(can, target) { target = target || can._target
return can.page.Append(can, target, [{view: ["void", "table"], list: [{type: "tr", list: [
return can.page.Append(can, target, [{view: ["layout", "table"], list: [{type: "tr", list: [
{type: "td", list: [{view: "project", style: {display: "none"}}]}, {type: "td", list: [
{view: ["void", "table"], list: [
{view: ["layout", "table"], list: [
{type: "tr", list: [{view: "content"}]},
{type: "tr", list: [{view: "display"}]},
]}
@ -542,7 +543,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
]}] }])
},
display: function(can, target) { target = target || can._target
return can.page.Appends(can, target, [{view: ["void", "table"], list: [
return can.page.Appends(can, target, [{view: ["layout", "table"], list: [
{type: "tr", list: [{view: "content"}]},
{type: "tr", list: [{view: "display"}]},
]}])

View File

@ -3,7 +3,7 @@ Volcanos("base", {help: "基础模块",
Obj: function(value, def) {
try {
return (typeof value == "string" && value != ""? JSON.parse(value): value) || def || {}
} catch {
} catch (e) {
return [value]
}
},

View File

@ -1,5 +1,5 @@
Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg = {}
msg.__proto__ = {_event: event, _can: can,
var proto = {_event: event, _can: can,
Option: function(key, val) {
if (key == undefined) { return msg && msg.option || [] }
if (typeof key == "object") { can.core.Item(key, msg.Option) }
@ -69,6 +69,8 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg
return msg.append && msg.append[0] && msg[msg.append[0]] && msg[msg.append[0]].length || 0
},
}
for (var k in proto) { msg[k] = proto[k] }
return msg
},
POST: shy("请求后端", {order: 0}, function(can, msg, url, form, cb) {

View File

@ -28,7 +28,7 @@ Volcanos("page", {help: "网页模块",
var item = obj && obj.querySelectorAll(key)
return can.core.List(item, cb, interval, cbs)
}),
Modify: shy("修改节点", function(can, target, value) {
Modify: shy("修改节点", function(can, target, value) { target = target || {}
target = typeof target == "string"? document.querySelector(target): target
typeof value == "string"? (target.innerHTML = value): can.core.Item(value, function(key, value) {
typeof value != "object"? (target[key] = value): can.core.Item(value, function(sub, value) {
@ -176,7 +176,8 @@ Volcanos("page", {help: "网页模块",
value.last = node, value.first = value.first || node, value[name||""] = value[data.className||""] = value[type] = node
item.list && can.page.Append(can, node, item.list, value)
typeof item._init == "function" && item._init(node)
target && target.append && target.append(node)
target && target.append && target.appendChild(node)
target.appendChild(node)
})
return value
}),
@ -281,7 +282,7 @@ Volcanos("page", {help: "网页模块",
},
Display: function(text) { if (typeof text != "string") { return "" }
if (text.startsWith("http://") || text.startsWith("https://") || text.startsWith("ftp://")) {
if (text.indexOf("http://") == 0 || text.indexOf("https://") == 0 || text.indexOf("ftp://") == 0) {
var ls = text.split(" ")
return "<a href='"+ls[0]+"' target='_blank'>"+ls[0]+"</a>"+ls.slice(1).join(" ")
}

View File

@ -205,7 +205,10 @@ Volcanos("user", {help: "用户模块", agent: {
can.run(event, cmds, cb, true)
}
function _init(target) { can.onappend.figure(can, item, item.value, target) }
function _init(target) {
can.onappend.figure(can, item, item.value, target)
target.value = target.value||msg.Option(item.name)
}
return {type: ["tr"], list: [
{type: "td", list: [{text: typeof item == "string"? item: item.length > 0? item[0]: item.name || ""}]},

View File

@ -43,11 +43,17 @@ body {
fieldset {
margin:0; border:0; padding:0;
}
fieldset.pane>legend {
display:none;
}
fieldset.plugin {
box-shadow:2px 2px 10px 4px #626bd0;
background-color:#061c3c9e;
margin:10px; padding:10px;
}
fieldset.input>legend {
display:none;
}
legend {
box-shadow:4px 4px 20px 4px #626bd0;
cursor:pointer;
@ -81,39 +87,29 @@ option {
font-family:monospace;
}
table.void>tr {
margin:0;border:0;padding:0;
}
table.void>tr>th {
margin:0;border:0;padding:0;
}
table.void>tr>td {
margin:0;border:0;padding:0;
}
table {
table.content {
border:0; white-space:pre;
font-size:14px; font-family:monospace;
cursor:pointer; overflow: auto;
}
table tr {
table.content tr {
background-color:#04272f45;
}
table th {
table.content th {
background-color:#0fbd45;
padding:2px 6px;
}
table td {
table.content td {
max-width:1200px; overflow:auto;
padding:2px 6px;
}
table td.select {
table.content td.select {
background-color:red;
}
table td.select {
table.content td.select {
background-color:red;
}
table td.done {
table.content td.done {
background-color:green;
}
@ -143,7 +139,7 @@ h3:hover {
cursor:pointer;
}
div.code {
background-color:#343a34c4; color:white;
background-color:#343a3445; color:white;
font-size:14px; font-family:monospace;
box-shadow: 4px 4px 20px 4px #626bd0;
padding:10px; border:solid 3px green;
@ -216,6 +212,26 @@ fieldset>div.status>div.item>label {
font-size:10px; color:gray;
}
table.layout>tr {
margin:0;border:0;padding:0;
}
table.layout>tr>th {
margin:0;border:0;padding:0;
}
table.layout>tr>td {
margin:0;border:0;padding:0;
}
fieldset>div.output td.project {
background-color:#435f8c8c;
}
fieldset>div.output td.profile {
background-color:#71909c91;
}
fieldset>div.output tr.display {
background-color:#71909c91;
}
fieldset>div.output {
clear:both; overflow:auto;
position:relative;
@ -231,7 +247,10 @@ fieldset>div.output div.project div.item {
clear:both; cursor:pointer;
}
fieldset>div.output div.project div.item:hover {
background:red;
background-color:red;
}
fieldset>div.output div.project div.item.select {
background-color:red;
}
fieldset>div.output div.project div.list {
margin-left:10px;

View File

@ -18,9 +18,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
})
}, can._plugins = (can._plugins||[]).concat([sub])
can.page.Modify(can, sub._target, {style: {"max-width": item.width}})
can.page.Modify(can, sub._output, {style: {"max-width": item.width-40}})
can.onengine.listen(can, "action.resize", function(width, height) {
can.page.Modify(can, sub._target, {style: {"max-width": item.width = width}})
can.page.Modify(can, sub._output, {style: {"max-width": item.width = width-40}})
})
can.page.Append(can, can._action, [{view: ["item", "div", item.name], onclick: function(event) {
@ -77,9 +77,12 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.onengine.signal(can, "action.touch", can.request(event))
}
can.Conf({width: can._output.offsetWidth-33, height: window.innerHeight})
can.onengine.listen(can, "resize", function(width, height) { can.Conf({width: width, height: height})
can.onengine.signal(can, "action.resize", can.request({}, {width: width, height: height}))
var list = []; can.onengine.listen(can, "resize", function(width, height) {
can.Conf({width: width, height: height}), can.core.Delay(list, 1000, function() {
can.onengine.signal(can, "action.resize", can.request({}, {
width: can.Conf("width"), height: can.Conf("height"),
}))
})
})
can.run({}, ["search", "Header.onimport.menu", "action",

View File

@ -6,7 +6,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
"black": "黑色主题",
"white": "白色主题",
"print": "打印主题",
"void": "清除背景",
"clear": "清除背景",
"pack": "打包页面",
"logout": "退出",
}
@ -171,13 +171,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) },
setting: function(event, can) {
var ui = can.user.carte(event, can, can.onaction, ["black", "white", "print", "void", "pack"])
var ui = can.user.carte(event, can, can.onaction, ["black", "white", "print", "clear", "pack"])
can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}})
},
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") },
void: function(event, can, button) { can.onimport.background(event, can, button) },
clear: function(event, can, button) { can.onimport.background(event, can, button) },
pack: function(event, can) {
can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) })
var msg = can.request(event, {name: "demo", content: JSON.stringify(Volcanos.meta.pack)})

View File

@ -76,7 +76,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
can.sublist[river] = list
})
},
action: function(event, can, river, storm) {
action: function(event, can, river, storm) { can.onlayout._init(can)
can.onengine.signal(can, "storm.select", can.request(event, {
river: can.Conf("river", river), storm: can.Conf("storm", storm),
}))

View File

@ -1,59 +1,46 @@
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target, figure) {
item.style && can.page.Modify(can, figure.fieldset, {style: item.style})
// 设置输入
function set(now) {
target.value = can.base.Time(now)
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target) {
function set(now) { target.value = can.base.Time(now), can.page.Remove(can, can._target)
item && item.action == "auto" && can.run({})
}
figure.table = can.page.Append(can, figure.output, [{type: "table"}]).first
// 添加控件
var now = target.value? new Date(target.value): new Date()
var control = can.page.AppendAction(can, figure.action, ["关闭",
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)), {view: ["", "br"]},
"今天", {type: "hr", style: {margin: 0}},
"上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), "下一月", {view: ["", "br"]},
], function(event, value, cmd) { can.stick = true
// 设置时间
switch (cmd) {
case "year": now.setFullYear(parseInt(value)), show(now); return
case "month": now.setMonth(parseInt(value)-1), show(now); return
case "hour": now.setHours(parseInt(value)), set(show(now)); return
case "minute": now.setMinutes(parseInt(value)), set(show(now)); return
case "second": now.setSeconds(parseInt(value)), set(show(now)); return
}
can.onappend._action(can, ["关闭",
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
"今天", "", "上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), "下一月",
], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },
"hour": function(event, can, key, value) { now.setHours(parseInt(value)), show(now) },
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)), show(now) },
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)), show(now) },
"今天": function(event) { now = new Date(), set(show(now)) },
// 设置日期
switch (value) {
case "关闭": can.page.Remove(can, figure.fieldset); break
case "今天": now = new Date(), set(show(now)); break
case "随机": now.setDate((Math.random() * 100 - 50) + now.getDate()), set(show(now)); break
case "关闭": can.page.Remove(can, figure.first)
case "前一年": now.setFullYear(now.getFullYear()-1), show(now); break
case "后一年": now.setFullYear(now.getFullYear()+1), show(now); break
case "上一月": now.setMonth(now.getMonth()-1), show(now); break
case "下一月": now.setMonth(now.getMonth()+1), show(now); break
}
"上一月": function(event) { now.setMonth(now.getMonth()-1), show(now) },
"year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) },
"下一月": function(event) { now.setMonth(now.getMonth()+1), show(now) },
"随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) },
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
})
function show(now) {
can._table = can.page.Append(can, can._output, [{view: ["content", "table"]}]).first
var today = new Date(); function show(now) {
// 设置控件
control.month.value = now.getMonth()+1
control.year.value = now.getFullYear()
control.hour.value = now.getHours()
control.minute.value = parseInt(now.getMinutes()/5)*5
control.second.value = parseInt(now.getSeconds()/5)*5
can.Action("month", now.getMonth()+1)
can.Action("year", now.getFullYear())
can.Action("hour", now.getHours())
can.Action("minute", parseInt(now.getMinutes()/5)*5)
can.Action("second", parseInt(now.getSeconds()/5)*5)
// 设置组件
can.page.Appends(can, figure.table, [{type: "tr", list: can.core.List(["日", "一", "二", "三", "四", "五", "六"], function(day) {return {text: [day, "th"]}})}])
var tr; function add(day, type) {if (day.getDay() == 0) {tr = can.page.Append(can, figure.table, [{type: "tr"}]).tr}
can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(day).split(" ")[0] == can.base.Time(now).split(" ")[0]? "select": type],
dataset: {date: day.getTime()}, click: function(event) {
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: "tr"}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? "select": type],
dataset: {date: day.getTime()}, onclick: function(event) {
set(now = new Date(parseInt(event.target.dataset.date)))
can.page.Remove(can, figure.fieldset)
},
}])
}
@ -68,7 +55,8 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) {add(day, "last")}
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
return now
}; show(now)
}} }, [])
can.onlayout.figure(can, event); return now
}; show(now)
}} }, ["/plugin/input/date.css"])

View File

@ -1,21 +1,18 @@
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target, figure) { function run() {
var msg = can.request(event, can.Option())
item.run(event, ["action", "inputs", item.name, target.value], function(msg) {
if (!msg.append) { return }
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target) {
can.run(event, ["action", "inputs", item.name, target.value], function(msg) {
if (msg.Length() == 0) { return can.page.Remove(can, can._target) }
can.onappend._action(can, ["关闭", "清空"], figure.action, {
"关闭": function(event) { can.page.Remove(can, figure.fieldset) },
can.onappend._action(can, ["关闭", "清空"], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },
"清空": function(event) { target.value = "" },
})
can.onappend.table(can, msg, function(value, key, index, line) {
return {type: "td", inner: value, onclick: function() {
target.value = value, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
can.onappend.table(can, msg, function(value) {
return {text: [value, "td"], onclick: function() {
target.value = value, can.page.Remove(can, can._target)
}}
}, figure.output)
can.onlayout.figure(can, figure, event)
}, true)
}; run() }}, }, [])
}), can.Status("count", msg.Length())
can.onlayout.figure(can, event)
})
}}})

View File

@ -1,16 +1,15 @@
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target, figure) {
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target) {
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
can.onappend._action(can, ["关闭", "清空"], figure.action, {
"关闭": function(event) { can.page.Remove(can, figure.fieldset) },
can.onappend._action(can, ["关闭", "清空"], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },
"清空": function(event) { target.value = "" },
})
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first);
var china_chart = echarts.init(can.page.Append(can, can._output, [{type: "div", style: {width: "600px", height: "400px"}}]).first)
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
target.value = params.name, can.page.Remove(can, figure.fieldset)
})
can.onlayout.figure(can, figure, event)
target.value = params.name, can.page.Remove(can, can._target)
}), can.Status("count", 34)
can.onlayout.figure(can, event)
})
}}, })

View File

@ -1,18 +1,20 @@
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
var list = []; can.onengine.listen(can, "action.resize", function(width, height) {
can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() {
can.onimport._init(can, msg, list, cb, target)
})
})
can.page.Modify(can, can._target, {style: {"max-width": can.Conf("width")}})
var width = can.Conf("width"), height = can.Conf("height")
can.onimport.resize = function(can, width, height) {
can.Conf({width: width, height: height})
can.onimport._init(can, msg, list, cb, target)
}, can.onengine.listen(can, "action.resize", function(width, height) {
can.onimport.resize(can, width, height)
})
can.ui = can.page.Appends(can, target, [
{type: "table", list: [{type: "tr", list: [
{view: ["void", "table"], list: [{type: "tr", list: [
{type: "td", list: [{view: "project", style: {"max-height": height-240, display: "none"}} ]},
{type: "td", list: [{view: "profile", style: {"max-height": height-240}, list: [
{view: ["content", "table"]},
]}], style: {"min-width": width-60, "max-width": width-30}},
]}], style: {"min-width": width-80}},
]}, ]},
{view: "search", style: {display: "none"}, list: [{view: "action", list: [
{input: ["word", function(event) {
@ -130,7 +132,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
}).join(""))
p.prefix && can.core.Item(p.prefix, function(pre, type) {
if (line.trim().startsWith(pre)) { line = wrap(type, line) }
if (line.trim().indexOf(pre) == 0) { line = wrap(type, line) }
})
p.suffix && can.core.Item(p.suffix, function(pre, type) {
if (line.endsWith(pre)) { line = wrap(type, line) }

View File

@ -8,6 +8,7 @@ fieldset.editor>div.output input.editor {
caret-color:yellow;
min-width:480px;
display:none;
width:-webkit-fill-available;
}
fieldset.editor>div.output input.editor.insert {
caret-color:yellow;

View File

@ -296,7 +296,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
selectLine: function(can, line, item) {
can.page.Modify(can, can.ui.editor, {className: "editor "+can.mode, value: item.innerText, style: {
height: item.offsetHeight, width: can.Conf("width")-180,
height: item.offsetHeight,
left: item.offsetLeft, top: item.offsetTop,
}})
can.page.Modify(can, can.ui.command, {className: "command "+can.mode, value: item.innerText, style: {

View File

@ -5,7 +5,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onmotion.hidden(can, can._action)
can.onimport[can.Option("scale")||"week"](can, msg)
},
_show: function(can, msg, head, list, key, get, set) {
_content: function(can, msg, head, list, key, get, set) {
var begin_time = can.base.Date(can.base.Time(can.Option("begin_time")))
var hash = {}; msg.Table(function(value, index) {
var k = key(can.base.Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value])
@ -38,10 +38,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
draggable: time != undefined, ondragstart: function(event) { var target = event.target; can.drop = function(event, td, time) {
can.onaction.modifyTask(event, can, task, "begin_time", time+task.begin_time.slice(time.length), task.begin_time)
can.run()
} },
onclick: function(event) { can.onimport._profile(can, msg, task) },
_init: function(target) { can.task || target.click() },
title: can.onexport.title(can, task),
} }, title: can.onexport.title(can, task),
_init: function(target) {
var item = can.onappend.item(can, "item", {nick: task.name+":"+task.text}, function() {
can.onimport._profile(can, msg, task)
can.core.Timer(10, function() { can.onmotion.select(can, can.ui.content, "td", target.parentNode) })
}, function() {
}, can.ui.project); can.task || item.click()
target.onclick = function(event) { item.click() }
},
}
}),
} },
@ -66,11 +73,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
var table = can.page.Appends(can, can.ui.profile, [{view: ["content", "table"], list: [{th: ["key", "value"]}]}]).first
can.core.Item(task, function(key, value) { can.page.Append(can, table, [{td: [key, key == "pod"? ('<a href="'+can.user.MergeURL(can, {pod: value})+'" target="_blank">'+value+'</a>'): value],
onclick: function(event) { if (event.target.type == "button") { var name = event.target.name
var cb = can.onaction[name]; if (typeof cb == "function") { return cb(event, can, name) }
var msg = can.request(event); can.core.Item(can.task, msg.Option)
can.sup.onaction.input(event, can.sup, name, function(msg) { can.run({}) })
onclick: function(event) { if (event.target.type == "button") {
var msg = can.request(event, can.task)
can.run(event, ["action", event.target.name])
} },
ondblclick: function(event) {
can.onmotion.modify(can, event.target, function(ev, value, old) {
@ -88,7 +93,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
function get(begin_time, col, row, hash) { return hash[list[row]] }
function set(begin_time, col, row) { return can.base.Time(begin_time, "%y-%m-%d ")+list[row] }
can.onimport._show(can, msg, head, list, key, get, set)
can.onimport._content(can, msg, head, list, key, get, set)
},
week: function(can, msg) {
var head = ["hour"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"])
@ -98,7 +103,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
function get(begin_time, col, row, hash) { return hash[col-1+" "+list[row]] }
function set(begin_time, col, row) { return can.base.Time(can.base.TimeAdd(begin_time, -begin_time.getDay()+col-1), "%y-%m-%d ")+list[row] }
can.onimport._show(can, msg, head, list, key, get, set)
can.onimport._content(can, msg, head, list, key, get, set)
},
month: function(can, msg) {
var head = ["order"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"])
@ -118,21 +123,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
return key(day)
}
can.onimport._show(can, msg, head, list, key, get, set)
can.onimport._content(can, msg, head, list, key, get, set)
},
year: function(can, msg) {
var head = ["month"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]);
var list = [0]; for (var i = 1; i < 13; i++) { list.push(i) }
function key(time) { return can.base.Time(time, "%y-%m ")+time.getDay() }
function get(begin_time, col, row, hash) {
return hash[begin_time.getFullYear()+"-"+can.base.Number(row, 2)+" "+(col-1)]
}
function set(begin_time, col, row) {
return begin_time.getFullYear()+"-"+can.base.Number(list[row], 2)
}
function get(begin_time, col, row, hash) { return hash[begin_time.getFullYear()+"-"+can.base.Number(row, 2)+" "+(col-1)] }
function set(begin_time, col, row) { return begin_time.getFullYear()+"-"+can.base.Number(list[row], 2) }
can.onimport._show(can, msg, head, list, key, get, set)
can.onimport._content(can, msg, head, list, key, get, set)
},
long: function(can, msg) {
var begin_time = can.base.Date(can.base.Time(can.Option("begin_time")))
@ -142,14 +143,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
var list = [0]; for (var i = 1; i < 13; i++) { list.push(i) }
function key(time) { return can.base.Time(time, "%y-%m") }
function get(begin_time, col, row, hash) {
return hash[begin+col-1+"-"+can.base.Number(row, 2)]
}
function set(begin_time, col, row) {
return begin+col-1+"-"+can.base.Number(row, 2)
}
function get(begin_time, col, row, hash) { return hash[begin+col-1+"-"+can.base.Number(row, 2)] }
function set(begin_time, col, row) { return begin+col-1+"-"+can.base.Number(row, 2) }
can.onimport._show(can, msg, head, list, key, get, set)
can.onimport._content(can, msg, head, list, key, get, set)
},
}, ["/plugin/local/team/plan.css"])
Volcanos("onaction", {help: "组件交互", list: [

View File

@ -1,6 +1,6 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.path = can.request({}), can.list = []
msg.Table(function(value) { if (value.path.startsWith("/local")) { return }
msg.Table(function(value) { if (value.path.indexOf("/local") == 0) { return }
value.path.endsWith("/")? can.path.Push(value): can.list.push(value)
})
@ -30,8 +30,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.Status("begin", begin), can.Status("limit", limit), can.Status("total", can.list.length)
},
_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 p = location.href.indexOf("http") == 0? "": "http://localhost:9020"
path = path.indexOf("http") == 0? path: p+can.base.Path("/share/local", " "+(can._msg.Option("prefix")||""), path)
return path
},
file: function(can, path, index) { path = can.onimport._file(can, path, index)

View File

@ -51,7 +51,7 @@ fieldset ul.story[data-type=premenu] li:hover {
background:cyan;
}
fieldset fieldset.story {
fieldset.plugin.word fieldset.story {
margin:10px; clear:both; float:left;
border:0;
box-shadow: 4px 4px 10px 1px #626bd0;

View File

@ -111,23 +111,15 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
})
},
"最大": function(event, can) {
if (event.ctrlKey) {
layout.left = 0, layout.top = 40
layout.width = window.innerWidth/2
layout.height = window.innerHeight/2
can.onaction._resize(sub, layout)
return
}
can.page.Modify(can, can._target, {style: { margin: 0,
left: 0, top: 0, width: window.innerWidth, height: window.innerHeight
}})
layout.left = 0, layout.top = 40
layout.width = window.innerWidth-40
layout.height = window.innerHeight-60
if (can.user.isMobile) {
if (window.innerWidth > window.innerHeight) {
layout.top = 0
}
}
can.onaction._resize(sub, layout)
var sub = can.core.Value(can, "_outputs.-1")
var cb = can.core.Value(can, "_outputs.-1.onimport.resize")
sub && cb && can.core.CallFunc(cb, {can: sub,
width: window.innerWidth, height: window.innerHeight,
})
},
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -27,8 +27,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
var msg = can.sup.request(event, can.Option());
can.run(event, ["action", "modify", key == "value"? line.key: key, value], function(msg) { }, true)
})
}, onmouseover: function(event) {
can.user.toast(can, index+1+"/"+array.length)
}}
},
_board: function(can, msg) {

View File

@ -17,22 +17,23 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
meta.libs = Config.libs, meta.volcano = Config.volcano
// 预加载
var Preload = [Config.volcano]; Config.panes.forEach(function(pane) {
Preload = Preload.concat(pane.list = pane.list || ["/pane/"+pane.name+".css", "/pane/"+pane.name+".js"])
}); Preload = Preload.concat(Config.plugin)
var Preload = [Config.volcano]
for (var i = 0; i < Config.panes.length; i++) { var pane = Config.panes[i]
pane && (Preload = Preload.concat(pane.list = pane.list || ["/pane/"+pane.name+".css", "/pane/"+pane.name+".js"]))
}
Preload = Preload.concat(Config.plugin)
// 根模块
name = Config.name, can = {_follow: Config.name, _target: document.body}
libs = Preload.concat(Config.main.list, Config.libs), cb = function(can) {
window.can = can
can.onengine._init(can, can.Conf(Config), Config.panes, function(msg) { can.base.Log(name, "run", can)
var list = []; document.body.onresize = function() { can.core.Delay(list, 100, function() {
can.onlayout._init(can, can._target, can._width = window.innerWidth, can._height = window.innerHeight)
}) }, document.body.onresize()
document.body.onresize = function() { can.onlayout._init(can, can._target) }
}, can._target)
}
}
can = can || {}, can.__proto__ = {__proto__: Volcanos.meta, _name: name, _load: function(name, cb) {
var proto = {_name: name, _load: function(name, cb) {
// 加载缓存
var cache = meta.cache[name] || []; for (list.reverse(); list.length > 0; list) {
var sub = list.pop(); sub != can && cache.push(sub)
@ -66,6 +67,8 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
}
can = can || {}; for (var k in proto) { can[k] = proto[k] }
if (_can_name) {
meta.cache[_can_name] = meta.cache[_can_name] || []
meta.cache[_can_name].push(can)

View File

@ -18,7 +18,7 @@ Volcanos("chrome", {
msg.Push("time", can.base.Time())
msg.Push("type", "img")
if (item.src.startsWith("data:image")) {
if (item.src.indexOf("data:image") == 0) {
msg.Push("name", item.src.slice(item.src.length-20))
} else {
msg.Push("name", ls[ls.length-1]||"image.jpg")

View File

@ -34,7 +34,7 @@ Page({
input.action = input.action || input.value
input.value == "auto" && (input.value = "")
input.value = input.value || kit.Value(line, "feature.trans."+input.name)
if (input.value && input.value.startsWith("@")) {
if (input.value && input.value.indexOf("@") == 0) {
input.value = ""
}
if (input._input == "select") {

View File

@ -38,13 +38,13 @@ Page({
this.data.insert = app.data.insert.list
var p = app.data.insert.input.action
if (p.startsWith("@")) {
if (p.indexOf("@") == 0) {
var cb = this.plugin[p.slice(1,-1)]; cb && cb(this)
}
var cb = this.plugin[p]; cb && cb(this)
kit.List(app.data.insert.list, function(item) {
item.action = item.action || item.value
item.value && item.value.startsWith("@") && (item.value = "")
item.value && item.value.indexOf("@") == 0 && (item.value = "")
app.data.insert.data[item.name] = item.value
})
console.log("page", "insert", options)