mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
add share
This commit is contained in:
parent
efd69415a2
commit
6d3e088f3a
26
frame.js
26
frame.js
@ -35,6 +35,8 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
|
||||
},
|
||||
|
||||
search: function(event, can, msg, pane, cmds, cb) {
|
||||
can.base.Log(can._name, "search", cmds)
|
||||
|
||||
var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) {
|
||||
fun && (sub = mod, mod = fun, fun = mod[value], key = value)
|
||||
}); if (!sub || !mod || !fun) { can.base.Warn("not found", cmds[1]); return }
|
||||
@ -101,9 +103,6 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
|
||||
}},
|
||||
"project": {name: "研发群", storm: {
|
||||
"studio": {name: "研发 studio", action: [
|
||||
{name: "route", help: "路由器", index: "web.route"},
|
||||
{name: "tmux", help: "命令行", index: "web.code.tmux.session"},
|
||||
{name: "inner", help: "编辑器", index: "web.code.inner", args: ["src/", "main.go"]},
|
||||
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]},
|
||||
{name: "repos", help: "代码库", index: "web.code.git.status"},
|
||||
{name: "total", help: "统计量", index: "web.code.git.total"},
|
||||
@ -420,27 +419,24 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
|
||||
})
|
||||
|
||||
can.page.Select(can, target, ["fieldset.left", "fieldset.right"], function(field, index) {
|
||||
var border = field.offsetHeight - field.clientHeight
|
||||
can.page.Modify(can, field, {style: {height: height-4}})
|
||||
can.page.Modify(can, field, {style: {height: height}})
|
||||
|
||||
can.page.Select(can, field, "div.output", function(output) {
|
||||
var border = output.offsetHeight - output.clientHeight
|
||||
can.page.Modify(can, output, {style: {height: height-26}})
|
||||
can.page.Modify(can, output, {style: {height: height-32}})
|
||||
})
|
||||
|
||||
width -= field.offsetWidth
|
||||
})
|
||||
|
||||
can.onengine.trigger(can, can.request(event, {width: width, height: height}), "resize")
|
||||
|
||||
can.Action._width = width, can.Action._height = height
|
||||
|
||||
if (can.user.isMobile) { return }
|
||||
can.page.Select(can, target, ["fieldset.middle"], function(field, index) {
|
||||
var border = field.offsetHeight - field.clientHeight
|
||||
can.page.Modify(can, field, {style: {height: height-border*2}})
|
||||
can.page.Modify(can, field, {style: {height: height}})
|
||||
})
|
||||
can.page.Select(can, target, ["fieldset.middle>div.output"], function(output) {
|
||||
var border = output.offsetHeight - output.clientHeight
|
||||
can.page.Modify(can, output, {style: {height: height-border*2-14}})
|
||||
can.page.Modify(can, output, {style: {height: height}})
|
||||
})
|
||||
|
||||
can.core.List(can.onlayout.resize.list, function(item) {
|
||||
@ -498,11 +494,15 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
|
||||
},
|
||||
_mode: {
|
||||
normal: {
|
||||
j: function(event, can, target) { target.scrollBy(0, 30) },
|
||||
j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) },
|
||||
k: function(event, can, target) { target.scrollBy(0, -30) },
|
||||
|
||||
b: function(event, can, target) { can.run(event, ["search", "Header.onaction.black"]) },
|
||||
w: function(event, can, target) { can.run(event, ["search", "Header.onaction.white"]) },
|
||||
|
||||
s: function(event, can, target) { can.run(event, ["search", "River.ondetail.添加应用"]) },
|
||||
t: function(event, can, target) { can.run(event, ["search", "River.ondetail.添加工具"]) },
|
||||
|
||||
" ": function(event, can, target) {
|
||||
can.page.Select(can, document.body, "fieldset.pane.Header div.search input", function(target) {
|
||||
target.focus()
|
||||
|
21
index.css
21
index.css
@ -5,6 +5,9 @@ body.mobile fieldset.Header.head {
|
||||
background-color:#000000b8;
|
||||
z-index:10;
|
||||
}
|
||||
body.mobile fieldset.Header.head>div.output {
|
||||
height:48px;
|
||||
}
|
||||
body.mobile fieldset.Footer.foot {
|
||||
position:fixed; bottom:0px;
|
||||
width:-webkit-fill-available;
|
||||
@ -28,6 +31,9 @@ body.mobile select {
|
||||
body.mobile input {
|
||||
font-size:18px;
|
||||
}
|
||||
body.mobile div.carte {
|
||||
font-size:24px;
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0; padding:0;
|
||||
@ -91,6 +97,9 @@ table td {
|
||||
table td:hover {
|
||||
background-color:red;
|
||||
}
|
||||
table td.select {
|
||||
background-color:red;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin:0;
|
||||
@ -178,20 +187,21 @@ fieldset>div.output div.project div.list {
|
||||
fieldset.input {
|
||||
background-color:#30a7a93d;
|
||||
position:fixed;
|
||||
z-index:9;
|
||||
z-index:100;
|
||||
}
|
||||
fieldset.input.key {
|
||||
z-index:10;
|
||||
z-index:90;
|
||||
}
|
||||
fieldset.input.date {
|
||||
z-index:11;
|
||||
z-index:80;
|
||||
}
|
||||
|
||||
div.carte {
|
||||
position:absolute;
|
||||
position:fixed;
|
||||
background:#295b61;
|
||||
color:white;
|
||||
padding:4px;
|
||||
z-index:100;
|
||||
}
|
||||
div.carte div.item {
|
||||
padding:3px 12px;
|
||||
@ -238,6 +248,9 @@ div.toast div.progress div.current {
|
||||
height:10px;
|
||||
}
|
||||
|
||||
body.black a {
|
||||
color:yellow;
|
||||
}
|
||||
body.white {
|
||||
background-color:#2f3638;
|
||||
color:white;
|
||||
|
@ -3,6 +3,7 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
||||
<meta charset="utf-8">
|
||||
<title>volcanos</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/ico" href="favicon.ico">
|
||||
<link rel="stylesheet" type="text/css" href="cache.css">
|
||||
<link rel="stylesheet" type="text/css" href="index.css">
|
||||
|
10
lib/core.js
10
lib/core.js
@ -74,9 +74,9 @@ Volcanos("core", {help: "核心模块",
|
||||
|
||||
var ls = func.toString(); ls = ls.split(")")[0], ls = ls.split("(")[1]
|
||||
|
||||
var msg = args["msg"], echo = false
|
||||
var msg = args["msg"], can = args["can"], echo = false
|
||||
var list = []; this.List(ls.split(","), function(item) { item = item.trim()
|
||||
list.push(args[item]||msg&&msg.Option(item)||args)
|
||||
list.push(args[item] || msg&&msg.Option(item) || can&&can.Conf(item) || args)
|
||||
if (item == "cb") { echo = true }
|
||||
})
|
||||
|
||||
@ -159,6 +159,12 @@ Volcanos("core", {help: "核心模块",
|
||||
setTimeout(function() { loop(timer, 0) }, interval.value||interval[0])
|
||||
return timer
|
||||
}),
|
||||
Delay: function(list, interval, cb, cbs) {
|
||||
list.push(cb); this.Timer(interval, function() {
|
||||
var cb = list.pop(); list.length = 0
|
||||
typeof cb == "function" && cb()
|
||||
}, cbs)
|
||||
},
|
||||
|
||||
Copy: function(to, from, fields) {
|
||||
var list = []
|
||||
|
@ -120,7 +120,7 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg
|
||||
var socket = new WebSocket(can.base.URLMerge(url, args))
|
||||
socket.onclose = function() { can.base.Log("wss", "close", args)
|
||||
typeof onclose == "function"? onclose(socket): can.core.Timer(1000, function() {
|
||||
can.misc.WSS(can, url, args, cb, onopen, onerror, onclose)
|
||||
can.misc.WSS(can, args, cb, onopen, onerror, onclose)
|
||||
})
|
||||
}, socket.onerror = function() { can.base.Log("wss", "error", args)
|
||||
typeof onerror == "function"? onerror(socket): socket.close()
|
||||
|
16
lib/user.js
16
lib/user.js
@ -48,6 +48,9 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
},
|
||||
|
||||
trans: function(can, text) {
|
||||
if (typeof text == "function") {
|
||||
text = text.name || ""
|
||||
}
|
||||
return can._trans && can._trans[text] || text
|
||||
},
|
||||
topic: function(can, name) {
|
||||
@ -80,10 +83,11 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
share: function(can, msg, cmd) {
|
||||
can.run(msg._event, cmd||["action", "share"], function(msg) {
|
||||
var src = can.user.Share(can, {_path: "/share/"+msg.Result()}, true)
|
||||
var ui = can.user.toast(can, {title: can.page.Format("a", "/?share="+msg.Result(), "share"), text: can.page.Format("img", src+"/share"),
|
||||
width: 300, height: 300, duration: 100000, button: [{button: ["确定", function(event) {
|
||||
ui.Close()
|
||||
}]}] })
|
||||
var ui = can.user.toast(can, {
|
||||
title: can.page.Format("a", "/share?share="+msg.Result(), "share"),
|
||||
text: can.page.Format("img", src+"/share"), width: 300, height: 300, duration: 100000,
|
||||
button: [{button: ["确定", function(event) { ui.Close() }]}],
|
||||
})
|
||||
})
|
||||
},
|
||||
login: function(can, cb) {
|
||||
@ -118,6 +122,7 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
can.page.Remove(can, ui.first)
|
||||
}, list: can.core.List(list, function(item) {
|
||||
return {view: "item", list: [typeof item == "string"? /* button */ {text: item, click: function(event) {
|
||||
can.user.isMobile && can.page.Remove(can, ui.first)
|
||||
typeof cb == "function" && cb(event, item, meta)
|
||||
}}: item.args? /* input */ {text: item.name, click: function(event) {
|
||||
can.user.input(event, can, item.args, cb)
|
||||
@ -141,8 +146,9 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
}
|
||||
|
||||
var msg = can.request(event)
|
||||
var x = event.clientX, y = event.clientY; y += 10; if (x > 600) { x -= 160 }
|
||||
var x = event.clientX||200, y = event.clientY||48; y += 10; if (x > 600) { x -= 160 }
|
||||
if (can.user.isMobile) { x = 100, y = 100 }
|
||||
|
||||
var button; var ui = can.page.Append(can, document.body, [{view: ["input", "fieldset"], style: {left: x+"px", top: y+"px"}, list: [
|
||||
{view: ["option", "table"], list: can.core.List(form, function(item) {
|
||||
if (item.button) { button = can.core.List(item.button, function(item) {
|
||||
|
@ -2,14 +2,8 @@
|
||||
"manifest_version": 2,
|
||||
"name": "volcanos",
|
||||
"version": "0.0.1",
|
||||
"icons": {
|
||||
"16": "favicon.png",
|
||||
"48": "favicon.png",
|
||||
"128": "favicon.png"
|
||||
},
|
||||
"background": {"page": "/publish/chrome/chrome.html"},
|
||||
"browser_action": {
|
||||
"default_icon": "/favicon.png",
|
||||
"default_popup": "/publish/chrome/popup.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
|
@ -1,17 +0,0 @@
|
||||
body {
|
||||
background:black;
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
fieldset {
|
||||
color:cyan;
|
||||
padding:2px;
|
||||
}
|
||||
legend {
|
||||
margin-left:10px;
|
||||
}
|
||||
div.hidden {
|
||||
display:none;
|
||||
}
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.7,user-scalable=no">
|
||||
<title>volcanos</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
||||
<link rel="stylesheet" type="text/css" href="/index.css">
|
||||
<link rel="stylesheet" type="text/css" href="/page/share.css">
|
||||
<link rel="stylesheet" type="text/css" href="share.css">
|
||||
</head>
|
||||
<body>
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/page/share.js"></script>
|
||||
<script src="share.js"></script>
|
||||
</body>
|
||||
|
||||
|
@ -1,13 +1,11 @@
|
||||
Volcanos({name: "demo", volcano: "/frame.js", iceberg: "/chat/", intshell: "plug.sh",
|
||||
libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [
|
||||
{type: "pane", name: "Action", help: "工作台", pos: "middle", list: ["/pane/Action.js", "/pane/Action.css"]},
|
||||
Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
|
||||
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panes: [
|
||||
{name: "Action", help: "工作台", pos: "middle"},
|
||||
], main: {name: "Action", engine: "remote", list: ["/publish/order.js"]}, plugin: [
|
||||
"/plugin/state.js",
|
||||
"/plugin/input.js",
|
||||
"/plugin/table.js",
|
||||
"/plugin/input/key",
|
||||
"/plugin/input/date",
|
||||
"/plugin/input/upload",
|
||||
"/plugin/input/province",
|
||||
"/plugin/input/key.js",
|
||||
"/plugin/input/date.js",
|
||||
],
|
||||
})
|
||||
|
@ -1,8 +1,5 @@
|
||||
(function() { const RIVER = "river", STORM = "storm", ACTION = "action"
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can._target.ontouchstart = function(event) {
|
||||
can.run({}, ["search", "River.onmotion.hidden"])
|
||||
}
|
||||
var river = can.Conf(RIVER), storm = can.Conf(STORM)
|
||||
can.onmotion.clear(can), can.core.Next(msg.Table(), function(value, next) {
|
||||
value.feature = can.base.Obj(value.feature||value.meta||"{}", {})
|
||||
@ -19,10 +16,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
},
|
||||
_plugin: function(can, target, river, storm, value) { value.name = value.name.split(" ")[0]
|
||||
value.action = value.id || value.index || value.key+"."+value.name
|
||||
value.width = can._target.offsetWidth
|
||||
value.type = "plugin"
|
||||
|
||||
// 添加插件
|
||||
value.width = parseInt(can.Conf("width")), value.height = parseInt(can.Conf("height"))
|
||||
can.onappend._init(can, value, ["/plugin/state.js"], function(plugin) {
|
||||
can._plugins = (can._plugins||[]).concat([plugin])
|
||||
plugin.run = function(event, cmds, cb, silent) { var msg = plugin.request(event); cmds = cmds || []
|
||||
@ -55,6 +52,27 @@ Volcanos("onengine", {help: "解析引擎", list: [],
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
|
||||
var share = can.user.Search(can, "share"); if (share) {
|
||||
can.run({}, ["_share", share], function(msg) {
|
||||
can.user.title(msg.Option("title"))
|
||||
can.Conf(RIVER, "_share"), can.Conf(STORM, share)
|
||||
can.onimport._init(can, msg, [], cb, can._output)
|
||||
})
|
||||
}
|
||||
|
||||
can.Conf({width: can._output.offsetWidth-32, height: window.innerHeight})
|
||||
can.onengine.listen(can, "resize", function(width, height) {
|
||||
can.Conf({width: width, height: height})
|
||||
})
|
||||
|
||||
|
||||
can._target.ontouchstart = function(event) {
|
||||
can.run({}, ["search", "River.onmotion.hidden"])
|
||||
can.page.Select(can, document.body, "div.carte", function(item) {
|
||||
can.page.Remove(can, item)
|
||||
})
|
||||
}
|
||||
|
||||
can.onengine.listen(can, "storm.select", function(msg, river, storm) {
|
||||
can.page.Cache(can.Conf(RIVER)+"."+can.Conf(STORM), can._output, can._output.scrollTop+1)
|
||||
can.Conf(RIVER, river), can.Conf(STORM, storm)
|
||||
@ -63,9 +81,15 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
||||
if (position) { can._output.scrollTo(0, position-1); return }
|
||||
|
||||
can.run({}, [river, storm], function(msg) {
|
||||
can.onimport._init(can, msg, list, cb, can._output)
|
||||
if (msg.append && msg[msg.append[0]] && msg[msg.append[0]].length > 0) {
|
||||
can.onimport._init(can, msg, list, cb, can._output)
|
||||
} else {
|
||||
var msg = can.request({}, {river: river, storm: storm})
|
||||
can.run(msg._event, ["search", "River.ondetail.添加工具"])
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
can.onengine.listen(can, "search", function(msg, word) {
|
||||
if (word[0] != "*" && word[0] != "fieldset") { return }
|
||||
|
||||
|
@ -1,9 +1,12 @@
|
||||
(function() { const RIVER = "river", STORM = "storm", POD = "pod"
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can._main_river = can.user.Search(can, RIVER) || (can.user.isMobile||can.user.isExtension? "product": "project")
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile||can.user.isExtension? "office": "studio")
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio")
|
||||
|
||||
can.run({}, ["search", "Header.onimport.menu", ["群组", "添加用户", "添加设备", "添加应用"], ["应用", "添加工具"]], function(event, item) {
|
||||
can.run({}, ["search", "Header.onimport.menu",
|
||||
["添加", "创建群组", "添加用户", "添加设备", "添加应用", "添加工具"],
|
||||
["共享", "共享群组", "共享应用", "共享工具"],
|
||||
], function(event, item) {
|
||||
var cb = can.ondetail[item]; typeof cb == "function" && cb(event, can, item, can.Conf(RIVER), can.Conf(STORM))
|
||||
})
|
||||
|
||||
@ -57,7 +60,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
|
||||
can.user.title(can.user.Search(can, POD) || storm.name)
|
||||
// 右键点击
|
||||
var ui = can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
|
||||
can.ondetail[item](event, can, item, storm.hash, river)
|
||||
can.ondetail[item](event, can, item, river, storm.hash)
|
||||
}); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}})
|
||||
}}
|
||||
}) }]).first, list.children.length > 0 && list.children[select].click()
|
||||
@ -90,6 +93,8 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
|
||||
"刷新": function(event, can) { can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)}) },
|
||||
})
|
||||
Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加设备", "添加应用", "重命名群组", "删除群组"],
|
||||
"创建群组": function(event, can) { can.onaction.create(event, can) },
|
||||
|
||||
"共享群组": function(event, can, button, river) {
|
||||
can.user.input(event, can, [
|
||||
{_input: "text", name: "name", value: river},
|
||||
@ -138,20 +143,18 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
||||
})
|
||||
},
|
||||
|
||||
"共享应用": function(event, can, button, storm, river) {
|
||||
"共享应用": function(event, can, button, river, storm) {
|
||||
can.user.input(event, can, [
|
||||
{_input: "text", name: "name", value: storm},
|
||||
{_input: "text", name: "username", value: "@key=hi"},
|
||||
{_input: "text", name: "userrole", value: "@key=void"},
|
||||
], function(event, button, meta, list) {
|
||||
var msg = can.request(event)
|
||||
can.user.share(can, msg, [river, "action", "share", "type", "storm", "name", meta.name,
|
||||
"storm", storm, "username", meta.username, "userrole", meta.userrole,
|
||||
"storm", storm,
|
||||
])
|
||||
return true
|
||||
})
|
||||
},
|
||||
"添加工具": function(event, can, button, storm, river) {
|
||||
"添加工具": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "command", "pod,name,text", function(item, next) {
|
||||
can.run({}, [river, "tool", "action", "insert", "hash", storm].concat(["pod", item[0], "ctx", item[2], "cmd", item[1]]), function(msg) {
|
||||
next()
|
||||
@ -160,7 +163,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
||||
can.user.Search(can, {river: river, storm: storm})
|
||||
})
|
||||
},
|
||||
"保存参数": function(event, can, button, storm, river) {
|
||||
"保存参数": function(event, can, button, river, storm) {
|
||||
can.run(event, ["search", "Action.onexport.args"], function(item, next) {
|
||||
var msg = can.request({}, {hash: storm, id: item.dataset.id})
|
||||
can.run({}, [river, "tool", "action", "modify", "arg", item.dataset.args], function(msg) {
|
||||
@ -168,7 +171,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
||||
})
|
||||
})
|
||||
},
|
||||
"重命名应用": function(event, can, button, storm, river) {
|
||||
"重命名应用": function(event, can, button, river, storm) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event, {hash: storm})
|
||||
can.run(event, [river, "tool", "action", "modify", "name", meta.name], function(msg) {
|
||||
@ -176,7 +179,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
||||
})
|
||||
})
|
||||
},
|
||||
"删除应用": function(event, can, button, storm, river) {
|
||||
"删除应用": function(event, can, button, river, storm) {
|
||||
var msg = can.request(event, {hash: storm})
|
||||
can.run(event, [river, "tool", "action", "remove"], function(msg) {
|
||||
can.user.Search(can, {river: river})
|
||||
|
@ -1,19 +1,17 @@
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
|
||||
var width = can.Conf("width"), height = can.Conf("height")
|
||||
var list = []; can.onengine.listen(can, "resize", function(width, height) {
|
||||
can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() {
|
||||
can.onimport._init(can, msg, list, cb, target)
|
||||
})
|
||||
})
|
||||
|
||||
var width = can.Conf("width"), height = can.Conf("height")
|
||||
can.ui = can.page.Appends(can, target, [
|
||||
{type: "table", list: [{type: "tr", list: [
|
||||
{type: "td", list: [{view: "project", style: {"max-height": height-480, display: "none"}} ]},
|
||||
{type: "td", list: [{view: "profile", style: {"max-height": height-480}, 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-120, "max-width": width-60}, _init: function(item) {
|
||||
can.onlayout.resize(function(width, height) {
|
||||
width = can.Conf("width", width), height = can.Conf("height", height)
|
||||
can.page.Modify(can, item, {style: {
|
||||
"min-width": width-120, "max-width": width-60,
|
||||
}})
|
||||
})
|
||||
}},
|
||||
]}], style: {"min-width": width-60, "max-width": width-30}},
|
||||
]}, ]},
|
||||
{view: "search", style: {display: "none"}, list: [{view: "action", list: [
|
||||
{input: ["word", function(event) {
|
||||
|
@ -1,5 +1,10 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
_init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
var list = []; can.onengine.listen(can, "resize", function(width, height) {
|
||||
can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() {
|
||||
can.onimport._init(can, msg, list, cb, target)
|
||||
})
|
||||
})
|
||||
|
||||
if (msg.Option("_display") == "table") {
|
||||
can.onappend.table(can, msg, can._target, "table", function(value, key) {
|
||||
return {text: [value, "td"], click: function(event) {
|
||||
@ -84,7 +89,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", ["view",
|
||||
|
||||
var space = 10
|
||||
var view = parseInt(can.Action("height"))
|
||||
var max = parseInt(can.Conf("width"))-100
|
||||
var max = parseInt(can.Conf("width"))-120
|
||||
var step = parseInt(max / can.list.length)||2
|
||||
|
||||
var width = can.list.length * step + space * 2
|
||||
@ -135,7 +140,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", ["view",
|
||||
"趋势图": function(event, can, value, cmd, target) {var sub = can.sub, data = can.data;
|
||||
var space = 10
|
||||
var view = parseInt(can.Action("height"))
|
||||
var max = parseInt(can.Conf("width"))-100
|
||||
var max = parseInt(can.Conf("width"))-120
|
||||
var step = parseInt(max / can.list.length)||2
|
||||
|
||||
var width = can.list.length * step + space * 2
|
||||
|
11
proto.js
11
proto.js
@ -22,14 +22,13 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
|
||||
}); Preload = Preload.concat(Config.plugin)
|
||||
|
||||
// 根模块
|
||||
name = Config.name, can = {_follow: Config.name,
|
||||
_target: document.body, _width: window.innerWidth, _height: window.innerHeight,
|
||||
}, libs = Preload.concat(Config.volcano), cb = function(can) {
|
||||
name = Config.name, can = {_follow: Config.name, _target: document.body}
|
||||
libs = Preload.concat(Config.volcano), cb = function(can) {
|
||||
can.onengine._init(can, can.Conf(Config), Config.panes, function(msg) {
|
||||
can.base.Log(name, "run", window.can = can)
|
||||
document.body.onresize = function(event) {
|
||||
can.onlayout._init(can, can._target, window.innerWidth, window.innerHeight)
|
||||
}, can.onlayout._init(can, can._target, window.innerWidth, window.innerHeight-8)
|
||||
var list = []; document.body.onresize = function(event) { can.core.Delay(list, 100, function() {
|
||||
can.onlayout._init(can, can._target, can._width = window.innerWidth, can._height = window.innerHeight)
|
||||
}) }, document.body.onresize()
|
||||
}, can._target)
|
||||
}
|
||||
}
|
||||
|
@ -2,11 +2,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/chrome/chrome.js"></script>
|
||||
<script src="/publish/chrome/chrome.js"></script>
|
||||
</body>
|
||||
<html>
|
||||
|
||||
|
@ -1,49 +1,39 @@
|
||||
var can = Volcanos("chrome", {
|
||||
chrome: function(msg, cmd, cb) {
|
||||
if (cmd.length == 0) {
|
||||
// 窗口列表
|
||||
Volcanos("chrome", {
|
||||
chrome: function(can, msg, cmds, cb) {
|
||||
if (cmds.length == 0) { // 窗口列表
|
||||
chrome.windows.getAll(function(wins) {
|
||||
can.core.List(wins, function(win) {win.wid = win.id
|
||||
can.core.List(wins, function(win) { win.wid = win.id
|
||||
msg.Push(win, ["wid", "state", "left", "top", "width", "height"])
|
||||
})
|
||||
typeof cb == "function" && cb(msg)
|
||||
})
|
||||
return
|
||||
}
|
||||
if (cmd.length == 1) {
|
||||
// 标签列表
|
||||
chrome.tabs.getAllInWindow(parseInt(cmd[0]), function(tabs) {
|
||||
can.core.List(tabs, function(tab) {tab.tid = tab.id
|
||||
if (cmds.length == 1) { // 标签列表
|
||||
chrome.tabs.getAllInWindow(parseInt(cmds[0]), function(tabs) {
|
||||
can.core.List(tabs, function(tab) { tab.tid = tab.id
|
||||
msg.Push(tab, ["tid", "active", "width", "height", "index", "title", "url"])
|
||||
})
|
||||
typeof cb == "function" && cb(msg)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
delete(msg._can)
|
||||
delete(msg._event)
|
||||
if (cmd[1] == "") {
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
|
||||
cmd[1] = tabs[0].id
|
||||
chrome.tabs.sendMessage(parseInt(cmd[1]), msg, function (res) {
|
||||
if (cmds[1] == "") { // 当前标签
|
||||
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
|
||||
cmds[1] = tabs[0].id
|
||||
chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) {
|
||||
msg.Copy(res), typeof cb == "function" && cb(msg)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
chrome.tabs.sendMessage(parseInt(cmd[1]), msg, function (res) {
|
||||
msg.Copy(res), typeof cb == "function" && cb(msg)
|
||||
})
|
||||
return
|
||||
}
|
||||
return
|
||||
|
||||
// 新建标签
|
||||
chrome.tabs.create({windowId: parseInt(cmd[0]), url: cmd[1], selected: false}, function() {
|
||||
can.chrome(msg, [cmd[0]], cb)
|
||||
chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) {
|
||||
msg.Copy(res), typeof cb == "function" && cb(msg)
|
||||
})
|
||||
},
|
||||
bookmark: function(msg, cmd, cb) {
|
||||
chrome.bookmarks.getSubTree(cmd[0]||"0", function(labs) {
|
||||
bookmark: function(msg, cmds, cb) {
|
||||
chrome.bookmarks.getSubTree(cmds[0]||"0", function(labs) {
|
||||
for (var i = 0; i < labs.length; i++) {labs[i].pid = labs[i].parentId
|
||||
msg.Push("time", can.base.Time(labs[i].dateAdded))
|
||||
msg.Push(labs[i], ["pid", "id", "index", "title", "url"])
|
||||
@ -52,45 +42,33 @@ var can = Volcanos("chrome", {
|
||||
typeof cb == "function" && cb(msg)
|
||||
})
|
||||
},
|
||||
}, ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], function(can) {can.Conf({iceberg: "http://localhost:9020/"})
|
||||
}, ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], function(can) {
|
||||
can.Conf({iceberg: "http://localhost:9020/"})
|
||||
can.user.toast = function(message, title) {chrome.notifications.create(null, {
|
||||
message: message, title: title||"volcanos", iconUrl: "/favicon.ico", type: "basic",
|
||||
message: message, title: title||can._name, iconUrl: "/favicon.ico", type: "basic",
|
||||
})},
|
||||
|
||||
can.misc.WSS(can, "ws://localhost:9020/space/", {name: "chrome", type: "chrome"}, function(event, msg) {
|
||||
if (msg.Option("_handle")) { return can.user.toast(msg.result.join("")) }
|
||||
can.misc.WSS(can, {type: "chrome", name: "chrome"}, function(event, msg, cmd, arg) {
|
||||
can.core.CallFunc(can.core.Value(can, cmd), {can: can, msg: msg, cmds: arg, cb: function() {
|
||||
msg.Reply()
|
||||
}})
|
||||
})
|
||||
|
||||
// can.user.toast(msg.detail.join(" "))
|
||||
try {
|
||||
switch (msg.detail[0]) {
|
||||
case "space": can._share = msg.detail[2]; break
|
||||
case "pwd": msg.Echo("hello world"); break
|
||||
default: (can[msg.detail[0]]||can.chrome[msg.detail[0]])(msg, msg.detail.slice(1), function(msg) {
|
||||
msg.Reply(msg)
|
||||
}); return
|
||||
}
|
||||
} catch (e) {
|
||||
can.user.toast(e)
|
||||
}
|
||||
msg.Reply(msg)
|
||||
}, function() {can.user.toast("wss connect", "iceberg")})
|
||||
|
||||
can.run = function(event, cmd, cb, silent) { var msg = can.request(event)
|
||||
can.misc.Run(event, can, {names: "code/chrome/crx"}, cmd, cb)
|
||||
can.run = function(event, cmds, cb, silent) { var msg = can.request(event)
|
||||
can.misc.Run(event, can, {names: "code/chrome/crx"}, cmds, cb)
|
||||
},
|
||||
chrome.history.onVisited.addListener(function(item) {
|
||||
can.run({}, ["history", item.id, item.title, item.url])
|
||||
})
|
||||
chrome.contextMenus.create({
|
||||
title: "favor",
|
||||
onclick: function(event) {
|
||||
chrome.tabs.query({ active: true}, function (tabs) {
|
||||
chrome.tabs.sendMessage(tabs[0].id, { action: "copy" }, function (response) {
|
||||
console.log(response)
|
||||
can.run({}, ["history", "id", response.title, response.src])
|
||||
})
|
||||
|
||||
chrome.contextMenus.create({title: "favor", onclick: function(event) {
|
||||
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
|
||||
var msg = can.request(event); msg.detail = ["chrome", "", "", "favor"]
|
||||
chrome.tabs.sendMessage(tabs[0].id, msg, function(res) {
|
||||
return
|
||||
can.run({}, ["history", "id", response.title, response.src])
|
||||
})
|
||||
},
|
||||
})
|
||||
})
|
||||
}, })
|
||||
})
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
var can = Volcanos("chrome", {
|
||||
Volcanos("chrome", {
|
||||
spide: function(can, msg) {
|
||||
can.page.Select(can, document.body, "video", function(item) {
|
||||
var p = can.page.Select(can, document.body, "p.title")[0]
|
||||
@ -28,29 +28,10 @@ var can = Volcanos("chrome", {
|
||||
msg.Push("link", item.src)
|
||||
})
|
||||
},
|
||||
}, [], function(can) {
|
||||
can.user = user
|
||||
can.page = page
|
||||
can.misc = misc
|
||||
can.core = core
|
||||
can.base = base
|
||||
|
||||
chrome.extension.onMessage.addListener( function (msg, sender, cb) { var action = can[msg.detail[3]||"spide"]
|
||||
msg = can.request({}, msg)
|
||||
delete(msg._event)
|
||||
delete(msg._can)
|
||||
typeof action == "function" && action(can, msg) || typeof cb == "function" && cb(msg)
|
||||
})
|
||||
return
|
||||
|
||||
chrome.extension.onMessage.addListener( function (request, sender, sendResponse) {
|
||||
var title = can.page.Select(can, document.body, "p.title", function(item) {
|
||||
return item.innerText
|
||||
}).join("-")
|
||||
can.page.Select(can, document.body, "video", function(item) {
|
||||
sendResponse({poster: item.poster, src: item.src, title: title})
|
||||
console.log(item)
|
||||
})
|
||||
}, [], function(can) { can._load("chrome")
|
||||
chrome.extension.onMessage.addListener(function(req, sender, cb) {
|
||||
var msg = can.request(); can.core.List(req.option, function(key) { msg.Option(key, req[key][0]) })
|
||||
can.core.CallFunc(can.core.Value(can, req.detail[3]||"spide"), {can: can, msg: msg, cmds: req.detail.slice(4), cb: cb})
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
</head>
|
||||
<body style="min-width:800px; min-height:600px; overflow:auto">
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/chrome/popup.js"></script>
|
||||
<script src="/publish/chrome/popup.js"></script>
|
||||
</body>
|
||||
<html>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user