mirror of
https://shylinux.com/x/volcanos
synced 2025-04-26 01:04:06 +08:00
opt feel
This commit is contained in:
parent
f3c7e1fe62
commit
4d6784cf8a
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
*.swp
|
*.swp
|
||||||
|
.DS_Store
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script src="/proto.js"></script>
|
<script src="/proto.js"></script>
|
||||||
<script src="/plugin/chrome/chrome.js"></script>
|
<script src="/chrome/chrome.js"></script>
|
||||||
</body>
|
</body>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
|
@ -114,15 +114,7 @@ var can = Volcanos("chrome", {
|
|||||||
can.run = function(event, cmd, cb, silent) { var msg = can.request(event)
|
can.run = function(event, cmd, cb, silent) { var msg = can.request(event)
|
||||||
can.misc.Run(event, can, {names: "code/chrome/crx"}, cmd, cb)
|
can.misc.Run(event, can, {names: "code/chrome/crx"}, cmd, cb)
|
||||||
},
|
},
|
||||||
|
can.misc.WSS(can, "ws://localhost:9020/space/", {name: "chrome", type: "chrome"}, function(event, msg) {
|
||||||
chrome.history.onVisited.addListener(function(item) {
|
|
||||||
can.run({}, ["history", item.id, item.url, item.title], function(msg) {
|
|
||||||
can.user.toast(item.url, item.title)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return
|
|
||||||
|
|
||||||
can.misc.WSS(can, "ws://localhost:9020/space/", {node: "chrome", name: chrome.runtime.id}, function(event, msg) {
|
|
||||||
if (msg.Option("_handle")) {return can.user.toast(msg.result.join(""))}
|
if (msg.Option("_handle")) {return can.user.toast(msg.result.join(""))}
|
||||||
|
|
||||||
can.user.toast(msg.detail.join(" "))
|
can.user.toast(msg.detail.join(" "))
|
||||||
@ -136,10 +128,14 @@ var can = Volcanos("chrome", {
|
|||||||
msg.Reply(msg)
|
msg.Reply(msg)
|
||||||
}, function() {can.user.toast("wss connect", "iceberg")})
|
}, function() {can.user.toast("wss connect", "iceberg")})
|
||||||
|
|
||||||
can.run(can, {cmd: ["login", can.sid||""]}, function(msg) {
|
chrome.history.onVisited.addListener(function(item) {
|
||||||
can.sid = msg.Result()
|
can.run({}, ["history", item.id, item.title, item.url], function(msg) {
|
||||||
|
can.user.toast(item.url, item.title)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
chrome.bookmarks.onCreated.addListener(function(id, item) {
|
chrome.bookmarks.onCreated.addListener(function(id, item) {
|
||||||
chrome.bookmarks.get(item.parentId, function(root) {
|
chrome.bookmarks.get(item.parentId, function(root) {
|
||||||
can.run(can, {cmd: ["bookmark", item.id, item.url, item.title, root[0].title]}, function(msg) {
|
can.run(can, {cmd: ["bookmark", item.id, item.url, item.title, root[0].title]}, function(msg) {
|
||||||
|
24
frame.js
24
frame.js
@ -2,6 +2,9 @@
|
|||||||
// FMS: a fieldset manager system
|
// FMS: a fieldset manager system
|
||||||
|
|
||||||
Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
|
Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
|
||||||
|
can.run = function(event, cmds, cb) {
|
||||||
|
return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, can.request(event), can, cmds, cb)
|
||||||
|
}
|
||||||
can.core.Next(meta.panes, function(item, next) {
|
can.core.Next(meta.panes, function(item, next) {
|
||||||
can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) {
|
can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) {
|
||||||
pane.Conf(item), pane.run = function(event, cmds, cb) {
|
pane.Conf(item), pane.run = function(event, cmds, cb) {
|
||||||
@ -28,9 +31,11 @@ Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
|
|||||||
can.onengine && getRiver(can.onengine.river)
|
can.onengine && getRiver(can.onengine.river)
|
||||||
|
|
||||||
// 应用入口
|
// 应用入口
|
||||||
|
can.onappend.daemon(can, can.user.title())
|
||||||
can.user.title(can.user.Search(can, "title"))
|
can.user.title(can.user.Search(can, "title"))
|
||||||
var pane = can[meta.main.name], msg = can.request({});
|
var pane = can[meta.main.name], msg = can.request({});
|
||||||
pane.onaction && pane.onaction._init(pane, msg, msg.option||[], cb, target);
|
pane.onaction && pane.onaction._init(pane, msg, msg.option||[], cb, target);
|
||||||
|
|
||||||
})
|
})
|
||||||
}, target) });
|
}, target) });
|
||||||
},
|
},
|
||||||
@ -229,9 +234,9 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
|
|||||||
var table = Volcanos(display, { _help: display, _follow: can._follow+"."+meta.name+"."+display,
|
var table = Volcanos(display, { _help: display, _follow: can._follow+"."+meta.name+"."+display,
|
||||||
_target: output, Option: sub.Option, Action: sub.Action, Status: sub.Status,
|
_target: output, Option: sub.Option, Action: sub.Action, Status: sub.Status,
|
||||||
_option: option, _action: action, _output: output,
|
_option: option, _action: action, _output: output,
|
||||||
}, Volcanos.meta.libs.concat(["/frame.js", display]), function(table) { table.Conf(sub.Conf())
|
}, Volcanos.meta.libs.concat(["/frame.js", display]), function(table) { table.Conf(sub.Conf()), table._msg = msg
|
||||||
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function() {}, output)
|
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function() {}, output)
|
||||||
table._msg = msg, table.run = function(event, cmds, cb, silent) { cmds = cmds || []
|
table.run = function(event, cmds, cb, silent) { cmds = cmds || []
|
||||||
var last = sub._history[sub._history.length-1]; !can.core.Eq(last, cmds) && !silent && sub._history.push(cmds)
|
var last = sub._history[sub._history.length-1]; !can.core.Eq(last, cmds) && !silent && sub._history.push(cmds)
|
||||||
return run(event, cmds, cb, silent)
|
return run(event, cmds, cb, silent)
|
||||||
}
|
}
|
||||||
@ -549,6 +554,21 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
|
|||||||
|
|
||||||
}}]); ui.input.focus(), ui.input.setSelectionRange(0, -1)
|
}}]); ui.input.focus(), ui.input.setSelectionRange(0, -1)
|
||||||
},
|
},
|
||||||
|
daemon: function(can, name) {
|
||||||
|
can.misc.WSS(can, "", {name: name, type: "chrome"}, function(event, msg) {
|
||||||
|
if (msg.Option("_handle")) {return can.onappend.toast(can, msg.result.join(""))}
|
||||||
|
|
||||||
|
can.onappend.toast(can, msg.detail.join(" ")); switch (msg.detail[0]) {
|
||||||
|
case "pwd": msg.Echo("hello world"); break
|
||||||
|
default:
|
||||||
|
can.run(event, ["search"].concat(msg.detail), function(msg) {
|
||||||
|
msg.Reply(msg)
|
||||||
|
}); return
|
||||||
|
|
||||||
|
msg.Reply(msg)
|
||||||
|
}
|
||||||
|
}, function() {can.user.toast("wss connect", "iceberg")})
|
||||||
|
},
|
||||||
}, [], function(can) {})
|
}, [], function(can) {})
|
||||||
Volcanos("onlayout", { _init: function(can, meta, list, cb, target) {
|
Volcanos("onlayout", { _init: function(can, meta, list, cb, target) {
|
||||||
var width = can._width, height = can._height;
|
var width = can._width, height = can._height;
|
||||||
|
11
lib/misc.js
11
lib/misc.js
@ -82,7 +82,7 @@ var misc = Volcanos("misc", {help: "工具模块",
|
|||||||
|
|
||||||
delete(can._socket), setTimeout(function() {
|
delete(can._socket), setTimeout(function() {
|
||||||
// 断线重连
|
// 断线重连
|
||||||
can.misc.WSS(can, url, args, cb, onerror, onclose, onopen)
|
can.misc.WSS(can, url, args, cb, onopen, onerror, onclose)
|
||||||
}, 1000)
|
}, 1000)
|
||||||
}, can._socket.onerror = onerror || function() {if (!can._socket) {return}
|
}, can._socket.onerror = onerror || function() {if (!can._socket) {return}
|
||||||
console.log("socket error")
|
console.log("socket error")
|
||||||
@ -105,15 +105,18 @@ var misc = Volcanos("misc", {help: "工具模块",
|
|||||||
|
|
||||||
msg = (can.request||can.Event)(event, msg), msg.Reply = function() {
|
msg = (can.request||can.Event)(event, msg), msg.Reply = function() {
|
||||||
// 回复命令
|
// 回复命令
|
||||||
|
delete(msg._can)
|
||||||
|
delete(msg._event)
|
||||||
msg.Option("_handle", true)
|
msg.Option("_handle", true)
|
||||||
msg.Option("_target", msg.Option("_source"))
|
msg.Option("_target", msg.Option("_source"))
|
||||||
can.Log(["wss", order, "result"].concat(msg.result).concat([msg]))
|
console.log(["wss", order, "result"].concat(msg.result).concat([msg]))
|
||||||
delete(msg.event), can._socket.send(JSON.stringify(msg))
|
can._socket.send(JSON.stringify(msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 执行命令
|
// 执行命令
|
||||||
can.Log(["wss", order].concat(msg.detail).concat([msg]))
|
// c
|
||||||
|
console.log(["wss", order].concat(msg.detail).concat([msg]))
|
||||||
typeof cb == "function" && cb(event, msg, msg.detail[0], msg.detail.slice(1))
|
typeof cb == "function" && cb(event, msg, msg.detail[0], msg.detail.slice(1))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 执行失败
|
// 执行失败
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||||
},
|
},
|
||||||
|
demo: function(can, msg, cmd, cb) {
|
||||||
|
msg.Echo("hello demo world")
|
||||||
|
cb(msg)
|
||||||
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
function init() {
|
function init() {
|
||||||
|
9
plugin/local/wiki/feel.css
Normal file
9
plugin/local/wiki/feel.css
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fieldset.feel div.action {
|
||||||
|
clear:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset.feel div.output div.content {
|
||||||
|
max-height:200px;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
|
@ -1,157 +1,56 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) {
|
||||||
can._target.innerHTML = "", can.ui = can.page.Append(can, can._target, [
|
can._target.innerHTML = "", can.ui = can.page.Append(can, can._target, [
|
||||||
{view: "content"}, {view: "display"},
|
{view: "content"}, {view: "control"}, {view: "display"},
|
||||||
])
|
])
|
||||||
|
|
||||||
can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
|
can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
|
||||||
return {text: [value, "td"], oncontextmenu: function(event) {
|
return {text: [value, "td"], onclick: function(event) {
|
||||||
can.onappend.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) {
|
can.onimport.file(can, line.path)
|
||||||
var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line)
|
|
||||||
})
|
|
||||||
}, ondblclick: function(event) {
|
|
||||||
can.page.Modify(can, event.target, {contenteditable: true})
|
|
||||||
}}
|
}}
|
||||||
})
|
})
|
||||||
|
|
||||||
can.core.List(msg.result, function(item) {
|
var list = msg.Table(), begin = 0, limit = 3; function page() {
|
||||||
var ls = item.split("/")
|
can.ctrl.offset.innerHTML = begin+"-"+(begin+limit)
|
||||||
var ls = ls[ls.length-1].split(".")
|
can.onimport.page(can, list, begin, limit)
|
||||||
var ext = ls[ls.length-1].toLowerCase()
|
|
||||||
can.page.Append(can, can.ui.content, [can.onfigure[ext](can, item)])
|
|
||||||
})
|
|
||||||
},
|
|
||||||
init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
|
|
||||||
if (!msg.append || msg.append.length == 0) {return}
|
|
||||||
|
|
||||||
var list = msg.Table()
|
|
||||||
function view(index, width, auto, cb) {var item = list[can.page.Select(can, table, "tr")[index+1].dataset.index];
|
|
||||||
function menu(event) {var target = event.target;
|
|
||||||
can.user.carte(event, shy("", can.ondetail, can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
|
|
||||||
typeof cb == "function" && cb(event, can, item, index, "path", cmd, target);
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
var items = item.path.split(".");
|
|
||||||
switch (items[items.length-1]) {
|
|
||||||
case "png":
|
|
||||||
case "jpg":
|
|
||||||
case "JPG":
|
|
||||||
return {className: "preview", img: "/share/local/web.wiki.feel/"+item.path, width: width, oncontextmenu: menu}
|
|
||||||
case "MOV":
|
|
||||||
case "m4v":
|
|
||||||
default:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
can.ctrl = can.page.Append(can, can.ui.control, [
|
||||||
var table = can.page.AppendTable(can, output, msg, msg.append);
|
{button: ["clear", function() {
|
||||||
|
can.ui.display.innerHTML = ""
|
||||||
var begin = 0, limit = 3;
|
}]},
|
||||||
var rate = 1, width = 600;
|
{select: [["height", 100, 200, 400, 600, 800], function(event, value) {
|
||||||
var control = can.page.Append(can, output, [{view: ["control"], list: [
|
can.height = parseInt(value), page()
|
||||||
{select: [["width", 100, 200, 400, 600, 800], function(event, value) {width = parseInt(value), page(begin, limit)}]},
|
}]},
|
||||||
{select: [["rate", 0.1, 0.2, 0.5, 1, 2, 3, 5, 10], function(event, value) {rate = value}]},
|
{select: [["rate", 0.1, 0.2, 0.5, 1, 2, 3, 5, 10], function(event, value) {
|
||||||
|
can.rate = value, page()
|
||||||
|
}]},
|
||||||
{button: ["prev", function() {
|
{button: ["prev", function() {
|
||||||
begin > 0 && (begin -= limit, page(begin, limit));
|
begin > 0 && (begin -= limit, can.onimport.page(can, list, begin, limit))
|
||||||
}]},
|
}]},
|
||||||
{text: [begin+"-"+(begin+limit)], name: "offset"},
|
{text: [begin+"-"+(begin+limit)], name: "offset"},
|
||||||
{button: ["next", function() {
|
{button: ["next", function() {
|
||||||
begin < msg[msg.append[0]].length && (begin += limit, page(begin, limit));
|
begin < msg[msg.append[0]].length && (begin += limit, page())
|
||||||
|
}]},
|
||||||
|
{select: [["limit", 1, 3, 6, 9, 12, 15], function(event, value) {
|
||||||
|
limit = parseInt(value), page()
|
||||||
}]},
|
}]},
|
||||||
{text: [list.length]},
|
{text: [list.length]},
|
||||||
{select: [["limit", 3, 6, 9, 12, 15], function(event, value) {limit = parseInt(value), page(begin, limit)}]},
|
])
|
||||||
]}])
|
|
||||||
control.rate.value = rate
|
|
||||||
control.width.value = width
|
|
||||||
|
|
||||||
var preview = can.page.Append(can, output, [{view: ["preview"]}]).last
|
can.rate = can.ctrl.rate.value = 1
|
||||||
function page(begin, limit) {
|
limit = can.ctrl.limit.value = parseInt(msg.Option("limit"))||1
|
||||||
control.offset.innerHTML = begin+"-"+(begin+limit);
|
can.height = can.ctrl.height.value = parseInt(msg.Option("height"))||400
|
||||||
can.page.Appends(can, preview, msg.Table(function(item, index) {
|
can.onimport.page(can, list, begin, limit)
|
||||||
if (begin <= index && index < begin+limit) {return view(index, width, false, function(event) {var video = event.target;
|
|
||||||
switch (event.type) {
|
|
||||||
case "loadeddata": video.playbackRate = rate; break
|
|
||||||
case "timeupdate": video.playbackRate = rate; break
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
page(begin, limit);
|
|
||||||
|
|
||||||
function show(index) {var item = list[can.page.Select(can, table, "tr")[index+1].dataset.index];
|
|
||||||
var video = {};
|
|
||||||
var timer = can.user.toast({text: "", list: [{view: "control", list: [
|
|
||||||
{button: ["close", function(event) {video.pause(), timer.toast.Hide()}]},
|
|
||||||
{select: [["width", 100, 200, 400, 600, 800], function(event, value) {timer.toast.Show(event, parseInt(value)+20),
|
|
||||||
width = value
|
|
||||||
timer.toast.preview.setAttribute("width", value)
|
|
||||||
// video.width = value
|
|
||||||
}]},
|
|
||||||
{select: [["rate", 0.1, 0.2, 0.5, 1, 2, 3, 5, 10], function(event, value) {rate = video.playbackRate = value}]},
|
|
||||||
{button: ["prev", function(event) {show(index-1)}]},
|
|
||||||
{text: index+"/"+list.length},
|
|
||||||
{button: ["next", function(event) {show(index+1)}]},
|
|
||||||
{type: "br"}, {text: item.path},
|
|
||||||
{type: "br"}, {text: item.label},
|
|
||||||
]}].concat([view(index, 600, true, function(event) {video = event.target;
|
|
||||||
switch (event.type) {
|
|
||||||
case "loadeddata": video.playbackRate = rate; break
|
|
||||||
case "ended": show(index+1); break
|
|
||||||
}
|
|
||||||
})]), width: 600+20, height: 620, duration: -1})
|
|
||||||
timer.toast.width.value = 600;
|
|
||||||
timer.toast.rate.value = rate;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.onclick = function(event) {switch (event.target.tagName) {
|
|
||||||
case "TD":
|
|
||||||
can.onimport.which(event, table, msg.append, function(index, key) {
|
|
||||||
var name = event.target.innerHTML.trim()
|
|
||||||
if (name.endsWith("/")) {
|
|
||||||
can.Option("name", name), can.run(event, [name])
|
|
||||||
} else {
|
|
||||||
show(index);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
break
|
|
||||||
case "TH":
|
|
||||||
break
|
|
||||||
case "TR":
|
|
||||||
case "TABLE":
|
|
||||||
}}
|
|
||||||
table.oncontextmenu = function(event) {var target = event.target;
|
|
||||||
switch (event.target.tagName) {
|
|
||||||
case "TD":
|
|
||||||
can.onimport.which(event, table, msg.append, function(index, key) {
|
|
||||||
can.user.carte(event, shy("", can.ondetail, can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
|
|
||||||
var id = msg.Ids(index);
|
|
||||||
var sub = can.Event(event);
|
|
||||||
msg.append.forEach(function(key) {sub.Option(key, msg[key][index].trim())})
|
|
||||||
typeof cb == "function"? cb(event, can, msg, index, key, cmd, target):
|
|
||||||
// can.run(event, [id, typeof cb == "string"? cb: cmd, key, target.innerHTML], function(msg) {
|
|
||||||
can.run(event, ["action", typeof cb == "string"? cb: cmd, key, target.innerHTML], function(msg) {
|
|
||||||
can.onimport.init(can, msg, cb, output, option)
|
|
||||||
}, true)
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
event.stopPropagation()
|
|
||||||
event.preventDefault()
|
|
||||||
break
|
|
||||||
case "TH":
|
|
||||||
case "TR":
|
|
||||||
case "TABLE":
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return typeof cb == "function" && cb(msg), table;
|
|
||||||
},
|
},
|
||||||
which: function(event, table, list, cb) {if (event.target == table) {return cb(-1, "")}
|
page: function(can, list, begin, limit) { can.ui.display.innerHTML = ""
|
||||||
can.page.Select(can, table, "tr", function(tr, index) {if (event.target == tr) {return cb(index-1, "")}
|
for (var i = begin; i < begin+limit; i++) { can.onimport.file(can, list[i].path) }
|
||||||
can.page.Select(can, tr, "th,td", function(td, order) {
|
|
||||||
if (event.target == td) {return cb(index-1, list[order])}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
})
|
file: function(can, item) { item = (can._msg.Option("prefix")||"")+"/"+item
|
||||||
|
var ls = item.split("/")
|
||||||
|
var ls = ls[ls.length-1].split(".")
|
||||||
|
var ext = ls[ls.length-1].toLowerCase()
|
||||||
|
can.page.Append(can, can.ui.display, [can.onfigure[ext](can, item)])
|
||||||
|
},
|
||||||
|
}, ["/plugin/local/wiki/feel.css"])
|
||||||
Volcanos("onfigure", {help: "组件菜单", list: [],
|
Volcanos("onfigure", {help: "组件菜单", list: [],
|
||||||
image: function(can, path) {
|
image: function(can, path) {
|
||||||
return {img: "/share/local/"+path}
|
return {img: "/share/local/"+path}
|
||||||
@ -159,39 +58,27 @@ Volcanos("onfigure", {help: "组件菜单", list: [],
|
|||||||
jpg: function(can, path) { return can.onfigure.image(can, path) },
|
jpg: function(can, path) { return can.onfigure.image(can, path) },
|
||||||
qrc: function(can, path) { return can.onfigure.image(can, path) },
|
qrc: function(can, path) { return can.onfigure.image(can, path) },
|
||||||
|
|
||||||
video: function(can, path) {
|
video: function(can, path) { var auto = true, loop = true, total = 0
|
||||||
function cb(event) {
|
var p = location.href.startsWith("https")? "": "http://localhost:9020"
|
||||||
|
function cb(event) { console.log(event) }
|
||||||
|
return {className: "preview", type: "video", style: {height: can.height},
|
||||||
|
data: {src: p+"/share/local/"+path, controls: "controls", autoplay: auto, loop: loop, playbackRate: can.rate},
|
||||||
|
oncontextmenu: cb, onplay: cb, onpause: cb, onended: cb,
|
||||||
|
onloadedmetadata: function(event) { total = event.timeStamp
|
||||||
|
event.target.currentTime = can._msg.currentTime || 0
|
||||||
|
}, onloadeddata: cb, ontimeupdate: function(event) {
|
||||||
|
can.Status("当前行", can.onexport.position(can, (can._msg.currentTime=event.target.currentTime)-1, event.target.duration))
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return {className: "preview", type: "video", width: width, oncontextmenu: menu,
|
|
||||||
onplay: cb, onpause: cb,
|
|
||||||
onloadedmetadata: cb,
|
|
||||||
onloadeddata: cb,
|
|
||||||
ontimeupdate: cb,
|
|
||||||
onended: cb,
|
|
||||||
data: {src: "/share/local/"+path, controls: "controls", autoplay: auto, loop: false,
|
|
||||||
}}
|
|
||||||
},
|
},
|
||||||
m4v: function(can, path) { return can.onfigure.image(can, path) },
|
m4v: function(can, path) { return can.onfigure.video(can, path) },
|
||||||
})
|
})
|
||||||
|
|
||||||
Volcanos("onaction", {help: "组件菜单", list: ["上传"],
|
Volcanos("onaction", {help: "组件菜单", list: ["", "上传"],
|
||||||
"上传": function(event, can) { can.onappend.upload(can) },
|
"上传": function(event, can) { can.onappend.upload(can) },
|
||||||
})
|
})
|
||||||
Volcanos("ondetail", {help: "组件详情", list: ["标签"],
|
Volcanos("onexport", {help: "导出数据", list: ["当前行"],
|
||||||
"标签": function(event, can, msg, index, key, cmd, target) {
|
position: function(can, index, total) { total = total || can.max
|
||||||
can.user.prompt("目标", function(kind) {
|
return parseInt((index+1)*100/total)+"%"+" = "+(parseInt(index)+1)+"/"+parseInt(total)
|
||||||
can.run(event, ["action", "标签", msg.path, kind], function() {
|
|
||||||
}, true)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onstatus", {help: "组件状态", list: ["begin", "width", "point", "which"],
|
|
||||||
"begin": function(event, can, value, cmd, target) {target.innerHTML = value? value.x+","+value.y: ""},
|
|
||||||
"width": function(event, can, value, cmd, target) {target.innerHTML = value? value.width+","+value.height: ""},
|
|
||||||
"point": function(event, can, value, cmd, target) {target.innerHTML = value.x+","+value.y},
|
|
||||||
"which": function(event, can, value, cmd, target) {var figure = can.onfigure[value.tagName];
|
|
||||||
target.innerHTML = figure? figure.show(event, can, value, target): value.tagName;
|
|
||||||
},
|
|
||||||
})
|
|
||||||
Volcanos("onexport", {help: "导出数据", list: []})
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user