diff --git a/const.js b/const.js index 7a4feacd..2b7968f9 100644 --- a/const.js +++ b/const.js @@ -124,6 +124,7 @@ var aaa = { PROVINCE: "province", COUNTRY: "country", CITY: "city", LONGITUDE: "longitude", LATITUDE: "latitude", EMAIL: "email", SECRET: "secret", + MOBILE: "mobile", USERNICK: "usernick", USERNAME: "username", PASSWORD: "password", USERROLE: "userrole", USERZONE: "userzone", VOID: "void", TECH: "tech", ROOT: "root", @@ -233,8 +234,8 @@ var chat = { "input/date.js", "story/json.js", "story/stats.js", - "story/spide.js", - "story/trend.js", + "story/spides.js", + "story/trends.js", "local/code/xterm.js", "local/code/vimer.js", "local/code/inner.js", diff --git a/frame.js b/frame.js index 0e044cb0..3a27805a 100644 --- a/frame.js +++ b/frame.js @@ -181,9 +181,15 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { item.type == html.BUTTON && item.action == ice.AUTO && can.base.isUndefined(can._delay_init) && (auto = sub._target), next() can.Conf(ice.AUTO) == item.name && (auto = sub._target) }) - }; var auto; can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add, function() { skip || can.Conf(ice.AUTO) == cli.DELAY || auto && auto.click() - meta._help && add({type: html.BUTTON, name: ice.HELP, onclick: function(event) { can.onappend._float(can, {index: web.WIKI_WORD}, [meta._help]) }}, function() {}) - can.misc.Search(can, ice.MSG_DEBUG) == ice.TRUE && add({type: html.BUTTON, name: "vimer", _trans: "源码", onclick: function(event) { + }; var auto; can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add, function() { + var p = can.misc.Search(can, ctx.ACTION) + if (p && can.isCmdMode()) { + skip || can.Conf(ice.AUTO) == cli.DELAY || can.Update({}, [ctx.ACTION, p]) + } else { + skip || can.Conf(ice.AUTO) == cli.DELAY || auto && auto.click() + } + can.user.isMobile || meta._help && add({type: html.BUTTON, name: ice.HELP, onclick: function(event) { can.onappend._float(can, {index: web.WIKI_WORD}, [meta._help]) }}, function() {}) + can.user.isMobile || can.misc.Search(can, ice.MSG_DEBUG) == ice.TRUE && add({type: html.BUTTON, name: "vimer", _trans: "源码", onclick: function(event) { var _can = can._fields? can.sup: can, value = "查看源码"; _can.onaction[value](event, _can, value, _can.sub) }}, function() {}) }) @@ -212,7 +218,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }), item), "", action) }) var _can = can._fields? can.sup: can - can.isCmdMode() || can.base.beginWith(can.ConfIndex(), "can.") || can.page.tagis(can._fields||can._target, html.FIELDSET_PANEL, html.FIELDSET_PLUG) || action == can._action && can.page.Append(can, action, + can.user.isMobile || can.isCmdMode() || can.base.beginWith(can.ConfIndex(), "can.") || can.page.tagis(can._fields||can._target, html.FIELDSET_PANEL, html.FIELDSET_PLUG) || action == can._action && can.page.Append(can, action, can.core.Item({full: "切换全屏", open: "打开链接"}, function(key, value) { return {view: [[html.ITEM, html.BUTTON, key, "icons"]], list: [{icon: icon[key]}], title: can.user.trans(can, key), onclick: function(event) { _can.onaction[value](event, _can, value, _can.sub) @@ -254,6 +260,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { 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): [] + sub._output.className = html.OUTPUT, can.onappend.style(can, sub._args.style, can._output) can.page.style(can, can._output, html.HEIGHT, can._output.offsetHeight) 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) { @@ -697,8 +704,10 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro }, }) Volcanos(chat.ONMOTION, {_init: function(can, target) { - target.onclick = function(event) { if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } + target.onclick = function(event) { + if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } if (can.page.tagis(event.target, html.A) && can.user.isWebview) { return event.shiftKey? window.outopen(event.target.href): can.user.open(event.target.href) } + if (can.page.tagis(event.target, html.IMG) && can.base.beginWith(event.target.title, web.HTTP)) { return can.user.open(event.target.title) } can.onmotion.clearCarte(can) } }, diff --git a/index.css b/index.css index f434c97d..5951a43b 100644 --- a/index.css +++ b/index.css @@ -37,7 +37,7 @@ body { --action-height:32px; --status-height:var(--action-height); --footer-height:var(--action-height); --header-height:48px; --desktop-height:684px; --float-height:480px; --plug-height:var(--story-height); --story-height:var(--float-height); --desktop-width:1200px; --float-width:1200px; --plug-width:800px; - --textarea-height:96px; --qrcode-height:360px; --iframe-height:420px; + --textarea-height:96px; --qrcode-height:260px; --iframe-height:420px; --river-margin:80px; --action-margin:200px; --desktop-icon-size:80px; --plugin-padding:10px; --plugin-margin:var(--plugin-padding); --legend-padding:20px; --title-margin:var(--legend-padding); @@ -220,7 +220,7 @@ body>div.input.login { box-shadow:unset; flex-direction:column; } body>div.input.login>div.action { border-bottom:var(--box-border); flex-direction:row; } body>div.input.login>div.action>div.tabs { padding:var(--button-padding); } body>div.input.login>div.output { text-align:center; clear:both; } -body>div.input.login>div.output { height:var(--qrcode-height); width:var(--iframe-height); overflow:hidden; } +body>div.input.login>div.output { min-height:var(--qrcode-height); min-width:var(--iframe-height); overflow:hidden; } body>div.input.login>div.output>fieldset { box-shadow:none; } body>div.input.login>div.output>fieldset>div.output { background-color:transparent; } body>div.input.login>div.display { flex-direction:column; padding-top:var(--button-padding); width:100%; } @@ -380,6 +380,9 @@ div.project:not(.toggle) { border-right:var(--box-border); width:var(--project-w div.profile:not(.toggle) { border-left:var(--box-border); width:50%; flex:0 0 50%; } div.display:not(.toggle) { border-top:var(--box-border); } /* output style */ +div.output.card { + overflow-x:hidden; +} div.output.card>div.item { background-color:var(--plugin-bg-color); padding:var(--plugin-padding); margin:var(--plugin-padding); border:var(--box-border); border-radius:var(--plugin-radius); box-shadow:var(--box-shadow); @@ -596,6 +599,12 @@ fieldset.draw.trends div.output svg { background-color:#1b5b738c; } fieldset.form>div.output { text-align:center; } fieldset.form>div.output div.info { font-size:20px; padding:40px 20px; overflow:auto; } fieldset.form>div.output input[type=button] { font-size:24px; border:var(--notice-bg-color) solid 1px; height:48px; width:240px; margin:40px; } +fieldset>div.output.form { padding:20px; display:flex; flex-direction:column; align-items:center; justify-content:center; } +fieldset>div.output.form>div.item { text-align:left; margin:10px; } +fieldset>div.output.form>div.item>span { padding:var(--input-padding); } +fieldset>div.output.form>div.item>span.need { color:red; } +fieldset>div.output.form>div.item>div.item>input { width:var(--river-width); } +fieldset>div.output.form>div.item>div.item>input[type=button] { border:var(--notice-bg-color) solid 1px; } fieldset.draw.spides div.output svg text { cursor:pointer; } fieldset.draw.spides div.output svg path { stroke-width:1; } fieldset.draw>div.output>div.layout>div.layout>div.profile { width:var(--project-width); flex:0 0 var(--project-width); } diff --git a/lib/user.js b/lib/user.js index 5b110312..0ca602bf 100644 --- a/lib/user.js +++ b/lib/user.js @@ -260,15 +260,13 @@ Volcanos("user", { return can.base.isFunc(cb) && cb(), cb = null, true } can.core.Timer(1000, function() { check() }), can.onimport.theme(can) } - if (cmd == cli.PWD) { if (check()) { return } can.page.ClassList.add(can, document.body, aaa.LOGIN) - var _list = [] - var list = {}; msg.Table(function(value) { if (value.order == "") {} else if (value.type == mdb.PLUGIN) { _list.push(value.name), list[value.name] = function(target) { - can.onappend.plugin(can, {space: value.space, index: value.index, args: can.core.Split(value.args), style: html.OUTPUT, height: 360, width: 420}, function(sub) { + if (cmd == cli.PWD) { if (check()) { return } can.page.ClassList.add(can, document.body, aaa.LOGIN), can.ondaemon._list[0] = arg[0] + var _list = [], list = {}; msg.Table(function(value) { if (value.order == "") {} else if (value.type == mdb.PLUGIN) { _list.push(value.name), list[value.name] = function(target) { + can.onappend.plugin(can, {space: value.space, index: value.index, args: can.core.Split(value.args), style: html.OUTPUT}, function(sub) { var run = sub.run; sub.run = function(event, cmds, cb) { var msg = can.request(event, {space: arg[0]}); can.page.exportValue(can, msg), run(event, cmds, cb) } + sub.onexport.output = function() { can.page.style(can, sub._output, html.MAX_HEIGHT, ""), can.page.style(can, sub._output, html.MAX_WIDTH, "") } }, ui.output) - } } else if (value.type == cli.QRCODE) { _list.push(value.name), list[value.name] = function(target) { - can.page.Modify(can, target, arg[2]) - } } }) + } } else if (value.type == cli.QRCODE) { _list.push(value.name), list[value.name] = function(target) { can.page.Modify(can, target, arg[2]) } } }) var ui = can.onappend.tabview(can, list, _list, can.page.Append(can, document.body, [{view: "input login float flex"}])._target) can.page.style(can, ui._target, {left: (window.innerWidth-ui._target.offsetWidth)/2, top: can.user.isMobile? can.user.isLandscape()? 0 :48 :window.innerHeight/8}) var _cmd = "space login "+arg[0]; ui.display = can.page.Append(can, ui._target, [html.DISPLAY])._target, can.onappend.style(can, html.FLEX, ui.display) @@ -276,9 +274,7 @@ Volcanos("user", { can.page.Append(can, ui.display, [{text: ["或第三方授权: ", html.LABEL]}, {view: [["sso", html.FLEX]], list: msg.Table(function(value) { return value.type == "oauth" && {view: [[html.ITEM, html.FLEX]], title: "点击跳转,授权登录", list: [{img: can.misc.Resource(can, value.icons)}, {text: value.name}], onclick: function() { can.user.jumps(value.link) }} }) }]) - } else if (cmd == ice.MSG_SESSID) { - if (!can.misc.CookieSessid(can, arg[0])) { can.user.info.sessid = arg[0] } check() - } + } else if (cmd == ice.MSG_SESSID) { if (!can.misc.CookieSessid(can, arg[0])) { can.user.info.sessid = arg[0] } check() } }) }, logout: function(can) { can.user.toastConfirm(can, aaa.LOGOUT, "", function() { can.runAction({}, aaa.LOGOUT, [], function(msg) { can.misc.CookieSessid(can, ""), can.misc.Search(can, chat.SHARE)? can.misc.Search(can, chat.SHARE, ""): can.user.reload(true) diff --git a/panel/header.js b/panel/header.js index b62c0456..021e0731 100644 --- a/panel/header.js +++ b/panel/header.js @@ -84,6 +84,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, if (location.pathname == nfs.PS && can.base.beginWith(msg.Option(ice.MAIN)||"", nfs.WIKI_PORTAL, web.CHAT_CMD+web.WIKI_PORTAL)) { return show(msg) } msg.Option(mdb.PLUGIN) && can.onappend.plugin(can, {index: msg.Option(mdb.PLUGIN)}, function(sub) { can.onmotion.hidden(can, sub._target) }, document.body) msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) + if (can._root.Action._conf.tool && can._root.Action._conf.tool[0]._role == ice.OK) { return show(msg) } if (!can.Conf(aaa.USERNICK, (msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)).slice(0, 8))) { return can.user.login(can, function() { can.onengine.signal(can, chat.ONMAIN, msg) }, msg) } show(msg) diff --git a/plugin/state.js b/plugin/state.js index 20a8acaf..fd14eff6 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -13,6 +13,14 @@ Volcanos(chat.ONIMPORT, { can.onmotion.scrollIntoView(can, can.onappend.board(sub, msg)) can.onmotion.story.auto(sub) }, + _cookie: function(can, msg) { + can.misc.Cookie(can, msg._arg[0], msg._arg[1]) + can.Update() + }, + _session: function(can, msg) { + can.misc.sessionStorage(can, msg._arg[0], msg._arg[1]) + can.Update() + }, _field: function(can, msg, cb) { var height = can.base.Max(html.STORY_HEIGHT, can.ConfHeight()), width = can.ConfWidth() msg.Table(function(item) { can.onappend._plugin(can, item, {_space: can.ConfSpace(), index: item.index, args: can.base.Obj(item.args||item.arg, []), height: height, width: width}, function(sub) { if (can.base.isIn(sub.ConfIndex(), web.CODE_VIMER, web.CHAT_MACOS_DESKTOP, web.WIKI_PORTAL)) { height = can.base.Max(can.onexport.outputHeight(can), can.ConfHeight()) } diff --git a/plugin/story/form.js b/plugin/story/form.js new file mode 100644 index 00000000..3892d4dd --- /dev/null +++ b/plugin/story/form.js @@ -0,0 +1,12 @@ +Volcanos(chat.ONIMPORT, { + _init: function(can, msg) { can.onappend.style(can, html.FORM, can._output) + can.page.Append(can, can._output, msg.Table(function(item) { + return {view: [[html.ITEM, item.type]], list: [item.type != html.BUTTON && {text: [can.user.trans(can, item.name, item._trans), "", mdb.NAME]}, item.need == "must" && {text: ["*", "", "need"]}], _init: function(target) { + item.type == html.BUTTON && (item.onclick = function(event) { var args = [] + can.core.Item(can.page.SelectArgs(can, can._output)[0], function(key, value) { args.push(key, value) }) + can.Update(can.request(event, {_handle: ice.TRUE}), [ctx.ACTION, item.name].concat(args)) + }), can.onappend.input(can, item, "", target) + }, onclick: function(event) { can.page.Select(can, event.currentTarget, html.INPUT, function(target) { target.focus() }) }} + })) + }, +})