diff --git a/frame.js b/frame.js index 4ef878a0..8bc67543 100644 --- a/frame.js +++ b/frame.js @@ -80,7 +80,7 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name, type, cbs) { if (can.user.is toast: function(can, sub, arg, cb) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) }, grow: function(can, msg, sub, arg) { var _can = sub._fields && sub.sup? sub.sup: sub; _can.onimport._grow(_can, msg, arg.join("")) }, rich: function(can, msg, sub, arg) { var _can = sub._fields && sub.sup? sub.sup: sub; _can.onimport._rich(_can, msg, arg) }, - refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update(), can.user.toastSuccess(can) }, + refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update() }, action: function(can, msg, sub, arg) { if (arg[0] == "ctrl") { var list = [] can.page.Select(can, can._root._target, html.INPUT, function(target, index) { list[index] = target @@ -593,10 +593,14 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)||ice.CAN_PLUGIN, meta._space = meta._space||can.ConfSpace() var res = {}; function _cb(sub, meta, skip) { kit.proto(res, sub), cb && cb(sub, meta, skip) } if (meta.inputs && meta.inputs.length > 0 || meta.meta) { can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, _cb, target, field); return res } - var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { - value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) }, target, field); return res } - can.runAction(can.request({}, {_method: http.GET, pod: meta.space})._caller(), ctx.COMMAND, [meta.index], function(msg) { - if (msg.Length() == 0) { return can.misc.Warn("not found", meta.index), can.onappend._plugin(can, {index: "can._plugin", style: html.HIDE}, meta, _cb, target, field) } + function _plugin(_meta) { var value = can.onengine.plugin(can, _meta.index) + if (value) { can.onappend._plugin(can, value, _meta, function(sub, meta, skip) { + value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) + }, target, field); return true } + } if (_plugin(meta)) { return res } + can.runAction(can.request({}, {_method: http.GET, pod: meta.space, _failure: function() { + return can.misc.isDebug(can) && can.misc.Warn("not found", meta.index), _plugin({type: meta.type, index: "can._notfound", args: [meta.index, meta.space]}) + }})._caller(), ctx.COMMAND, [meta.index], function(msg) { if (msg.Length() == 0) { return msg._failure() } msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) }) }); return res }, diff --git a/index.css b/index.css index 61adfc3b..48836e18 100644 --- a/index.css +++ b/index.css @@ -582,6 +582,7 @@ body.print select, body.print input[type=text], body.print textarea { box-shadow body.print fieldset.draw div.output { background-color:lightgray; } body.print fieldset.draw div.output div.content svg { background-color:lightgray; } /* misc */ +body:not(.debug) fieldset.plugin.can._notfound { display:none; } fieldset.inner.float>div.status { display:none; } fieldset.inner>div.output>div.project div.item.modify { background-color:#00800036; } fieldset.vimer>div.output>div.project div.item.modify { background-color:#00800036; } diff --git a/lib/misc.js b/lib/misc.js index d8088290..34924a8c 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -143,8 +143,8 @@ Volcanos("misc", { if (xhr.responseText.indexOf("warn: ")) { var res = {result: [xhr.responseText]} } else { var res = {result: [xhr.responseText]} } } msg.Option("_cost", new Date() - begin) if (xhr.status == 200) { return msg.detail || (msg.detail = res.detail), can.base.isFunc(cb) && cb(msg.Copy(res)) } - can.user.toastFailure(msg._can||can, xhr.response), can.misc.Warn(xhr.status, res, url, form) - cbs && cbs(xhr) + typeof msg._failure == code.FUNCTION && msg._failure() + can.user.toastFailure(msg._can||can, xhr.response), can.misc.Warn(xhr.status, res, url, form), cbs && cbs(xhr) }, xhr.setRequestHeader(http.Accept, msg._accept||http.ApplicationJSON) if (msg._upload) { var data = new FormData(); can.core.ItemForm(form, function(v, i, k) { data.append(k, v) }) data.append(ice.MSG_UPLOAD, web.UPLOAD), data.append(web.UPLOAD, msg._upload) diff --git a/lib/user.js b/lib/user.js index 4e9f5a98..b00d48aa 100644 --- a/lib/user.js +++ b/lib/user.js @@ -53,12 +53,13 @@ Volcanos("user", { }, close: function(url) { return window.close() }, theme: function(can, name) { can.base.isString(name) && (name = [name]) || name || [] + name.push(html.WIDTH+parseInt((can.page.width()+32)/320)) + can.misc.isDebug(can) && name.push(log.DEBUG) can.user.info.userrole && name.push(can.user.info.userrole) can.user.language(can) && name.push(can.core.Split(can.user.language(can), "-")[0]) can.user.mod.isCmd && name.push(chat.CMD), can.user.mod.cmd && name.push(can.user.mod.cmd.replaceAll(".", " ")) can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE) can.user.isWebview && name.push(html.WEBVIEW), can.user.isWindows && name.push("windows") - name.push(html.WIDTH+parseInt((can.page.width()+32)/320)) can.page.styleClass(can, document.body, name.join(lex.SP)) }, title: function(text) { if (window.webview) { return title(text) } return text && (document.title = text), document.title }, diff --git a/panel/action.js b/panel/action.js index b6310790..dcadc514 100644 --- a/panel/action.js +++ b/panel/action.js @@ -3,10 +3,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.R can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next, index) { item.type = chat.PLUGIN, item.mode = can.Mode(); if (item.deleted == ice.TRUE) { return next() } item.width = can.ConfWidth()-can.Conf(html.MARGIN_X); if (item.style == html.OUTPUT) { item.width = can.ConfWidth()-2*html.PLUGIN_MARGIN-2*html.PLUGIN_PADDING } if (msg.Length() == 1) { item.height = can.ConfHeight()-can.Conf(html.MARGIN_Y) } list.length == 0 && item.index == "web.dream" && (list = [river, storm, item.index]) - can.onappend.plugin(can, item, function(sub, meta, skip) { + can.onappend.plugin(can, item, function(sub, meta, skip) { if (meta.index == "can._notfound" && !can.misc.isDebug(can)) { return skip || next() } sub.onexport.output = function() { can.onexport.isauto(can) && can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, "") } sub.onaction._close = function() { can.onengine.signal(can, chat.ONACTION_REMOVE, can.request({river: river, storm: storm}, item)), can.page.Remove(can, sub._target) } - sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.space||meta.pod}), (can.base.beginWith(meta.index, "can.")? []: [river, storm, meta.id||meta.index]).concat(cmds), cb) } + sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.space||meta.pod}), (can.base.beginWith(meta.index, "can.")? [meta.index]: [river, storm, meta.id||meta.index]).concat(cmds), cb) } can.user.isChrome && (can.ondaemon._list[sub._daemon = can.core.Keys(river, storm, index)] = sub) can._plugins = (can._plugins||[]).concat([sub]), can.onimport._tabs(can, sub, meta), skip || next() }) @@ -202,21 +202,9 @@ Volcanos(chat.ONKEYMAP, { toggleLayout: function(can, layout) { can.onaction.layout(can, can.onexport.layout(can) == layout? ice.AUTO: layout) }, }) Volcanos(chat.ONPLUGIN, { - _plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), - _filter: shy("默认插件", [web.FILTER, ice.LIST, ice.BACK]), - layout: shy("界面布局", {_init: function(can) { can.Option(chat.LAYOUT, can.getAction(chat.LAYOUT)) }}, ["layout:select=auto,tabs,tabview,horizon,vertical,grid,free,flow,page", ctx.RUN], function(can, msg, arg) { - can.onaction.layout(can, arg[0]) - }), - "parse": shy("生成网页", { - "show": function(can, msg, arg) { var name = arg[1]||ice.CAN; can.isCmdMode() && can.user.title(name) - arg && arg[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, arg[0], name, sub.ConfHeight()), can._output) - }) - }, - }, [mdb.TEXT, mdb.NAME, "show:button@auto", "clear:button"]), - "nfs.save": shy("保存文件", {"save": function(can, msg, arg) { can.user.downloads(can, arg[1], arg[0]) }}, ["file=hi.txt", "text:textarea='hello world'", "save:button"]), + _plugin: shy("插件", [mdb.NAME, ice.LIST, ice.BACK]), + _filter: shy("表格", [web.FILTER, ice.LIST, ice.BACK]), + _notfound: shy("缺失", [ctx.INDEX, web.SPACE, ice.LIST], function(can, msg, arg) { msg.Echo("not found "+arg[0]+" "+arg[1]) }), + layout: shy("界面布局", {_init: function(can) { can.Option(chat.LAYOUT, can.getAction(chat.LAYOUT)) }}, ["layout:select=auto,tabs,tabview,horizon,vertical,grid,free,flow,page", ctx.RUN], function(can, msg, arg) { can.onaction.layout(can, arg[0]) }), }) })() diff --git a/proto.js b/proto.js index 978c643f..1f5bec63 100644 --- a/proto.js +++ b/proto.js @@ -41,7 +41,9 @@ var Volcanos = shy({iceberg: "", volcano: "", frame: chat.FRAME_JS, _cache: {}, }, request: function(event) { event = event||{}, event = event._event||event var msg = event._msg||can.misc.Message(event, can); event._msg = msg - function set(key, value) { if (key == "_method") { return msg._method = value } + function set(key, value) { + if (key == "_method") { return msg._method = value } + if (typeof value == code.FUNCTION) { return msg[key] = value } value == "" || msg.Option(key) || msg.Option(key, value) } can.core.List(arguments, function(item, index) { if (!item || index == 0) { return }