From 0e50b34b2f2ecad4bc7aea8c1e250298ecf6e973 Mon Sep 17 00:00:00 2001 From: shylinux Date: Fri, 28 Apr 2023 22:34:53 +0800 Subject: [PATCH] add macosx --- frame.js | 39 ++++++++++++++++++++++++++++--------- index.css | 5 ++++- lib/core.js | 2 +- lib/user.js | 2 +- plugin/local/code/inner.css | 7 +++---- plugin/local/code/inner.js | 31 ++++++++++++++++++----------- plugin/local/team/plan.css | 1 + plugin/local/wiki/word.js | 15 +++++++++++--- plugin/state.js | 10 +++++++++- plugin/story/trend.js | 13 ++++--------- proto.js | 8 ++++---- 11 files changed, 89 insertions(+), 44 deletions(-) diff --git a/frame.js b/frame.js index 57c04e11..bb22b50b 100644 --- a/frame.js +++ b/frame.js @@ -145,7 +145,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { msg.RunAction(event, can.core.Value(sub, chat._OUTPUTS_CURRENT), [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button) }) }) }), can.base.isFunc(cb) && cb(sub) + sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)) if (can.user.isMobile && !can.user.isLandscape()) { return } + if (can.page.ClassList.has(can, sub._target, html.OUTPUT)) { return } sub.isCmdMode() && !can.base.isIn(meta.index, web.CODE_VIMER, web.CODE_INNER, web.WIKI_WORD) && can.page.insertBefore(can, can.user.header(can), sub._output, sub._fields) }); return sub }, @@ -211,7 +213,13 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }), item), "", action) }), meta }, - _output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event); if (msg.RunAction(event, can, cmds)) { return } + _output0: function(can, meta, event, cmds, cb, silent) { + var msg = can.request(event) + if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION) { + var sub = can.core.Value(can, chat._OUTPUTS_CURRENT) + if (msg.RunAction(event, sub, cmds)) { return } + } + 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]}) var action = meta.feature[cmds[1]]; if (can.base.isFunc(action)) { cb = cb||function() { can.Update() } return action.list && action.list.length > 0? can.user.input(event, can, action.list, function(data) { @@ -244,7 +252,6 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.core.CallFunc([sub, chat.ONIMPORT, chat._INIT], {can: sub, msg: msg, cb: function(msg) { action === false || can.onmotion.clear(can, can._action), sub.onappend._action(sub, can.Conf(ice.MSG_ACTION)||msg.Option(ice.MSG_ACTION), action||can._action) action === false || sub.onappend._status(sub, sub.onexport&&sub.onexport.list||msg.Option(ice.MSG_STATUS)), can.user.isMobile || sub.onappend.tools(sub, msg) - // can.isCmdMode() && can.onappend.style(can, can.misc.Search(can, ctx.STYLE), can._target) can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, ""), can.onappend.style(sub, sub.Conf(ctx.STYLE)) if (can.isFullMode() || can.isCmdMode()) { can.onimport.size(can, can.page.height(), can.page.width(), true) } can.onmotion.story.auto(can, can._output), can.onexport.output(can, msg), can.base.isFunc(cb) && cb(msg) @@ -359,6 +366,22 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { item.style && can.onappend.style(can, item.style, target) }}])[item.name]; return _input }, + scroll: function(can, target, offset, length) { if (target.scrollHeight/target.offsetHeight == 1) { return } + if (offset) { var ui = can.page.Append(can, target, [{view: "scrollbar", style: {height: length*target.offsetHeight*2}}]) + target.addEventListener("scroll", function(event) { can.page.style(can, ui.scrollbar, html.TOP, target.scrollTop+offset*target.offsetHeight, html.RIGHT, -target.scrollLeft) }) + return ui.scrollbar + } + var ui = can.page.Append(can, target, [{view: "scrollbar", style: {height: target.offsetHeight*target.offsetHeight/target.scrollHeight}, + onmousedown: function(event) { var begin = {top: target.scrollTop, y: event.y} + window._scroll = function(event) { target.scrollTop = begin.top+(event.y-begin.y)/target.offsetHeight*target.scrollHeight, can.onkeymap.prevent(event) } + }, + }]) + target.addEventListener("scroll", function(event) { can.onmotion.delayOnce(can, function() { can.page.style(can, ui.scrollbar, "visibility", "visible") + can.page.style(can, ui.scrollbar, html.TOP, target.scrollTop+target.scrollTop/target.scrollHeight*target.offsetHeight, html.RIGHT, -target.scrollLeft) + can.onmotion.delayOnce(can, function() { can.page.style(can, ui.scrollbar, "visibility", "hidden") }, 3000, target._delay_scroll = target._delay_scroll||[]) + }, 0, target._delay_scroll = target._delay_scroll||[]) }) + return ui.scrollbar + }, select: function(can, select, item) { var carte return can.page.Append(can, select.parentNode, [{type: html.INPUT, data: {className: html.SELECT, type: html.BUTTON, name: item.name, value: item.value||item.values[0], title: item.name}, onclick: function(event) { var target = event.target if (carte) { return carte.close(), carte = null } carte = can.user.carte(event, can, {}, item.values, function(event, button) { carte = null; if (target.value == button) { return } @@ -467,7 +490,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, _float: function(can, index, args, cb) { can.onappend.plugin(can, {index: index, args: args, mode: chat.FLOAT}, function(sub) { can.getActionSize(function(left, top, width, height) { var offset = can.user.isMobile? 0: height/4 - sub.onimport.size(sub, sub.ConfHeight(height-offset)-html.ACTION_HEIGHT, sub.ConfWidth(can.base.Max(width, 800)), true) + sub.onimport.size(sub, sub.ConfHeight(height-offset), sub.ConfWidth(width*3/4), true) can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+offset}), can.base.isFunc(cb) && cb(sub) }), sub.onaction.close = function() { can.page.Remove(can, sub._target) } }, can._root._target) }, @@ -609,11 +632,9 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }) }) }, delayLong: function(can, cb, interval, key) { can.onmotion.delay(can, cb, interval||300, key) }, delayOnce: function(can, cb, interval, list) { - if (!list) { - var call = can.misc.fileLine(2), _call = "_delay_"+call.file+call.line - list = can[_call] = can[_call]||{} - } can.core.Item(list, function(key) { delete(list[key]) }) - var key = can.base.Time(null, "%H:%M:%S.%s"); can.onmotion.delay(can, list[key] = function() { list[key] && cb() }, interval) + if (!list) { var call = can.misc.fileLine(2), _call = "_delay_"+call.file+call.line; list = can[_call] = can[_call]||{} } + can.core.Item(list, function(key) { clearTimeout(list[key]._timer), delete(list[key]) }) + var key = can.base.Time(null, "%H:%M:%S.%s"); list[key] = {}, list[key] = can.onmotion.delay(can, function() { list[key] && cb() }, interval)||{} }, delay: function(can, cb, interval, key) { if (!key) { @@ -624,7 +645,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { } can._delay_list = can._delay_list||shy({}, []) var last = can._delay_list.meta[key]||0, self = can._delay_list.meta[key] = can._delay_list.list.push(cb) - can.core.Timer(interval||30, function() { cb(self, last, can._delay_list.meta[key]) }) + return can.core.Timer(interval||30, function() { cb(self, last, can._delay_list.meta[key]) }) }, clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), target }, cache: function(can, next) { var list = can.base.getValid(can.base.Obj(can.core.List(arguments).slice(2)), [can._output]) diff --git a/index.css b/index.css index af6c2692..85126235 100644 --- a/index.css +++ b/index.css @@ -231,7 +231,7 @@ div.layout.flex>* { float:left; clear:none; } div.output { position:relative; } fieldset.story { clear:both; } div.tabs { position:relative; } -div.tabs span.icon { visibility:hidden; } +div.tabs span.icon { margin-left:5px; visibility:hidden; } div.tabs span.icon:hover { background-color:aliceblue; color:black; } div.tabs>div:hover span.icon { visibility:visible; } div.action>div.tabs:hover span.icon { visibility:visible; } @@ -390,6 +390,7 @@ fieldset.plugin.parse.cmd>legend { display:none; } fieldset.plugin.parse.cmd>form.option { display:none; } fieldset.plugin.parse.cmd>div.action { display:none; } fieldset.plugin.parse.cmd>div.status { display:none; } +fieldset.inner.float>div.status { display:none; } fieldset.plan div.output div.content>table.content { height:100%; width:100%; } fieldset.xterm div.layout div.output { border-left:gray solid 1px; border-top:gray solid 1px; } fieldset.xterm div.layout div.output.select { border:blue solid 1px; } @@ -404,6 +405,8 @@ fieldset.web.chat.iframe>div.output { overflow:hidden; } fieldset.qrcode>div.output div.code { padding:0; } fieldset.can.view { font-size:14px; } fieldset.can.data { font-size:14px; } +div.scrollbar { background-color:#0000ff66; width:10px; position:absolute; right:0; top:0; transition:width .3s 1s; visibility:hidden; } +div.scrollbar:hover { width:50px; transition:width .1s;} body.en fieldset.input.date.float>div.action>div.item.select { margin:0 5px; } body.en fieldset.input.date.float>div.action>div.item.select select { width:60px; } body.en fieldset.input.date.float>div.action>div.item.select.year select { width:106px; } diff --git a/lib/core.js b/lib/core.js index d85f5a63..b7afef4b 100644 --- a/lib/core.js +++ b/lib/core.js @@ -120,6 +120,6 @@ Volcanos("core", { typeof cbs == lang.FUNCTION && cbs(timer, interval): setTimeout(function() { loop(i+1) }, interval.interval||interval[i+1]) } interval = typeof interval == lang.OBJECT? interval: [interval]; if (interval.interval == 0) { return cb(), timer } var delay = interval.delay||interval.interval/2||interval[0] - return typeof cb == lang.FUNCTION && setTimeout(function() { loop(0) }, delay), timer + return typeof cb == lang.FUNCTION && (timer._timer = setTimeout(function() { loop(0) }, delay)), timer }), }) diff --git a/lib/user.js b/lib/user.js index 410d4c0a..e2c15d4b 100644 --- a/lib/user.js +++ b/lib/user.js @@ -120,7 +120,7 @@ Volcanos("user", { can.onaction && can.onaction[button] && can.core.CallFunc([can.onaction, button], [event, can, button]) meta._style == nfs.PATH || can.onmotion.clearCarte(can) }) } function remove_sub(carte) { carte._sub && can.page.Remove(can, carte._sub._target), delete(carte._sub) } - var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, meta._style||"", chat.FLOAT]], list: can.core.List(list, function(item, index) { + var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, meta._style||can.base.replaceAll(can._index||"", nfs.PT, lex.SP)||"", chat.FLOAT]], list: can.core.List(list, function(item, index) { if (item == web.FILTER) { return {input: [html.FILTER, function(event) { if (event.key == lang.ESCAPE) { return carte.close() } can.onkeymap.selectItems(event, can, carte._target) }], _init: function(target) { can.onmotion.delay(can, function() { target.placeholder = "search in "+(can.core.List(list, function(item) { if (item) { return item } }).length-1)+" items", target.focus() }) } diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 9f09d7c8..4169ea0a 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -68,17 +68,14 @@ body.black fieldset.inner>div.output div.content td.text span.string { color:mag body.black fieldset.inner>div.output div.content td.text span.object { color:cyan; } body.white fieldset.inner.cmd>div.output { background-color:aliceblue; } body.white fieldset.inner.cmd>div.output div.content { background-color:white; } -body.white fieldset.inner.cmd>div.output>div.layout>div.tabs div.select { background-color:white; } -body.white fieldset.inner.cmd>div.output>div.layout>div.tabs div:hover { background-color:white; } +body.white fieldset.inner.cmd>div.output>div.layout>div.tabs div:not(.select):not(:hover) { background-color:white; } body.white fieldset.inner.cmd>div.output>div.layout>div.path { background-color:white; } body.white fieldset.inner>div.output div.content tr:hover { background-color:aliceblue; } body.white fieldset.inner>div.output div.content tr.select { background-color:aliceblue; } body.white fieldset.inner>div.output div.content tr.select td.line { background-color:steelblue; color:white; } - body.white fieldset.inner.cmd>div.output { background-color:transparent; } body.white fieldset.inner.cmd>div.output div.content { background-color:transparent; } body.white fieldset.inner.cmd>div.output>div.layout>div.path { background-color:transparent; } - body.mobile fieldset.inner>form.option input[name=file] { width:90px; } body.mobile fieldset.word fieldset.inner>form.option input[type=text] { display:none; } body.windows fieldset.inner>div.output { overflow:hidden; } @@ -94,4 +91,6 @@ tr.line>td.line { text-align:right; padding:0 10px; position:sticky; left:0; } tr.line>td.text { line-height:20px; white-space:pre; padding-left:10px; width:100%; cursor:text; } tr.line.delete { background-color:#ff000036; color:gray; } tr.line.insert { background-color:#00800036; } +div.scrollbar.insert { background-color:#00800036; width:30px; visibility:visible; } +div.scrollbar.delete { background-color:#ff000036; width:30px; visibility:visible; } fieldset.inner>div.output>div.project div.item.modify { background-color:#00800036; } \ No newline at end of file diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index e4c31a72..7b11f545 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -289,6 +289,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { var key = can.onexport. if (msg.Length() > 0) { can.onsyntax._change(can, msg), can.onaction.rerankLine(can, "tr.line:not(.delete)>td.line") can.page.Select(can, content, "tr.line.delete>td.line", function(target) { target.innerHTML = "" }) } else { can.core.List(msg.Result().split(lex.NL), function(item) { can.onaction.appendLine(can, item) }) } + can.onmotion.delay(can, function() { can.onappend.scroll(can, can.ui.content) }) can.onengine.signal(can, VIEW_CREATE, msg), can.base.isFunc(cb) && cb(msg._content = content._root? content._root: content) } can.require(["inner/syntax.js"], function() { var parse = can.onexport.parse(can); can.Conf(chat.PLUG) && (can.onsyntax[parse] = can.Conf(chat.PLUG)) var p = can.onsyntax[parse]; !p? can.runAction({}, mdb.PLUGIN, [parse, file, path], function(msg) { show(p = can.onsyntax[parse] = can.base.Obj(msg.Result()||"{}")) }): show(p) @@ -335,18 +336,22 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { var key = can.onexport. }).join("")); return line }, _change: function(can, msg) { var _delete = [], _insert = [], deletes = [], inserts = [] + function scroll(item, type, length, index) { + var tr = can.onaction.appendLine(can, item); can.onappend.style(can, type, tr) + if (index > 0) { return } + + var line = can.onexport.line(can, tr)||can.onexport.line(can, tr.previousSibling) + can.onmotion.delay(can, function() { + var bar = can.onappend.scroll(can, can.ui.content, line/can.ui.content._max, length/can.ui.content._max); can.onappend.style(can, type, bar) + bar.onclick = function() { can.onimport.tabview(can, "", can.Option(nfs.FILE), line) } + }) + } function append() { var rest = [] - while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[0]) { - can.onaction.appendLine(can, deletes[0]), deletes = deletes.slice(1), inserts = inserts.slice(1) - } - while (deletes.length > 0 && inserts.length > 0 && deletes[deletes.length-1] == inserts[inserts.length-1]) { - can.onaction.appendLine(can, deletes[deletes.length-1]), deletes.pop(), inserts.pop() - } - while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[inserts.length-1]) { - rest.push(deletes[0]), deletes = deletes.slice(1), inserts.pop() - } - can.core.List(deletes, function(item) { can.onappend.style(can, mdb.DELETE, can.onaction.appendLine(can, item)) }), deletes = [] - can.core.List(inserts, function(item) { can.onappend.style(can, mdb.INSERT, can.onaction.appendLine(can, item)) }), inserts = [] + while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[0]) { can.onaction.appendLine(can, deletes[0]), deletes = deletes.slice(1), inserts = inserts.slice(1) } + while (deletes.length > 0 && inserts.length > 0 && deletes[deletes.length-1] == inserts[inserts.length-1]) { can.onaction.appendLine(can, deletes[deletes.length-1]), deletes.pop(), inserts.pop() } + while (deletes.length > 0 && inserts.length > 0 && deletes[0] == inserts[inserts.length-1]) { rest.push(deletes[0]), deletes = deletes.slice(1), inserts.pop() } + can.core.List(deletes, function(item, index, list) { scroll(item, mdb.DELETE, list.length, index) }), deletes = [] + can.core.List(inserts, function(item, index, list) { scroll(item, mdb.INSERT, list.length, index) }), inserts = [] can.core.List(rest, function(item) { can.onaction.appendLine(can, item) }) } msg.Table(function(value) { can.core.List(value.text.split(lex.NL), function(item, index, list) { @@ -360,6 +365,10 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { var key = can.onexport. _delete.push(item), _insert.push(item), deletes.push(_delete.join("")), _delete = [], inserts.push(_insert.join("")), _insert = [] } else { append(), can.onaction.appendLine(can, item) } }) }), _delete.length > 0 && deletes.push(_delete.join("")), _insert.length > 0 && inserts.push(_insert.join("")), append() + var list = can.page.Select(can, can.ui.content, "tr.insert,tr.delete") + list && list[0] && can.onmotion.delay(can, function() { + can.onimport.tabview(can, "", can.Option(nfs.FILE), can.onexport.line(can, list[0].previousSibling)) + }) }, }) Volcanos(chat.ONACTION, { diff --git a/plugin/local/team/plan.css b/plugin/local/team/plan.css index ac162d91..56fc4d07 100644 --- a/plugin/local/team/plan.css +++ b/plugin/local/team/plan.css @@ -6,6 +6,7 @@ fieldset.plan>div.output table.content.plan td.select { background-color:#5066b9 fieldset.plan>div.output table.content.plan td:hover { background-color:#5066b945; } fieldset.plan>div.output table.content.plan td.over { background-color:#5066b945; } fieldset.plan>div.output table.content.plan td div { color:white; } +// fieldset.plan>div.output table.content.plan td div:not(.date) { height:100%; text-align:center; } fieldset.plan>div.output table.content.plan td div.date { color:gray; } fieldset.plan>div.output table.content.plan td div.date span.lunar { font-size:12px; } fieldset.plan>div.output table.content.plan td div.date span.lunar.fest { color:red; } diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 82811843..4e3cc404 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -138,9 +138,18 @@ Volcanos(chat.ONDETAIL, {list: ["删除"], }) }, grid: function(sub) { sub.page.styleClass(sub, sub.ui.content, "content grid") }, - "开讲": function(event, can) { can.sup.ondetail.show(can, 0) }, - "网格": function(event, can) { can.sup.ondetail.grid(can) }, - "快闪": function(event, can) { can.sup.ondetail.flash(can) }, + "开讲": function(event, can) { + can.page.SelectChild(can, can.ui.content, "*", function(target) { can.page.styleWidth(can, target, "") }) + can.sup.ondetail.show(can, 0) + }, + "网格": function(event, can) { + can.onlayout.expand(can, can.ui.content, 320) + can.sup.ondetail.grid(can) + }, + "快闪": function(event, can) { + can.page.SelectChild(can, can.ui.content, "*", function(target) { can.page.styleWidth(can, target, "") }) + can.sup.ondetail.flash(can) + }, "大纲": function(event, can) { can.onmotion.toggle(can, can.ui.project) }, "首页": function(event, can) { can.sup.ondetail.show(can, 0) }, diff --git a/plugin/state.js b/plugin/state.js index 249c2cf3..7c99dde0 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -22,6 +22,14 @@ Volcanos(chat.ONIMPORT, { can.page.SelectChild(can, can._output, html.TABLE, function(target) { can.page.style(can, target, html.MAX_HEIGHT, height, html.DISPLAY, html.BLOCK) }) }, can.run(event, (!msg.Option("_index") || msg.Option("_index") == can._index || can._index.indexOf("can.") == 0? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true) } + sub._target.onclick = function() { + can.page.SelectChild(can, can._output, "fieldset", function(target) { + can.page.style(can, target, "z-index", "9") + }) + can.page.style(can, sub._target, "z-index", "10") + } + can.page.style(can, sub._target, "z-index", "10") + can.onappend.style(can, "move", sub._target) can.base.isFunc(cb) && cb(sub) }) }) }, @@ -189,7 +197,7 @@ Volcanos(chat.ONEXPORT, { action: function(can, button, line) {}, record: function(can, value, key, line) {}, actionHeight: function(can) { return can.page.ClassList.has(can, can._target, html.OUTPUT)? 0: html.ACTION_HEIGHT }, - statusHeight: function(can) { return !can.page.isDisplay(can._status) || can._status.innerHTML == "" || (can._target.offsetHeight > 0 && can._status.offsetHeight == 0)? 0: html.ACTION_HEIGHT }, + statusHeight: function(can) { return can.page.ClassList.has(can, can._target, html.OUTPUT) || !can.page.isDisplay(can._status) || can._status.innerHTML == "" || (can._target.offsetHeight > 0 && can._status.offsetHeight == 0)? 0: html.ACTION_HEIGHT }, title: function(can, title) { can.isCmdMode() && can.user.title(title) }, link: function(can) { var meta = can.Conf(), args = can.Option(); can.misc.Search(can, log.DEBUG) == ice.TRUE && (args[log.DEBUG] = ice.TRUE) args.pod = meta.pod, args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == web.WIKI_WORD && (args.cmd = args.path) diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 5ba80a03..a05c99a9 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -72,16 +72,11 @@ Volcanos(chat.ONACTION, {list: [[ice.VIEW, "趋势图", "柱状图", "折线图" }) Volcanos(chat.ONDETAIL, { onmouseenter: function(event, can, item) { can.Status(item) }, - onclick: function(event, can, item) { - can.run(can.request(event, item, can.Option()), [mdb.DETAIL], function(msg) { - can.getActionSize(function(left, top, width, height) { msg.Option(html.HEIGHT, height*3/4), msg.Option(html.WIDTH, width) - can.sup.onimport._field(can.sup, msg, function(sub) { - sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width), true) - can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4}) - }) - }) + onclick: function(event, can, item) { can.run(can.request(event, item, can.Option()), [mdb.DETAIL], function(msg) { + can.getActionSize(function(left, top, width, height) { msg.Option(html.HEIGHT, height*3/4), msg.Option(html.WIDTH, width*3/4) + can.sup.onimport._field(can.sup, msg, function(sub) { can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4}) }) }) - }, + }) }, }) Volcanos(chat.ONEXPORT, {list: ["from", "commit", "total", "max", "date", "text", "add", "del"], height: function(can) { var height = can.Action(html.HEIGHT) diff --git a/proto.js b/proto.js index f386f306..16746d3f 100644 --- a/proto.js +++ b/proto.js @@ -378,16 +378,16 @@ try { if (typeof(window) == lang.OBJECT) { var meta = Volcanos.meta var target, begin window.onmousedown = function(event) { for (target = event.target; target; target = target.parentNode) { if (target == document.body) { target = null; return } - if (can.page.tagis(target, html.DIV) && can.page.ClassList.has(can, target, html.OUTPUT)) { target = null; return } + // if (can.page.tagis(target, html.DIV) && can.page.ClassList.has(can, target, html.OUTPUT)) { target = null; return } if (can.page.tagis(event.target, html.INPUT, html.TEXTAREA)) { target = null; return } if (can.page.ClassList.has(can, target, "move")) { break } } begin = {left: target.offsetLeft, top: target.offsetTop, x: event.x, y: event.y} - can.page.SelectChild(can, document.body, ".float", function(target) { can.page.style(can, target, "z-index") && can.page.style(can, target, "z-index", 10) }), can.page.style(can, target, "z-index", 11) - }, window.onmouseup = function(event) { target = null, begin = {} } + can.page.SelectChild(can, target.parentNode, "*", function(target) { can.page.style(can, target, "z-index") && can.page.style(can, target, "z-index", 9) }), can.page.style(can, target, "z-index", 10) + }, window.onmouseup = function(event) { target = null, begin = {}, delete(window._scroll) } window.onmousemove = function(event) { target && can.page.style(can, target, html.LEFT, can.base.Min(begin.left + event.x - begin.x, 0, window.innerWidth-target.offsetWidth), html.TOP, can.base.Min(begin.top + event.y - begin.y, 0, window.innerHeight-html.ACTION_HEIGHT) - ) && can.onkeymap.prevent(event) } + ) && can.onkeymap.prevent(event), window._scroll && (window._scroll(event)) } window.ondblclick = function(event) { can.onkeymap.prevent(event) } window.onerror = function(message, source, lineno, colno, error) {