1
0
forked from x/volcanos

action add text chrome.spide

This commit is contained in:
shaoying 2020-08-15 18:23:04 +08:00
parent 6c510422df
commit 9d3c1a6bd0
11 changed files with 140 additions and 29 deletions

View File

@ -21,6 +21,22 @@ var can = Volcanos("chrome", {
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) {
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
// 新建标签
chrome.tabs.create({windowId: parseInt(cmd[0]), url: cmd[1], selected: false}, function() {
can.chrome(msg, [cmd[0]], cb)
@ -44,13 +60,17 @@ var can = Volcanos("chrome", {
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.user.toast(msg.detail.join(" "))
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
// 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")})

View File

@ -1,5 +1,23 @@
var can = Volcanos("chrome", {
video: function(can) {
spide: function(can, msg) {
can.page.Select(can, document.body, "video", function(item) {
var p = can.page.Select(can, document.body, "p.title")[0]
var ls = item.src.split("?")
var ls = ls[0].split(".")
msg.Push("time", can.base.Time())
msg.Push("type", "video")
msg.Push("name", (p && p.innerText || "video")+"."+ls[ls.length-1])
msg.Push("text", item.src)
msg.Push("link", item.src)
})
can.page.Select(can, document.body, "img", function(item) {
msg.Push("time", can.base.Time())
msg.Push("type", "img")
msg.Push("name", "img")
msg.Push("text", item.src)
msg.Push("link", item.src)
})
},
}, [], function(can) {
can.user = user
@ -8,6 +26,14 @@ var can = Volcanos("chrome", {
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

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/index.css">
</head>
<body style="min-width:800px; min-height:600px">
<body style="min-width:800px; min-height:600px; overflow:auto">
<script src="/proto.js"></script>
<script src="/chrome/popup.js"></script>
</body>

28
chrome/spided.js Normal file
View File

@ -0,0 +1,28 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
can.ui = can.page.Append(can, can._target, [
{view: ["content", "div"]}, {view: ["display", "pre"]},
])
can.onappend.table(can, can.ui.content, "table", msg)
can.onappend.board(can, can.ui.display, "board", msg)
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
refresh && can.Timer(refresh, function() {
can.run({})
})
return typeof cb == "function" && cb(msg)
},
})
Volcanos("onaction", {help: "控件交互", list: [],
onclick: function(event, can) {
can.run(event, [], function() {})
},
})
Volcanos("ondetail", {help: "控件交互", list: ["编辑", "删除"],
"编辑": function(event, can, key) {
console.log(key)
},
"删除": function(event, can, key) {
console.log(key)
},
})

View File

@ -177,6 +177,14 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
{name: "tmux", help: "粘贴", index: "web.code.tmux.text"},
{name: "study", help: "学习", index: "web.wiki.word", args: ["usr/learning/study.shy"]},
]},
"chrome": {name: "chrome", action: [
{name: "feel", help: "网页爬虫", index: "web.wiki.feel", args: ["spide/"], feature: {
display: "/plugin/local/wiki/feel.js",
height: 200, limit: 3,
}},
{name: "cached", help: "爬虫缓存", index: "web.code.chrome.cached", args: []},
{name: "spided", help: "网页爬虫", index: "web.code.chrome.spided", args: location && location.protocol && location.protocol=="chrome-extension:"? ["1", "", "spide"]: ["1"]},
]},
}},
"project": {name: "研发群", storm: {
"studio": {name: "studio", action: [
@ -187,9 +195,9 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
{name: "total", help: "代码统计", index: "web.code.git.total"},
]},
"cli": {name: "cli", action: [
{name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]},
{name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]},
{name: "vim", help: "编辑器", index: "web.wiki.word", args: ["usr/icebergs/misc/vim/vim.shy"]},
{name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]},
{name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]},
{name: "zsh", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/zsh/zsh.shy"]},
]},
"web": {name: "web", action: [

View File

@ -66,6 +66,7 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg,
if (value.inputs.length == 0) {
can.run({}, [river, storm, "action", "command", value.index], function(msg) {
value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", [])
// value.feature = value.feature||can.base.Obj(msg.meta&&msg.meta[0]||"{}", {})
value.feature = can.base.Obj(msg.meta&&msg.meta[0]||"{}", {})
can.onaction.add_plugin(can, river, storm, value), next()
})

View File

@ -2,7 +2,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
can.sublist = {}
},
river: function(can) { var key = "river"
var main = can.user.Search(can, key) || "研发群"
can._main_river = can.user.Search(can, "river") || location.protocol == "chrome-extension:"? "product": "project"
can._main_storm = can.user.Search(can, "storm") || location.protocol == "chrome-extension:"? "chrome": "studio"
can.run({}, [], function(sup) { can._output.innerHTML = ""; var select; sup.Table(function(value, index, array) {
var view = can.onappend.item(can, can._output, "item", value, function(event, item) { var msg = can.request(event, {_msg: sup})
can.onimport.storm(event, can, value.key)
@ -14,7 +16,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
can.onappend.menu(can, sup, value)
})
if (index == 0 || [value.key, value.name].indexOf(main) > -1) { select = view }
if (index == 0 || [value.key, value.name].indexOf(can._main_river) > -1) { select = view }
}); select && select.click(), typeof cb == "function" && cb(sup) })
},
storm: function(event, can, river) {
@ -24,7 +26,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
can.run({}, [river, "storm"], function(msg) { var which = 0
list = can.page.Append(can, can._output, [{view: "sublist", list: msg.Table(function(value, index) {
river == can.user.Search(can, "river") && value.key == can.user.Search(can, "storm") && (which = index)
river == can._main_river && value.key == can._main_storm && (which = index)
return {text: [value.name, "div", "subitem"], onclick: function(event) {
var msg = can.request(event)
msg.Option("river", can.Conf("river", river))

View File

@ -23,7 +23,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
})
}
var sub = can.sup && can.sup._outputs && can.sup._outputs[0]
var sub = can.sup && can.sup._outputs && can.sup._outputs[can.sup._outputs.length-1]
var cb = sub && sub.onaction && sub.onaction[can.Conf("name")]
if (typeof cb == "function") { return cb(event, sub, can.Conf("name")) }

View File

@ -1,17 +1,29 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._target.innerHTML = ""
can.ui = can.page.Append(can, can._target, [
{view: "project"},
{view: "profile", style: {clear: "both"}},
])
can._msg = msg
can.path = can.request({}), can.list = []
msg.Table(function(value) { value.path.endsWith("/")? can.path.Push(value): can.list.push(value) })
can.onappend.table(can, can.ui.project, "table", can.path)
can.page.Modify(can, can._action, {style: {display: "none"}})
typeof cb == "function" && cb()
var feature = can.Conf("feature") || {}
can.begin = 0
can.Action("倍速", can.rate = 1)
can.Action("数量", can.limit = parseInt(msg.Option("limit"))||6)
can.Action("高度", can.height = parseInt(msg.Option("height"))||100)
can.Option("path") != "最近/" && can.onimport.page(can, can._msg.Table(), can.begin, can.limit)
can.Action("数量", can.limit = parseInt(feature["limit"]||msg.Option("limit"))||6)
can.Action("高度", can.height = parseInt(feature["height"]||msg.Option("height"))||100)
can.Option("path") != "最近/" && can.onimport.page(can, can.list, can.begin, can.limit)
},
page: function(can, list, begin, limit) { can._target.innerHTML = ""
page: function(can, list, begin, limit) { can.ui.profile.innerHTML = ""
if (!list || list.length == 0) { return }
for (var i = begin; i < begin+limit; i++) { list && list[i] && can.onimport.file(can, list[i].path) }
can.Status("begin", begin), can.Status("limit", limit), can.Status("total", can._msg.Table().length)
can.Status("begin", begin), can.Status("limit", limit), can.Status("total", can.list.length)
},
file: function(can, path) { can.Status("文件", path)
var p = location.href.startsWith("http")? "": "http://localhost:9020"
@ -20,7 +32,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
var ls = path.split("/")
var ls = ls[ls.length-1].split(".")
var ext = ls[ls.length-1].toLowerCase()
ext && can.page.Append(can, can._target, [can.onfigure[ext](can, path)])
ext && can.page.Append(can, can.ui.profile, [can.onfigure[ext](can, path)])
},
}, ["/plugin/local/wiki/feel.css"])
Volcanos("onfigure", {help: "组件菜单", list: [],
@ -40,10 +52,13 @@ Volcanos("onfigure", {help: "组件菜单", list: [],
return {className: "preview", type: "video", style: {height: can.height},
data: {src: path, controls: "controls", autoplay: auto, loop: loop, playbackRate: can.rate},
oncontextmenu: cb, onplay: cb, onpause: cb, onended: cb,
onmouseover: function(event) {
can.Status("文件", path)
},
onloadedmetadata: function(event) { total = event.timeStamp
event.target.currentTime = can._msg.currentTime || 0
}, onloadeddata: cb, ontimeupdate: function(event) {
can.Status("position", can.onexport.position(can, (can._msg.currentTime=event.target.currentTime)-1, event.target.duration))
can.Status("文件") == path && can.Status("position", can.onexport.position(can, (can._msg.currentTime=event.target.currentTime)-1, event.target.duration))
},
}
},
@ -75,19 +90,19 @@ Volcanos("onaction", {help: "组件菜单", list: [
can.page.Modify(can, can._action, {style: {display: can._action.style.display=="none"? "block": "none"}})
},
"上一页": function(event, can, key, value) {
can.begin > 0 && (can.begin -= can.limit, can.onimport.page(can, can._msg.Table(), can.begin, can.limit))
can.begin > 0 && (can.begin -= can.limit, can.onimport.page(can, can.list, can.begin, can.limit))
},
"下一页": function(event, can, key, value) {
can.begin + can.limit < can._msg.Table().length && (can.begin += can.limit, can.onimport.page(can, can._msg.Table(), can.begin, can.limit))
can.begin + can.limit < can.list.length && (can.begin += can.limit, can.onimport.page(can, can.list, can.begin, can.limit))
},
"数量": function(event, can, key, value) {
can.limit = parseInt(value), can.onimport.page(can, can._msg.Table(), can.begin, can.limit)
can.limit = parseInt(value), can.onimport.page(can, can.list, can.begin, can.limit)
},
"高度": function(event, can, key, value) {
can.height = parseInt(value), can.onimport.page(can, can._msg.Table(), can.begin, can.limit)
can.height = parseInt(value), can.onimport.page(can, can.list, can.begin, can.limit)
},
"倍速": function(event, can, key, value) {
can.rate = parseInt(value), can.onimport.page(can, can._msg.Table(), can.begin, can.limit)
can.rate = parseInt(value), can.onimport.page(can, can.list, can.begin, can.limit)
},
})
Volcanos("onexport", {help: "导出数据", list: ["total", "begin", "limit", "position", "文件"],

View File

@ -1,3 +1,9 @@
fieldset ul.story[data-type=premenu] {
cursor:pointer;
}
fieldset ul.story[data-type=premenu] li:hover {
background:cyan;
}
fieldset li.H2 {
font-weight:bold;
font-size:20px;

View File

@ -24,7 +24,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
premenu: function(can, list, target) { var meta = can.base.Obj(list.meta)
can.page.Select(can, can._output, "h2.story, h3.story", function(item) {
can.page.Append(can, target, [{text: [item.innerHTML, "li", item.tagName]}])
var ui = can.page.Append(can, target, [{text: [item.innerHTML, "li", item.tagName], onclick: function() {
item.scrollIntoView()
}}])
item.onclick = function(event) {
ui.first.scrollIntoView()
}
})
},
field: function(can, item, target) { var meta = can.base.Obj(item.meta)