forked from x/volcanos
action add text chrome.spide
This commit is contained in:
parent
6c510422df
commit
9d3c1a6bd0
@ -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")})
|
||||
|
@ -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
|
||||
|
@ -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
28
chrome/spided.js
Normal 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)
|
||||
},
|
||||
})
|
||||
|
||||
|
12
frame.js
12
frame.js
@ -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: [
|
||||
|
@ -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()
|
||||
})
|
||||
|
@ -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))
|
||||
|
@ -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")) }
|
||||
|
||||
|
@ -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", "文件"],
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user