mirror of
https://shylinux.com/x/volcanos
synced 2025-04-26 01:04:06 +08:00
opt word
This commit is contained in:
parent
c498291447
commit
a46de11e6d
31
frame.js
31
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]
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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: { // <rect rx="10" ry="10" x="60" y="10" width="30" height="30"/>
|
||||
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 ['<svg vertion="1.1" xmlns="https://www.w3.org/2000/svg" text-anchor="middle" dominant-baseline="middle"'].concat(
|
||||
svg? can.core.List(["width", "height", "count", "grid",
|
||||
|
@ -1,819 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
can.ui = can.onlayout.project(can)
|
||||
can.onmotion.hidden(can, can._action)
|
||||
|
||||
// 交互数据
|
||||
can.point = [], can.keys = []
|
||||
can.svg = null, can.group = null
|
||||
can.last = null, can.temp = null
|
||||
can.current = null
|
||||
|
||||
// 加载绘图
|
||||
can.page.Modify(can, can.ui.content, msg.Result()||can.onexport.content(can))
|
||||
can.page.Select(can, can.ui.content, "svg", function(svg) { can.svg = can.group = svg
|
||||
can.onimport.block(can, svg), can.onimport.group(can, svg).click()
|
||||
can.page.Select(can, svg, "*", function(item, index) {
|
||||
can.onimport.block(can, item); if (item.tagName == "g" && item.Value("class") != "") {
|
||||
can.onimport.group(can, item)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// 加载事件
|
||||
can.core.Item(can.onaction, function(key, value) {
|
||||
if (key.indexOf("on") == -1 || !can.onaction.hasOwnProperty(key)) { return }
|
||||
can.svg[key] = can.ui.content[key] || function(event) {
|
||||
value(event, can)
|
||||
}
|
||||
})
|
||||
|
||||
can.core.Timer(10, function() {
|
||||
// 默认参数
|
||||
can.core.Item({
|
||||
"font-size": "24",
|
||||
"stroke-width": 2,
|
||||
"stroke": "yellow",
|
||||
"fill": "purple",
|
||||
"shape": "rect",
|
||||
"grid": "10",
|
||||
"go": "run",
|
||||
}, function(key, value) {
|
||||
can.svg.Value(key, can.Action(key, can.svg.Value(key)||value))
|
||||
})
|
||||
})
|
||||
return typeof cb == "function" && cb(msg)
|
||||
},
|
||||
group: function(can, target) { var name = target.Groups() || "svg"
|
||||
return can.onappend.item(can, "item", {name: name}, function(event) {
|
||||
can.group = target, can.core.List(["font-size", "storke-width", "stroke", "fill"], function(key) {
|
||||
can.Action(key, target.Value(key)||can.Action(key))
|
||||
}), can.onmotion.show(can, 10, null, target)
|
||||
}, function(event) {
|
||||
can.user.carte(event, can, can.onaction||{}, ["隐藏", "显示", "添加", "删除", "清空"], function(ev, item, meta) {
|
||||
switch (item) {
|
||||
case "显示":
|
||||
can.page.Select(can, can.ui.content, "g."+name, function(item) {
|
||||
can.onmotion.show(can, 10, null, target)
|
||||
}); break
|
||||
case "隐藏":
|
||||
can.page.Select(can, can.ui.content, "g."+name, function(item) {
|
||||
can.onmotion.hide(can, {value: 100, length: 10}, null, target)
|
||||
}); break
|
||||
default:
|
||||
can.onaction[item](event, can, item)
|
||||
}
|
||||
})
|
||||
}, can.ui.project)
|
||||
},
|
||||
block: function(can, target) {
|
||||
target.Val = function(key, value) {
|
||||
return parseInt(target.Value(key, value == undefined? value: parseInt(value)||0)) || 0
|
||||
}
|
||||
target.Value = function(key, value) {
|
||||
if (typeof key == "object") { can.core.Item(key, target.Value); return }
|
||||
|
||||
var figure = can.onfigure._get(can, target)
|
||||
key && (key = figure && figure.data && figure.data.size && figure.data.size[key] || key)
|
||||
|
||||
if (figure && figure.data && typeof figure.data[key] == "function") {
|
||||
return figure.data[key](event, can, value, key, target)
|
||||
}
|
||||
if (key == "inner") {
|
||||
return value != undefined && (target.innerHTML = value), target.innerHTML
|
||||
}
|
||||
if (key == "ship") {
|
||||
return value != undefined && target.setAttribute(key, JSON.stringify(value)), can.base.Obj(target.getAttribute(key), [])
|
||||
}
|
||||
return value != undefined && target.setAttribute(key, value), target.getAttribute(key||"class")
|
||||
|| target[key]&&target[key].baseVal&&target[key].baseVal.value
|
||||
|| target[key]&&target[key].baseVal || ""
|
||||
}
|
||||
target.Group = function() { var item = target
|
||||
while (item) { if (["svg", "g"].indexOf(item.tagName) > -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: {},
|
||||
}, // <svg font-size="24" stroke-width="2" stroke="yellow" fill="purple" grid="10"/>
|
||||
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"],
|
||||
}, // <rect x="60" y="10" rx="10" ry="10" width="30" height="30" rx="4" ry="4"/>
|
||||
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"],
|
||||
}, // <text x="60" y="10">hi<text>
|
||||
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")
|
||||
},
|
||||
}, // <line x1="10" y1="50" x2="110" y2="150"/>
|
||||
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
|
||||
},
|
||||
}, // <path d="M10 10 H 90 V 90 H 10 Z" fill="transparent" stroke="black"/>
|
||||
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"],
|
||||
}, // <circle cx="25" cy="75" r="20"/>
|
||||
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"],
|
||||
}, // <ellipse cx="75" cy="75" rx="20" ry="5"/>
|
||||
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"],
|
||||
}, // <rect x="60" y="10" rx="10" ry="10" width="30" height="30" rx="4" ry="4"/>
|
||||
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 vertion="1.1" xmlns="https://www.w3.org/2000/svg" text-anchor="middle" dominant-baseline="middle"'].concat(
|
||||
svg? can.core.List([
|
||||
"count", "width", "height", "font-size", "stroke-width", "stroke", "fill",
|
||||
"transform", "translate_x", "translate_y",
|
||||
], function(item) {
|
||||
return svg.Value(item)? ' ' + item + '="' + svg.Value(item) + '"': ""
|
||||
}): [" width=600 height=200 "]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("")
|
||||
},
|
||||
})
|
||||
|
@ -1,5 +1,5 @@
|
||||
Volcanos("onfigure", {help: "图形绘制", list: [],
|
||||
path: { // <path d="M10 10 H 90 V 90 H 10 Z" fill="transparent" stroke="black"/>
|
||||
path: { // <path d="M10 10 H 90 V 90 H 10 Z" stroke="black" fill="transparent"/>
|
||||
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") },
|
||||
},
|
||||
}, [])
|
||||
})
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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: [
|
||||
|
@ -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: [],
|
||||
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user