diff --git a/const.js b/const.js index 93813e7f..a1381bb9 100644 --- a/const.js +++ b/const.js @@ -230,7 +230,7 @@ var chat = { PLUGIN_TABLE_JS: "/plugin/table.js", PLUGIN_STATE_JS: "/plugin/state.js", FRAME_JS: "/volcanos/frame.js", - ICONS_CSS: "/require/modules/bootstrap-icons/font/bootstrap-icons.min.css", // https://icons.getbootstrap.com/ + // ICONS_CSS: "/require/modules/bootstrap-icons/font/bootstrap-icons.min.css", // https://icons.getbootstrap.com/ ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap", ONIMPORT: "onimport", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", diff --git a/index.css b/index.css index d7bb8978..e3642561 100644 --- a/index.css +++ b/index.css @@ -137,10 +137,10 @@ body>div.input div.action { width:100%; } body>div.input div.action>div.item { margin:5px; float:right; } body>div.input div.action>div.item>input[type=button] { width:110px; } body>div.input.login>div.output { text-align:center; } -body>div.input.login>div.output div.sso { cursor:pointer; } +body>div.input.login>div.output div.sso { display:flex; justify-content:center; cursor:pointer; } body>div.input.login>div.output div.sso:hover { background-color:var(--hover-bg-color); } body>div.input.login>div.output div.sso>img { height:32px; } -body>div.input.login>div.output div.sso>span { height:32px; display:inline-block; vertical-align:middle; } +body>div.input.login>div.output div.sso>span { line-height:32px; } body>div.input.simple td:first-child { display:none; } body>div.upload div.action input[type=file] { width:320px; } body>div.upload div.output { border:var(--box-notice); } @@ -410,7 +410,7 @@ body.mobile fieldset.word>div.output div.story.flex>* { padding:unset; } body.print { -webkit-filter: grayscale(100%); } body.print { background-color:white; color:black; } body.print legend, body.print select, body.print input, body.print input[type=button], body.print textarea { background-color:snow; color:black; } -body.print div.item { background-color:white; } +body.print div.item { background-color:white; } body.print div.carte div.item { background-color:snow; } body.print div.item.select { background-color:lightgray; } body.print div.zone>div.item { background-color:lightgray; color:black; } diff --git a/lib/base.js b/lib/base.js index 03a0af5f..a7f274b9 100644 --- a/lib/base.js +++ b/lib/base.js @@ -1,9 +1,8 @@ Volcanos("base", { Int: function(val, def) { return parseInt(val)||def||0 }, - Min: function(val, min, max) { - return val > max? max: val < min? min: val - }, - Max: function(val, max) { return val < max? val: max }, + Min: function(val, min, max) { return val < min? min: val > max? max: val }, + Max: function(val, max) { return val > max? max: val }, + Obj: function(val, def) { try { if (typeof val == code.STRING) { if (val == "") { return def } val = JSON.parse(val) } @@ -22,8 +21,10 @@ Volcanos("base", { for (var k in to) { if (k != skip && !call(to[k], from[k])) { return false } } return true } return to === from }, + Ext: function(path) { return path.split(nfs.PS).pop().split(nfs.PT).pop().toLowerCase() }, Dir: function(path) { return path.endsWith(nfs.PS)? path: path.slice(0, path.lastIndexOf(nfs.PS)+1) }, + Path: function(path) { var res = "", arg = arguments; for (var i = 0; i < arg.length; i++) { if (!arg[i]) { continue } res += (arg[i][0]==nfs.PS || res=="" || res[res.length-1]==nfs.PS? "": nfs.PS) + arg[i].trim() } return res }, diff --git a/lib/page.js b/lib/page.js index 15b01c75..c8bbe810 100644 --- a/lib/page.js +++ b/lib/page.js @@ -19,7 +19,7 @@ Volcanos("page", { if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { return item.name && (can.base.isUndefined(value)? item.value: (item.value = value))||"" } } if (key.indexOf(nfs.PT) > -1) { return [""] } key && can.base.isString(cb) && can.page.Select(can, target, "div.item."+key+">span.value", cb) - return can.page.Select(can, target, key? "select[name="+key+"],"+"input.select[type=button][name="+key+"],"+"input[name="+key+"],"+"textarea[name="+key+"]": ".args", cb) + return can.page.Select(can, target, key? "select[name="+key+"],"+"input.select[type=button][name="+key+"],"+"input[type=text][name="+key+"],"+"textarea[name="+key+"]": ".args", cb) }, SelectInput: function(can, target, name, cb) { return can.page.Select(can, target, "input[name="+name+"]", cb)[0] }, SelectChild: function(can, target, key, cb) { return can.core.List(can.page.Select(can, target, key||"*", function(node) { if (node.parentNode == target) { return node } }), cb) }, diff --git a/panel/footer.js b/panel/footer.js index 58ade8f1..54a6e904 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -35,7 +35,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.ntip, {can: can, msg: msg}) }, onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) }, onlayout: function(can, layout) { can.onmotion.toggle(can, can._target, !layout || layout == html.TABS) }, - onunload: function(can) { can._wss.close() }, + onunload: function(can) { can._wss && can._wss.close() }, onaction_cmd: function(can) { can.onappend.style(can, html.HIDE) }, oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", html.INPUT], function(target) { can.onmotion.focus(can, target) }) }, ondebugs: function(can, msg) { can.runAction(msg, msg.Option(ctx.ACTION), [msg.Option(ctx.INDEX)], function(_msg) { diff --git a/panel/header.js b/panel/header.js index 5685a3a3..03d642ca 100644 --- a/panel/header.js +++ b/panel/header.js @@ -61,7 +61,7 @@ Volcanos(chat.ONACTION, {_init: function(can) { msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) }) } - can.run(can.request({}, {_method: web.GET}), [], function(msg) { lang(msg) + can.run(can.request({}, {_method: web.GET}), [], function(msg) { lang(msg), can.page.requireModules(can, [msg.Option("icons")]) can.require(can.core.List(msg["theme.list"], function(item) { return "src/template/web.chat.header/theme/"+item })) can.onaction._menus[1] = [chat.THEME, ice.AUTO].concat(can.core.List(msg["theme.list"], function(item) { return can.base.trimSuffix(item, ".css") })) can.onaction._menus[2] = [aaa.LANGUAGE, ice.AUTO].concat(can.core.List(msg["language.list"], function(item) { return can.base.trimSuffix(item, ".js") })) diff --git a/proto.js b/proto.js index 9274753a..5a467fc2 100644 --- a/proto.js +++ b/proto.js @@ -12,7 +12,7 @@ var Volcanos = shy({iceberg: "", volcano: "", frame: chat.FRAME_JS, meta.iceberg = Config.iceberg||meta.iceberg, meta.volcano = Config.volcano||meta.volcano meta.libs = (Config.libs||chat.libs).concat(Config.list), panels = Config.panels||chat.panel_list, delete(Config.panels) libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugins||chat.plugin_list) - cb = can||function(can) { can.require([can.frame, chat.ICONS_CSS], function() { + cb = can||function(can) { can.require([can.frame], function() { can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target) }, function(can, key, sub) { can[key] = sub }) } can = Config, can._follow = name, can._target = Config.target||meta.target, can._height = Config.height||meta._height, can._width = Config.width||meta._width