mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt table.js
This commit is contained in:
parent
6d3f37c7bc
commit
ffac2c4016
27
frame.js
27
frame.js
@ -147,7 +147,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
var output = can.page.SelectOne(can, field, html.DIV_OUTPUT)
|
||||
var status = can.page.SelectOne(can, field, html.DIV_STATUS)
|
||||
var sub = Volcanos(meta.name, {_root: can._root||can, _follow: can.core.Keys(can._follow, meta.name), _target: field,
|
||||
_legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [], db: {}, ui: {},
|
||||
_legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [], db: {hash: [""]}, ui: {},
|
||||
Status: function(key, value) { if (can.base.isObject(key)) { return can.core.Item(key, sub.Status), key } try {
|
||||
can.page.Select(can, status, [[[html.SPAN, key]]], function(target) {
|
||||
if (key == web.SPACE && value) { value = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: value}), value) }
|
||||
@ -311,7 +311,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
can.misc.Search(can, log.DEBUG) == ice.TRUE && can.base.beginWith(display, "/require/src/") && delete(Volcanos.meta.cache[display])
|
||||
Volcanos(display, {_root: can._root, _follow: can.core.Keys(can._follow, display), _fields: can._target, _target: output, _path: display||chat.PLUGIN_TABLE_JS,
|
||||
_legend: can._legend, _option: can._option, _action: action||can._action, _output: output, _status: status||can._status,
|
||||
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, db: {hash:[""], value: {}}, ui: {layout: function() {}},
|
||||
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, db: {hash: [""], value: {}}, ui: {layout: function() {}},
|
||||
}, [display, msg.Option(ice.MSG_DISPLAY_CSS)||undefined, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf())
|
||||
sub.db.hash = can.base.getValid(can.isCmdMode()? can.misc.SearchHash(can): [], can.misc.localStorage(can, [sub.ConfSpace()||can.misc.Search(can, ice.POD), sub.ConfIndex(), "hash"]))||[]
|
||||
var last = can.sub; last && can.core.CallFunc([last, "onaction.hidden"], {can: last})
|
||||
@ -344,8 +344,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), can.Conf("_auto"), can.Mode())
|
||||
can.isCmdMode() && can.page.style(can, can._output, html.HEIGHT, sub.ConfHeight())
|
||||
can.onexport.output(sub, msg); if (can.Conf("_output")) { can.Conf("_output")(sub, msg) }
|
||||
} can.base.isFunc(cb) && cb(msg)
|
||||
}, target: output})
|
||||
} msg.Defer(), can.base.isFunc(cb) && cb(msg)
|
||||
}, target: output}), msg.Defer()
|
||||
})
|
||||
},
|
||||
_status: function(can, list, status, msg) { list && list.Option && (list = list.Option(ice.MSG_STATUS)||list)
|
||||
@ -475,6 +475,19 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
}}])
|
||||
}
|
||||
},
|
||||
filter: function(can, target, output) { output = output||target
|
||||
return can.onappend.input(can, {type: html.TEXT, name: web.FILTER, icon: icon.SEARCH, placeholder: "search in n items", onkeydown: function() {}, onkeyup: function(event) {
|
||||
if (event.key == code.ENTER) {
|
||||
can.page.Select(can, output, html.DIV_ITEM+":not(.hide)", function(target) { target.click() })
|
||||
} else if (event.key == code.ESCAPE) { event.currentTarget.value = "", event.currentTarget.blur()
|
||||
can.page.Select(can, output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, true) })
|
||||
} else { if (can.onkeymap.selectCtrlN(event, can, output, html.DIV_ITEM+":not(.filter):not(.hide)")) { return }
|
||||
can.page.Select(can, output, html.DIV_ITEM, function(target) {
|
||||
can.onmotion.toggle(can, target, target.innerText.indexOf(event.currentTarget.value) > -1 || target == event.currentTarget.parentNode)
|
||||
})
|
||||
}
|
||||
}}, "", target)
|
||||
},
|
||||
select: function(can, select, item) { // can.user.trans(can, item.value||item.values[0])
|
||||
var trans = {}; can.core.List(item.values, function(value) { trans[can.user.trans(can, value, null, html.VALUE)] = value })
|
||||
return can.page.Append(can, select.parentNode, [{type: html.INPUT, data: {className: html.SELECT, type: html.BUTTON, name: item.name, value: can.user.trans(can, item.value||item.values[0], null, html.VALUE), title: can.user.trans(can, item.name, null, html.VALUE)}, onclick: function(event) { var target = event.target
|
||||
@ -651,7 +664,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
target.scrollHeight > target.offsetHeight && can.page.style(can, vbar, html.HEIGHT, height, html.RIGHT, -target.scrollLeft, html.VISIBILITY, html.VISIBLE,
|
||||
html.TOP, can.base.Max(target.scrollTop+target.scrollTop/(target.scrollHeight-target.offsetHeight)*(target.offsetHeight-height)-10, target.scrollHeight-height),
|
||||
)
|
||||
vbar.innerHTML = `${parseInt(target.scrollTop)}+${target.offsetHeight}/${target.scrollHeight}`
|
||||
vbar.innerHTML = `${(target.scrollTop*100/(target.scrollHeight-target.offsetHeight)).toFixed(2)}%`
|
||||
var width = can.base.Min(target.offsetWidth*target.offsetWidth/target.scrollWidth, target.offsetWidth/4)
|
||||
target.scrollWidth > target.offsetWidth+10 && can.page.style(can, hbar, html.WIDTH, width, html.BOTTOM, -target.scrollTop, html.VISIBILITY, html.VISIBLE,
|
||||
html.LEFT, target.scrollLeft+target.scrollLeft/(target.scrollWidth-target.offsetWidth)*(target.offsetWidth-width),
|
||||
@ -659,7 +672,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
hbar.innerHTML = `${target.scrollLeft}+${target.offsetWidth}/${target.scrollWidth}`
|
||||
can.onmotion.delayOnce(can, function() {
|
||||
can.page.style(can, vbar, html.VISIBILITY, html.HIDDEN), can.page.style(can, hbar, html.VISIBILITY, html.HIDDEN)
|
||||
}, 1000, target._delay_scroll = target._delay_scroll||[])
|
||||
}, 3000, target._delay_scroll = target._delay_scroll||[])
|
||||
})
|
||||
return vbar
|
||||
},
|
||||
@ -724,7 +737,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
if (can.page.isDisplay(target)) { width -= w }
|
||||
}
|
||||
}), can.core.List(list, function(item) { if (can.base.isArray(item)) { layout(type == FLOW? FLEX: FLOW, item, height, width) } }) }
|
||||
ui.project && can.user.isMobile && can.onmotion.hidden(can, ui.project); if (can.onimport.filter) { ui.filter = can.onimport.filter(can, ui.project) }
|
||||
ui.project && can.user.isMobile && can.onmotion.hidden(can, ui.project); ui.filter = can.onappend.filter(can, ui.project)
|
||||
ui.display && can.onmotion.hidden(can, ui.display), ui.profile && can.onmotion.hidden(can, ui.profile)
|
||||
ui.layout = function(height, width, delay, cb) { can.onmotion.delay(can, function() {
|
||||
defer = [], layout(type, ui.list, height, width), defer.forEach(function(cb) { cb() })
|
||||
|
12
index.css
12
index.css
@ -221,6 +221,11 @@ div.project div.item.search>input { padding:0 25px; width:100%; }
|
||||
div.project div.expand { margin-right:var(--input-margin); width:5px; float:left; transform: translate(1px, -1px) rotate(0deg); transition:all .5s; }
|
||||
div.project div.expand.open { transform: translate(4px, -1px) rotate(90deg); transition:all .3s; }
|
||||
div.project div.item>div.name { padding:0 var(--input-padding); }
|
||||
div.project div.item { position:relative; }
|
||||
div.project div.item>div.icon { hover:var(--hover-bg-color); position:absolute; right:0; }
|
||||
div.project div.item:not(:hover)>div.icon { display:none; }
|
||||
div.project div.item>i:last-child { hover:var(--hover-bg-color); position:absolute; right:0; }
|
||||
div.project div.item:not(:hover)>i:last-child { display:none; }
|
||||
div.project div.zone>div.item { text-align:center; padding:var(--input-padding); display:flex; align-items:center; }
|
||||
div.project div.zone>div.item span:hover { background-color:var(--hover-bg-color); }
|
||||
div.project>div.zone>div.item span:first-child { font-style:italic; font-weight:bold; line-height:var(--action-height); }
|
||||
@ -575,7 +580,8 @@ kbd { font-family:var(--code-font-family); line-height:var(--code-line-height);
|
||||
kbd:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
table.content { font-family:var(--table-font-family); }
|
||||
table.content th { font-family:var(--input-font-family); font-style:italic; }
|
||||
body div.code { font-family:var(--table-font-family); padding:var(--table-padding); }
|
||||
body div.output>div.code { font-family:var(--table-font-family); padding:var(--table-padding); }
|
||||
body div.content>div.code { font-family:var(--table-font-family); padding:var(--table-padding); }
|
||||
body div.tabs { font-family:var(--code-font-family); }
|
||||
body div.path { font-family:var(--code-font-family); }
|
||||
body div.carte { font-family:var(--code-font-family); }
|
||||
@ -950,10 +956,10 @@ div.scrollbar {
|
||||
background-color:var(--hover-bg-color); font-size:8px !important; line-height:10px;
|
||||
border-radius:var(--button-radius); position:absolute; visibility:hidden;
|
||||
}
|
||||
div.scrollbar.vertical { writing-mode:tb; width:10px; right:0; top:0; transition:width .3s 1s; }
|
||||
div.scrollbar.vertical { writing-mode:tb; width:10px; right:0; top:0; transition:width .3s 1s; cursor:pointer; }
|
||||
div.scrollbar.vertical:hover { width:30px; transition:width .1s; font-size:24px !important; }
|
||||
div.scrollbar.horizon:hover { height:30px; transition:height .1s; font-size:24px !important; }
|
||||
div.scrollbar.horizon { height:10px; left:0; bottom:0; transition:height .3s 1s; }
|
||||
div.scrollbar.horizon { height:10px; left:0; bottom:0; transition:height .3s 1s; cursor:pointer; }
|
||||
form.option>div.text>span.value::-webkit-scrollbar { width:0 !important; height:0 !important; }
|
||||
div.project::-webkit-scrollbar { width:0 !important; height:0 !important; }
|
||||
div.project div.list::-webkit-scrollbar { width:0 !important; height:0 !important; }
|
||||
|
@ -76,6 +76,11 @@ fieldset.inner.cmd>div.output>div.layout>div.plug>legend {
|
||||
font-style:italic; font-size:var(--legend-font-size);
|
||||
padding:0 var(--input-padding); margin-left:var(--input-margin); margin-right:0;
|
||||
float:right; }
|
||||
div.input.vimer.find div.action div.item { margin:var(--input-margin); }
|
||||
div.input.vimer.find div.action div.item.text input { width:var(--project-width) }
|
||||
div.input.vimer.find div.action div.item.close span { display:none; }
|
||||
fieldset.inner fieldset.plug.can._plugin.search>form.option>div.item.value input { width:var(--project-width); }
|
||||
fieldset.inner fieldset.plug.can._plugin.search>form.option>div.item.filter input { width:var(--project-width); }
|
||||
fieldset.inner.cmd>div.output>div.layout>div.plug>legend:hover { box-shadow:var(--notice-box-shadow); color:unset; }
|
||||
fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove { padding:0 var(--input-padding); height:30px; }
|
||||
fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove:hover { background-color:var(--hover-bg-color); }
|
||||
@ -90,7 +95,7 @@ div.vimer.open.float td:first-child { display:none; }
|
||||
div.vimer.open.float td:nth-child(2) { display:none; }
|
||||
div.vimer.plug.float div.item.text input { width:var(--river-width); }
|
||||
div.layout.flex>input.current { clear:both; }
|
||||
tr.line>td.line { -webkit-user-select:none; border-right:var(--box-border); }
|
||||
tr.line>td.line { -webkit-user-select:none; border-right:var(--box-border); cursor:pointer; }
|
||||
tr.line>td.line { text-align:right; line-height:var(--code-line-height); padding:0 var(--button-padding); position:sticky; left:0; }
|
||||
tr.line>td.text { white-space:pre; line-height:var(--code-line-height); padding-left:var(--input-padding); width:100%; }
|
||||
tr.line:hover { background-color:var(--hover-bg-color); }
|
||||
|
@ -185,14 +185,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp
|
||||
history: function(can, record) { can.base.Eq(record, can.db.history[can.db.history.length-1], mdb.TEXT) || can.db.history.push(record)
|
||||
return can.Status(ice.BACK, can.db.history.length), record
|
||||
},
|
||||
project: function(can, path) {
|
||||
if (can.Conf("style") == "output") {
|
||||
can.onmotion.hidden(can, can.ui.project)
|
||||
return
|
||||
}
|
||||
project: function(can, path) { if (can.Conf(ctx.STYLE) == html.OUTPUT) { return can.onmotion.hidden(can, can.ui.project) }
|
||||
can.onmotion.clear(can, can.ui.project), can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) {
|
||||
if (can.base.isFunc(cb)) { return {name: name, icon: cb.meta? cb.meta.icon: "", _trans: can.onfigure._trans? can.onfigure._trans[name]||"": "", _toggle: function() { can.onimport.layout(can) }, _init: function(target, zone) { return cb(can, target, zone, path) }} }
|
||||
}), can.ui.project) },
|
||||
}), can.ui.project)
|
||||
},
|
||||
profile: function(can, msg) { var _msg = can.db.tabview[can.onexport.keys(can)]; _msg.Option(html.WIDTH, msg.Option(html.WIDTH)), border = 1
|
||||
var height = (can.ui.content._root||can.ui.content).offsetHeight, width = can.onexport.size(can, _msg.Option(html.WIDTH)||0.5, can.ConfWidth()-can.ui.project.offsetWidth)+border
|
||||
if (msg.Result().indexOf("<iframe src=") > -1) { if (_msg._profile != can.ui._profile) { can.page.Remove(can, _msg._profile) }
|
||||
@ -617,15 +614,20 @@ Volcanos(chat.ONACTION, {
|
||||
}), cb(msg) }}, target)
|
||||
}
|
||||
function grep(value, file, path) { var arg = can.core.List(arguments); can.onimport.exts(can, "inner/search.js", function(sub) {
|
||||
arg.push("src/", "usr/release/", "usr/icebergs/", "usr/toolkits/", "usr/volcanos/")
|
||||
can.page.isDisplay(sub._target) || (sub._delay_init = false, sub.select()), sub.runAction(can.request({}, {value: value}), nfs.GREP, arg)
|
||||
}) }
|
||||
var from, to; var meta = can.onappend._action(can, [
|
||||
{type: html.TEXT, name: nfs.FROM, style: {width: 200}, _init: function(target) { from = target, complete(target, nfs.FIND), can.onmotion.delay(can, function() { target.focus() }) }},
|
||||
{type: html.BUTTON, name: nfs.FIND}, {type: html.BUTTON, name: nfs.GREP}, {type: html.TEXT, name: nfs.TO, _init: function(target) { to = target, complete(target, nfs.REPLACE) }},
|
||||
{type: html.BUTTON, name: nfs.REPLACE}, {type: html.BUTTON, name: cli.CLOSE},
|
||||
{type: html.TEXT, name: nfs.FROM, _init: function(target) { from = target, complete(target, nfs.FIND), can.onmotion.delay(can, function() { target.focus() }) }},
|
||||
{type: html.BUTTON, name: nfs.FIND},
|
||||
{type: html.BUTTON, name: nfs.GREP},
|
||||
{type: html.HR},
|
||||
{type: html.TEXT, name: nfs.TO, _init: function(target) { to = target, complete(target, nfs.REPLACE) }},
|
||||
{type: html.BUTTON, name: nfs.REPLACE},
|
||||
{type: html.BUTTON, name: cli.CLOSE},
|
||||
], ui.action, {_trans: {find: "查找", grep: "搜索", replace: "替换"},
|
||||
find: function() { grep(from.value, can.Option(nfs.FILE), can.Option(nfs.PATH)), find(last+1, from.value) },
|
||||
grep: function() { grep(from.value, nfs.PT, can.Option(nfs.PATH)) },
|
||||
grep: function() { grep(from.value, can.Option(nfs.PATH)) },
|
||||
replace: function() { var text = can.current.text(), line = can.onexport.line(can, can.current.line)
|
||||
can.db.undo.push(function() { can.onaction.selectLine(can, line), can.onaction.modifyLine(can, line, text) })
|
||||
grep(from.value, can.Option(nfs.FILE), can.Option(nfs.PATH))
|
||||
|
@ -1,4 +1,8 @@
|
||||
Volcanos(chat.ONIMPORT, {list: ["value", "filter", "run:button", "close"], _init: function(can, msg) {
|
||||
can.onmotion.clear(can), can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.highlight(can, can.Option(mdb.VALUE, msg.Option(mdb.VALUE)))
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
list: ["value", "filter", "close:button"],
|
||||
_init: function(can, msg) {
|
||||
msg.Defer(function() { can.onappend.scroll(can, can._output) })
|
||||
can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.highlight(can, can.Option(mdb.VALUE, msg.Option(mdb.VALUE)))
|
||||
can.page.Select(can, can._option, "input[name=filter]", function(target) { target.onkeyup = function(event) { can.onmotion.highlight(can, target.value) } })
|
||||
}})
|
||||
},
|
||||
})
|
||||
|
@ -46,7 +46,7 @@ Volcanos(chat.ONFIGURE, {
|
||||
can.onaction.script(can.request(event, {path: path, file: item.path+(can.base.endWith(item.path, "/")? "client.go": "")}), can, nfs.SCRIPT) },
|
||||
nfs.TRASH, function(event, button) { can.runAction(event, nfs.TRASH, [path+item.path], function(msg) { show(target, zone, path) }) },
|
||||
)}; return item
|
||||
}); cache = can.onimport.tree(can, list, function(event, item) { can.onimport.tabview(can, path, item.path) }, function() {}, target, cache)
|
||||
}); cache = can.onimport.tree(can, list, function(event, item) { can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) }, function() {}, target, cache)
|
||||
can.onmotion.orderShow(can, target)
|
||||
}, true) } if (path.length == 1) { return show(target, zone, path[0]) } can.page.Remove(can, zone._action)
|
||||
can.onimport.zone(can, can.core.List(path, function(path) { return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) {
|
||||
|
@ -17,6 +17,14 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(html.PADDI
|
||||
target.innerText = target.innerText || target.href, target.href = target.href || target.innerText, target.target = target || "_blank"
|
||||
})
|
||||
},
|
||||
list: function(can, root, cb, cbs, target) { target = target||can._output
|
||||
can.core.List(root.list, function(item) { var ui = can.page.Append(can, target, [{view: [[html.ITEM, "open"]], list: [{text: item.meta.name}, item.list && {icon: icon.CHEVRON_DOWN}], onclick: function(event) {
|
||||
can.page.ClassList.set(can, ui.item, "open", can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list))
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.target)
|
||||
}, _init: function(target) { if (item.meta.name == "_") { target.innerHTML = "", can.onappend.style(can, html.SPACE, target) }
|
||||
cbs && cbs(target, item)
|
||||
}}, {view: html.LIST}]); can.onimport.list(can, item, cb, cbs, ui.list) })
|
||||
},
|
||||
navmenu: function(can, meta, target) { var nav = can.sup._navmenu
|
||||
nav = can.onmotion.clear(can, nav||can.page.insertBefore(can, [wiki.NAVMENU], can._output)), can.sup._navmenu = nav
|
||||
can.onimport.list(can, can.base.Obj(meta.data), function(event, item) {
|
||||
|
311
plugin/table.js
311
plugin/table.js
@ -1,5 +1,4 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
can.onmotion.clear(can, target), can.onappend.style(can, can.Conf(ctx.STYLE))
|
||||
if (can.isCmdMode() && can.Conf(ctx.STYLE) == html.FORM) { can.onappend.style(can, html.OUTPUT) }
|
||||
if (can.Mode() == html.ZONE) { return can.onimport._vimer_zone(can, msg, target) }
|
||||
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
|
||||
@ -9,53 +8,38 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
}
|
||||
},
|
||||
card: function(can, msg, target, filter) { target = target||can.ui.content||can._output
|
||||
var list = msg.Table(function(value) {
|
||||
if (filter && filter(value)) { return }
|
||||
value.icon = value.icons||value.icon||value.image
|
||||
var img = can.misc.Resource(can, value.icon, msg.Option(ice.MSG_USERPOD), msg.Option(ice.MSG_USERWEB))
|
||||
if (img.indexOf("/require/") == 0 && value.origin) { img = value.origin + img }
|
||||
can.page.Append(can, target, msg.Table(function(value) { if (filter && filter(value)) { return }
|
||||
var img = can.misc.Resource(can, value.icon = value.icons||value.icon||value.image, msg.Option(ice.MSG_USERPOD), msg.Option(ice.MSG_USERWEB))
|
||||
return {view: [[html.ITEM, value.type, value.status]], list: [
|
||||
{view: [wiki.TITLE, html.DIV], list: [
|
||||
value.icon && {className: can.base.contains(img, ".jpg")? "jpg": "", img: img}, {view: wiki.TITLE, list: [
|
||||
{text: value.name}, can.onappend.label(can, value),
|
||||
]},
|
||||
value.icon && {className: can.base.contains(img, ".jpg")? "jpg": "", img: img},
|
||||
{view: wiki.TITLE, list: [{text: value.name}, can.onappend.label(can, value)]},
|
||||
]}, {view: [wiki.CONTENT, html.DIV, value.text]},
|
||||
{view: html.ACTION, inner: value.action, _init: function(target) { can.onappend.mores(can, target, value, html.CARD_BUTTON) }},
|
||||
]}
|
||||
})
|
||||
can.onimport.layout = can.onimport.layout||function() { var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height } }
|
||||
can.page.Append(can, target, list), can.onmotion.orderShow(can, target)
|
||||
})), can.onimport.layout = can.onimport.layout||function() { var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height } }
|
||||
},
|
||||
filter: function(can, target, output) { output = output||target
|
||||
return can.onappend.input(can, {icon: icon.SEARCH, type: html.TEXT, name: web.FILTER, placeholder: "search in n items", onkeydown: function() {}, onkeyup: function(event) {
|
||||
if (event.key == code.ENTER) {
|
||||
can.page.Select(can, output, html.DIV_ITEM+":not(.hide)", function(target) { target.click() })
|
||||
} else if (event.key == code.ESCAPE) { event.currentTarget.value = "", event.currentTarget.blur()
|
||||
can.page.Select(can, output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, true) })
|
||||
} else { if (can.onkeymap.selectCtrlN(event, can, output, html.DIV_ITEM+":not(.filter):not(.hide)")) { return }
|
||||
can.page.Select(can, output, html.DIV_ITEM, function(target) {
|
||||
can.onmotion.toggle(can, target, target.innerText.indexOf(event.currentTarget.value) > -1 || target == event.currentTarget.parentNode)
|
||||
})
|
||||
}
|
||||
}}, "", target)
|
||||
},
|
||||
icon: function(can, msg, target, cb) {
|
||||
msg.Table(function(value) {
|
||||
icon: function(can, msg, target, cb) { msg.Table(function(value) {
|
||||
var icon = can.misc.Resource(can, value.icons||value.icon||can.page.drawText(can, value.name, 80), value.space||msg.Option(ice.MSG_USERPOD), msg.Option(ice.MSG_USERWEB))
|
||||
return can.page.Append(can, target, [{view: [[html.ITEM, value.status]], list: [{view: html.ICON, list: [{img: icon}]}, {view: [mdb.NAME, "", value.name]}], _init: function(target) {
|
||||
cb && cb(target, value)
|
||||
}, onclick: function(event) { can.sup.onexport.record(can.sup, value.name, mdb.NAME, value) }}])._target
|
||||
}), can.onmotion.orderShow(can, target)
|
||||
},
|
||||
}) },
|
||||
_icon: function(can, name, button, target) { can.page.Append(can, target, [{text: [can.page.unicode[name]||name, html.SPAN, [html.ICON, name]], onclick: function(event) {
|
||||
can.base.isFunc(button)? button(event, button): can.onaction[button](event, can, button), can.onkeymap.prevent(event)
|
||||
}}]) },
|
||||
_vimer_zone: function(can, msg, target) { msg.Table(function(value) { var action = can.page.parseAction(can, value)
|
||||
can.onimport.item(can, {type: value.type, status: value.status, icon: can.misc.Resource(can, value.icon||value.icons||value.avatar_url), name: can.page.Color(value[can.Conf(mdb.FIELD)||mdb.VIEW]||value[mdb.NAME]||value[mdb.TEXT]||value[mdb.TYPE]), title: value[mdb.TEXT]||value.description}, function(event) {
|
||||
can.onimport.item(can, {
|
||||
type: value.type,
|
||||
status: value.status,
|
||||
icon: can.misc.Resource(can, value.icon||value.icons||value.avatar_url),
|
||||
name: can.page.Color(value[can.Conf(mdb.FIELD)||mdb.VIEW]||value[mdb.NAME]||value[mdb.TEXT]||value[mdb.TYPE]),
|
||||
title: value[mdb.TEXT]||value.description,
|
||||
}, function(event) {
|
||||
can.sup.onexport.record(can, value.name, mdb.NAME, value, event)
|
||||
}, function() { return shy(action, function(event, button, meta, carte) { can.misc.Event(event, can, function(msg) { carte.close()
|
||||
can.sup.onexport.action(can, button, value) || can.run(event, [ctx.ACTION, button], function(msg) { can.sup.onimport._process(can.sup, msg) || can.Update() })
|
||||
}, value) }) }), can.onmotion.orderShow(can, target)
|
||||
}, value) }) })
|
||||
}) },
|
||||
_zone: function(can, zone, index, cb, field) { zone._delay_init = function() { can.onimport.plug(can, can.base.isObject(index)? index: {index: index, style: html.OUTPUT, mode: mdb.ZONE, field: field}, function(sub) {
|
||||
sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, {mode: mdb.ZONE}), index.index||index, cmds, cb) }
|
||||
@ -66,14 +50,13 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
))
|
||||
var action = can.core.List(sub.Conf(ctx.INPUTS), function(item) { if (item.type == html.BUTTON && [ice.LIST, ice.BACK].indexOf(item.name) == -1) { return item.name } })
|
||||
sub.onexport.output = function(_sub, msg) {
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, "")
|
||||
zone._total(msg.Length()), cb(sub, msg)
|
||||
zone._menu = shy({_trans: sub._trans}, action.concat(can.base.Obj(msg.Option(ice.MSG_ACTION), [])), function(event, button, meta, carte) {
|
||||
sub.Update(event, [ctx.ACTION, button]), carte.close()
|
||||
}), can.user.toastSuccess(can)
|
||||
}), zone._total(msg.Length()), cb(sub, msg)
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, ""), can.user.toastSuccess(can)
|
||||
}, can.ui.zone[zone.name].refresh = function() { sub.Update() }
|
||||
}, zone._target) } },
|
||||
zone: function(can, list, target) {
|
||||
zone: function(can, list, target) { target = target||can.ui.project
|
||||
return can.page.Append(can, target, can.core.List(list, function(zone) { can.base.isString(zone) && (zone = {name: zone}); if (!zone) { return }
|
||||
zone._layout = function() { var height = target.offsetHeight, count = 0
|
||||
can.page.SelectChild(can, target, "", function(target) {
|
||||
@ -96,7 +79,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
}): can.onmotion.clearCarte(can)
|
||||
}},
|
||||
{view: html.ACTION, _init: function(target) { var value; zone._action = target
|
||||
can.onappend._action(can, [{icon: icon.SEARCH, type: html.TEXT, name: mdb.SEARCH, _init: function(target) { zone._search = target }, onkeyup: function(event) { value = event.target.value
|
||||
can.onappend._action(can, [{type: html.TEXT, name: mdb.SEARCH, icon: icon.SEARCH, _init: function(target) { zone._search = target }, onkeyup: function(event) { value = event.target.value
|
||||
can.page.Select(can, zone._target, html.DIV_EXPAND, function(target) { can.page.ClassList.set(can, target, cli.OPEN, value != "") })
|
||||
can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, value != "") })
|
||||
can.onmotion.delayOnce(can, function() { value && can.onkeymap.selectItems(event, can, zone._target) }, value.length<3? 500: 150)
|
||||
@ -114,97 +97,106 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
]}
|
||||
}))
|
||||
},
|
||||
item: function(can, item, cb, cbs, target) { target = target||can.ui.project||can._output
|
||||
function oncontextmenu(event) {
|
||||
if (can.base.isFunc(cbs)) { var menu = cbs(event, ui._target); if (menu) { can.user.carteRight(event, can, menu.meta, menu.list, menu) } return }
|
||||
can.user.carteItem(event, can, item)
|
||||
}
|
||||
var icon = item.icon||item.icons, nick = item.nick||item.name||item.zone||item.sess
|
||||
var ui = can.page.Append(can, target, [{view: [[html.ITEM, item.type, item.role, item.status]], list: [
|
||||
icon && (can.base.contains(icon, ice.HTTP, ".ico", ".png", ".jpg")? {img: can.misc.Resource(can, icon)}: {icon: icon}),
|
||||
{text: nick}], title: item.title||nick, onclick: function(event) {
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.currentTarget)
|
||||
cb(event, item, event.currentTarget._list && can.onmotion.toggle(can, event.currentTarget._list), ui._target)
|
||||
}, oncontextmenu: oncontextmenu,
|
||||
}])
|
||||
item._select && ui._target.click()
|
||||
return ui._target
|
||||
_icons: function(can, item) { var icon = item.icons||item.icon||item.image
|
||||
return icon && (can.base.contains(icon, ice.HTTP, ".ico", ".png", ".jpg")? {img: can.misc.Resource(can, icon)}: {icon: icon})
|
||||
},
|
||||
itemtabs: function(can, list, cb, cbs, target) { can.db._list = {}
|
||||
function savetabs() { can.misc.sessionStorage(can, [can.ConfIndex(), html.TABS], can.page.Select(can, can._action, html.DIV_TABS, function(target) { return target._item.hash })) }
|
||||
var _select; can.core.List(list, function(value) {
|
||||
var _target = can.onimport.item(can, value, function(event) { if (value._tabs) { return value._tabs.click() }
|
||||
value._tabs = can.onimport.tabs(can, [value], function(event) {
|
||||
if (!cb(event, value)) { can.ui.toggle = can.onappend.toggle(can, can.ui.content) }
|
||||
can.onmotion.select(can, can.ui.project, html.DIV_ITEM, _target), can.db.current = value
|
||||
can.misc.SearchHash(can, value.hash), can.onimport.layout(can)
|
||||
}, function(event) { cbs && cbs(event, value), delete(value._tabs), delete(can.ui.content._cache[value.hash])
|
||||
can.page.Remove(can, value._profile), can.page.Remove(can, value._display)
|
||||
can.onmotion.delay(can, function() { savetabs() })
|
||||
}), savetabs()
|
||||
}); can.db._list[value.hash] = _target, (!_select || value.hash == can.db.hash[0]) && (_select = _target)
|
||||
})
|
||||
can.onmotion.delay(can, function() {
|
||||
can.core.Next(can.misc.sessionStorage(can, [can.ConfIndex(), html.TABS]), function(hash, next) {
|
||||
var _target = can.db._list[hash]; _target && _target.click(), can.onmotion.delay(can, next, 150)
|
||||
}, function() { _select && _select.click() })
|
||||
})
|
||||
_nick: function(can, item) {
|
||||
return {text: item.nick||item.name||item.zone||item.sess}
|
||||
},
|
||||
_menu: function(event, can, item, cbs, target) { target = target||event.currentTarget
|
||||
if (can.base.isFunc(cbs)) { var menu = cbs(event, target); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } }
|
||||
can.user.carteItem(event, can, item)
|
||||
},
|
||||
_item: function(can, item, cb, cbs) {
|
||||
return {view: [[html.ITEM, item.type, item.role, item.status]], title: item.title||item.nick, list: [
|
||||
can.onimport._icons(can, item), can.onimport._nick(can, item),
|
||||
item.action && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }},
|
||||
], _init: function(target) {
|
||||
item._select && can.onmotion.delay(can, function() { target.click() })
|
||||
}, onclick: function(event) {
|
||||
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) {
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.currentTarget)
|
||||
cb(event, item, event.currentTarget._list && can.onmotion.toggle(can, event.currentTarget._list), event.currentTarget)
|
||||
}, cbs)])._target
|
||||
},
|
||||
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) }) }
|
||||
var _list = can.core.List(list, function(item) { var icon = item.icon||item.icons
|
||||
return {view: html.ITEM, list: [
|
||||
icon && (can.base.contains(icon, ice.HTTP, ".ico", ".png", ".jpg")? {img: can.misc.Resource(can, icon)}: {icon: icon}),
|
||||
{text: item.nick||item.name||item.zone}
|
||||
], _init: function(target) {
|
||||
item._select && (_select = target)
|
||||
}, onclick: function(event) { var target = event.currentTarget
|
||||
target && can.page.Select(can, can.ui.project, html.DIV_ITEM, function(target) { can.page.ClassList.del(can, target, html.SELECT) })
|
||||
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
|
||||
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) }
|
||||
cb(event, item, event.currentTarget._list && can.onmotion.toggle(can, event.currentTarget._list), event.currentTarget)
|
||||
}, oncontextmenu: function(event) {
|
||||
if (can.base.isFunc(cbs)) { var menu = cbs(event, event.currentTarget); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } }
|
||||
can.user.carteItem(event, can, item)
|
||||
}}
|
||||
})
|
||||
var _select; if (target._list) { can.page.Append(can, target._list, _list) } else {
|
||||
target._list = can.page.insertBefore(can, [{view: html.LIST, list: _list}], target.nextSibling, target.parentNode)
|
||||
} _select && _select.click()
|
||||
return target._list
|
||||
}, cbs)
|
||||
})), target._list
|
||||
},
|
||||
list: function(can, root, cb, cbs, target) { target = target||can._output
|
||||
can.core.List(root.list, function(item) { var ui = can.page.Append(can, target, [{view: [[html.ITEM, "open"]], list: [{text: item.meta.name}, item.list && {icon: icon.CHEVRON_DOWN}], onclick: function(event) {
|
||||
can.page.ClassList.set(can, ui.item, "open", can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list))
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.target)
|
||||
}, _init: function(target) { if (item.meta.name == "_") { target.innerHTML = "", can.onappend.style(can, html.SPACE, target) }
|
||||
cbs && cbs(target, item)
|
||||
}}, {view: html.LIST}]); can.onimport.list(can, item, cb, cbs, ui.list) })
|
||||
},
|
||||
tree: function(can, list, cb, cbs, target, node, field, split) { node = node||{"": target||can.ui.project}
|
||||
field = field||nfs.PATH, split = split||nfs.PS
|
||||
can.core.List(list, function(item) { item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return }
|
||||
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) })
|
||||
var ui = can.page.Append(can, node[last], [{view: html.ITEM, list: [
|
||||
{view: [[html.EXPAND, item.expand? cli.OPEN: ""], html.DIV, (index==array.length-1? "": can.page.unicode.closes)]},
|
||||
{view: [mdb.NAME, html.DIV, value], _init: item._init},
|
||||
], onclick: function(event) { var target = event.currentTarget
|
||||
if (node[name].childElementCount > 0&& !can.page.ClassList.set(can, ui[html.EXPAND], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE))) { return }
|
||||
target && can.page.Select(can, can.ui.project, html.DIV_ITEM, function(target) { can.page.ClassList.del(can, target, html.SELECT) })
|
||||
// {view: [[html.EXPAND, item.expand? cli.OPEN: ""], html.DIV, (index==array.length-1? "": can.page.unicode.closes)]},
|
||||
{view: [[html.EXPAND], html.DIV, (index==array.length-1? "": can.page.unicode.closes)]},
|
||||
{view: [mdb.NAME, html.DIV, value]},
|
||||
item.action && {view: [mdb.ICON], list: [{icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}]},
|
||||
], _init: function(target) {
|
||||
item.expand && can.onmotion.delay(can, function() { target.click() })
|
||||
item._init && item._init(target)
|
||||
}, onclick: function(event) { var target = event.currentTarget
|
||||
if (node[name].childElementCount > 0 && !can.page.ClassList.set(can, ui[html.EXPAND], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE))) { return }
|
||||
can.page.Select(can, node[""], 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)
|
||||
} can.onexport.hash(can, [item[field]]), can.base.isFunc(cb) && cb(event, item, ui.item)
|
||||
node[item[field]] && can.page.ClassList.add(can, node[item[field]].previousSibling, html.SELECT)
|
||||
} node[key] && can.page.ClassList.add(can, node[key].previousSibling, html.SELECT)
|
||||
can.onexport.hash(can, [key]), can.base.isFunc(cb) && cb(event, item, ui.item)
|
||||
if (node[name].childElementCount == 2) { can.onmotion.delay(can, function() { node[name].firstChild.click() }) }
|
||||
}, oncontextmenu: function(event) { if (!item._menu) { return }
|
||||
var menu = item._menu; can.user.carteRight(event, can, menu.meta, menu.list, menu)
|
||||
}}, {view: [[html.LIST, item.expand? "": html.HIDE]]}]); node[name] = ui.list;
|
||||
(item._select || can.db.hash && (can.db.hash[0]||"").indexOf(item[field]) == 0) && can.onmotion.delay(can, function() { ui.item.click() })
|
||||
}) });
|
||||
return node
|
||||
}, oncontextmenu: function(event) {
|
||||
can.onimport._menu(event, can, item, cbs)
|
||||
}}, {view: [[html.LIST, item.expand? "": html.HIDE]]}])
|
||||
node[name] = ui.list, (item._select || can.db.hash && (can.db.hash[0]||"").indexOf(key) == 0) && can.onmotion.delay(can, function() { ui.item.click() })
|
||||
}) }); return node
|
||||
},
|
||||
tabs: function(can, list, cb, cbs, action) { action = action||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: [
|
||||
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) { 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) })
|
||||
can.onexport.tabs && can.onexport.tabs(can)
|
||||
}) }, 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, msg, key, value, target, cb) { if (value._tabs) { return value._tabs.click() }
|
||||
value._tabs = can.onimport.tabs(can, [value], function() { can.onexport.hash(can, [key]), can.Status(value), can.db.value = value
|
||||
value._tabs = can.onimport.tabs(can, [value], function() { can.onexport.hash(can, key), can.Status(value), can.db.value = value
|
||||
can.page.ClassList.has(can, target, html.SELECT) || can.onmotion.delay(can, function() { target.click() })
|
||||
if (can.onmotion.cache(can, function() { return key }, can.ui.content, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) }
|
||||
if (cb && cb()) { return }
|
||||
@ -214,47 +206,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
}) } else { can.onappend.table(can, msg), can.onappend.board(can, msg) }
|
||||
}, function() { delete(value._tabs), can.onmotion.cacheClear(can, key, can.ui.content, can.ui.profile, can.ui.display) })
|
||||
},
|
||||
tabs: function(can, list, cb, cbs, action) { action = action||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: [tabs.icon && {icon: tabs.icon}, {text: [tabs.nick||tabs.name, html.SPAN, mdb.NAME]}, {icon: mdb.DELETE, onclick: function(event) {
|
||||
tabs._target._close(), can.onkeymap.prevent(event)
|
||||
}}], onclick: function(event) {
|
||||
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)
|
||||
}, _init: function(target) {
|
||||
if (action == can._action) {
|
||||
can.page.Select(can, can._action, "div.item._space.state", function(space) {
|
||||
can.page.insertBefore(can, target, space)
|
||||
})
|
||||
}
|
||||
var menu = tabs._menu||shy(function(event, button) { can.Update(event, [ctx.ACTION, button]) })
|
||||
target._item = tabs, tabs._target = target, target._close = function() { close(target) || cbs && cbs(tabs) }
|
||||
var _action = can.page.parseAction(can, tabs)
|
||||
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) },
|
||||
oncontextmenu: function(event) { 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.Select(can, target, html.SPAN_NAME, function(target) { can.page.Modify(can, target, list[0]||tabs.name) })
|
||||
can.onexport.tabs && can.onexport.tabs(can)
|
||||
}) }, 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)
|
||||
}) },
|
||||
}), target.click()
|
||||
}}
|
||||
}))._target },
|
||||
tool: function(can, list, cb, target, status) { target = target||can._output, 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
|
||||
@ -263,10 +214,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
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.onmotion.hidden(can, sub._target), sub._legend._target = sub._target, sub._legend._meta = {index: meta.index}
|
||||
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, nfs.PT+html.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)
|
||||
@ -276,7 +226,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
}) }, 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)
|
||||
@ -286,43 +236,32 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, 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.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, can.Option(), {space: meta.space}), meta.index, cmds, cb) }
|
||||
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})
|
||||
can.page.SelectChild(can, can._output, html.TABLE, function(table) {
|
||||
(can.isCmdMode() || table.offsetWidth > can.ConfWidth() / 2) && can.onappend.style(can, "full", table)
|
||||
})
|
||||
},
|
||||
_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)
|
||||
can.page.style(can, can._output, html.MAX_HEIGHT, height||can.ConfHeight()||window.innerHeight-2*html.ACTION_HEIGHT)
|
||||
can.page.style(can, can._output, html.MAX_WIDTH, width||can.ConfWidth()||window.innerWidth)
|
||||
},
|
||||
cmd: function(can, height, width) { can.onlayout._init(can, height, width) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
title: function(can, title) { can.sup.onexport.title(can, title) },
|
||||
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(":"): hash, can.misc.SearchHash(can, hash), can.misc.localStorage(can, [can.ConfSpace()||can.misc.Search(can, ice.POD), can.ConfIndex(), "hash"], hash) },
|
||||
session: function(can, key, value) { return can.misc[can.user.isWebview? "localStorage": "sessionStorage"](can, [can.Conf(ctx.INDEX), key, location.pathname].join(":"), value == ""? "": JSON.stringify(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() },
|
||||
session: function(can, key, value) { return can.misc[can.user.isWebview? "localStorage": "sessionStorage"](can, [can.Conf(ctx.INDEX), key, location.pathname].join(":"), value == ""? "": JSON.stringify(value)) },
|
||||
action_value: function(can, key, def) { var value = can.Action(key); return can.base.isIn(value, ice.AUTO, key, undefined)? def: value },
|
||||
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]: hash, can.misc.SearchHash(can, hash)
|
||||
can.misc.localStorage(can, [can.ConfSpace()||can.misc.Search(can, ice.POD), can.ConfIndex(), "hash"], hash)
|
||||
},
|
||||
tabs: function(can) {},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {
|
||||
onkeydown: function(event, can) {
|
||||
@ -330,18 +269,6 @@ Volcanos(chat.ONACTION, {
|
||||
can._keylist = can.onkeymap._parse(event, can, mdb.PLUGIN, can._keylist||[], can._output)
|
||||
},
|
||||
})
|
||||
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) },
|
||||
})
|
||||
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) },
|
||||
@ -369,3 +296,15 @@ Volcanos(chat.ONKEYMAP, {
|
||||
},
|
||||
}, _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) },
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user