diff --git a/frame.js b/frame.js index c010d722..53efd421 100644 --- a/frame.js +++ b/frame.js @@ -418,12 +418,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (can.base.isArray(item)) { return } if (can.base.isObject(item)) { var meta = item; item = item._index } if (item == "plug") { return } var target = ui[item]; if (!can.page.isDisplay(target)) { return } - if (item == html.CONTENT) { - return defer.push(function() { - content_height = height, content_width = width - can.page.style(can, target, html.HEIGHT, height, html.WIDTH, width) - }) - } + if (item == html.CONTENT) { return defer.push(function() { can.page.style(can, target, html.HEIGHT, content_height = height, html.WIDTH, content_width = width) }) } + if (item == html.PROFILE) { width -= 1 } + if (item == html.PROJECT) { width -= 1 } if (type == FLOW) { var h = calc(item, target.offsetHeight, height) if (can.base.isObject(meta)) { meta.layout(h, width) } can.page.style(can, target, html.WIDTH, width), height -= h diff --git a/index.css b/index.css index da49ee50..b00f811e 100644 --- a/index.css +++ b/index.css @@ -342,7 +342,7 @@ fieldset.plugin.parse.cmd>div.status { display:none; } fieldset.plugin.inner.cmd>legend { display:none; } fieldset.plugin.inner.cmd>div.action { display:none; } fieldset.plugin.inner.cmd>form.option { display:none; } -fieldset.plan div.output table.content { height:100%; width:100%; } +fieldset.plan div.output div.content>table.content { height:100%; width:100%; } fieldset.xterm div.output { border-left:gray solid 1px; border-top:gray solid 1px; } fieldset.xterm div.layout div.output.select { border:blue solid 1px; } fieldset.xterm div.action>div.tabs.select { color:blue; } @@ -385,6 +385,7 @@ div.output.card div.item.stop { color:gray; } div.output.card div.item { padding:10px; border:#e7e7e7 solid 1px; margin:10px; width:240px; float:left; } div.output.card div.item>div.title { font-size:1.2rem; font-weight:bold; padding:10px; border-bottom:solid 1px #e7e7e7; } div.output.card div.item>div.content { padding:10px; height:45px; } +div.output.card div.action { text-align:right; width:100%; } body.white div.output.card div.item input[type=button] { background-color:transparent; } body.mobile div.output.card div.item { height:160px; float:none; } body.mobile.simple div.output.card div.item { width:100%; } diff --git a/panel/action.js b/panel/action.js index 36a0a4cb..884adae6 100644 --- a/panel/action.js +++ b/panel/action.js @@ -41,7 +41,10 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.misc.sessionStorage(can, "river:hide") == ice.TRUE && target.click() }); if (!can.Conf(chat.TOOL) && !can.user.mod.isCmd) { return } can._names = location.pathname can.Conf(chat.TOOL)? can.onappend.layout(can, can.core.List(can.Conf(chat.TOOL), function(item, index, list) { item.type = chat.PLUGIN - if (list.length == 1) { can.user.title(item.index), can.onaction._onaction_cmd(can), item.mode = chat.CMD, item.opts = can.misc.Search(can) } return item + if (list.length == 1) { + item.height = can.page.height()-2*html.ACTION_HEIGHT, item.width = can.page.width() + can.user.title(item.index), can.onaction._onaction_cmd(can), item.mode = chat.CMD, item.opts = can.misc.Search(can) + } return item }), FLOW).layout(window.innerHeight, window.innerWidth): can.runAction(can.request(), ctx.COMMAND, [], function(msg) { if (msg.Length() == 1) { can.onaction._onaction_cmd(can) } can.onimport._init(can, msg) }) diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 1e7a47bc..6917f2aa 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -1,26 +1,17 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can, target), can._display_heights = {} - can.ui = can.onappend.layout(can), can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.profile) - can.onimport[can.Option("scale")||team.WEEK](can, msg), can.onimport.layout(can) + can.list = {}; var ls = can.misc.SearchHash(can) + can.ui = can.onappend.layout(can), can.onmotion.hidden(can, can.ui.profile) + can.onimport[can.Option("scale")||team.WEEK](can, msg), can.Status(mdb.COUNT, msg.Length()), can.onimport.layout(can) + var item; if (can.isCmdMode() && ls.length > 0) { item = can.list[can.core.Keys(ls[0], ls[1])] } else if (can.sup.task) { item = can.list[can.core.Keys(can.sup.task.zone, can.sup.task.id)] } item && item.click() }, _content: function(can, msg, head, list, key, get, set) { var begin_time = can.base.Date(can.Option(team.BEGIN_TIME)); can.sup.task && (can.sup.task._target = null) var hash = {}; msg.Table(function(value, index) { var k = key(can.base.Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) }) can.ui.table = can.page.Append(can, can.ui.content, [{view: [[chat.CONTENT, team.PLAN], 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: [can.user.trans(can, week), html.TH]} } - if (col == 0) { return {text: [hour, html.TH]} } + if (row == 0) { return {text: [can.user.trans(can, week), html.TH]} } if (col == 0) { return {text: [hour, html.TH]} } return can.onimport._task(can, msg, get(begin_time, col, row, hash), set(begin_time, col, row)) })} - }) }])._target, can.onmotion.delay(can, function() { var target = can.sup.task && can.sup.task._target; target && target.click(), can.Status(mdb.COUNT, msg.Length()) - return - can.user.isMobile || can.isCmdMode() && can.page.Append(can, can._action, [{view: [["item", "time", "select"]], style: {"float": html.RIGHT, "padding": 5, "height": 21}, _init: function(target) { - can.onappend.figure(can, {action: "date"}, target, function(sub, value) { }), target.onmouseenter = target.click - can.core.Timer({interval: 100}, function() { - window.power? window.power().then(function(value) { - can.page.Appends(can, target, [{text: value+" "+can.base.Time()}]) - }): can.page.Appends(can, target, [{text: can.base.Time()}]) - }) - }}]) - }) + }) }])._target, can.onmotion.delay(can, function() { var target = can.sup.task && can.sup.task._target; target && target.click(), can.Status(mdb.COUNT, msg.Length()) }) }, _task: function(can, msg, list, time) { return {type: html.TD, className: time == can.base.Time().slice(0, time.length)? html.SELECT: "", ondblclick: function(event) { can.onaction.insertTask(event, can, time+can.base.Time().slice(time.length)) }, @@ -32,15 +23,13 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( can.onaction.modifyTask(event, can, task, team.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, {nick: task.name+ice.DF+task.text}, function() { can.onmotion.delay(can, function() { - can.onmotion.select(can, can.ui.content, html.TD, target.parentNode), can.onimport._profile(can, task), can.Status(mdb.COUNT, msg.Length()) - }) }, null, can.ui.project); task._target = target, target.onclick = function(event) { item.click() } - can.sup.task && can.sup.task.zone == task.zone && can.sup.task.id == task.id && (can.sup.task._target = target) - var ls = can.misc.SearchHash(can); if (ls[0] == task.zone && ls[1] == task.id) { can.sup.task = task } + can.onmotion.select(can, can.ui.content, html.TD, target.parentNode), can.onimport._profile(can, task), can.onimport._display(can, task), can.onimport.layout(can) + }) }, null, can.ui.project); task._target = target, target.onclick = function(event) { item.click() }, can.list[can.core.Keys(task.zone, task.id)] = target }} }), } }, _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) } + 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)) { 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: [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, [{ @@ -49,19 +38,20 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( ondblclick: function(event) { if ([ice.POD, mdb.ZONE, mdb.ID].indexOf(key) > -1) { return } 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"}) }, - }]) }), can.onmotion.story.auto(can, can.ui.profile), task[ctx.EXTRA_INDEX]? can.onimport._display(can, task): can.onimport.layout(can) + }]) }), can.onmotion.story.auto(can, can.ui.profile) }, _display: function(can, task) { can.onmotion.toggle(can, can.ui.display, true) - can.onappend.plugin(can, {index: task[ctx.EXTRA_INDEX], args: task[ctx.EXTRA_ARGS], height: can.ConfHeight()/2-2*html.ACTION_HEIGHT}, function(sub, meta) { + 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.display)) { return } + task[ctx.EXTRA_INDEX] && can.onappend.plugin(can, {index: task[ctx.EXTRA_INDEX], args: task[ctx.EXTRA_ARGS], height: can.ConfHeight()/2-2*html.ACTION_HEIGHT}, function(sub, meta) { sub.run = function(event, cmds, cb) { can.request(event, kit.Dict(team.TASK_POD, task.pod, team.TASK_ZONE, task.zone, team.TASK_ID, task.id)) can.page.style(can, sub._output, html.MAX_HEIGHT, ""), can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb) - }, can._plugins_display = (can._plugins_display||[]).concat([sub]) + } sub.onexport.output = function() { can.onmotion.delay(can, function() { - can._display_heights[[task.zone, task.id].join(ice.FS)] = can.base.Max(sub._target.offsetHeight, can.ConfHeight()/2), can.onimport.layout(can) - }) }, sub.onaction.close = function() { can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can) }, can.onimport.layout(can) + sub.onimport.size(sub, can._display_heights[[task.zone, task.id].join(ice.FS)] = can.base.Max(sub._target.offsetHeight, can.ConfHeight()/2), can.ConfWidth()-can.ui.project.offsetWidth) + can.onimport.layout(can) + }) }, sub.onaction.close = function() { can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can) } }, can.ui.display) }, - day: function(can, msg) { var head = [team.HOUR, team.TASK] var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)) } function key(time) { return can.base.Number(time.getHours(), 2) } @@ -70,7 +60,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( can.onimport._content(can, msg, head, list, key, get, set) }, week: function(can, msg) { var head = can.onexport.head(can, team.HOUR) - var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)+":00") } + var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)) } + // var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)+":00") } function key(time) { return time.getDay()+" "+can.base.Number(time.getHours(), 2) } function get(begin_time, col, row, hash) { return hash[col-1+" "+list[row]] } function set(begin_time, col, row) { return can.base.Time(can.base.DateAdd(begin_time, -begin_time.getDay()+col-1), "%y-%m-%d ")+list[row] } @@ -110,7 +101,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( function set(begin_time, col, row) { return begin+col-1+"-"+can.base.Number(row, 2) } can.onimport._content(can, msg, head, list, key, get, set) }, - layout: function(can) { can.page.styleHeight(can, can._output, can.ConfHeight()), can.page.styleHeight(can, can.ui.project, can.ConfHeight()) + layout: function(can) { + can.ui.layout(can.ConfHeight(), can.ConfWidth()) + return + can.page.styleHeight(can, can._output, can.ConfHeight()), can.page.styleHeight(can, can.ui.project, can.ConfHeight()) var height = can._display_heights[can.sup.task? [can.sup.task.zone, can.sup.task.id].join(ice.FS): ""]||html.ACTION_HEIGHT if (!can.ui.display.innerHTML || can.ui.display.style.display == html.NONE) { height = 0 } can.page.style(can, can.ui.table, html.HEIGHT, can.ConfHeight()-height, html.WIDTH, can.ConfWidth()-can.ui.project.offsetWidth-can.ui.profile.offsetWidth) @@ -137,10 +131,7 @@ Volcanos(chat.ONACTION, {list: [ can.runAction(event, mdb.INSERT, [mdb.ZONE, args[1], team.BEGIN_TIME, time].concat(args)) }) }, - modifyTask: function(event, can, task, key, value) { - can.runAction(can.request(event, task, can.Option()), mdb.MODIFY, [key, value], function() { can.Update() }) - }, - + modifyTask: function(event, can, task, key, value) { can.runAction(can.request(event, task, can.Option()), mdb.MODIFY, [key, value], function() { can.Update() }) }, _filter: function(event, can, key, value) { var count = 0 if (value == "all") { can.page.Select(can, can.ui.content, html.DIV_ITEM, function(item) { can.page.ClassList.del(can, item, html.HIDE), count++ }) @@ -156,7 +147,7 @@ Volcanos(chat.ONACTION, {list: [ }) Volcanos(chat.ONEXPORT, {list: [mdb.COUNT, team.BEGIN_TIME, mdb.ZONE, mdb.ID, mdb.TYPE, mdb.NAME, mdb.TEXT], span: function(can) { return kit.Dict(team.DAY, 24*3600*1000, team.WEEK, 7*24*3600*1000, team.MONTH, 30*24*3600*1000, team.YAER, 365*24*3600*1000, team.LONG, 365*24*3600*1000)[can.Option("scale")]||0 }, - hash: function(can, task) { if (!can.isCmdMode()) { return } location.hash = [task.zone, task.id].join(ice.FS) }, + hash: function(can, task) { if (!can.isCmdMode()) { return } location.hash = [task.zone, task.id].join(ice.DF) }, head: function(can, scale) { if ([team.YEAR, team.LONG].indexOf(scale) > -1) { return } return [scale].concat(can.user.time(can, "", "%W")) }, name: function(can, task) { return task.name }, text: function(can, task) { return task.name+": "+(task.text||"") },