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