From 6fe918550a21a73757fdb25ef9cc5c660bab186e Mon Sep 17 00:00:00 2001 From: shy Date: Wed, 13 Mar 2024 20:35:35 +0800 Subject: [PATCH] add some --- frame.js | 12 +++++++++++- index.css | 1 + plugin/input/icon.js | 15 ++++++--------- plugin/input/icons.js | 13 +++++-------- plugin/input/key.js | 9 ++------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/frame.js b/frame.js index d854eff1..cf6d19c9 100644 --- a/frame.js +++ b/frame.js @@ -790,6 +790,15 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { (meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true) }, target._can = sub, can.base.Copy(sub, can.onfigure[input], true), sub._name = sub._path = path sub._target._close = sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }, sub.hidden = function() { return !can.page.isDisplay(sub._target) } + sub.layout = function(msg) { + can.onappend._status(sub, [mdb.TOTAL]), sub.Status(mdb.TOTAL, msg.Length()), can.onmotion.toggle(can, sub._status, msg.Length() > 5) + msg.append.length == 1 && can.page.ClassList.add(can, sub._target, chat.SIMPLE) + can.page.style(can, sub._target, html.MAX_HEIGHT, can.page.height()/2, html.MIN_WIDTH, target.offsetWidth, html.MAX_WIDTH, can.page.width()/2) + can.onlayout.figure({target: target}, can, sub._target, false, 200, function(height, width) { + can.page.style(can, sub._output, html.MAX_HEIGHT, height-sub._status.offsetHeight) + sub.Status(html.HEIGHT, parseInt(height-sub._status.offsetHeight)), sub.Status(html.WIDTH, parseInt(width)) + }) + } meta.mode && can.onappend.style(sub, meta.mode), can.page.style(sub, sub._target, meta.style), can.base.isFunc(meta._init) && meta._init(sub, sub._target) show(sub, cb) }, can._root._target) @@ -827,7 +836,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro }); return height+margin }, background: function(can, url, target) { can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, - figure: function(event, can, target, right, min) { if (!event || !event.target) { return {} } target = target||can._fields||can._target + figure: function(event, can, target, right, min, cb) { if (!event || !event.target) { return {} } target = target||can._fields||can._target var rect = event.target == document.body? {left: can.page.width()/2, top: can.page.height()/2, right: can.page.width()/2, bottom: can.page.height()/2}: (event.currentTarget||event.target).getBoundingClientRect() var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0, height = can.base.Max(height, can.page.height()-top) @@ -849,6 +858,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro } can.page.style(can, target, html.MAX_HEIGHT, top+height-layout.top) can.page.style(can, target, html.MAX_WIDTH, left+width-layout.left) + cb && cb(top+height-layout.top, left+width-layout.left) }); can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) return layout }, diff --git a/index.css b/index.css index a8e89c76..9af36572 100644 --- a/index.css +++ b/index.css @@ -222,6 +222,7 @@ fieldset>div.header img { height:var(--action-height); float:right; } fieldset>form.option>div.item:not(.icon) { margin-right:var(--button-margin); } fieldset>div.action>div.item:not(:last-child) { margin-right:var(--button-margin); } fieldset.input>legend { display:none; } +fieldset.input.icons table { width:100%; text-align:center; } fieldset.input.key div.action { display:none; } fieldset.input.key div.output table.content { font-family:var(--code-font-family); width:100%; } fieldset.input.key div.output table.content td:first-child { cursor:pointer; } diff --git a/plugin/input/icon.js b/plugin/input/icon.js index fa38ccb9..29a08f99 100644 --- a/plugin/input/icon.js +++ b/plugin/input/icon.js @@ -9,11 +9,10 @@ Volcanos(chat.ONFIGURE, {icon: { can.close(), can.base.isFunc(cb) && cb(can, value.name, target.value) target._icon.className = value.name }}]) - }), can.onappend._status(can, [mdb.TOTAL]), can.Status(mdb.TOTAL, msg.Length()) - can.onlayout.figure({target: target}, can, can._target, false, 200) + }), can.layout(msg) }, - onclick: function(event, can, meta, target, cbs) { can.onmotion.focus(can, target) }, - onfocus: function(event, can, meta, target, cbs) { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } + onfocus: function(event, can, meta, target, cbs, mod) { meta._force && mod.onclick(event, can, meta, target, cbs) }, + onclick: function(event, can, meta, target, cbs) { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } target._icon = target._icon || can.page.insertBefore(can, [{type: "i"}], target) meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value) }) }, @@ -23,11 +22,9 @@ Volcanos(chat.ONFIGURE, {icon: { can.onmotion.hidden(can, target, target.title.indexOf(event.target.value) > -1) }) can.page.Select(can, sub._output, html.TR, function(target) { - can.onmotion.hidden(can, target, - can.page.Select(can, target, html.TD, function(target) { - if (!can.page.ClassList.has(can, target, html.HIDE)) { return target } - }).length > 0 - ) + can.onmotion.hidden(can, target, can.page.Select(can, target, html.TD, function(target) { + if (!can.page.ClassList.has(can, target, html.HIDE)) { return target } + }).length > 0) }) }, }}) diff --git a/plugin/input/icons.js b/plugin/input/icons.js index 8cd14f8e..5085cc32 100644 --- a/plugin/input/icons.js +++ b/plugin/input/icons.js @@ -2,18 +2,15 @@ Volcanos(chat.ONFIGURE, {icons: { _load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [mdb.ICONS], function(msg) { can._show(can, msg, cb, target, name) }) }, - _show: function(can, msg, cb, target, name) { can.onmotion.clear(can) - var table = can.page.Append(can, can._output, [{type: html.TABLE}])._target, tr + _show: function(can, msg, cb, target, name) { var table = can.page.Appends(can, can._output, [{type: html.TABLE}])._target, tr msg.Table(function(value, index) { if (index%5 == 0) { tr = can.page.Append(can, table, [{type: html.TR}])._target } can.page.Append(can, tr, [{type: html.TD, title: value.icons, list: [{img: can.misc.Resource(can, value.icons), style: {width: 60, height: 60}}], onclick: function() { - can.close(), can.base.isFunc(cb) && cb(can, value.icons, target.value) - target._icon.src = can.misc.Resource(can, value.icons) + can.close(), can.base.isFunc(cb) && cb(can, value.icons, target.value), target._icon.src = can.misc.Resource(can, value.icons) }}]) - }), can.onappend._status(can, [mdb.TOTAL]), can.Status(mdb.TOTAL, msg.Length()) - can.onlayout.figure({target: target}, can, can._target, false, 200) + }), can.layout(msg) }, - onclick: function(event, can, meta, target, cbs) { can.onmotion.focus(can, target) }, - onfocus: function(event, can, meta, target, cbs) { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } + onfocus: function(event, can, meta, target, cbs, mod) { meta._force && mod.onclick(event, can, meta, target, cbs) }, + onclick: function(event, can, meta, target, cbs) { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } target._icon = target._icon || can.page.insertBefore(can, [{img: can.misc.Resource(can, "usr/icons/icebergs.png") }], target) meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value) }) }, diff --git a/plugin/input/key.js b/plugin/input/key.js index 8abdfab8..37c76234 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -16,8 +16,7 @@ Volcanos(chat.ONFIGURE, {key: { can.close(); if (msg.cb && msg.cb[index]) { return msg.cb[index](value) } var _cb = can.Conf("select"); if (_cb) { return _cb(target.value = value) } can.base.isFunc(cb) && cb(can, value, target.value) }} - }), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()), can.Status("index", "-1") - can.onmotion.toggle(can, can._status, msg.Length() > 5), can.onmotion.toggle(can, can._target, can.Status("total") > 0) + }), can.layout(msg) can.showIcons = function(value, icons, title) { can.ui = can.ui||{} if (!can.ui.img) { can.ui.img = can.page.insertBefore(can, [{type: html.IMG}], target) @@ -31,10 +30,6 @@ Volcanos(chat.ONFIGURE, {key: { } can.core.CallFunc([can.oninputs, "_show"], {event: event, can: can, msg: msg, target: target, name: name}) can.core.CallFunc([can.sup.sub, "oninputs", name], {event: event, can: can, msg: msg, target: target, name: name}) - // can.core.CallFunc([can.sup.sub, "oninputs", "_show"], {event: event, can: can, msg: msg, target: target, name: name}) - can.page.style(can, can._output, html.MAX_HEIGHT, can.page.height()/2, html.MIN_WIDTH, target.offsetWidth, html.MAX_WIDTH, can.Conf("style.width")||can.page.width()/2) - msg.append.length == 1 && can.page.ClassList.add(can, can._target, chat.SIMPLE) - can.onlayout.figure({target: target}, can, can._target, false, 200) }, onfocus: function(event, can, meta, target, cbs, mod) { meta._force && mod.onclick(event, can, meta, target, cbs) }, onclick: function(event, can, meta, target, cbs) { (target.value == "" || meta._force) && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } @@ -42,7 +37,7 @@ Volcanos(chat.ONFIGURE, {key: { meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value) }) }, onblur: function(event, can, sub, cb) { sub && can.onmotion.delay(can, sub.close, 300) }, - onkeydown: function(event, can, meta, cb, target, sub, last) { if (event.key == code.TAB) { return } + onkeyup: function(event, can, meta, cb, target, sub, last) { if (event.key == code.TAB) { return } if (event.key == code.ENTER) { return meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event, target.value)? sub && sub.close(): last(event) } if (!sub) { return } can.onmotion.toggle(can, sub._target, true) sub.hidden() || can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return meta.select && (sub.close(), meta.select(target.value = td.innerText)), cb(sub, td.innerText, target.value), td })