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 [' -1) { - return item - }; item = item.parentNode } - return can.svg - } - target.Groups = function() { var item = target - var list = [] - while (item && item.tagName != "svg") { - item.tagName == "g" && list.push(item.Value("class")) - item = item.parentNode - } - return list.reverse().join(".") - } - target.ondblclick = function(event) { - if (can.Action("go") == "run") { return } - can.ondetail["标签"](event, can) - event.stopPropagation() - event.preventDefault() - } - return target - }, - - draw: function(event, can, value) { - var figure = can.onfigure[value.shape] - var data = figure.draw(event, can, value.point, value.style) - can.core.Item(value.style, function(key, value) { data[key] = value }) - return can.onfigure._push(can, data, value.shape, can.group||can.svg) - }, - keydown: function(event, can, value) { - if (["Control", "Shift", "Meta", "Alt"].indexOf(value) > -1 ) {return} - can.keys.push((event.ctrlKey? "C-": "") + (event.shiftKey? value.toUpperCase(): value)) - if (value == "Escape") { - can.point = [], delete(can.temp) - return - } - - var list = { - g: {prefix: ["go", "go"], - r: {list: ["run"]}, - a: {list: ["auto"]}, - m: {list: ["manual"]}, - }, - a: {prefix: ["mode", "mode"], - d: {list: ["draw"]}, - r: {list: ["resize"]}, - }, - s: {prefix: ["shape", "shape"], - s: {list: ["line"]}, - r: {list: ["rect"]}, - c: {list: ["circle"]}, - e: {list: ["ellipse"]}, - l: {list: ["line"]}, - p: {list: ["path"]}, - }, - c: {prefix: ["stroke", "stroke"], - r: {list: ["red"]}, - b: {list: ["blue"]}, - g: {list: ["green"]}, - y: {list: ["yellow"]}, - p: {list: ["purple"]}, - c: {list: ["cyan"]}, - h: {list: ["black"]}, - w: {list: ["white"]}, - }, - f: {prefix: ["fill", "fill"], - r: {list: ["red"]}, - b: {list: ["blue"]}, - g: {list: ["green"]}, - y: {list: ["yellow"]}, - p: {list: ["purple"]}, - c: {list: ["cyan"]}, - h: {list: ["black"]}, - w: {list: ["white"]}, - }, - } - - var prefix = [] - can.core.List(can.keys, function(key) { - if (!list) { - // 查找失败 - return can.keys = [], can.Status("按键", can.keys) - } - - // 查找递进 - prefix = prefix.concat(can.core.List(list.prefix)) - list = list[key] - }) - - if (!list || !list.list) { - // 等待输入 - return can.Status("按键", can.keys+"("+can.core.Item(list).join(",")+")") - } - - function call(cmds) { - cmds && can.onaction[cmds[0]] && can.onaction[cmds[0]].apply(can, [event, can].concat(cmds.slice(1))) - } - - // 执行命令 - call(prefix.concat(list.list)) - return can.keys = [], can.Status("按键", can.keys) - }, -}, ["/plugin/local/wiki/draw.css"]) -Volcanos("onfigure", {help: "图形绘制", list: [], - _get: function(can, item, name) { - return can.onfigure[name]||can.onfigure[item.getAttribute("name")]||can.onfigure[item.tagName] - }, - _push: function(can, data, cmd, target) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", cmd) - target.appendChild(can.onimport.block(can, rect)) - rect.Value(data); if (can.point.length == 0) { - var pid = "p"+can.svg.Val("count", can.svg.Val("count")+1) - rect.Value("class", (rect.Value("class") + " " + rect.Value("pid", pid)).trim()) - } - return can.last = rect - }, - _ship: function(can, target, value) { - return target.Value("ship", target.Value("ship").concat([value])) - }, - _copy: function(event, can, target) { - var figure = can.onfigure._get(can, target).data - - var data = {} - can.core.List(figure.copy, function(item) { data[item] = target.Value(item) }) - data[figure.size.x||"x"] = target.Val(figure.size.x||"x")+10 - data[figure.size.y||"y"] = target.Val(figure.size.y||"y")+10 - - var p = data && can.onfigure._push(can, data, target.tagName, can.group||can.svg) - can.page.Select(can, can.svg, "."+target.Value("text"), function(item) { - can.ondetail["标签"](event, can, {silent: true, def: item.Value("inner")}, "", p) - }) - return p - }, - - svg: { - data: { - size: {}, - }, // - show: function(can, target) { - return target.Val("width") +","+ target.Val("height") - }, - }, - rect: { - data: { size: {x: "x", y: "y"}, rx: 4, ry: 4, - copy: ["width", "height", "rx", "ry"], - }, // - draw: function(event, can, point) { if (point.length < 2) { return } - var p0 = point[0], p1 = point[1]; var data = { - "x": p0.x > p1.x? p1.x: p0.x, - "y": p0.y > p1.y? p1.y: p0.y, - "width": Math.abs(p0.x-p1.x), - "height": Math.abs(p0.y-p1.y), - "rx": this.data.rx, - "ry": this.data.ry, - } - return event.type == "click" && point.length == 2 && (can.point = []), data - }, - text: function(can, target, data) { - data.x = target.Val("x")+target.Val("width")/2 - data.y = target.Val("y")+target.Val("height")/2 - return data - }, - show: function(can, target) { - return ": (" + target.Val("x") + "," + target.Val("y") + ")" - + " + (" + target.Val("width") + "," + target.Val("height") + ")" - }, - }, - text: { - data: { size: {x: "x", y: "y"}, copy: ["inner"], - }, // hi - draw: function(event, can, point, style) { if (point.length < 1 || event.type == "mousemove") { return } - var p0 = point[0]; var data = { - "x": p0.x, "y": p0.y, - "inner": style&&style.inner || can.user.prompt("text"), - } - return can.point = [], data - }, - show: function(can, target) { - return ": (" + target.Val("x") + "," + target.Val("y")+ ")" - } - }, - line: { - data: { size: {}, copy: ["x1", "y1", "x2", "y2"], - x: function(event, can, value, cmd, target) { - if (value != undefined) { - var offset = value - target.Val("xx") - target.Val("x1", target.Val("x1") + offset) - // target.Val("x2", target.Val("x2") + offset) - target.Val("xx", value) - } - return target.Val("xx") - }, - y: function(event, can, value, cmd, target) { - if (value != undefined) { - var offset = value - target.Val("yy") - target.Val("y1", target.Val("y1") + offset) - // target.Val("y2", target.Val("y2") + offset) - target.Val("yy", value) - } - return target.Val("yy") - }, - width: function(event, can, value, cmd, target) { - return value != undefined && target.Val("x2", target.Val("x1") + parseInt(value)), target.Val("x2") - target.Val("x1") - }, - height: function(event, can, value, cmd, target) { - return value != undefined && target.Val("y2", target.Val("y1") + parseInt(value)), target.Val("y2") - target.Val("y1") - }, - }, // - grid: function(event, can, point) {var target = event.target - if (target == can.svg) {return} - var p = point[point.length-1] - var pos = can.page.Prepos(event, target) - target.Val && can.page.Anchor(event, target, pos, p) - return p.target = target, p.anchor = pos, point - }, - draw: function(event, can, point) { if (point.length < 2) { return } - var p0 = point[0], p1 = point[1]; var data = { - "x1": p0.x, "y1": p0.y, - "x2": p1.x, "y2": p1.y, - } - return event.type == "click" && point.length == 2 && (can.point = []), data - }, - text: function(can, target, data) { - data.x = (target.Val("x1") + target.Val("x2")) / 2 - data.y = (target.Val("y1") + target.Val("y2")) / 2 - return data - }, - show: function(can, target) { - return ": (" + target.Val("x1") + "," + target.Val("y1") + ")" - + " - (" + target.Val("x2") + "," + target.Val("y2") + ")" - }, - }, - path: { - data: { size: {}, copy: ["d", "name", "meta", "tt", "xx", "yy"], - x: function(event, can, value, cmd, target) { - var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}') - if (value != undefined) { - tt.tx = value-target.Val("xx") - target.Value("tt", JSON.stringify(tt)) - target.Value("transform", "translate("+tt.tx+","+tt.ty+")") - } - return target.Val("xx")+tt.tx - }, - y: function(event, can, value, cmd, target) { - var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}') - if (value != undefined) { - tt.ty = value-target.Val("yy") - target.Value("tt", JSON.stringify(tt)) - target.Value("transform", "translate("+tt.tx+","+tt.ty+")") - } - return target.Val("yy")+tt.ty - }, - }, // - draw: function(event, can, point, style) { - if (style && style.d) { return style } - if (point.length == 1) { can._temp = {} } - if (point.length < 2) {return} - - if (can.keys && can.keys.length > 0) { var k; - k = can._temp[point.length-1] = can.keys[0] - switch (k.toUpperCase()) { - case "C": can._temp[point.length+1] = "," - case "Q": can._temp[point.length] = ","; break - default: - } - can.keys = can.keys.slice(1) - } - - var skip = 0 - var end = false - var data = { - d: can.core.List(point, function(p, i) { var k = p.k - if (i < skip) {return} - switch (i) { - case 0: k = "M"; break - default: k = can._temp[i] || p.k || "L"; break - } - if (end) {return} - - k = k.toUpperCase() - switch (k) { - case "Z": return can.point = [], can._temp = {}, k - case "L": return k+" " + p.x + " " + p.y - case "M": return k+" " + p.x + " " + p.y - case "H": return k+" " + p.x - case "V": return k+" " + p.y - case "A": - switch (point.length - i) { - case 1: end = true - return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + " 0 0 0 " + p.x + " " + p.y - case 2: end = true - var r = Math.sqrt(Math.pow(point[i+1].x - p.x, 2) + Math.pow(point[i+1].y - p.y, 2)) - return k+" " + r + " " + r + " 0 0 0 " + p.x + " " + p.y - case 3: - if (!p.done) { - var r = Math.sqrt(Math.pow(point[i+1].x - p.x, 2) + Math.pow(point[i+1].y - p.y, 2)) - var temp = point[i] - p = point[i] = point[i+1] - point[i+1] = temp - var temp = can.point[i] - p = can.point[i] = can.point[i+1] - can.point[i+1] = temp - p.x = r - p.y = r - p.done = true - p.arg = " 0 0 0 " - } - default: - skip = i + 2 - return k+" " + p.x + " " + p.y + " 0 0 0 " + point[i+1].x + " " + point[i+1].y - } - break - case "C": - switch (point.length - i) { - case 1: end = true - return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y - case 2: end = true - return k+" " + point[i+1].x + " " + point[i+1].y + "," + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y - case 3: - return k+" " + point[i+1].x + " " + point[i+1].y + "," + point[i+2].x + " " + point[i+2].y + "," + p.x + " " + p.y - case 4: - if (!p.done) { - var temp = point[i] - p = point[i] = point[i+1] - point[i+1] = temp - - var temp = point[i+1] - point[i+1] = point[i+2] - point[i+2] = temp - p.done = true - } - default: - return k+" " + p.x + " " + p.y - } - case "Q": - switch (point.length - i) { - case 1: end = true - return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y - case 2: end = true - return k+" " + point[i+1].x + " " + point[i+1].y + "," + p.x + " " + p.y - case 3: - if (!p.done) { - var temp = point[i] - p = point[i] = point[i+1] - point[i+1] = temp - p.done = true - } - default: - return k+" " + p.x + " " + p.y - } - default: return k+" " + p.x + " " + p.y - } - }).join(" ") - } - return data - }, - text: function(can, target, data) { - data.x = (target.x1.baseVal.value + target.x2.baseVal.value) / 2 - data.y = (target.y1.baseVal.value + target.y2.baseVal.value) / 2 - return data - }, - show: function(can, target) { - return target.tagName + " " + target.Value("d") - }, - }, - circle: { - data: { size: {x: "cx", y: "cy", width: "r", height: "r"}, copy: ["r"], - }, // - draw: function(event, can, point) { if (point.length < 2) { return } - var p0 = point[0], p1 = point[1]; var data = { - "cx": p0.x, "cy": p0.y, - "r": Math.sqrt(Math.pow(p0.x-p1.x, 2)+Math.pow(p0.y-p1.y, 2)), - } - return event.type == "click" && point.length == 2 && (can.point = []), data - }, - text: function(can, target, data) { - data.x = target.Val("cx") - data.y = target.Val("cy") - return data - }, - show: function(can, target) { - return ": (" + target.Val("cx") + "," + target.Val("cy") + ")" - + " > (" + parseInt(target.Val("r")) + ")" - }, - }, - ellipse: { - data: { size: {x: "cx", y: "cy", width: "rx", height: "ry"}, copy: ["rx", "ry"], - }, // - draw: function(event, can, point) { if (point.length < 2) { return } - var p0 = point[0], p1 = point[1]; var data = { - "cx": p0.x, "cy": p0.y, - "rx": Math.abs(p0.x - p1.x), "ry": Math.abs(p0.y - p1.y), - } - return event.type == "click" && point.length == 2 && (can.point = []), data - }, - text: function(can, target, data) { - data.x = target.Val("cx") - data.y = target.Val("cy") - return data - }, - show: function(can, target) { - return ": (" + target.Val("cx") + "," + target.Val("cy") + ")" - + " > (" + target.Val("rx") + "," + target.Val("ry") + ")" - }, - }, - block: { - data: { size: {x: "x", y: "y"}, rx: 4, ry: 4, copy: ["width", "height", "rx", "ry"], - }, // - draw: function(event, can, point) { if (point.length < 2) { return } - this._temp && can.page.Remove(can, this._temp) && delete(this._temp) - this._temp = can.onfigure._push(can, {}, "g", can.group||can.svg) - - var temp = this._temp - var rect = can.onfigure._push(can, can.onfigure.rect.draw(event, can, point), "rect", temp) - if (event.type == "click" && point.length == 2) { var point = can.onfigure.rect.text(can, rect, {}) - can.require(["/plugin/input/key"]) - can.run(event, ["action", "plugin"], function(msg) { - var ui = can.user.input(event, can, [ - {name: "zone", select: [["zone"].concat(msg.append), function(event, value) { - can.page.Appends(can, ui.type, can.core.List(msg[value], function(item) { - return {type: "option", value: item, inner: item} - })) - }]}, - {name: "type", select: [["type"].concat(msg[msg.append[0]]), function(event, value) { - - }]}, - - {name: "name", type: "input", onclick: function(event) { - can.onfigure.key.onclick(event, can, {name: "name", zone: ui.zone.value, type: ui.type.value}, event.target) - }, autocomplete: "off"}, - {name: "text", type: "input", onclick: function(event) { - can.onfigure.key.onclick(event, can, {name: "text", zone: ui.zone.value, type: ui.type.value}, event.target) - }, autocomplete: "off"}, - ], function(event, button, data, list) { - var text = can.onfigure._push(can, can.onfigure.text.draw(event, can, [point], {inner: data.name}), "text", temp) - rect.Value(data) - text.Value(data) - return true - }) - }, true) - delete(this._temp) - } - }, - text: function(can, target, data) { - data.x = target.Val("x")+target.Val("width")/2 - data.y = target.Val("y")+target.Val("height")/2 - return data - }, - show: function(can, target) { - return ": (" + target.Val("x") + "," + target.Val("y") + ")" - + " + (" + target.Val("width") + "," + target.Val("height") + ")" - }, - }, -}, []) -Volcanos("onaction", {help: "组件菜单", list: [ - ["grid", 1, 2, 3, 4, 5, 10, 20], - ["stroke-width", 1, 2, 3, 4, 5], - ["font-size", 12, 16, 18, 24, 32], - {text: [" c:", "div", "item"]}, ["stroke", "red", "yellow", "green", "purple", "blue", "cyan", "white", "black"], - {text: [" f:", "div", "item"]}, ["fill", "red", "yellow", "green", "purple", "blue", "cyan", "white", "black", "#0000"], - {text: [" g:", "div", "item"]}, ["go", "run", "auto", "manual"], - {text: [" a:", "div", "item"]}, ["mode", "translate", "draw", "resize", "delete"], - {text: [" s:", "div", "item"]}, ["shape", "block", "rect", "text", "line", "path", "circle", "ellipse", "heart"], - ], - "编辑": function(event, can, key) { can.Action("go", "auto") }, - "save": function(event, can, key) { - var msg = can.request(event); msg.Option("content", can.onexport.content(can, can.svg)) - can.run(event, ["action", "save", can.Option("path"), can.Option("file")], function() { - can.user.toast(can, "保存成功") - }, true) - }, - "项目": function(event, can, key) { - can.page.Modify(can, can.ui.project, {style: {display: can.ui.project.style.display=="none"? "block": "none"}}) - }, - "变参": function(event, can, key) { - can.page.Modify(can, can._action, {style: {display: can._action.style.display=="none"? "": "none"}}) - }, - "清空": function(event, can) { - can.group.innerHTML = "", can.point = [], can.keys = [], delete(can.temp) - }, - "删除": function(event, can) { if (can.group == can.svg) { return } - can.page.Remove(can, event.target) - can.page.Remove(can, can.group), can.page.Select(can, can.action, "option[value="+can.group.Value("class")+"]", function(item) { - can.page.Remove(can, item) - }) - can.Action("group", "svg") - }, - "添加": function(event, can) { - can.user.prompt("add group", function(name) { - var group = document.createElementNS('http://www.w3.org/2000/svg', 'g') - can.group.append(can.onimport.block(can, group)) - group.Value("class", name), can.core.List(["font-size", "stroke-width", "stroke", "fill"], function(name) { - group.Value(name, can.Action(name)) - }) - - can.onimport.group(can, group).click() - }) - }, - - "font-size": function(event, can, key, value) { can.Action(key, value), can.group.Value(key, value) }, - "stroke-width": function(event, can, key, value) { can.Action(key, value), can.group.Value(key, value) }, - stroke: function(event, can, key, value) { can.Action(key, value), can.group.Value(key, value) }, - fill: function(event, can, key, value) { can.Action(key, value), can.group.Value(key, value) }, - shape: function(event, can, key, value) { can.Action(key, value) }, - mode: function(event, can, key, value) { can.Action(key, value) }, - go: function(event, can, key, value) { can.Action(key, value) }, - - _mode: { - run: function(event, can) { var target = event.target - event.type == "click" && target.Value("type") && can.run(event, ["action", "run", target.Value("zone"), target.Value("type"), target.Value("name"), target.Value("text")], function(msg) { - can.onappend.table(can, msg, function() {}, can.ui.display) - can.onappend.board(can, msg.Result(), can.ui.display) - }, true) - }, - translate: function(event, can, point) { - if (event.type == "click") { - if (point.length == 1) { - var target = can.group - can._temp = { - x: target.Val("translate_x"), - y: target.Val("translate_y"), - target: target, - } - return - } - - var target = can._temp.target - var x = target.Val("translate_x") + point[1].x - point[0].x - var y = target.Val("translate_y") + point[1].y - point[0].y - target.Value("transform", "translate("+x+","+y+") scale(1)") - target.Value("translate_x", x) - target.Value("translate_y", y) - console.log(x, y) - can.point = [] - return - } - - if (point.length > 1) { - var shape = "line" - var figure = can.onfigure[shape] - var data = figure.draw && figure.draw(event, can, point) - var obj = data && can.onfigure._push(can, data, figure.data.name||shape, can.group||can.svg) - return obj - } - }, - draw: function(event, can, point) { - var shape = can.Action("shape") - var figure = can.onfigure[shape] - figure.grid && figure.grid(event, can, point) - - var data = figure.draw && figure.draw(event, can, point) - var obj = data && can.onfigure._push(can, data, figure.data.name||shape, can.group||can.svg) - - event.type == "click" && obj && can.core.List(point, function(item, index) { - item.target && can.onfigure._ship(can, item.target, {pid: obj.Value("pid"), which: index, anchor: item.anchor}) - }) - return obj - }, - resize: function(event, can, point, target) { target = target || event.target - if (point.length == 1) { - if (event.type == "click") { - can.current = {target: target, begin: can.core.List([target], function(item) { if (item.tagName == "g") { return } - return { - x: item.Val("x"), y: item.Val("y"), width: item.Val("width"), height: item.Val("height"), - target: item, ship: can.core.List(item.Value("ship"), function(ship) { - return ship.pid && (ship.target = can.page.Select(can, can.svg, "."+ship.pid)[0]) && ship - }) - } - }), pos: can.page.Prepos(event, target)} - } - return - } - if (event.type == "click") { - return can.point = [], delete(can.current) - } - - can.core.List(can.current.begin, function(item) { var figure = can.onfigure._get(can, item.target) - can.page.Resizes(event, item.target, item, point[0], point[1], can.current.pos) - can.page.Select(can, can.svg, "."+item.target.Value("text"), function(text) { - text.Value(figure.text(can, item.target, {})) - }) - can.core.List(item.ship, function(ship) { - var p = can.page.Anchor(event, item.target, ship.anchor, {}) - if (ship.which == 0) { - ship.target.Val("x1", p.x) - ship.target.Val("y1", p.y) - } - if (ship.which == 1) { - ship.target.Val("x2", p.x) - ship.target.Val("y2", p.y) - } - }) - }) - }, - delete: function(event, can, point) { - can.point = [], event.target != can.svg && can.page.Remove(can, event.target) - }, - }, - _action: function(event, can, points, target) { - can.temp && can.page.Remove(can, can.temp) && delete(can.temp) - can.temp = can.onaction._mode[can.Action("mode")](event, can, points, target) - can.point.length == 0 && delete(can.temp) - }, - _point: function(event, can) { - var p = can.svg.getBoundingClientRect() - var point = {x: event.clientX-p.x, y: event.clientY-p.y} - if (can.Action("mode") == "view") { return point } - point.x = point.x - point.x % parseInt(can.Action("grid")) - point.y = point.y - point.y % parseInt(can.Action("grid")) - return point - }, - _show: function(can, target) { var figure = can.onfigure._get(can, target) - can.Status("分组", target.Groups() || can.group.Value("class") ) - can.Status("图形", target.tagName + " " + ( - figure? figure.show(can, target): "")) - }, - _auto: function(can, target, pos) { - if (target.tagName == "text") { - - } else if (target == can.svg) { - if (pos == 5) { - can.Action("mode", "draw") - can.Action("shape", "rect") - can.page.Modify(can, can.svg, {style: {cursor: "crosshair"}}) - } else { - can.Action("mode", "resize") - } - } else { - switch (pos) { - case 5: - case 9: - can.Action("mode", "resize") - break - default: - can.Action("mode", "draw") - can.Action("shape", "line") - } - } - }, - - onclick: function(event, can) { - if (can.Action("go") == "run") { - can.onaction._mode.run(event, can) - return - } - var target = event.target - if (event.altKey) { - target = can.onfigure._copy(event, can, event.target) - can.Action("mode", "resize") - } - if (event.target == can._target) { return } - var point = can.onaction._point(event, can) - can.onaction._action(event, can, can.point = can.point.concat(point), target) - }, - onmousemove: function(event, can) { - var point = can.onaction._point(event, can) - can.Status("坐标", point.x+","+point.y) - if (can.Action("go") == "run") { return can.page.Modify(can, event.target, {style: {cursor: ""}}) } - - var pos = can.page.Prepos(event, event.target) - if (can.Action("go") == "auto" && can.point.length == 0) { - can.onaction._auto(can, event.target, pos) - } - can.onaction._action(event, can, can.point.concat(point)) - }, - onmouseover: function(event, can) { - can.onaction._show(can, event.target) - }, - oncontextmenu: function(event, can) { - can.onaction._show(can, event.target) - }, -}) -Volcanos("ondetail", {help: "组件详情", list: ["复制", "标签", "编辑", "删除"], - "复制": 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") - }) - can.user.prompt("文字", function(text) { - if (target.tagName == "text") {return target.innerHTML = text} - - if (can.page.Select(can, can.svg, "."+target.Value("text"), function(item) { - item.Value("inner", text) - }).length > 0) { - return - } - - var figure = can.onfigure._get(can, target) - var data = figure.text(can, target, {inner: text}) - var obj = can.onfigure._push(can, data, "text", target.Group()) - target.Value("text", obj.Value("pid")) - }, def) - }, - "编辑": function(event, can) { var target = event.target - var figure = can.onfigure._get(can, target) - can.user.input(event, can, can.core.List(["x", "y", "transform", "translate_x", "translate_y"].concat(figure.data.copy||[]), function(item) { - return {_input: "text", name: item, value: target.Value(item)} - }), function(event, cmd, meta, list) { - can.core.Item(meta, function(key, value) { - target.Value(key, value) - }) - }) - }, - "删除": function(event, can) { if (event.target == can.svg) { return } - can.core.List(event.target.Value("ship"), function(value) { - can.page.Select(can, can.svg, "."+value.pid, function(item) { - can.page.Remove(can, item) - }) - }) - can.page.Select(can, can.svg, "."+event.target.Value("text"), function(item) { - can.page.Remove(can, item) - }) - can.page.Remove(can, event.target) - }, -}) -Volcanos("onexport", {help: "导出数据", list: ["坐标", "分组", "图形", "按键"], - content: function(can, svg) { - return ['', svg? svg.innerHTML: "", ""]).join("") - }, -}) - diff --git a/plugin/local/wiki/draw/path.js b/plugin/local/wiki/draw/path.js index 76f5a755..5e227382 100644 --- a/plugin/local/wiki/draw/path.js +++ b/plugin/local/wiki/draw/path.js @@ -1,5 +1,5 @@ Volcanos("onfigure", {help: "图形绘制", list: [], - path: { // + path: { // data: {size: {}, copy: ["d", "name", "meta", "tt", "xx", "yy"], x: function(event, can, value, cmd, target) { var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}') @@ -130,5 +130,5 @@ Volcanos("onfigure", {help: "图形绘制", list: [], }, show: function(can, target) { return target.tagName + " " + target.Value("d") }, }, -}, []) +}) diff --git a/plugin/local/wiki/walk.js b/plugin/local/wiki/draw/walk_trash.js similarity index 100% rename from plugin/local/wiki/walk.js rename to plugin/local/wiki/draw/walk_trash.js diff --git a/plugin/local/wiki/feel.css b/plugin/local/wiki/feel.css index 4c4e7d9a..5b744bb5 100644 --- a/plugin/local/wiki/feel.css +++ b/plugin/local/wiki/feel.css @@ -1,18 +1,14 @@ -fieldset.feel div.action { - clear:none; -} - -fieldset.feel div.output { - min-height:100px; -} fieldset.feel div.output img { - display:block; - float:left; + display:block; float:left; } fieldset.feel div.output video { - display:block; - float:left; + display:block; float:left; } -fieldset.feel div.output { - min-height:100px; +fieldset.feel.float>legend { + display:none; +} +fieldset.feel.float { + margin:0 10px; padding:0 10px; + background-color:#4eaad0c2; + position:absolute; } diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 81c8b9a8..a5dc71ff 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -4,13 +4,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, value.path.endsWith("/")? can.path.Push(value): can.list.push(value) }) + can.onmotion.hidden(can, can._action) can.ui = can.onlayout.display(can, target) can.onappend.table(can, can.path, null, can.ui.content) - - var feature = can.Conf("feature") || {} - can.onmotion.hidden(can, can._action) typeof cb == "function" && cb(msg) + var feature = can.Conf("feature") || {} can.Action("倍速", can.rate = parseInt(msg.Option("rate"))||feature["rate"]||1) can.Action("起始", can.begin = parseInt(msg.Option("begin"))||feature["begin"]||0) can.Action("数量", can.limit = parseInt(msg.Option("limit"))||feature["limit"]||6) @@ -18,7 +17,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.Option("path") != "最近/" && can.onimport._page(can, can.list, can.begin, can.limit) }, _page: function(can, list, begin, limit) { can.onmotion.clear(can, can.ui.content) - if (!list || list.length == 0) { return } for (var i = begin; i < begin+limit; i++) { list && list[i] && can.onimport.file(can, list[i].path, i) } can.Status("begin", begin), can.Status("limit", limit), can.Status("total", can.list.length) }, @@ -31,12 +29,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, }, ["/plugin/local/wiki/feel.css"]) Volcanos("onfigure", {help: "组件菜单", list: [], - qrc: function(can, path, index) { return can.onfigure.image(can, path, index) }, png: function(can, path, index) { return can.onfigure.image(can, path, index) }, jpg: function(can, path, index) { return can.onfigure.image(can, path, index) }, jpeg: function(can, path, index) { return can.onfigure.image(can, path, index) }, image: function(can, path, index) { return {img: path, height: can.height, onclick: function(event) { - can.onappend._init(can, {}, [], function(sub) { + can.onappend._init(can, {type: "story feel float"}, [], function(sub) { sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) } var header = sub.run({}, ["search", "Header.onexport.height"]) @@ -44,11 +41,8 @@ Volcanos("onfigure", {help: "组件菜单", list: [], var river = sub.run({}, ["search", "River.onexport.width"]) var height = window.innerHeight-header-footer + sub.page.Modify(sub, sub._target, {style: {left: river, top: header}}) sub.page.Modify(sub, sub._output, {style: {"max-height": height}}) - sub.page.Modify(sub, sub._target, {style: { - left: river, top: header, height: height, background: "#4eaad0c2", - margin: "0 10px", padding: "0 10px", - }}) var order = index; function show(order) { path = can.onimport._file(can, can.list[order].path) @@ -71,7 +65,7 @@ Volcanos("onfigure", {help: "组件菜单", list: [], } }, video: function(can, path) { var auto = true, loop = true, total = 0; function cb(event) { } - return {className: "preview", type: "video", style: {height: can.height}, + return {type: "video", style: {height: can.height}, className: "preview", data: {src: path, controls: "controls", autoplay: auto, loop: loop, playbackRate: can.rate}, oncontextmenu: cb, onplay: cb, onpause: cb, onended: cb, onmouseover: function(event) { can.Status("file", path) }, @@ -82,8 +76,8 @@ Volcanos("onfigure", {help: "组件菜单", list: [], }, } }, - m4v: function(can, path) { return can.onfigure.video(can, path) }, mp4: function(can, path) { return can.onfigure.video(can, path) }, + m4v: function(can, path) { return can.onfigure.video(can, path) }, mov: function(can, path) { return can.onfigure.video(can, path) }, }) Volcanos("onaction", {help: "组件菜单", list: [ diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index b3052f36..b37a9a76 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -1,44 +1,47 @@ -Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { target.innerHTML = "" - var list = []; can.onengine.listen(can, "action.resize", function(width, height) { - can.Conf({width: width, height: height}), can.core.Delay(list, 100, function() { - can.onimport._init(can, msg, list, cb, target) - }) - }) - can.page.Modify(can, can._target, {style: {"max-width": can.Conf("width")}}) - - if (msg.Option("_display") == "table") { - return can.onappend.table(can, msg, function(value, key) { - return {text: [value, "td"], onclick: function(event) { - can.sup.onaction.change(event, can.sup, key, value, function(msg) { - can.run(event) - }) - }} - }, target) - } target.innerHTML = msg.Result() +Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { + can.onmotion.clear(can) + typeof cb == "function" && cb(msg) + if (msg.Length() > 0) { return can.onappend.table(can, msg) } + can.page.Modify(can, target, msg.Result()) can.page.Select(can, target, ".story", function(item) { var data = item.dataset||{} + can.core.CallFunc([can.onimport, data.type], [can, data, item]) can.page.Modify(can, item, {style: can.base.Obj(data.style)}) - var cb = can.onimport[data.type]; typeof cb == "function" && cb(can, data, item) - }) - return typeof cb == "function" && cb(msg) - }, - table: function(can, list, target) { - can.page.Select(can, target, "td", function(item) { - item.title = "点击复制" - item.onclick = function(event) { - can.user.copy(event, can, item.innerText) - } }) }, - spark: function(can, list, target) { - if (list["name"] == "inner") { - target.title = "点击复制" - target.onclick = function(event) { + + premenu: function(can, list, target) { var meta = can.base.Obj(list.meta) + can.page.Select(can, can._output, "h2.story, h3.story", function(item) { + can.page.Append(can, target, [{text: [item.innerHTML, "li", item.tagName], onclick: function() { + item.scrollIntoView() + }}]), item.onclick = function(event) { target.scrollIntoView() } + }) + }, + spark: function(can, item, target) { + if (item["name"] == "inner") { + target.title = "点击复制", target.onclick = function(event) { can.user.copy(event, can, target.innerText) } return } can.page.Select(can, target, "span", function(item) { + item.title = "点击复制", item.onclick = function(event) { + can.user.copy(event, can, item.innerText) + } + }) + }, + field: function(can, item, target) { var meta = can.base.Obj(item.meta) + meta.width = can.Conf("width"), meta.height = can.Conf("height") + can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) { + sub.run = function(event, cmds, cb, silent) { + can.run(event, (cmds[0] == "search"? []: ["action", "story", item.type, item.name, item.text]).concat(cmds), cb, true) + } + delete(target.dataset.meta) + }, can._output, target) + }, + + table: function(can, list, target) { + can.page.Select(can, target, "td", function(item) { item.title = "点击复制" item.onclick = function(event) { can.user.copy(event, can, item.innerText) @@ -48,26 +51,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, iframe: function(can, list, target) { var meta = can.base.Obj(list.meta) can.page.Modify(can, target, {width: can.Conf("width")-200}) }, - premenu: function(can, list, target) { var meta = can.base.Obj(list.meta) - can.page.Select(can, can._output, "h2.story, h3.story", function(item) { - var ui = can.page.Append(can, target, [{text: [item.innerHTML, "li", item.tagName], onclick: function() { - item.scrollIntoView() - }}]) - item.onclick = function(event) { - // ui.first.scrollIntoView() - } - }) - }, - field: function(can, item, target) { var meta = can.base.Obj(item.meta) - meta.width = can.Conf("width"), meta.height = can.Conf("height") - can.onappend._init(can, meta, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { - sub.run = function(event, cmds, cb, silent) { - can.run(event, (cmds[0] == "search"? []: ["action", "story", item.type, item.name, item.text]).concat(cmds), cb, true) - } - delete(target.dataset.meta) - }, can._output, target) - }, - keydown: function(event, can, key) { switch (key) { case "g": @@ -101,6 +84,70 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, }, ["/plugin/local/wiki/word.css"]) Volcanos("onaction", {help: "控件交互", list: [], + "演示": function(event, can) { + var current = [], list = [] + can.page.Select(can, can._output, ".story", function(item) { + switch (item.tagName) { + case "H1": + case "H2": + case "H3": + list.push(current = []) + break + } + current.push(item) + }) + + can.onappend._init(can, {type: "story word float"}, [], function(sub) { + sub.run = function(event, cmds, cb) { can.run(event, cmds, cb, true) } + sub.ui = sub.onlayout.profile(sub) + + sub.onappend._action(sub, [ + ["布局", "开讲", "快闪", "网格", "层叠"], + "大纲", "首页", "上一页", + ["菜单"].concat(can.page.Select(can, can._output, "h1,h2,h3", function(item) { return item.innerHTML })), + "下一页", "隐藏", "结束", + ], sub._action, { + "开讲": function(event) { sub.onaction.show(sub, 0) }, + "网格": function(event) { sub.onaction.grid(sub) }, + "快闪": function(event) { sub.onaction.flash(sub) }, + "层叠": function(event) { sub.onaction.spring(sub) }, + + "大纲": function(event) { sub.page.Toggle(sub, sub.ui.project) }, + "首页": function(event) { can.onaction.show(can, 0) }, + + "上一页": function(event) { can.onaction.prev(can) }, + "菜单": function(event) { can.onaction.prev(can) }, + "下一页": function(event) { can.onaction.next(can) }, + "隐藏": function(event) { can.page.Toggle(can, sub.ui.content) }, + "结束": function(event) { can.page.Remove(can, sub._target) }, + }) + + can.page.Select(can, can._output, "h1.story,h2.story,h3.story", function(item) { + can.onappend.item(can, "item", {name: item.innerHTML}, function(event) { + + }, function(event) { + + }, sub.ui.project) + }) + + can.core.List(list, function(page, index) { + var items = can.core.List(page, function(item) { + switch (item.tagName) { + case "FIELDSET": + return can.onappend._init(can, can.base.Obj(item.dataset.meta), ["/plugin/state.js"], function(sub) { + sub.run = function(event, cmds, cb) { + can.run(event, (cmds[0] == "search"? []: ["action", "story", item.dataset.type, item.dataset.name, item.dataset.text]).concat(cmds), cb, true) + } + }, sub.ui.content)._target + default: return item.cloneNode(true) + } + }) + + sub.page.Append(sub, sub.ui.content, {view: "page "+(index==0?"show": "")+(index==0? " first": ""), list: items}) + }) + }, document.body) + }, + show: function(can, which) { can.page.Select(can, can.ui.content, "div.page.show", function(page) { can.page.ClassList.del(can, page, "show") @@ -220,99 +267,8 @@ Volcanos("onaction", {help: "控件交互", list: [], can.onmotion.show(can, {value: 10, length: 20}, next, page) }) }, - - "演示": function(event, can) { - can.onkeypop.action = can - var current = []; var list = [] - can.page.Select(can, can._output, ".story", function(item) { - switch (item.tagName) { - case "H1": - case "H2": - case "H3": - list.push(current = []) - break - } - current.push(item) - }) - - can.ui && can.page.Remove(can, can.ui.show) - can.ui = can.page.Append(can, document.body, [{view: "show", style: { - - },list: [{view: "control", list: [ - {select: [["布局", "开讲", "快闪", "网格", "层叠"], function(event, value) { - switch (value) { - case "开讲": - can.onaction.show(can, 0) - break - case "网格": - can.onaction.grid(can) - break - case "快闪": - can.onaction.flash(can) - break - case "层叠": - can.onaction.spring(can) - break - } - }]}, - {button: ["大纲", function(event) { - can.page.Toggle(can, can.ui.project) - }]}, - {button: ["首页", function(event) { - can.onaction.show(can, 0) - can.onkeypop.action = can - }]}, - {button: ["上一页", function(event) { - can.onaction.prev(can) - can.onkeypop.action = can - }]}, - {select: [["menu"].concat(can.page.Select(can, can._output, "h1,h2,h3", function(item) { return item.innerHTML })), function(event, value) { - can.onaction.show(can, value) - can.onkeypop.action = can - }]}, - {button: ["下一页", function(event) { - can.onaction.next(can) - can.onkeypop.action = can - }]}, - {button: ["隐藏", function(event) { - can.page.Toggle(can, can.ui.content) - can.onkeypop.action = can - }]}, - {button: ["结束", function(event) { - can.ui && can.page.Remove(can, can.ui.show) - }]}, - ]}, {view: "project", style: {display: "none"}, list: can.page.Select(can, can._output, "h1.story,h2.story,h3.story", function(item) { - return {text: [item.innerHTML, "div", "item"], onclick: function(event) { - can.onaction.show(can, item.innerHTML) - }} - })}, {view: "content", style: { - width: document.body.offsetWidth-40+"px", height: document.body.offsetHeight-25+"px", - }, list: can.core.List(list, function(page, index) { - return {view: "page "+(index==0?"show": "")+(index==0? " first": ""), style: { - width: document.body.offsetWidth-40+"px", - }, list: can.core.List(page, function(item) { - switch (item.tagName) { - case "FIELDSET": - var field = document.createElement("fieldset"); can.page.Append(can, field, [ - {view: ["", "legend"]}, - {view: ["option", "form"]}, - {view: ["action", "div"]}, - {view: ["output", "div"]}, - {view: ["status", "div"]}, - ]) - var meta = can.base.Obj(item.dataset.meta) - meta.width = document.body.offsetWidth, meta.height = document.body.offsetHeight - can.onappend._init(can, meta, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { - sub.run = function(event, cmds, cb, silent) { - can.run(event, (cmds[0] == "search"? []: ["action", "story", item.dataset.type, item.dataset.name, item.dataset.text]).concat(cmds), cb, true) - } - }, can._output, field) - return field - default: - return item.cloneNode(true) - } - })} - })}, ] }]) - }, }) +Volcanos("onfigure", {help: "控件交互", list: [], + +})