mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
add some
This commit is contained in:
parent
f15c99f3bd
commit
a4437facdb
@ -273,7 +273,9 @@ Volcanos(chat.ONSYNTAX, {
|
|||||||
"not": code.DATATYPE, "first-child": code.DATATYPE, "last-child": code.DATATYPE, "nth-child": code.DATATYPE,
|
"not": code.DATATYPE, "first-child": code.DATATYPE, "last-child": code.DATATYPE, "nth-child": code.DATATYPE,
|
||||||
"placeholder": code.DATATYPE, "hover": code.DATATYPE, "focus": code.DATATYPE,
|
"placeholder": code.DATATYPE, "hover": code.DATATYPE, "focus": code.DATATYPE,
|
||||||
|
|
||||||
|
"$action": code.KEYWORD,
|
||||||
"$output": code.KEYWORD,
|
"$output": code.KEYWORD,
|
||||||
|
|
||||||
"output": code.KEYWORD,
|
"output": code.KEYWORD,
|
||||||
"background-color": code.FUNCTION, "color": code.FUNCTION,
|
"background-color": code.FUNCTION, "color": code.FUNCTION,
|
||||||
"font-family": code.FUNCTION, "font-weight": code.FUNCTION, "font-style": code.FUNCTION, "font-size": code.FUNCTION, "line-height": code.FUNCTION,
|
"font-family": code.FUNCTION, "font-weight": code.FUNCTION, "font-style": code.FUNCTION, "font-size": code.FUNCTION, "line-height": code.FUNCTION,
|
||||||
|
@ -175,138 +175,137 @@ Volcanos(chat.ONKEYMAP, {
|
|||||||
case lex.TB:
|
case lex.TB:
|
||||||
case lex.SP:
|
case lex.SP:
|
||||||
case nfs.PT:
|
case nfs.PT:
|
||||||
case "[":
|
case "[": // ]
|
||||||
case "(":
|
case "(": // )
|
||||||
case "{": update(); break
|
case "{": update(); break // }
|
||||||
case "":
|
case "":
|
||||||
default: filter()
|
default: filter()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_mode: {
|
_mode: {
|
||||||
plugin: {
|
plugin: {
|
||||||
Escape: shy("清除浮窗", function(event, can) { can.onaction.clear(event, can) }),
|
Escape: shy("清除浮窗", function(event, can) { can.onaction.clear(event, can) }),
|
||||||
f: shy("打开文件", function(event, can) { can.onaction.open(event, can) }),
|
f: shy("打开文件", function(event, can) { can.onaction.open(event, can) }),
|
||||||
g: shy("查找搜索", function(event, can) { can.onaction.find(event, can) }),
|
g: shy("查找搜索", function(event, can) { can.onaction.find(event, can) }),
|
||||||
d: shy("查找函数", function(event, can) { can.page.Select(can, can.ui.path, "span.func", function(target) { target.click() }) }),
|
d: shy("查找函数", function(event, can) { can.page.Select(can, can.ui.path, "span.func", function(target) { target.click() }) }),
|
||||||
n: shy("命令模式", function(event, can) { can.onaction.selectLine(can, can.onaction.selectLine(can)), can.onkeymap._normal(can) }),
|
n: shy("命令模式", function(event, can) { can.onaction.selectLine(can, can.onaction.selectLine(can)), can.onkeymap._normal(can) }),
|
||||||
i: shy("插入模式", function(event, can) { can.onaction.selectLine(can, can.onaction.selectLine(can)), can.onkeymap._insert(event, can) }),
|
i: shy("插入模式", function(event, can) { can.onaction.selectLine(can, can.onaction.selectLine(can)), can.onkeymap._insert(event, can) }),
|
||||||
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
||||||
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
||||||
v: shy("渲染界面", function(event, can) { can.onaction.show(event, can) }),
|
v: shy("渲染界面", function(event, can) { can.onaction.show(event, can) }),
|
||||||
r: shy("执行命令", function(event, can) { can.onaction.exec(event, can) }),
|
r: shy("执行命令", function(event, can) { can.onaction.exec(event, can) }),
|
||||||
t: shy("添加命令", function(event, can) { can.onaction["命令"](event, can) }),
|
t: shy("添加命令", function(event, can) { can.onaction["命令"](event, can) }),
|
||||||
p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }),
|
p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }),
|
||||||
l: shy("打开右边标签", function(can) { var next = can._tab.nextSibling; next && next.click() }),
|
l: shy("打开右边标签", function(can) { var next = can._tab.nextSibling; next && next.click() }),
|
||||||
h: shy("打开左边标签", function(can) { var prev = can._tab.previousSibling; prev && prev.click() }),
|
h: shy("打开左边标签", function(can) { var prev = can._tab.previousSibling; prev && prev.click() }),
|
||||||
x: shy("关闭标签", function(can) { can._tab._close() }),
|
x: shy("关闭标签", function(can) { can._tab._close() }),
|
||||||
},
|
},
|
||||||
normal: {
|
normal: {
|
||||||
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
||||||
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
||||||
v: shy("渲染界面", function(event, can) { can.onaction.show(event, can) }),
|
v: shy("渲染界面", function(event, can) { can.onaction.show(event, can) }),
|
||||||
r: shy("执行命令", function(event, can) { can.onaction.exec(event, can) }),
|
r: shy("执行命令", function(event, can) { can.onaction.exec(event, can) }),
|
||||||
|
|
||||||
Escape: shy("切换模式", function(can) { can.onkeymap._plugin(can) }),
|
Escape: shy("切换模式", function(can) { can.onkeymap._plugin(can) }),
|
||||||
ArrowLeft: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }),
|
ArrowLeft: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }),
|
||||||
ArrowRight: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }),
|
ArrowRight: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }),
|
||||||
ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
||||||
ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
||||||
H: shy("跳到行首", function(can, target) { can.onkeymap.cursorMove(target, 0, 0) }),
|
H: shy("跳到行首", function(can, target) { can.onkeymap.cursorMove(target, 0, 0) }),
|
||||||
L: shy("跳到行尾", function(can, target) { can.onkeymap.cursorMove(target, 0, -1) }),
|
L: shy("跳到行尾", function(can, target) { can.onkeymap.cursorMove(target, 0, -1) }),
|
||||||
h: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }),
|
h: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }),
|
||||||
l: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }),
|
l: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }),
|
||||||
j: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
j: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
||||||
k: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
k: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
||||||
|
|
||||||
I: shy("插入行首", function(event, can) { can.onkeymap._insert(event, can, 0, 0) }),
|
I: shy("插入行首", function(event, can) { can.onkeymap._insert(event, can, 0, 0) }),
|
||||||
A: shy("插入行尾", function(event, can) { can.onkeymap._insert(event, can, 0, -1) }),
|
A: shy("插入行尾", function(event, can) { can.onkeymap._insert(event, can, 0, -1) }),
|
||||||
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
|
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
|
||||||
a: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
|
a: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
|
||||||
o: shy("插入下一行", function(event, can) { var text = can.current.text()
|
o: shy("插入下一行", function(event, can) { var text = can.current.text()
|
||||||
text = text.substr(0, text.indexOf(text.trimLeft()))+(can.base.endWith(text, "{")? lex.TB: "")
|
text = text.substr(0, text.indexOf(text.trimLeft()))+(can.base.endWith(text, "{")? lex.TB: "")
|
||||||
can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.next()))
|
can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.next()))
|
||||||
can.onkeymap._insert(event, can, 0, -1)
|
can.onkeymap._insert(event, can, 0, -1)
|
||||||
}),
|
}),
|
||||||
O: shy("插入上一行", function(event, can) { var text = can.current.text()
|
O: shy("插入上一行", function(event, can) { var text = can.current.text()
|
||||||
text = text.substr(0, text.indexOf(text.trimLeft()))+(can.base.beginWith(text, "}")? lex.TB: "")
|
text = text.substr(0, text.indexOf(text.trimLeft()))+(can.base.beginWith(text, "}")? lex.TB: "")
|
||||||
can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.line))
|
can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.line))
|
||||||
can.onkeymap._insert(event, can, 0, -1)
|
can.onkeymap._insert(event, can, 0, -1)
|
||||||
}),
|
}),
|
||||||
|
|
||||||
yy: shy("复制当前行", function(event, can, target, count) { var list = [], line = can.current.line
|
yy: shy("复制当前行", function(event, can, target, count) { var list = [], line = can.current.line
|
||||||
for (var i = 0; i < count; i++) { list.push(can.onexport.text(can, line)), line = line.nextSibling } can.db._last_text = list; return true
|
for (var i = 0; i < count; i++) { list.push(can.onexport.text(can, line)), line = line.nextSibling } can.db._last_text = list; return true
|
||||||
}),
|
}),
|
||||||
dd: shy("剪切当前行", function(event, can, target, count) { var line = can.onaction.selectLine(can), callee = arguments.callee
|
dd: shy("剪切当前行", function(event, can, target, count) { var line = can.onaction.selectLine(can), callee = arguments.callee
|
||||||
var list = []; for (var i = 0; i < count; i++) { (function() { var line = can.onaction.selectLine(can), text = can.current.text(); list.push(text)
|
var list = []; for (var i = 0; i < count; i++) { (function() { var line = can.onaction.selectLine(can), text = can.current.text(); list.push(text)
|
||||||
can.onaction.selectLine(can, can.onaction.deleteLine(can, line)), can.db.undo.push(function() { can.onaction.insertLine(can, text, line), can.onaction.selectLine(can, line) })
|
can.onaction.selectLine(can, can.onaction.deleteLine(can, line)), can.db.undo.push(function() { can.onaction.insertLine(can, text, line), can.onaction.selectLine(can, line) })
|
||||||
})() } can.db._last_text = list, can.db.redo.push(function() { callee(event, can, target, count) })
|
})() } can.db._last_text = list, can.db.redo.push(function() { callee(event, can, target, count) })
|
||||||
return true
|
return true
|
||||||
}),
|
}),
|
||||||
p: shy("向后粘贴", function(can) { if (!can.db._last_text) { return } var line = can.onaction.selectLine(can), callee = arguments.callee
|
p: shy("向后粘贴", function(can) { if (!can.db._last_text) { return } var line = can.onaction.selectLine(can), callee = arguments.callee
|
||||||
for (var i = can.db._last_text.length-1; i >= 0; i--) { (function() { var line = can.onaction.insertLine(can, can.db._last_text[i], can.current.next())
|
for (var i = can.db._last_text.length-1; i >= 0; i--) { (function() { var line = can.onaction.insertLine(can, can.db._last_text[i], can.current.next())
|
||||||
can.db.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line-1) })
|
can.db.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line-1) })
|
||||||
})() } can.db.redo.push(function() { callee(event, can, target, count) })
|
})() } can.db.redo.push(function() { callee(event, can, target, count) })
|
||||||
}),
|
}),
|
||||||
P: shy("向前粘贴", function(can) { if (!can.db._last_text) { return } var line = can.onaction.selectLine(can), callee = arguments.callee
|
P: shy("向前粘贴", function(can) { if (!can.db._last_text) { return } var line = can.onaction.selectLine(can), callee = arguments.callee
|
||||||
for (var i = 0; i < can.db._last_text.length; i++) { (function() { var line = can.onaction.insertLine(can, can.db._last_text[i], can.current.line)
|
for (var i = 0; i < can.db._last_text.length; i++) { (function() { var line = can.onaction.insertLine(can, can.db._last_text[i], can.current.line)
|
||||||
can.db.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line+1) })
|
can.db.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line+1) })
|
||||||
})() } can.db.redo.push(function() { callee(event, can, target, count) })
|
})() } can.db.redo.push(function() { callee(event, can, target, count) })
|
||||||
}),
|
}),
|
||||||
J: shy("合并两行", function(can) { var next = can.current.next(); if (!next) { return }
|
J: shy("合并两行", function(can) { var next = can.current.next(); if (!next) { return }
|
||||||
var line = can.onaction.selectLine(can), text = can.current.text(), rest = can.onexport.text(can, next)
|
var line = can.onaction.selectLine(can), text = can.current.text(), rest = can.onexport.text(can, next)
|
||||||
can.ui.current.value = can.current.text(text.trimRight()+(can.base.endWith(text.trim(), "(", "[")||can.base.beginWith(rest.trim(), ",", "]", ")")? "": lex.SP)+rest.trimLeft())
|
can.ui.current.value = can.current.text(text.trimRight()+(can.base.endWith(text.trim(), "(", "[")||can.base.beginWith(rest.trim(), ",", "]", ")")? "": lex.SP)+rest.trimLeft())
|
||||||
can.onkeymap.cursorMove(can.ui.current, text.length, 0), can.onaction.deleteLine(can, next)
|
can.onkeymap.cursorMove(can.ui.current, text.length, 0), can.onaction.deleteLine(can, next)
|
||||||
can.db.undo.push(function() { can.onaction.modifyLine(can, line, text), can.onaction.insertLine(can, rest, line+1) })
|
can.db.undo.push(function() { can.onaction.modifyLine(can, line, text), can.onaction.insertLine(can, rest, line+1) })
|
||||||
}),
|
}),
|
||||||
".": shy("重复操作", function(can) { var cb = can.db.redo.pop(); cb && cb() }),
|
".": shy("重复操作", function(can) { var cb = can.db.redo.pop(); cb && cb() }),
|
||||||
u: shy("撤销操作", function(can) { var cb = can.db.undo.pop(); cb && cb() }),
|
u: shy("撤销操作", function(can) { var cb = can.db.undo.pop(); cb && cb() }),
|
||||||
|
|
||||||
gg: shy("跳到某行", function(can, count) { return can.onaction.selectLine(can, count), true }),
|
|
||||||
G: shy("跳到某行", function(can, count) { return can.onaction.selectLine(can, count = count>1? count: can.db.max), true }),
|
|
||||||
zt: shy("屏幕最上", function(can, count) { return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true }),
|
|
||||||
zz: shy("屏幕中间", function(can, count) { return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true }),
|
|
||||||
zb: shy("屏幕最下", function(can, count) { return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true }),
|
|
||||||
F5: shy("刷新网页", function(can, target) { can.user.reload(true) }),
|
|
||||||
},
|
|
||||||
normal_ctrl: {
|
|
||||||
e: shy("向上滚屏", function(can) { can.current.scroll(1); if (can.current.scroll()<2) { can.onaction.selectLine(can, can.current.next()) } }),
|
|
||||||
y: shy("向下滚屏", function(can) { can.current.scroll(-1); if (can.current.scroll()>can.current.window()-3) { can.onaction.selectLine(can, can.current.prev()) } }),
|
|
||||||
f: shy("向下翻页", function(can, count) { can.current.scroll(can.current.window()) }),
|
|
||||||
b: shy("向上翻页", function(can, count) { can.current.scroll(-can.current.window()) }),
|
|
||||||
r: shy("刷新页面", function(can) { can.user.reload(true) }),
|
|
||||||
},
|
|
||||||
insert_ctrl: {
|
|
||||||
a: shy("光标行首", function(can, target) { for (var i = 0; i < target.value.length; i++) { if (target.value[i] != lex.TB) { break } } can.onkeymap.cursorMove(target, i, 0), can.onkeymap.prevent(event) }),
|
|
||||||
e: shy("光标行尾", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, 0, -1) }),
|
|
||||||
b: shy("光标左移", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, -1) }),
|
|
||||||
f: shy("光标右移", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, 1) }),
|
|
||||||
d: shy("删除字符", function(can, target) { can.user.isWindows && can.onkeymap.deleteText(target, target.selectionStart, 1) }),
|
|
||||||
},
|
|
||||||
insert: {
|
|
||||||
Escape: shy("退出编辑", function(can) { can.onkeymap._normal(can), can.ui.current._keylist = [] }),
|
|
||||||
ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
|
||||||
ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
|
||||||
Backspace: shy("删除字符", function(event, can, target) { if (target.selectionStart > 0 || !can.current.prev()) { return } can.onkeymap.prevent(event)
|
|
||||||
var rest = can.current.text(); can.onaction.selectLine(can, can.current.prev()), can.onaction.deleteLine(can, can.current.next())
|
|
||||||
var text = can.current.text(); can.ui.current.value = text+rest, can.onkeymap.cursorMove(target, 0, text.length)
|
|
||||||
}),
|
|
||||||
Tab: shy("添加缩进", function(event, can) { can.onkeymap.insertText(can.ui.current, lex.TB), can.onkeymap.prevent(event) }),
|
|
||||||
Enter: shy("插入换行", function(can, target) {
|
|
||||||
var rest = can.onkeymap.deleteText(target, target.selectionEnd).trimLeft(), text = can.ui.current.value
|
|
||||||
var left = text.substr(0, text.indexOf(text.trimLeft()))||(text.trimRight() == ""? text: "")
|
|
||||||
var line = can.onaction.selectLine(can), next = rest; for (var i = line; i < can.db.max; i++) { next += can.onexport.text(can, can.onaction._getLine(can, i)).trimLeft(); if (next != "") { break } }
|
|
||||||
function deep(text) { var deep = 0; for (var i = 0; i < text.length; i++) { if (text[i] == lex.TB) { deep += 4 } else if (text[i] == lex.SP) { deep++ } else { break } } return deep }
|
|
||||||
text.trim() && can.core.List(["{}", "[]", "()", "``"], function(item) { if (can.base.endWith(text, item[0])) {
|
|
||||||
if (can.base.beginWith(next, item[1])) {
|
|
||||||
can.onaction.insertLine(can, left+rest, can.current.next()), rest = ""
|
|
||||||
} else if (deep(text) >= deep(can.onexport.text(can, can.onaction._getLine(can, line+1))) && rest == "") {
|
|
||||||
can.onaction.insertLine(can, left+item[1], can.current.next())
|
|
||||||
} left += lex.TB
|
|
||||||
} else if (can.base.beginWith(rest, item[1])) { left = left.slice(0, -1) }})
|
|
||||||
var line = can.onaction.insertLine(can, left+rest, can.current.next())
|
|
||||||
can.current.text(text.trimRight()||text), can.onaction.selectLine(can, line), can.onkeymap._insert(event, can, 0, left.length)
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
}, _engine: {},
|
|
||||||
})
|
|
||||||
|
|
||||||
|
gg: shy("跳到某行", function(can, count) { return can.onaction.selectLine(can, count), true }),
|
||||||
|
G: shy("跳到某行", function(can, count) { return can.onaction.selectLine(can, count = count>1? count: can.db.max), true }),
|
||||||
|
zt: shy("屏幕最上", function(can, count) { return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true }),
|
||||||
|
zz: shy("屏幕中间", function(can, count) { return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true }),
|
||||||
|
zb: shy("屏幕最下", function(can, count) { return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true }),
|
||||||
|
F5: shy("刷新网页", function(can, target) { can.user.reload(true) }),
|
||||||
|
},
|
||||||
|
normal_ctrl: {
|
||||||
|
e: shy("向上滚屏", function(can) { can.current.scroll(1); if (can.current.scroll()<2) { can.onaction.selectLine(can, can.current.next()) } }),
|
||||||
|
y: shy("向下滚屏", function(can) { can.current.scroll(-1); if (can.current.scroll()>can.current.window()-3) { can.onaction.selectLine(can, can.current.prev()) } }),
|
||||||
|
f: shy("向下翻页", function(can, count) { can.current.scroll(can.current.window()) }),
|
||||||
|
b: shy("向上翻页", function(can, count) { can.current.scroll(-can.current.window()) }),
|
||||||
|
r: shy("刷新页面", function(can) { can.user.reload(true) }),
|
||||||
|
},
|
||||||
|
insert_ctrl: {
|
||||||
|
a: shy("光标行首", function(can, target) { for (var i = 0; i < target.value.length; i++) { if (target.value[i] != lex.TB) { break } } can.onkeymap.cursorMove(target, i, 0), can.onkeymap.prevent(event) }),
|
||||||
|
e: shy("光标行尾", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, 0, -1) }),
|
||||||
|
b: shy("光标左移", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, -1) }),
|
||||||
|
f: shy("光标右移", function(can, target) { can.user.isWindows && can.onkeymap.cursorMove(target, 1) }),
|
||||||
|
d: shy("删除字符", function(can, target) { can.user.isWindows && can.onkeymap.deleteText(target, target.selectionStart, 1) }),
|
||||||
|
},
|
||||||
|
insert: {
|
||||||
|
Escape: shy("退出编辑", function(can) { can.onkeymap._normal(can), can.ui.current._keylist = [] }),
|
||||||
|
ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
|
||||||
|
ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }),
|
||||||
|
Backspace: shy("删除字符", function(event, can, target) { if (target.selectionStart > 0 || !can.current.prev()) { return } can.onkeymap.prevent(event)
|
||||||
|
var rest = can.current.text(); can.onaction.selectLine(can, can.current.prev()), can.onaction.deleteLine(can, can.current.next())
|
||||||
|
var text = can.current.text(); can.ui.current.value = text+rest, can.onkeymap.cursorMove(target, 0, text.length)
|
||||||
|
}),
|
||||||
|
Tab: shy("添加缩进", function(event, can) { can.onkeymap.insertText(can.ui.current, lex.TB), can.onkeymap.prevent(event) }),
|
||||||
|
Enter: shy("插入换行", function(can, target) {
|
||||||
|
var rest = can.onkeymap.deleteText(target, target.selectionEnd).trimLeft(), text = can.ui.current.value
|
||||||
|
var left = text.substr(0, text.indexOf(text.trimLeft()))||(text.trimRight() == ""? text: "")
|
||||||
|
var line = can.onaction.selectLine(can), next = rest; for (var i = line; i < can.db.max; i++) { next += can.onexport.text(can, can.onaction._getLine(can, i)).trimLeft(); if (next != "") { break } }
|
||||||
|
function deep(text) { var deep = 0; for (var i = 0; i < text.length; i++) { if (text[i] == lex.TB) { deep += 4 } else if (text[i] == lex.SP) { deep++ } else { break } } return deep }
|
||||||
|
text.trim() && can.core.List(["{}", "[]", "()", "``"], function(item) { if (can.base.endWith(text, item[0])) {
|
||||||
|
if (can.base.beginWith(next, item[1])) {
|
||||||
|
can.onaction.insertLine(can, left+rest, can.current.next()), rest = ""
|
||||||
|
} else if (deep(text) >= deep(can.onexport.text(can, can.onaction._getLine(can, line+1))) && rest == "") {
|
||||||
|
can.onaction.insertLine(can, left+item[1], can.current.next())
|
||||||
|
} left += lex.TB
|
||||||
|
} else if (can.base.beginWith(rest, item[1])) { left = left.slice(0, -1) }})
|
||||||
|
var line = can.onaction.insertLine(can, left+rest, can.current.next())
|
||||||
|
can.current.text(text.trimRight()||text), can.onaction.selectLine(can, line), can.onkeymap._insert(event, can, 0, left.length)
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
}, _engine: {},
|
||||||
|
})
|
||||||
|
196
plugin/table.js
196
plugin/table.js
@ -1,67 +1,15 @@
|
|||||||
Volcanos(chat.ONIMPORT, {
|
Volcanos(chat.ONIMPORT, {
|
||||||
_init: function(can, msg, target, cb) {
|
_init: function(can, msg, target, cb) {
|
||||||
if (msg.index && msg.meta && msg.list) { return cb && cb(msg), can.sup.onimport._field(can.sup, msg) }
|
|
||||||
can.page.ClassList.del(can, can._fields, html.FORM)
|
|
||||||
can.page.ClassList.del(can, can._fields, html.OUTPUT)
|
|
||||||
if (can.isCmdMode() && can.Conf(ctx.STYLE) == html.FORM) {
|
|
||||||
can.page.ClassList.add(can, can._fields, html.FORM)
|
|
||||||
can.onappend.style(can, html.OUTPUT)
|
|
||||||
}
|
|
||||||
if (can.Mode() == html.ZONE) { return can.onimport._vimer_zone(can, msg, target), cb && cb(msg) }
|
if (can.Mode() == html.ZONE) { return can.onimport._vimer_zone(can, msg, target), cb && cb(msg) }
|
||||||
|
if (msg.index && msg.meta && msg.list) { return cb && cb(msg), can.sup.onimport._field(can.sup, msg) }
|
||||||
|
can.page.ClassList.del(can, can._fields, html.FORM), can.page.ClassList.del(can, can._fields, html.OUTPUT)
|
||||||
|
if (can.isCmdMode() && can.Conf(ctx.STYLE) == html.FORM) { can.page.ClassList.add(can, can._fields, html.FORM), can.onappend.style(can, html.OUTPUT) }
|
||||||
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
|
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
|
||||||
can.onappend.style(can, can._args[ctx.STYLE], target), can.core.CallFunc(cbs, {can: can, msg: msg, target: target})
|
can.onappend.style(can, can._args[ctx.STYLE], target), can.core.CallFunc(cbs, {can: can, msg: msg, target: target})
|
||||||
} else {
|
} else {
|
||||||
can.onappend.table(can, msg, null, target), can.onappend.board(can, msg, target), can.onmotion.story.auto(can, target)
|
can.onappend.table(can, msg, null, target), can.onappend.board(can, msg, target), can.onmotion.story.auto(can, target)
|
||||||
} cb && cb(msg)
|
} cb && cb(msg)
|
||||||
},
|
},
|
||||||
textView: function(can, value, key, type) { if (!type) { type = key.split("_").pop() }
|
|
||||||
return value[key] && {text: [can.user.transValue(can, value, key), "", [type, value[key], can.Conf("_trans.value."+key+".style."+value[key])||""]]}
|
|
||||||
},
|
|
||||||
shareTitle: function(can, msg, title, content) { if (msg.IsDetail()) { var value = msg.TableDetail()
|
|
||||||
msg.Option("_share_title", (value[title]||value.name||value.uid).slice(0, 6)), msg.Option("_share_content", value[content]||value.info)
|
|
||||||
} },
|
|
||||||
itemcards: function(can, msg, cb, cbs, target) { target = target||can._output
|
|
||||||
can.onimport.shareTitle && can.onimport.shareTitle(can, msg)
|
|
||||||
if (msg.IsDetail()) { var value = msg.TableDetail(); msg.Show(can)
|
|
||||||
can.page.Select(can, target, html.TR, function(target) {
|
|
||||||
target.className.indexOf("_uid") > -1 && can.page.ClassList.add(can, target, "hide")
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
can.page.Append(can, target, msg.Table(function(value) {
|
|
||||||
return can.onimport.itemcard(can, value, cb(value), cbs)
|
|
||||||
})), msg.Result() && can.onappend.board(can, msg)
|
|
||||||
}
|
|
||||||
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
|
||||||
var style = can.Conf("_style."+target.name); style && can.page.ClassList.add(can, target, style)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
itemcard: function(can, value, list, cb) {
|
|
||||||
can.core.List(list, function(item) { if (!item || !item.list) { return }
|
|
||||||
for (var i = 0; i < item.list.length; i++) { if (item.list[i] && typeof item.list[i] == code.STRING) { item.list[i] = {text: item.list[i]} } }
|
|
||||||
})
|
|
||||||
cb = cb|| function(event) { can.Option(UID, value.uid), can.Update() }
|
|
||||||
return {view: [[html.ITEM_CARD, value._uid? "uid-"+value._uid: ""].concat(value._style||[])], list: [
|
|
||||||
{view: html.ACTION, _init: function(target) { if (!value.action) { return } target.innerHTML = value.action
|
|
||||||
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
|
||||||
var style = can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
|
|
||||||
target.onclick = function(event) { can.onkeymap.prevent(event), can.Update(can.request(event, value), [ctx.ACTION, target.name]) }
|
|
||||||
})
|
|
||||||
}},
|
|
||||||
{view: html.OUTPUT, list: [
|
|
||||||
{img: can.misc.ResourceIcons(can,
|
|
||||||
value.icons||value.icon||value.command_icon||value.service_icon||
|
|
||||||
value.avatar||value.user_avatar||can.Conf(mdb.ICONS), value.nodename,
|
|
||||||
), onclick: function(event) { can.onkeymap.prevent(event)
|
|
||||||
value.user_uid && can.onappend.plugin(can, {index: "web.team.gonganxitong.profile", args: [value.user_uid]})
|
|
||||||
}},
|
|
||||||
{view: html.INFO, list: list},
|
|
||||||
], _init: function(target) {
|
|
||||||
value.action && can.onmotion.slideAction(can, target)
|
|
||||||
}},
|
|
||||||
], onclick: function(event) { cb && cb(event, value)
|
|
||||||
can.onmotion.select(can, event.currentTarget.parentNode, html.DIV_ITEM, event.currentTarget)
|
|
||||||
}}
|
|
||||||
},
|
|
||||||
card: function(can, msg, target, filter) { target = target||can.ui.content||can._output
|
card: function(can, msg, target, filter) { target = target||can.ui.content||can._output
|
||||||
can.page.Append(can, target, msg.Table(function(value) { if (filter && filter(value)) { return }
|
can.page.Append(can, target, msg.Table(function(value) { if (filter && filter(value)) { return }
|
||||||
var img = can.misc.Resource(can, value.icon = value.icons||value.icon||value.image)
|
var img = can.misc.Resource(can, value.icon = value.icons||value.icon||value.image)
|
||||||
@ -323,27 +271,19 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
_float: function(can, index, args) { args = args||[]
|
_float: function(can, index, args) { args = args||[]
|
||||||
can.user.isMobile? can.user.jumps(can.misc.MergePodCmd(can, {cmd: index+"/"+args.join("/")})): can.onappend._float(can, index, args)
|
can.user.isMobile? can.user.jumps(can.misc.MergePodCmd(can, {cmd: index+"/"+args.join("/")})): can.onappend._float(can, index, args)
|
||||||
},
|
},
|
||||||
myOption: function(can) {
|
|
||||||
var sub = can.sub; if (!sub) { return }
|
|
||||||
var plugin = sub._stacks_current[0]
|
|
||||||
|
|
||||||
|
myOption: function(can) { var sub = can.sub; if (!sub) { return } var plugin = sub._stacks_current[0]
|
||||||
var PLACE_UID = can.core.Item(can.Option())[0], UID = can.core.Item(can.Option())[2]||"uid"
|
current = plugin.current||{}
|
||||||
if (can == plugin) {
|
if (plugin == sub._stacks_root) { var PLACE_UID = can.core.Item(can.Option())[0]
|
||||||
plugin.Option(ctx.INDEX, ""), plugin.Option(UID, "")
|
|
||||||
} else {
|
|
||||||
plugin.Option(PLACE_UID, can.Option(PLACE_UID)), plugin.Option(ctx.INDEX, can.ConfIndex()), plugin.Option(UID, can.Option(UID))
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin == sub._stacks_root) {
|
|
||||||
if (sub._stacks_current.length == 1) {
|
if (sub._stacks_current.length == 1) {
|
||||||
plugin.sub.onexport.hash(plugin.sub, can.Option(PLACE_UID))
|
plugin.sub.onexport.hash(plugin.sub, can.Option(PLACE_UID))
|
||||||
} else {
|
} else {
|
||||||
plugin.sub.onexport.hash(plugin.sub, can.Option(PLACE_UID), can.ConfIndex(), can.Option(UID))
|
plugin.sub.onexport.hash(plugin.sub, can.Option(PLACE_UID), can.ConfIndex(), can.Option(UID))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sub._stacks_root.onexport.title(sub._stacks_root, current._name, can.ConfHelp(),
|
||||||
sub._stacks_root.onexport.title(sub._stacks_root, can.Conf("place_name"), can.ConfHelp())
|
can._msg && can._msg.IsDetail()? can._msg.Append(html.TITLE)||can._msg.Append(mdb.NAME)||(can._msg.Append(UID)||"").slice(0, 6): ""
|
||||||
|
)
|
||||||
},
|
},
|
||||||
myPlugin: function(can, value, cb) {
|
myPlugin: function(can, value, cb) {
|
||||||
var key = [value.space||can.ConfSpace(), value.index||can.ConfIndex()].concat(value.args||"").join(",")
|
var key = [value.space||can.ConfSpace(), value.index||can.ConfIndex()].concat(value.args||"").join(",")
|
||||||
@ -353,61 +293,129 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = sup._stacks[key] = [sub], _sub._stacks_root = sup, sub._select() }
|
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = sup._stacks[key] = [sub], _sub._stacks_root = sup, sub._select() }
|
||||||
sub._select = function() { can.onimport.myOption(sub)
|
sub._select = function() { can.onimport.myOption(sub)
|
||||||
can.page.SelectChild(can, _output, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
can.page.SelectChild(can, _output, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
||||||
|
can.page.SelectChild(can, sub._output, "*", function(target) { can.onmotion.toggle(can, target, true) })
|
||||||
|
can.page.style(can, sub._action, html.DISPLAY, html.NONE), sub._output.innerHTML == "" && sub.Update()
|
||||||
}, sub._select(), cb && cb(sub)
|
}, sub._select(), cb && cb(sub)
|
||||||
}, _output)
|
}, _output)
|
||||||
},
|
},
|
||||||
myStory: function(can, msg, value, PLACE_UID, PLACE_NAME, STREET_NAME) {
|
myStory: function(can, value) {
|
||||||
if (!can._stacks_current) { var sup = can.sup; can._stacks_root = sup, sup._stacks = {}
|
if (!can._stacks_current) { var sup = can.sup; can._stacks_root = sup, sup._stacks = {}
|
||||||
var key = [can.ConfSpace(), can.ConfIndex()].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value }))).join(",")
|
var key = [can.ConfSpace(), can.ConfIndex()].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value }))).join(",")
|
||||||
can._stacks_current = sup._stacks[key] = [can.sup]
|
can._stacks_current = sup._stacks[key] = [can.sup]
|
||||||
} var _action = can._stacks_current[0]._action, _output = can._stacks_current[0]._output
|
sup._select = function() { var target = sup._target.parentNode; can.onimport.myOption(sup)
|
||||||
|
can.page.SelectChild(can, target, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sup._target) })
|
||||||
|
can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, true) })
|
||||||
|
can.page.style(can, _action, html.DISPLAY, html.NONE), sup._output.innerHTML == "" && sup.Update()
|
||||||
|
}
|
||||||
|
} var plugin = can._stacks_current[0], _action = plugin._action, _output = plugin._output; current = plugin.current||{}
|
||||||
value.type = html.STORY, value.style = html.OUTPUT, value.height = can.ConfHeight()-html.ACTION_HEIGHT
|
value.type = html.STORY, value.style = html.OUTPUT, value.height = can.ConfHeight()-html.ACTION_HEIGHT
|
||||||
can.onappend.plugin(can, value, function(sub) { can._stacks_current.push(sub)
|
can.onappend.plugin(can, value, function(sub) { can._stacks_current.push(sub)
|
||||||
sub.Conf("place_name", msg.Option(PLACE_NAME))
|
can.core.List(["_trans", "_style", "_icons", "_trans.input", "_trans.value"], function(key) {
|
||||||
can.core.List(["_trans", "_icons", "_style", "_trans.input", "_trans.value"], function(key) {
|
|
||||||
var value = sub.Conf(key); value && can.core.Item(can.Conf(key), function(k, v) { value[k] = value[k]||v })
|
var value = sub.Conf(key); value && can.core.Item(can.Conf(key), function(k, v) { value[k] = value[k]||v })
|
||||||
})
|
})
|
||||||
|
var STREET_NAME = plugin.sub.Conf("_street_name"), PLACE_NAME = plugin.sub.Conf("_place_name")
|
||||||
var run = sub.run; sub.run = function(event, cmds, cb) {
|
var run = sub.run; sub.run = function(event, cmds, cb) {
|
||||||
run(can.request(event, {
|
run(can.request(event, {
|
||||||
city_name: msg.Option(CITY_NAME), street_name: msg.Option(STREET_NAME), place_name: msg.Option(PLACE_NAME),
|
city_name: current[CITY_NAME], street_name: current[STREET_NAME], place_name: current[PLACE_NAME],
|
||||||
portal_name: can.ConfHelp(), command_uid: msg.Option("command_uid"), dashboard_uid: msg.Option("dashboard_uid"),
|
dashboard_uid: current["dashboard_uid"], command_uid: sub.Conf("command_uid"), portal_name: can.ConfHelp(),
|
||||||
}), cmds, cb)
|
}, can.base.Obj(sub.Conf("field.option"))), cmds, cb)
|
||||||
}
|
}
|
||||||
var _sub = sub
|
|
||||||
sub.onimport._field = function(sub, msg, cb) {
|
sub.onimport._field = function(sub, msg, cb) {
|
||||||
msg.Table(function(value) { value._goback = function() { goback(true) }
|
msg.Table(function(value) { value._goback = function() { goback(true) }, can.onimport.myStory(can, value) })
|
||||||
can.onimport.myStory(can, msg, value, PLACE_UID, PLACE_NAME, STREET_NAME)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
sub.onexport._output = function(_sub, msg) {
|
sub.onexport._output = function(_sub) {
|
||||||
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
|
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
|
||||||
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
|
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
|
||||||
}
|
}
|
||||||
sub.onexport.output = function(_sub, msg) {
|
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root
|
||||||
_sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root
|
|
||||||
sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true)
|
sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true)
|
||||||
sub.sub.onaction._goback = goback
|
sub.sub.onaction._goback = goback
|
||||||
}
|
}
|
||||||
function goback(clear) {
|
function goback(clear) { if (value._goback) { return value._goback() }
|
||||||
if (clear) { if (_sub.Option(UID)) { _sub.Option(UID, "") } }
|
if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } }
|
||||||
if (value._goback) { return value._goback() }
|
if (sub.Option(UID)) { return sub.Option(UID, ""), sub.Update() }
|
||||||
if (_sub.Option(UID)) { return _sub.Option(UID, ""), _sub.Update() }
|
var last = can._stacks_current.pop(); can.page.Remove(can, last._target)
|
||||||
can._stacks_current.pop(); var sub = can._stacks_current[can._stacks_current.length-1]; can.onimport.myOption(sub)
|
var last = can._stacks_current[can._stacks_current.length-1]; if (last._select) {
|
||||||
can._stacks_current.length == 1 && can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, !can.page.tagis(target, "fieldset")) })
|
if (last.ConfIndex().split(".").pop() == "message") { last.Update() }
|
||||||
can._stacks_current.length == 1 && can.onmotion.delay(can, function() { can.page.style(can, _action, "display", "none") }, 0)
|
return last._select()
|
||||||
if (sub._select) { return sub._select() } var target = can._stacks_root._target.parentNode
|
}
|
||||||
can.page.SelectChild(can, target, html.FIELDSET, function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
}
|
||||||
} function reload() { sub.Update() }
|
function reload() { sub.Update() }
|
||||||
sub._select = function() { can.onimport.myOption(sub)
|
sub._select = function() { can.onimport.myOption(sub)
|
||||||
can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
||||||
var list = [can.page.button(can, can.user.trans(can, "goback", "返回"), function(event) { goback() }), can.page.button(can, can.user.trans(can, "reload", "刷新"), function(event) { reload() })]
|
var list = [can.page.button(can, can.user.trans(can, "goback", "返回"), function(event) { goback() }), can.page.button(can, can.user.trans(can, "reload", "刷新"), function(event) { reload() })]
|
||||||
can.page.Appends(can, _action, list), can.page.style(can, _action, "display", "block")
|
can.page.Appends(can, _action, list), can.page.style(can, _action, html.DISPLAY, html.BLOCK)
|
||||||
}, sub._select()
|
}, sub._select()
|
||||||
}, _output)
|
}, _output)
|
||||||
},
|
},
|
||||||
myFloat: function(can, value) {
|
myFloat: function(can, value) {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
myTabs: function(can, key, list, target) { var last = can.misc.Cookie(can, key)
|
||||||
|
can.page.Append(can, can.ui.tabs, can.core.List(list, function(value) {
|
||||||
|
return {text: [can.user.trans(can, value, "", "value."+key), "", [value, value == "all" && last == "" || value == last? html.SELECT: ""]], onclick: function(event) {
|
||||||
|
can.onmotion.select(can, can.ui.tabs, "*", event.target), can.misc.Cookie(can, key, value == "all"? "": value), can.Update()
|
||||||
|
}}
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
myView: function(can, msg, cb, cbs, target) {
|
||||||
|
can.onimport.itemcards(can, msg, cb, cbs, target)
|
||||||
|
},
|
||||||
|
itemcards: function(can, msg, cb, cbs, target) { target = target||can._output
|
||||||
|
can.onimport.shareTitle(can, msg)
|
||||||
|
if (msg.IsDetail()) { var value = msg.TableDetail(); msg.Show(can)
|
||||||
|
can.page.Select(can, target, html.TR, function(target) {
|
||||||
|
target.className.indexOf("_uid") > -1 && can.page.ClassList.add(can, target, "hide")
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
can.page.Append(can, target, msg.Table(function(value) {
|
||||||
|
return can.onimport.itemcard(can, value, cb(value), cbs)
|
||||||
|
})), msg.Result() && can.onappend.board(can, msg)
|
||||||
|
if (msg.Option(ctx.STYLE)) {
|
||||||
|
can.onappend.style(can, msg.Option(ctx.STYLE))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
||||||
|
var style = can.Conf("_style."+target.name); style && can.page.ClassList.add(can, target, style)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
itemcard: function(can, value, list, cb) {
|
||||||
|
can.core.List(list, function(item) { if (!item || !item.list) { return }
|
||||||
|
for (var i = 0; i < item.list.length; i++) { if (item.list[i] && typeof item.list[i] == code.STRING) { item.list[i] = {text: item.list[i]} } }
|
||||||
|
})
|
||||||
|
cb = cb|| function(event) { can.Option(UID, value.uid), can.Update() }
|
||||||
|
return {view: [[html.ITEM_CARD, value._uid? "uid-"+value._uid: ""].concat(value._style||[])], list: [
|
||||||
|
{view: html.ACTION, _init: function(target) { if (!value.action) { return } target.innerHTML = value.action
|
||||||
|
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
||||||
|
var style = can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
|
||||||
|
target.onclick = function(event) { can.onkeymap.prevent(event), can.Update(can.request(event, value), [ctx.ACTION, target.name]) }
|
||||||
|
})
|
||||||
|
}},
|
||||||
|
{view: html.OUTPUT, list: [
|
||||||
|
{img: can.misc.ResourceIcons(can,
|
||||||
|
value.icons||value.icon||value.command_icon||value.service_icon||
|
||||||
|
value.avatar||value.user_avatar||can.Conf(mdb.ICONS), value.nodename,
|
||||||
|
), onclick: function(event) { can.onkeymap.prevent(event)
|
||||||
|
value.user_uid && can.onappend.plugin(can, {index: "web.team.gonganxitong.profile", args: [value.user_uid]})
|
||||||
|
}},
|
||||||
|
{view: html.INFO, list: list},
|
||||||
|
], _init: function(target) {
|
||||||
|
value.action && can.onmotion.slideAction(can, target)
|
||||||
|
}},
|
||||||
|
], onclick: function(event) { cb && cb(event, value)
|
||||||
|
can.onmotion.select(can, event.currentTarget.parentNode, html.DIV_ITEM, event.currentTarget)
|
||||||
|
}}
|
||||||
|
},
|
||||||
|
textView: function(can, value, key, type) { if (!type) { type = key.split("_").pop() }
|
||||||
|
return value[key] && {text: [can.user.transValue(can, value, key), "", [type, value[key], can.Conf("_trans.value."+key+".style."+value[key])||""]]}
|
||||||
|
},
|
||||||
|
authView: function(can, value) { return can.base.isIn(value.auth_status, "issued", "2") && {view: [aaa.AUTH, html.SPAN], list: [{icon: "bi bi-patch-check-fill", style: {color: "var(--notice-bg-color)"}}]} },
|
||||||
|
timeView: function(can, value) { return {text: [can.base.TimeTrim(value.updated_at||value.created_at), "", mdb.TIME]} },
|
||||||
|
typeStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
||||||
|
roleStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
||||||
|
shareTitle: function(can, msg, title, content) { if (msg.IsDetail()) { var value = msg.TableDetail()
|
||||||
|
msg.Option("_share_title", (value[title]||value.name||value.uid).slice(0, 6)), msg.Option("_share_content", value[content]||value.info)
|
||||||
|
} },
|
||||||
})
|
})
|
||||||
Volcanos(chat.ONLAYOUT, {
|
Volcanos(chat.ONLAYOUT, {
|
||||||
_init: function(can, height, width) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) },
|
_init: function(can, height, width) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user