1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
harveyshao 2022-10-19 21:56:35 +08:00
parent 81f7175f64
commit e3f879e74f
9 changed files with 87 additions and 49 deletions

View File

@ -389,6 +389,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
}, },
localStorage: function(can, key, value) { localStorage: function(can, key, value) {
if (value != undefined) { localStorage.setItem(key, JSON.stringify(value)) } if (value != undefined) { localStorage.setItem(key, JSON.stringify(value)) }
return localStorage.getItem(key)
return can.base.Obj(localStorage.getItem(key), {}) return can.base.Obj(localStorage.getItem(key), {})
}, },
}) })

View File

@ -10,9 +10,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
}, },
_plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta, sub._target._plugin = sub _plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta, sub._target._plugin = sub
meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id) meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id)
can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth()) sub.Mode(can.Mode()), can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth())
sub.Mode(can.Mode())
sub.run = function(event, cmds, cb) { sub.run = function(event, cmds, cb) {
return can.run(sub.request(event, {width: sub.ConfWidth(), height: sub.ConfHeight()}), can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb) return can.run(sub.request(event, {width: sub.ConfWidth(), height: sub.ConfHeight()}), can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb)
}, can._plugins = can.misc.concat(can, can._plugins, [sub]) }, can._plugins = can.misc.concat(can, can._plugins, [sub])

View File

@ -1,4 +1,4 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", img: { Volcanos(chat.ONFIGURE, {img: {
_init: function(can, target) { can.onmotion.hidden(can, target) _init: function(can, target) { can.onmotion.hidden(can, target)
for (var i = 0; i < 1; i++) { for (var i = 0; i < 1; i++) {
can.page.Append(can, target.parentNode, [{type: html.DIV, style: {width: 90, height: 90, "background-color": "yellow"}, onclick: function(event) { can.page.Append(can, target.parentNode, [{type: html.DIV, style: {width: 90, height: 90, "background-color": "yellow"}, onclick: function(event) {

View File

@ -1,4 +1,4 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", key: { Volcanos(chat.ONFIGURE, {key: {
_load: function(event, can, cbs, target, name, value) { _load: function(event, can, cbs, target, name, value) {
can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) { can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) {
if (name == ctx.INDEX) { if (name == ctx.INDEX) {
@ -44,7 +44,6 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: {
onclick: function(event, can, meta, cb, target) { onclick: function(event, can, meta, cb, target) {
target._can && target._can.close() target._can && target._can.close()
can.onfigure.key._make(event, can, meta, cb, target) can.onfigure.key._make(event, can, meta, cb, target)
// can.onmotion.focus(can, target)
}, },
onfocus: function(event, can, meta, cb, target, last) { onfocus: function(event, can, meta, cb, target, last) {
can.onfigure.key._make(event, can, meta, cb, target) can.onfigure.key._make(event, can, meta, cb, target)

View File

@ -15,7 +15,11 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
function show(skip) { if (can.isCmdMode()) { can.onimport._title(can, path+file) } function show(skip) { if (can.isCmdMode()) { can.onimport._title(can, path+file) }
can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.tabview[key] can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.tabview[key]
can.Option(can.onimport.history(can, {path: path, file: file, line: line||can._msg.Option(nfs.LINE)||1}))
can.Option(can.onimport.history(can, {path: path, file: file, line: line||
can.user.localStorage(can, "web.code.vimer.selectLine:"+path+file)||
can._msg.Option(nfs.LINE)||
1}))
can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg
can.onexport.hash(can), msg._tab && can.onmotion.select(can, msg._tab.parentNode, html.DIV_TABS, msg._tab) can.onexport.hash(can), msg._tab && can.onmotion.select(can, msg._tab.parentNode, html.DIV_TABS, msg._tab)
can.ui._path && (can.ui._path.innerHTML = isDream()? can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)})): can.ui._path && (can.ui._path.innerHTML = isDream()? can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)})):
@ -459,7 +463,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.extentions[url.split("?")[0]] = sub, can.base.isFunc(cb)? cb(sub): sub.select() can.extentions[url.split("?")[0]] = sub, can.base.isFunc(cb)? cb(sub): sub.select()
}) }) }) })
}, },
sess: function(can, sess, cb) { sess = sess||can.user.localStorage(can, "web.code.inner.sess") sess: function(can, sess, cb) { sess = sess||can.base.Obj(can.user.localStorage(can, "web.code.inner.sess"), {})
can.core.Next(sess.plug, function(item, next) { can.onimport.toolkit(can, {index: item}, function(sub) { can.toolkit[item] = sub, next() }) }, function() { can.core.Next(sess.plug, function(item, next) { can.onimport.toolkit(can, {index: item}, function(sub) { can.toolkit[item] = sub, next() }) }, function() {
can.core.Next(sess.exts, function(item, next) { can.onimport.exts(can, item, next) }, function() { can.core.Next(sess.exts, function(item, next) { can.onimport.exts(can, item, next) }, function() {
var path = can.Option(nfs.PATH), file = can.Option(nfs.FILE), line = can.Option(nfs.LINE) var path = can.Option(nfs.PATH), file = can.Option(nfs.FILE), line = can.Option(nfs.LINE)

View File

@ -204,15 +204,15 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"defer": code.KEYWORD, "defer": code.KEYWORD,
"return": code.KEYWORD, "return": code.KEYWORD,
"false": "constant", "false": code.CONSTANT,
"true": "constant", "true": code.CONSTANT,
"nil": "constant", "nil": code.CONSTANT,
"iota": "constant", "iota": code.CONSTANT,
"-1": "constant", "-1": code.CONSTANT,
"0": "constant", "0": code.CONSTANT,
"1": "constant", "1": code.CONSTANT,
"2": "constant", "2": code.CONSTANT,
"3": "constant", "3": code.CONSTANT,
"int": code.DATATYPE, "int8": code.DATATYPE, "int16": code.DATATYPE, "int32": code.DATATYPE, "int64": code.DATATYPE, "int": code.DATATYPE, "int8": code.DATATYPE, "int16": code.DATATYPE, "int32": code.DATATYPE, "int64": code.DATATYPE,
"uint": code.DATATYPE, "uint8": code.DATATYPE, "uint16": code.DATATYPE, "uint32": code.DATATYPE, "uint64": code.DATATYPE, "uint": code.DATATYPE, "uint8": code.DATATYPE, "uint16": code.DATATYPE, "uint32": code.DATATYPE, "uint64": code.DATATYPE,
@ -315,9 +315,16 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
}, },
}, },
css: { css: {
split: {
operator: ".>{:;}",
},
regexp: {
"[0-9]+px": code.CONSTANT,
},
keyword: { keyword: {
"body": code.KEYWORD, "body": code.KEYWORD,
"div": code.KEYWORD, "div": code.KEYWORD,
"img": code.KEYWORD,
"span": code.KEYWORD, "span": code.KEYWORD,
"form": code.KEYWORD, "form": code.KEYWORD,
"fieldset": code.KEYWORD, "fieldset": code.KEYWORD,
@ -373,33 +380,32 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"margin-bottom": code.FUNCTION, "margin-bottom": code.FUNCTION,
"box-shadow": code.FUNCTION, "box-shadow": code.FUNCTION,
"0": "constant", "0": code.CONSTANT,
"10px": "constant", "cyan": code.CONSTANT,
"20px": "constant", "gray": code.CONSTANT,
"cyan": "constant", "yellow": code.CONSTANT,
"gray": "constant", "black": code.CONSTANT,
"yellow": "constant", "white": code.CONSTANT,
"black": "constant", "blue": code.CONSTANT,
"white": "constant", "red": code.CONSTANT,
"blue": "constant", "green": code.CONSTANT,
"red": "constant", "magenta": code.CONSTANT,
"green": "constant",
"magenta": "constant",
"monospace": "constant", "monospace": code.CONSTANT,
"bold": "constant", "hidden": code.CONSTANT,
"solid": "constant", "bold": code.CONSTANT,
"none": "constant", "solid": code.CONSTANT,
"block": "constant", "none": code.CONSTANT,
"contexts": "constant", "block": code.CONSTANT,
"both": "constant", "contexts": code.CONSTANT,
"auto": "constant", "both": code.CONSTANT,
"auto": code.CONSTANT,
"center": "constant", "center": code.CONSTANT,
"relative": "constant", "relative": code.CONSTANT,
"absolute": "constant", "absolute": code.CONSTANT,
"sticky": "constant", "sticky": code.CONSTANT,
"fixed": "constant", "fixed": code.CONSTANT,
}, },
}, },
iml: { iml: {
@ -426,8 +432,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"style": code.FUNCTION, "style": code.FUNCTION,
"width": code.FUNCTION, "width": code.FUNCTION,
"auto": "constant", "auto": code.CONSTANT,
"username": "constant", "username": code.CONSTANT,
}, },
}, },
}) })

View File

@ -27,7 +27,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, [""]) }, [""])
Volcanos(chat.ONFIGURE, {help: "索引导航", Volcanos(chat.ONFIGURE, {help: "索引导航",
create: function(can, target, zone, path) { create: function(can, target, zone, path) {
can.isCmdMode()? can.onappend._action(can, can.base.Obj(can._msg.Option(ice.MSG_ACTION)).concat(window.webview? ["vim", "录屏", "日志", "编辑器", "浏览器"]: []), target): can.onmotion.hidden(can, target.parentNode) can.isCmdMode()? can.onappend._action(can, can.base.Obj(can._msg.Option(ice.MSG_ACTION)).concat(window.webview? ["查找", "vim", "录屏", "日志", "编辑器", "浏览器"]: ["查找"]), target): can.onmotion.hidden(can, target.parentNode)
}, },
recent: function(can, target, zone, path) { var total = 0 recent: function(can, target, zone, path) { var total = 0
function show(msg, cb) { function show(msg, cb) {
@ -114,6 +114,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }), p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }),
e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }), e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }),
g: shy("打开搜索", function(event, can) { can.onimport.exts(can, "inner/search.js") }), g: shy("打开搜索", function(event, can) { can.onimport.exts(can, "inner/search.js") }),
y: shy("添加插件", function(event, can) { can.onaction["查找"](event, can) }),
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }), i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }), n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }),
@ -346,7 +347,34 @@ Volcanos(chat.ONACTION, {help: "控件交互",
"浏览器": function(event, can) { "浏览器": function(event, can) {
window.openurl(location.href) window.openurl(location.href)
}, },
"查找": function(event, can) {
var ui = can.page.Append(can, can._output, [{view: "vimer find", list: [html.ACTION, html.OUTPUT], style: {position: "absolute", left: can.ui.project.offsetWidth, top: 320}}])
can.onmotion.move(can, ui.first)
function find(begin, text) {
for (begin; begin <= can.max; begin++) {
if (can.onexport.text(can, can.onaction._getLine(can, begin)).indexOf(text) > -1) {
return can.onaction.selectLine(can, begin), can.current.scroll(can.current.scroll()-5)
}
}
}
function complete(target) {
can.onappend.figure(can, {action: "key", mode: "simple", run: function(event, cmds, cb) {
var msg = can.request(event); can.core.List(can.core.Split(can.current.text(), "\t \n:,{}"), function(value) { msg.Push("value", value) }), cb(msg)
}}, target)
}
var from, to
var meta = can.onappend._action(can, [
{type: "text", name: "from", _init: function(target) { from = target, complete(target), can.onmotion.delay(can, function() { target.focus() }) }},
{type: "text", name: "to", _init: function(target) { to = target, complete(target) }},
"find", "next", "replace", "close"], ui.action, {
find: function() { find(1, from.value) },
next: function() { find(can.onaction.selectLine(can)+1, from.value) },
replace: function() { can.current.text(can.current.text().replace(from.value, to.value)), meta.next() },
close: function() { can.page.Remove(can, ui.first) },
})
},
_complete: function(event, can, target) { target = target||can.ui.complete _complete: function(event, can, target) { target = target||can.ui.complete
if (event == undefined) { return } if (event == undefined) { return }
var pre = can.ui.current.value.slice(0, can.ui.current.selectionStart) var pre = can.ui.current.value.slice(0, can.ui.current.selectionStart)
@ -412,6 +440,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
if (event && event.type == "click") { can.onkeymap._insert(event, can, 0, (event.offsetX)/12-1) } if (event && event.type == "click") { can.onkeymap._insert(event, can, 0, (event.offsetX)/12-1) }
target.focus(), can.ui.content.scrollLeft -= 10000 target.focus(), can.ui.content.scrollLeft -= 10000
}) })
can.user.localStorage(can, "web.code.vimer.selectLine:"+can.Option(nfs.PATH)+can.Option(nfs.FILE), can.onaction._getLineno(can, can.current.line))
}, },
_getLine: function(can, line) { _getLine: function(can, line) {

View File

@ -131,7 +131,7 @@ Volcanos(chat.ONDETAIL, {help: "组件菜单", list: ["关闭", "下载", "删
sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) } sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) }
sub.getActionSize(function(msg, left, top, width, height) { sub.getActionSize(function(msg, left, top, width, height) {
sub.page.style(sub, sub._target, {left: left, top: top}) sub.page.style(sub, sub._target, {left: left||0, top: top||0})
sub.page.style(sub, sub._output, html.WIDTH, width, html.HEIGHT, height-2*html.ACTION_HEIGHT) sub.page.style(sub, sub._output, html.WIDTH, width, html.HEIGHT, height-2*html.ACTION_HEIGHT)
sub.onappend._action(can, can.ondetail.list, sub._action, can.ondetail) sub.onappend._action(can, can.ondetail.list, sub._action, can.ondetail)
sub.onappend._status(sub, ["begin", "file"]) sub.onappend._status(sub, ["begin", "file"])
@ -158,7 +158,7 @@ Volcanos(chat.ONDETAIL, {help: "组件菜单", list: ["关闭", "下载", "删
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [cli.BEGIN, mdb.LIMIT, mdb.TOTAL, nfs.FILE, "position"], Volcanos(chat.ONEXPORT, {help: "导出数据", list: [cli.BEGIN, mdb.LIMIT, mdb.TOTAL, nfs.FILE, "position"],
height: function(can) { var height = can.Action(html.HEIGHT) height: function(can) { var height = can.Action(html.HEIGHT)
return parseInt(height == ice.AUTO? can.base.Min(can.ConfHeight()/4, 200): height) return parseInt(height == ice.AUTO? can.base.Min(can.ConfHeight()/4, 200): height)||200
}, },
position: function(can, index, total) { total = total || can.max position: function(can, index, total) { total = total || can.max
return parseInt((index+1)*100/total)+"%"+" = "+(parseInt(index)+1)+ice.PS+parseInt(total) return parseInt((index+1)*100/total)+"%"+" = "+(parseInt(index)+1)+ice.PS+parseInt(total)

View File

@ -133,8 +133,8 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
}, },
"切换全屏": function(event, can, button, sub) { "切换全屏": function(event, can, button, sub) {
can.onaction._switch(can, sub, "full", function() { can.ConfWidth(window.innerWidth) can.onaction._switch(can, sub, "full", function() { can.ConfWidth(window.innerWidth)
can.page.style(can, can._target, html.LEFT, "", html.BOTTOM, "") can.page.style(can, can._target, html.LEFT, "", html.BOTTOM, "")
can.ConfHeight(window.innerHeight-html.ACTION_HEIGHT-can.onexport.statusHeight(can)-(can.user.isMobile? 2*html.ACTION_HEIGHT: 0)) can.ConfHeight(window.innerHeight-html.ACTION_HEIGHT-can.onexport.statusHeight(can)-(can.user.isMobile? 2*html.ACTION_HEIGHT: 0))
}, function() {}) }, function() {})
}, },
"共享工具": function(event, can) { var meta = can.Conf() "共享工具": function(event, can) { var meta = can.Conf()