diff --git a/frame.js b/frame.js index 973931ce..93286a65 100644 --- a/frame.js +++ b/frame.js @@ -263,7 +263,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (can.base.beginWith(item.value, nfs.PS, ice.HTTP)) { item.value = can.page.Format(html.A, item.value, item.value.split("?")[0]) } if (keys[item.name]) { return can.Status(item.name, item.value) } keys[item.name] = item can.page.Append(can, status, [{view: html.ITEM, list: [ - {text: [can.page.Color(can.user.trans(can, item.name, null, html.INPUT)), html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value == undefined? "": item.value.trim())+"", html.SPAN, item.name]}, + {text: [can.page.Color(can.user.trans(can, item.name, null, html.INPUT)), html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value == undefined? "": (item.value+"").trim())+"", html.SPAN, item.name]}, ], onclick: function(event) { can.user.copy(event, can, item.value) }}]) }) }, @@ -272,7 +272,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { var name = can.core.Split(item.nick||item.name||"").pop()||""; can.base.isIn(name, tcp.SERVER, tcp.CLIENT, web.STUDIO, web.SERVICE, mdb.SEARCH, ) && (name = (item.index||"").split(".").slice(-2).join(".")), name = can.core.Keys(item.space, name) - var title = item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name + var title = item.title || (item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name) target = can.base.isFunc(target)? target(): target return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [item.icon && {icon: item.icon}, {text: title}]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}]) }, @@ -384,11 +384,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { target.onclick = function(event) { can.misc.Event(event, can, function(msg) { can.run(can.request(event, can.Option()), [ctx.ACTION, target.name]) }) } }) } return code.scrollBy && code.scrollBy(0, 10000), code }, - tools: function(can, msg, cb, target) { - // can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT), can.misc.sessionStorage(can, [can.ConfIndex(), "tool"]))||[], cb, target) - can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT))||[], cb, target) - }, - + tools: function(can, msg, cb, target) { can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT))||[], cb, target) }, style: function(can, style, target) { target = target||can._fields||can._target if (can.base.endWith(style, ".css")) { return can.require([style]) } can.base.isObject(style) && !can.base.isArray(style)? can.page.style(can, target, style): can.page.ClassList.add(can, target, style) @@ -488,12 +484,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)||ice.CAN_PLUGIN - // meta._space = can.ConfSpace() var res = {}; function _cb(sub, meta, skip) { kit.proto(res, sub), cb && cb(sub, meta, skip) } if (meta.inputs && meta.inputs.length > 0 || meta.meta) { can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, _cb, target, field); return res } - var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { - value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) - }, target, field); return res } + var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) }, target, field); return res } can.runAction(can.request({}, {_method: http.GET, pod: meta.space})._caller(), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res }, _plugin: function(can, value, meta, cb, target, field) { can.base.Copy(meta, value, true) @@ -508,6 +501,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.runActionCommand(sub.request(event, {pod: meta.space}), sub._index, cmds, cb) } }, sub._index = value.index||meta.index, can.base.isFunc(cb) && cb(sub, meta, skip) + meta.style == html.FLOAT && can.onlayout._float(sub) }, target||can._output, field) }, _float: function(can, index, args, cb) { can.onappend.plugin(can, {index: index, args: args, mode: chat.FLOAT}, function(sub) { @@ -552,18 +546,6 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { can.page.styleWidth(can, target, width) }) }, background: function(can, url, target) { can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, - _figure: function(event, can, target, right, min) { - if (!can.user.isMobile) { return can.onlayout.figure(event, can, target, right, min) } - if (!event || !event.target) { return {} } target = target||can._fields||can._target - var rect = event.target == document.body? {left: can.page.width()/2, top: can.page.height()/2, right: can.page.width()/2, bottom: can.page.height()/2}: (event.currentTarget||event.target).getBoundingClientRect() - var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} - can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0, height = can.base.Max(height, can.page.height()-top) - can.page.style(can, target, html.MAX_HEIGHT, top+height-layout.top) - can.page.style(can, target, html.MAX_WIDTH, left+width-layout.left) - }); - can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) - return layout - }, figure: function(event, can, target, right, min) { if (!event || !event.target) { return {} } target = target||can._fields||can._target var rect = event.target == document.body? {left: can.page.width()/2, top: can.page.height()/2, right: can.page.width()/2, bottom: can.page.height()/2}: (event.currentTarget||event.target).getBoundingClientRect() var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} @@ -588,6 +570,27 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) return layout }, + _figure: function(event, can, target, right, min) { + if (!can.user.isMobile) { return can.onlayout.figure(event, can, target, right, min) } + if (!event || !event.target) { return {} } target = target||can._fields||can._target + var rect = event.target == document.body? {left: can.page.width()/2, top: can.page.height()/2, right: can.page.width()/2, bottom: can.page.height()/2}: (event.currentTarget||event.target).getBoundingClientRect() + var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} + can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0, height = can.base.Max(height, can.page.height()-top) + can.page.style(can, target, html.MAX_HEIGHT, top+height-layout.top) + can.page.style(can, target, html.MAX_WIDTH, left+width-layout.left) + }); + can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) + return layout + }, + _float: function(can) { var target = can._fields||can._target, sup = can._fields? can.sup: can + can.onappend.style(can, html.FLOAT), can.onmotion.resize(can, target, function(height, width) { sup.onimport.size(sup, height, width, true) }) + can.page.style(can, target, html.LEFT, 250, html.TOP, 132), sup.onimport.size(sup, 600, 600, true) + target.onclick = function(event) { can.onkeymap.prevent(event) + can.page.Select(can, document.body, "fieldset.float,div.float", function(target) { + can.page.style(can, target, "z-index", 9) + }), can.page.style(can, target, "z-index", 10) + } + }, }) Volcanos(chat.ONMOTION, {_init: function(can, target) { target.onclick = function(event) { if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } @@ -761,7 +764,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { html.TOP, can.base.Min(begin.top + dy, top||0, window.innerHeight-html.ACTION_HEIGHT) ) } can.onkeymap.prevent(event) - } else { var p = can.page.position(event, target), margin = 20, cursor = "" + } else { var p = can.page.position(event, target), margin = 10, cursor = "" if (p.x < margin) { cursor = "ew-resize", action = html.LEFT } else if (target.offsetWidth-margin < p.x) { cursor = "ew-resize", action = html.RIGHT } else if (target.offsetHeight-margin < p.y || can.page.ClassList.has(can, event.target, html.STATUS) && can.page.tagis(event.target, html.DIV)) { cursor = "ns-resize", action = html.BOTTOM diff --git a/index.css b/index.css index f5cd09c9..5ec8f3f2 100644 --- a/index.css +++ b/index.css @@ -242,6 +242,7 @@ fieldset.float.plug>form.option>div.text>span.value { display:none; } fieldset.float:not(.plug)>form.option>div.text>input { display:none; } fieldset.float:not(.plug)>form.option>div.text>span { display:none; } fieldset.float:not(.plug)>form.option>div.text>span.value { white-space:pre; padding:7px; height:32px; max-width:200px; display:block; overflow:auto; } +fieldset.float:not(.plug)>form.option>div.text { box-shadow:none; } body.mobile:not(.landscape) fieldset.float>form.option>div.text>span.value { display:none; } body.windows form.option>div.icon { font-size:21px; line-height:32px; } /* svg */ @@ -320,7 +321,7 @@ legend, form.option, form.option>div.item, div.action, div.action>div.item, div. fieldset.story, fieldset>div.output, fieldset>div.status, div.output>div.project div.item, div.content:not(.item), div.code, div.story[data-type=spark] { clear:both; } fieldset.story { position:sticky; left:0; } fieldset.full { position:fixed; left:0; top:0; } -fieldset.auto, fieldset.full, fieldset.float, div.float { position:fixed; z-index:100; box-shadow:var(--box-shadow); } +fieldset.auto, fieldset.full, fieldset.float, div.float { position:fixed; z-index:10; box-shadow:var(--box-shadow); } fieldset.plug { position:absolute; bottom:0; right:0; } div.output { position:relative; } div.layout.flex>* { float:left; clear:none; } @@ -424,7 +425,7 @@ body.mobile fieldset.Header div.output div.item:not(.avatar) { padding:0px 10px; body.mobile fieldset.Search>div.action>div.item.filter>input { width:100%; } body.mobile fieldset.Search>div.action>div.item.filter>span { position:absolute; } body.mobile fieldset.Search>div.action>div.item.filter { width:100%; position:relative; } -body.mobile fieldset.River { position:fixed; top:var(--header-height); z-index:100; } +body.mobile fieldset.River { position:fixed; top:var(--header-height); z-index:11; } body.mobile fieldset.River>div.output { font-size:1.4rem; min-width:240px; } body.mobile fieldset.Action { margin-top:var(--header-height); } body.mobile fieldset.Action.cmd { margin-top:0; } @@ -497,6 +498,7 @@ fieldset.macos.desktop.cmd>div.output>fieldset.macos.dock { z-index:11; } fieldset.web.code.git.status>div.output table.content { width:100%; } fieldset.web.code.git>div.output>fieldset.web.code.inner>div.output { overflow:auto; } +fieldset.web.mall.region>div.output>table.content td:nth-child(3) { text-align:right; } fieldset.web.mall.region>div.output>table.content td:nth-child(3) { text-align:right; } fieldset.web.mall.region>div.output>table.content td:nth-child(4) { text-align:right; } fieldset.web.mall.region>div.output>table.content td:nth-child(5) { text-align:right; } @@ -525,7 +527,7 @@ fieldset.draw.spide div.output svg path { stroke-width:1; } fieldset.draw>div.output>div.project { width:180px; flex:0 0 180px; } fieldset.draw>div.output>div.layout>div.layout>div.profile { width:180px; flex:0 0 180px; } fieldset.web.chat.location>div.action input[type=text] { width:80px !important; } -fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:5; border-left:none; } +fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:9; border-left:none; } fieldset.web.chat.location>div.output>div.layout>div.layout { position:relative; } fieldset.web.code.git.total.draw div.output { text-align:center; } fieldset.web.code.docker.studio>div.action>div.item { font-style:italic; height:32px; padding:5px 10px; } diff --git a/lib/page.js b/lib/page.js index b2f4b75d..51c7bcf6 100644 --- a/lib/page.js +++ b/lib/page.js @@ -325,6 +325,14 @@ Volcanos("page", { case html.BUTTON: item.value = item.value||item.name||mdb.LIST; break } return input }, + requireChina: function(can, title, list, name, path) { + can.onappend.plugin(can, {title: title, display: "/plugin/story/china.js", style: html.FLOAT, height: can.ConfHeight(), width: can.ConfHeight()}, function(sub) { + sub.run = function(event, cmds, cb) { var msg = can.request(event, {title: title, name: name, path: path}) + can.core.List(list, function(item) { msg.Push(mdb.NAME, item.name), msg.Push(mdb.VALUE, item.value) }), cb(msg) + can.onmotion.resize(can, sub._target, function(height, width) { sub.onimport.size(sub, height, width, true) }) + } + }) + }, requireModules: function(can, libs, cb, cbs) { if (!libs || libs.length == 0) { return cb && cb() } for (var i = 0; i < libs.length; i++) { if (libs[i].indexOf(nfs.PS) == 0 || libs[i].indexOf(ice.HTTP) == 0) { continue } if (libs[i].indexOf(nfs._CSS) == -1 && libs[i].indexOf(nfs._JS) == -1) { libs[i] = libs[i]+"/lib/"+libs[i]+nfs._JS } diff --git a/plugin/local/chat/location.js b/plugin/local/chat/location.js index a9a73bf5..6f0ac71f 100644 --- a/plugin/local/chat/location.js +++ b/plugin/local/chat/location.js @@ -86,7 +86,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { msg.Option(ice.MSG_ACTI circle: can.onfigure.circle(can, item, 100), } can.onfigure._mark(can), can.mark && can.mark.add({position: can.onimport.point(can, can._current), properties: can._current}) - can.page.Select(can, can._target, "div.content>div", function(item) { can.page.style(can, item, {"z-index": 3}) }) + can.page.Select(can, can._target, "div.content>div", function(item) { can.page.style(can, item, {"z-index": 9}) }) }, _item: function(can, item, target) { if (!item.latitude || !item.longitude) { return item } var _target = can.onimport.item(can, item, function(event) { diff --git a/plugin/story/china.js b/plugin/story/china.js new file mode 100644 index 00000000..0141cb98 --- /dev/null +++ b/plugin/story/china.js @@ -0,0 +1,38 @@ +Volcanos(chat.ONIMPORT, { + _init: function(can, msg) { var cache = {} + if (can.Conf(ctx.STYLE) == html.FLOAT && !can.page.ClassList.has(can, can._fields, html.FLOAT)) { msg.Option(ice.MSG_STATUS, ""), can.onlayout._float(can) } + var title = msg.Option("title")||can.Conf("title"), field = can.Conf(mdb.FIELD)||mdb.VALUE, name = msg.Option(mdb.NAME)||can.Conf(mdb.NAME)||"中国", path = msg.Option(nfs.PATH)||can.Conf(nfs.PATH)||"100000" + var max = 0, data = msg.Table(function(value) { if (parseFloat(value[field]) > max) { max = parseFloat(value[field]) } return {name: value.name, value: value[field]} }) + var option = {title: {text: title, left: '5%', textStyle: {fontSize: '24'}}, + tooltip: {show: true, trigger: "item", formatter: function (params) { return params.name+': '+(params.value||"0") }}, + visualMap: {min: 0, max: max, text: ['高', '低'], calculable: true, left: 'left', top: 'bottom'}, + } + can.user.toastProcess(can), can.page.requireModules(can, ["echarts/dist/echarts.js"], function() { + can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth()) + function load(name, path) { can.onimport.load(can, name, path, function() { + can.onimport.tabs(can, [{name:name}], function() { + if (cache[name]) { return can.page.SelectChild(can, can._output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, target == cache[name]) }) } + var chart = echarts.init(cache[name] = can.page.Append(can, can._output, [{view: html.ITEM, style: {height: can.ConfHeight(), width: can.ConfWidth()}}])._target) + option.series = [{name: title, data: data, mapType: name, type: "map"}], option.geo = {map: name}, chart.setOption(option), can.user.toastSuccess(can) + chart.on(html.CLICK, function(params) { + var p = can.onimport.adcode[params.name]; if (p) { return load(params.name, p) } + var p = can.onimport.adcode[name+params.name]; if (p) { return load(name+params.name, p) } + can.user.input({}, can, ["adcode"], function(list) { load(name+params.name, can.onimport.adcode[name+params.name] = list[0]) }) + }), can.page.SelectChild(can, can._output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, target == cache[name]) }) + }, function() { + }) + }) } load(name, path) + }) + }, + load: function(can, name, path, cb) { + path.length == 2 && (path += "0000"), path.length == 4 && (path += "00") + path = "/wiki/geoarea/"+path+(can.base.endWith(path, "00")? "_full": "")+".json" + can.misc.POST(can, can.request({}, {_method: "GET"}), path, {}, function(msg) { echarts.registerMap(name, JSON.parse(msg._xhr.responseText)), cb() }) + }, + adcode: { + "中国": "100000", + "广东省": "440000", + "深圳市": "440300", + "宝安区": "440306", + }, +})