mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
add LICENSE
This commit is contained in:
parent
d2403f6b3d
commit
975a80aa6b
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 码神
|
Copyright (c) 2021 码神
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
14
frame.js
14
frame.js
@ -14,6 +14,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
|
|||||||
}, function() { can.onlayout.topic(can)
|
}, function() { can.onlayout.topic(can)
|
||||||
can.misc.Log(can.user.title(), "run", can)
|
can.misc.Log(can.user.title(), "run", can)
|
||||||
can.base.Copy(can.onengine.river, can.Conf("river"))
|
can.base.Copy(can.onengine.river, can.Conf("river"))
|
||||||
|
can.onmotion._init(can, target), can.onkeypop._init(can, target)
|
||||||
can.onengine.signal(can, "onmain", can.request())
|
can.onengine.signal(can, "onmain", can.request())
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -477,9 +478,11 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
|
|||||||
topic: function(can, topic) { topic && (can._topic = topic)
|
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"))
|
can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, "pod")||can.base.isNight())? "black": "white"))
|
||||||
},
|
},
|
||||||
figure: function(event, can, target) { target = target||can._target
|
figure: function(event, can, target, right) { target = target||can._target; if (!event || !event.target) { return }
|
||||||
if (!event.target) { return }
|
var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight; if (right) {
|
||||||
var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight
|
var left = event.clientX-event.offsetX+event.target.offsetWidth, top = event.clientY-event.offsetY
|
||||||
|
}
|
||||||
|
|
||||||
if (left+target.offsetWidth>window.innerWidth) { left = window.innerWidth - target.offsetWidth }
|
if (left+target.offsetWidth>window.innerWidth) { left = window.innerWidth - target.offsetWidth }
|
||||||
if (top+target.offsetHeight>window.innerHeight) { top = window.innerHeight - target.offsetHeight }
|
if (top+target.offsetHeight>window.innerHeight) { top = window.innerHeight - target.offsetHeight }
|
||||||
|
|
||||||
@ -555,6 +558,11 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
|||||||
float: {
|
float: {
|
||||||
_hash: {},
|
_hash: {},
|
||||||
del: function(can, key) {
|
del: function(can, key) {
|
||||||
|
if (key == "carte") {
|
||||||
|
can.page.Select(can, document.body, "div.carte", function(item) {
|
||||||
|
can.page.Remove(can, item)
|
||||||
|
})
|
||||||
|
}
|
||||||
this._hash[key] && can.page.Remove(can, this._hash[key]._target)
|
this._hash[key] && can.page.Remove(can, this._hash[key]._target)
|
||||||
},
|
},
|
||||||
add: function(can, key, value) {
|
add: function(can, key, value) {
|
||||||
|
@ -3,7 +3,8 @@ Volcanos("page", {help: "网页模块", ClassList: {
|
|||||||
return list.indexOf(key) > -1
|
return list.indexOf(key) > -1
|
||||||
},
|
},
|
||||||
add: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
|
add: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
|
||||||
return obj.className = can.base.AddUniq(list, key).join(" ").trim()
|
var value = can.base.AddUniq(list, key).join(" ").trim()
|
||||||
|
return value != obj.className && (obj.className = value), value
|
||||||
},
|
},
|
||||||
del: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
|
del: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
|
||||||
return obj.className = can.core.List(list, function(value) {
|
return obj.className = can.core.List(list, function(value) {
|
||||||
@ -145,10 +146,11 @@ Volcanos("page", {help: "网页模块", ClassList: {
|
|||||||
|
|
||||||
if (type == "input") {
|
if (type == "input") {
|
||||||
data.type == "button" && (data.value = can.user.trans(can, data.value))
|
data.type == "button" && (data.value = can.user.trans(can, data.value))
|
||||||
data.type == "text" && (data.autocomplete = data.autocomplete||"off")
|
if (data.type == "text") { data.autocomplete = data.autocomplete||"off"
|
||||||
data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(".").pop())
|
data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(".").pop())
|
||||||
data.title = can.user.trans(can, data.title||data.placeholder)
|
data.title = can.user.trans(can, data.title||data.placeholder)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 创建节点
|
// 创建节点
|
||||||
!data.name && item.name && (data.name = item.name)
|
!data.name && item.name && (data.name = item.name)
|
||||||
|
24
lib/user.js
24
lib/user.js
@ -33,9 +33,8 @@ Volcanos("user", {help: "用户操作", agent: {
|
|||||||
|
|
||||||
title: function(text) { return text && (document.title = text), document.title },
|
title: function(text) { return text && (document.title = text), document.title },
|
||||||
topic: function(can, name) {
|
topic: function(can, name) {
|
||||||
|
can.user.isMobile && (name += " mobile") && can.user.isLandscape && (name += " landscape")
|
||||||
can.page.Modify(can, document.body, {className: name})
|
can.page.Modify(can, document.body, {className: name})
|
||||||
can.user.isMobile && can.page.ClassList.add(can, document.body, "mobile")
|
|
||||||
can.user.isMobile && can.page.ClassList.set(can, document.body, "landscape", can.user.isLandscape)
|
|
||||||
},
|
},
|
||||||
trans: function(can, text) { if (typeof text == "function") { text = text.name || "" }
|
trans: function(can, text) { if (typeof text == "function") { text = text.name || "" }
|
||||||
return can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature.trans."+text) || {
|
return can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature.trans."+text) || {
|
||||||
@ -136,21 +135,28 @@ Volcanos("user", {help: "用户操作", agent: {
|
|||||||
can.page.Remove(can, input), can.user.toast(can, text, "复制成功")
|
can.page.Remove(can, input), can.user.toast(can, text, "复制成功")
|
||||||
event.stopPropagation(), event.preventDefault()
|
event.stopPropagation(), event.preventDefault()
|
||||||
},
|
},
|
||||||
carte: function(event, can, meta, list, cb) {
|
carte: function(event, can, meta, list, cb, parent) {
|
||||||
meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return }
|
meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return }
|
||||||
cb = cb||function(ev, item, meta) { var cb = meta[item]; can.base.isFunc(cb) && cb(event, can, item) }
|
cb = cb||function(event, item, meta) { var cb = meta[item]; can.base.isFunc(cb) && cb(event, can, item) }
|
||||||
|
|
||||||
var ui = can.page.Append(can, document.body, [{view: "carte", style: {left: 0, top: 0}, onmouseleave: function(event) {
|
var ui = can.page.Append(can, document.body, [{view: "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) {
|
}, list: can.core.List(list, function(item) {
|
||||||
return {view: "item", list: [{text: can.user.trans(can, item), click: function(event) {
|
return typeof item == "string"? {view: "item", list: [{text: can.user.trans(can, item), click: 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)
|
can.base.isFunc(cb) && cb(event, item, meta)
|
||||||
} }] }
|
}, onmouseenter: function(event) {
|
||||||
|
carte._float && can.page.Remove(can, carte._float._target)
|
||||||
|
} }] }: {view: "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)
|
||||||
|
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, ui._target)
|
}) }] ); can.onlayout.figure(event, can, ui._target)
|
||||||
|
|
||||||
can.onmotion.float.add(can, "carte", ui)
|
var carte = {_target: ui._target, _parent: parent}
|
||||||
return event.stopPropagation(), event.preventDefault(), {_target: ui._target}
|
null && can.onmotion.float.add(can, "carte", carte)
|
||||||
|
return event.stopPropagation(), event.preventDefault(), carte
|
||||||
},
|
},
|
||||||
input: function(event, can, form, cb, button) { // form [ string, array, object, {_input: "select", values: []}
|
input: function(event, can, form, cb, button) { // form [ string, array, object, {_input: "select", values: []}
|
||||||
var msg = can.request(event, can.Option())
|
var msg = can.request(event, can.Option())
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>volcanos</title>
|
<title>volcanos</title>
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/ico" href="favicon.ico">
|
<link rel="shortcut icon" type="image/ico" href="favicon.ico">
|
||||||
<link rel="stylesheet" type="text/css" href="/page/cache.css">
|
<link rel="stylesheet" type="text/css" href="/page/cache.css">
|
||||||
<link rel="stylesheet" type="text/css" href="/page/index.css">
|
<link rel="stylesheet" type="text/css" href="/page/index.css">
|
||||||
|
@ -173,8 +173,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
|||||||
can.user.input(event, can, [
|
can.user.input(event, can, [
|
||||||
{name: "name", value: river},
|
{name: "name", value: river},
|
||||||
], function(event, button, meta, list) {
|
], function(event, button, meta, list) {
|
||||||
var msg = can.request(event)
|
can.user.share(can, can.request(event), [river, "action", "share", "type", can._RIVER, "name", meta.name])
|
||||||
can.user.share(can, msg, [river, "action", "share", "type", can._RIVER, "name", meta.name])
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
"添加用户": function(event, can, button, river) {
|
"添加用户": function(event, can, button, river) {
|
||||||
@ -284,8 +283,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
|||||||
"共享主机": function(event, can, button, river, storm) {
|
"共享主机": function(event, can, button, river, storm) {
|
||||||
can.run(event, ["action", "invite"], function(msg) {
|
can.run(event, ["action", "invite"], function(msg) {
|
||||||
can.user.toast(can, {
|
can.user.toast(can, {
|
||||||
title: "共享主机", content: msg.Result(),
|
title: "共享主机", duration: -1, width: -100,
|
||||||
button: ["close"], duration: -1, width: -100,
|
content: msg.Result(), action: ["close"],
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -39,6 +39,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
|
|||||||
can.base.isFunc(cb) && cb()
|
can.base.isFunc(cb) && cb()
|
||||||
},
|
},
|
||||||
onlogin: function(can, msg) {
|
onlogin: function(can, msg) {
|
||||||
|
can.onappend._action(can, can.Conf("action")||can.onaction.list)
|
||||||
can.ui = can.page.Append(can, can._output, [
|
can.ui = can.page.Append(can, can._output, [
|
||||||
{input: ["word", function(event) { can.onkeypop.input(event, can)
|
{input: ["word", function(event) { can.onkeypop.input(event, can)
|
||||||
if (event.key == "Escape") { can.onmotion.hide(can) }
|
if (event.key == "Escape") { can.onmotion.hide(can) }
|
||||||
|
@ -61,7 +61,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
|
|||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数", "共享工具", "刷新数据", "复制数据", "下载数据", "清空数据"], _init: function(can, msg, list, cb, target) {
|
Volcanos("onaction", {help: "交互操作", list: [
|
||||||
|
"保存参数", "清空参数", "共享工具", "删除工具", "刷新数据", "清空数据", [
|
||||||
|
"其它", "复制数据", "下载数据", [
|
||||||
|
"其它", "复制数据", "下载数据",
|
||||||
|
], [
|
||||||
|
"其它", "复制数据", "下载数据",
|
||||||
|
],
|
||||||
|
]], _init: function(can, msg, list, cb, target) {
|
||||||
},
|
},
|
||||||
"保存参数": function(event, can) { var meta = can.Conf()
|
"保存参数": function(event, can) { var meta = can.Conf()
|
||||||
var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id})
|
var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id})
|
||||||
@ -73,7 +80,7 @@ Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数
|
|||||||
can.page.Select(can, can._option, '.args', function(item) { return item.value = "" })
|
can.page.Select(can, can._option, '.args', function(item) { return item.value = "" })
|
||||||
},
|
},
|
||||||
"共享工具": function(event, can) { var meta = can.Conf()
|
"共享工具": function(event, can) { var meta = can.Conf()
|
||||||
can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) {
|
var ui = can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) {
|
||||||
var msg = can.request(event, {arg: [
|
var msg = can.request(event, {arg: [
|
||||||
"type", "field",
|
"type", "field",
|
||||||
"name", list[0], "text", JSON.stringify(can.Pack([], true)),
|
"name", list[0], "text", JSON.stringify(can.Pack([], true)),
|
||||||
@ -81,6 +88,10 @@ Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数
|
|||||||
]})
|
]})
|
||||||
can.search(event, ["Header.onaction.share"])
|
can.search(event, ["Header.onaction.share"])
|
||||||
})
|
})
|
||||||
|
can.onlayout.figure(event, can, ui._target, true)
|
||||||
|
},
|
||||||
|
"删除工具": function(event, can) {
|
||||||
|
can.page.Remove(can, can._target)
|
||||||
},
|
},
|
||||||
"刷新数据": function(event, can) { var meta = can.Conf()
|
"刷新数据": function(event, can) { var meta = can.Conf()
|
||||||
can.onappend._output(can, meta, {}, can.Pack([], true))
|
can.onappend._output(can, meta, {}, can.Pack([], true))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user