diff --git a/frame.js b/frame.js
index 3dfd5e46..c636eca4 100644
--- a/frame.js
+++ b/frame.js
@@ -58,10 +58,10 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
}},
"product": {name: "产品群", storm: {
"office": {name: "办公 office", action: [
- {name: "feel", help: "影音", index: "web.wiki.feel"},
- {name: "draw", help: "绘图", index: "web.wiki.draw"},
- {name: "data", help: "数据", index: "web.wiki.data"},
- {name: "plan", help: "计划", index: "web.team.plan"},
+ {name: "feel", help: "影音媒体", index: "web.wiki.feel"},
+ {name: "draw", help: "思维导图", index: "web.wiki.draw"},
+ {name: "data", help: "数据表格", index: "web.wiki.data"},
+ {name: "plan", help: "计划任务", index: "web.team.plan"},
{name: "think", help: "智库", index: "web.wiki.word", args: ["usr/learning/"]},
{name: "index", help: "索引", index: "web.wiki.word", args: ["usr/learning/index.shy"]},
{name: "context", help: "编程", index: "web.wiki.word", args: ["usr/learning/自然/编程/context.shy"]},
@@ -569,6 +569,21 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) {
},
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, target) {
+ can.onkeypop._build(can)
+ var focus = []; can.onengine.listen(can, "keymap.focus", function(cb) {
+ cb? focus.push(cb): focus.pop()
+ can.base.Log("---", cb)
+ })
+
+ target.onkeydown = function(event) {
+ if (focus.length > 0) { return focus[focus.length-1](event) }
+ if (event.target != target) { return }
+ can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
+ target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item)
+ })
+ }
+ },
+ _build: function(can) {
can.core.Item(can.onkeypop._mode, function(item, value) { var engine = {}
can.core.Item(value, function(key, cb) { var map = engine
for (var i = key.length-1; i > -1; i--) {
@@ -576,14 +591,9 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
}
}), can.onkeypop._engine[item] = engine
})
-
- target.onkeydown = function(event) { if (event.target != target) { return }
- can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
- target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item)
- })
- }
},
_parse: function(event, can, mode, list, target) { list.push(event.key)
+ can.Status("按键", list.join(""))
for (var pre = 0; pre < list.length; pre++) {
if ("0" <= list[pre] && list[pre] <= "9") { continue } break
}; var count = parseInt(list.slice(0, pre).join(""))||1
@@ -591,6 +601,7 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
function repeat(cb, count) { list = []
for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } }
event.stopPropagation(), event.preventDefault()
+ can.Status("按键", list.join(""))
}
var map = can.onkeypop._mode[mode]
diff --git a/lib/user.js b/lib/user.js
index 394047db..3c9bbb93 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -140,7 +140,7 @@ Volcanos("user", {help: "用户模块", agent: {
carte: function(event, can, meta, list, cb, view) {
meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return }
cb = cb||function(ev, item, meta) {
- var cb = meta[item] || can.ondetail&&can.ondetail[item] || can.onaction&&can.onaction[item] || can.onkeymap&&can.onkeymap._remote
+ var cb = meta[item] || can.ondetail&&can.ondetail[item] || can.onaction&&can.onaction[item]
typeof cb == "function" && cb(event, can, item)
}
diff --git a/page/index.css b/page/index.css
index 67ad0f4c..da8c54e4 100644
--- a/page/index.css
+++ b/page/index.css
@@ -52,6 +52,12 @@ fieldset.plugin {
margin:10px; padding:10px;
}
fieldset.input>legend {
+}
+fieldset.float {
+ position:absolute;
+ left:0; top:0;
+}
+fieldset.float>legend {
display:none;
}
legend {
@@ -132,6 +138,9 @@ table.content td.done {
background-color:green;
}
+table.content tr.select {
+ background-color:green;
+}
table.content tr:hover {
background-color:green;
}
@@ -252,7 +261,8 @@ fieldset>div.output div.code a {
color:yellow;
}
fieldset>div.output div.project {
- float:left;
+ min-width:80px; max-width:240px;
+ float:left; overflow:auto;
}
fieldset>div.output div.project div.item {
padding:2px 10px; text-align:left;
diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js
index f380ff8a..e3b04b04 100644
--- a/plugin/local/wiki/data.js
+++ b/plugin/local/wiki/data.js
@@ -1,5 +1,6 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) {
- can.ui = can.page.Appends(can, can._target, [{view: "content"}, {view: "display"}])
+ can.ui = can.onlayout.display(can)
+ typeof cb == "function" && cb(msg)
can.table = can.onappend.table(can, msg, function(value, key, index, line) {
return {text: [value, "td"], oncontextmenu: function(event) {
@@ -14,7 +15,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, can.ui.content)
can.onexport.list = msg.append
- typeof cb == "function" && cb(msg)
can.onaction._compute(event, can)
},
})
@@ -58,6 +58,10 @@ Volcanos("onaction", {help: "组件菜单", list: ["保存", ["mode", "全选",
can.user.toast(can, "保存成功")
}, true)
},
+ some: function(event, can, cmd) {
+ can.onaction._compute(event, can)
+ },
+
"全选": function(event, can, cmd) {
cmd && can.Action("mode", cmd)
can.page.Select(can, can.ui.content, "tr", function(item) {
diff --git a/plugin/local/wiki/draw.css b/plugin/local/wiki/draw.css
index 67ae8483..2add54e0 100644
--- a/plugin/local/wiki/draw.css
+++ b/plugin/local/wiki/draw.css
@@ -1,13 +1,3 @@
-fieldset.drawer div.output div.project {
- min-width:80px; max-width:240px; overflow:auto;
-}
-fieldset.drawer div.output div.project div.item:hover {
- background-color:red; border:solid 2px yellow;
-}
-fieldset.drawer div.output div.project div.item.select {
- background-color:red; border:solid 2px yellow;
-}
fieldset.drawer div.output div.content svg {
background-color:#1b5b738c;
- min-width:500px;
}
diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js
index 9c6f1e0e..cf08bb09 100644
--- a/plugin/local/wiki/draw.js
+++ b/plugin/local/wiki/draw.js
@@ -1,12 +1,14 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can)
+ can.onkeypop._build(can)
+ can.onmotion.hidden(can, can._action)
can.ui = can.onlayout.profile(can)
typeof cb == "function" && cb(msg)
- can.onmotion.hidden(can, can._action)
// 交互数据
can.svg = null, can.group = null
can.point = [], can.temp = null , can.current = null
+ can.keylist = []
// 加载绘图
can.page.Modify(can, can.ui.content, msg.Result()||can.onexport.content(can))
@@ -27,13 +29,15 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, function(key, value) { can.svg.Value(key, can.Action(key, can.svg.Value(key)||value)) }) })
},
_group: function(can, target, name) { can.onimport._block(can, target)
- function show(event) { can.group = target, can.onaction["显示"](event, can)
+ function show(event) { can.group = target
can.core.List(["stroke-width", "stroke", "fill", "font-size"], function(key) {
can.Action(key, target.Value(key)||can.Action(key))
})
}
name = name || target.Groups()
- return (name || target == can.svg) && can.onappend.item(can, "item", {name: name||"svg"}, show, function(event) { show(event)
+ return (name || target == can.svg) && can.onappend.item(can, "item", {name: name||"svg"}, function(event) { show(event)
+ can.onaction["显示"](event, can)
+ }, function(event) { show(event)
can.user.carte(event, can, can.onaction, ["隐藏", "显示", "添加", "删除", "清空"])
}, can.ui.project)
},
@@ -98,7 +102,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
onclick: function(event, can) { var point = can.onimport._point(event, can)
if (can.Action("go") == "run") { return can.onaction._mode.run(event, can) }
- can.onimport._figure(event, can, can.point = can.point.concat(point), event.target)
+ can.onimport._figure(event, can, can.point = can.point.concat(point))
},
onmousemove: function(event, can) { var point = can.onimport._point(event, can)
can.page.Prepos(event, event.target)
@@ -106,6 +110,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
if (can.Action("go") == "auto") { can.onaction._auto(can, event.target) }
can.onimport._figure(event, can, can.point.concat(point))
},
+ onmouseleave: function(event, can) {
+ can.onengine.signal(can, "keymap.focus", can.request(event, {cb: null}))
+ },
+ onmouseenter: function(event, can) {
+ can.onengine.signal(can, "keymap.focus", can.request(event, {cb: function(event) {
+ can.keylist = can.onkeypop._parse(event, can, "normal", can.keylist, can.group)
+ }}))
+ },
onmouseover: function(event, can) { can.onexport._show(can, event.target) },
oncontextmenu: function(event, can) { can.onexport._show(can, event.target) },
}, ["/plugin/local/wiki/draw.css"])
@@ -237,7 +249,6 @@ Volcanos("onfigure", {help: "图形绘制", list: [],
text: function(can, target, data) { return data.x = target.Val("cx"), data.y = target.Val("cy"), data },
show: function(can, target) { return ": (" + target.Val("cx") + "," + target.Val("cy") + ")" + " > (" + target.Val("rx") + "," + target.Val("ry") + ")" },
},
-
block: { //
data: {rx: 4, ry: 4, size: {x: "x", y: "y"}, copy: ["width", "height", "rx", "ry"]},
draw: function(event, can, point) { if (point.length < 2) { return }
@@ -259,6 +270,42 @@ Volcanos("onfigure", {help: "图形绘制", list: [],
},
},
}, [])
+Volcanos("onkeypop", {help: "键盘交互", list: [],
+ _mode: {
+ normal: {
+ gr: function(event, can) { can.Action("go", "run") },
+ ga: function(event, can) { can.Action("go", "auto") },
+ gm: function(event, can) { can.Action("go", "manual") },
+
+ ad: function(event, can) { can.Action("mode", "draw") },
+ ar: function(event, can) { can.Action("mode", "resize") },
+
+ st: function(event, can) { can.Action("shape", "text") },
+ sr: function(event, can) { can.Action("shape", "rect") },
+ sl: function(event, can) { can.Action("shape", "line") },
+ sc: function(event, can) { can.Action("shape", "circle") },
+ se: function(event, can) { can.Action("shape", "ellipse") },
+
+ cr: function(event, can) { can.onaction._change(can, "stroke", "red") },
+ cb: function(event, can) { can.onaction._change(can, "stroke", "blue") },
+ cg: function(event, can) { can.onaction._change(can, "stroke", "green") },
+ cy: function(event, can) { can.onaction._change(can, "stroke", "yellow") },
+ cp: function(event, can) { can.onaction._change(can, "stroke", "purple") },
+ cc: function(event, can) { can.onaction._change(can, "stroke", "cyan") },
+ ch: function(event, can) { can.onaction._change(can, "stroke", "black") },
+ cw: function(event, can) { can.onaction._change(can, "stroke", "white") },
+
+ fr: function(event, can) { can.onaction._change(can, "fill", "red") },
+ fb: function(event, can) { can.onaction._change(can, "fill", "blue") },
+ fg: function(event, can) { can.onaction._change(can, "fill", "green") },
+ fy: function(event, can) { can.onaction._change(can, "fill", "yellow") },
+ fp: function(event, can) { can.onaction._change(can, "fill", "purple") },
+ fc: function(event, can) { can.onaction._change(can, "fill", "cyan") },
+ fh: function(event, can) { can.onaction._change(can, "fill", "black") },
+ fw: function(event, can) { can.onaction._change(can, "fill", "white") },
+ },
+ }, _engine: {},
+})
Volcanos("onaction", {help: "组件菜单", list: [
["stroke-width", 1, 2, 3, 4, 5],
["stroke", "red", "yellow", "green", "purple", "blue", "cyan", "white", "black"],
@@ -270,6 +317,9 @@ Volcanos("onaction", {help: "组件菜单", list: [
["grid", 1, 2, 3, 4, 5, 10, 20],
["go", "run", "auto", "manual"],
],
+ _change: function(can, key, value) {
+ can.Action(key, value), can.group.Value(key, value)
+ },
"编辑": function(event, can, key) { can.Action("go", "auto") },
"save": function(event, can, key) {
var msg = can.request(event, {content: can.onexport.content(can, can.svg)})
@@ -391,9 +441,7 @@ Volcanos("onaction", {help: "组件菜单", list: [
},
})
Volcanos("ondetail", {help: "组件详情", list: ["复制", "标签", "编辑", "删除"],
- "复制": function(event, can) {
- can.onfigure._copy(event, can, event.target)
- },
+ "复制": function(event, can) { can.onfigure._copy(event, can, event.target) },
"标签": function(event, can) { var target = event.target
var def = target.Value("text"); can.page.Select(can, can.svg, "."+target.Value("text"), function(item) {
def = item.Value("inner")
@@ -440,7 +488,6 @@ Volcanos("onexport", {help: "导出数据", list: ["分组", "图形", "坐标"]
can.Status("图形", target.tagName + " " + (figure? figure.show(can, target): ""))
can.Status("分组", target.Groups()||can.group.Groups()||"svg")
},
-
content: function(can, svg) {
return ['