diff --git a/frame.js b/frame.js index 87dbfdad..f1f2a639 100644 --- a/frame.js +++ b/frame.js @@ -442,10 +442,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, case html.MAIN: case html.FOOT: case html.TABS: + case "username": case html.MENU: item.type = ls[0]; break default: item.name = ls[0]; break } - for (var i = 1; i < ls.length; i += 2) { item[ls[i]] = ls[i+1] + for (var i = 1; i < ls.length; i += 2) { can.core.Value(item, ls[i], ls[i+1]) if (ls[i] == ctx.INDEX) { item.type = item.type||html.PLUGIN } } }) @@ -471,13 +472,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, } else if (can.base.isObject(list)) { var meta = list } keys = can.core.Keys(keys, meta.name||meta.type) - var item = {view: meta.type}, init; switch (meta.type) { - case html.HEAD: data = {} + var item = {view: meta.type}, init, subtype; switch (meta.type) { + case html.HEAD: subtype = "menu", data = {} init = function(target) { data.head = target can.page.ClassList.add(can, target, html.LAYOUT) } break - case html.LEFT: + case html.LEFT: subtype = "item" init = function(target) { can.page.ClassList.add(can, target, html.LAYOUT) can.core.Timer(10, function() { var height = target.parentNode.offsetHeight @@ -536,16 +537,22 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }), can.page.Select(can, ui.name, html.DIV_ITEM)[0].click() } break + case "username": + // item.inner = can.user.info.usernick + can.page.Append(can, target, [ + can.base.Copy({view: ["username", "div"], onclick: function(event) { + }, list: [{view: ["some", html.DIV, can.user.info.usernick]}, {img: "/share/local/avatar"}]})]) + return } item._init = item._init||function(target) { - meta.list && can.onappend.parse(can, meta.list, target, keys, data, type) + meta.list && can.onappend.parse(can, meta.list, target, keys, data, type||subtype) can.base.isFunc(init) && init(target), can.base.isFunc(meta.init) && meta.init(target) } if (can.base.isString(meta.style)) { item.className = meta.style } if (can.base.isObject(meta.style)) { item.style = meta.style } - if (meta.type == html.MENU) { + if ((meta.type||type) == html.MENU) { can.page.Append(can, target, [can.base.Copy({view: [html.MENU, html.DIV, meta.name||meta], onclick: function(event) { if (meta.list && meta.list.length > 0) { return } can.onengine.signal(can, meta.name) || can.onengine.signal(can, html.MENU, can.request(event, {item: meta.name})) @@ -556,7 +563,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }})]).first return } - if (type == html.ITEM) { item.view = html.LIST + if ((type||subtype) == html.ITEM) { item.view = item.view||html.LIST if (meta.action == "auto") { meta.init = meta.init||function(item) { can.core.Timer(100, function() { item.click() }) } } @@ -565,10 +572,18 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, switch (meta.type) { case html.PLUGIN: if (can.onmotion.cache(can, function() { return keys }, data.main)) { break } - can.onappend.plugin(can, {index: meta.index}, function(sub) { + if (can.base.Ext(meta.index) == "zml") { + can.page.Append(can, data.main, [{type: "iframe", src: "/chat/cmd/"+meta.index, + width: data.main.offsetWidth, height: data.main.offsetHeight, + }]) + break + } + + can.onappend.plugin(can, {index: meta.index, args: can.base.Obj(meta.args)}, function(sub) { + sub.ConfHeight(data.main.offsetHeight-160) sub.run = function(event, cmds, cb, silent) { can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(data.main.offsetWidth-40)) - can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), function(msg) { + can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, sub._index||meta.index], cmds), function(msg) { cb(msg), can.core.Timer(10, function() { can.page.style(can, sub._table, html.MAX_HEIGHT, data.main.offsetHeight-150) }) @@ -590,6 +605,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, _plugin: function(can, value, meta, cb, target) { meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{} meta.inputs = can.base.getValid(meta.inputs, can.base.Obj(value.list))||[] + meta.display = meta.display||value.display meta.height = meta.height||can.Conf(html.HEIGHT) meta.width = meta.width||can.Conf(html.WIDTH) @@ -599,6 +615,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, meta.help = meta.help||value.help can.onappend._init(can, meta, [chat.PLUGIN_STATE_JS], function(sub, skip) { + sub._index = value.index||meta.index sub.run = function(event, cmds, cb) { can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb) } can.base.isFunc(cb) && cb(sub, meta, skip) }, target||can._output) diff --git a/lib/core.js b/lib/core.js index f3f7380d..11561b83 100644 --- a/lib/core.js +++ b/lib/core.js @@ -16,7 +16,21 @@ Volcanos("core", {help: "数据结构", if (typeof key == lang.OBJECT && key.length > 0) { key = key.join(ice.PT) } if (typeof key == lang.OBJECT) { for (var k in key) { arguments.callee.call(this, data, k, key[k]) } return data } - if (value != undefined) { data[key] = value } + if (value != undefined) { + var _data = data + + var ls = key.split(ice.PT) + for (var i = 0; i < ls.length; i++) { + var _sub = _data[ls[i]]||{} + _data[ls[i]] = _sub + if (i == ls.length - 1) { + _data[ls[i]] = value + } else { + _data = _sub + } + } + // data[key] = value + } if (data[key] != undefined) { return data[key] } var p = data, ls = key.split(ice.PT); while (p && ls.length > 0) { diff --git a/lib/user.js b/lib/user.js index 92561085..5f5db663 100644 --- a/lib/user.js +++ b/lib/user.js @@ -239,6 +239,7 @@ Volcanos("user", {help: "用户操作", agent: { can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}}) }, + info: {}, input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() } var msg = can.request(event) var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [ diff --git a/panel/header.css b/panel/header.css index 4841f3a0..38539c3c 100644 --- a/panel/header.css +++ b/panel/header.css @@ -13,6 +13,22 @@ fieldset.Header>div.output div.menu:hover { background-color:#2e515f; border-bot div.head { background-color:#404040; padding:5px; height:42px; clear:both; } +div.left div.username div { + color:white; text-align:center; padding:10px; +} +div.left div.username img { + padding:0 10px; width:100px; +} +div.head div.username img { + height:40px; float:left; +} +div.head div.username div { + padding:12px; float:left; +} +div.head div.username { + color:white; float:right; + padding-right:10px; +} div.head div.menu { color:white; cursor:pointer; padding:10px; float:left; } @@ -20,6 +36,7 @@ div.head div.menu:hover { background-color:#323232; } div.left { + width:120px; background-color:#323232; overflow:auto; float:left; } div.left:hover { @@ -27,6 +44,7 @@ div.left:hover { } div.left div.item { background-color:#323232; + color:white; padding:5px 10px; } div.left div.item:hover { background-color:#404040; @@ -34,6 +52,9 @@ div.left div.item:hover { div.main { background-color:#cccccc; height:180px; width:180px; overflow:auto; float:left; } +div.main iframe { + border:0; +} div.main fieldset.plugin { background-color:#f8f8f8; padding:10px; margin:10px; } @@ -125,7 +146,7 @@ div.tabs div.page>div.list { div.tabs div.page>div.list.select { background-color:#323232; display:block; } -div.tabs div.list { +div.left div.list { padding-left:20px; } @@ -139,7 +160,8 @@ div.tabs.left div.name div.item.select { border-right:solid red 2px; } div.tabs.left div.page { - width:240px; clear:none; float:left; + width:-webkit-fill-available; + clear:none; float:left; } div.tabs.left div.page>div.item { display:block; diff --git a/panel/header.js b/panel/header.js index e3437662..a6c5c33e 100644 --- a/panel/header.js +++ b/panel/header.js @@ -1,5 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) { can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNICK)) + can.user.info.usernick = can.Conf(aaa.USERNICK) can.ondaemon._init(can) can.onengine.plugin(can, "topic", shy("主题", { diff --git a/plugin/story/trend.js b/plugin/story/trend.js index e42a7fe0..32173fd1 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -1,5 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) + can.onmotion.hidden(can, can._action) if (msg.Option("branch")) { return can.onappend.table(can, msg) } can.onappend._status(can, ["from", "commit", "total", "max", "date", "text", "add", "del"]) can.Conf(html.HEIGHT, can.Conf(html.HEIGHT)||200)