1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt vimer.js

This commit is contained in:
harveyshao 2022-07-13 08:20:03 +08:00
parent 1019455633
commit 44983d30b6
10 changed files with 175 additions and 140 deletions

View File

@ -331,7 +331,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
can.onkeymap.input(event, can), can.onmotion.selectField(event, can) can.onkeymap.input(event, can), can.onmotion.selectField(event, can)
break break
case html.TEXTAREA: case html.TEXTAREA:
switch (event.key) { case lang.TAB: can.onkeymap.insertText(event.target, ice.TB); can.onkeymap.prevent(event); break } // switch (event.key) { case lang.TAB: can.onkeymap.insertText(event.target, ice.TB); can.onkeymap.prevent(event); break }
break break
} }
@ -541,12 +541,6 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta
Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) {
window.addEventListener(html.ORIENTATIONCHANGE, function(event) { can.onengine.signal(can, html.ORIENTATIONCHANGE) }) window.addEventListener(html.ORIENTATIONCHANGE, function(event) { can.onengine.signal(can, html.ORIENTATIONCHANGE) })
can.onmotion.float.auto(can, target) can.onmotion.float.auto(can, target)
target.onclick = function(event) {
if (can.page.tagis(["input", "select", "textarea"], event.target)) { return }
can.page.Select(can, target, can.page.Keys("div.float", "fieldset.float"), function(item) {
can.page.Remove(can, item)
})
}
}, },
float: {_hash: {}, float: {_hash: {},
del: function(can, key) { del: function(can, key) {
@ -604,7 +598,7 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) {
if (pos) { item.scrollTo && item.scrollTo(0, pos-1); return item } if (pos) { item.scrollTo && item.scrollTo(0, pos-1); return item }
}).length > 0 }).length > 0
}, },
delay: function(can, cb) { can.core.Timer(100, cb) }, delay: function(can, cb, interval) { can.core.Timer(interval||100, cb) },
focus: function(can, target) { if (!target) { return } focus: function(can, target) { if (!target) { return }
target.setSelectionRange && target.setSelectionRange(0, -1), target.focus() target.setSelectionRange && target.setSelectionRange(0, -1), target.focus()
}, },
@ -792,6 +786,10 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", _focus: [], _init: function(can,
if (window.webview) { if (window.webview) {
if (event.target.tagName == "A") { can.user.open(event.target.href) } if (event.target.tagName == "A") { can.user.open(event.target.href) }
} }
if (can.page.tagis(["input", "select", "textarea"], event.target)) { return }
can.page.Select(can, document.body, can.page.Keys("fieldset.input.key.float"), function(item) {
can.page.Remove(can, item)
})
} }
can.onkeymap._build(can), document.body.onkeydown = function(event) { can.onkeymap._build(can), document.body.onkeydown = function(event) {
if (event.metaKey) { if (window.webview) { if (event.metaKey) { if (window.webview) {

View File

@ -84,6 +84,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
"plugin": "插件", "plugin": "插件",
"prev": "上一页", "next": "下一页", "prev": "上一页", "next": "下一页",
"trash": "删除",
"open": "打开", "close": "关闭", "open": "打开", "close": "关闭",
"start": "启动", "stop": "停止", "start": "启动", "stop": "停止",
"begin": "开始", "end": "结束", "begin": "开始", "end": "结束",
@ -229,6 +230,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
return can.base.isString(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item), onclick: function(event) { return can.base.isString(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item), onclick: function(event) {
can.user.isMobile && can.page.Remove(can, ui._target) can.user.isMobile && can.page.Remove(can, ui._target)
can.base.isFunc(cb) && cb(event, item, meta, index) can.base.isFunc(cb) && cb(event, item, meta, index)
can.onkeymap.prevent(event)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
carte._float && can.page.Remove(can, carte._float._target) carte._float && can.page.Remove(can, carte._float._target)
} }] }: can.base.isArray(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) { } }] }: can.base.isArray(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) {
@ -258,7 +260,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
}, },
input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() } input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() }
var msg = can.request(event) var msg = can.request(event); event = event._event||event
var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [ var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [
{view: "content", list: [{view: [html.OPTION, html.TABLE], list: can.core.List(form, function(item) { {view: "content", list: [{view: [html.OPTION, html.TABLE], list: can.core.List(form, function(item) {
item = can.base.isString(item)? {type: html.TEXT, name: item}: item.length > 0? {type: html.SELECT, name: item[0], values: item.slice(1)}: item item = can.base.isString(item)? {type: html.TEXT, name: item}: item.length > 0? {type: html.SELECT, name: item[0], values: item.slice(1)}: item

View File

@ -115,7 +115,7 @@ Volcanos(chat.ONPLUGIN, {help: "注册插件",
}) })
}), }),
"alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) { "alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
can.user.alert(cmds[0]) cmds && cmds[0] && can.user.alert(cmds[0])
}), }),
"info": shy("信息", {}, ["text", "list", "back"], function(can, msg, cmds) { "info": shy("信息", {}, ["text", "list", "back"], function(can, msg, cmds) {
msg.Echo("hello world") msg.Echo("hello world")

View File

@ -16,12 +16,13 @@ fieldset.inner>div.output div.content td.text span.datatype { color:lightgreen;
fieldset.inner>div.output div.content td.text span.function { color:cyan; font-weight:bold; } fieldset.inner>div.output div.content td.text span.function { color:cyan; font-weight:bold; }
fieldset.inner>div.output div.content td.text span.constant { color:magenta; } fieldset.inner>div.output div.content td.text span.constant { color:magenta; }
fieldset.inner>div.output div.content td.text span.string { color:magenta; } fieldset.inner>div.output div.content td.text span.string { color:magenta; }
fieldset.inner>div.output td.content iframe { border:0; }
fieldset.inner>div.output td.content>div.tabs { display:none; } fieldset.inner>div.output td.content>div.tabs { display:none; }
fieldset.inner>div.output td.content>div.path { display:none; } fieldset.inner>div.output td.content>div.path { display:none; }
fieldset.inner div.output fieldset.toolkit { background-color:#0e3369b3; position:absolute; bottom:0px; right:0px; } fieldset.inner div.output fieldset.toolkit { position:absolute; bottom:0px; right:0px; }
fieldset.inner>div.output fieldset.toolkit>div.output>fieldset { display:none; } fieldset.inner>div.output fieldset.toolkit>div.output>fieldset { display:none; }
fieldset.inner>div.output fieldset.toolkit>div.output>fieldset.select { display:block; } fieldset.inner>div.output fieldset.toolkit>div.output>fieldset.select { background-color:#0e3369b3; color:white; display:block; }
fieldset.inner>div.status legend { background-color:#0d969f8a; padding:0px 10px; border-left:solid 2px red; height:30px; float:right; } fieldset.inner>div.status legend { background-color:#0d969f8a; padding:0px 10px; border-left:solid 2px red; height:30px; float:right; }
fieldset.inner>div.status legend.select { background-color:green; } fieldset.inner>div.status legend.select { background-color:green; }
fieldset.inner>div.status legend:hover { background-color:green; } fieldset.inner>div.status legend:hover { background-color:green; }
@ -53,6 +54,8 @@ body.white.simple fieldset.inner>div.output div.content td.text span.string { co
body.white.simple fieldset.inner>div.output div.content td.text span.function { color:#795e26; } body.white.simple fieldset.inner>div.output div.content td.text span.function { color:#795e26; }
body.white.simple fieldset.inner>div.output div.content td.text span.keyword { color:blue; } body.white.simple fieldset.inner>div.output div.content td.text span.keyword { color:blue; }
body.white.simple>div.carte div.item:hover { background-color:#e3e6f1; }
body.mobile fieldset.inner>form.option input[name=file] { width:90px; } body.mobile fieldset.inner>form.option input[name=file] { width:90px; }
body.mobile fieldset.plugin.inner div.action { display:none; } body.mobile fieldset.plugin.inner div.action { display:none; }
body.mobile.landscape fieldset.plugin.inner div.action { display:contents; } body.mobile.landscape fieldset.plugin.inner div.action { display:contents; }

View File

@ -6,11 +6,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.onengine.plugin(can, can.onplugin) can.onengine.plugin(can, can.onplugin)
can.onmotion.clear(can), can.onlayout.profile(can) can.onmotion.clear(can), can.onlayout.profile(can)
can.page.styleWidth(can, can.ui.project, 180) can.page.styleWidth(can, can.ui.project, 240)
can.onimport._project(can, can.ui.project) can.onimport._project(can, can.ui.project)
can.onimport._profile(can, can.ui.profile) can.onimport._profile(can, can.ui.profile)
can.onimport._display(can, can.ui.display) can.onimport._display(can, can.ui.display)
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
can.ui._content = can.ui.content
switch (can.Mode()) { switch (can.Mode()) {
case "simple": can.onimport._simple(can); break case "simple": can.onimport._simple(can); break
@ -130,41 +131,68 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
project: function(can, path) { project: function(can, path) {
can.onimport.zone(can, [ can.onimport.zone(can, [
{name: "source", _init: function(view) { var total = 0 {name: "source", _init: function(target) { var total = 0
function show(view) { function show(target) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table()
can.run(can.request({}, {dir_root: path, dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table() can.core.List(list, function(item) { if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } })
can.core.List(list, function(item) { if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } }) can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) {
can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) // 显示文件
can.onimport.tabview(can, path, item.path) // 显示文件 }, target), can.Status("文件数", total += msg.Length())
}, view), can.Status("文件数", total += msg.Length()) }, true) } if (path.length == 1) { return show(target) }
}, true)
} can.onimport.zone(can, can.core.List(path, function(path) { return {name: path, _init: function(target) { show(target) }} }), target)
if (path.length == 1) { can.onmotion.delay(can, function() { target.previousSibling.innerHTML = "" })
show(view)
} else {
var ui = can.onimport.zone(can, can.core.List(path, function(path) { return {name: path, _init: function(view) {
show(view)
}} }), view); can.onmotion.delay(can, function() { view.previousSibling.innerHTML = "" })
}
}}, }},
{name: "module", _init: function(view) { {name: "plugin", _init: function(target) {
can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return {index: can.base.trimPrefix(key, "can.")} }), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX) // 显示插件
}, target)
}},
{name: "module", _init: function(target) {
can.runAction(can.request({}, {fields: ctx.INDEX}), ctx.COMMAND, [mdb.SEARCH, ctx.COMMAND], function(msg) { can.runAction(can.request({}, {fields: ctx.INDEX}), ctx.COMMAND, [mdb.SEARCH, ctx.COMMAND], function(msg) {
can.onimport.tree(can, msg.Table(), ctx.INDEX, ice.PT, function(event, item) { can.onimport.tree(can, msg.Table(), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), item.index, ctx.INDEX) // 显示模块 can.onimport.tabview(can, can.Option(nfs.PATH), item.index, ctx.INDEX) // 显示模块
}, view) }, target)
}) })
}}, }},
{name: "plugin", _init: function(view) { {name: "dreams", _init: function(target) { var call = arguments.callee
can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return {index: can.base.trimPrefix(key, "can.")} }), ctx.INDEX, ice.PT, function(event, item) { can.runAction({}, ice.RUN, [web.DREAM], function(msg) {
can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX) // 显示插件 msg.Table(function(item) {
}, view) function carte(event) {
}}, var list = []; switch (item.status) {
case "start": list = ["open", "stop"]; break
case "stop": list = ["start", "trash"]; break
}
can.user.carteRight(event, can, {}, list, function(event, action) {
can.runAction(can.request({}, item), ice.RUN, [web.DREAM, ctx.ACTION, action], function(msg) {
can.onmotion.clear(can, target), call(target)
})
})
}
var color = item.status == "start"? "": "gray"
can.page.Append(can, target, [{view: html.ITEM, list: [{text: [item.name, html.DIV], style: {color: color}, onmouseenter: carte}], onclick: function() {
can.onimport.tabview(can, can.Option(nfs.PATH), item.name, web.DREAM) // 显示空间
}}])
})
})
}, _menu: shy("", {
"create": function(event, zone) {
can.user.input(event, can, [mdb.NAME], function(list) {
can.runAction({}, ice.RUN, [web.DREAM, cli.START, list[0]], function(msg) {
can.onmotion.clear(can, zone._target), zone._init(zone._target), can.user.toastSuccess(can)
can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(mdb.NAME), web.DREAM) // 显示空间
})
})
},
"refresh": function(event, zone) {
can.onmotion.clear(can, zone._target), zone._init(zone._target)
},
}, ["create", "refresh"], function() {})},
], can.ui.project) ], can.ui.project)
}, },
history: function(can, push) { history: function(can, push) {
can.base.Eq(push, can.history[can.history.length-1]) || can.history.push(push) can.base.Eq(push, can.history[can.history.length-1]) || can.history.push(push)
can.Status("跳转数", can.history.length) return can.Status("跳转数", can.history.length), push
return push
}, },
tabview: function(can, path, file, line, cb, skip, skip2) { var key = can.onexport.keys(can, file, path) tabview: function(can, path, file, line, cb, skip, skip2) { var key = can.onexport.keys(can, file, path)
if (can.isCmdMode()) { location.hash = file+ice.FS+(line||1) } if (can.isCmdMode()) { location.hash = file+ice.FS+(line||1) }
@ -174,16 +202,16 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
return can._msg.Option(can.Option()), can.onsyntax._init(can, can._msg, cb, skip2) return can._msg.Option(can.Option()), can.onsyntax._init(can, can._msg, cb, skip2)
} }
can.onimport.history(can, {path: path, file: file, line: line})
function show(msg) { var skip2 = skip; can.tabview[key] = msg function show(msg) { var skip2 = skip; can.tabview[key] = msg
msg._tab = can.onimport.tabs(can, [{name: file.split(msg.Option(nfs.LINE) == ctx.INDEX? ice.PT: ice.PS).pop(), text: file}], function(event, meta) { can.onimport.tabs(can, [{name: file.split(line == ctx.INDEX? ice.PT: ice.PS).pop(), text: file}], function(event, meta) {
msg._tab = event.target msg._tab = event.target, can.onimport.tabview(can, path, file, msg.Option(nfs.LINE), cb, false, skip2), cb = null, skip2 = false
can.onimport.tabview(can, path, file, msg.Option(nfs.LINE), cb, false, skip2), cb = null, skip2 = false
}, function(item) { delete(can.tabview[key]) }, can.ui._tabs, function(item) {}) }, function(item) { delete(can.tabview[key]) }, can.ui._tabs, function(item) {})
} }
can.Option({path: path, file: file, line: line||1}) can.Option(can.onimport.history(can, {path: path, file: file, line: line}))
line == ctx.INDEX? show(can.request({}, {index: file, line: line})): can.run({}, [path, file], show, true) line == ctx.INDEX? show(can.request({}, {index: file, line: line})):
line == web.DREAM? show(can.request({}, {index: file, line: line})):
can.run({}, [path, file], show, true)
}, },
profile: function(can, msg) { profile: function(can, msg) {
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2 var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
@ -200,8 +228,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can) can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can)
}), can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can) }), can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can)
}, },
process: function(can, msg, target, width, height) { process: function(can, msg, target, width, height) { can.onmotion.clear(can, target), can.user.toastSuccess(can)
can.onmotion.clear(can, target), can.user.toastSuccess(can)
if (msg.Option(ice.MSG_PROCESS) == "_field") { if (msg.Option(ice.MSG_PROCESS) == "_field") {
msg.Table(function(meta) { meta.display = msg.Option(ice.MSG_DISPLAY) msg.Table(function(meta) { meta.display = msg.Option(ice.MSG_DISPLAY)
can.onimport.plugin(can, meta, target, function(sub) { width && sub.ConfWidth(width), height && sub.ConfHeight(height), sub.Focus() }) can.onimport.plugin(can, meta, target, function(sub) { width && sub.ConfWidth(width), height && sub.ConfHeight(height), sub.Focus() })
@ -250,9 +277,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
}, [""]) }, [""])
Volcanos(chat.ONPLUGIN, {help: "注册插件", Volcanos(chat.ONPLUGIN, {help: "注册插件",
"local": shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(msg, cmds) { "can.code.inner.keymap": shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(can, msg, cmds) {
}),
"code.inner.keymap": shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(can, msg, cmds) {
can.core.Item(can.onkeymap._mode, function(mode, value) { can.core.Item(can.onkeymap._mode, function(mode, value) {
(!cmds[0] || cmds[0] == mode) && can.core.Item(value, function(key, func) { (!cmds[0] || cmds[0] == mode) && can.core.Item(value, function(key, func) {
if (cmds[0] == mode && cmds[1] == key) { if (cmds[0] == mode && cmds[1] == key) {
@ -272,9 +297,7 @@ Volcanos(chat.ONPLUGIN, {help: "注册插件",
}), }),
}) })
Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg, cb, skip) { Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg, cb, skip) {
if (can.isCmdMode()) { if (can.ui._path) { can.ui._path.innerText = msg.Option(ctx.INDEX)? msg.Option(nfs.FILE): can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE)) }
can.ui._path.innerText = msg.Option(ctx.INDEX)? msg.Option(nfs.FILE): can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE))
}
if (can.onmotion.cache(can, function(cache_data) { if (can.onmotion.cache(can, function(cache_data) {
can.file && (cache_data[can.file] = {current: can.current, max: can.max, can.file && (cache_data[can.file] = {current: can.current, max: can.max,
@ -291,20 +314,44 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line
can.onmotion.delay(can, function() { can.onimport.layout(can) can.onmotion.delay(can, function() { can.onimport.layout(can)
msg.Option(ctx.INDEX) && can.onmotion.focus(can, can.page.Select(can, can.ui.content, html.OPTION_ARGS)[0]) msg.Option(ctx.INDEX) && can.onmotion.focus(can, can.page.Select(can, can.ui.content, html.OPTION_ARGS)[0])
}) })
can.page.Select(can, can._output, can.page.Keys("div.content", html.IFRAME), function(item) {
if (can.onmotion.toggle(can, item, item == msg._ui)) { can.ui.content = msg._ui }
})
return can.file return can.file
}, can.ui.content, can.ui.profile_output, can.ui.display_output) && !skip) { }, can.ui._content, can.ui.profile_output, can.ui.display_output) && !skip) {
return can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb() return can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb()
} }
can.onmotion.clear(can, can.ui.content), can.onimport.layout(can) can.onmotion.clear(can, can.ui.content), can.onimport.layout(can)
if (msg.Option(ctx.INDEX)) { return can.onimport.plugin(can, {index: msg.Option(ctx.INDEX)}, can.ui.content, function(sub) { if (msg.Option(ctx.INDEX)) {
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT)) if (msg.Option(nfs.LINE) == web.DREAM) {
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ui.content.offsetWidth)) if (msg._ui) {
can.onmotion.delay(can, function() { sub.Focus() }), can.base.isFunc(cb) && cb() can.page.Select(can, can._output, can.page.Keys("div.content", html.IFRAME), function(item) {
sub.onaction.close = function() { if (can.onmotion.toggle(can, item, item == msg._ui)) { can.ui.content = msg._ui }
can.onaction.back({}, can), msg._tab._close() })
return
}
can.ui.content = msg._ui = can.page.insertBefore(can, [{type: html.IFRAME, src: can.misc.MergeURL(can, {pod: msg.Option(nfs.FILE)}, true), width: can.ui.content.offsetWidth, height: can.ui.content.offsetHeight}], can.ui.content)
return can.onimport.layout(can)
} }
}) }
can.onmotion.toggle(can, can.ui.content = msg._ui = can.ui._content, true)
return can.onimport.plugin(can, {index: msg.Option(ctx.INDEX)}, can.ui.content, function(sub) {
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT))
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ui.content.offsetWidth))
can.onmotion.delay(can, function() { sub.Focus() }), can.base.isFunc(cb) && cb()
sub.onaction.close = function() { can.onaction.back({}, can), msg._tab._close() }
sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/")
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {
return can.onimport.tabview(can, can.Option(nfs.PATH), ls[1].split("/")[0], web.DREAM), sub.Update() // 显示空间
}
return can.user.open(_arg), sub.Update()
}
})
}
can.onmotion.toggle(can, can.ui.content = msg._ui = can.ui._content, true)
function init(p) { function init(p) {
can.max = 0, can.core.List(can.ls = msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) }) can.max = 0, can.core.List(can.ls = msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) })
@ -327,8 +374,7 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line
function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str } function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str }
var p = can.onsyntax[can.parse]; if (!p) { return line } p = can.onsyntax[p.link]||p, p.split = p.split||{} var p = can.onsyntax[can.parse]; if (!p) { return line } p = can.onsyntax[p.link]||p, p.split = p.split||{}
p.keyword && (line = can.core.List(can.core.Split(line, p.split.space||"\t ", p.split.operator||"{[(.,:;!|<>)]}", {detail: true}), function(item, index, array) { p.keyword && (line = can.core.List(can.core.Split(line, p.split.space||"\t ", p.split.operator||"{[(.,:;!|<>)]}", {detail: true}), function(item, index, array) {
item = can.base.isObject(item)? item: {text: item} item = can.base.isObject(item)? item: {text: item}; var text = item.text, type = item.keyword||p.keyword[text]
var text = item.text, type = item.keyword||p.keyword[text]
switch (item.type) { case html.SPACE: return text switch (item.type) { case html.SPACE: return text
case lang.STRING: return wrap(lang.STRING, item.left+text+item.right) case lang.STRING: return wrap(lang.STRING, item.left+text+item.right)
@ -336,12 +382,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line
} }
}).join("")) }).join(""))
p.prefix && can.core.Item(p.prefix, function(pre, type) { p.prefix && can.core.Item(p.prefix, function(pre, type) { if (can.base.beginWith(line, pre)) { line = wrap(type, line) } })
if (can.base.beginWith(line, pre)) { line = wrap(type, line) } p.suffix && can.core.Item(p.suffix, function(end, type) { if (can.base.endWith(line, end)) { line = wrap(type, line) } })
})
p.suffix && can.core.Item(p.suffix, function(end, type) {
if (can.base.endWith(line, end)) { line = wrap(type, line) }
})
return line return line
}, },
}) })
@ -372,22 +414,14 @@ Volcanos(chat.ONKEYMAP, {help: "导入数据",
}, _engine: {}, }, _engine: {},
}) })
Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添加", "插件", "扩展"], Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添加", "插件", "扩展"],
_trans: {width: "宽度", height: "高度", website: "网页"}, _trans: {load: "加载", link: "链接", width: "宽度", height: "高度", website: "网页"},
"搜索": function(event, can) { "搜索": function(event, can) {
can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(data) { can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(data) {
can.ui.search.Update({}, [ctx.ACTION, data.action, data.name]) can.ui.search.Update({}, [ctx.ACTION, data.action, data.name])
}) })
}, },
"打开": function(event, can) { "打开": function(event, can) { can.user.input(event, can, [nfs.FILE], function(list) { can.onimport.tabview(can, can.Option(nfs.PATH), list[0]) }) },
can.user.input(event, can, [nfs.FILE], function(list) { "添加": function(event, can) { can.user.input(event, can, [ctx.INDEX], function(list) { can.onimport.tabview(can, can.Option(nfs.PATH), list[0], ctx.INDEX) }) },
can.onimport.tabview(can, can.Option(nfs.PATH), list[0])
})
},
"添加": function(event, can) {
can.user.input(event, can, [ctx.INDEX], function(list) {
can.onimport.tabview(can, can.Option(nfs.PATH), list[0], ctx.INDEX)
})
},
"插件": function(event, can) { "插件": function(event, can) {
can.user.input(event, can, [ctx.INDEX], function(list) { can.user.input(event, can, [ctx.INDEX], function(list) {
var sub = can.toolkit[list[0]]; if (sub) { sub.select(); return } var sub = can.toolkit[list[0]]; if (sub) { sub.select(); return }
@ -400,9 +434,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
can.onimport.exts(can, list[0], function(sub) { can.extentions[list[0]] = sub.select() }) can.onimport.exts(can, list[0], function(sub) { can.extentions[list[0]] = sub.select() })
}) })
}, },
sess: function(event, can) { sess: function(event, can) { can.onexport.sess(can), can.user.toastSuccess(can) },
can.onexport.sess(can), can.user.toastSuccess(can)
},
load: function(event, can) { load: function(event, can) {
var file = can.base.Path("/require/", can.Option(nfs.PATH), can.Option(nfs.FILE)) var file = can.base.Path("/require/", can.Option(nfs.PATH), can.Option(nfs.FILE))
delete(Volcanos.meta.cache[file]), eval("\n_can_name = \""+file+"\"\n"+can.onexport.content(can)+"\n_can_name = \"\"\nconsole.log(\"once\")") delete(Volcanos.meta.cache[file]), eval("\n_can_name = \""+file+"\"\n"+can.onexport.content(can)+"\n_can_name = \"\"\nconsole.log(\"once\")")
@ -415,7 +447,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
can.onimport.profile(can, msg) can.onimport.profile(can, msg)
}) })
}, },
exec: function(event, can) { can.request(event, {_toast: "执行中..."}) exec: function(event, can) { can.request(event, {_toast: "执行中...", "some": "run"})
can.runAction(event, mdb.ENGINE, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.runAction(event, mdb.ENGINE, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
can.onimport.display(can, msg) can.onimport.display(can, msg)
}) })
@ -459,7 +491,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
} }
if (s.indexOf("kit.") == 0) { s = s.replace("kit.", "toolkits.") } if (s.indexOf("kit.") == 0) { s = s.replace("kit.", "toolkits.") }
if (s.indexOf(".") == 0) { s = s.slice(1) } if (s.indexOf(ice.PT) == 0) { s = s.slice(1) }
can.onaction.searchLine(event, can, s) can.onaction.searchLine(event, can, s)
}} }}
]}]); return ui.tr ]}]); return ui.tr
@ -503,7 +535,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
} }
var push = can.onimport.history(can, {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE), text: can.current.text()}) var push = can.onimport.history(can, {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE), text: can.current.text()})
if (can.isCmdMode()) { location.hash = push.file+","+(push.line||1) } if (can.isCmdMode()) { location.hash = push.file+ice.FS+(push.line||1) }
can.onaction._selectLine(event, can) can.onaction._selectLine(event, can)
}) })
}, },
@ -521,17 +553,11 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"], Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"],
sess: function(can) { sess: function(can) { can.user.localStorage(can, "web.code.inner.sess", {"plug": can.onexport.plug(can), "exts": can.onexport.exts(can), "tabs": can.onexport.tabs(can)}) },
can.user.localStorage(can, "web.code.inner.sess", {"plug": can.onexport.plug(can), "exts": can.onexport.exts(can), "tabs": can.onexport.tabs(can)}) keys: function(can, file, path) { return (path||can.Option(nfs.PATH))+ice.DF+(file||can.Option(nfs.FILE)) },
},
keys: function(can, file, path) { return (path||can.Option(nfs.PATH))+":"+(file||can.Option(nfs.FILE)) },
tabs: function(can) { return can.core.Item(can.tabview, function(key, msg) { return key+ice.DF+msg.Option(nfs.LINE) }) }, tabs: function(can) { return can.core.Item(can.tabview, function(key, msg) { return key+ice.DF+msg.Option(nfs.LINE) }) },
plug: function(can) { return can.core.Item(can.toolkit) }, plug: function(can) { return can.core.Item(can.toolkit) },
exts: function(can) { return can.core.Item(can.plugins) }, exts: function(can) { return can.core.Item(can.plugins) },
position: function(can, index, total) { total = total||can.max position: function(can, index, total) { total = total||can.max; return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" },
return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" content: function(can) { return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL) },
},
content: function(can) {
return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL)
},
}) })

View File

@ -1,6 +1,6 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { can.undo = [], can.redo = [] can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { can.undo = [], can.redo = []
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg) can.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg)
}, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init) }, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
if (name == chat.ONACTION) { can._trans = can.base.Copy(can._trans||{}, sub._trans) } if (name == chat.ONACTION) { can._trans = can.base.Copy(can._trans||{}, sub._trans) }
@ -55,7 +55,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
}, },
}, },
normal: { normal: {
escape: function(event, can) { can.onkeymap._plugin(event, can) }, Escape: function(event, can) { can.onkeymap._plugin(event, can) },
ArrowLeft: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) }, ArrowLeft: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) },
ArrowRight: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) }, ArrowRight: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) },
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) }, ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
@ -174,8 +174,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code.COMPILE, nfs.SCRIPT, chat.WEBSITE, web.DREAM, code.PUBLISH], Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code.COMPILE, nfs.SCRIPT, chat.WEBSITE, web.DREAM, code.PUBLISH],
_run: function(event, can, button, args, cb) { _run: function(event, can, button, args, cb) {
can.runAction(event, button, args, cb||function(msg) { can.runAction(event, button, args, cb||function(msg) {
can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(nfs.FILE)) can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh()
can.onimport.project(can, can.Option(nfs.PATH)), can.user.toastSuccess(can, button)
}) })
}, },
_runs: function(event, can, button) { var meta = can.Conf(); can.request(event, {action: button}) _runs: function(event, can, button) { var meta = can.Conf(); can.request(event, {action: button})
@ -184,25 +183,22 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, co
}) })
}, },
save: function(event, can, button) { can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)}) save: function(event, can, button) { can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)})
can.runAction(event, nfs.SAVE, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function() { can.onaction._run(event, can, button, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)])
can.user.toastSuccess(can, button)
})
}, },
autogen: function(event, can, button) { can.onaction._runs(event, can, button) }, autogen: function(event, can, button) { can.onaction._runs(event, can, button) },
compile: function(event, can, button) { var toast0 = can.user.toastProcess(can, "编译中...") compile: function(event, can, button) { var toast = can.user.toastProcess(can, "编译中...")
can.runAction(event, button, [], function(msg) { toast0.close() can.runAction(can.request(event), button, [], function(msg) { toast.close()
if (msg.Length() == 0) { var toast1 = can.user.toastProcess(can, "重启中...") if (msg.Length() == 0) { var toast1 = can.user.toastProcess(can, "重启中...")
can.core.Timer(3000, function() { toast1.close(), can.onaction["展示"]({}, can) }) can.onmotion.delay(can, function() { toast1.close(), can.onaction[cli.SHOW]({}, can) }, 3000)
} else { can.ui.search._show(msg) } } else { can.ui.search._show(msg) }
}) })
}, },
script: function(event, can, button) { script: function(event, can, button) {
can.request(event, {file: "hi/hi.js"}) can.onaction._runs(can.request(event, {file: "hi/hi.js"}), can, button)
can.onaction._runs(event, can, button)
}, },
website: function(event, can, button) { website: function(event, can, button) {
can.request(event, {file: "hi.zml"}) can.onaction._runs(can.request(event, {file: "hi.zml"}), can, button)
can.onaction._runs(event, can, button)
}, },
publish: function(event, can, button) { publish: function(event, can, button) {
can.runAction(event, button, [], function(msg) { can.user.toastConfirm(can, msg.Result(), button) }) can.runAction(event, button, [], function(msg) { can.user.toastConfirm(can, msg.Result(), button) })
@ -221,8 +217,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, co
}) })
}) })
}) })
can.request(event, {text: can.base.Format(list)}) can.runAction(can.request(event, {text: can.base.Format(list)}), button)
can.runAction(event, button)
}, },
_complete: function(event, can, target) { target = target||can.ui.complete _complete: function(event, can, target) { target = target||can.ui.complete
if (event == undefined) { return } if (event == undefined) { return }
@ -304,7 +299,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, co
can.current.line.appendChild(can.ui.current), can.page.style(can, can.ui.current, html.LEFT, td.offsetLeft-1, html.WIDTH, can.ui.content.style.width) can.current.line.appendChild(can.ui.current), can.page.style(can, can.ui.current, html.LEFT, td.offsetLeft-1, html.WIDTH, can.ui.content.style.width)
if (event) { if (event) {
if (event.type == "click" && can.mode != "insert") { can.onkeymap._insert(event, can) if (event.type == "click" && can.mode != "insert") { can.onkeymap._insert(event, can)
can.core.Timer(10, function() { can.onaction._complete(event, can) }) can.onmotion.delay(can, function() { can.onaction._complete(event, can) })
} }
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000 can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
can.onkeymap.cursorMove(can, can.ui.current, 0, (event.offsetX)/12-1) can.onkeymap.cursorMove(can, can.ui.current, 0, (event.offsetX)/12-1)
@ -316,15 +311,13 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, co
can.max++, can.page.Select(can, item, "td.line", function(item) { item.innerText = index+1 }) can.max++, can.page.Select(can, item, "td.line", function(item) { item.innerText = index+1 })
}) })
}, },
insertLine: function(can, value, before) { insertLine: function(can, value, before) { var line = can.onaction.appendLine(can, value)
var line = can.onaction.appendLine(can, value)
before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before)) before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before))
return can.onaction.rerankLine(can), can.onaction._getLineno(can, line) return can.onaction.rerankLine(can), can.onaction._getLineno(can, line)
}, },
deleteLine: function(can, line) { line = can.onaction._getLine(can, line) deleteLine: function(can, line) { line = can.onaction._getLine(can, line)
var next = line.nextSibling||line.previousSibling var next = line.nextSibling||line.previousSibling
can.page.Remove(can, line), can.onaction.rerankLine(can) return can.page.Remove(can, line), can.onaction.rerankLine(can), next
return next
}, },
modifyLine: function(can, line, value) { modifyLine: function(can, line, value) {
can.page.Select(can, can.ui.content, html.TR, function(item, index) { can.page.Select(can, can.ui.content, html.TR, function(item, index) {

View File

@ -86,7 +86,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}]) }), can.onimport._display(can, task) }]) }), can.onimport._display(can, task)
}, },
_display: function(can, task) { if (!task["extra.cmd"]) { return } _display: function(can, task) { if (!task["extra.cmd"]) { return }
can.onappend.plugin(can, {type: chat.STORY, ctx: task["extra.ctx"], cmd: task["extra.cmd"], arg: task["extra.arg"]}, function(sub, meta) { can.onappend.plugin(can, {type: "plug", ctx: task["extra.ctx"], cmd: task["extra.cmd"], arg: task["extra.arg"]}, function(sub, meta) {
sub.run = function(event, cmds, cb) { var msg = can.request(event, kit.Dict("task.pod", task["pod"], "task.zone", task.zone, "task.id", task.id)) sub.run = function(event, cmds, cb) { var msg = can.request(event, kit.Dict("task.pod", task["pod"], "task.zone", task.zone, "task.id", task.id))
can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb) can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb)
} }

View File

@ -1,7 +1,7 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, conf, cb, target) {}, Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, conf, cb, target) {},
_process: function(can, msg) { _process: function(can, msg) {
msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, can.base.Obj(msg.OptionStatus())) msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, can.base.Obj(msg.OptionStatus()))
return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, msg: msg}) return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, sub: can, msg: msg})
}, },
_location: function(can, msg, _arg) { can.user.jumps(_arg); return true }, _location: function(can, msg, _arg) { can.user.jumps(_arg); return true },
@ -111,7 +111,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)), mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)),
]) ])
}, },
"打开链接": function(event, can) { var meta = can.Conf(), args = can.Option() "打开链接": function(event, can) { var meta = can.Conf(), args = can.Option(); args.river = "", args.storm = ""
args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == "web.wiki.word" && (args.cmd = args.path) args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == "web.wiki.word" && (args.cmd = args.path)
can.user.isWeiXin? can.user.jumps(can.misc.MergeURL(can, args)): can.user.open(can.misc.MergeURL(can, args)) can.user.isWeiXin? can.user.jumps(can.misc.MergeURL(can, args)): can.user.open(can.misc.MergeURL(can, args))
}, },

View File

@ -1,7 +1,11 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action) can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action)
var cbs = can.onimport[can._args[ctx.STYLE]]; if (can.base.isFunc(cbs)) { var cbs = can.onimport[can.Conf(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
can.page.ClassList.add(can, target, can._args[ctx.STYLE]) can.page.ClassList.add(can, target, can._args[ctx.STYLE])
can.core.CallFunc(cbs, {
can: can, msg: msg, target: target,
list: msg.Table(),
})
return cbs(can, msg, target) return cbs(can, msg, target)
} }
@ -38,39 +42,44 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}]); return ui.first }]); return ui.first
}, },
zone: function(can, list, target) { var color = ["blue", "red", "cyan"] zone: function(can, list, target) { var color = ["blue", "red", "green"]
return can.page.Append(can, target, can.core.List(list, function(zone, index) { return {view: "zone", list: [ return can.page.Append(can, target, can.core.List(list, function(zone, index) { return {view: html.ZONE, list: [
{view: "name", inner: zone.name, style: {background: color[index%color.length]}, onclick: function() { {view: html.NAME, inner: zone.name, style: {background: color[index%color.length]}, onclick: function() {
can.onmotion.toggle(can, event.target.nextSibling.nextSibling) can.onmotion.toggle(can, zone._action), can.onmotion.toggle(can, zone._target)
can.onmotion.toggle(can, event.target.nextSibling)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
can.user.carteRight(event, can, { zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list, function(event, button, meta) {
meta[button](event, zone)
}): can.user.carteRight(event, can, {
"折叠": function() { "折叠": function() {
can.page.Select(can, event.target.nextSibling.nextSibling, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) })
}, },
"展开": function() { "展开": function() {
can.page.Select(can, event.target.nextSibling.nextSibling, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) })
}, },
}, ["折叠", "展开"]) "刷新": function() { can.onmotion.clear(can, zone._target), zone._init(zone._target) },
}, _init: function(item) { if (list.length > 1 && index > 0) { can.onmotion.delay(can, function() { item.click() }) } }}, }, ["折叠", "展开", "刷新"])
{view: "action", _init: function(item) { }},
can.onappend._action(can, [{input: "type", onkeyup: function(event) { {view: html.ACTION, _init: function(target) { zone._action = target
can.page.Select(can, item.nextSibling, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) can.onappend._action(can, [{input: html.TEXT, onkeyup: function(event) {
can.page.Select(can, item.nextSibling, html.DIV_ITEM, function(item) { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) })
can.page.Select(can, zone._target, html.DIV_ITEM, function(item) {
can.page.Select(can, item, "div.name", function(name) { can.page.Select(can, item, "div.name", function(name) {
can.onmotion.toggle(can, item, name.innerText.indexOf(event.target.value) > -1) can.onmotion.toggle(can, item, name.innerText.indexOf(event.target.value) > -1)
}) })
}) })
}, onclick: function(event) { }, onclick: function(event) {
can.onmotion.focus(can, event.target) can.onmotion.focus(can, event.target)
},_init: function(item) { }, _init: function(target) {
can.onmotion.delay(can, function() { can.onmotion.delay(can, function() {
can.page.styleWidth(can, item, item.parentNode.parentNode.parentNode.offsetWidth-32) can.page.styleWidth(can, target, target.parentNode.parentNode.parentNode.offsetWidth-32)
}) })
}}], item, {}) }}], target, {})
}}, }},
{view: "list", _init: function(item) { {view: html.ZONE, _init: function(target) { can.ui[zone.name] = zone
can.base.isFunc(zone._init) && zone._init(item) zone._target = target, zone.refresh = function() {
can.onmotion.clear(can, target), zone._init(target)
}
can.base.isFunc(zone._init) && zone._init(target)
}} }}
]} })) ]} }))
}, },

View File

@ -240,16 +240,20 @@ var html = {
TOGGLE: "toggle", TOGGLE: "toggle",
PAGE: "page", TABS: "tabs", PAGE: "page", TABS: "tabs",
LIST: "list", ITEM: "item",
MENU: "menu", NODE: "node", MENU: "menu", NODE: "node",
ZONE: "zone", NAME: "name",
LIST: "list", ITEM: "item",
HIDE: "hide", SHOW: "show", AUTO: "auto", HIDE: "hide", SHOW: "show", AUTO: "auto",
HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot",
PLUGIN: "plugin", LAYOUT: "layout", CONTENT: "content", PLUGIN: "plugin", LAYOUT: "layout", CONTENT: "content",
DIV_PAGE: "div.page", DIV_PAGE: "div.page",
DIV_TABS: "div.tabs", DIV_TABS: "div.tabs",
DIV_ZONE: "div.zone",
DIV_LIST: "div.list", DIV_LIST: "div.list",
DIV_ITEM: "div.item", DIV_ITEM: "div.item",
DIV_NAME: "div.name",
DIV_CODE: "div.code", DIV_CODE: "div.code",
DIV_LAYOUT_HEAD: "div.layout.head", DIV_LAYOUT_HEAD: "div.layout.head",
DIV_LAYOUT_LEFT: "div.layout.left", DIV_LAYOUT_LEFT: "div.layout.left",