diff --git a/lib/base.js b/lib/base.js index 1d752136..418ee0db 100644 --- a/lib/base.js +++ b/lib/base.js @@ -51,11 +51,13 @@ var base = Volcanos("base", {help: "基础模块", } return size + "B" }, - Time: shy("时间格式化", function(t, fmt) {var now = t? new Date(t): new Date(); - fmt = fmt || "%y-%m-%d %H:%M:%S"; + Time: shy("时间格式化", function(t, fmt) { var now = t? new Date(t): new Date() + var list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] + fmt = fmt || "%y-%m-%d %H:%M:%S" fmt = fmt.replace("%y", now.getFullYear()) fmt = fmt.replace("%m", this.Number(now.getMonth()+1, 2)) fmt = fmt.replace("%d", this.Number(now.getDate(), 2)) + fmt = fmt.replace("%w", list[now.getDay()]) fmt = fmt.replace("%H", this.Number(now.getHours(), 2)) fmt = fmt.replace("%M", this.Number(now.getMinutes(), 2)) fmt = fmt.replace("%S", this.Number(now.getSeconds(), 2)) diff --git a/lib/page.js b/lib/page.js index 99ebdd41..915692b2 100644 --- a/lib/page.js +++ b/lib/page.js @@ -193,6 +193,8 @@ var page = Volcanos("page", {help: "网页模块", var table = can.page.Append(can, target, "table"); var tr = can.page.Append(can, table, "tr", {dataset: {index: -1}}); can.core.List(list, function(key, index) {if (key.indexOf("_") == 0) {return} + key = can.Conf("feature.table.trans."+key) || {}[key] || key + can.page.Append(can, tr, "th", key.trim()).onclick = function(event) { var dataset = event.target.dataset; dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1; diff --git a/lib/user.js b/lib/user.js index 189a7d0a..16c2475e 100644 --- a/lib/user.js +++ b/lib/user.js @@ -97,6 +97,7 @@ var user = Volcanos("user", {help: "用户模块", } } + var msg = can.request(event) var x = event.clientX, y = event.clientY; y += 10; if (x > 600) { x -= 160 } var button; var ui = can.page.Append(can, document.body, [{view: ["input", "fieldset"], style: {left: x+"px", top: y+"px"}, list: [ {view: ["option", "table"], list: can.core.List(form, function(item) { @@ -111,7 +112,7 @@ var user = Volcanos("user", {help: "用户模块", var pval = item.value.slice(1).split("=")[1] } - target.type != "button" && (target.value = pval) + target.type != "button" && (target.value = pval || msg.Option(item.name)) can.page.Modify(can, target, {autocomplete: "off"}) can.require(["/plugin/input/"+pkey], function(can) { can.onfigure._init(can, item, target, function(event) { diff --git a/pane/Header.js b/pane/Header.js index c2fe6d14..7fa5f90b 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -2,25 +2,29 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, }, }) Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - function init() { - can.onexport._init(can, msg, list, function() { - can.user.title(can.user.Search(can, "pod")) - can.run(msg._event, ["search", "River.onaction._init"]) - can.run(msg._event, ["search", "Footer.onaction._init"]) + function init() { can.run({}, [], function(msg) { + can.onexport._init(can, msg, msg.append, function() { + can.run({}, ["search", "River.onaction._init"]) + can.run({}, ["search", "Footer.onaction._init"]) }, target) - } - if (location.protocol == "file:") { return init() } - can.run({}, ["check"], function(msg) { if (msg.Result()) { return init() } - can.user.login(can, init) + }) } + + location.protocol == "file:"? init(): can.run({}, ["check"], function(msg) { + msg.Result()? init(): can.user.login(can, init) }) }, - title: function(event, can, key) { var msg = can.request(event) - can.core.List(["pod"], function(key) { var value = can.user.Search(can, key) - value != undefined && msg.Option(key, can.user.Search(can, key)) + title: function(event, can, key) { + var args = {}; can.core.List(["pod", "topic"], function(key) { + var value = can.user.Search(can, key); value && (args[key] = value) }) - var args = {}; can.core.List(msg.option, function(key) { args[key] = msg.Option(key) }) location.href = can.user.Share(can, args, true) }, + white: function(event, can, key) { + can.page.Modify(can, document.body, {className: key}) + }, + black: function(event, can, key) { + can.page.Modify(can, document.body, {className: key}) + }, username: function(event, can, key) { if (can.user.confirm("logout?")) { can.user.Cookie(can, "sessid", "") @@ -28,23 +32,19 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, } }, pack: function(event, can, key) { - var msg = can.request(event) can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) }) + var toast = can.user.toast(can, "打包中...", "webpack", 1000000) + var msg = can.request(event) msg.Option("name", "demo") msg.Option("content", JSON.stringify(Volcanos.meta.pack)) can.run(event, ["pack"], function(msg) { toast.Close(), can.user.toast(can, "打包成功", "webpack") }) }, - white: function(event, can, key) { - can.page.Modify(can, document.body, {className: key}) - }, - black: function(event, can, key) { - can.page.Modify(can, document.body, {className: key}) - }, + River: function(event, can, key) { can.page.Select(can, document.body, "fieldset.River", function(item) { can.page.Modify(can, item, {style: {display: item.style.display == "none"? "block": "none"}}) @@ -67,63 +67,59 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, }, }) Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { - can.run(msg._event, [], function(msg) { can._output.innerHTML = "" - can.Conf("username", msg.Option("user.nick")||msg.Option("user.name")) - if (can.Conf("username").length > 10) { - can.Conf("username", can.Conf("username").slice(0, 10)) - } + const USERNAME = "username" + can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name")) + can.Conf(USERNAME).length > 10 && can.Conf(USERNAME, can.Conf(USERNAME).slice(0, 10)) + can._output.innerHTML = "" - can.user.isMobile || can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) { - can.page.Append(can, can._output, [{view: ["title", "div", title], - click: function(event) { can.onaction["title"](event, can, "title") }, - }]) - }) - - can.core.List(can.Conf("state")||["time", "username"], function(item) { - can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)], - click: function(event) { can.onaction[item](event, can, item) }, - }]) - }) - can.page.Select(can, can._output, "div.state.time", function(item) { - can.timer = can.Timer({interval: 1000, length: -1}, function(event) { - can.onexport.time(event, can, "time", item) - }) - }) - - can.user.isMobile || (can.search = can.page.Append(can, can._output, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { - switch (event.key) { - case "Enter": can.run(event, ["search", "Search.onimport.input", "*", event.target.value]); break - } - }, }], }]).input) - - var height = document.body.offsetHeight - var ui = can.page.Append(can, can._output, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["River"]: ["pack"], function(item) { - return {view: "item", list: [{type: "input", data: {name: item, type: "button", value: item.toLowerCase()}, - onclick: function(event) { - var cb = can.onaction[item]; if (typeof cb == "function") { - return cb(event, can, item) - } - }, - }]} - })); - - if (can.user.isExtension) { - can.onaction.River({}, can) - } else if (can.user.isMobile) { - can.onaction.River({}, can) - can.onaction.Footer({}, can) - } else if (can.user.Search(can, "topic") == "white") { - } else if (can.user.Search(can, "pod")) { - can.onaction.River({}, can) - can.onaction.Footer({}, can) - } - - typeof cb == "function" && cb() + // 标题 + can.user.title(can.user.Search(can, "pod")) + can.user.isMobile || can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) { + can.page.Append(can, can._output, [{view: ["title", "div", title], + click: function(event) { can.onaction["title"](event, can, "title") }, + }]) }) + + // 状态 + can.core.List(can.Conf("state")||["time", USERNAME], function(item) { + can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)], + click: function(event) { can.onaction[item](event, can, item) }, + }]) + }) + can.page.Select(can, can._output, "div.state.time", function(item) { + can.timer = can.Timer({interval: 1000, length: -1}, function(event) { + can.onexport.time(event, can, "time", item) + }) + }) + + // 搜索 + can.user.isMobile || (can.search = can.page.Append(can, can._output, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { + switch (event.key) { + case "Enter": can.run(event, ["search", "Search.onimport.input", "*", event.target.value]); break + } + }, }], }]).input) + + var ui = can.page.Append(can, can._output, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["River"]: ["pack"], function(item) { + return {view: "item", list: [{type: "input", data: {type: "button", name: item, value: item.toLowerCase()}, onclick: function(event) { + var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item) + }, }]} + })) + + // 场景 + if (can.user.isExtension) { + can.onaction.River({}, can) + } else if (can.user.isMobile) { + can.onaction.River({}, can) + can.onaction.Footer({}, can) + } else if (can.user.Search(can, "pod")) { + can.onaction.River({}, can) + can.onaction.Footer({}, can) + } + + typeof cb == "function" && cb() }, time: function(event, can, key, target) { - var list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] - target.innerHTML = list[(new Date()).getDay()]+" "+can.base.Time().split(" ")[1] + target.innerHTML = can.base.Time(null, "%w %H:%M:%S") }, }) diff --git a/plugin/table.js b/plugin/table.js index eba94211..33903efc 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -59,11 +59,19 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, ]} }, _table: function(can, value, key, index, line, array) { - return {type: "td", inner: value, click: function(event) { - var target = event.target; if (target.tagName == "INPUT" && target.type == "button") { - var msg = can.sup.request(event); msg.Option(can.Option()), msg.Option(line) - var cb = can.onaction[target.value]; return typeof cb == "function"? cb(event, can, target.value): - can.sup.onaction.input(event, can.sup, target.value, function(msg) { + return {type: "td", inner: value, click: function(event) { var target = event.target + if (target.tagName == "INPUT" && target.type == "button") { var msg = can.sup.request(event) + msg.Option(can.Option()); if (key == "value") { + can.core.List(array, function(item, index) { + msg.Option(item.key, item.value) + }) + } else { + msg.Option(line) + } + + var cb = can.onaction[target.name]; return typeof cb == "function"? cb(event, can, target.name): + can.sup.onaction.input(event, can.sup, target.name, function(msg) { + can.user.toast(can, msg.Result()) if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(msg) } @@ -94,6 +102,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, var process = msg.Option("_process") || can.Conf("feature")["_process"] var cb = can.onimport[process]; return typeof cb == "function" && cb(can, msg) }, + _inner: function(can, msg) { + can.onappend.board(can, can.ui.display, "board", msg) + can.onimport._board(can, msg) + return true + }, _field: function(can, msg) { msg.Table(function(value) { value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", []) diff --git a/proto.js b/proto.js index f5ecdfb8..905ba747 100644 --- a/proto.js +++ b/proto.js @@ -167,6 +167,13 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, pack: {}, libs: if (value != undefined) {var old = conf[key], res; conf[key] = conf_cb[key] && (res = conf_cb[key](value, old, key)) != undefined && res || value } + if (conf[key] == undefined && key.indexOf(".") > 0) { + var p = conf, ls = key.split(".") + while (p && ls.length > 0) { + p = p[ls[0]], ls = ls.slice(1) + } + return p + } return conf[key] || "" }), Cache: shy("缓存器", function(name, output, data) {