1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-04-17 21:21:01 +08:00
parent 84280ccb94
commit 6779eed0c5
8 changed files with 78 additions and 30 deletions

View File

@ -178,11 +178,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
_target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status, _target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status,
CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, Input: can.Input, Option: can.Option, Action: can.Action, Status: can.Status, CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, Input: can.Input, Option: can.Option, Action: can.Action, Status: can.Status,
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item) }, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item)
if (item.type == html.BUTTON && can.base.isIn(item.name, mdb.CREATE, mdb.INSERT)) { if (item.type == html.BUTTON && can.base.isIn(item.name, mdb.CREATE, mdb.INSERT)) { can.onappend.style(can, "icons", sub._target.parentNode)
can.onappend.style(can, "icons", sub._target.parentNode) can.page.Append(can, sub._target.parentNode, [{icon: item.name, onclick: function(event) { can.Update(event, [ctx.ACTION, item.name]) }}])
can.page.Append(can, sub._target.parentNode, [{icon: item.name, onclick: function(event) { }
can.Update(event, [ctx.ACTION, item.name])
}}]) }
if (item.type == html.TEXT) { can.page.Append(can, sub._target.parentNode, [{text: [sub._target.value, html.SPAN, mdb.VALUE]}]) } if (item.type == html.TEXT) { can.page.Append(can, sub._target.parentNode, [{text: [sub._target.value, html.SPAN, mdb.VALUE]}]) }
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))._caller() sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))._caller()
msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent)

View File

@ -6,7 +6,7 @@ select { background-color:black; color:cyan; padding:0 10px; margin-right:5px; }
input:not([type=file]) { background-color:cyan; padding:0 5px; margin-right:5px; } input:not([type=file]) { background-color:cyan; padding:0 5px; margin-right:5px; }
input:not([type=button]) { width:120px; } input:not([type=button]) { width:120px; }
input[name=path] { width:160px; } input[name=path] { width:160px; }
input[name=line] { width:40px; } input[name=line] { width:60px; }
input[name=limit] { width:60px; } input[name=limit] { width:60px; }
input[name=offend] { width:60px; } input[name=offend] { width:60px; }
input[name=id] { width:60px; } input[name=id] { width:60px; }
@ -365,8 +365,8 @@ fieldset.can.data { font-size:14px; }
body.mobile fieldset.plugin>legend { border:none; } body.mobile fieldset.plugin>legend { border:none; }
body.en fieldset.input.date.float>div.action>div.item.select { margin:0 5px; } body.en fieldset.input.date.float>div.action>div.item.select { margin:0 5px; }
body.en fieldset.input.date.float>div.action>div.item.select select { width:64px; } body.en fieldset.input.date.float>div.action>div.item.select select { width:64px; }
body.en fieldset.input.date.float>div.action>div.item.select.year select { width:115px; } body.en fieldset.input.date.float>div.action>div.item.select.year select { width:114px; }
body.en fieldset.input.date.float>div.action>div.item.select.month select { width:115px; } body.en fieldset.input.date.float>div.action>div.item.select.month select { width:112px; }
body.zh fieldset.input.date.float>div.action>div.item.select { margin:0 5px; } body.zh fieldset.input.date.float>div.action>div.item.select { margin:0 5px; }
body.zh fieldset.input.date.float>div.action>div.item.select select { width:68px; } body.zh fieldset.input.date.float>div.action>div.item.select select { width:68px; }
body.zh fieldset.input.date.float>div.action>div.item.select.year select { width:95px; } body.zh fieldset.input.date.float>div.action>div.item.select.year select { width:95px; }

View File

@ -95,6 +95,9 @@ div.vimer.open.float td:first-child { display:none; }
div.path span.item { padding:5px; } div.path span.item { padding:5px; }
div.carte.path.float { font-size:14px; border-radius:0; } div.carte.path.float div.item { padding:5px; } div.carte.path.float { font-size:14px; border-radius:0; } div.carte.path.float div.item { padding:5px; }
div.carte.cmd.float { font-size:14px; border-radius:0; } div.cmd.path.float div.item { padding:5px; } div.carte.cmd.float { font-size:14px; border-radius:0; } div.cmd.path.float div.item { padding:5px; }
tr.line.delete { background-color:#ff000036; color:gray; }
tr.line.insert { background-color:#00800036; }
fieldset.inner>div.output>div.project div.item.modify { background-color:#00800036; }
tr.line>td.line { text-align:right; padding:0 10px; position:sticky; left:0; } tr.line>td.line { text-align:right; padding:0 10px; position:sticky; left:0; }
tr.line>td.text { line-height:20px; white-space:pre; padding-left:10px; cursor:text; } tr.line>td.text { line-height:20px; white-space:pre; padding-left:10px; cursor:text; }
body.white tr.line.select { background-color:dimgray; } body.white tr.line:hover { background-color:dimgray; } body.white tr.line.select { background-color:dimgray; } body.white tr.line:hover { background-color:dimgray; }

View File

@ -3,10 +3,10 @@ const PROJECT_HIDE = "web.code.inner:project", TABVIEW_HIDE = "web.code.inner:ta
const CURRENT_FILE = "web.code.inner:currentFile", SELECT_LINE = "web.code.inner:selectLine" const CURRENT_FILE = "web.code.inner:currentFile", SELECT_LINE = "web.code.inner:selectLine"
const VIEW_CREATE = "tabview.view.create", VIEW_REMOVE = "tabview.view.remove", LINE_SELECT = "tabview.line.select" const VIEW_CREATE = "tabview.view.create", VIEW_REMOVE = "tabview.view.remove", LINE_SELECT = "tabview.line.select"
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can), can.onappend.style(can, code.INNER) Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can), can.onappend.style(can, code.INNER)
if (msg.Option(nfs.FILE)) { can.Option(nfs.FILE, msg.Option(nfs.FILE)) // if (msg.Option(nfs.FILE)) { can.Option(nfs.FILE, msg.Option(nfs.FILE))
msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH)) // msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH))
msg.Option(nfs.LINE) && can.Option(nfs.LINE, msg.Option(nfs.LINE)) // msg.Option(nfs.LINE) && can.Option(nfs.LINE, msg.Option(nfs.LINE))
} if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return } // } if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return }
var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0]) var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0])
var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0]) var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0])
can.core.List(paths.concat(can.core.Split(msg.Option(nfs.REPOS))), function(p) { if (can.base.endWith(p, "-story/", "-dict/")) { return } can.core.List(paths.concat(can.core.Split(msg.Option(nfs.REPOS))), function(p) { if (can.base.endWith(p, "-story/", "-dict/")) { return }
@ -269,7 +269,10 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) {
}, can.ui._content, can.ui._profile, can.ui._display)) { return can.base.isFunc(cb) && cb(msg._content) } }, can.ui._content, can.ui._profile, can.ui._display)) { return can.base.isFunc(cb) && cb(msg._content) }
if (can.base.Ext(can.Option(nfs.FILE)) == nfs.SVG) { msg.Option(ctx.INDEX, web.WIKI_DRAW+ice.FS+can.Option(nfs.PATH)+can.Option(nfs.FILE)) } if (can.base.Ext(can.Option(nfs.FILE)) == nfs.SVG) { msg.Option(ctx.INDEX, web.WIKI_DRAW+ice.FS+can.Option(nfs.PATH)+can.Option(nfs.FILE)) }
if (msg.Option(ctx.INDEX)) { return can.onsyntax._index(can, msg, cb) } if (msg.Option(ctx.INDEX)) { return can.onsyntax._index(can, msg, cb) }
function show(p) { can.db.max = 0, can.core.List(msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) }) function show(p) { can.db.max = 0
if (msg.Length() > 0) { can.onsyntax._change(can, msg), can.onaction.rerankLine(can, "tr.line:not(.delete)>td.line")
can.page.Select(can, can.ui.content, "tr.line.delete>td.line", function(target) { target.innerHTML = "" })
} else { can.core.List(msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) }) }
can.onengine.signal(can, VIEW_CREATE, msg), can.base.isFunc(cb) && cb(msg._content = can.ui._content) can.onengine.signal(can, VIEW_CREATE, msg), can.base.isFunc(cb) && cb(msg._content = can.ui._content)
} can.require(["inner/syntax.js"], function() { can.Conf(chat.PLUG) && (can.onsyntax[can.db.parse] = can.Conf(chat.PLUG)) } can.require(["inner/syntax.js"], function() { can.Conf(chat.PLUG) && (can.onsyntax[can.db.parse] = can.Conf(chat.PLUG))
var p = can.onsyntax[can.db.parse]; !p? can.runAction({}, mdb.PLUGIN, [can.db.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { var p = can.onsyntax[can.db.parse]; !p? can.runAction({}, mdb.PLUGIN, [can.db.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
@ -277,12 +280,38 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) {
}): show(p) }): show(p)
}) })
}, },
_change: function(can, msg) { var _delete = [], _insert = [], deletes = [], inserts = []
function append() { var rest = []
while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[0]) {
can.onaction.appendLine(can, deletes[0]), deletes = deletes.slice(1), inserts = inserts.slice(1)
}
while (deletes.length > 0 && inserts.length > 0 && deletes[deletes.length-1] == inserts[inserts.length-1]) {
can.onaction.appendLine(can, deletes[deletes.length-1]), deletes.pop(), inserts.pop()
}
while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[inserts.length-1]) {
rest.push(deletes[0]), deletes = deletes.slice(1), inserts.pop()
}
can.core.List(deletes, function(item) { can.onappend.style(can, mdb.DELETE, can.onaction.appendLine(can, item)) }), deletes = []
can.core.List(inserts, function(item) { can.onappend.style(can, mdb.INSERT, can.onaction.appendLine(can, item)) }), inserts = []
can.core.List(rest, function(item) { can.onaction.appendLine(can, item) })
}
msg.Table(function(value) { can.core.List(value.text.split(ice.NL), function(item, index, list) {
if (index == list.length-1 && !can.base.endWith(value.text, ice.NL)) {
if (value.type == mdb.DELETE) { _delete.push(item) } else if (value.type == mdb.INSERT) { _insert.push(item) } else { _delete.push(item), _insert.push(item) }
} else if (value.type == mdb.DELETE) {
_delete.push(item), deletes.push(_delete.join("")), _delete = []
} else if (value.type == mdb.INSERT) {
_insert.push(item), inserts.push(_insert.join("")), _insert = []
} else if (_delete.length > 0 || _insert.length > 0) {
_delete.push(item), _insert.push(item), deletes.push(_delete.join("")), _delete = [], inserts.push(_insert.join("")), _insert = []
} else { append(), can.onaction.appendLine(can, item) }
}) }), _delete.length > 0 && deletes.push(_delete.join("")), _insert.length > 0 && inserts.push(_insert.join("")), append()
},
_space: function(can, msg, cb) { if (can.Option(nfs.LINE) == web.SPACE) { can.ui.zone.space && can.onmotion.delay(can, function() { can.ui.zone.space.refresh() }, 5000) _space: function(can, msg, cb) { if (can.Option(nfs.LINE) == web.SPACE) { can.ui.zone.space && can.onmotion.delay(can, function() { can.ui.zone.space.refresh() }, 5000)
return can.base.isFunc(cb) && cb(msg._content = can.page.insertBefore(can, [{view: [html.CONTENT, html.IFRAME], return can.base.isFunc(cb) && cb(msg._content = can.page.insertBefore(can, [{view: [html.CONTENT, html.IFRAME],
src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight, width: can.ui.content.offsetWidth}], can.ui._content)), true src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight, width: can.ui.content.offsetWidth}], can.ui._content)), true
} }, } },
_index: function(can, msg, cb) { if (msg._content) { return can.base.isFunc(cb) && cb(msg._content) } if (can.onsyntax._space(can, msg, cb)) { return } _index: function(can, msg, cb) { if (msg._content) { return can.base.isFunc(cb) && cb(msg._content) } if (can.onsyntax._space(can, msg, cb)) { return }
var index = msg.Option(ctx.INDEX).split(ice.FS), item = {type: chat.STORY, index: index[0], args: index.slice(1)} var index = msg.Option(ctx.INDEX).split(ice.FS), item = {type: chat.STORY, index: index[0], args: index.slice(1)}
can.onimport.plug(can, item, function(sub) { sub.onimport.size(sub, can.ui.content.offsetHeight, can.ui.content.offsetWidth, true) can.onimport.plug(can, item, function(sub) { sub.onimport.size(sub, can.ui.content.offsetHeight, can.ui.content.offsetWidth, true)
sub.onimport._open = function(sub, msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE), sub.Update() } sub.onimport._open = function(sub, msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE), sub.Update() }
@ -317,6 +346,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) {
}) })
Volcanos(chat.ONACTION, { Volcanos(chat.ONACTION, {
_getLine: function(can, line) { return can.page.Select(can, can.ui.content, "tr.line>td.line", function(td, index) { if (td.parentNode == line || index+1 == line) { return td.parentNode } })[0] }, _getLine: function(can, line) { return can.page.Select(can, can.ui.content, "tr.line>td.line", function(td, index) { if (td.parentNode == line || index+1 == line) { return td.parentNode } })[0] },
modifyLine: function(can, line, value) { can.page.Select(can, can.onaction._getLine(can, line), "td.text", function(td) { td.innerHTML = can.onsyntax._parse(can, value) }) },
appendLine: function(can, value) { var ui = can.page.Append(can, can.ui._content, [{view: [nfs.LINE, html.TR], list: [ appendLine: function(can, value) { var ui = can.page.Append(can, can.ui._content, [{view: [nfs.LINE, html.TR], list: [
{view: [nfs.LINE, html.TD, ++can.db.max], onclick: function(event) { {view: [nfs.LINE, html.TD, ++can.db.max], onclick: function(event) {
can.onaction.selectLine(can, ui.tr) can.onaction.selectLine(can, ui.tr)
@ -326,6 +356,7 @@ Volcanos(chat.ONACTION, {
if (event.metaKey) { if (ui.text.innerText.indexOf(ice.HTTP) > -1) { var ls = (/(http[^ ]+)/).exec(ui.text.innerText); if (ls && ls[1]) { can.user.open(ls[1]) } } } if (event.metaKey) { if (ui.text.innerText.indexOf(ice.HTTP) > -1) { var ls = (/(http[^ ]+)/).exec(ui.text.innerText); if (ls && ls[1]) { can.user.open(ls[1]) } } }
}, ondblclick: function(event) { can.onaction.searchLine(event, can, can.onexport.selection(can, ui.text.innerText)) }} }, ondblclick: function(event) { can.onaction.searchLine(event, can, can.onexport.selection(can, ui.text.innerText)) }}
]}]); return ui._target }, ]}]); return ui._target },
rerankLine: function(can, which) { can.db.max = can.page.Select(can, can.ui.content, which||"tr.line:not(.delete)>td.line", function(td, index) { return td.innerText = index+1 }).length },
selectLine: function(can, line, scroll) { if (!line) { return can.onexport.line(can, can.page.SelectOne(can, can.ui.content, "tr.select")) } selectLine: function(can, line, scroll) { if (!line) { return can.onexport.line(can, can.page.SelectOne(can, can.ui.content, "tr.select")) }
can.page.Select(can, can.ui._content, "tr.line>td.line", function(target) { var n = parseInt(target.innerText); target = target.parentNode can.page.Select(can, can.ui._content, "tr.line>td.line", function(target) { var n = parseInt(target.innerText); target = target.parentNode
if (!can.page.ClassList.set(can, target, html.SELECT, n == line || target == line)) { return } if (!can.page.ClassList.set(can, target, html.SELECT, n == line || target == line)) { return }

View File

@ -33,11 +33,19 @@ Volcanos(chat.ONFIGURE, {
var total, cache; function add(list) { var total, cache; function add(list) {
can.core.List(list, function(item) { if (path == args[0] && args[1].indexOf(item.path) == 0) { item.expand = true } can.core.List(list, function(item) { if (path == args[0] && args[1].indexOf(item.path) == 0) { item.expand = true }
item._menu = shy({trash: function(event, button) { item._menu = shy({trash: function(event, button) {
can.runAction(event, nfs.TRASH, [path+item.path], function() { can.runAction(event, nfs.TRASH, [path+item.path], function() { show(target, zone, path) })
show(target, zone, path)
})
}}) }})
item._init = function(target) { item._remove = function() { can.page.Remove(can, target.parentNode), delete(cache[item.path]) } } if (msg.result && msg.result.indexOf(item.path) > -1) { item.expand = true }
item._init = function(target) {
if (msg.result && msg.result.indexOf(item.path) > -1) {
can.onmotion.delay(can, function() { can.onappend.style(can, mdb.MODIFY, target.parentNode)
for (var _target = target.parentNode; _target != zone._target; _target = _target.parentNode) {
_target.previousSibling && can.onappend.style(can, mdb.MODIFY, _target.previousSibling)
}
})
}
item._remove = function() { can.page.Remove(can, target.parentNode), delete(cache[item.path]) }
}
}); return can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, target, cache) }); return can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, target, cache)
} cache = add(msg.Table()), can.Status(mdb.COUNT, total += zone._total(msg.Length())) } cache = add(msg.Table()), can.Status(mdb.COUNT, total += zone._total(msg.Length()))
}, true) } if (path.length == 1) { return show(target, zone, path[0]) } }, true) } if (path.length == 1) { return show(target, zone, path[0]) }
@ -68,7 +76,7 @@ Volcanos(chat.ONFIGURE, {
} } } }
}) }, }) },
}) })
Volcanos(chat.ONACTION, {list: ["编译", "提交", "首页", "收藏", "脑图", "计划"], Volcanos(chat.ONACTION, {list: ["编译", "变更", "源码", "终端", "导图", "计划", "收藏", "首页"],
_run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) { _run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) {
can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh(), can.user.toastSuccess(can, button) can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh(), can.user.toastSuccess(can, button)
}) }, }) },
@ -106,11 +114,13 @@ Volcanos(chat.ONACTION, {list: ["编译", "提交", "首页", "收藏", "脑图"
var sub = can.db.toolkit[list[0]]; sub? sub.select(): can.onimport.exts(can, list[0]) var sub = can.db.toolkit[list[0]]; sub? sub.select(): can.onimport.exts(can, list[0])
}) }, }) },
"编译": function(event, can) { can.onaction.compile(event, can, code.COMPILE) }, "编译": function(event, can) { can.onaction.compile(event, can, code.COMPILE) },
"提交": function(event, can) { can.onimport.tabview(can, "", web.CODE_GIT_STATUS, ctx.INDEX) }, "变更": function(event, can) { can.onimport.tabview(can, "", [web.CODE_GIT_REPOS, can.core.Split(can.Option(nfs.PATH), nfs.PS).pop(), nfs.MASTER, "index", can.Option(nfs.FILE)].join(ice.FS), ctx.INDEX) },
"首页": function(event, can) { can.onimport.tabview(can, "", location.origin+ice.PS+(can.misc.Search(can, log.DEBUG) == ice.TRUE? "?debug=true": ""), web.SPACE) }, "源码": function(event, can) { can.onimport.tabview(can, "", web.CODE_GIT_REPOS, ctx.INDEX) },
"收藏": function(event, can) { can.onimport.tabview(can, "", web.CHAT_FAVOR, ctx.INDEX) }, "终端": function(event, can) { can.onimport.tabview(can, "", web.CODE_XTERM, ctx.INDEX) },
"图": function(event, can) { can.onimport.tabview(can, "", web.WIKI_DRAW, ctx.INDEX) }, "图": function(event, can) { can.onimport.tabview(can, "", web.WIKI_DRAW, ctx.INDEX) },
"计划": function(event, can) { can.onimport.tabview(can, "", web.TEAM_PLAN, ctx.INDEX) }, "计划": function(event, can) { can.onimport.tabview(can, "", web.TEAM_PLAN, ctx.INDEX) },
"收藏": function(event, can) { can.onimport.tabview(can, "", web.CHAT_FAVOR, ctx.INDEX) },
"首页": function(event, can) { can.onimport.tabview(can, "", location.origin+ice.PS+(can.misc.Search(can, log.DEBUG) == ice.TRUE? "?debug=true": ""), web.SPACE) },
"全屏": function(event, can) { can._target.requestFullScreen() }, "全屏": function(event, can) { can._target.requestFullScreen() },
"录屏": function(event, can) { window.openapp("QuickTime Player") }, "录屏": function(event, can) { window.openapp("QuickTime Player") },
"编辑器": function(event, can) { window.opencmd("cd ~/contexts; vim +"+can.Option(nfs.LINE)+" "+can.Option(nfs.PATH)+can.Option(nfs.FILE)) }, "编辑器": function(event, can) { window.opencmd("cd ~/contexts; vim +"+can.Option(nfs.LINE)+" "+can.Option(nfs.PATH)+can.Option(nfs.FILE)) },
@ -170,10 +180,8 @@ Volcanos(chat.ONACTION, {list: ["编译", "提交", "首页", "收藏", "脑图"
can.current.line.appendChild(target), can.page.style(can, target, html.LEFT, td.offsetLeft-1, html.TOP, td.offsetTop, html.WIDTH, can.base.Min(td.offsetWidth, can.ui._content.offsetWidth)) can.current.line.appendChild(target), can.page.style(can, target, html.LEFT, td.offsetLeft-1, html.TOP, td.offsetTop, html.WIDTH, can.base.Min(td.offsetWidth, can.ui._content.offsetWidth))
can.db.mode == mdb.NORMAL && can.onkeymap._normal(can) can.db.mode == mdb.NORMAL && can.onkeymap._normal(can)
}) }, }) },
rerankLine: function(can, value) { can.db.max = can.page.Select(can, can.ui.content, "tr>td.line", function(td, index) { return td.innerText = index+1 }).length },
insertLine: function(can, value, before) { var line = can.onaction.appendLine(can, value); before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before)); return can.onaction.rerankLine(can), can.onexport.line(can, line) }, insertLine: function(can, value, before) { var line = can.onaction.appendLine(can, value); before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before)); return can.onaction.rerankLine(can), can.onexport.line(can, line) },
deleteLine: function(can, line) { line = can.onaction._getLine(can, line); var next = line.nextSibling||line.previousSibling; return can.page.Remove(can, line), can.onaction.rerankLine(can), next }, deleteLine: function(can, line) { line = can.onaction._getLine(can, line); var next = line.nextSibling||line.previousSibling; return can.page.Remove(can, line), can.onaction.rerankLine(can), next },
modifyLine: function(can, line, value) { can.page.Select(can, can.onaction._getLine(can, line), "td.text", function(td) { td.innerHTML = can.onsyntax._parse(can, value) }) },
scrollHold: function(can, count, begin) { var scroll = can.ui.content.scrollLeft; can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin), can.ui.content.scrollLeft = scroll }, scrollHold: function(can, count, begin) { var scroll = can.ui.content.scrollLeft; can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin), can.ui.content.scrollLeft = scroll },
cursorDown: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p) }, cursorDown: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p) },
cursorUp: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) }, cursorUp: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) },

View File

@ -10,9 +10,9 @@ fieldset.plan>div.output table.content.plan td div.date { color:gray; }
fieldset.plan>div.output table.content.plan td div.date span.lunar { font-size:12px; } fieldset.plan>div.output table.content.plan td div.date span.lunar { font-size:12px; }
fieldset.plan>div.output table.content.plan td div.date span.lunar.fest { color:red; } fieldset.plan>div.output table.content.plan td div.date span.lunar.fest { color:red; }
fieldset.plan>div.output table.content.plan td div.date span.lunar.term { color:green; } fieldset.plan>div.output table.content.plan td div.date span.lunar.term { color:green; }
fieldset.plan>div.output table.content.plan td div.prepare { background-color:blue; } fieldset.plan>div.output table.content.plan td div.prepare { background-color:#0000ff70; }
fieldset.plan>div.output table.content.plan td div.process { background-color:green; } fieldset.plan>div.output table.content.plan td div.process { background-color:#00800070; }
fieldset.plan>div.output table.content.plan td div.cancel { background-color:red; } fieldset.plan>div.output table.content.plan td div.cancel { background-color:#ff000070; }
fieldset.plan>div.output table.content.plan td div.finish { background-color:gray; } fieldset.plan>div.output table.content.plan td div.finish { background-color:gray; }
fieldset.plan>div.output table.content.plan tr:first-child { height:30px; position:sticky; top:2px; } fieldset.plan>div.output table.content.plan tr:first-child { height:30px; position:sticky; top:2px; }
fieldset.plan>div.output table.content.plan th:first-child { width:40px; position:sticky; left:2px; } fieldset.plan>div.output table.content.plan th:first-child { width:40px; position:sticky; left:2px; }

View File

@ -12,11 +12,15 @@ Volcanos(chat.ONIMPORT, {
_clear: function(can, msg) { can.onmotion.clear(can) }, _clear: function(can, msg) { can.onmotion.clear(can) },
_inner: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) }, _inner: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) },
_field: function(can, msg) { var height = can.ConfHeight(); can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight }) _field: function(can, msg) { var height = can.ConfHeight(); can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight })
msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: can.base.Min(height, 240)}, function(sub, meta) { height = can.base.Min(height, can.isCmdMode()? can.ConfHeight()/2: 320)
msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: height}, function(sub, meta) {
sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { sub.ConfHeight(can.ConfHeight()/2) sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { sub.ConfHeight(can.ConfHeight()/2)
var res = can.request(); res.Echo(sub.Conf(ice.MSG_RESULT)), can.onappend._output(sub, res, sub.Conf(ctx.DISPLAY)); return var res = can.request(); res.Echo(sub.Conf(ice.MSG_RESULT)), can.onappend._output(sub, res, sub.Conf(ctx.DISPLAY)); return
} }
sub.run = function(event, cmds, cb) { sub.onimport.size(sub, height, can.ConfWidth(), true) sub.run = function(event, cmds, cb) { sub.onimport.size(sub, height, can.ConfWidth(), true)
sub.onexport.output = function() {
can.page.SelectChild(can, can._output, html.TABLE, function(target) { can.page.style(can, target, html.MAX_HEIGHT, can.ConfHeight()-height, html.DISPLAY, html.BLOCK) })
}
can.run(event, (!msg.Option("_index") || msg.Option("_index") == can._index || can._index.indexOf("can.") == 0? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true) can.run(event, (!msg.Option("_index") || msg.Option("_index") == can._index || can._index.indexOf("can.") == 0? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true)
} }
}) }) }) })

View File

@ -84,7 +84,7 @@ var web = {CHAT: "chat",
Accept: "Accept", ContentType: "Content-Type", ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded", Accept: "Accept", ContentType: "Content-Type", ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded",
IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm", IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm",
CODE_GIT_STATUS: "web.code.git.status", CODE_GIT_REPOS: "web.code.git.repos", CODE_GIT_STATUS: "web.code.git.status",
CHAT_FAVOR: "web.chat.favor", CHAT_FAVOR: "web.chat.favor",
CODE_XTERM: "web.code.xterm", CODE_VIMER: "web.code.vimer", CODE_INNER: "web.code.inner", CODE_XTERM: "web.code.xterm", CODE_VIMER: "web.code.vimer", CODE_INNER: "web.code.inner",
WIKI_WORD: "web.wiki.word", WIKI_DRAW: "web.wiki.draw", WIKI_FEEL: "web.wiki.feel", WIKI_WORD: "web.wiki.word", WIKI_DRAW: "web.wiki.draw", WIKI_FEEL: "web.wiki.feel",
@ -115,6 +115,7 @@ var nfs = {
DIR: "dir", CAT: "cat", DEFS: "defs", TRASH: "trash", DIR_ROOT: "dir_root", PWD: "./", DIR: "dir", CAT: "cat", DEFS: "defs", TRASH: "trash", DIR_ROOT: "dir_root", PWD: "./",
COPY: "copy", EDIT: "edit", SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags", COPY: "copy", EDIT: "edit", SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags",
CONTENT: "content", RECENT: "recent", SCRIPT: "script", MODULE: "module", SOURCE: "source", TARGET: "target", REPOS: "repos", CONTENT: "content", RECENT: "recent", SCRIPT: "script", MODULE: "module", SOURCE: "source", TARGET: "target", REPOS: "repos",
MASTER: "master",
PATH: "path", FILE: "file", LINE: "line", SIZE: "size", PATH: "path", FILE: "file", LINE: "line", SIZE: "size",
REPLACE: "replace", FROM: "from", TO: "to", REPLACE: "replace", FROM: "from", TO: "to",
HTML: "html", CSS: "css", JS: "js", SH: "sh", GO: "go", CSV: "csv", JSON: "json", HTML: "html", CSS: "css", JS: "js", SH: "sh", GO: "go", CSV: "csv", JSON: "json",
@ -123,6 +124,9 @@ var nfs = {
_CSS: ".css", _JS: ".js", _CSS: ".css", _JS: ".js",
SRC: "src/", SRC: "src/",
OPENS: "opens", OPENS: "opens",
PS: "/",
PT: ".",
DF: ":",
} }
var cli = { var cli = {
PWD: "pwd", SYSTEM: "system", DAEMON: "daemon", ORDER: "order", BUILD: "build", PWD: "pwd", SYSTEM: "system", DAEMON: "daemon", ORDER: "order", BUILD: "build",