1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt search.js

This commit is contained in:
harveyshao 2022-07-04 00:34:52 +08:00
parent 6067b86006
commit 3afd7fcdc6
19 changed files with 95 additions and 100 deletions

View File

@ -355,7 +355,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
item.run = function(event, cmds, cb) { can.run(can.request(event, line), cmds, cb, true) } item.run = function(event, cmds, cb) { can.run(can.request(event, line), cmds, cb, true) }
can.onmotion.modifys(can, event.target, function(event, value, old) { run([ctx.ACTION, mdb.MODIFY, key, value]) }, item) can.onmotion.modifys(can, event.target, function(event, value, old) { run([ctx.ACTION, mdb.MODIFY, key, value]) }, item)
}} }}
}); table && can.page.Modify(can, table, {className: chat.CONTENT}) }); table && can.page.styleClass(can, table, chat.CONTENT)
if (msg.append && msg.append[msg.append.length-1] == ctx.ACTION) { can.page.ClassList.add(can, table, ctx.ACTION) } if (msg.append && msg.append[msg.append.length-1] == ctx.ACTION) { can.page.ClassList.add(can, table, ctx.ACTION) }
can._table = table, can.sup && (can.sup._table = table) can._table = table, can.sup && (can.sup._table = table)
return sort && can.page.RangeTable(can, table, sort), table return sort && can.page.RangeTable(can, table, sort), table
@ -376,8 +376,8 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
meta.args = can.base.getValid(can.base.Obj(meta.args), can.base.Obj(meta.arg), can.base.Obj(value.args), can.base.Obj(value.arg))||[] meta.args = can.base.getValid(can.base.Obj(meta.args), can.base.Obj(meta.arg), can.base.Obj(value.args), can.base.Obj(value.arg))||[]
meta.display = meta.display||value.display meta.display = meta.display||value.display
meta.height = meta.height||can.Conf(html.HEIGHT) meta.height = meta.height||can.ConfHeight()
meta.width = meta.width||can.Conf(html.WIDTH) meta.width = meta.width||can.ConfWidth()
meta.type = meta.type||chat.PLUGIN meta.type = meta.type||chat.PLUGIN
meta.name = meta.name||value.name meta.name = meta.name||value.name

View File

@ -74,7 +74,7 @@ Volcanos("page", {help: "用户界面", ClassList: {
if (can.base.isString(key)) { var res = can.page.Create(can, key, value); return target.appendChild(res), res } if (can.base.isString(key)) { var res = can.page.Create(can, key, value); return target.appendChild(res), res }
can.core.List(key, function(item, index) { if (!item) { return } can.core.List(key, function(item, index) { if (!item) { return }
if (can.base.isString(item)) { target.innerHTML = item; return } if (can.base.isString(item)) { item = {view: [item]} }
if (item.nodeName) { target.appendChild(item); return } if (item.nodeName) { target.appendChild(item); return }
// 基本结构: type name data list // 基本结构: type name data list
@ -371,6 +371,9 @@ Volcanos("page", {help: "用户界面", ClassList: {
styleWidth: function(can, target, value) { styleWidth: function(can, target, value) {
return can.page.style(can, target, html.WIDTH, value), target.offsetWidth return can.page.style(can, target, html.WIDTH, value), target.offsetWidth
}, },
styleClass: function(can, target, value) {
can.page.Modify(can, target, {className: value})
},
style: function(can, target, style) { var value = {} style: function(can, target, style) { var value = {}
for (var i = 2; i < arguments.length; i += 2) { for (var i = 2; i < arguments.length; i += 2) {
if (typeof arguments[i] == lang.OBJECT) { if (typeof arguments[i] == lang.OBJECT) {

View File

@ -65,7 +65,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
can.Conf("display") && (name += " "+can.Conf("display")) can.Conf("display") && (name += " "+can.Conf("display"))
can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape") can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape")
can.user.language(can) && (name += " "+can.user.language(can)) can.user.language(can) && (name += " "+can.user.language(can))
can.page.Modify(can, document.body, {className: name}) can.page.styleClass(can, document.body, name)
}, },
language: function(can) { return can.misc.Search(can, "language") }, language: function(can) { return can.misc.Search(can, "language") },
trans: function(can, text, list) { if (can.base.isObject(text)) { trans: function(can, text, list) { if (can.base.isObject(text)) {
@ -248,16 +248,16 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
}, },
carteRight: function(event, can, meta, list, cb, parent) { carteRight: function(event, can, meta, list, cb, parent) {
var carte = can.user.carte(event, can, meta, list, cb, parent) var carte = can.user.carte(event, can, meta, list, cb, parent)
can.page.Modify(can, carte._target, {style: { can.page.style(can, carte._target, {
left: event.clientX-event.offsetX+event.target.offsetWidth-3, left: event.clientX-event.offsetX+event.target.offsetWidth-3,
top: carte._target.offsetTop-(carte.layout.bottom? -event.target.offsetHeight: event.target.offsetHeight)+5, top: carte._target.offsetTop-(carte.layout.bottom? -event.target.offsetHeight: event.target.offsetHeight)+5,
bottom: "", bottom: "",
}}) })
return carte return carte
}, },
carteClient: function(event, can, meta, list, cb, parent) { carteClient: function(event, can, meta, list, cb, parent) {
var ui = can.user.carte(event, can, meta, list, cb, parent) var ui = can.user.carte(event, can, meta, list, cb, parent)
can.page.Modify(can, ui._target, {style: {left: event.clientX, top: event.clientY}}) can.page.style(can, ui._target, {left: event.clientX, top: event.clientY})
}, },
input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() } input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() }
@ -354,7 +354,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
ui.show.innerHTML = value+"%" ui.show.innerHTML = value+"%"
ui.cost.innerHTML = can.base.Duration(now - begin) ui.cost.innerHTML = can.base.Duration(now - begin)
ui.size.innerHTML = can.base.Size(loaded)+ice.PS+can.base.Size(total) ui.size.innerHTML = can.base.Size(loaded)+ice.PS+can.base.Size(total)
can.page.Modify(can, ui.progress, {style: {width: value*(ui.output.offsetWidth-2)/100}}) can.page.style(can, ui.progress, {width: value*(ui.output.offsetWidth-2)/100})
}, },
}); can.page.Select(can, ui.action, "input[type=file]")[0].click() }); can.page.Select(can, ui.action, "input[type=file]")[0].click()

View File

@ -257,7 +257,7 @@ Volcanos(chat.ONLAYOUT, {help: "导出数据", list: [],
}, },
free: function(can) { free: function(can) {
can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) { can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) {
can.page.Modify(can, item, {style: {left: 40*index, top: 40*index}}) can.page.style(can, item, {left: 40*index, top: 40*index})
can.onmotion.move(can, item, {left: 40*index, top: 40*index}) can.onmotion.move(can, item, {left: 40*index, top: 40*index})
}) })
}, },

View File

@ -80,7 +80,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.page.Append(can, target, [{type: "search", list: [{view: ["menu", "div", can.user.trans(can, "search")], onclick: function() { can.page.Append(can, target, [{type: "search", list: [{view: ["menu", "div", can.user.trans(can, "search")], onclick: function() {
can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: ""})) can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: ""}))
}}] }]) }}] }])
can.user.isMobile && can.page.Modify(can, ui, {style: {float: html.RIGHT}}) can.user.isMobile && can.page.style(can, ui, {float: html.RIGHT})
}, },
_background: function(can, msg) { _background: function(can, msg) {
if (can.Conf("background") == "_") { return } if (can.Conf("background") == "_") { return }
@ -107,7 +107,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) { can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) {
can.get("Action", "size", function(msg, top) { can.get("Action", "size", function(msg, top) {
can.page.Modify(can, sub._target, {style: {top: top, right: 0, left: null}}) can.page.style(can, sub._target, {top: top, right: 0, left: null})
}) })
}), target.onmouseenter = target.click }), target.onmouseenter = target.click
}, },
@ -241,7 +241,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
}), can.user.toastSuccess(can) }), can.user.toastSuccess(can)
}, true) }, true)
}) })
can.user.isMobile && can.page.Modify(can, ui._target, {style: {top: 40, right: 0, left: ""}}) can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
}, },
password: function(event, can) { password: function(event, can) {
var ui = can.user.input(event, can, [{name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}], function(ev, button, data, list, args) { var ui = can.user.input(event, can, [{name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}], function(ev, button, data, list, args) {
@ -255,7 +255,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
can.user.toastSuccess(can) can.user.toastSuccess(can)
}, true) }, true)
}) })
can.user.isMobile && can.page.Modify(can, ui._target, {style: {top: 40, right: 0, left: ""}}) can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
}, },
chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") }, chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") },
english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") }, english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") },

View File

@ -107,7 +107,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [], _init: function(can, cb
}) })
}, },
action: function(event, can, river, storm) { action: function(event, can, river, storm) {
can.page.Modify(can, can.sublist[river], {style: {display: html.BLOCK}}) can.page.style(can, can.sublist[river], {display: html.BLOCK})
can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river])
can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)]) can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)])

View File

@ -2,28 +2,29 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.list = msg.Table(), can.onmotion.clear(can, can.ui.content) can.list = msg.Table(), can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status(mdb.TOTAL, index+1) var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status(mdb.TOTAL, index+1)
return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) {
can.onaction[can.type == "*"||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index) can.onaction[can.type == mdb.FOREACH||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index)
}} }}
}, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS), function(item) { }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS), function(item) {
return list.indexOf(item) return list.indexOf(item)
})); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) })); table && can.page.styleWidth(can, can.ui.display, table.offsetWidth)
can.onmotion.story.auto(can)
can.onappend._status(can, can.base.Obj(msg.Option("_status"), []).concat({name: "selected", value: "0"}))
can.getActionSize(function(msg, height) { can.getActionSize(function(msg, height) {
can.page.Modify(can, can.ui.profile, kit.Dict(html.MAX_HEIGHT, can.base.Min(height-(table&&table.offsetHeight||0), height/2))) can.page.style(can, can.ui.profile, html.MAX_HEIGHT, can.base.Min(height-(table&&table.offsetHeight||0), height/2))
}) })
msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click()
can.page.Select(can, can._output, "A", function(item) { can.page.Select(can, can._output, html.A, function(item) {
item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) } item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) }
}) }), can.onmotion.story.auto(can)
can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: "selected", value: "0"}))
msg.Length() == 1 && can.ui.display.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click()
}, },
_word: function(can, msg, cmds, fields) { can.type = cmds[0] _word: function(can, msg, cmds, fields) { can.type = cmds[0]
var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return } var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return }
var res = can.request({}, { var res = can.request({}, {
word: cmds, fields: fields.join(ice.FS), sort: msg.Option("sort"), word: cmds, fields: fields.join(ice.FS), sort: msg.Option("sort"),
river: msg.Option(chat.RIVER), index: msg.Option("index"), river: msg.Option(chat.RIVER), index: msg.Option(mdb.INDEX),
}) })
can.onengine.signal(can, chat.ONSEARCH, res) can.onengine.signal(can, chat.ONSEARCH, res)
@ -42,42 +43,39 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
}, can.onimport._word(can, msg, cmds, fields) }, can.onimport._word(can, msg, cmds, fields)
can.getActionSize(function(msg, top, left, width, height) { can.getActionSize(function(msg, top, left, width, height) {
can.page.Modify(can, can._target, {style: {top: top, left: left}}) can.page.style(can, can._target, {top: top, left: left})
can.page.Modify(can, can._output, {style: kit.Dict(html.MAX_HEIGHT, height-71, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)}) can.page.style(can, can._output, html.MAX_HEIGHT, height-71, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
can.page.Modify(can, can.ui.content, {style: kit.Dict(html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)}) can.page.style(can, can.ui.content, html.MAX_HEIGHT, height/2, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
can.page.Modify(can, can.ui.display, {style: kit.Dict(html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)}) can.page.style(can, can.ui.display, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
}) })
}, },
}) })
Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, cb, target) {
can.onmotion.hidden(can, can._target) can.onmotion.hidden(can, can._target), can.base.isFunc(cb) && cb()
can.base.isFunc(cb) && cb()
}, },
onlogin: function(can, msg) { onlogin: function(can, msg) {
can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list) can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list)
can.ui = can.page.Append(can, can._output, [ can.ui = can.page.Append(can, can._output, [
{input: ["word", function(event) { can.onkeymap.input(event, can) {input: ["word", function(event) { can.onkeymap.input(event, can)
if (event.key == lang.ESCAPE) { can.onmotion.hide(can) } if (event.key == lang.ESCAPE) { return can.onmotion.hide(can) }
if (event.key == lang.ENTER) { can.onkeymap.prevent(event) if (event.key == lang.ENTER) { can.onkeymap.prevent(event)
if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1] if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1]
return can.onaction[can.type == "*"? chat.PLUGIN: html.SELECT](event, can, first.dataset.index) return can.onaction[can.type == mdb.FOREACH? chat.PLUGIN: html.SELECT](event, can, first.dataset.index)
} }
if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) } if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) }
can.input(event, event.target.value) return can.input(event, event.target.value)
} }
can.page.Select(can, can.ui.content, html.TR, function(tr, index) { can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr) {
if (index == 0) { return }
var has = false; can.page.Select(can, tr, html.TD, function(td) { var has = false; can.page.Select(can, tr, html.TD, function(td) {
has = has || td.innerText.indexOf(event.target.value) > -1 has = has || td.innerText.indexOf(event.target.value) > -1
}) }), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
can.page.ClassList.set(can, tr, html.HIDDEN, !has)
}) })
}]}, }]},
{view: chat.CONTENT}, {view: html.STATUS}, {view: [chat.DISPLAY, html.TABLE]},{view: chat.PROFILE}, chat.CONTENT, html.STATUS, {view: [chat.DISPLAY, html.TABLE]}, chat.PROFILE,
]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT) ]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT)
}, },
onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||"*", word||""]) }, onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||mdb.FOREACH, word||""]) },
clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) }, clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) },
done: function(event, can) { can.base.isFunc(can.cb) && can.cb() }, done: function(event, can) { can.base.isFunc(can.cb) && can.cb() },
@ -86,34 +84,28 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.
select: function(event, can, index) { var line = can.list[index] select: function(event, can, index) { var line = can.list[index]
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
if (line.ctx == "web.chat" && line.cmd == "/search") {
return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb)
}
var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }) var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText })
can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) {
return line[item] can.page.Remove(can, event.target.parentNode)
}), data: {index: index}, onclick: function(event) { can.page.Remove(can, event.target.parentNode)
can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1) can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1)
}}]), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1) }}]), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1)
}, },
plugin: function(event, can, index) { var line = can.list[index] plugin: function(event, can, index) { var line = can.list[index]
if (event.target.tagName == "A") { return }
if (line.ctx == "web.wiki" && line.cmd == "word") { return }
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
if (line.ctx == "web.wiki" && line.cmd == "word") { return }
if (can.page.tagis(html.A, event.target)) { return }
var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd) var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd)
can.onappend.plugin(can, {type: chat.PLUGIN, index: cmd||msg.Option(mdb.INDEX)}, function(sub, meta) { can.onappend.plugin(can, {type: chat.PLUGIN, index: cmd||msg.Option(mdb.INDEX)}, function(sub, meta) {
can.getActionSize(function(msg, height, width) { height = can.base.Min(height - can.ui.content.offsetHeight+204, height/2) can.getActionSize(function(msg, height, width) { height = can.base.Min(height - can.ui.content.offsetHeight+204, height/2)
can.page.Modify(can, sub._output, {style: kit.Dict(html.MAX_HEIGHT, height-26, html.MAX_WIDTH, width-40)}) can.page.style(can, sub._output, html.MAX_HEIGHT, height-26, html.MAX_WIDTH, width-40)
sub.Conf(html.HEIGHT, height+28), sub.Conf(html.WIDTH, width-60) sub.ConfHeight(height+28), sub.ConfWidth(width-60)
}) })
sub.run = function(event, cmds, cb) { var msg = can.request(event) sub.run = function(event, cmds, cb) {
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true) can.runAction(event, ice.RUN, [meta.index].concat(cmds), cb)
} }, sub.Focus()
sub.Focus()
}, can.ui.profile) }, can.ui.profile)
}, },
}) })

View File

@ -12,9 +12,9 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.onimport._item(can, can._meta, can.ui.project, can.onimport._size(can)).click() can.onimport._item(can, can._meta, can.ui.project, can.onimport._size(can)).click()
}, },
_size: function(can) { _size: function(can) {
var width = can.Conf(html.WIDTH)-260, height = can.Conf(html.HEIGHT)-100 var width = can.ConfWidth()-260, height = can.ConfHeight()-100
if (can.Conf("auto.cmd")) { if (can.Conf("auto.cmd")) {
width = can.Conf(html.WIDTH), height = can.Conf(html.HEIGHT) width = can.ConfWidth(), height = can.ConfHeight()
can.onmotion.hidden(can, can.ui.project) can.onmotion.hidden(can, can.ui.project)
can.onmotion.hidden(can, can.ui.profile) can.onmotion.hidden(can, can.ui.profile)
can.onmotion.hidden(can, can._option) can.onmotion.hidden(can, can._option)
@ -22,7 +22,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
} }
if (can.user.mod.isCmd || can.user.mod.isDiv) { if (can.user.mod.isCmd || can.user.mod.isDiv) {
width = can._root._width, height = can._root._height width = can._root._width, height = can._root._height
can.page.Modify(can, can._output, {style: {width: width, height: height}}) can.page.style(can, can._output, {width: width, height: height})
} }
return width return width
}, },
@ -58,7 +58,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
var size = {width: width, height: meta.height} var size = {width: width, height: meta.height}
var field = can.onappend.field(can, chat.LAYOUT, {}, target).fieldset var field = can.onappend.field(can, chat.LAYOUT, {}, target).fieldset
can.page.ClassList.add(can, field, meta.style) can.page.ClassList.add(can, field, meta.style)
can.page.Modify(can, field, {style: size}) can.page.style(can, field, size)
meta.index && can.run(event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { meta.index && can.run(event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) {
can.onappend._init(can, can.base.Copy({ can.onappend._init(can, can.base.Copy({
@ -67,7 +67,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
args: meta.args, args: meta.args,
name: meta.name, name: meta.name,
}, size), ["/plugin/state.js"], function(sub) { }, size), ["/plugin/state.js"], function(sub) {
can.page.Modify(can, sub._output, {style: size}) can.page.style(can, sub._output, size)
sub.run = function(event, cmds, cb) { sub.run = function(event, cmds, cb) {
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true) can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true)
} }

View File

@ -7,10 +7,10 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
}, },
_plugin: function(can, index, pos, from, to) { _plugin: function(can, index, pos, from, to) {
return can.onappend.plugin(can, {type: chat.STORY, index: index}, function(sub) { return can.onappend.plugin(can, {type: chat.STORY, index: index}, function(sub) {
can.page.Modify(can, sub._target, {style: {float: pos, clear: pos}}) can.page.style(can, sub._target, {float: pos, clear: pos})
sub.Conf(html.WIDTH, can.Conf(html.WIDTH)/2) sub.ConfWidth(can.ConfWidth()/2)
sub._legend.innerHTML = can.Option(from)+ice.SP+index sub._legend.innerHTML = can.Option(from)+ice.SP+index
can.page.Modify(can, sub._output, {style: {"max-width": can.Conf(html.WIDTH)/2}}) can.page.style(can, sub._output, "max-width", can.ConfWidth()/2)
sub.run = function(event, cmds, cb) { sub.run = function(event, cmds, cb) {
if (can.onaction[cmds[1]]) { return can.onaction[cmds[1]](can, from, to, event, cmds, cb) } if (can.onaction[cmds[1]]) { return can.onaction[cmds[1]](can, from, to, event, cmds, cb) }

View File

@ -62,7 +62,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
_simple: function(can, target) { _simple: function(can, target) {
can.tabview[can.onexport.keys(can)] = can._msg can.tabview[can.onexport.keys(can)] = can._msg
can.Conf(html.HEIGHT, ""), can.ui.project._toggle() can.ConfHeight(""), can.ui.project._toggle()
can.page.ClassList.add(can, can._fields, html.OUTPUT) can.page.ClassList.add(can, can._fields, html.OUTPUT)
can.page.ClassList.add(can, can._fields, "simple") can.page.ClassList.add(can, can._fields, "simple")
can.onmotion.hidden(can, can.ui._tabs) can.onmotion.hidden(can, can.ui._tabs)
@ -383,8 +383,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line
can.parse = can.base.Ext(can.file), can.Status("模式", "plugin") can.parse = can.base.Ext(can.file), can.Status("模式", "plugin")
var p = cache_data[can.file]; p && (can.current = p.current, can.max = p.max) var p = cache_data[can.file]; p && (can.current = p.current, can.max = p.max)
can.page.Modify(can, can.ui.profile, {style: {display: p? p.profile_display: html.NONE}}) can.page.style(can, can.ui.profile, {display: p? p.profile_display: html.NONE})
can.page.Modify(can, can.ui.display, {style: {display: p? p.display_display: html.NONE}}) can.page.style(can, can.ui.display, {display: p? p.display_display: html.NONE})
can.onmotion.select(can, can._action, html.DIV_TABS, msg._tab) can.onmotion.select(can, can._action, html.DIV_TABS, msg._tab)
can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab) can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab)
can.onmotion.delay(can, function() { can.onimport.layout(can) can.onmotion.delay(can, function() { can.onimport.layout(can)
@ -590,7 +590,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["搜索", "打开", "添
can.onaction.favorLine(can, ui.text.innerText) can.onaction.favorLine(can, ui.text.innerText)
}}, }},
{view: [html.TEXT, html.TD], list: [can.onsyntax._parse(can, value)], onclick: function(event) { {view: [html.TEXT, html.TD], inner: can.onsyntax._parse(can, value), onclick: function(event) {
can.onaction.selectLine(event, can, ui.tr) can.onaction.selectLine(event, can, ui.tr)
}, ondblclick: function(event) { }, ondblclick: function(event) {

View File

@ -28,8 +28,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
}, [""]) }, [""])
Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [],
_model: function(can, value) { can.Status("模式", can.mode = value) _model: function(can, value) { can.Status("模式", can.mode = value)
can.page.Modify(can, can.ui.current, {className: ["current", can.mode]}), value can.page.styleClass(can, can.ui.current, ["current", can.mode]), value
can.page.Modify(can, can.ui.complete, {className: ["complete", can.mode]}), value can.page.styleClass(can, can.ui.complete, ["complete", can.mode]), value
}, },
_plugin: function(event, can) { can.onkeymap._model(can, "plugin") _plugin: function(event, can) { can.onkeymap._model(can, "plugin")
can.ui.current.blur() can.ui.current.blur()

View File

@ -2,9 +2,9 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.onmotion.clear(can, target) can.onmotion.clear(can, target)
can.ui = can.onlayout.profile(can) can.ui = can.onlayout.profile(can)
can.onimport[can.Option("scale")||"week"](can, msg) can.onimport[can.Option("scale")||"week"](can, msg)
can.page.Modify(can, can.ui.project, {style: {"max-height": can.ui.content.offsetHeight}}) can.page.style(can, can.ui.project, html.MAX_HEIGHT, can.ui.content.offsetHeight)
can.page.Modify(can, can.ui.profile, {style: {"max-height": can.ui.content.offsetHeight}}) can.page.style(can, can.ui.profile, html.MAX_HEIGHT, can.ui.content.offsetHeight)
can.page.Modify(can, can.ui.profile, {style: {display: "block"}}) can.page.style(can, can.ui.profile, {display: "block"})
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project) can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project)
}, },
@ -80,7 +80,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, task[mdb.ZONE], task[mdb.ID]], cmds), cb, true) can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, task[mdb.ZONE], task[mdb.ID]], cmds), cb, true)
} }
}, can.ui.display) }, can.ui.display)
can.page.Modify(can, can.ui.display, {style: {display: html.BLOCK}}) can.page.style(can, can.ui.display, {display: html.BLOCK})
}, },
day: function(can, msg) { day: function(can, msg) {

View File

@ -28,7 +28,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
pid && can.page.Select(can, can.svg, ice.PT+pid, function(item) { pid && can.page.Select(can, can.svg, ice.PT+pid, function(item) {
can.ondetail.run({target: item}, can), can.onimport._profile(can, item) can.ondetail.run({target: item}, can), can.onimport._profile(can, item)
}) || can.onimport._profile(can, can.svg), can.onmotion.hidden(can, can.ui.profile) }) || can.onimport._profile(can, can.svg), can.onmotion.hidden(can, can.ui.profile)
can.page.Modify(can, can.ui.display, {style: {"min-height": 80, "max-height": can.Conf("height")-can.svg.Val("height")-52}}) can.page.style(can, can.ui.display, html.MIN_HEIGHT, 80, html.MAX_HEIGHT, can.ConfHeight()-can.svg.Val(html.HEIGHT)-52)
}) })
}, },
_group: function(can, target) { var name = target.Groups() _group: function(can, target) { var name = target.Groups()
@ -47,7 +47,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
target.oncontextmenu = function(event) { target.oncontextmenu = function(event) {
var carte = can.user.carte(event, can, can.ondetail, null, function(ev, button, meta) { var carte = can.user.carte(event, can, can.ondetail, null, function(ev, button, meta) {
meta[button](event, can, button) meta[button](event, can, button)
}); can.page.Modify(can, carte._target, {style: {left: event.clientX, top: event.clientY}}) }); can.page.style(can, carte._target, {left: event.clientX, top: event.clientY})
} }
target.Val = function(key, value) { target.Val = function(key, value) {
return parseInt(target.Value(key, value == undefined? value: parseInt(value)||0))||0 return parseInt(target.Value(key, value == undefined? value: parseInt(value)||0))||0
@ -353,7 +353,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [
if (target == can.svg) { if (target == can.svg) {
if (pos == 5) { if (pos == 5) {
can.Action(ice.MODE, "draw"), can.Action("shape", html.BLOCK) can.Action(ice.MODE, "draw"), can.Action("shape", html.BLOCK)
can.page.Modify(can, target, {style: {cursor: "crosshair"}}) can.page.style(can, target, {cursor: "crosshair"})
} else { } else {
can.Action(ice.MODE, "resize") can.Action(ice.MODE, "resize")
} }
@ -483,7 +483,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["group", "figure", "index"
return ['<svg vertion="1.1" xmlns="https://www.w3.org/2000/svg" text-anchor="middle" dominant-baseline="middle"'].concat( return ['<svg vertion="1.1" xmlns="https://www.w3.org/2000/svg" text-anchor="middle" dominant-baseline="middle"'].concat(
svg? can.core.List([html.HEIGHT, html.WIDTH, mdb.COUNT, "pid", "grid", html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(item) { svg? can.core.List([html.HEIGHT, html.WIDTH, mdb.COUNT, "pid", "grid", html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(item) {
return svg.Value(item)? ice.SP + item + '="' + svg.Value(item) + '"': "" return svg.Value(item)? ice.SP + item + '="' + svg.Value(item) + '"': ""
}): [" height="+((can.Conf(html.HEIGHT)||450)-50)+" width="+(can.Conf(html.WIDTH)||600)]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("") }): [" height="+((can.ConfHeight()||450)-50)+" width="+(can.ConfWidth()||600)]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("")
}, },
cursor: function(event, can, item, show) { cursor: function(event, can, item, show) {
var p = item.getBoundingClientRect() var p = item.getBoundingClientRect()

View File

@ -88,8 +88,8 @@ Volcanos(chat.ONDETAIL, {help: "组件菜单", list: ["关闭", "下载", "删
sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) } sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) }
sub.getActionSize(function(msg, left, top, width, height) { sub.getActionSize(function(msg, left, top, width, height) {
sub.page.Modify(sub, sub._target, {style: {left: left, top: top}}) sub.page.style(sub, sub._target, {left: left, top: top})
sub.page.Modify(sub, sub._output, {style: {"max-width": width, "max-height": height}}) sub.page.style(sub, sub._output, html.MAX_WIDTH, width, html.MAX_HEIGHT, height)
sub.onappend._action(can, can.ondetail.list, sub._action, can.ondetail) sub.onappend._action(can, can.ondetail.list, sub._action, can.ondetail)
can.order = index, can.show = function(order) { can.order = index, can.show = function(order) {

View File

@ -5,7 +5,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.page.Modify(can, target, msg.Result()) can.page.Modify(can, target, msg.Result())
can.page.Select(can, target, wiki.ITEM, function(item) { var data = item.dataset||{} can.page.Select(can, target, wiki.ITEM, function(item) { var data = item.dataset||{}
can.page.Modify(can, item, {style: can.base.Obj(data.style)}) can.page.style(can, item, can.base.Obj(data.style))
can.core.CallFunc([can.onimport, data.type], [can, data, item]) can.core.CallFunc([can.onimport, data.type], [can, data, item])
// can.page.style(can, item, html.MAX_WIDTH, can.ConfWidth()-(can.user.isWindows? 40: 30)) // can.page.style(can, item, html.MAX_WIDTH, can.ConfWidth()-(can.user.isWindows? 40: 30))
}) })
@ -36,12 +36,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, nav), can.sup._navmenu = nav }, nav), can.sup._navmenu = nav
can.getActionSize(function(msg) { can.getActionSize(function(msg) {
can.page.style(can, nav, html.HEIGHT, can.Conf(html.HEIGHT)+(can.user.mod.isCmd? msg.Option(html.MARGIN_Y): 0)) can.page.style(can, nav, html.HEIGHT, can.ConfHeight()+(can.user.mod.isCmd? msg.Option(html.MARGIN_Y): 0))
can.Conf(html.WIDTH, can.Conf(html.WIDTH)-nav.offsetWidth-(can.user.mod.isCmd? 10: 20)-10) can.ConfWidth(can.ConfWidth()-nav.offsetWidth-(can.user.mod.isCmd? 10: 20)-10)
can.page.Modify(can, can._output, {style: kit.Dict( can.page.style(can, can._output,
html.HEIGHT, can.sup._navmenu.offsetHeight, html.MAX_WIDTH, can.Conf(html.WIDTH), html.HEIGHT, can.sup._navmenu.offsetHeight, html.MAX_WIDTH, can.ConfWidth(),
html.FLOAT, html.LEFT, html.CLEAR, html.NONE html.FLOAT, html.LEFT, html.CLEAR, html.NONE
)}) )
}) })
}, },
premenu: function(can, data, target) { premenu: function(can, data, target) {
@ -139,7 +139,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, can._output, target) }, can._output, target)
}, },
iframe: function(can, data, target) { var meta = can.base.Obj(data.meta) iframe: function(can, data, target) { var meta = can.base.Obj(data.meta)
can.page.Modify(can, target, {width: can.Conf(html.WIDTH)-200}) can.page.Modify(can, target, {width: can.ConfWidth()-200})
}, },
}, [""]) }, [""])
Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [],
@ -218,7 +218,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [],
}) })
Volcanos(chat.ONDETAIL, {help: "交互操作", list: ["删除"], _init: function(can, msg, list, cb, target) { Volcanos(chat.ONDETAIL, {help: "交互操作", list: ["删除"], _init: function(can, msg, list, cb, target) {
}, },
show: function(sub, which) { sub.page.Modify(sub, sub.ui.content, {className: chat.CONTENT}) show: function(sub, which) { sub.page.styleClass(sub, sub.ui.content, chat.CONTENT)
sub.page.Select(sub, sub.ui.content, wiki.DIV_PAGE, function(page, index) { sub.page.Select(sub, sub.ui.content, wiki.DIV_PAGE, function(page, index) {
if (index == which || page == which) { if (index == which || page == which) {
sub.page.Select(sub, page, sub.page.Keys(html.H1, html.H2, html.H3), function(item) { sub.Action("菜单", item.innerHTML) }) sub.page.Select(sub, page, sub.page.Keys(html.H1, html.H2, html.H3), function(item) { sub.Action("菜单", item.innerHTML) })
@ -245,7 +245,7 @@ Volcanos(chat.ONDETAIL, {help: "交互操作", list: ["删除"], _init: function
sub.sup.ondetail.show(sub, page), sub.core.Timer(500, function() { next() }) sub.sup.ondetail.show(sub, page), sub.core.Timer(500, function() { next() })
}) })
}, },
grid: function(sub) { sub.page.Modify(sub, sub.ui.content, {className: "content grid"}) }, grid: function(sub) { sub.page.styleClass(sub, sub.ui.content, "content grid") },
"开讲": function(event, can) { can.sup.ondetail.show(can, 0) }, "开讲": function(event, can) { can.sup.ondetail.show(can, 0) },
"快闪": function(event, can) { can.sup.ondetail.flash(can) }, "快闪": function(event, can) { can.sup.ondetail.flash(can) },

View File

@ -28,12 +28,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, me
sub.Conf(can.base.Obj(item.conf)) sub.Conf(can.base.Obj(item.conf))
if (sub.Conf("mode") == "simple") { if (sub.Conf("mode") == "simple") {
var msg = can.request(); msg.Echo(sub.Conf("result")) var msg = can.request(); msg.Echo(sub.Conf("result"))
sub.Conf(html.HEIGHT, can.Conf(html.HEIGHT)/2) sub.ConfHeight(can.ConfHeight()/2)
return can.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY)||sub.Conf("feature.display")) return can.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY)||sub.Conf("feature.display"))
} }
var opt = can.base.Obj(item[ice.OPT], []) var opt = can.base.Obj(item[ice.OPT], [])
sub.Conf(html.HEIGHT, can.Conf(html.HEIGHT)) sub.ConfHeight(can.ConfHeight())
sub.Conf(html.WIDTH, can.Conf(html.WIDTH)-4*html.PLUGIN_MARGIN) sub.ConfWidth(can.ConfWidth()-4*html.PLUGIN_MARGIN)
sub.run = function(event, cmds, cb, silent) { sub.run = function(event, cmds, cb, silent) {
var res = can.request(event, can.Option()) var res = can.request(event, can.Option())
for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) } for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) }

View File

@ -9,7 +9,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.onmotion.clear(can, can.ui.project), can.onappend.table(can, msg, null, can.ui.project) can.onmotion.clear(can, can.ui.project), can.onappend.table(can, msg, null, can.ui.project)
can.onmotion.hidden(can, can.ui.project, true) can.onmotion.hidden(can, can.ui.project, true)
var rest = can.ConfWidth()-height var rest = can.ConfWidth()-height
can.page.Modify(can, can.ui.project, {style: {"max-width": rest}}) can.page.style(can, can.ui.project, html.MAX_WIDTH, rest)
can.page.Select(can, can.ui.project, html.TR, function(tr, index) { can.page.Select(can, can.ui.project, html.TR, function(tr, index) {
can.page.Modify(can, tr, {onmouseenter: function(event) { can.page.Modify(can, tr, {onmouseenter: function(event) {
can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, can._args.field, r+margin, r+margin, r, margin, index-1) can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, can._args.field, r+margin, r+margin, r, margin, index-1)

View File

@ -45,10 +45,10 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: ["edit", [ice.VIEW, "趋势
"edit": function(event, can) { can.onmotion.toggle(can, can._action), can.onmotion.toggle(can, can._status) }, "edit": function(event, can) { can.onmotion.toggle(can, can._action), can.onmotion.toggle(can, can._status) },
"趋势图": function(event, can) { var height = can.Action(html.HEIGHT) "趋势图": function(event, can) { var height = can.Action(html.HEIGHT)
if (height == ice.AUTO) { height = can.Conf(html.HEIGHT) } if (height == ice.AUTO) { height = can.ConfHeight() }
height = parseInt(height) height = parseInt(height)
var space = 10, width = parseInt(can.Conf(html.WIDTH)) var space = 10, width = parseInt(can.ConfWidth())
var step = parseInt((width-2*space) / can.list.length) var step = parseInt((width-2*space) / can.list.length)
can.onmotion.clear(can, can.svg) can.onmotion.clear(can, can.svg)
@ -94,7 +94,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: ["edit", [ice.VIEW, "趋势
}) })
var height = parseInt(can.Action(html.HEIGHT)) var height = parseInt(can.Action(html.HEIGHT))
var space = 10, width = parseInt(can.Conf(html.WIDTH)) var space = 10, width = parseInt(can.ConfWidth())
var step = parseInt((width-2*space) / can.list.length) var step = parseInt((width-2*space) / can.list.length)
can.onmotion.clear(can, can.svg) can.onmotion.clear(can, can.svg)

View File

@ -51,18 +51,18 @@ setTimeout(function() { Volcanos({Option: function() { return [] },
can.run(event, [chat.FIELD, mdb.INSERT, mdb.ZONE, location.host].concat(args), function(res) { can.run(event, [chat.FIELD, mdb.INSERT, mdb.ZONE, location.host].concat(args), function(res) {
can.user.toastSuccess(can) can.user.toastSuccess(can)
}) })
}); can.page.Modify(can, ui._target, {style: {left: 200, top: 200}}) }); can.page.style(can, ui._target, {left: 200, top: 200})
can.page.ClassList.add(can, ui._target, chat.CONTEXTS) can.page.ClassList.add(can, ui._target, chat.CONTEXTS)
}, },
field: function(can, msg, arg) { field: function(can, msg, arg) {
can.onappend.plugin(can, {type: chat.CONTEXTS, index: arg[0], args: can.base.Obj(arg[1])}, function(sub, meta) { can.onappend.plugin(can, {type: chat.CONTEXTS, index: arg[0], args: can.base.Obj(arg[1])}, function(sub, meta) {
var pos = {left: msg.Option(html.LEFT), top: msg.Option(html.TOP), right: msg.Option(html.RIGHT), bottom: msg.Option(html.BOTTOM)} var pos = {left: msg.Option(html.LEFT), top: msg.Option(html.TOP), right: msg.Option(html.RIGHT), bottom: msg.Option(html.BOTTOM)}
can.page.Modify(can, sub._target, {style: pos}) can.page.style(can, sub._target, pos)
can.onmotion.move(can, sub._target, pos, function(target) { can.onmotion.move(can, sub._target, pos, function(target) {
can.page.Modify(can, sub._output, {style: { can.page.style(can, sub._output,
"max-height": can._root._height-target.offsetTop-80, html.MAX_HEIGHT, can._root._height-target.offsetTop-80,
"max-width": can._root._width-target.offsetLeft-20, html.MAX_WIDTH, can._root._width-target.offsetLeft-20,
}}) )
}) })
sub._legend.onclick = function(event) { sub._legend.onclick = function(event) {