mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt header
This commit is contained in:
parent
c6459616a1
commit
d5617cedad
14
frame.js
14
frame.js
@ -918,5 +918,19 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can, targe
|
|||||||
can.page.Modify(can, target, {style: {width: begin+=space}})
|
can.page.Modify(can, target, {style: {width: begin+=space}})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
autosize: function(can, target, max, min) {
|
||||||
|
can.page.Modify(can, target, {
|
||||||
|
onfocus: function(event) {
|
||||||
|
can.onmotion.resize(can, target, max, 10)
|
||||||
|
}, onmouseenter: function(event) {
|
||||||
|
can.onmotion.resize(can, target, max, 10)
|
||||||
|
}, onmouseleave: function(event) {
|
||||||
|
can.onmotion.resize(can, target, min, 5)
|
||||||
|
}, onblur: function(event) {
|
||||||
|
can.onmotion.resize(can, target, min, 5)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -232,6 +232,7 @@ div.carte {
|
|||||||
color:white;
|
color:white;
|
||||||
padding:4px;
|
padding:4px;
|
||||||
z-index:10;
|
z-index:10;
|
||||||
|
min-width:120px;
|
||||||
}
|
}
|
||||||
div.carte div.item {
|
div.carte div.item {
|
||||||
padding:3px 12px;
|
padding:3px 12px;
|
||||||
|
@ -13,11 +13,11 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
|
|||||||
"/plugin/input/date.js",
|
"/plugin/input/date.js",
|
||||||
"/plugin/story/trend.js",
|
"/plugin/story/trend.js",
|
||||||
"/plugin/story/spide.js",
|
"/plugin/story/spide.js",
|
||||||
"/plugin/local/team/plan.js",
|
"/plugin/local/code/inner.js",
|
||||||
|
"/plugin/local/code/vimer.js",
|
||||||
|
"/plugin/local/wiki/draw/path.js",
|
||||||
"/plugin/local/wiki/draw.js",
|
"/plugin/local/wiki/draw.js",
|
||||||
"/plugin/local/wiki/word.js",
|
"/plugin/local/wiki/word.js",
|
||||||
"/plugin/local/code/vimer.js",
|
"/plugin/local/team/plan.js",
|
||||||
"/plugin/local/code/inner.js",
|
|
||||||
"/plugin/local/wiki/draw/path.js"
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
162
panel/Header.js
162
panel/Header.js
@ -1,4 +1,12 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
|
if (can.user.Search(can, "grant")) {
|
||||||
|
if (can.user.confirm("grant "+can.user.Search(can, "grant"))) {
|
||||||
|
can.run(event, ["action", "grant", "space", can.user.Search(can, "grant")])
|
||||||
|
}
|
||||||
|
can.user.Search(can, "grant", "")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
can._trans = {
|
can._trans = {
|
||||||
"river": "菜单",
|
"river": "菜单",
|
||||||
"search": "搜索",
|
"search": "搜索",
|
||||||
@ -14,11 +22,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
"usernick": "修改昵称",
|
"usernick": "修改昵称",
|
||||||
"logout": "退出登录",
|
"logout": "退出登录",
|
||||||
}
|
}
|
||||||
|
|
||||||
can.onmotion.clear(can)
|
can.onmotion.clear(can)
|
||||||
can.onimport._title(can, msg, target)
|
can.onimport._title(can, msg, target)
|
||||||
can.onimport._state(can, msg, target)
|
can.onimport._state(can, msg, target)
|
||||||
can.onimport._background(can, msg, target)
|
|
||||||
can.onimport._search(can, msg, target)
|
can.onimport._search(can, msg, target)
|
||||||
|
can.onimport._background(can, msg, target)
|
||||||
|
// can.onimport._daemon(can, msg, target)
|
||||||
can.onimport._agent(can, msg, target)
|
can.onimport._agent(can, msg, target)
|
||||||
can.onimport._menu(can, msg, target)
|
can.onimport._menu(can, msg, target)
|
||||||
|
|
||||||
@ -26,10 +36,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can.page.Modify(can, can._output, {onmouseover: function(event) {
|
can.page.Modify(can, can._output, {onmouseover: function(event) {
|
||||||
can.menu && can.page.Remove(can, can.menu.first)
|
can.menu && can.page.Remove(can, can.menu.first)
|
||||||
}})
|
}})
|
||||||
|
|
||||||
can.core.Timer(1000, function() {
|
|
||||||
can.onimport._daemon(can, msg, target)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
_title: function(can, msg, target) {
|
_title: function(can, msg, target) {
|
||||||
can.user.title(can.user.Search(can, "title")||can.user.Search(can, "pod"))
|
can.user.title(can.user.Search(can, "title")||can.user.Search(can, "pod"))
|
||||||
@ -48,24 +54,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
}}])
|
}}])
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
_background: function(can, msg) {
|
|
||||||
!can.user.isLocalFile && can.onlayout.background(can, msg.Option("background"), document.body)
|
|
||||||
},
|
|
||||||
_search: function(can, msg, target) {
|
_search: function(can, msg, target) {
|
||||||
!can.user.isMobile && (can.search = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
|
var ui = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
|
||||||
can.onkeypop.input(event, can); switch (event.key) {
|
can.onkeypop.input(event, can); switch (event.key) {
|
||||||
case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break
|
case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break
|
||||||
}
|
}
|
||||||
}, onfocus: function(event) {
|
}}] }]); can.onmotion.autosize(can, ui.input, 240, 120)
|
||||||
can.onmotion.resize(can, event.target, 240, 10)
|
can.user.isMobile && can.page.Modify(can, ui.first, {style: {float: "right"}})
|
||||||
}, onmouseenter: function(event) {
|
},
|
||||||
can.onmotion.resize(can, event.target, 240, 10)
|
_background: function(can, msg) {
|
||||||
}, onmouseleave: function(event) {
|
!can.user.isLocalFile && can.onlayout.background(can, msg.Option("background"), document.body)
|
||||||
can.onmotion.resize(can, event.target, 120, 5)
|
},
|
||||||
}, onblur: function(event) {
|
_daemon: function(can, msg, target) {
|
||||||
can.onmotion.resize(can, event.target, 120, 5)
|
can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||""}, function(event, msg, cmd, arg) { if (!msg) { return }
|
||||||
},
|
can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) {
|
||||||
}] }]).input)
|
msg.Reply()
|
||||||
|
})
|
||||||
|
})
|
||||||
},
|
},
|
||||||
_agent: function(can, msg, target) {
|
_agent: function(can, msg, target) {
|
||||||
if (can.user.isMobile) {
|
if (can.user.isMobile) {
|
||||||
@ -81,39 +86,34 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
},
|
},
|
||||||
_menu: function(can, msg, target) {
|
_menu: function(can, msg, target) {
|
||||||
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, "pod")? ["header", "river"]:
|
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, "pod")? ["header", "river"]:
|
||||||
["header", ["setting", "black", "white", "print", "clear", "pack"]], function(event, item) {
|
["header", ["setting", "black", "white", "print", "pack"]], function(event, item) {
|
||||||
can.core.CallFunc([can.onaction, item], [event, can, item])
|
can.core.CallFunc([can.onaction, item], [event, can, item])
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
_daemon: function(can, msg, target) {
|
|
||||||
can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||""}, function(event, msg, cmd, arg) { if (!msg) { return }
|
|
||||||
can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) {
|
|
||||||
msg.Reply()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
_weixin: function(can, msg) { can.run({}, ["action", "agent"], function(msg) {
|
_weixin: function(can, msg) { can.run({}, ["action", "agent"], function(msg) {
|
||||||
can.require(["https://res.wx.qq.com/open/js/jweixin-1.6.0.js"], function(can) {
|
can.require(can.base.Obj(msg.Option("script")), function(can) {
|
||||||
wx.config({debug: msg.Option("debug") == "true", jsApiList: can.core.Item({
|
wx.config({debug: msg.Option("debug") == "true",
|
||||||
scanQRCode: function(cb) { wx.scanQRCode({needResult: cb? 1: 0, scanType: ["qrCode","barCode"], success: function (res) {
|
|
||||||
typeof cb == "function" && cb(res.resultStr)
|
|
||||||
} }) },
|
|
||||||
getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) {
|
|
||||||
typeof cb == "function" && cb({type: "gcj02", name: "当前位置", text: "当前位置", latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) })
|
|
||||||
} }) },
|
|
||||||
openLocation: function(msg) { wx.openLocation({
|
|
||||||
latitude: parseInt(msg.Option("latitude"))/100000,
|
|
||||||
longitude: parseInt(msg.Option("longitude"))/100000,
|
|
||||||
name: msg.Option("name"), address: msg.Option("text"),
|
|
||||||
scale: msg.Option("scale")||14, infoUrl: msg.Option("link"),
|
|
||||||
}) },
|
|
||||||
chooseImage: function(cb, count) { wx.chooseImage({count: count||9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (res) {
|
|
||||||
typeof cb == "function" && cb(res.localIds)
|
|
||||||
} }) },
|
|
||||||
}, function(key, value) { return can.user.agent[key] = value, key }),
|
|
||||||
nonceStr: msg.Option("noncestr"), timestamp: msg.Option("timestamp"),
|
|
||||||
appId: msg.Option("appid"), signature: msg.Option("signature"),
|
appId: msg.Option("appid"), signature: msg.Option("signature"),
|
||||||
|
nonceStr: msg.Option("noncestr"), timestamp: msg.Option("timestamp"),
|
||||||
|
|
||||||
|
jsApiList: can.core.Item({
|
||||||
|
scanQRCode: function(cb) { wx.scanQRCode({needResult: cb? 1: 0, scanType: ["qrCode","barCode"], success: function (res) {
|
||||||
|
typeof cb == "function" && cb(res.resultStr)
|
||||||
|
} }) },
|
||||||
|
getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) {
|
||||||
|
typeof cb == "function" && cb({type: "gcj02", name: "当前位置", text: "当前位置", latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) })
|
||||||
|
} }) },
|
||||||
|
openLocation: function(msg) { wx.openLocation({
|
||||||
|
latitude: parseInt(msg.Option("latitude"))/100000,
|
||||||
|
longitude: parseInt(msg.Option("longitude"))/100000,
|
||||||
|
name: msg.Option("name"), address: msg.Option("text"),
|
||||||
|
scale: msg.Option("scale")||14, infoUrl: msg.Option("link"),
|
||||||
|
}) },
|
||||||
|
chooseImage: function(cb, count) { wx.chooseImage({count: count||9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (res) {
|
||||||
|
typeof cb == "function" && cb(res.localIds)
|
||||||
|
} }) },
|
||||||
|
}, function(key, value) { return can.user.agent[key] = value, key }),
|
||||||
})
|
})
|
||||||
}) })
|
}) })
|
||||||
},
|
},
|
||||||
@ -125,16 +125,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
time: function(can, target) { can.onlayout.topic(can)
|
time: function(can, target) { can.onlayout.topic(can)
|
||||||
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
|
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
|
||||||
},
|
},
|
||||||
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...
|
menu: function(can, cmds, cb) { // type item...
|
||||||
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
|
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
|
||||||
if (!item) {
|
if (typeof item == "string") {
|
||||||
|
|
||||||
} else if (typeof item == "string") {
|
|
||||||
return {view: ["menu", "div", item], onclick: function(event) {
|
return {view: ["menu", "div", item], onclick: function(event) {
|
||||||
typeof cb == "function" && cb(event, item)
|
typeof cb == "function" && cb(event, item)
|
||||||
}}
|
}}
|
||||||
@ -149,19 +142,25 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
}
|
}
|
||||||
}) }]).first
|
}) }]).first
|
||||||
},
|
},
|
||||||
|
background: function(event, can, url) {
|
||||||
|
can.run(event, ["action", "background", url], function(msg) {
|
||||||
|
can.onimport._background(can, msg)
|
||||||
|
})
|
||||||
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
function init() { can.run({}, [], function(msg) {
|
function init() { can.run({}, [], function(msg) {
|
||||||
can.Conf("username", msg.Option("user.nick")||msg.Option("user.name"))
|
can.Conf("username", msg.Option("user.nick")||msg.Option("user.name"))
|
||||||
|
|
||||||
can.onimport._init(can, msg, list, function(msg) {
|
can.onimport._init(can, msg, list, function(msg) {
|
||||||
can.onengine.listen(can, "storm.select", function(msg, river, storm) {
|
can.onengine.listen(can, "storm.select", function(msg, river, storm) {
|
||||||
can.Conf("river", river), can.Conf("storm", storm)
|
can.Conf("river", river), can.Conf("storm", storm)
|
||||||
})
|
})
|
||||||
|
|
||||||
can.run(msg._event, ["search", "Search.onaction._init"])
|
can.run(msg._event, ["search", "Footer.onaction._init"])
|
||||||
can.run(msg._event, ["search", "Action.onaction._init"])
|
can.run(msg._event, ["search", "Action.onaction._init"])
|
||||||
can.run(msg._event, ["search", "River.onaction._init"])
|
can.run(msg._event, ["search", "River.onaction._init"])
|
||||||
can.run(msg._event, ["search", "Footer.onaction._init"])
|
can.run(msg._event, ["search", "Search.onaction._init"])
|
||||||
typeof cb == "function" && cb(msg)
|
typeof cb == "function" && cb(msg)
|
||||||
}, can._output)
|
}, can._output)
|
||||||
|
|
||||||
@ -175,13 +174,6 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
|||||||
|
|
||||||
can.onlayout.topic(can)
|
can.onlayout.topic(can)
|
||||||
can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) {
|
can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) {
|
||||||
if (can.user.Search(can, "auth")) {
|
|
||||||
if (can.user.confirm("auth "+can.user.Search(can, "auth"))) {
|
|
||||||
can.run(event, ["action", "auth", "space", can.user.Search(can, "auth")])
|
|
||||||
}
|
|
||||||
can.user.Search(can, "auth", "")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init)
|
msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -192,28 +184,16 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
|||||||
})
|
})
|
||||||
can.user.jumps(can.user.MergeURL(can, args, true))
|
can.user.jumps(can.user.MergeURL(can, args, true))
|
||||||
},
|
},
|
||||||
username: function(event, can) {
|
carte: function(event, can, list, cb) {
|
||||||
can.onaction.carte(event, can, ["shareuser", "usernick", "logout"])
|
can.menu && can.page.Remove(can, can.menu.first)
|
||||||
|
can.menu = can.user.carte(event, can, can.onaction, list, cb)
|
||||||
|
can.page.Modify(can, can.menu.first, {style: {top: can._target.offsetHeight, left: event.target.offsetLeft}})
|
||||||
|
return can.menu
|
||||||
},
|
},
|
||||||
shareuser: function(event, can) {
|
|
||||||
can.user.share(can, can.request(event), ["action", "share", "type", "login"])
|
|
||||||
},
|
|
||||||
usernick: function(event, can) {
|
|
||||||
can.user.input(event, can, [{_input: "text", name: "usernick", value: can.Conf("username")}], function(ev, button, data, list, args) {
|
|
||||||
can.run(event, ["usernick", list[0]], function(msg) {
|
|
||||||
can.page.Select(can, can._output, "div.username", function(item) {
|
|
||||||
can.page.Modify(can, item, can.Conf("username", list[0]))
|
|
||||||
}), can.user.toast(can, "修改成功")
|
|
||||||
}, true)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
logout: function(event, can) { can.user.logout(can) },
|
|
||||||
|
|
||||||
river: function(event, can) { can.onaction.River(can) },
|
river: function(event, can) { can.onaction.River(can) },
|
||||||
black: function(event, can, button) { can.onlayout.topic(can, button) },
|
black: function(event, can, button) { can.onlayout.topic(can, button) },
|
||||||
white: 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") },
|
print: function(event, can, button) { can.onlayout.topic(can, "white print") },
|
||||||
clear: function(event, can, button) { can.onimport.background(event, can, "") },
|
|
||||||
pack: function(event, can) {
|
pack: function(event, can) {
|
||||||
can.user.input(event, can, [
|
can.user.input(event, can, [
|
||||||
{_input: "text", name: "name", value: "demo"},
|
{_input: "text", name: "name", value: "demo"},
|
||||||
@ -232,11 +212,25 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
carte: function(event, can, list, cb) {
|
|
||||||
can.menu && can.page.Remove(can, can.menu.first)
|
username: function(event, can) {
|
||||||
can.menu = can.user.carte(event, can, can.onaction, list, cb)
|
can.onaction.carte(event, can, ["shareuser", "usernick", "clear", "logout"])
|
||||||
can.page.Modify(can, can.menu.first, {style: {top: can._target.offsetHeight, left: event.target.offsetLeft}})
|
can.onlayout.figure(event, can, can.menu.first)
|
||||||
},
|
},
|
||||||
|
shareuser: function(event, can) {
|
||||||
|
can.user.share(can, can.request(event), ["action", "share", "type", "login"])
|
||||||
|
},
|
||||||
|
usernick: function(event, can) {
|
||||||
|
can.user.input(event, can, [{_input: "text", name: "usernick", value: can.Conf("username")}], function(ev, button, data, list, args) {
|
||||||
|
can.run(event, ["usernick", list[0]], function(msg) {
|
||||||
|
can.page.Select(can, can._output, "div.username", function(item) {
|
||||||
|
can.page.Modify(can, item, can.Conf("username", list[0]))
|
||||||
|
}), can.user.toast(can, "修改成功")
|
||||||
|
}, true)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
clear: function(event, can, button) { can.onimport.background(event, can, "") },
|
||||||
|
logout: function(event, can) { can.user.logout(can) },
|
||||||
|
|
||||||
River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) },
|
River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) },
|
||||||
Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) },
|
Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) },
|
||||||
|
4
proto.js
4
proto.js
@ -23,7 +23,7 @@ var Volcanos = shy("火山架", {args: {}, pack: {}, libs: [], cache: {}}, [], f
|
|||||||
|
|
||||||
// 根模块
|
// 根模块
|
||||||
name = Config.name, can = {_follow: Config.name, _target: document.body}
|
name = Config.name, can = {_follow: Config.name, _target: document.body}
|
||||||
libs = Preload.concat(Config.libs, Config.main.list), cb = function(can) {
|
libs = Preload.concat(Config.main.list, Config.libs), cb = function(can) {
|
||||||
can.onengine._init(can, can.Conf(Config), Config.panels, function(msg) { can.base.Log(can.user.title(), "run", can)
|
can.onengine._init(can, can.Conf(Config), Config.panels, function(msg) { can.base.Log(can.user.title(), "run", can)
|
||||||
document.body.onresize = function() { can.onlayout._init(can, can._target) }
|
document.body.onresize = function() { can.onlayout._init(can, can._target) }
|
||||||
}, can._target)
|
}, can._target)
|
||||||
@ -50,7 +50,7 @@ var Volcanos = shy("火山架", {args: {}, pack: {}, libs: [], cache: {}}, [], f
|
|||||||
return // 加载完成
|
return // 加载完成
|
||||||
}
|
}
|
||||||
|
|
||||||
if (libs && libs[0][0] != "/" && libs[0].indexOf("http") == -1) {
|
if (libs && libs[0] && libs[0][0] != "/" && libs[0].indexOf("http") == -1) {
|
||||||
can._require = can._require||[], can._require.push(libs[0])
|
can._require = can._require||[], can._require.push(libs[0])
|
||||||
can.require(libs.slice(1), cb, each)
|
can.require(libs.slice(1), cb, each)
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user