1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00

opt contexts.js

This commit is contained in:
bergyu 2021-08-10 18:51:05 +08:00
parent 1e0f28e4ed
commit 303b9a6b33
8 changed files with 197 additions and 93 deletions

View File

@ -203,7 +203,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.core.List(list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) {
var cb = meta[item]||meta["_engine"]
cb? can.core.CallFunc(cb, [event, can, item]): can.run(event, [ctx.ACTION,item].concat(can.sup.Input()))
cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION,item].concat(can.sup.Input()))
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]

View File

@ -46,6 +46,9 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
res.option && (msg.option = res.option) && res.option.forEach(function(item) {
res[item] && (msg[item] = res[item])
})
res._option && (msg._option = res._option) && res._option.forEach(function(item) {
res[item] && (msg[item] = res[item])
})
return msg
},
Push: function(key, value, detail) {

View File

@ -3,7 +3,7 @@
"name": "volcanos", "version": "0.0.1",
"background": {"page": "/publish/chrome/chrome.html"},
"browser_action": {"default_popup": "/publish/chrome/popup.html"},
"content_scripts": [{"matches": ["<all_urls>"],
"content_scripts": [{"matches": ["<all_urls>"], "css": ["/publish/chrome/contexts.css"],
"js": ["/proto.js", "/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js",
"/plugin/state.js", "/plugin/input.js", "/plugin/table.js",
"/frame.js", "/publish/chrome/contexts.js"

View File

@ -1,67 +0,0 @@
fieldset.story {
color:white;
position:fixed;
background:radial-gradient(black, #00000073);
}
fieldset.story legend {
text-align:left;
cursor:pointer;
background:radial-gradient(black, #00000073);
}
fieldset.story form.option div.item {
float:left; margin-right:3px;
min-height:25px; vertical-align:middle;
}
fieldset.story input[type=button] {
background-color:#FF9900; color:white;
border-radius:10px 10px 10px 10px;
border:2px solid #FF9900;
}
fieldset.story input[type=button]:hover {
background-color:#FFCC33;
border:2px solid #FFCC33;
}
fieldset.story input[type=text] {
background-color:white; color:black;
border-radius:6px 6px 6px 6px;
border:2px solid #14a58e;
}
fieldset.story input[type=text]:hover {
background-color:cyan;
}
fieldset.story div.input textarea {
border-radius:6px;
border:2px solid #14a58e;
}
fieldset.story select {
background-color:#99CC66; color:white;
border-radius:10px 10px 10px 10px;
border:2px solid #99CC66;
}
fieldset.story div.output {
clear:both;
overflow:auto;
}
fieldset.story div.status div.item {
float:left; padding:4px;
height:18px;
}
fieldset.story div.status div.item>label {
font-size:10px;
/* color:#504242e0; */
}
fieldset.story table {
color:white;
}
fieldset.story table tr {
background-color:#e1f1ff1f;
}
fieldset.story table th {
background-color:#99CCFF;
}
fieldset.story table.content tr:hover {
background-color:green;
}

View File

@ -1,10 +1,16 @@
const kit = {
MDB_ID: "id",
MDB_KEY: "key",
MDB_TIME: "time",
MDB_ZONE: "zone",
MDB_TYPE: "type",
MDB_NAME: "name",
MDB_TEXT: "text",
MDB_LINK: "link",
MDB_VALUE: "value",
MDB_INDEX: "index",
MDB_ARGS: "args",
MDB_HASH: "hash",
MDB_LIST: "list",
@ -123,6 +129,7 @@ const html = {
CODE: "code",
SPAN: "span",
LABEL: "label",
VIDEO: "video",
BUTTON: "button",
LEGEND: "legend",
TEXTAREA: "textarea",

View File

@ -74,14 +74,11 @@ Volcanos("chrome", {
return true
})
chrome.contextMenus.create({title: "favor", onclick: function(event) {
chrome.contextMenus.create({title: "field", 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])
})
var msg = can.request(event); msg.detail = ["chrome", "", "", "order"]
chrome.tabs.sendMessage(tabs[0].id, msg)
})
}, })
}})
})

149
publish/chrome/contexts.css Normal file
View File

@ -0,0 +1,149 @@
fieldset.contexts {
color:white;
position:fixed;
background:radial-gradient(black, #00000073);
}
fieldset.contexts legend {
text-align:left;
cursor:pointer;
background:radial-gradient(black, #00000073);
}
fieldset.contexts form.option div.item {
float:left; margin-right:3px;
min-height:25px; vertical-align:middle;
}
fieldset.contexts input[type=button] {
background-color:#FF9900; color:white;
border-radius:10px 10px 10px 10px;
border:2px solid #FF9900;
}
fieldset.contexts input[type=button]:hover {
background-color:#FFCC33;
border:2px solid #FFCC33;
}
fieldset.contexts input[type=text] {
background-color:white; color:black;
border-radius:6px 6px 6px 6px;
border:2px solid #14a58e;
}
fieldset.contexts input[type=text]:hover {
background-color:cyan;
}
fieldset.contexts div.input textarea {
border-radius:6px;
border:2px solid #14a58e;
}
fieldset.contexts select {
background-color:#99CC66; color:white;
border-radius:10px 10px 10px 10px;
border:2px solid #99CC66;
}
fieldset.contexts div.output {
clear:both;
overflow:auto;
}
fieldset.contexts div.status div.item {
float:left; padding:4px;
height:18px;
}
fieldset.contexts div.status div.item>label {
font-size:10px;
/* color:#504242e0; */
}
fieldset.contexts table {
color:white;
border:0; white-space:pre;
}
fieldset.contexts table tr {
background-color:#e1f1ff1f;
}
fieldset.contexts table th {
background-color:#99CCFF;
padding:0 4px;
}
fieldset.contexts table td {
text-align:left;
padding:0 4px;
}
fieldset.contexts table.content tr:hover {
background-color:green;
}
fieldset.contexts div.code {
background-color:#343a3445; color:white;
font-size:14px; font-family:monospace;
box-shadow: 4px 4px 20px 4px #626bd0;
padding:10px; border:solid 3px green;
text-align:left; white-space:pre;
overflow:auto;
clear:both;
}
body>div.toast {
background:#0e3369b3; color:yellow;
position:fixed; z-index:100;
padding:5px; overflow:auto;
}
body>div.toast a {
color:yellow;
}
body>div.toast div.title {
float:left; word-break:break-all;
color:#cae850; font-size:14px;
cursor:copy;
}
body>div.toast div.duration {
color:gray; font-size:14px;
float:right;
cursor:pointer;
}
body>div.toast div.content {
text-align:center;
white-space:pre;
clear:both;
}
body>div.toast div.action div.item {
float:left;
}
body>div.toast div.progress {
height:10px; border:solid 2px green;
margin-left:-2px;
clear:both;
}
body>div.toast div.progress div.current {
height:10px; background:red;
}
body>div.carte {
position:fixed;
background:#295b61;
color:white;
padding:4px;
z-index:30;
min-width:80px;
}
body>div.carte div.item {
padding:3px 12px;
}
body>div.carte div.item:hover {
background:red;
}
body>div.input {
position:fixed;
background-color:#0d4142a6;
z-index:50;
}
body>div.input textarea {
box-shadow: 4px 4px 10px 1px #626bd0;
border:2px inset #14a58e;
width:165px; height:60px;
background-color: cyan;
padding:4px;
}
body>div.input div.item {
float:left;
}

View File

@ -1,35 +1,41 @@
Volcanos("chrome", {
pwd: function(can, msg, arg, cb) {
pwd: function(can, msg, arg) {
msg.Push("hi", "hello")
msg.Echo("hello")
console.log(arg)
cb()
},
style: function(can, msg, arg) {
can.page.Select(can, document.body, arg[0], function(target) {
can.page.Modify(can, target, can.base.Obj(arg[1]))
})
},
order: function(can, msg, arg) {
var ui = can.user.input(event, can, ["index", "args", "selection"], function(event, button, data, list, args) {
can.run(event, [chat.FIELD, mdb.INSERT, kit.MDB_ZONE, location.hostname].concat(args), function(res) {
can.user.toast(can, "添加成功")
})
})
can.page.Modify(can, ui._target, {style: {left: 200, top: 200}})
},
spide: function(can, msg, arg) { var has = {}
can.page.Select(can, document.body, "video", function(item) {
can.page.Select(can, document.body, html.VIDEO, function(item) {
if (!item.src || has[item.src]) { return } has[item.src] = true
var p = can.page.Select(can, document.body, "p.title")[0]
var ls = item.src.split("?")
var ls = ls[0].split(".")
msg.Push(kit.MDB_TIME, can.base.Time())
msg.Push(kit.MDB_TYPE, "video")
msg.Push(kit.MDB_NAME, (p && p.innerText || "video")+"."+ls[ls.length-1])
msg.Push(kit.MDB_TYPE, html.VIDEO)
msg.Push(kit.MDB_NAME, (p && p.innerText || html.VIDEO)+"."+ls[ls.length-1])
msg.Push(kit.MDB_TEXT, item.src)
msg.Push(kit.MDB_LINK, item.src)
})
can.page.Select(can, document.body, "img", function(item) {
can.page.Select(can, document.body, html.IMG, function(item) {
if (!item.src || has[item.src]) { return } has[item.src] = true
var ls = item.src.split("?")
var ls = ls[0].split("/")
msg.Push(kit.MDB_TIME, can.base.Time())
msg.Push(kit.MDB_TYPE, "img")
msg.Push(kit.MDB_TYPE, html.IMG)
if (item.src.indexOf("data:image") == 0) {
msg.Push(kit.MDB_NAME, item.src.slice(item.src.length-20))
@ -42,13 +48,13 @@ Volcanos("chrome", {
})
},
field: function(can, msg, arg) {
// can.require(["https://shylinux.com/page/index.css"])
can.require(["http://localhost:9020/page/field.css"])
can.onappend.plugin(can, {index: arg[0], arg: arg.slice(1)}, function(sub, meta) {
can.onappend.plugin(can, {index: arg[0], arg: can.base.Obj(arg[1])}, function(sub, meta) {
can.page.ClassList.add(can, sub._target, "contexts")
var top = msg.Option("top")||400
var left = msg.Option("left")||0
can.onmotion.float.auto(can, sub._output, "carte")
can.onmotion.float.auto(can, document.body, "carte")
can.page.Modify(can, sub._target, {style: {"top": top}})
can.page.Modify(can, sub._target, {style: {"top": top, "left": left}})
can.page.Modify(can, sub._output, {style: {
"max-height": window.innerHeight-top-80,
"max-width": window.innerWidth,
@ -59,9 +65,9 @@ Volcanos("chrome", {
can.onmotion.toggle(can, sub._action)
can.onmotion.toggle(can, sub._output)
can.onmotion.toggle(can, sub._status)
}, sub._legend.onclick()
}, msg.Option("selection")||sub._legend.onclick()
sub.run = function(event, cmds, cb) {
sub.run = function(event, cmds, cb) { if (cmds[0] == "_search") { return }
can.run(event, [ctx.ACTION, cli.RUN, meta.index].concat(cmds), cb)
}
can.onmotion.move(can, sub._target, {})
@ -70,17 +76,26 @@ Volcanos("chrome", {
sub.Option(msg.Option("selection"), window.getSelection())
sub.Update()
})
sub.onaction["保存参数"] = function(event) {
can.request(event, {zone: location.hostname, id: msg.Option(kit.MDB_ID)})
can.run(event, [chat.FIELD, mdb.MODIFY, "top", sub._target.offsetTop])
can.run(event, [chat.FIELD, mdb.MODIFY, "left", sub._target.offsetLeft])
can.run(event, [chat.FIELD, mdb.MODIFY, "args", JSON.stringify(sub.Input([], true))])
can.user.toast(can, "保存成功")
}
}, document.body)
},
Option: function() { return [] },
}, ["/frame.js"], function(can) {
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]) })
chrome.extension.onMessage.addListener(function(req, sender, cb) { var msg = can.request(); msg.Copy(req); can.misc.Log(req.detail, msg)
can.core.CallFunc([can, req.detail[3]||"spide"], {can: can, msg: msg, arg: req.detail.slice(4), cb: function() {
delete(msg._event), delete(msg._can), cb(msg)
}})
})
can.run = function(event, cmds, cb) { var msg = can.request(event, {hostname: location.hostname}); msg.detail = ["page"].concat(cmds)
can.run = function(event, cmds, cb) { if (cmds[0] == "_search") { return }
var msg = can.request(event, {hostname: location.hostname}); msg.detail = ["page"].concat(cmds)
chrome.runtime.sendMessage(msg, function(res) { can.base.isFunc(cb) && cb(msg.Copy(res)) })
}
can.run({}, [ctx.ACTION, ctx.COMMAND], function(msg) {