diff --git a/frame.js b/frame.js
index 4769b28b..ca4af3ef 100644
--- a/frame.js
+++ b/frame.js
@@ -308,6 +308,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
_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: {}, ui: {},
}, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf())
+ sub.db.hash = can.isCmdMode()? can.misc.SearchHash(can): []
var last = can.sub; last && can.core.CallFunc([last, "onaction.hidden"], {can: last})
sub.run = function(event, cmds, cb, silent) { var msg = sub.request(event)._caller()
msg.RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent)
@@ -317,11 +318,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
if (sub.onimport && can.base.isArray(sub.onimport.list) && sub.onimport.list.length > 0) {
can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: can.page.inputs(can, sub.onimport.list, html.TEXT) })
}
- sub.db.hash = can.isCmdMode()? can.misc.SearchHash(can): []
- can.page.ClassList.del(can, sub._fields, html.FORM)
- delete(can._status._cache), delete(can._status._cache_key)
- can.page.style(can, can._output, html.HEIGHT, can._output.offsetHeight)
- sub._output.className = html.OUTPUT, can.onappend.style(can, sub._args.style, can._output)
+ can.page.ClassList.del(can, sub._fields, html.FORM), delete(can._status._cache), delete(can._status._cache_key)
+ // can.page.style(can, can._output, html.HEIGHT, can._output.offsetHeight)
+ // sub._output.className = html.OUTPUT
+ can.onappend.style(can, sub._args.style, can._output)
+ can.isCmdMode() && can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), false)
can.onexport._output(sub, msg), sub.Mode() != ice.MSG_RESULT && can.onmotion.clear(can, output)
can.core.CallFunc([sub, chat.ONIMPORT, chat._INIT], {can: sub, msg: msg, cb: function(msg) {
if (action !== false) { can.onkeymap._build(sub)
@@ -683,35 +684,34 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
append(can.page.Append(can, target, [html.LAYOUT])._target, type==FLOW? FLEX: FLOW, item)
} else if (can.base.isObject(item)) {
if (item.index) { item._index = count++, ui.size[item._index] = item.height||item.width
- item.type = item.type||"story"
- can.base.isIn(item._command, web.PORTAL, web.DESKTOP, aaa.OFFER, aaa.APPLY, code.VIMER) && can.onmotion.hidden(can, target)
- item.layout = function(height, width) {}
+ item.type = item.type||"story", item.layout = function(height, width) {
+ can.page.style(can, ui[item._index], html.WIDTH, width)
+ }
can.onappend.plugin(can, item, function(sub) { can._plugins = (can._plugins||[]).concat([sub])
item.layout = function(height, width) { sub.onimport.size(sub, height, width, false) }
can.onmotion.select(can, sub._target.parentNode, html.FIELDSET, sub._target)
- sub.onexport._output = function() {
- can.onimport.layout(can)
+ sub.onexport._output = function() { can.onimport.layout(can)
can.onmotion.delay(can, function() { can.onmotion.toggle(can, target, true) })
}
- }, target, ui[item._index] = can.onappend.field(can, item.type, {index: item.index, name: item.index.split(nfs.PT).pop(), help: item.help}, target)._target)
+ }, target, ui[item._index] = can.onappend.field(can, item.type, item, target)._target)
+ can.base.isIn(item._command, web.PORTAL, web.DESKTOP, aaa.OFFER, aaa.APPLY, code.VIMER) && can.onmotion.hidden(can, target)
} else { can.page.Append(can, target, [item]) }
}
}); return list } ui.list = append(target, type, list||[html.PROJECT, [[html.CONTENT, html.PROFILE], html.DISPLAY]])
function calc(item, size, total) { return !ui.size[item]? can.base.isString(size)? parseInt(can.base.trimSuffix(size, "px")): size: ui.size[item] < 1? total*ui.size[item]: ui.size[item] }
var defer = [], content_height, content_width; function layout(type, list, height, width) { var _width = width, _height = height; can.core.List(list, function(item) {
var meta = {}
- if (can.base.isArray(item)) { return } if (can.base.isObject(item)) { var meta = item; item = item._index }
+ if (can.base.isArray(item)) { return }
+ if (can.base.isObject(item)) { var meta = item; item = item._index }
var target = ui[item]; if (!can.page.isDisplay(target)) { return }
if (item == html.CONTENT || item == ice.MAIN) { return defer.push(function() { can.page.style(can, target, html.HEIGHT, content_height = height, html.WIDTH, content_width = width) }) }
if (type == FLOW) {
- var h = calc(item, target.offsetHeight, height)
- if (can.base.isObject(meta) && meta.layout) { meta.layout(h, width) }
- can.page.style(can, target, html.WIDTH, width)
+ var h = calc(item, target.offsetHeight, height), w = meta.width||width
+ can.page.style(can, target, html.WIDTH, w); if (can.base.isObject(meta) && meta.layout) { meta.layout(h, w) }
if (can.page.isDisplay(target)) { height -= h }
} else {
var w = calc(item, target.offsetWidth||target.style.width||_width/list.length, _width), h = meta.height||height
- if (can.base.isObject(meta) && meta.layout) { meta.layout(h, w = _width/list.length) }
- can.page.style(can, target, html.HEIGHT, h, html.WIDTH, w)
+ can.page.style(can, target, html.HEIGHT, h); if (can.base.isObject(meta) && meta.layout) { meta.layout(h, w = _width/list.length) }
if (can.user.isMobile && item == html.PROJECT) { return }
if (can.page.isDisplay(target)) { width -= w }
}
@@ -720,7 +720,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
if (can.onimport.filter) { ui.filter = can.onimport.filter(can, ui.project) }
ui.project && can.user.isMobile && can.onmotion.hidden(can, ui.project)
ui.layout = function(height, width, delay, cb) { can.onmotion.delay(can, function() { defer = [], layout(type, ui.list, height, width), defer.forEach(function(cb) { cb() }), cb && cb(content_height, content_width) }, delay||0) }
- can.onimport.layout = can.onimport.layout||function(can) { ui.layout(can.ConfHeight(), can.ConfWidth()), can.onimport._layout && can.onimport._layout(can)
+ can.onimport.layout = can.onimport.layout||function(can) {
+ ui.layout(can.ConfHeight(), can.ConfWidth()), can.onimport._layout && can.onimport._layout(can)
can.Action(html.FILTER) && can.onmotion.filter(can, can.Action(html.FILTER))
}
can.onimport._layout = can.onimport._layout||function(can) { if (!can.ui.content) { return }
@@ -731,13 +732,17 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
return ui
},
tabview: function(can, meta, list, target) { var ui = can.page.Append(can, target, [html.ACTION, html.OUTPUT])
- can.onappend.style(can, "tabview", ui.action)
- can.onappend.style(can, html.FLEX, ui.action)
- can.core.List(can.base.getValid(list, can.core.Item(meta)), function(name, index) {
- ui[name] = can.page.Append(can, ui.action, [{view: [html.TABS, html.DIV, can.user.trans(can, name)], onclick: function(event) {
+ can.onappend.style(can, "tabview", ui.action), can.onappend.style(can, html.FLEX, ui.action)
+ var _meta = meta
+ if (meta.Table) { _meta = {}
+ meta.Table(function(value) {
+ _meta[value.index] = value
+ })
+ }
+ can.core.List(can.base.getValid(list, can.core.Item(_meta)), function(name, index) { var item = _meta[name]
+ ui[name] = can.page.Append(can, ui.action, [{view: [html.TABS, html.DIV, item.title||can.user.trans(can, name)], onclick: function(event) {
can.onmotion.select(can, ui.action, html.DIV_TABS, event.target)
if (can.onmotion.cache(can, function() { return name }, ui.output)) { return }
- var item = meta[name]
if (typeof item == code.FUNCTION) { return item(ui.output) }
item.type = item.type||"story"
can.onappend.plugin(can, item, function(sub) {
diff --git a/index.css b/index.css
index 43d87173..a4706144 100644
--- a/index.css
+++ b/index.css
@@ -56,7 +56,7 @@ body {
--table-padding:var(--button-padding);
--header-height:48px; --footer-height:var(--action-height); --action-height:32px; --status-height:var(--action-height); --textarea-height:96px;
- --input-width:140px; --button-width:60px; --form-width:360px; --url-input-width:480px;
+ --input-width:140px; --button-width:60px; --form-width:360px; --url-input-width:480px;
--card-width:320px; --card-height:160px; --qrcode-width:360px; --qrcode-height:364px;
--story-height:var(--float-height); --iframe-height:420px;
--plug-height:var(--float-height); --plug-width:var(--float-width);
@@ -67,7 +67,7 @@ body {
--legend-font-family:var(--body-font-family); --status-font-family:var(--body-font-family);
--input-font-family:var(--code-font-family); --table-font-family:var(--code-font-family);
- --svg-font-family:var(--code-font-family);
+ --svg-font-family:var(--code-font-family);
--body-font-size:16px; --legend-font-size:20px; --status-font-size:12px;
--code-font-size:14px; --code-line-height:24px; --code-tabs-height:48px;
--icon-font-size:var(--legend-font-size); --svg-font-size:24px; --svg-stroke-width:1;
@@ -214,6 +214,7 @@ div.item.online.state span { background-color:var(--hover-bg-color); color:var(-
div.item.online.state img { height:var(--action-height); transition:margin-right 1s; float:right; }
div.item.online.state img:hover { background-color:var(--hover-bg-color); }
div.item.online.state:not(:hover) img:not(:first-child) { margin-right:-20px; }
+fieldset.output>div.header { display:none; }
fieldset>div.header { display:contents; }
fieldset>div.header>div { line-height:22px; padding:var(--input-padding); float:right; }
fieldset>div.header>div.avatar { padding:0; }
@@ -432,15 +433,11 @@ div.item.button.danger input:hover[type=button] { background-color:var(--danger-
div.item.button.notice input:hover[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
div.item.button.danger input { border:var(--danger-bg-color) solid 1px; }
div.item.button.notice input { border:var(--notice-bg-color) solid 1px; }
-div.action div.tabs:hover {
- background-color:var(--hover-bg-color);
- /* color:var(--hover-fg-color); */
+div.action div.tabs:hover { background-color:var(--hover-bg-color);
border-top-left-radius:var(--button-margin); border-top-right-radius:var(--button-margin);
}
-div.action div.tabs.select {
- background-color:var(--output-bg-color);
- /* color:var(--hover-fg-color); */
- border-top-left-radius:var(--button-margin); border-top-right-radius:var(--button-margin); border-bottom:var(--notice-bg-color) solid 3px;
+div.action div.tabs.select { background-color:var(--hover-bg-color);
+ border-top-left-radius:var(--plugin-radius); border-top-right-radius:var(--plugin-radius); border-bottom:var(--notice-bg-color) solid 3px;
}
div.zone>div.item { background-color:var(--th-bg-color); }
div.zone>div.list>div.zone>div.item { background-color:var(--th-bg-color); }
diff --git a/plugin/state.js b/plugin/state.js
index 641b9116..a65df0b9 100644
--- a/plugin/state.js
+++ b/plugin/state.js
@@ -90,11 +90,9 @@ Volcanos(chat.ONIMPORT, {
return input.value = value, can.Update(event, can.Input([], true, data), cb), input
})[0] },
_size: function(can, height, width, auto, mode) {},
- size: function(can, height, width, auto, mode) {
- var margin = (can.Conf("margin")||0)*2
+ size: function(can, height, width, auto, mode) { typeof width == code.STRING && (width = can.base.ParseSize(width))
can.Conf("_auto", auto), can.Mode(mode), can.ConfHeight(height), can.ConfWidth(width), height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can)
- // height -= 2*margin
- width -= 2*margin
+ var padding = can.Conf("padding")||0, margin = can.Conf("margin")||0; height -= 2*padding, width -= 2*padding+2*margin
auto || auto == undefined? (can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height, html.MAX_WIDTH, width), can.page.style(can, can._target, html.HEIGHT, "", html.WIDTH, "")):
(can.page.style(can, can._output, html.HEIGHT, height, html.WIDTH, width, html.MAX_HEIGHT, "", html.MAX_WIDTH, ""), can.page.style(can, can._target, html.WIDTH, width))
if (can.misc.Search(can, log.DEBUG) == ice.TRUE) { can.Status(html.HEIGHT, can.base.Max(height, can._output.offsetHeight), html.WIDTH, width) }
diff --git a/plugin/story/pie.js b/plugin/story/pie.js
index 35c13648..645eae2f 100644
--- a/plugin/story/pie.js
+++ b/plugin/story/pie.js
@@ -1,5 +1,5 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(can, function() { can.list = can.onimport._data(can, msg, can.Conf(mdb.FIELD)||mdb.VALUE)
- can.core.List(can.list, function(item) { msg.Push("weight", parseInt(item.span*100/360)+"%").Push(cli.COLOR, ' ') })
+ can.core.List(can.list, function(item) { msg.Push("weight", parseInt(item.span*100/360)+"%").Push(cli.COLOR, ' ') })
can.onaction.list = [], can.ui.display = can.page.Append(can, can._output, [html.DISPLAY])._target
can.onappend.table(can, msg, null, can.ui.display), can.page.Select(can, can.ui.display, html.TR, function(tr, index) {
can.page.Modify(can, tr, {onmouseenter: function(event) { can._draw(index-1) }})
@@ -34,11 +34,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(ca
return parseInt(value)
},
layout: function(can) { if (!can.ui || !can.ui.svg) { return }
- var padding = (can.Conf("padding")||0)
- var height = can.base.Max(can.ConfHeight(), can.ConfWidth()/2), margin = 20, r = height/2-margin-padding;
- can.ui.svg.Val(html.HEIGHT, height-2*padding), can.ui.svg.Val(html.WIDTH, height-2*padding)
+ var height = can.base.Max(can.ConfHeight(), can.ConfWidth()/2), margin = 10, r = height/2-2*margin;
// can.page.style(can, can.ui.display, html.HEIGHT, can.ConfHeight()-can.ui.svg.Val(html.HEIGHT))
can.page.style(can, can.ui.display, html.WIDTH, can.ConfWidth()-height)
- can._draw = function(which) { can.onimport._draw(can, height/2-2*padding, can.ConfHeight()/2, r, margin, which) }, can._draw(0)
+ can.ui.svg.Val(html.HEIGHT, height), can.ui.svg.Val(html.WIDTH, height)
+ can._draw = function(which) { can.onimport._draw(can, height/2-margin/2, can.ConfHeight()/2-margin/2, r, margin, which) }, can._draw(0)
},
})
diff --git a/plugin/story/stats.js b/plugin/story/stats.js
index e77dfeba..0cc08557 100644
--- a/plugin/story/stats.js
+++ b/plugin/story/stats.js
@@ -1,9 +1,10 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { can.onappend.style(can, [web.STATS, html.FLEX], can._output)
+ var FIELD = can.Conf(mdb.FIELD)||mdb.NAME, VALUE = can.Conf(mdb.VALUE)||mdb.VALUE
var list = {}, stats = {}, units = {}, trans = {}, index = {}; msg.Table(function(value) {
- stats[value.name] = parseFloat(stats[value.name]||"0") + parseFloat(value.value)
- units[value.name] = value.units, trans[value.name] = value._trans
- index[value.name] = value.index, list[value.name] = value
+ stats[value[FIELD]] = parseFloat(stats[value[FIELD]]||"0") + parseFloat(value[VALUE])
+ units[value[FIELD]] = value.units, trans[value[FIELD]] = value._trans
+ index[value[FIELD]] = value.index, list[value[FIELD]] = value
})
function fmts(value) { var ls = []
while (value > 0) { ls.push(value%1000)