diff --git a/frame.js b/frame.js index 51e46456..bb930ce8 100644 --- a/frame.js +++ b/frame.js @@ -191,7 +191,9 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list, can.core.ItemCB(input.onaction, function(key, cb) { input._target[key] = function(event) { cb(event, input) } }) can.core.ItemCB(item, function(key, cb) { input._target[key] = function(event) { cb(event, input) } }) skip? next(): can.core.CallFunc([input.onaction, chat._INIT], [input, item, next, input._target]); - (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(input, item, input._target) + (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(input, item, input._target, function(sub, value) { + input._target.value = value, can.Update() + }) }) }; can.core.Next(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs)).concat([{type: html.BUTTON, name: cli.CLOSE}]), add) }, @@ -233,7 +235,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list, _output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event); if (msg.RunAction(event, can, cmds)) { return } if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { var msg = can.request(event, {action: cmds[1]}) if (can.base.isFunc(meta.feature[cmds[1]])) { return can.core.CallFunc(meta.feature[cmds[1]], {can: can, msg: msg, cmds: cmds.slice(2)}) } - return can.user.input(event, can, meta.feature[cmds[1]], function(args) { var msg = can.request(event, {_handle: ice.TRUE}, can.Option()) + return can.user.input(event._event||event, can, meta.feature[cmds[1]], function(args) { var msg = can.request(event, {_handle: ice.TRUE}, can.Option()) can.Update(event, cmds.slice(0, 2).concat(args), cb||function() { if (can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg})) { return } if (can.core.CallFunc([can, chat.ONIMPORT, ice.MSG_PROCESS], {can: can, msg: msg})) { return } @@ -417,12 +419,14 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list, figure: function(can, meta, target, cbs) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return } var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+".js"], function(can) { can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) { - if (target._can) { return can.base.isFunc(cb) && cb(target._can, cbs) } - can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta) - sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) } + function _cbs(sub, value, old) { can.onmotion.hidden(can, sub._target), can.base.isFunc(cbs)? cbs(sub, value, old): target.value = value||"" } + if (target._can) { return can.onmotion.toggle(can, target._can._target), can.base.isFunc(cb) && cb(target._can, _cbs) } + can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta) + sub.run = function(event, cmds, cb) { (meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true) } + var layout = target.getBoundingClientRect(); can.page.style(can, sub._target, {left: layout.left, top: layout.bottom}), can.page.style(sub, sub._target, meta.style) target._can = sub, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) } - can.page.style(sub, sub._target, meta.style), can.onlayout.figure(event, sub), can.onmotion.hidden(can, sub._target) - can.base.isFunc(cb) && cb(sub, function(sub, hide) { can.onmotion.hidden(can, sub._target, !hide), can.base.isFunc(cbs) && cbs(sub) }) + can.base.isFunc(cb) && cb(sub, _cbs) + can.base.isFunc(meta._init) && meta._init(sub, sub._target) }, can._root._target) }, target, last) } }) }) @@ -470,26 +474,19 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta background: function(can, url, target) { can.page.style(can, target||can._root._target, html.BACKGROUND, url == "" || url == "void"? "": 'url("'+url+'")') }, - figure: function(event, can, target, right, layout) { target = target||can._target - if (layout) { return can.page.style(can, target, layout), can.onmotion.move(can, target, layout), layout } - if (!event || !event.target || !event.clientX) { return {} } - var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight-3; if (right) { - var left = event.clientX-event.offsetX+event.target.offsetWidth, top = event.clientY-event.offsetY - } - - layout = {left: left, top: top} - if (layout.top < 0) { layout.top = 0 } - if (layout.left < 0) { layout.left = 0 } - if (layout.left+target.offsetWidth > can._root._width) { layout.right = 0, layout.left = "" } - - if (!(can.user.isMobile && can.user.isLandscape()) && layout.top+target.offsetHeight > can._root._height-html.ACTION_HEIGHT) { - layout.bottom = can._root._height - event.clientY+event.offsetY, layout.top = "" - if (right) { layout.bottom -= target.offsetHeight } - if (layout.bottom < html.ACTION_HEIGHT) { layout.bottom = html.ACTION_HEIGHT } - } - // if (can.user.isMobile && !can.user.isLandscape()) { layout.left = 0, layout.right = "" } - return can.page.style(can, target, layout), can.onmotion.move(can, target, layout), layout + figure: function(event, can, target, right) { var rect = event.target.getBoundingClientRect() + target = target||can._fields||can._target + var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} + can.getActionSize(function(left, top, width, height) { + if (layout.top+target.offsetHeight > top+height-31) { + layout.bottom = 31, layout.top = "" + } + if (layout.left+target.offsetWidth > left+width) { + layout.right = 0, layout.left = "" + } + }) + return can.onmotion.move(can, target, layout), layout }, display: function(can, target) { target = target||can._target @@ -643,9 +640,8 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { case lang.ESCAPE: target.innerHTML = back; break default: can.onkeymap.input(event, can) } - }, _init: function(target) { - item && can.onappend.figure(can, item, target), target.value = text - can.onmotion.focus(can, target) + }, _init: function(target) { item && can.onappend.figure(can, item, target, cb) + can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, modifys: function(can, target, cb, item) { var back = target.innerHTML @@ -663,7 +659,7 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { } }, _init: function(target) { item && can.onappend.figure(can, item, target) - can.onmotion.focus(can, target) + can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, toimage: function(event, can, name, target) { diff --git a/lib/user.js b/lib/user.js index 600752af..fa23fb98 100644 --- a/lib/user.js +++ b/lib/user.js @@ -234,7 +234,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { } }] }: can.base.isArray(item)? {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) { var sub = can.user.carte(event, can, meta, item.slice(1), cb, carte) carte._float && can.page.Remove(can, carte._float._target), carte._float = sub - can.onlayout.figure(event, can, sub._target, true) + can.page.style(can, sub._target, can.onlayout.figure(event, can, sub._target, true)) } }: {view: html.ITEM, list: [{text: can.user.trans(can, item.name), onclick: function(event) { can.user.isMobile && can.page.Remove(can, ui._target) can.base.isFunc(cb) && cb(event, item.name, meta, index) @@ -244,6 +244,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { }) }] ) ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) } + can.page.style(can, ui._target, can.onlayout.figure(event, can, ui._target)) var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)} return can.onkeymap.prevent(event), carte }, @@ -289,14 +290,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { ]}]) var layout = can.onlayout.figure(event, can, ui._target) - if (layout.left == undefined) { if (!layout.top) { layout.top = 32 } - layout.left = window.innerWidth/2-ui._target.offsetWidth/2, layout.right = "" - can.page.style(can, ui._target, layout) - } - can.page.ClassList.add(can, ui._target, chat.FLOAT) - if (layout.top) { - can.page.style(can, ui.content, html.MAX_HEIGHT, window.innerHeight - layout.top - html.ACTION_HEIGHT - 10) - } + can.page.style(can, ui._target, layout), can.page.ClassList.add(can, ui._target, chat.FLOAT) var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, { focus: function(event) { can.page.Select(can, ui.first, html.INPUT_ARGS)[0].focus() }, diff --git a/page/index.css b/page/index.css index 12b7257e..f72248e0 100644 --- a/page/index.css +++ b/page/index.css @@ -101,8 +101,11 @@ fieldset.output>div.action { display:none; } fieldset.output div.status { display:none; } fieldset.output div.toggle { display:none; } -fieldset.input { background-color:#0d4142a6; top:32px; } +fieldset.input { background-color:#0d4142a6; } fieldset.input.key.float div.action { display:none; } +fieldset.input.key.float.simple div.status { display:none; } +fieldset.input.key.float.simple th { display:none; } +fieldset.input.key.float.simple td { min-width:40px; text-align:center; } fieldset.input div.output { max-height:400px; } fieldset.input table { color:white; } fieldset.input td { word-break:keep-all; } @@ -120,7 +123,7 @@ body>div.carte div.item { padding:3px 12px; } body>div.input { background-color:#0d4142a6; padding:5px; } body>div.input div.item { float:left; } body>div.input tr td:first-child { text-align:center; } -body>div.input div.content { overflow:auto; max-height:200px; } +body>div.input div.content { overflow:auto; } body>div.input select { width:183px; margin:5px; } body>div.input input[type=text] { width:171px; margin:5px; } body>div.input input[name=username] { width:171px; margin:5px; } diff --git a/panel/footer.css b/panel/footer.css index 7b234a73..3ac8b915 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -1,5 +1,5 @@ -fieldset.Footer { padding:0 5px; height:32px; clear:both; } -fieldset.Footer>div.output { height:32px; overflow:hidden; } +fieldset.Footer { padding:0 5px; height:31px; clear:both; } +fieldset.Footer>div.output { height:31px; overflow:hidden; } fieldset.Footer>div.output>div { padding:5px; height:22px; cursor:pointer; } fieldset.Footer>div.output>div:hover { background-color:#2e515f; border-top:solid 2px red; } fieldset.Footer>div.output div.title { float:left; } diff --git a/panel/footer.js b/panel/footer.js index 85725bda..09d3be71 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -95,7 +95,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", }} }, ui.output), can.onappend.board(can, msg.Result(), ui.output) } - return can.page.style(can, ui.first, bottom? {bottom: 32, top: ""}: {}), can[name] = ui + return can.page.style(can, ui.first, bottom? {bottom: 31, top: ""}: {}), can[name] = ui }, ntip: function(can) { can.onexport.float(can, can._tips, function() {}, "ntip") diff --git a/panel/header.css b/panel/header.css index 38539c3c..b2d9b558 100644 --- a/panel/header.css +++ b/panel/header.css @@ -1,5 +1,5 @@ -fieldset.Header { font-size:1.2em; padding:0 5px; height:32px; overflow:hidden; z-index:10; } -fieldset.Header>div.output { height:32px; overflow:hidden; } +fieldset.Header { font-size:1.2em; padding:0 5px; height:31px; overflow:hidden; z-index:10; } +fieldset.Header>div.output { height:31px; overflow:hidden; } fieldset.Header>div.output>div { padding:5px; height:22px; cursor:pointer; } fieldset.Header>div.output>div:hover { background-color:#2e515f; border-bottom:solid 2px red; } fieldset.Header>div.output>div.title { float:left; } @@ -110,7 +110,7 @@ div.main fieldset.plugin div.status { color:black; } div.foot { - background-color:#404040; height:32px; clear:both; + background-color:#404040; height:31px; clear:both; } div.tabs:hover { diff --git a/panel/header.js b/panel/header.js index 5e75f68f..12c293df 100644 --- a/panel/header.js +++ b/panel/header.js @@ -59,9 +59,9 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar _time: function(can, target) { can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) - can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) { + can.onappend.figure(can, {action: "date", style: {"min-width": 306}, _init: function(sub) { can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) }) - }), target.onmouseenter = target.click + }}, target), target.onmouseenter = target.click }, time: function(can, target) { can.onimport.topic(can) target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") @@ -154,6 +154,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target) } can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {})) can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) + can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE) 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) }) diff --git a/plugin/input/date.js b/plugin/input/date.js index 9dcd0da2..4d89f4b2 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -1,5 +1,5 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", date: {onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) { - function set(now) { target.value = can.user.time(can, now), can.close(), meta && meta.action == ice.AUTO && can.run({}) } + function set(now) { cbs(can, can.user.time(can, now), target.value) } // 添加控件 var now = target.value? new Date(target.value): new Date() @@ -56,5 +56,5 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", date: {onclick: function(event, c for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) } return now - } show(now), can.onlayout.figure(event, can), can.base.isFunc(cbs) && cbs(can) + } show(now), can.onlayout.figure(event, can) })}} }, [""]) diff --git a/plugin/input/key.js b/plugin/input/key.js index 0a6b6327..6312c8dd 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -1,18 +1,22 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: { - _init: function(event, can, cbs, target, name, value) { var call = arguments.callee + _init: function(can, msg, cbs, target, name) { can.onmotion.hidden(can, can._target, msg.Length() != 0) + can.onmotion.clear(can), can.onappend.table(can, msg, function(value) { + return {text: [value, html.TD], onclick: function(event) { can.base.isFunc(cbs) && cbs(can, value, target.value) }} + }), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()) + }, + _show: function(event, can, cbs, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) { - can.onmotion.clear(can), can.onappend.table(can, msg, function(value) { - return {text: [value, html.TD], onclick: function(event) { - target.value = value, can.onmotion.focus(can, target) - if (msg.Option(ice.MSG_PROCESS) != ice.PROCESS_AGAIN) { return can.close() } - target._hold = true, call(event, can, cbs, target, name, value) - }} - }), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()) - can.base.isFunc(cbs) && cbs(can, msg.Length() == 0) + can.onfigure.key._init(can, msg, cbs, target, name) }) }, onclick: function(event, can, meta, cb, target) { can.onmotion.focus(can, target) - cb(function(sub, cbs) { can.onfigure.key._init(event, sub, cbs, target, meta.name) }) + cb(function(sub, cbs) { + if (meta.msg && meta.msg.Length() > 0) { + can.onfigure.key._init(sub, meta.msg, cbs, target, meta.name) + } else { + can.onfigure.key._show(event, sub, cbs, target, meta.name) + } + }) }, onkeydown: function(event, can, meta, cb, target, last) { switch (event.key) { @@ -23,7 +27,7 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: { }, onkeyup: function(event, can, meta, cb, target, last) { var sub = target._can sub && can.onmotion.selectInputTable(event, sub, function() { - can.onfigure.key._init(event, sub, null, target, meta.name) + can.onfigure.key._show(event, sub, null, target, meta.name) }, target), can.base.isFunc(last) && last(event, can) }, onblur: function(event, can, meta, cb, target) { diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index c5c00edb..990e8820 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -1,9 +1,11 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { can.onmotion.clear(can, target), can.base.isFunc(cb) && cb(msg) - can.ui = can.onlayout.profile(can), can.onimport[can.Option("scale")||"week"](can, msg) + can.page.style(can, can.ui.project, html.MAX_HEIGHT, can.ui.content.offsetHeight) can.page.style(can, can.ui.profile, html.MAX_HEIGHT, can.ui.content.offsetHeight) can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project) + !can.user.isMobile && can.onmotion.toggle(can, can.ui.profile, true) + !can.user.isMobile && can.onmotion.toggle(can, can.ui.display, true) }, _content: function(can, msg, head, list, key, get, set) { var hash = {}; msg.Table(function(value, index) { var k = key(can.base.Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) }) @@ -12,63 +14,75 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar var begin_time = can.base.Date(can.Option("begin_time")) can.page.Append(can, can.ui.content, [{view: [chat.CONTENT, html.TABLE], list: can.core.List(list, function(hour, row) { return {type: html.TR, list: can.core.List(head, function(week, col) { - if (row == 0) { return {text: [week, html.TH]} } + if (row == 0) { return {text: [can.user.trans(can, week), html.TH]} } if (col == 0) { return {text: [hour, html.TD]} } return can.onimport._task(can, msg, get(begin_time, col, row, hash), set(begin_time, col, row)) })} - }) }]) - if (msg.Length() == 0) { return } - can.core.Timer(10, function() { if (!can.sup.task) { return } - var target = can.sup.task._target||can.task._target - can.sup.task = null, target.click() - can.Status("count", msg.Length()) + }) }]), can.Status(mdb.COUNT, msg.Length()) + + msg.Length() > 0 && can.sup.task && can.onmotion.delay(can, function() { + var target = can.sup.task._target||can.task._target; can.sup.task = null, target && target.click() }) }, _task: function(can, msg, list, time) { return {text: ["", html.TD], ondblclick: function(event) { can.onaction.insertTask(event, can, time+can.base.Time(null, "%y-%m-%d %H:%M:%S").slice(time.length)) }, - ondrop: function(event) { event.preventDefault() + ondrop: function(event) { can.onkeymap.prevent(event) can.drop(event, event.target, time) }, - ondragover: function(event) { event.preventDefault() + ondragover: function(event) { can.onkeymap.prevent(event) can.page.Select(can, can.ui.content, html.TD, function(item) { - can.page.ClassList[event.target == item? "add": "del"](can, item, "over") + can.page.ClassList.set(can, item, "over", event.target == item) }) }, - list: can.core.List(list, function(task) { return can.base.isString(task)? {text: [task, html.DIV, "date"]}: - {text: [can.onexport[can.Action("view")||"text"](can, task), html.DIV, can.onexport.style(can, task)], - ondragstart: function(event) { var target = event.target; can.drop = function(event, td, time) { td.append(target) - can.onaction.modifyTask(event, can, task, "begin_time", time+task.begin_time.slice(time.length), task.begin_time) - } }, draggable: time != undefined, - - title: can.onexport.title(can, task), _init: function(target) { - var item = can.onimport.item(can, html.ITEM, {nick: task.name+":"+task.text}, function() { - can.core.Timer(10, function() { can.onmotion.select(can, can.ui.content, html.TD, target.parentNode) }) - can.onimport._profile(can, task) - }, function() { - - }, can.ui.project); task._target = target, can.task = can.task||task, can.sup.task = can.sup.task||task - can.sup.task.zone == task.zone && can.sup.task.id == task.id && (can.sup.task._target = target) - target.onclick = function(event) { item.click() } - }, - } + list: can.core.List(list, function(task) { + return can.base.isString(task)? {text: [task, html.DIV, "date"]}: {text: [can.onexport[can.Action("view")||"text"](can, task), html.DIV, can.onexport.style(can, task)], + ondragstart: function(event) { var target = event.target; can.drop = function(event, td, time) { td.append(target) + can.onaction.modifyTask(event, can, task, "begin_time", time+task.begin_time.slice(time.length), task.begin_time) + } }, draggable: time != undefined, title: can.onexport.title(can, task), _init: function(target) { + var item = can.onimport.item(can, html.ITEM, {nick: task.name+":"+task.text}, function() { can.onmotion.delay(can, function() { + can.onmotion.select(can, can.ui.content, html.TD, target.parentNode), can.onimport._profile(can, task) + }) }, null, can.ui.project); task._target = target, target.onclick = function(event) { item.click() } + can.task = can.task||task, can.sup.task = can.sup.task||task, can.sup.task.zone == task.zone && can.sup.task.id == task.id && (can.sup.task._target = target) + }, + } }), } }, _profile: function(can, task) { - if (can.sup.task && can.sup.task.pod == task.pod && can.sup.task.id == task.id) { return } 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 } 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: ["key", "value"]}]}]).first + var table = can.page.Appends(can, can.ui.profile, [{view: [chat.CONTENT, html.TABLE], list: [{th: [mdb.KEY, mdb.VALUE]}]}]).first can.core.Item(task, function(key, value) { key != "_target" && can.page.Append(can, table, [{ - td: [key, key == "pod" && value != ""? can.page.Format("a", can.misc.MergeURL(can, {pod: value}), value): value], - onclick: function(event) { if (event.target.type == "button") { var msg = can.request(event, can.sup.task) - can.runAction(event, event.target.name, [], function(msg) { can.Update() }) + td: [key, key == ice.POD && value != ""? can.page.Format(html.A, can.misc.MergeURL(can, {pod: value}), value): value], + onclick: function(event) { if (can.page.tagis(html.INPUT, event.target) && event.target.type == html.BUTTON) { + can.run(can.request(event, task), [ctx.ACTION, event.target.name], function(msg) { can.Update() }) } }, - ondblclick: function(event) { can.onmotion.modify(can, event.target, function(ev, value, old) { - can.onaction.modifyTask(event, can, task, key, value) - }, {name: key, action: key.indexOf("time") > 0? "date": "key"}) }, + ondblclick: function(event) { var msg = can.request() + switch (key) { + case "zone": + case "id": + return + case "level": + case "score": + msg.Push(key, "1") + msg.Push(key, "2") + msg.Push(key, "3") + msg.Push(key, "4") + msg.Push(key, "5") + break + case "status": + msg.Push(key, "prepare") + msg.Push(key, "process") + msg.Push(key, "finish") + msg.Push(key, "cancel") + break + } + can.onmotion.modify(can, event.target, function(sub, value) { + can.onaction.modifyTask(event, can, task, key, value) + }, {name: key, action: key.indexOf(mdb.TIME) > 0? "date": "key", msg: msg, mode: "simple"}) + }, }]) }), can.onimport._display(can, task) }, _display: function(can, task) { if (!task["extra.cmd"]) { return } @@ -77,7 +91,6 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb) } }, can.ui.display) - can.page.style(can, can.ui.display, {display: html.BLOCK}) }, day: function(can, msg) { @@ -91,7 +104,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onimport._content(can, msg, head, list, key, get, set) }, week: function(can, msg) { - var head = ["hour"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]) + var head = can.onexport.head(can, "hour") var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)) } function key(time) { return time.getDay()+" "+can.base.Number(time.getHours(), 2) } @@ -101,7 +114,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onimport._content(can, msg, head, list, key, get, set) }, month: function(can, msg) { - var head = ["order"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]) + var head = can.onexport.head(can, "order") var list = [0]; for (var i = 1; i < 6; i++) { list.push(i) } function key(time) { return can.base.Time(time, "%y-%m-%d") } @@ -121,7 +134,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onimport._content(can, msg, head, list, key, get, set) }, year: function(can, msg) { - var head = ["month"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]); + var head = can.onexport.head(can, "month") var list = [0]; for (var i = 1; i < 13; i++) { list.push(i) } function key(time) { return can.base.Time(time, "%y-%m ")+time.getDay() } @@ -151,45 +164,52 @@ Volcanos(chat.ONACTION, {help: "组件交互", list: [ ["score", "all", "s1", "s2", "s3", "s4", "s5"], ["view", "", "name", "text", "level", "score"], ], + _trans: {"task": "任务", "hour": "时间", "month": "月份"}, insertTask: function(event, can, time) { var msg = can.sup.request(event, {begin_time: time}) - can.user.input(event, can, can.Conf("feature.insert"), function(args) { - can.runAction(event, mdb.INSERT, args.concat("begin_time", time)) + can.user.input(event, can, can.Conf([ctx.FEATURE, mdb.INSERT]), function(args) { + can.runAction(event, mdb.INSERT, ["begin_time", time].conat(args)) }) }, - modifyTask: function(event, can, task, key, value) { var msg = can.request(event, task) - can.runAction(event, mdb.MODIFY, [key, value, task[key]]) + modifyTask: function(event, can, task, key, value) { + can.runAction(can.request(event, task), mdb.MODIFY, [key, value, task[key]]) }, _filter: function(event, can, key, value) { var count = 0 if (value == "all") { - can.page.Select(can, can.ui.content, "div.item", function(item) { - can.page.ClassList.del(can, item, "hide"), count++ + can.page.Select(can, can.ui.content, html.DIV_ITEM, function(item) { + can.page.ClassList.del(can, item, html.HIDE), count++ }) } else { - can.page.Select(can, can.ui.content, "div.item", function(item) { - can.page.ClassList.add(can, item, "hide") + can.page.Select(can, can.ui.content, html.DIV_ITEM, function(item) { + can.page.ClassList.add(can, item, html.HIDE) }) - can.page.Select(can, can.ui.content, "div."+value, function(item) { - can.page.ClassList.del(can, item, "hide"), count++ + can.page.Select(can, can.ui.content, can.core.Keys(html.DIV, value), function(item) { + can.page.ClassList.del(can, item, html.HIDE), count++ }) } - can.Action(key, value), can.Status("count", count) + can.Action(key, value), can.Status(mdb.COUNT, count) }, level: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, status: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, score: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, - view: function(event, can, key, value) { - can.Action(key, value) - can.onmotion.clear(can, can.ui.project) - can.onmotion.clear(can, can.ui.content) + view: function(event, can, key, value) { can.Action(key, value) + can.onmotion.clear(can, can.ui.project), can.onmotion.clear(can, can.ui.content) can.onimport[can.Option("scale")](can, can._msg) }, }) -Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["count", "begin_time", "zone", "id", "type", "name", "text"], +Volcanos(chat.ONEXPORT, {help: "导出数据", list: [mdb.COUNT, "begin_time", mdb.ZONE, mdb.ID, mdb.TYPE, mdb.NAME, mdb.TEXT], name: function(can, task) { return task.name }, text: function(can, task) { return task.name+": "+(task.text||"") }, level: function(can, task) { return "l-"+(task.level||3)+": "+(task.name||"") }, score: function(can, task) { return "s-"+(task.level||3)+": "+(task.name||"") }, title: function(can, task) { return task.zone+": "+(task.type||"") }, - style: function(can, task) { return ["item", task.status, "id"+task.id, "l"+(task.level||""), "s"+(task.score||"")].join(" ") }, + style: function(can, task) { return [html.ITEM, task.status, mdb.ID+task.id, "l"+(task.level||""), "s"+(task.score||"")].join(ice.SP) }, + head: function(can, scale) { + switch (scale) { + case "year": + case "long": + return + } + return [scale].concat(can.user.info.language == "en"? ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]); + }, }) diff --git a/proto.js b/proto.js index 5b8d24bc..09ac61fa 100644 --- a/proto.js +++ b/proto.js @@ -375,7 +375,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack: isCmdMode: function(value) { return can.Mode() == "cmd" }, isFullMode: function(value) { return can.Mode() == "full" }, isFloatMode: function(value) { return can.Mode() == "float" }, - Mode: function(value) { return can.Conf("mode", value) }, + Mode: function(value) { return can.Conf(ice.MODE, value) }, ConfDefault: function(value) { can.core.Item(value, function(k, v) { can.Conf(k) || can.Conf(k, v) }) }, ConfHeight: function(value) { return can.Conf(html.HEIGHT, value) }, ConfWidth: function(value) { return can.Conf(html.WIDTH, value) }, @@ -387,8 +387,8 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack: } res = can.core.Value(can._conf, arguments[i], arguments[i+1]) } - if (res == undefined && key.indexOf("feature.") == -1) { - return can.Conf(can.core.Keys("feature", key)) + if (res == undefined && key.indexOf(ctx.FEATURE+ice.PT) == -1) { + return can.Conf(can.core.Keys(ctx.FEATURE, key)) } return res }, _conf: {},