From 968f15104ce5de1430d59c992cc94dd0d69a2ed2 Mon Sep 17 00:00:00 2001 From: shy Date: Sat, 20 Jul 2024 20:50:29 +0800 Subject: [PATCH] add some --- index.css | 6 +- panel/header.js | 5 +- plugin/table.js | 420 ++++++++++++++++++++++++------------------------ proto.js | 1 + 4 files changed, 219 insertions(+), 213 deletions(-) diff --git a/index.css b/index.css index 367146d9..b310f2e4 100644 --- a/index.css +++ b/index.css @@ -113,6 +113,7 @@ body.en { --card-button:3; } body.mobile { --footer-height:60px; --svg-font-size:13px; --project-width:240px; + --body-bg-color:var(--plugin-bg-color); } body.cmd.web.code.vimer { --code-line-height:24px; } /* element */ @@ -482,7 +483,8 @@ input.select[type=button]:focus { border:var(--box-notice); } input.select[type=button] { border:var(--input-border); padding:0 var(--button-padding); } input[type=button] { border:var(--input-border); border-radius:var(--button-radius); } input[type=button]:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } -input[type=button].danger:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +input[type=button].danger:hover { color:var(--danger-fg-color); } +// input[type=button].danger:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } input[type=button].notice:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } input[type=button].danger { color:var(--danger-bg-color) !important; } input[type=button].notice { border:var(--box-notice); } @@ -586,7 +588,7 @@ div.float:hover { box-shadow:var(--notice-box-shadow); } fieldset.plugin { box-shadow:var(--plugin-box-shadow); border-radius:var(--plugin-radius); } fieldset.story { box-shadow:var(--plugin-box-shadow); border-radius:var(--plugin-radius); } fieldset.float { box-shadow:var(--float-box-shadow); border:var(--plugin-border); border-radius:var(--plugin-radius); } -fieldset:not(.panel):hover { box-shadow:var(--notice-box-shadow); } +fieldset.plugin:hover { box-shadow:var(--notice-box-shadow); } body.light fieldset.plugin>legend { box-shadow:var(--legend-box-shadow); margin-right:var(--legend-margin); } body.light fieldset.story>legend { box-shadow:var(--legend-box-shadow); margin-right:var(--legend-margin); } body.light fieldset.vimer fieldset.story>legend { margin-right:var(--input-margin); padding:0 var(--input-padding); } diff --git a/panel/header.js b/panel/header.js index 3b00fb6a..cc341c5c 100644 --- a/panel/header.js +++ b/panel/header.js @@ -187,8 +187,9 @@ Volcanos(chat.ONEXPORT, { language: function(can) { return can.user.info.language }, avatar: function(can) { return can.misc.Resource(can, can.user.info.avatar == "void"? "": can.user.info.avatar) }, background: function(can) { return can.user.info.background == "void"? "": can.user.info.background }, - theme: function(can) { return can._theme || can.misc.SearchOrConf(can, chat.THEME) || can.__theme || (can.base.isNight()? html.DARK: html.LIGHT) }, - height: function(can) { return can._target.offsetHeight }, + theme: function(can) { return can._theme || can.misc.SearchOrConf(can, chat.THEME) || can.__theme || "" }, +// || (can.base.isNight()? html.DARK: html.LIGHT) }, +height: function(can) { return can._target.offsetHeight }, }) Volcanos(chat.ONPLUGIN, { location: shy("请求地址", {copy: function(can) { can.user.copy(msg._event, can, location.href) }}, [web.LINK, ice.LIST, ice.COPY], function(can, msg, cb) { diff --git a/plugin/table.js b/plugin/table.js index 33d5708a..ea361a58 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -127,218 +127,220 @@ Volcanos(chat.ONIMPORT, { item._select == undefined && can.db.hash[0] && (item._select = can.db.hash[0] == item._hash) return {view: [[html.ITEM, item.type, item.role, item.status]], title: item.title||item.nick, list: [ can.onimport._icons(can, item), - ].concat( - can.onimport._nick(can, item), - item._label||[], [ - item.action && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}, - ]), _init: function(target) { target._item = item, item._item = target, can.ui[item.path] = target - item._select && can.onmotion.delay(can, function() { target.click() }) - }, onclick: function(event) { + ].concat(can.onimport._nick(can, item), item._label||[], [ + item.action && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}, + ]), _init: function(target) { target._item = item, item._item = target, can.ui[item.path] = target + item._select && can.onmotion.delay(can, function() { target.click() }) + }, onclick: function(event) { + can.db.value = item, can.onexport.hash(can, item._hash), can.onexport.title(can, item._title) + cb(event) + }, oncontextmenu: function(event) { + can.onimport._menu(event, can, item, cbs) + }} + }, + item: function(can, item, cb, cbs, _target) { + return can.page.Append(can, _target||can.ui.project||can._output, [can.onimport._item(can, item, function(event) { var target = event.currentTarget + can.onmotion.select(can, target.parentNode, html.DIV_ITEM, target) + can.onengine.signal(can, "onproject", can.request(event, {type: "item", query: can.page.getquery(can, can._fields)+","+item.path})) + var show = target._list && can.onmotion.toggle(can, target._list); if (show === false) { return } cb(event, item, show, target) + }, cbs)])._target + }, + _itemselect: function(can, target) { + can.page.Select(can, can.ui.project, html.DIV_ITEM, function(target) { can.page.ClassList.del(can, target, html.SELECT) }) + for (var p = target; p; p = p.parentNode.previousElementSibling) { can.page.ClassList.add(can, p, html.SELECT), can.onmotion.toggle(can, p.nextSibling, true) } + }, + itemlist: function(can, list, cb, cbs, target) { if (!list || list.length == 0) { return } + if (!target) { return can.core.List(list, function(value) { can.onimport.item(can, value, cb, cbs) }) } + if (!target._list) { target._list = can.page.insertBefore(can, [html.LIST], target.nextSibling, target.parentNode) } + return can.page.Append(can, target._list, can.core.List(list, function(item) { + return can.onimport._item(can, item, function(event) { var target = event.currentTarget + if (target._list && target._list.childElementCount > 0 && target._list && can.onmotion.toggle(can, target._list) == false) { return } + can.onimport._itemselect(can, target), cb && cb(event, item, target._list && true, target) + }, cbs) + })), target._list + }, + tree: function(can, list, cb, cbs, target, node, field, split) { node = node||{"": target||can.ui.project||can._output}, field = field||nfs.PATH, split = split||nfs.PS + can.core.List(list, function(item) { var key = item[field]; key && can.core.List(key.split(split), function(value, index, array) { if (!value) { return } + var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return } + last && node[last] && can.page.Select(can, node[last].previousSibling, "div.expand", function(target) { target.innerHTML == "" && (target.innerHTML = can.page.unicode.closes) }) + item.expand = item.expand||item._select||(can.db.hash && (can.db.hash[0] == key)) + item._hash = item._hash||item.hash||item.zone||item.path||item.name + item._title = item._title||item.name||item.path||item.path||item.hash + var ui = can.page.Append(can, node[last], [{view: html.ITEM, list: [ + {view: [[html.EXPAND], html.DIV, (index==array.length-1? "": can.page.unicode.closes)]}, + {view: [mdb.NAME], list: [{text: [value, "", html.NAME]}].concat(item._label||[])}, + item.action && {view: [mdb.ICON], list: [{icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}]}, + ], onclick: function(event) { var target = event.currentTarget + if (index < array.length-1 && !can.page.ClassList.set(can, ui[html.EXPAND], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE))) { return } can.db.value = item, can.onexport.hash(can, item._hash), can.onexport.title(can, item._title) - cb(event) + can.onimport._itemselect(can, target), can.base.isFunc(cb) && cb(event, item, ui.item) + node[key] && can.page.ClassList.add(can, node[key].previousSibling, html.SELECT) + if (node[name].childElementCount == 2) { can.onmotion.delay(can, function() { node[name].firstChild.click() }) } }, oncontextmenu: function(event) { can.onimport._menu(event, can, item, cbs) - }} - }, - item: function(can, item, cb, cbs, _target) { - return can.page.Append(can, _target||can.ui.project||can._output, [can.onimport._item(can, item, function(event) { var target = event.currentTarget - can.onmotion.select(can, target.parentNode, html.DIV_ITEM, target) - can.onengine.signal(can, "onproject", can.request(event, {type: "item", query: can.page.getquery(can, can._fields)+","+item.path})) - var show = target._list && can.onmotion.toggle(can, target._list); if (show === false) { return } cb(event, item, show, target) - }, cbs)])._target - }, - _itemselect: function(can, target) { - can.page.Select(can, can.ui.project, html.DIV_ITEM, function(target) { can.page.ClassList.del(can, target, html.SELECT) }) - for (var p = target; p; p = p.parentNode.previousElementSibling) { can.page.ClassList.add(can, p, html.SELECT), can.onmotion.toggle(can, p.nextSibling, true) } - }, - itemlist: function(can, list, cb, cbs, target) { if (!list || list.length == 0) { return } - if (!target) { return can.core.List(list, function(value) { can.onimport.item(can, value, cb, cbs) }) } - if (!target._list) { target._list = can.page.insertBefore(can, [html.LIST], target.nextSibling, target.parentNode) } - return can.page.Append(can, target._list, can.core.List(list, function(item) { - return can.onimport._item(can, item, function(event) { var target = event.currentTarget - if (target._list && target._list.childElementCount > 0 && target._list && can.onmotion.toggle(can, target._list) == false) { return } - can.onimport._itemselect(can, target), cb && cb(event, item, target._list && true, target) - }, cbs) - })), target._list - }, - tree: function(can, list, cb, cbs, target, node, field, split) { node = node||{"": target||can.ui.project||can._output}, field = field||nfs.PATH, split = split||nfs.PS - can.core.List(list, function(item) { var key = item[field]; key && can.core.List(key.split(split), function(value, index, array) { if (!value) { return } - var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return } - last && node[last] && can.page.Select(can, node[last].previousSibling, "div.expand", function(target) { target.innerHTML == "" && (target.innerHTML = can.page.unicode.closes) }) - item.expand = item.expand||item._select||(can.db.hash && (can.db.hash[0] == key)) - item._hash = item._hash||item.hash||item.zone||item.path||item.name - item._title = item._title||item.name||item.path||item.path||item.hash - var ui = can.page.Append(can, node[last], [{view: html.ITEM, list: [ - {view: [[html.EXPAND], html.DIV, (index==array.length-1? "": can.page.unicode.closes)]}, - {view: [mdb.NAME], list: [{text: [value, "", html.NAME]}].concat(item._label||[])}, - item.action && {view: [mdb.ICON], list: [{icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}]}, - ], onclick: function(event) { var target = event.currentTarget - if (index < array.length-1 && !can.page.ClassList.set(can, ui[html.EXPAND], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE))) { return } - can.db.value = item, can.onexport.hash(can, item._hash), can.onexport.title(can, item._title) - can.onimport._itemselect(can, target), can.base.isFunc(cb) && cb(event, item, ui.item) - node[key] && can.page.ClassList.add(can, node[key].previousSibling, html.SELECT) - if (node[name].childElementCount == 2) { can.onmotion.delay(can, function() { node[name].firstChild.click() }) } - }, oncontextmenu: function(event) { - can.onimport._menu(event, can, item, cbs) - }, _init: item._init}, {view: [[html.LIST, html.HIDE]]}]); node[name] = ui.list, item.expand && ui.item.click() - }) }); return node - }, - tabs: function(can, list, cb, cbs, action) { action = action||can.ui.tabs||can._action; return can.page.Append(can, action, can.core.List(list, function(tabs) { if (typeof tabs == code.STRING) { tabs = {name: tabs} } - function close(target) { - if (can.page.ClassList.has(can, target, html.SELECT)) { - var next = can.page.tagis(target.nextSibling, html.DIV_TABS)? target.nextSibling: can.page.tagis(target.previousSibling, html.DIV_TABS)? target.previousSibling: null - if (!next) { return true } next && next.click() - } can.page.Remove(can, target), can.onexport.tabs && can.onexport.tabs(can) - } - return {view: [[html.TABS, tabs.type, tabs.role, tabs.status]], title: tabs.title||tabs.text, list: [].concat( - can.onimport._icons(can, tabs), can.onimport._nick(can, tabs), {icon: mdb.DELETE, onclick: function(event) { tabs._target._close(), can.onkeymap.prevent(event) }} - ), onclick: function(event) { - can.onmotion.delay(can, function() { can.onmotion.scrollIntoView(can, tabs._target) }) - if (can.page.ClassList.has(can, tabs._target, html.SELECT)) { return } - can.onmotion.select(can, action, html.DIV_TABS, tabs._target), can.base.isFunc(cb) && cb(event, tabs) - }, oncontextmenu: function(event) { var target = tabs._target, _action = can.page.parseAction(can, tabs) - var menu = tabs._menu||shy(function(event, button) { can.Update(event, [ctx.ACTION, button]) }) - can.user.carte(event, can, kit.Dict( - "Close", function(event) { target._close() }, - "Close Other", function(event) { target.click(), can.page.SelectChild(can, action, html.DIV_TABS, function(target) { target == tabs._target || target._close() }) }, - "Rename Tabs", function(event) { can.user.input(event, can, [mdb.NAME], function(list) { - can.page.SelectOne(can, target, html.SPAN, function(target) { can.page.Modify(can, target, list[0]||tabs.name) }) - }) }, menu.meta - ), ["Close", "Close Other", "Rename Tabs", ""].concat(can.base.getValid(menu.list, can.core.Item(menu.meta)), _action), function(event, button, meta) { + }, _init: item._init}, {view: [[html.LIST, html.HIDE]]}]); node[name] = ui.list, item.expand && ui.item.click() + }) }); return node + }, + tabs: function(can, list, cb, cbs, action) { action = action||can.ui.tabs||can._action; return can.page.Append(can, action, can.core.List(list, function(tabs) { if (typeof tabs == code.STRING) { tabs = {name: tabs} } + function close(target) { + if (can.page.ClassList.has(can, target, html.SELECT)) { + var next = can.page.tagis(target.nextSibling, html.DIV_TABS)? target.nextSibling: can.page.tagis(target.previousSibling, html.DIV_TABS)? target.previousSibling: null + if (!next) { return true } next && next.click() + } can.page.Remove(can, target), can.onexport.tabs && can.onexport.tabs(can) + } + return {view: [[html.TABS, tabs.type, tabs.role, tabs.status]], title: tabs.title||tabs.text, list: [].concat( + can.onimport._icons(can, tabs), can.onimport._nick(can, tabs), {icon: mdb.DELETE, onclick: function(event) { tabs._target._close(), can.onkeymap.prevent(event) }} + ), onclick: function(event) { + can.onmotion.delay(can, function() { can.onmotion.scrollIntoView(can, tabs._target) }) + if (can.page.ClassList.has(can, tabs._target, html.SELECT)) { return } + can.onmotion.select(can, action, html.DIV_TABS, tabs._target), can.base.isFunc(cb) && cb(event, tabs) + }, oncontextmenu: function(event) { var target = tabs._target, _action = can.page.parseAction(can, tabs) + var menu = tabs._menu||shy(function(event, button) { can.Update(event, [ctx.ACTION, button]) }) + can.user.carte(event, can, kit.Dict( + "Close", function(event) { target._close() }, + "Close Other", function(event) { target.click(), can.page.SelectChild(can, action, html.DIV_TABS, function(target) { target == tabs._target || target._close() }) }, + "Rename Tabs", function(event) { can.user.input(event, can, [mdb.NAME], function(list) { + can.page.SelectOne(can, target, html.SPAN, function(target) { can.page.Modify(can, target, list[0]||tabs.name) }) + }) }, menu.meta + ), ["Close", "Close Other", "Rename Tabs", ""].concat(can.base.getValid(menu.list, can.core.Item(menu.meta)), _action), function(event, button, meta) { (meta[button]||menu)(can.request(event, tabs), button, meta) - }) - }, _init: function(target) { - action == can._action && can.page.Select(can, can._action, "div.item._space.state", function(space) { can.page.insertBefore(can, target, space) }) - target._item = tabs, tabs._target = target, target._close = function() { close(target) || cbs && cbs(tabs) }, target.click() - can.page.Modify(can, target, {draggable: true, - ondragstart: function(event) { action._drop = function(before) { before.parentNode == action && action.insertBefore(target, before), can.onexport.tabs(can) } }, - ondragover: function(event) { event.preventDefault(), action._drop(event.target) }, - }) - }} - }))._target }, - tabsCache: function(can, value, target, cb) { if (value._tabs) { return value._tabs.click() } - value._tabs = can.onimport.tabs(can, [value], function() { can.page.isSelect(target) || can.onmotion.delay(can, function() { target.click() }) - can.page.SelectOne(can, can._status, html.LEGEND) || can.onmotion.cache(can, function() { return value._hash }, can._status) - if (can.onmotion.cache(can, function() { return value._hash }, can.ui.content, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) } - can.Status(value); if (can.base.isFunc(cb)) { return cb() } var msg = cb - if (msg.Append(ctx.INDEX)) { msg.Table(function(value, index) { - index == 0 && can.onappend.plugin(can, value, function(sub) { can.db.value._content_plugin = sub, can.onimport.layout(can) }, can.ui.content) - index == 1 && can.onappend.plugin(can, value, function(sub) { - can.onmotion.toggle(can, can.ui.display, true) - can.db.value._display_plugin = sub, can.onimport.layout(can) }, can.ui.display) - index == 2 && can.onappend.plugin(can, value, function(sub) { - can.onmotion.toggle(can, can.ui.profile, true) - can.db.value._profile_plugin = sub, can.onimport.layout(can) }, can.ui.profile) - can.onmotion.delay(can, function() { can.onimport.layout(can) }) - can.onmotion.delay(can, function() { can.onimport.layout(can) }, 100) - can.onmotion.delay(can, function() { can.onimport.layout(can) }, 300) - }) } else { can.onappend.table(can, msg), can.onappend.board(can, msg) } - }, function() { delete(value._tabs), can.onmotion.cacheClear(can, value._hash, can.ui.content, can.ui.profile, can.ui.display) }) - }, - tool: function(can, list, cb, target, status) { target = target||can._status, status = status||can._status - var height = can.base.Max(html.PLUG_HEIGHT, can.ConfHeight()-3*html.ACTION_HEIGHT, 240), width = can.base.Max(html.PLUG_WIDTH, can.ConfWidth()-(can.user.isMobile? 0: html.PROJECT_WIDTH)) - can.core.Next(list.reverse(), function(meta, next) { can.base.isString(meta) && (meta = {index: meta}), meta.mode = html.FLOAT - can.onimport.plug(can, meta, function(sub) { - sub.onexport.output = function() { - can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, "", html.WIDTH, "", html.MAX_WIDTH, "") - sub.onimport.size(sub, height, width, false), can.onmotion.delay(can, function() { sub.onimport.size(sub, height, width, false) }) - }, sub.onimport.size(sub, height, width, false) - can.page.Append(can, sub._legend,[{text: [can.page.unicode.remove, "", mdb.REMOVE], onclick: function(event) { - can.page.Remove(can, sub._target), can.page.Remove(can, sub._legend), can.onexport.tool(can), can.onkeymap.prevent(event) - }}]), sub._legend._target = sub._target, sub._legend._meta = {index: meta.index} - status.appendChild(sub._legend), sub._legend.oncontextmenu = sub._legend.onclick, sub._legend.onclick = function(event) { can.misc.Event(event, can, function(msg) { - if (can.page.SelectOne(can, status, "legend.select", function(target) { - can.onmotion.hidden(can, target._target), can.page.ClassList.del(can, target, html.SELECT); return target }) == sub._legend) { return } - can.onmotion.select(can, status, html.LEGEND, sub._legend), can.onmotion.toggle(can, sub._target, true) - can.onmotion.select(can, target, html.FIELDSET_PLUG, sub._target) - sub.onimport.size(sub, sub.ConfHeight(), sub.ConfWidth(), false) - if (sub._delay_init || meta.msg) { sub._delay_init = false, meta.msg = false, (sub._inputs && sub._inputs.list || sub._inputs && sub._inputs.refresh) && sub.Update() } - }) }, sub._delay_init = true, sub.select = function(show) { - if (show && can.page.ClassList.has(can, sub._legend, html.SELECT)) { return sub } - return sub._legend.click(), sub - }, can.onmotion.hidden(can, sub._target) - sub.hidden = function() { can.onmotion.hidden(can, sub._target), can.page.ClassList.del(can, sub._legend, html.SELECT) } - sub.onaction._close = function() { can.page.Remove(can, sub._target), can.page.Remove(can, sub._legend), can.onexport.tool(can) } - sub.onaction.close = function() { sub.select() }, can.base.isFunc(cb) && cb(sub), can.onexport.tool(can) - next() - }, target) }) + }, _init: function(target) { + action == can._action && can.page.Select(can, can._action, "div.item._space.state", function(space) { can.page.insertBefore(can, target, space) }) + target._item = tabs, tabs._target = target, target._close = function() { close(target) || cbs && cbs(tabs) }, target.click() + can.page.Modify(can, target, {draggable: true, + ondragstart: function(event) { action._drop = function(before) { before.parentNode == action && action.insertBefore(target, before), can.onexport.tabs(can) } }, + ondragover: function(event) { event.preventDefault(), action._drop(event.target) }, + }) + }} + }))._target }, + tabsCache: function(can, value, target, cb) { if (value._tabs) { return value._tabs.click() } + value._tabs = can.onimport.tabs(can, [value], function() { can.page.isSelect(target) || can.onmotion.delay(can, function() { target.click() }) + can.page.SelectOne(can, can._status, html.LEGEND) || can.onmotion.cache(can, function() { return value._hash }, can._status) + if (can.onmotion.cache(can, function() { return value._hash }, can.ui.content, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) } + can.Status(value); if (can.base.isFunc(cb)) { return cb() } var msg = cb + if (msg.Append(ctx.INDEX)) { msg.Table(function(value, index) { + index == 0 && can.onappend.plugin(can, value, function(sub) { can.db.value._content_plugin = sub, can.onimport.layout(can) }, can.ui.content) + index == 1 && can.onappend.plugin(can, value, function(sub) { + can.onmotion.toggle(can, can.ui.display, true) + can.db.value._display_plugin = sub, can.onimport.layout(can) }, can.ui.display) + index == 2 && can.onappend.plugin(can, value, function(sub) { + can.onmotion.toggle(can, can.ui.profile, true) + can.db.value._profile_plugin = sub, can.onimport.layout(can) }, can.ui.profile) + can.onmotion.delay(can, function() { can.onimport.layout(can) }) + can.onmotion.delay(can, function() { can.onimport.layout(can) }, 100) + can.onmotion.delay(can, function() { can.onimport.layout(can) }, 300) + }) } else { can.onappend.table(can, msg), can.onappend.board(can, msg) } + }, function() { delete(value._tabs), can.onmotion.cacheClear(can, value._hash, can.ui.content, can.ui.profile, can.ui.display) }) + }, + tool: function(can, list, cb, target, status) { target = target||can._status, status = status||can._status + var height = can.base.Max(html.PLUG_HEIGHT, can.ConfHeight()-3*html.ACTION_HEIGHT, 240), width = can.base.Max(html.PLUG_WIDTH, can.ConfWidth()-(can.user.isMobile? 0: html.PROJECT_WIDTH)) + can.core.Next(list.reverse(), function(meta, next) { can.base.isString(meta) && (meta = {index: meta}), meta.mode = html.FLOAT + can.onimport.plug(can, meta, function(sub) { + sub.onexport.output = function() { + can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, "", html.WIDTH, "", html.MAX_WIDTH, "") + sub.onimport.size(sub, height, width, false), can.onmotion.delay(can, function() { sub.onimport.size(sub, height, width, false) }) + }, sub.onimport.size(sub, height, width, false) + can.page.Append(can, sub._legend,[{text: [can.page.unicode.remove, "", mdb.REMOVE], onclick: function(event) { + can.page.Remove(can, sub._target), can.page.Remove(can, sub._legend), can.onexport.tool(can), can.onkeymap.prevent(event) + }}]), sub._legend._target = sub._target, sub._legend._meta = {index: meta.index} + status.appendChild(sub._legend), sub._legend.oncontextmenu = sub._legend.onclick, sub._legend.onclick = function(event) { can.misc.Event(event, can, function(msg) { + if (can.page.SelectOne(can, status, "legend.select", function(target) { + can.onmotion.hidden(can, target._target), can.page.ClassList.del(can, target, html.SELECT); return target }) == sub._legend) { return } + can.onmotion.select(can, status, html.LEGEND, sub._legend), can.onmotion.toggle(can, sub._target, true) + can.onmotion.select(can, target, html.FIELDSET_PLUG, sub._target) + sub.onimport.size(sub, sub.ConfHeight(), sub.ConfWidth(), false) + if (sub._delay_init || meta.msg) { sub._delay_init = false, meta.msg = false, (sub._inputs && sub._inputs.list || sub._inputs && sub._inputs.refresh) && sub.Update() } + }) }, sub._delay_init = true, sub.select = function(show) { + if (show && can.page.ClassList.has(can, sub._legend, html.SELECT)) { return sub } + return sub._legend.click(), sub + }, can.onmotion.hidden(can, sub._target) + sub.hidden = function() { can.onmotion.hidden(can, sub._target), can.page.ClassList.del(can, sub._legend, html.SELECT) } + sub.onaction._close = function() { can.page.Remove(can, sub._target), can.page.Remove(can, sub._legend), can.onexport.tool(can) } + sub.onaction.close = function() { sub.select() }, can.base.isFunc(cb) && cb(sub), can.onexport.tool(can) + next() + }, target) + }) + }, + plug: function(can, meta, cb, target, field) { if (!meta || !meta.index) { return } + meta.type = meta.type||html.PLUG, meta.name = meta.index, can.onappend.plugin(can, meta, function(sub) { sub.sup = can + sub.onaction.close = function() { can.onmotion.hidden(can, target) }, can.base.isFunc(cb) && cb(sub) + }, target, field) + }, + float: function(can, index, args) { args = args||[] + can.user.toast(can, can.user.isMobile) + can.user.isMobile? can.user.jumps(can.misc.MergePodCmd(can, {cmd: index+"/"+args.join("/")})): can.onappend._float(can, index, args) + }, +}) +Volcanos(chat.ONLAYOUT, { + _init: function(can, height, width) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) }, + zone: function(can, height, width) { can.onlayout._init(can, height, width) }, + result: function(can, height, width) { can.onlayout._init(can, height, width) }, + simple: function(can, height, width) { can.onlayout._init(can, height, width) }, + output: function(can, height, width) { can.onlayout._init(can, height, width) }, + float: function(can, height, width) { can.onlayout._init(can, height, width) }, + full: function(can, height, width) { can.onlayout._init(can, height, width) }, + cmd: function(can, height, width) { can.onlayout._init(can, height, width) }, +}) +Volcanos(chat.ONEXPORT, { + title: function(can, title) { can.sup.onexport.title.apply(can.sup.onexport, [can.sup].concat(can.core.List(arguments).slice(1))) }, + action_value: function(can, key, def) { var value = can.Action(key); return can.base.isIn(value, ice.AUTO, key, undefined)? def: value }, + tabs: function(can) {}, + tool: function(can) { can.misc.sessionStorage(can, [can.ConfIndex(), "tool"], JSON.stringify(can.page.Select(can, can._status, html.LEGEND, function(target) { return target._meta }))) }, + hash: function(can, hash) { hash = typeof hash == code.STRING? hash.split(":").concat(can.core.List(arguments).slice(2)||[]): hash || can.core.Item(can.Option(), function(key, value) { return value||"" }) + return can.sup.onexport.hash(can.sup, hash) + }, + session: function(can, key, value) { return can.sup.onexport.session(can.sup, key, value) }, + storage: function(can, key, value) { return can.sup.onexport.storage(can.sup, key, value) }, + table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return } var res = [msg.append && msg.append.join(mdb.FS)] + msg.Table(function(line, index, array) { res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS)) }) + return res.join(lex.NL) + }, + board: function(can) { var msg = can._msg; return msg.Result() }, +}) +Volcanos(chat.ONACTION, { + onkeydown: function(event, can) { + if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs||can._action, html.DIV_TABS)) { return } + can.onkeymap._parse(event, can) + }, +}) +Volcanos(chat.ONKEYMAP, { + escape: function(event, can) {}, enter: function(event, can) {}, + ctrln: function(event, can) { can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS) }, + space: function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }, + tabx: function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { target._close() }) }, + tabs: function(event, can) {}, + _mode: { + plugin: { + Escape: shy("清理屏幕", function(event, can) { can.onkeymap.escape(event, can) }), + Enter: shy("执行操作", function(event, can) { can.onkeymap.enter(event, can) }), + " ": shy("搜索项目", function(event, can) { can.onkeymap.space(event, can) }), + f: shy("搜索项目", function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }), + a: shy("展示项目", function(event, can) { can.ui.project && (can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)) }), + v: shy("展示预览", function(event, can) { can.ui.profile && (can.onmotion.toggle(can, can.ui.profile), can.onimport.layout(can)) }), + r: shy("展示输出", function(event, can) { can.ui.display && (can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can)) }), + p: shy("添加插件", function(event, can) { can.sup.onaction["添加工具"](event, can.sup) }), + t: shy("添加标签", function(event, can) { can.onkeymap.tabs(event, can) }), + x: shy("添加标签", function(event, can) { can.onkeymap.tabx(event, can) }), + l: shy("打开右边标签", function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { + var next = target.nextSibling; next && can.page.ClassList.has(can, next, html.TABS) && next.click() + }) }), + h: shy("打开左边标签", function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { + var prev = target.previousSibling; prev && can.page.ClassList.has(can, prev, html.TABS) && prev.click() + }) }), }, - plug: function(can, meta, cb, target, field) { if (!meta || !meta.index) { return } - meta.type = meta.type||html.PLUG, meta.name = meta.index, can.onappend.plugin(can, meta, function(sub) { sub.sup = can - sub.onaction.close = function() { can.onmotion.hidden(can, target) }, can.base.isFunc(cb) && cb(sub) - }, target, field) - }, - }) - Volcanos(chat.ONLAYOUT, { - _init: function(can, height, width) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) }, - zone: function(can, height, width) { can.onlayout._init(can, height, width) }, - result: function(can, height, width) { can.onlayout._init(can, height, width) }, - simple: function(can, height, width) { can.onlayout._init(can, height, width) }, - output: function(can, height, width) { can.onlayout._init(can, height, width) }, - float: function(can, height, width) { can.onlayout._init(can, height, width) }, - full: function(can, height, width) { can.onlayout._init(can, height, width) }, - cmd: function(can, height, width) { can.onlayout._init(can, height, width) }, - }) - Volcanos(chat.ONEXPORT, { - title: function(can, title) { can.sup.onexport.title.apply(can.sup.onexport, [can.sup].concat(can.core.List(arguments).slice(1))) }, - action_value: function(can, key, def) { var value = can.Action(key); return can.base.isIn(value, ice.AUTO, key, undefined)? def: value }, - tabs: function(can) {}, - tool: function(can) { can.misc.sessionStorage(can, [can.ConfIndex(), "tool"], JSON.stringify(can.page.Select(can, can._status, html.LEGEND, function(target) { return target._meta }))) }, - hash: function(can, hash) { hash = typeof hash == code.STRING? hash.split(":").concat(can.core.List(arguments).slice(2)||[]): hash || can.core.Item(can.Option(), function(key, value) { return value||"" }) - return can.sup.onexport.hash(can.sup, hash) - }, - session: function(can, key, value) { return can.sup.onexport.session(can.sup, key, value) }, - storage: function(can, key, value) { return can.sup.onexport.storage(can.sup, key, value) }, - table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return } var res = [msg.append && msg.append.join(mdb.FS)] - msg.Table(function(line, index, array) { res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS)) }) - return res.join(lex.NL) - }, - board: function(can) { var msg = can._msg; return msg.Result() }, - }) - Volcanos(chat.ONACTION, { - onkeydown: function(event, can) { - if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs||can._action, html.DIV_TABS)) { return } - can.onkeymap._parse(event, can) - }, - }) - Volcanos(chat.ONKEYMAP, { - escape: function(event, can) {}, enter: function(event, can) {}, - ctrln: function(event, can) { can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS) }, - space: function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }, - tabx: function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { target._close() }) }, - tabs: function(event, can) {}, - _mode: { - plugin: { - Escape: shy("清理屏幕", function(event, can) { can.onkeymap.escape(event, can) }), - Enter: shy("执行操作", function(event, can) { can.onkeymap.enter(event, can) }), - " ": shy("搜索项目", function(event, can) { can.onkeymap.space(event, can) }), - f: shy("搜索项目", function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }), - a: shy("展示项目", function(event, can) { can.ui.project && (can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)) }), - v: shy("展示预览", function(event, can) { can.ui.profile && (can.onmotion.toggle(can, can.ui.profile), can.onimport.layout(can)) }), - r: shy("展示输出", function(event, can) { can.ui.display && (can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can)) }), - p: shy("添加插件", function(event, can) { can.sup.onaction["添加工具"](event, can.sup) }), - t: shy("添加标签", function(event, can) { can.onkeymap.tabs(event, can) }), - x: shy("添加标签", function(event, can) { can.onkeymap.tabx(event, can) }), - l: shy("打开右边标签", function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { - var next = target.nextSibling; next && can.page.ClassList.has(can, next, html.TABS) && next.click() - }) }), - h: shy("打开左边标签", function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { - var prev = target.previousSibling; prev && can.page.ClassList.has(can, prev, html.TABS) && prev.click() - }) }), - }, - }, _engine: {}, - }) - Volcanos(chat.ONINPUTS, { - _nameicon: function(event, can, msg, target, name) { - can.page.Appends(can, can._output, msg.Table(function(value) { - return {view: html.ITEM, list: [{img: can.misc.Resource(can, value.icons)}, - {view: html.CONTAINER, list: [{view: [html.TITLE, "", value[name]||value[mdb.NAME]]}, - can.onappend.label(can, value, {version: icon.version, time: icon.compile}), - ]}, - ], onclick: function(event) { can.showIcons(value[name]||value[mdb.NAME], value.icons) }} - })) - }, - dream: function(event, can, msg, target, name) { can.sup.sub.oninputs._nameicon(event, can, msg, target, name) }, - }) - + }, _engine: {}, +}) +Volcanos(chat.ONINPUTS, { + _nameicon: function(event, can, msg, target, name) { + can.page.Appends(can, can._output, msg.Table(function(value) { + return {view: html.ITEM, list: [{img: can.misc.Resource(can, value.icons)}, + {view: html.CONTAINER, list: [{view: [html.TITLE, "", value[name]||value[mdb.NAME]]}, + can.onappend.label(can, value, {version: icon.version, time: icon.compile}), + ]}, + ], onclick: function(event) { can.showIcons(value[name]||value[mdb.NAME], value.icons) }} + })) + }, + dream: function(event, can, msg, target, name) { can.sup.sub.oninputs._nameicon(event, can, msg, target, name) }, +}) + diff --git a/proto.js b/proto.js index b53a00b8..85b36cfe 100644 --- a/proto.js +++ b/proto.js @@ -50,6 +50,7 @@ var Volcanos = shy({iceberg: "", volcano: "", frame: chat.FRAME_JS, _cache: {}, function set(key, value) { if (key == "_method") { return msg._method = value } if (key == "action" && value.indexOf("