diff --git a/frame.js b/frame.js index 6107eb94..2ae1e274 100644 --- a/frame.js +++ b/frame.js @@ -83,7 +83,7 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) }) Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { meta.name = (meta.name||"").split(ice.SP)[0].split(ice.PT).pop() - field = field||can.onappend.field(can, meta.type, meta, target).first + field = field||can.onappend.field(can, meta.type, meta, target)._target var legend = can.page.Select(can, field, html.LEGEND)[0] var option = can.page.Select(can, field, html.FORM_OPTION)[0] var action = can.page.Select(can, field, html.DIV_ACTION)[0] @@ -210,7 +210,6 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { ]}]) }, input: function(can, item, value, target, style) { - // switch (item.type) { case "": return can.page.Append(can, target, [item]) } if (item.type == html.SPACE) { return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}]) } var input = can.page.input(can, can.base.Copy({}, item), value) if (item.type == html.SELECT && item.value) { input._init = function(target) { target.value = item.value } } @@ -222,7 +221,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }) } } var br = input.type == html.TEXTAREA? [{type: html.BR, style: {clear: html.BOTH}}]: [] var title = can.Conf(can.core.Keys(ctx.FEATURE, chat.TITLE, item.name))||""; title && (input.title = title) - return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), list: [input]}]).concat(br))[item.name] + return can.page.Append(can, target, ([{view: can.base.join(style||[html.ITEM, item.type]), list: [input]}]).concat(br))[item.name] }, table: function(can, msg, cb, target, sort) { if (msg.Length() == 0) { return } var meta = can.base.Obj(msg.Option(mdb.META)) var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) { @@ -265,6 +264,13 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, _cb, target, field); return res } can.runAction(can.request({}, meta), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res }, + _float: function(can, index, args) { + can.onappend.plugin(can, {mode: chat.FLOAT, index: index, args: args}, function(sub) { + can.getActionSize(function(left, top, width, height) { sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width)) + can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4}) + }), sub.onaction.close = function() { can.page.Remove(can, sub._target) } + }, can._root._target) + }, figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || meta.type == html.BUTTON) { return } var input = meta.action||mdb.KEY, path = chat.PLUGIN_INPUT+input+nfs._JS; can.require([path], function(can) { function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value||"", can.onmotion.delay(can, function() { can.onmotion.focus(can, target) }) } @@ -402,7 +408,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { } }, _init: function(target) { item && can.onappend.figure(can, item, target), can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, tableFilter: function(can, target, value) { can.page.Select(can, target, html.TR, function(tr, index) { - index == 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0) + index > 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0) }) }, delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) }, diff --git a/lib/base.js b/lib/base.js index c05db58c..a526593c 100644 --- a/lib/base.js +++ b/lib/base.js @@ -141,7 +141,7 @@ Volcanos("base", { if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length) }, trimSuffix: function(str, end) { var index = str.lastIndexOf(end); if (index == -1 || index+end.length != str.length) { return str } return str.slice(0, index) }, - join: function(list, sp) { return (list||[]).join(sp||ice.SP) }, + join: function(list, sp) { return typeof list == lang.STRING? list: (list||[]).join(sp||ice.SP) }, joins: function(list, inner, outer) { for (var i = 0; i < list.length; i++) { list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) } return list.join(outer||ice.SP) }, joinKV: function(list, inner, outer) { var res = []; for (var i = 0; i < list.length-1; i += 2) { res.push(list[i]+(inner||": ")+list[i+1]) } return res.join(outer||ice.SP) }, count: function(str, s) { var n = 0; for (var i = 0; i < str.length; i++) { if (str[i] == s) { n++ } } return n }, diff --git a/lib/page.js b/lib/page.js index 1f3d3ad2..a0039a6f 100644 --- a/lib/page.js +++ b/lib/page.js @@ -92,7 +92,7 @@ Volcanos("page", {ClassList: { } else if (type == html.TEXTAREA) { data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(ice.PT).pop()) } !data.name && item.name && (data.name = item.name); var node = can.page.Create(can, type, data) - value[name||""] = value[data.className||""] = value[type] = node, value._target = value._target||node, value.first = value.first||node, value.last = node + value[name||""] = value[can.core.Split(data.className)[0]||""] = value[type] = node, value._target = value._target||node, value.first = value.first||node, value.last = node item.list && can.page.Append(can, node, item.list, value), target && target.appendChild && target.appendChild(node), can.base.isFunc(item._init) && item._init(node, value) }); return value }, @@ -142,6 +142,9 @@ Volcanos("page", {ClassList: { inputs: function(can, list) { var _list = []; for (var i = 0; i < list.length; i++) { switch (list[i]) { case "": _list.push(""); break + case ice.RUN: + _list.push({type: html.BUTTON, name: ice.RUN}) + break case ice.AUTO: _list.push({type: html.BUTTON, name: ice.LIST}) _list.push({type: html.BUTTON, name: ice.BACK}) @@ -188,7 +191,7 @@ Volcanos("page", {ClassList: { } return input }, - replace: function(can, text, key, value) { return can.base.replaceAll(text, "<", "<", ">", ">", key, value) }, + replace: function(can, text, key, value) { return can.base.replaceAll(text, "<", "<", ">", ">", key, value) }, Format: function(type) { var args = arguments; switch (type) { case html.A: return ""+(args[2]||args[1])+"" case html.IMG: return args[2]? "": "" @@ -232,7 +235,7 @@ Volcanos("page", {ClassList: { }, insertBefore: function(can, list, before, parent) { parent = parent||before.parentNode - var item = can.base.isArray(list)? can.page.Append(can, parent, list).first: list + var item = can.base.isArray(list)? can.page.Append(can, parent, list)._target: list return before && parent.insertBefore(item, before), item }, styleDisplay: function(can, target, value) { return can.page.style(can, target, html.DISPLAY, value), target.style.display }, diff --git a/lib/user.js b/lib/user.js index d347b953..3c52a1e3 100644 --- a/lib/user.js +++ b/lib/user.js @@ -51,7 +51,7 @@ Volcanos("user", {info: {}, agent: { if (can.user.language(can) == "en") { return text } if (can.base.isString(list)) { return list } return list&&list[text] || can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || { "plugin": "插件", "label": "标签", "height": "高度", "width": "宽度", "show": "显示", "hide": "隐藏", "project": "项目", "profile": "详情", "actions": "参数", - "create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "修改", "prunes": "清理", "export": "导出", "import": "导入", + "create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "修改", "prunes": "清理", "export": "导出", "import": "导入", "search": "搜索", "link": "链接", "copy": "复制", "edit": "编辑", "save": "保存", "trash": "删除", "share": "共享", "toimage": "截图", "download": "下载", "upload": "上传", "run": "执行", "list": "查看", "back": "返回", "prev": "上一页", "next": "下一页", "source": "源码", "module": "模块", "action": "操作", "recent": "最近", @@ -102,7 +102,7 @@ Volcanos("user", {info: {}, agent: { if (navigator.clipboard) { var ok = false; navigator.clipboard.writeText(text).then(function() { ok = true }) if (ok) { return can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text), text } } - var input = can.page.Append(can, event.target.parentNode, [{type: html.TEXTAREA, value: text}]).first + var input = can.page.Append(can, event.target.parentNode, [{type: html.TEXTAREA, value: text}])._target can.onmotion.focus(can, input), document.execCommand("Copy"), can.page.Remove(can, input) return can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text), text }, @@ -146,7 +146,7 @@ Volcanos("user", {info: {}, agent: { })}]}, html.ACTION, ]}]) var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, { - focus: function() { can.onmotion.focus(can, can.page.Select(can, ui.first, html.INPUT_ARGS)[0]) }, + focus: function() { can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0]) }, cancel: function() { can.page.Remove(can, ui._target) }, submit: function(event, can, button) { var args = [], data = {}, err = false var list = can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) { @@ -186,7 +186,7 @@ Volcanos("user", {info: {}, agent: { }); can.page.Select(can, ui.action, html.INPUT_FILE)[0].click(), silent && can.onmotion.hidden(can, ui._target); return action }, download: function(can, path, name, ext) { - var a = can.page.Append(can, can._root._target, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}]).first + var a = can.page.Append(can, can._root._target, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}])._target return a.click(), can.page.Remove(can, a), path }, downloads: function(can, text, name, ext) { if (!text) { return } diff --git a/panel/action.js b/panel/action.js index 12fcd406..0270d6bf 100644 --- a/panel/action.js +++ b/panel/action.js @@ -1,47 +1,37 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can) var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM); can.core.Next(msg.Table(), function(item, next) { item.type = chat.PLUGIN, item.inputs = can.base.Obj(item.inputs||item.list), item.feature = can.base.Obj(item.feature||item.meta) - if (can.misc.Debug(can, chat.PLUGIN, item.index, item.args, item)) { debugger } can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._run(can, sub, function(event, cmds, cb) { return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb) }), can.onimport._tabs(can, sub, meta), skip || next() }) }) }, _share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) { + can.user.mod.isCmd = true, msg.Length() > 1? can.onlayout._init(can): can.onengine.signal(can, chat.ONACTION_CMD) can.user.title(msg.SearchOrOption(chat.TITLE)), can.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC)) - msg.Length() > 1? can.onlayout._init(can): can.onengine.signal(can, chat.ONACTION_CMD) can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg) - can.user.mod.isCmd = true }) }, _cmd: function(can, item, next) { can.base.Copy(item, {type: chat.PLUGIN, mode: chat.CMD, opts: can.misc.Search(can)}), can.onengine.signal(can, chat.ONACTION_CMD) - if (can.misc.Debug(can, chat.PLUGIN, item.index, item.args, item)) { debugger } can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._run(can, sub, function(event, cmds, cb) { return can.runActionCommand(event, sub._index, cmds, cb) - }), can.user.title(meta.name), skip || next() }) - can.onlayout._init(can) + }), can.user.title(meta.name), skip || next() }), can.onlayout._init(can) }, _run: function(can, sub, cbs) { sub.run = function(event, cmds, cb) { (!cmds || cmds[0] != ctx.ACTION) && sub.request(event, {height: sub.ConfHeight(), width: sub.ConfWidth()}) return cbs(event, cmds, cb) }, can._plugins = can.misc.concat(can, can._plugins, [sub]) - sub.Mode(can.Mode()), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()) - can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth()) + sub.Mode(can.Mode()), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth()) }, _tabs: function(can, sub, meta) { - var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { - can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs) + var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs) can.onmotion.select(can, can._action, html.DIV_TABS, sub._tabs), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target) if (sub._delay_refresh) { sub._delay_refresh = false, sub.onaction._resize(sub, can.Conf(chat.LAYOUT) == "", can.ConfHeight(), can.ConfWidth()) } }, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}] - sub._header_tabs = can.page.Append(can, can._header_tabs, tabs).first, sub._tabs = can.page.Append(can, can._action, tabs).first + sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target }, _menu: function(can, msg) { if (can.user.isMobile || can.user.mod.isPod) { return } - can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { - can.core.CallFunc([can.onaction, list[0]], [can, button]) - }) - can.page.Select(can, can._root.Header._output, html.ACTION, function(target) { - can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS]).first) - }) + can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) }) + can.page.Select(can, can._root.Header._output, html.ACTION, function(target) { can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target) }) }, }) Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can) @@ -64,11 +54,8 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can) }, _engine: {}, }) Volcanos(chat.ONACTION, {_init: function(can, target) { - can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_MARGIN) - can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) - - if (can.user.isMobile || can.user.mod.isPod) { var gt = "❯", lt = "❮" - function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) } + can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_MARGIN), can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) + if (can.user.isMobile || can.user.mod.isPod) { var gt = "❯", lt = "❮"; function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) } can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) { event.target.innerHTML = toggle()? gt: lt, can.onaction.layout(can, can.Conf(chat.LAYOUT)) }}]) @@ -125,28 +112,21 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.page.style(can, can._target, html.HEIGHT, can.page.height(), html.WIDTH, can.page.width()) can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.page.ClassList.add(can, can._root._target, chat.SIMPLE) }, - onkeydown: function(can, msg) { var event = msg._event - if (event.ctrlKey && event.key >= "1" && event.key <= "9") { - can.onmotion.select(can, can._action, html.DIV_TABS, parseInt(event.key)-1) - can.onmotion.select(can, can._header_tabs, html.DIV_TABS, parseInt(event.key)-1) - can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1) - } - }, - onresize: function(can, height, width) { - can.onlayout._init(can), can.onaction.layout(can, can.Conf(chat.LAYOUT)) - window.setsize && window.setsize(can.page.width(), can.page.height()) - }, + onkeydown: function(can, msg) { var event = msg._event; if (event.ctrlKey && event.key >= "1" && event.key <= "9") { var index = parseInt(event.key)-1 + can.onmotion.select(can, can._header_tabs, html.DIV_TABS, index), can.onmotion.select(can, can._action, html.DIV_TABS, index) + can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, index) + } }, + onresize: function(can, height, width) { can.onlayout._init(can), can.onaction.layout(can, can.Conf(chat.LAYOUT)), window.setsize && window.setsize(can.page.width(), can.page.height()) }, onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) }, onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } }, onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") }, - layout: function(can, button, silent) { button = button||ice.AUTO - can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)); if (button == ice.AUTO) { button = "" } - can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button)) - can._header_tabs && can.onmotion.hidden(can, can._header_tabs) + layout: function(can, button, silent) { button = button||ice.AUTO; can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)) + if (button == ice.AUTO) { button = "" } else { can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button)) } can.user.isMobile || can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true)) can.user.isMobile && can.isCmdMode() && can.page.style(can, can._target, html.WIDTH, "", html.HEIGHT, "") - can.onlayout._init(can); var cb = can.onlayout[button]; if (can.base.isFunc(cb) && cb(can, silent)) { return } can.onlayout._plugin(can, button) + can.onlayout._init(can), can._header_tabs && can.onmotion.hidden(can, can._header_tabs) + var cb = can.onlayout[button]; can.base.isFunc(cb) && cb(can, silent) || can.onlayout._plugin(can, button) }, help: function(can, button) { can.user.open("/help/"+button+".shy") }, }) @@ -162,12 +142,10 @@ Volcanos(chat.ONLAYOUT, { can.onmotion.select(can, can._action, html.DIV_TABS) || can.onmotion.select(can, can._action, html.DIV_TABS, 0, function(target) { target.click() }) return true }, - horizon: function(can) { - can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) + horizon: function(can) { can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) can.getActionSize(function(height, width) { can.ConfHeight(height), can.ConfWidth(width/2) }) }, - vertical: function(can) { - can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) + vertical: function(can) { can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) can.getActionSize(function(height, width) { can.ConfHeight(height/2), can.ConfWidth(width) }) }, free: function(can) { @@ -177,19 +155,12 @@ Volcanos(chat.ONLAYOUT, { grid: function(can, silent) { return can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(data) { can.onlayout._grid(can, parseInt(data.m), parseInt(data.n)) }, silent), true }, - _grid: function(can, m, n) { - can.getActionSize(function(height, width) { - var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m - can.ConfHeight(h-2*html.ACTION_HEIGHT-3*html.PLUGIN_MARGIN), can.ConfWidth(w) - can.onlayout._plugin(can, "grid") - }) - }, - _plugin: function(can, button) { - can.core.List(can._plugins, function(sub) { - sub.onaction._resize(sub, button == "" || button == "free" || button == "flow", can.ConfHeight(), can.ConfWidth()) - button == "" && can.page.style(can, sub._output, html.MAX_HEIGHT, "") - }) - }, + _grid: function(can, m, n) { can.getActionSize(function(height, width) { var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m + can.ConfHeight(h-2*html.ACTION_HEIGHT-3*html.PLUGIN_MARGIN), can.ConfWidth(w), can.onlayout._plugin(can, "grid") + }) }, + _plugin: function(can, button) { can.core.List(can._plugins, function(sub) { + sub.onaction._resize(sub, button == "" || button == "free" || button == "flow", can.ConfHeight(), can.ConfWidth()), button == "" && can.page.style(can, sub._output, html.MAX_HEIGHT, "") + }) }, }) Volcanos(chat.ONEXPORT, { size: function(can, msg) { @@ -202,24 +173,15 @@ Volcanos(chat.ONEXPORT, { msg.Option(html.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop) }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) }, - args: function(can, msg, cb, target) { - can.core.Next(can._plugins, function(sub, next, index, array) { - cb(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value }), sub, next, index, array) - }) - }, + args: function(can, msg, cb, target) { can.core.Next(can._plugins, function(sub, next, index, array) { + cb(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value }), sub, next, index, array) + }) }, plugin: function(can, msg, word) { var fields = can.core.Split(msg.Option(ice.MSG_FIELDS)) can.core.List(can._plugins, function(sub) { var meta = sub.Conf(); if (meta.index.indexOf(word[1]) == -1) { return } - var data = {ctx: "can", cmd: "Action", - type: mdb.PLUGIN, name: sub._legend.innerHTML, text: shy("跳转", function(event) { sub.Focus() }), + var data = {ctx: ice.CAN, cmd: "Action", type: mdb.PLUGIN, name: sub._legend.innerHTML, text: shy("跳转", function(event) { sub.Focus() }), argument: JSON.stringify(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value })), - } - if (meta.index) { - data.context = "", data.command = meta.index - } else if (meta.cmd) { - data.context = meta.ctx, data.command = meta.cmd - } else { - return - } msg.Push(data, fields) + }; if (meta.index) { data.context = "", data.command = meta.index } else if (meta.cmd) { data.context = meta.ctx, data.command = meta.cmd } else { return } + msg.Push(data, fields) }) }, }) @@ -238,28 +200,25 @@ Volcanos(chat.ONENGINE, {_engine: function(event, sup, msg, can, cmds, cb) { }), can.base.isFunc(cb) && cb(msg) } return true }}) Volcanos(chat.ONPLUGIN, { - "command": shy("插件列表", {}, [], function(can, msg, arg) { - var meta = can.onengine.plugin.meta - can.core.Item(word[1] == ""? meta: meta[word[1]]? kit.Dict(word[1], meta[word[1]]): {}, function(name, command) { - msg.Push(kit.Dict(ice.CTX, ice.CAN, ice.CMD, ctx.COMMAND, - mdb.TYPE, ice.CAN, mdb.NAME, name, mdb.TEXT, command.help, - ctx.CONTEXT, ice.CAN, ctx.COMMAND, name, ctx.INDEX, can.core.Keys(ice.CAN, name), - ), msg.Option(ice.MSG_FIELDS).split(ice.FS)) - }) - }), - "plugin": shy("默认插件", {}, ["name", "list", "back"], function(can, msg, arg) { - can.misc.Log("what", msg, arg) + "command": shy("插件列表", {}, [], function(can, msg, arg) { var meta = can.onengine.plugin.meta + can.core.Item(arg[0] == ""? meta: meta[arg[0]]? kit.Dict(arg[0], meta[arg[0]]): {}, function(name, command) { + msg.Push(kit.Dict(ice.CTX, ice.CAN, ice.CMD, ctx.COMMAND, + mdb.TYPE, ice.CAN, mdb.NAME, name, mdb.TEXT, command.help, + ctx.CONTEXT, ice.CAN, ctx.COMMAND, name, ctx.INDEX, can.core.Keys(ice.CAN, name), + ), msg.Option(ice.MSG_FIELDS).split(ice.FS)) + }) }), + "plugin": shy("默认插件", {}, [mdb.NAME, ice.LIST, ice.BACK]), "parse": shy("生成网页", { - "show": function(can, msg, cmds) { var name = cmds[1]||"can"; can.isCmdMode() && can.user.title(name) - cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) { + "show": function(can, msg, cmds) { var name = cmds[1]||ice.CAN; can.isCmdMode() && can.user.title(name) + cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, [chat.PLUGIN_STORY+"parse.js"], function(sub) { sub.run = can.run, sub.Option = function() {} can.isCmdMode() && sub.ConfHeight(can.page.height()) can.onengine.listen(can, "menu", function(msg) { console.log(msg) }) sub.onappend.parse(sub, sub.onappend._parse(sub, cmds[0], name, sub.ConfHeight()), can._output) }) }, - }, ["text", "name", "show:button@auto", "clear:button"]), + }, [mdb.TEXT, mdb.NAME, "show:button@auto", "clear:button"]), "nfs.save": shy("保存文件", { "save": function(can, msg, cmds) { can.user.downloads(can, cmds[1], cmds[0]) } }, ["file=hi.txt", "text:textarea='hello world'", "save:button"]), diff --git a/panel/footer.js b/panel/footer.js index 8af8c675..fabca8bb 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -1,15 +1,10 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) { - can.onmotion.clear(can) +Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onimport._title(can, msg, target) can.onimport._state(can, msg, target) can.onimport._toast(can, msg, target) can.onimport._command(can, msg, target) }, - _title: function(can, msg, target) { if (can.user.isMobile) { return } - can.core.List(msg.result, function(item) { - can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) - }) - }, + _title: function(can, msg, target) { can.user.isMobile || can.core.List(msg.result, function(item) { can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) }) }, _state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), ["ncmd", "ntip"]), function(item) { can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [ @@ -17,98 +12,48 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) ], onclick: function(event) { can.onexport[item](can) }}]) }) }, - _toast: function(can, msg, target) { - can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}]).first - }, - _command: function(can, msg, target) { - can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) { - can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return } - switch (event.target.value) { - case cli.CLOSE: can.cli && can.cli.close(); break - case cli.CLEAR: can.cli && can.cli.close(); break - default: - can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.cli && can.cli.close() - var ui = can.onexport.float(can, msg, "cli"); can.getActionSize(function(left, top, height, width) { - can.page.style(can, ui.first, html.LEFT, left, html.RIGHT, "", html.BOTTOM, can.onexport.height(can)) - }) - }) - } - }}, "", target, "title cmd") - }, - - toast: function(can, msg, title, content, fileline, time) { can._tips = can._tips||can.request() - can._tips.Push({time: time, fileline: fileline, title: title, content: content}) - can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) - can.onimport.count(can, "ntip") - }, - count: function(can, name) { - can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { - item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" - }) - }, - ncmd: function(can, msg, _follow, _cmds) { can._cmds = can._cmds||can.request() - can._cmds.Push({time: can.base.Time(), follow: _follow, cmds: _cmds}) - can.onimport.count(can, "ncmd") - }, + _toast: function(can, msg, target) { can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}])._target }, + _command: function(can, msg, target) { can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) { can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return } switch (event.target.value) { + case cli.CLOSE: can.cli && can.cli.close(); break + case cli.CLEAR: can.cli && can.cli.close(); break + default: + can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.cli && can.cli.close(); var ui = can.onexport.float(can, msg, "cli") + can.getActionSize(function(left, top, height, width) { can.page.style(can, ui._target, html.LEFT, left, html.RIGHT, "", html.BOTTOM, can.onexport.height(can)) }) + }) + } }}, "", target, [chat.TITLE, ice.CMD]) }, + count: function(can, name) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" }) }, + toast: function(can, msg, title, content, fileline, time) { can._tips = can._tips||can.request(), can._tips.Push({time: time, fileline: fileline, title: title, content: content}), can.onimport.count(can, "ntip"), can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) }, + ncmd: function(can, msg, _follow, _cmds) { can._cmds = can._cmds||can.request(), can._cmds.Push({time: can.base.Time(), follow: _follow, cmds: _cmds}), can.onimport.count(can, "ncmd") }, }) -Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb) { - if (can.user.mod.isPod || can.user.isExtension) { can.onmotion.hidden(can) } - can.base.isFunc(cb) && cb() - }, - onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, can._output) }) }, +Volcanos(chat.ONACTION, {_init: function(can) { if (can.user.isExtension || can.user.mod.isPod) { can.onmotion.hidden(can) } }, + onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onmotion.clear(can), can.onimport._init(can, msg, can._output) }) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) }, onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) }, onaction_cmd: function(can, msg) { can.onmotion.hidden(can) }, - oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", "input"], function(target) { can.onmotion.focus(can, target) }) }, + oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", html.INPUT], function(target) { can.onmotion.focus(can, target) }) }, }) -Volcanos(chat.ONEXPORT, {help: "导出数据", - height: function(can) { return can._target.offsetHeight }, - float: function(can, msg, name, cb) { if (can[name]) { return can[name].close() } - var ui = can.onappend.field(can, "story toast float", {}, can._root._target); can[name] = ui - ui.close = function() { can.page.Remove(can, ui.first), delete(can[name]) } - ui.refresh = function() { ui.close(), can.toast.click() } - - can.getActionSize(function(left, top, height, width) { - can.page.style(can, ui.first, html.RIGHT, 0, html.BOTTOM, can.onexport.height(can)) +Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight }, + float: function(can, msg, name, cb) { if (can[name]) { return can[name].close() } var ui = can.onappend.field(can, "story toast float", {}, can._root._target); can[name] = ui + ui.close = function() { can.page.Remove(can, ui._target), delete(can[name]) }, ui.refresh = function() { ui.close(), can.toast.click() } + can.getActionSize(function(left, top, height, width) { can.page.style(can, ui._target, html.RIGHT, 0, html.BOTTOM, can.onexport.height(can)) can.page.style(can, ui.output, html.MAX_HEIGHT, height-html.ACTION_HEIGHT, html.MAX_WIDTH, width) }) - - can.onappend._action(can, [cli.CLOSE, web.REFRESH, {input: html.TEXT, placeholder: "filter", onkeydown: function(event) { - can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return } - can.onmotion.tableFilter(can, ui.output, event.target.value) - can.onmotion.focus(can, event.target) + can.onappend._action(can, [cli.CLOSE, web.REFRESH, {input: html.TEXT, placeholder: "filter", onkeydown: function(event) { can.onkeymap.input(event, can) + event.key == lang.ENTER && (can.onmotion.tableFilter(can, ui.output, event.target.value), can.onmotion.focus(can, event.target)) }}], ui.action, ui) - can.onappend.table(can, msg, function(value, key, index, line, list) { return {text: [value, html.TD], onclick: function(event) { can.base.isFunc(cb) && cb(value, key, index, line, list) }} - }, ui.output), can.onappend.board(can, msg.Result(), ui.output) - return ui + }, ui.output), can.onappend.board(can, msg.Result(), ui.output); return ui }, - ntip: function(can) { can.onexport.float(can, can._tips, "ntip", function(value, key, index, line) { - can.onappend.plugin(can, {type: chat.SRORY, mode: chat.FLOAT, index: "web.code.inner", args: ["usr/volcanos/"].concat(line.fileline.split(ice.DF))}, function(sub) { - can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0 - sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width)) - can.onmotion.move(can, sub._target, {left: left, top: top+height/4}) - }), sub.onaction.close = function() { can.page.Remove(can, sub._target) } - }, can._root._target) + ntip: function(can) { can.onexport.float(can, can._tips, "ntip", function(value, key, index, line) { can.onappend._float(can, "web.code.inner", ["usr/volcanos/"].concat(line.fileline.split(ice.DF))) }) }, + ncmd: function(can) { can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) { + var cmds = can.base.Obj(line.cmds); switch (line.follow) { + case "can.Action": cmds = cmds.slice(2); break + case "can.Footer": cmds = cmds.slice(2); break + } + switch (cmds[0]) { + case "web.wiki.word": cmds = cmds.slice(5); break + } + can.onappend._float(can, cmds[0], cmds.slice(1)) }) }, - ncmd: function(can) { - can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) { - var cmds = can.base.Obj(line.cmds); switch (line.follow) { - case "can.Action": cmds = cmds.slice(2); break - case "can.Footer": cmds = cmds.slice(2); break - } - switch (cmds[0]) { - case "web.wiki.word": cmds = cmds.slice(5); break - } - - can.getActionSize(function(msg, left, top, width, height) { - can.onappend.plugin(can, {type: "story", mode: chat.FLOAT, index: cmds[0], args: cmds.slice(1)}, function(sub) { - sub.run = function(event, cmd, cb) { can.runActionCommand(event, cmds[0], cmd, cb) } - sub.onimport.size(sub, height-120-2*html.ACTION_HEIGHT-can.onexport.height(can), width, true) - sub.onmotion.move(sub, sub._target, {left: left, top: top+120}) - }, can._root._target) - }) - }) - }, }) diff --git a/panel/header.js b/panel/header.js index bc3925ec..e5d5cfaa 100644 --- a/panel/header.js +++ b/panel/header.js @@ -1,23 +1,18 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { - can.onmotion.clear(can) +Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) { can.onimport._title(can, msg, target) can.onimport._state(can, msg, target) can.onimport._avatar(can, msg, target) can.onimport._background(can, msg, target) can.onimport._search(can, msg, target) can.onimport._menus(can, msg, target) - can.ondaemon._init(can) - can.base.isFunc(cb) && cb(msg) }, _title: function(can, msg, target) { if (can.user.isMobile) { return } can.core.List(can.base.getValid(can.Conf(chat.TITLE)||msg.result, ["shylinux.com/x/contexts"]), function(item) { - can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { - can.onaction.title(event, can) - }}]) + can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) }) }, _state: function(can, msg, target) { if (can.user.isMobile) { return } - can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [mdb.TIME, aaa.USERNICK]), function(item) { + can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [aaa.USERNICK, mdb.TIME]).reverse(), function(item) { if (item == aaa.AVATAR ) { if (can.user.isLocalFile) { return } can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: ice.SP}], onmouseenter: function(event) { can.onaction.carte(event, can, [can.page.Format(html.IMG, can.onexport.avatar(can), 160)]) @@ -28,168 +23,71 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar }, _init: function(target) { item == mdb.TIME && can.onimport._time(can, target) }}]) }) }, - _avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } - can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) - }, - _background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } - can.onlayout.background(can, can.onexport.background(can)) - }, + _avatar: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) }, + _background: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.onlayout.background(can, can.onexport.background(can)) }, _search: function(can, msg, target) { - var ui = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) { - can.onkeymap.input(event, can); switch (event.key) { - case lang.ENTER: can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""})) - } - }}, "", target, "title search"); can._search = ui, can.user.isMobile || can.onimport.menu(can, mdb.SEARCH, function() { - can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ui.value||""})) - }) + can._search = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) { can.onkeymap.input(event, can) + event.key == lang.ENTER && can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""})) + }}, "", target, [chat.TITLE, mdb.SEARCH]) + can.user.isMobile || can.onimport.menu(can, mdb.SEARCH, function() { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: can._search.value||""})) }) }, _menus: function(can, msg, target) { if (can.user.mod.isPod || can.user.isMobile) { return } can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button) { - can.core.CallFunc(can.onaction[button]||function(event, can) { - can.run(event, [button], function(msg) { can.user.toastSuccess(can, button) }) - }, {event: event, can: can, button: button}) - }) + can.core.CallFunc(can.onaction[button]||function(event, can) { can.runAction(event, button, [], function(msg) { can.user.toastSuccess(can, button) }) }, {event: event, can: can, button: button}) + }) }, - - _time: function(can, target) { - can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) + _time: function(can, target) { can.core.Timer({interval: 100}, function() { can.onimport.time(can, target) }) can.onappend.figure(can, {action: "date"}, target), target.onmouseenter = target.click }, - time: function(can, target) { - can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") - }, + time: function(can, target) { can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") }, avatar: function(event, can, avatar) { if (can.user.isExtension || can.user.isLocalFile) { return } - can.runAction(event, aaa.AVATAR, [avatar], function(msg) { - can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can) - }) + can.runAction(event, aaa.AVATAR, [avatar], function(msg) { can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can) }) }, background: function(event, can, background) { if (can.user.isExtension || can.user.isLocalFile) { return } - can.runAction(event, aaa.BACKGROUND, [background], function(msg) { - can.user.info.background = background, can.onimport._background(can, msg), can.user.toastSuccess(can) - }) + can.runAction(event, aaa.BACKGROUND, [background], function(msg) { can.user.info.background = background, can.onimport._background(can, msg), can.user.toastSuccess(can) }) }, topic: function(can, topic) { topic && (can._topic = topic), can.user.topic(can, can.onexport.topic(can)) }, menu: function(can, cmds, cb, trans) { can.base.isString(cmds) && (cmds = [cmds]) return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(can.base.getValid(cmds.slice(1), [cmds[0]]), function(item) { - if (can.base.isString(item)) { - return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) { - can.base.isFunc(cb) && cb(event, item, [item]) - }} - - } else if (can.base.isArray(item)) { - var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) }) + if (can.base.isString(item)) { return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) { can.base.isFunc(cb) && cb(event, item, [item]) }} } + if (can.base.isArray(item)) { var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) }) return {view: [html.MENU, html.DIV, can.user.trans(can, list[0], trans)], onmouseenter: function(event) { - can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) { - can.base.isFunc(cb) && cb(event, item[index+1], item) - }, trans) + can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) { can.base.isFunc(cb) && cb(event, item[index+1], item) }, trans) }} - - } else if (can.base.isObject(item)) { - return item - } - }) }]).first + } if (can.base.isObject(item)) { return item } + }) }])._target }, }) -Volcanos(chat.ONPLUGIN, {help: "注册插件", - "title": shy("标题", {}, ["title", "run:button"], function(can, msg, cmds) { - can.user.title(cmds[0]) - }), - "topic": shy("主题", {}, ["topic:select=white,black", "run:button"], function(can, msg, cmds) { - can.onimport.topic(can, cmds[0]) - }), - "cookie": shy("参数", {}, ["name", "value", "list", "back"], function(can, msg, cmds) { - can.core.Item(can.misc.Cookie(can), function(key, value) { - if (cmds[0] && key != cmds[0]) { return } - msg.Push(mdb.NAME, key), msg.Push(mdb.VALUE, value) - }) - }), - "alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) { - cmds && cmds[0] && can.user.alert(cmds[0]) - }), - "log": shy("日志", {}, ["text", "list", "back"], function(can, msg, cmds) { - console.log(cmds[0]) - }), - "location": shy("地址", { - copy: function(can, msg, cmds) { - can.user.copy(msg._event, can, location.href) - }, - }, ["link", "list", "back", "copy"], function(can, msg, cmds, cb) { - var _msg = can.request({}, mdb.LINK, location.href) - can.run(_msg._event, [web.SHARE], function(res) { - msg.Echo(res.Append(mdb.TEXT)) - msg.Echo("\n") - msg.Echo(can.page.Format(html.A, res.Append(mdb.NAME))) - can.base.isFunc(cb) && cb(msg) - }) - }), -}) -Volcanos(chat.ONACTION, {help: "交互数据", +Volcanos(chat.ONACTION, { _menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage"]], _trans: { - "search": "搜索", - - "setting": "设置", - "black": "黑色主题", - "white": "白色主题", - "print": "打印主题", - "webpack": "打包页面", - "toimage": "生成图片", - - "shareuser": "共享用户", - "setnick": "设置昵称", - "password": "修改密码", - "language": "语言地区", "chinese": "中文", - "clear": "清除背景", - "logout": "退出登录", + "setting": "设置", "black": "黑色主题", "white": "白色主题", "print": "打印主题", "webpack": "打包页面", "toimage": "生成图片", + "shareuser": "共享用户", "setnick": "设置昵称", "password": "修改密码", "language": "语言地区", "chinese": "中文", "clear": "清除背景", "logout": "退出登录", }, - onsize: function(can, msg) { - can.onimport.topic(can) - }, - onmain: function(can, msg) { - can.setHeader(chat.TOPIC) - can.run({}, [], function(msg) { - if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) { - msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { - can.onengine.signal(can, chat.ONMAIN, msg) - }, msg.Option(aaa.LOGIN), msg.Option("login.dev")) - return // 登录认证 - } - can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE) - can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) + onmain: function(can, msg) { can.onimport.topic(can) + can.run({}, [], function(msg) { if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) { + return msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { can.onengine.signal(can, chat.ONMAIN, msg) }, msg.Option(aaa.LOGIN), msg.Option("login.dev")) + } can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE) + can.user.info.background = msg.Option(aaa.BACKGROUND), can.user.info.avatar = msg.Option(aaa.AVATAR) msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) - can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output) + can.onmotion.clear(can), can.onimport._init(can, msg, can._output), can.ondaemon._init(can), can.onengine.signal(can, chat.ONLOGIN, msg) }) }, + onsize: function(can, msg) { can.onimport.topic(can) }, onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) }, onsearch_focus: function(can) { can._search && can._search.focus() }, onaction_cmd: function(can, msg) { can.onmotion.hidden(can) }, onwebpack: function(can, msg) { can.user.input(msg._event, can, [{name: mdb.NAME, value: can.user.title()}], function(data) { - can.core.Item(Volcanos.meta.pack, function(key, msg) { - can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) }) - }) - var msg = can.request({}, { - name: data.name, content: JSON.stringify(Volcanos.meta.pack), - river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), - topic: can._topic, layout: can.getAction(chat.LAYOUT), - args: "name,river,storm,topic,layout", - _toast: "打包中...", - }) - can.runAction(msg._event, code.WEBPACK, [], function(msg) { - can.user.download(can, "/share/local/"+msg.Result(), name, nfs.HTML) - can.user.toastSuccess(can, "打包成功", code.WEBPACK) - }) + can.core.Item(Volcanos.meta.pack, function(key, msg) { can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) }) }) + can.runAction(can.request({}, {args: "name,river,storm,topic,layout", _toast: "打包中...", + name: data.name, content: JSON.stringify(Volcanos.meta.pack), river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), topic: can._topic, layout: can.getAction(chat.LAYOUT), + }), code.WEBPACK, [], function(msg) { can.user.download(can, web.SHARE_LOCAL+msg.Result(), name, nfs.HTML), can.user.toastSuccess(can, "打包成功", code.WEBPACK) }) }) }, - onshare: function(can, msg, args) { - can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) - }, - - title: function(event, can) { - var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) }) - can.user.jumps(can.misc.MergeURL(can, args, true)) - }, + onshare: function(can, msg, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) }, + title: function(event, can) { var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) }); can.user.jumps(can.misc.MergeURL(can, args, true)) }, black: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) }, @@ -203,32 +101,37 @@ Volcanos(chat.ONACTION, {help: "交互数据", can.onaction.carte(event, can, ["shareuser", "setnick", aaa.PASSWORD, [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT]) }, shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN]) }, - setnick: function(event, can) { - can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { - can.runAction(event, aaa.USERNICK, [list[0]], function(msg) { - can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) { - can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0])) - }), can.user.toastSuccess(can) - }) - }) - }, - password: function(event, can) { - var ui = can.user.input(event, can, [ - {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, - {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, - ], function(list) { - if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true } - can.runAction(event, aaa.PASSWORD, [list[0]]) - }) - }, + setnick: function(event, can) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { can.runAction(event, aaa.USERNICK, [list[0]], function(msg) { + can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) { can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0])) }), can.user.toastSuccess(can) + }) }) }, + password: function(event, can) { var ui = can.user.input(event, can, [{name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}], function(list) { + if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true } can.runAction(event, aaa.PASSWORD, [list[0]]) + }) }, chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") }, english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") }, clear: function(event, can) { can.onimport.background(event, can, ""), can.onimport.avatar(event, can, "") }, logout: function(event, can) { can.user.logout(can) }, }) -Volcanos(chat.ONEXPORT, {help: "导出数据", - height: function(can) { return can._target.offsetHeight }, +Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight }, topic: function(can) { return can._topic || can.misc.Search(can, chat.TOPIC) || (can.base.isNight()? chat.BLACK: chat.WHITE) }, background: function(can) { return can.user.info.background == "void"? "": can.user.info.background }, avatar: function(can) { return can.user.info.avatar == "void"? "": can.user.info.avatar }, }) +Volcanos(chat.ONPLUGIN, { + "title": shy("标题", {}, [chat.TITLE, ice.RUN], function(can, msg, cmds) { can.user.title(cmds[0]) }), + "topic": shy("主题", {}, ["topic:select=white,black", ice.RUN], function(can, msg, cmds) { can.onimport.topic(can, cmds[0]) }), + "cookie": shy("参数", {}, [mdb.NAME, mdb.VALUE, ice.AUTO], function(can, msg, cmds) { + can.core.Item(can.misc.Cookie(can), function(key, value) { if (cmds[0] && key != cmds[0]) { return } + msg.Push(mdb.NAME, key), msg.Push(mdb.VALUE, value) + }) + }), + "alert": shy("提示", {}, [mdb.TEXT, ice.AUTO], function(can, msg, cmds) { cmds && cmds[0] && can.user.alert(cmds[0]) }), + "log": shy("日志", {}, [mdb.TEXT, ice.AUTO], function(can, msg, cmds) { can.misc.Log(cmds) }), + "location": shy("地址", { + copy: function(can, msg, cmds) { can.user.copy(msg._event, can, location.href) }, + }, [mdb.LINK, ice.AUTO, ice.COPY], function(can, msg, cmds, cb) { + can.run(can.request({}, mdb.LINK, location.href), [web.SHARE], function(res) { + msg.Echo(res.Append(mdb.TEXT)).Echo(ice.NL).Echo(can.page.Format(html.A, res.Append(mdb.NAME))), can.base.isFunc(cb) && cb(msg) + }) + }), +}) \ No newline at end of file diff --git a/panel/river.js b/panel/river.js index 0be75cf1..02f2d71f 100644 --- a/panel/river.js +++ b/panel/river.js @@ -1,7 +1,4 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { - can.onmotion.clear(can), can.onimport._main(can, msg), can.onimport._menu(can, msg) - can.river_list = {}, can.storm_list = {} - +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onimport._main(can, msg), can.onimport._menu(can, msg), can.river_list = {}, can.storm_list = {}, can.sublist = {} var select; can.page.Append(can, can._output, msg.Table(function(item, index) { return can.onimport._river(can, item, function(target) { (index == 0 || item.hash == can._main_river) && (select = target) }) })), select && select.click() @@ -15,154 +12,91 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) }) }, - _river: function(can, meta, cb) { - return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { - can.onaction.storm(event, can, meta.hash) - }, onmouseenter: function(event) { - can.onimport._carte(can, can.ondetail.list, meta.hash) - }, _init: function(target) { can.river_list[meta.hash] = target, cb(target) }} - }, - _storm: function(can, meta, river) { - return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { - can.onaction.action(event, can, river, meta.hash) - }, onmouseenter: function(event) { - can.onimport._carte(can, can.ondetail.sublist, river, meta.hash) - }, _init: function(target) { can.storm_list[can.core.Keys(river, meta.hash)] = target }} - }, - _carte: function(can, list, river, storm) { if (can.user.isMobile) { return } - if (can.core.Value(can._root, can.core.Keys(chat.RIVER, river))) { return } + _river: function(can, meta, cb) { return {text: [meta.name, html.DIV, html.ITEM], + onclick: function(event) { can.onaction.storm(event, can, meta.hash) }, + onmouseenter: function(event) { can.onimport._carte(can, can.ondetail.list, meta.hash) }, + _init: function(target) { can.river_list[meta.hash] = target, cb(target) }, + } }, + _storm: function(can, meta, river) { return {text: [meta.name, html.DIV, html.ITEM], + onclick: function(event) { can.onaction.action(event, can, river, meta.hash) }, + onmouseenter: function(event) { can.onimport._carte(can, can.ondetail.sublist, river, meta.hash) }, + _init: function(target) { can.storm_list[can.core.Keys(river, meta.hash)] = target }, + } }, + _carte: function(can, list, river, storm) { if (can.user.isMobile) { return } if (can.core.Value(can._root, can.core.Keys(chat.RIVER, river))) { return } can.onaction.carte(event, can, list, function(event, button, meta) { meta[button](event, can, button, river, storm) }) }, }) -Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, can, msg, panel, cmds, cb) { - var list = can.river - cmds.length == 0 && can.core.ItemSort(list, "order", function(key, value) { - if (can.core.Item(value.storm).length == 0) { return } - msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表 - }); if (cmds.length != 1 && cmds[1] != chat.STORM) { return false } - - var river = list[cmds[0]]; if (!river) { return false } - can.core.ItemSort(river.storm, "order", function(key, value) { - msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表 - }), can.base.isFunc(cb) && cb(msg); return true -}}) -Volcanos(chat.ONACTION, {help: "操作数据", list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can, cb) { - can.onmotion.hidden(can), can.base.isFunc(cb) && cb() - }, - onlogin: function(can, msg) { - can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return } - can.onimport._init(can, msg), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list) - if (can.user.mod.isPod ||can.user.isExtension || can.user.isMobile) { return } - can.onmotion.toggle(can, can._target, true) - }) - }, +Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can) { can.onmotion.hidden(can) }, + onlogin: function(can, msg) { can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return } + can.onmotion.clear(can), can.onimport._init(can, msg), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list) + can.user.isMobile ||can.user.isExtension || can.user.mod.isPod || can.onmotion.toggle(can, can._target, true) + }) }, onresize: function(can, msg) { can.user.isMobile && can.onmotion.hidden(can, can._target) }, onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == chat.STORM) { can.onexport.storm(can, msg, word) } }, onaction_notool: function(can, msg, river, storm) { can.ondetail["添加工具"](msg._event, can, "添加工具", river, storm) }, onaction_touch: function(can, msg) { can.user.isMobile && can.onmotion.hidden(can) }, onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") }, - storm: function(event, can, river) { can.sublist = can.sublist||{} - can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) + storm: function(event, can, river) { can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) var list = can.sublist[river]; if (list) { return can.onmotion.toggle(can, list) } - - can.run({}, [river, chat.STORM], function(msg) { - var select = 0; list = can.page.Append(can, can._output, [{view: html.LIST, list: msg.Table(function(item, index) { - river == can._main_river && item.hash == can._main_storm && (select = index) - return can.onimport._storm(can, item, river) - }) }]).first, can.sublist[river] = list, list.children.length > 0 && list.children[select].click() - event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling) - }) + can.run({}, [river, chat.STORM], function(msg) { var select = 0; list = can.page.Append(can, can._output, [{view: html.LIST, list: msg.Table(function(item, index) { + return river == can._main_river && item.hash == can._main_storm && (select = index), can.onimport._storm(can, item, river) + }) }])._target, can.sublist[river] = list, list.children.length > 0 && list.children[select].click(), event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling) }) }, - action: function(event, can, river, storm) { - can.onmotion.toggle(can, can.sublist[river], true) - can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) - can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)]) - - can.onmotion.delay(can, function() { // can.onlayout._init(can) - can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, { - river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), - })) - }) - }, - - create: function(event, can) { - can.user.input(event, can, [ - {name: mdb.TYPE, values: [aaa.TECH, aaa.VOID], _trans: "类型"}, - {name: mdb.NAME, value: "hi", _trans: "群名"}, - {name: mdb.TEXT, value: "hello", _trans: "简介"}, - ], function(args) { - can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) }) - }) - }, - share: function(event, can) { - can.onmotion.share(event, can, [{name: chat.TITLE, value: can.Conf(chat.STORM)}], [mdb.TYPE, chat.STORM, RIVER, can.Conf(RIVER), STORM, can.Conf(STORM)]) - }, - refresh: function(event, can) { - can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)}) + action: function(event, can, river, storm) { can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) + can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)]), can.onmotion.toggle(can, can.sublist[river], true) + can.onmotion.delay(can, function() { can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm)})) }) }, carte: function(event, can, list, cb) { can.user.carteRight(event, can, can.ondetail, list, cb) }, + + create: function(event, can) { can.user.input(event, can, [ + {name: mdb.TYPE, values: [aaa.TECH, aaa.VOID], _trans: "类型"}, {name: mdb.NAME, value: "hi", _trans: "群名"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}, + ], function(args) { can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) }) }) }, + share: function(event, can) { can.onmotion.share(event, can, [{name: chat.TITLE, value: can.Conf(chat.STORM)}], [mdb.TYPE, chat.STORM, RIVER, can.Conf(RIVER), STORM, can.Conf(STORM)]) }, + refresh: function(event, can) { can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)}) }, }) -Volcanos(chat.ONDETAIL, {help: "操作数据", - list: ["添加应用", "重命名群组", "删除群组"], +Volcanos(chat.ONDETAIL, {list: ["添加应用", "重命名群组", "删除群组"], sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], "创建群组": function(event, can) { can.onaction.create(event, can) }, - "重命名群组": function(event, can, button, river) { - can.user.input(event, can, [mdb.NAME], function(args) { - can.runAction(event, mdb.MODIFY, [mdb.HASH, river].concat(args), function(msg) { - can.page.Modify(can, can.river_list[river], args[1]), can.user.toastSuccess(can) - }) - }) - }, - "删除群组": function(event, can, button, river) { - can.runAction(event, mdb.REMOVE, [mdb.HASH, river], function(msg) { can.misc.Search(can, {river: "", storm: ""}) }) - }, + "重命名群组": function(event, can, button, river) { can.user.input(event, can, [mdb.NAME], function(args) { + can.runAction(event, mdb.MODIFY, [mdb.HASH, river].concat(args), function(msg) { can.page.Modify(can, can.river_list[river], args[1]), can.user.toastSuccess(can) }) + }) }, + "删除群组": function(event, can, button, river) { can.runAction(event, mdb.REMOVE, [mdb.HASH, river], function(msg) { can.misc.Search(can, {river: "", storm: ""}) }) }, "添加应用": function(event, can, button, river) { can.ondetail.create(event, can, button, river) }, - "共享应用": function(event, can, button, river, storm) { - can.onmotion.share(event, can, [ - {name: chat.TITLE, value: can.user.title()}, - {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}, - ], [mdb.TYPE, chat.STORM, chat.RIVER, river, chat.STORM, storm]) - }, - "添加工具": function(event, can, button, river, storm) { - can.user.select(event, can, ctx.COMMAND, ctx.INDEX, function(item, next) { + "共享应用": function(event, can, button, river, storm) { can.onmotion.share(event, can, [{name: chat.TITLE, value: can.user.title()}, {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}], [mdb.TYPE, chat.STORM, chat.RIVER, river, chat.STORM, storm]) }, + "添加工具": function(event, can, button, river, storm) { can.user.select(event, can, ctx.COMMAND, ctx.INDEX, function(item, next) { can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.INSERT].concat([web.SPACE, can.misc.Search(can, ice.POD)||"", ctx.INDEX, item[0]]), function(msg) { next() }) - }, function() { can.misc.Search(can, {river: river, storm: storm}) }) - }, - "保存参数": function(event, can, button, river, storm) { - can.getAction(ctx.ARGS, function(args, sub, next, index, array) { var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length) + }, function() { can.misc.Search(can, {river: river, storm: storm}) }) }, + "保存参数": function(event, can, button, river, storm) { can.getAction(ctx.ARGS, function(args, sub, next, index, array) { var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length) can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY, mdb.ID, sub.Conf(mdb.ID), ctx.ARGS, JSON.stringify(args)], function() { can.onmotion.delay(can, function() { toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can) }) }) - }) - }, - "重命名应用": function(event, can, button, river, storm) { - can.user.input(event, can, [mdb.NAME], function(args) { - can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() { - can.page.Modify(can, can.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can) - }) - }) - }, - "删除应用": function(event, can, button, river, storm) { - can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) - }, + }) }, + "重命名应用": function(event, can, button, river, storm) { can.user.input(event, can, [mdb.NAME], function(args) { + can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() { can.page.Modify(can, can.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can) }) + }) }, + "删除应用": function(event, can, button, river, storm) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) }, - create: function(event, can, button, river) { - can.user.input(event, can, [ - {name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}, - ], function(args) { - can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) }) - }) - }, + create: function(event, can, button, river) { can.user.input(event, can, [{name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}], function(args) { + can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) }) + }) }, }) -Volcanos(chat.ONEXPORT, {help: "导出数据", - width: function(can) { return can._target.offsetWidth }, - storm: function(can, msg, word) { - can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { - if (word[1] != "" && storm.indexOf(word[1]) == -1 && item.name.indexOf(word[1]) == -1) { return } - m.Push({ctx: "can", cmd: "Storm", type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) })}) - }) }) - }, +Volcanos(chat.ONEXPORT, {width: function(can) { return can._target.offsetWidth }, + storm: function(can, msg, word) { can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { if (word[1] != "" && storm.indexOf(word[1]) == -1 && item.name.indexOf(word[1]) == -1) { return } + msg.Push({ctx: ice.CAN, cmd: "Storm", type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) })}) + }) }) }, }) +Volcanos(chat.ONENGINE, {_engine: function(event, can, msg, panel, cmds, cb) { + var list = can.river + cmds.length == 0 && can.core.ItemSort(list, "order", function(key, value) { + if (can.core.Item(value.storm).length == 0) { return } + msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) + }); if (cmds.length != 1 && cmds[1] != chat.STORM) { return false } + + var river = list[cmds[0]]; if (!river) { return false } + can.core.ItemSort(river.storm, "order", function(key, value) { + msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) + }), can.base.isFunc(cb) && cb(msg); return true +}}) diff --git a/panel/search.js b/panel/search.js index 1a99046c..b05a8a4b 100644 --- a/panel/search.js +++ b/panel/search.js @@ -1,72 +1,48 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.onmotion.clear(can, can.ui.content) +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can.ui.content), can.list = msg.Table() var table = can.onappend.table(can, msg, function(value, key, index, line) { can.Status(mdb.TOTAL, index+1) - return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { - if (can.page.tagis(event.target, html.A)) { return } + return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { if (can.page.tagis(event.target, html.A)) { return } can.onaction[can.type==mdb.FOREACH||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index) }} - }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS))) - - can.page.Select(can, can._output, html.A, function(item) { - item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) } - }), can.onmotion.story.auto(can), can.list = msg.Table() - + }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS))); can.onmotion.story.auto(can) can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: "selected", value: "0"})) - msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click() - can.onmotion.focus(can, can.ui.word) + can.onmotion.focus(can, can.ui.word), msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click() + can.page.style(can, can._output, html.MAX_HEIGHT, window.innerHeight-2*html.PLUGIN_MARGIN-5*html.ACTION_HEIGHT) }, _word: function(can, msg, cmds, fields) { if (cmds[1].indexOf(";") > -1) { var ls = can.core.Split(cmds[1], "\t ;", "\t ;"); cmds[0] = ls[0], cmds[1] = ls[1] } can.run(can.request({}, {word: cmds, fields: fields.join(ice.FS)}, msg), cmds, function(res) { + res.Option("word", cmds) can.type = cmds[0], can.onengine.signal(can, chat.ONSEARCH, res), can.onimport._init(can, res) }), can.onmotion.show(can) }, - select: function(can, msg, cmds, cb) { - can.getActionSize(function(left, top, width, height) { - can.ConfHeight(height-2*html.ACTION_HEIGHT-2*html.PLUGIN_MARGIN), can.ConfWidth(width-2*html.PLUGIN_MARGIN) - can.page.style(can, can._target, {left: left, top: top}) + can.getActionSize(function(left, top, width, height) { can.ConfHeight(height-2*html.ACTION_HEIGHT-2*html.PLUGIN_MARGIN), can.ConfWidth(width-2*html.PLUGIN_MARGIN) + can.page.style(can, can._target, {left: left||0, top: top||0}) can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight()) can.page.style(can, can.ui.content, html.MAX_WIDTH, can.ConfWidth()) can.page.style(can, can.ui.display, html.MAX_WIDTH, can.ConfWidth()) can.page.style(can, can.ui.profile, html.MAX_WIDTH, can.ConfWidth()) }) - - var fields = (cmds[2]||msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(ice.FS) - can.page.Appends(can, can.ui.display, [{th: fields}]), can.ui.word.value = cmds[1] - + var fields = (cmds[2]||msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(ice.FS); can.page.Appends(can, can.ui.display, [{th: fields}]), can.ui.word.value = cmds[1] can.cb = function() { can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) } - can.input = function(event, word) { cmds[1] = word||cmds[1] - can.onimport._word(can, msg, cmds, fields) - }, can.onimport._word(can, msg, cmds, fields) + can.input = function(event, word) { cmds[1] = word||cmds[1]; can.onimport._word(can, msg, cmds, fields) } + can.onimport._word(can, msg, cmds, fields) }, }) -Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.DONE], _init: function(can, cb) { - can.onmotion.hidden(can), can.base.isFunc(cb) && cb() - }, - onlogin: function(can, msg) { - can.ui = can.page.Append(can, can._output, [chat.CONTENT, {view: [chat.DISPLAY, html.TABLE]}, chat.PROFILE]) - can.page.ClassList.add(can, can.ui.display, chat.CONTENT) - - can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list) - can.ui.word = can.page.Append(can, can._action, [{input: ["word", function(event) { can.onkeymap.input(event, can) +Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list: [cli.CLOSE, cli.CLEAR, cli.DONE], + onlogin: function(can, msg) { can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list) + can.ui = can.page.Append(can, can._output, [chat.CONTENT, {view: [[chat.DISPLAY, chat.CONTENT], html.TABLE]}, chat.PROFILE]) + can.ui.word = can.page.Append(can, can._action, [{input: ["word", function(event) { // can.onkeymap.input(event, can) if (event.key == lang.ESCAPE) { return can.onmotion.hide(can) } if (event.key == lang.ENTER) { can.onkeymap.prevent(event) if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1] return can.onaction[can.type==mdb.FOREACH? chat.PLUGIN: html.SELECT](event, can, first.dataset.index) - } - if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) } - return can.input(event, event.target.value) + } return event.ctrlKey? can.onaction[cli.DONE](event, can): can.input(event, event.target.value) } - if (event.ctrlKey) { if (event.key == "0") { return can.onaction.clear(event, can) } - if ("1" <= event.key && event.key <= "9") { - return can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) { - index+1 == event.key && tr.firstChild.click() - }) - } - } - can.onmotion.tableFilter(can, can.ui.content, event.target.value) - }] }]).first + if ("1" <= event.key && event.key <= "9") { return can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) { index+1 == event.key && tr.firstChild.click() }) } + } can.onmotion.tableFilter(can, can.ui.content, event.target.value+event.key) + }] }])._target }, onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||mdb.FOREACH, word||""]) }, @@ -74,27 +50,19 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli. done: function(event, can) { can.base.isFunc(can.cb) && can.cb() }, close: function(event, can) { can.onmotion.hide(can) }, - plugin: function(event, can, index) { var line = can.list[index] - if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } + plugin: function(event, can, index) { var line = can.list[index]; if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd) - can.onappend.plugin(can, {type: "story", index: cmd||msg.Option(mdb.INDEX), args: cmd == "web.wiki.word"? [line.name]: []}, function(sub, meta) { + can.onappend.plugin(can, {index: cmd||msg.Option(mdb.INDEX), args: cmd == "web.wiki.word"? [line.name]: []}, function(sub, meta) { can.onmotion.delay(can, function() { sub.Focus() }, 20) sub.onimport.size(sub, can.base.Min(320, can.ConfHeight()-html.ACTION_HEIGHT-can.ui.content.offsetHeight-can.ui.display.offsetHeight)-2*html.ACTION_HEIGHT-1, can.ConfWidth()-1, true) - sub.run = function(event, cmds, cb) { can.runActionCommand(event, meta.index, cmds, cb) } - can.onmotion.delay(can, function() { sub.Focus() }, 20) }, can.ui.profile) }, - select: function(event, can, index) { var line = can.list[index] - if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } + select: function(event, can, index) { var line = can.list[index]; if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }) can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) { can.page.Remove(can, event.target.parentNode), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1) }}]), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1) }, }) -Volcanos(chat.ONEXPORT, {help: "导出数据", - select: function(can) { - return can.page.Select(can, can.ui.display, html.TR, function(tr) { - return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML }) - }).slice(1) - }, +Volcanos(chat.ONEXPORT, { + select: function(can) { return can.page.Select(can, can.ui.display, html.TR, function(tr) { return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML }) }).slice(1) }, }) diff --git a/plugin/input/date.js b/plugin/input/date.js index 7d713832..6fadc72c 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -21,7 +21,7 @@ Volcanos(chat.ONFIGURE, {date: { "over", function() { now.setFullYear(now.getFullYear()-1), show(now) }, "come", function() { now.setFullYear(now.getFullYear()+1), show(now) }, chat._TRANS, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月", "over", "去年", "come", "今年"), - )), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first + )), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}])._target target.value == "" && (now.setMinutes(now.getMinutes()>30? 30: 0), now.setSeconds(0)) function show(now) { can.Action(YEAR, now.getFullYear()) diff --git a/plugin/input/keyboard.js b/plugin/input/keyboard.js index 3148e96b..038992b6 100644 --- a/plugin/input/keyboard.js +++ b/plugin/input/keyboard.js @@ -28,7 +28,7 @@ Volcanos(chat.ONFIGURE, {keyboard: { add(can._shift? item.name.toUpperCase(): item.name) } can._shift = false, can._ctrl = false, can.page.Select(can, can._output, "div.hold", function(target) { can.page.ClassList.del(can, div, "hold") }) } - } }]).first + } }])._target }) }, _number: function(can, msg) { diff --git a/plugin/input/province.js b/plugin/input/province.js index 6d8af2cf..2b60d7ae 100644 --- a/plugin/input/province.js +++ b/plugin/input/province.js @@ -1,7 +1,7 @@ Volcanos(chat.ONFIGURE, {province: { onclick: function(event, can, meta, cbs, target) { cbs(function(can, cb) { can.require(["/require/shylinux.com/x/echarts/echarts.js", "/require/shylinux.com/x/echarts/china.js"], function() { - var chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: can.page.width()/2, height: can.page.height()/2}}]).first) + var chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: can.page.width()/2, height: can.page.height()/2}}])._target) chart.setOption({geo: {map: 'china'}}), chart.on(html.CLICK, function(params) { target.value = params.name, can.close() }) }) }) } diff --git a/plugin/local/chat/media.js b/plugin/local/chat/media.js index 3ca6d594..d2e01dab 100644 --- a/plugin/local/chat/media.js +++ b/plugin/local/chat/media.js @@ -1,6 +1,6 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { can.ui = can.onlayout.display(can, target) - can.ui.canvas = can.page.Append(can, can.ui.display, [{type: "canvas", width: 320, height: 240, style: {display: "none"}}]).first + can.ui.canvas = can.page.Append(can, can.ui.display, [{type: "canvas", width: 320, height: 240, style: {display: "none"}}])._target can.onappend.table(can, msg, function(value, key, index, line, array) { return {text: [value, "td"], onclick: function(event) { diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 4ca5d58f..922f1ab1 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -295,7 +295,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", can.ui.profile_output = sup._profile_output = can.ui._profile_output var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2 can.onimport.process(can, msg, can.ui._profile_output, can.ui.profile.offsetHeight, width) - can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first) + can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS])._target) can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() { if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) } }) }) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 74380042..91e2c956 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -345,8 +345,8 @@ Volcanos(chat.ONACTION, {help: "控件交互", "查找": function(event, can) { var ui = can.page.Append(can, can._output, [{view: "vimer find float", list: [html.ACTION, html.OUTPUT], style: {position: "absolute", left: can.ui.project.offsetWidth+can.ui.content.offsetWidth/2, top: can.base.Max(can.base.Min(can.current.line.offsetTop-can.ui.content.scrollTop, 100), can.ConfHeight()/2)+57+28}}]) - can.onmotion.delay(can, function() { can.page.style(can, ui.first, html.LEFT, can.ui.project.offsetWidth+can.ui.content.offsetWidth/2-ui.first.offsetWidth/2) }, 10) - can.onmotion.move(can, ui.first) + can.onmotion.delay(can, function() { can.page.style(can, ui._target, html.LEFT, can.ui.project.offsetWidth+can.ui.content.offsetWidth/2-ui._target.offsetWidth/2) }, 10) + can.onmotion.move(can, ui._target) var last = can.onaction._getLineno(can, can.current.line) function find(begin, text) { if (parseInt(text) > 0) { return can.onaction.selectLine(can, parseInt(text)) && meta.close() } @@ -392,7 +392,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", can.undo.push(function() { can.onaction.selectLine(can, line), can.onaction.modifyLine(can, line, text) }) can.current.text(text.replace(from.value, to.value)) can.current.text().indexOf(from.value) == -1 && meta.find() }, - close: function() { can.page.Remove(can, ui.first) }, + close: function() { can.page.Remove(can, ui._target) }, }) }, _complete: function(event, can, target) { target = target||can.ui.complete diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index be312cb9..d6d83611 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -41,7 +41,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( _profile: function(can, task) { can.onmotion.toggle(can, can.ui.profile, true), can.onexport.hash(can, task) if (can.onmotion.cache(can, function() { return can.sup.task = task, can.Status(task), [task.pod, task.zone, task.id].join(ice.PT) }, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) } task.extra && can.core.Item(can.base.Obj(task.extra), function(key, value) { task["extra."+key] = value }), delete(task.extra) - var table = can.page.Appends(can, can.ui.profile, [{view: [chat.CONTENT, html.TABLE], list: [{th: [can.user.trans(can, mdb.KEY, "字段"), can.user.trans(can, mdb.VALUE, "属性")]}]}]).first + var table = can.page.Appends(can, can.ui.profile, [{view: [chat.CONTENT, html.TABLE], list: [{th: [can.user.trans(can, mdb.KEY, "字段"), can.user.trans(can, mdb.VALUE, "属性")]}]}])._target can.core.Item(task, function(key, value) { key != "_target" && can.page.Append(can, table, [{ td: [key, key == ice.POD && value != ""? can.page.Format(html.A, can.misc.MergeURL(can, {pod: value}), value): value], onclick: function(event) { can.page.tagis(event.target, html.INPUT) && event.target.type == html.BUTTON && can.run(can.request(event, task), [ctx.ACTION, event.target.name]) }, diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 1dc3f858..fd9cbe2c 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -7,7 +7,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl can.dir_root = msg.Option(nfs.DIR_ROOT), can.onimport.page(can, can.list, can.begin = parseInt(msg.Option(cli.BEGIN)||"0")) }, _file: function(can, path, index) { var p = location.href.indexOf(ice.HTTP) == 0? "": "http://localhost:9020" - return path.indexOf(ice.HTTP) == 0? path: p+can.base.Path(chat.SHARE_LOCAL, can.dir_root||"", path) + return path.indexOf(ice.HTTP) == 0? path: p+can.base.Path(web.SHARE_LOCAL, can.dir_root||"", path) }, file: function(can, path, index) { path = can.onimport._file(can, path, index) var cb = can.onfigure[can.base.Ext(path)]||can.onfigure[wiki.IMAGE]; can.Status(nfs.FILE, path) @@ -67,8 +67,8 @@ Volcanos(chat.ONACTION, {list: [ }).catch(function(err) { can.user.toast(can, err.name + ": " + err.message) }) }) }, record1: function(event, can) { can.onaction.record0(event, can, "shot", function(stream, cb) { var height = window.innerHeight - var video = can.page.Append(can, document.body, [{type: html.VIDEO, height: height}]).first; video.srcObject = stream, video.onloadedmetadata = function() { video.play(), width = video.offsetWidth - var canvas = can.page.Append(can, document.body, [{type: html.CANVAS, height: height, width: width}]).first; canvas.getContext("2d").drawImage(video, 0, 0, width, height) + var video = can.page.Append(can, document.body, [{type: html.VIDEO, height: height}])._target; video.srcObject = stream, video.onloadedmetadata = function() { video.play(), width = video.offsetWidth + var canvas = can.page.Append(can, document.body, [{type: html.CANVAS, height: height, width: width}])._target; canvas.getContext("2d").drawImage(video, 0, 0, width, height) canvas.toBlob((blob) => { cb([blob], nfs.PNG) }) } }) }, diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index c15331bb..42639cb9 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -165,7 +165,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", sub.page.Append(sub, sub.ui.content, [{view: "page"+(index==0? " first": ""), list: can.core.List(page, function(item) { var data = item.dataset||{} switch (data.type) { case wiki.PREMENU: item = item.cloneNode(false); break - case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content).first; break + case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content)._target; break default: item = item.cloneNode(true) } return can.core.CallFunc([can.onimport, data.type], [sub, data, item, can.page.width()]), item diff --git a/plugin/story/media.js b/plugin/story/media.js index 57c70efd..fe213336 100644 --- a/plugin/story/media.js +++ b/plugin/story/media.js @@ -16,7 +16,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar _layout: function(can, cb) { var height = can.ConfHeight() can.ui.video = can.page.Appends(can, can.ui.output, [{type: html.VIDEO, data: {controls: "controls"}, style: {height: height*3/4}, _init: function(target) { can.onmotion.delay(can, function() { cb(target) }) - }}]).first, can.onimport._action(can, ["抓拍", "录制", "取消"]) + }}])._target, can.onimport._action(can, ["抓拍", "录制", "取消"]) }, _image: function(can, src) { can.page.insertBefore(can, [{img: src, style: {height: can.ConfHeight()/4}}], can.ui.display.firstChild, can.ui.display) @@ -43,7 +43,7 @@ Volcanos(chat.ONACTION, {help: "操作数据", list: ["录屏", "摄像"], }) }, "抓拍": function(event, can) { var width = can.ui.video.offsetWidth, height = can.ui.video.offsetHeight - var canvas = can.page.Append(can, can.ui.display, [{type: html.CANVAS, height: height, width: width}]).first + var canvas = can.page.Append(can, can.ui.display, [{type: html.CANVAS, height: height, width: width}])._target canvas.getContext("2d").drawImage(can.ui.video, 0, 0, width, height, 0, 0, width, height) can.onimport._image(can, canvas.toDataURL('image/png')), can.page.Remove(can, canvas) }, diff --git a/plugin/story/parse.js b/plugin/story/parse.js index 0e294d90..97b75e43 100644 --- a/plugin/story/parse.js +++ b/plugin/story/parse.js @@ -80,7 +80,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: ["{", "}", html.HEAD, html. meta.keys = meta.keys||can.core.Keys(keys, meta.name||meta.type) var cb = can.onappend[type]; !can.onappend[meta.type] && cb && cb(can, item, meta, target, data) item._init = item._init||function(target) { meta.list && can.onappend.parse(can, meta.list, target, meta.keys, data, meta.subtype||type) } - item.target = can.page.Append(can, target, [item]).first; meta.init && meta.init(item.target) + item.target = can.page.Append(can, target, [item])._target; meta.init && meta.init(item.target) can.core.ItemCB(meta, function(key, cb) { item.target[key] = can.base.isFunc(cb)? cb: function(event) { can.onengine.signal(can, cb, can.request(event, meta)) } }) }, username: function(can, item, meta, target) { diff --git a/plugin/table.js b/plugin/table.js index 58b5f264..ad440446 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -54,11 +54,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl onclick: function(event) { can.onmotion.select(can, target, html.DIV_ITEM, event.target) cb(event, event.target, event.target._list && can.onmotion.toggle(can, event.target._list)) }, onmouseenter: function(event) { - if (can.base.isFunc(cbs)) { var menu = cbs(event, ui.first); if (menu) { + if (can.base.isFunc(cbs)) { var menu = cbs(event, ui._target); if (menu) { can.user.carteRight(event, can, menu.meta, menu.list, menu) } } }, - }]); return ui.first + }]); return ui._target }, itemlist: function(can, list, cb, cbs, target) { return target._list = can.page.insertBefore(can, [{view: html.LIST, list: can.core.List(list, function(item) { @@ -145,7 +145,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl }) can.base.isFunc(each) && each(item), can.onmotion.delay(can, function() { item.click() }) }} - })).first + }))._target }, plug: function(can, meta, cb, target) { if (!meta || !meta.index) { return } meta.type = "plug", can.onappend.plugin(can, meta, function(sub) { sub.sup = can diff --git a/proto.js b/proto.js index 80e86287..0304e7a9 100644 --- a/proto.js +++ b/proto.js @@ -73,7 +73,7 @@ var aaa = { var web = { SPACE: "space", DREAM: "dream", SHARE: "share", WEBSITE: "website", DRAW: "draw", RESIZE: "resize", REFRESH: "refresh", CLEAR: "clear", UPLOAD: "upload", DOWNLOAD: "download", - SHARE_CACHE: "/share/cache/", + SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/", GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE", Accept: "Accept", ContentType: "Content-Type",