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) {
if (value != undefined) { localStorage.setItem(key, JSON.stringify(value)) }
return 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
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) {
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])

View File

@ -1,4 +1,4 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", img: {
Volcanos(chat.ONFIGURE, {img: {
_init: function(can, target) { can.onmotion.hidden(can, target)
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) {

View File

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

View File

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

View File

@ -27,7 +27,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, [""])
Volcanos(chat.ONFIGURE, {help: "索引导航",
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
function show(msg, cb) {
@ -114,6 +114,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
p: 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") }),
y: shy("添加插件", function(event, can) { can.onaction["查找"](event, can) }),
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }),
@ -346,7 +347,34 @@ Volcanos(chat.ONACTION, {help: "控件交互",
"浏览器": function(event, can) {
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
if (event == undefined) { return }
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) }
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) {

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.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.onappend._action(can, can.ondetail.list, sub._action, can.ondetail)
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"],
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
return parseInt((index+1)*100/total)+"%"+" = "+(parseInt(index)+1)+ice.PS+parseInt(total)