From a0f51ba9012c9e3b122d8b58e45d453551d0f79e Mon Sep 17 00:00:00 2001 From: harveyshao Date: Fri, 16 Dec 2022 14:37:24 +0800 Subject: [PATCH] opt some --- lib/base.js | 78 ++++++++++++++----------------- lib/core.js | 56 +++++++++++----------- lib/misc.js | 60 ++++++++++-------------- lib/page.js | 8 ++-- panel/river.js | 4 +- plugin/local/code/inner/syntax.js | 29 ++++++++++-- plugin/local/team/plan.js | 14 +++--- 7 files changed, 124 insertions(+), 125 deletions(-) diff --git a/lib/base.js b/lib/base.js index 52f4bc43..3f665618 100644 --- a/lib/base.js +++ b/lib/base.js @@ -8,10 +8,10 @@ Volcanos("base", { if (val.length > 0) { return val } for (var k in val) { return val } return def } catch (e) { return val&&val.split&&val.split(ice.FS) || def } }, - Copy: function(to, from, hold) { if (!from) { return to } - if (arguments.length == 2 || typeof hold == lang.BOOLEAN) { + Copy: function(to, from, merge) { if (!from) { return to } + if (arguments.length == 2 || typeof merge == lang.BOOLEAN) { for (var k in from) { if (k == undefined) { continue } - if (hold && to.hasOwnProperty(k) && to[k] != undefined && to[k] != "") { continue } + if (merge && to.hasOwnProperty(k) && to[k] != undefined && to[k] != "") { continue } if (from[k] === "") { delete(to[k]) } else { to[k] = from[k] } } return to } for (var i = 2; i < arguments.length; i++) { var k = arguments[i]; to[k] = from[k] } return to @@ -23,8 +23,7 @@ Volcanos("base", { return true } return to === from }, - - Ext: function(path) { return (path.split(ice.PS).pop().split(ice.PT).pop()).toLowerCase() }, + Ext: function(path) { return path.split(ice.PS).pop().split(ice.PT).pop().toLowerCase() }, Path: function(path) { var res = "" for (var i = 0; i < arguments.length; i++) { if (!arguments[i]) { continue } res += (arguments[i][0]==ice.PS || res=="" || res[res.length-1]==ice.PS? "": ice.PS) + arguments[i].trim() @@ -55,7 +54,6 @@ Volcanos("base", { if (size.endsWith("kb") || size.endsWith("k")) { return parseInt(size) * 1024 } return parseInt(size) }, - Size: function(size) { size = parseInt(size) if (size > 1000000000) { return parseInt(size/1000000000) + ice.PT + parseInt(size/10000000%100) + "G" } if (size > 1000000) { return parseInt(size/1000000) + ice.PT + parseInt(size/10000%100) + "M" } @@ -69,30 +67,20 @@ Volcanos("base", { }, Format: function(obj) { return JSON.stringify(obj) }, Simple: function() { var res = [] - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; switch (typeof arguments[i]) { - case lang.OBJECT: - if (arg.length > 0) { res = res.concat(arg); break } - for (var k in arg) { k && arg[k] && res.push(k, arg[k]) } - break - default: res.push(arg) - } - } return res + for (var i = 0; i < arguments.length; i++) { var val = arguments[i]; switch (typeof val) { + case lang.OBJECT: + if (val.length > 0) { res = res.concat(val); break } + for (var k in val) { k && val[k] && res.push(k, val[k]) } break + default: res.push(val) + } } return res }, AddUniq: function(list, value) { list = list||[]; return list.indexOf(value) == -1 && list.push(value), list }, isIn: function(item) { var args = arguments; for (var i = 1; i < args.length; i++) { if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true } if (item == args[i]) { return true } } }, - - Date: function(time) { var now = new Date() - if (typeof time == lang.STRING && time != "") { var ls = time.split(ice.SP) - var vs = ls[0].split("-"); now.setFullYear(parseInt(vs[0])), now.setMonth(parseInt(vs[1])-1), now.setDate(parseInt(vs[2])) - var vs = ls[1].split(ice.DF); now.setHours(parseInt(vs[0])), now.setMinutes(parseInt(vs[1])), now.setSeconds(parseInt(vs[2])) - } else if (time) { now = time } return now - }, Time: function(time, fmt) { var now = this.Date(time) - fmt = fmt||"%y-%m-%d %H:%M:%S" // fmt = fmt||"%H:%M:%S" + 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)) @@ -102,7 +90,13 @@ Volcanos("base", { fmt = fmt.replace("%S", this.Number(now.getSeconds(), 2)) return fmt }, - TimeAdd: function(t, d) { return new Date(t - t%(24*3600*1000) - 8*3600*1000 + d*24*3600*1000) }, + Date: function(time) { var now = new Date() + if (typeof time == lang.STRING && time != "") { var ls = time.split(ice.SP) + var vs = ls[0].split("-"); now.setFullYear(parseInt(vs[0])), now.setMonth(parseInt(vs[1])-1), now.setDate(parseInt(vs[2])) + var vs = ls[1].split(ice.DF); now.setHours(parseInt(vs[0])), now.setMinutes(parseInt(vs[1])), now.setSeconds(parseInt(vs[2])) + } else if (time) { now = time } return now + }, + DateAdd: function(stamp, days) { return new Date(stamps - stamps%(24*3600*1000) - 8*3600*1000 + days*24*3600*1000) }, Duration: function(n) { var res = "", h = 0 h = parseInt(n/3600000/24), h > 0 && (res += h+"d"), n = n % (3600000*24) h = parseInt(n/3600000), h > 0 && (res += h+"h"), n = n % 3600000 @@ -111,13 +105,11 @@ Volcanos("base", { return res + (n > 0? ice.PT+parseInt(n/10): "") + "s" }, isNight: function() { var now = new Date(); return now.getHours() < 7 || now.getHours() >= 17 }, - isNumber: function(val) { return typeof val == lang.NUMBER }, isString: function(val) { return typeof val == lang.STRING }, isObject: function(val) { return typeof val == lang.OBJECT }, isArray: function(val) { return typeof val == lang.OBJECT && val.length != undefined }, isFunc: function(val) { return typeof val == lang.FUNCTION }, - isFunction: function(val) { return typeof val == lang.FUNCTION }, isUndefined: function(val) { return val == undefined }, isNull: function(val) { return val == null }, getValid: function() { @@ -125,32 +117,30 @@ Volcanos("base", { if (typeof v == lang.OBJECT) { if (v == null) { continue } if (v.length > 0) { return v } for (var k in v) { return v } } else if (typeof v == lang.STRING && v) { return v - } else if (v == undefined) { continue - } else { return v } + } else if (v == undefined) { continue } else { return v } } }, - - beginWith: function(str) { for (var i = 1; i < arguments.length; i++) { if (typeof str == lang.STRING && str.trim().indexOf(arguments[i]) == 0) { return true } } }, - endWith: function(str, end) { return typeof str == lang.STRING && str.lastIndexOf(end) + end.length == str.length }, - trim: function(args) { if (this.isString(args)) { return args.trim() } - if (this.isArray(args)) { for (var i = args.length-1; i >= 0; i--) { if (!args[i]) { args.pop() } else { break } } } - return args - }, - trimPrefix: function(str, pre) { if (typeof str != lang.STRING) { return str } var callee = arguments.callee - if (arguments.length > 2) { for (var i = 1; i < arguments.length; i++) { str = callee(str, arguments[i]) } return str } - if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length) - }, - trimSuffix: function(str, end) { var index = str.lastIndexOf(end); if (index == -1 || index+end.length != str.length) { return str } return str.slice(0, index) }, - join: function(list, sp) { return typeof list == lang.STRING? list: (list||[]).join(sp||ice.SP) }, - joins: function(list, inner, outer) { for (var i = 0; i < list.length; i++) { list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) } return list.join(outer||ice.SP) }, - joinKV: function(list, inner, outer) { var res = []; for (var i = 0; i < list.length-1; i += 2) { res.push(list[i]+(inner||": ")+list[i+1]) } return res.join(outer||ice.SP) }, - count: function(str, s) { var n = 0; for (var i = 0; i < str.length; i++) { if (str[i] == s) { n++ } } return n }, replaceAll: function(str) { for (var i = 1; i < arguments.length; i += 2) { if (!arguments[i]) { continue } if (str.replaceAll) { str = str.replaceAll(arguments[i], arguments[i+1]); continue } if (arguments[i] && str.replace) { while (str.indexOf(arguments[i]) > -1) { str = str.replace(arguments[i], arguments[i+1]) } } } return str }, + beginWith: function(str) { for (var i = 1; i < arguments.length; i++) { if (typeof str == lang.STRING && str.trim().indexOf(arguments[i]) == 0) { return true } } }, + endWith: function(str, end) { return typeof str == lang.STRING && str.lastIndexOf(end) + end.length == str.length }, + trimPrefix: function(str, pre) { if (typeof str != lang.STRING) { return str } var callee = arguments.callee + if (arguments.length > 2) { for (var i = 1; i < arguments.length; i++) { str = callee(str, arguments[i]) } return str } + if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length) + }, + trimSuffix: function(str, end) { var index = str.lastIndexOf(end); if (index == -1 || index+end.length != str.length) { return str } return str.slice(0, index) }, + trim: function(args) { if (this.isString(args)) { return args.trim() } + if (this.isArray(args)) { for (var i = args.length-1; i >= 0; i--) { if (!args[i]) { args.pop() } else { break } } } + return args + }, + join: function(list, sp) { return typeof list == lang.STRING? list: (list||[]).join(sp||ice.SP) }, + joins: function(list, inner, outer) { for (var i = 0; i < list.length; i++) { list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) } return list.join(outer||ice.SP) }, + joinKV: function(list, inner, outer) { var res = []; for (var i = 0; i < list.length-1; i += 2) { res.push(list[i]+(inner||": ")+list[i+1]) } return res.join(outer||ice.SP) }, + count: function(str, s) { var n = 0; for (var i = 0; i < str.length; i++) { if (str[i] == s) { n++ } } return n }, random: function(max, min) { return min = min||0, parseInt(Math.random()*(max-min))+min }, mod: function(index, total) { return (index+total) % total }, }) diff --git a/lib/core.js b/lib/core.js index a19511a8..a03d5169 100644 --- a/lib/core.js +++ b/lib/core.js @@ -7,25 +7,19 @@ Volcanos("core", { default: v && list.push(v+"") } } return list.join(ice.PT) }, - Value: function(data, key, value) { - if (data == undefined) { return } - if (key == undefined) { return data } - if (typeof key == lang.OBJECT && key.length > 0) { key = key.join(ice.PT) } - if (typeof key == lang.OBJECT) { for (var k in key) { arguments.callee.call(this, data, k, key[k]) } return data } + Value: function(data, key, value) { if (data == undefined) { return } if (key == undefined) { return data } + if (typeof key == lang.OBJECT && key.length != undefined) { key = key.join(ice.PT) } else if (typeof key == lang.OBJECT) { for (var k in key) { arguments.callee.call(this, data, k, key[k]) } return data } if (value != undefined) { var _node = data, keys = key.split(ice.PT) for (var i = 0; i < keys.length; i++) { var _next = _node[keys[i]]||{}; _node[keys[i]] = _next if (i < keys.length - 1) { _node = _next } else { _node[keys[i]] = value } } } - if (data[key] != undefined) { return data[key] } var node = data, keys = key.split(ice.PT); while (node && keys.length > 0) { if (keys[0] == "-1") { keys[0] = node.length-1 } node = node[keys[0]], keys = keys.slice(1) - } return node + } return node == undefined? data[key]: node }, Split: function(str) { if (!str || !str.length) { return [] } - var opt = {detail: false}, arg = []; for (var i = 1; i < arguments.length; i++) { - typeof arguments[i] == lang.OBJECT? opt = arguments[i]: arg.push(arguments[i]) - } + var opt = {detail: false}, arg = []; for (var i = 1; i < arguments.length; i++) { var v = arguments[i]; typeof v == lang.OBJECT? opt = v: arg.push(v) } function _list(str) { var res = {}; for (var i = 0; i < str.length; i++) { res[str[i]] = true }; return res } var space = _list(arg[0]||"\t ,;\n") // 空白符 var block = _list(arg[1]||"{[()]}") // 分隔符 @@ -43,17 +37,19 @@ Volcanos("core", { } else if (s == str[i]) { push({type: lang.STRING, text: str.slice(begin, i), left: s, right: str[i]}), s = "", begin = -1 } - } else if (trans[str[i]]) { begin == -1 && (begin = i++) + } else if (trans[str[i]]) { begin == -1 && (begin = i), i++ } else { begin == -1 && (begin = i) } - } return begin >= 0 && (s? push({type: lang.STRING, text: str.slice(begin), left: s, right: ""}): push(str.slice(begin))), res + } return begin > -1 && (s? push({type: lang.STRING, text: str.slice(begin), left: s, right: ""}): push(str.slice(begin))), res }, SplitInput: function(item, type) { if (typeof item == lang.OBJECT) { return item } type = type||html.TEXT; switch (item) { - case ice.RUN: return {type: type = html.BUTTON, name: item} - case mdb.LIST: return {type: type = html.BUTTON, name: item, action: ice.AUTO} - case ice.BACK: return {type: type = html.BUTTON, name: item} - case mdb.NAME: return {type: type = html.TEXT, name: item} - case mdb.TEXT: return {type: type = html.TEXTAREA, name: item} - default: var ls = this.Split(item, " ", ":=@"), res = {type: type, name: ls[0]}; for (var i = 1; i < ls.length; i += 2) { switch (ls[i]) { + case ice.RUN: return {type: html.BUTTON, name: item} + case ice.LIST: return {type: html.BUTTON, name: item, action: ice.AUTO} + case ice.BACK: return {type: html.BUTTON, name: item} + case mdb.NAME: return {type: html.TEXT, name: item} + case mdb.TEXT: return {type: html.TEXTAREA, name: item} + case ctx.ARGS: return {type: html.TEXTAREA, name: item} + default: var ls = this.Split(item, ice.SP, "*:=@"), res = {type: type, name: ls[0]}; for (var i = 1; i < ls.length; i += 2) { switch (ls[i]) { + case "*": res["need"] = "must", i--; break case ice.DF: res[mdb.TYPE] = ls[i+1]; break case ice.EQ: if (res[mdb.TYPE] == html.SELECT) { res.values = this.Split(ls[i+1]); for (var j = 1; j < res.values.length; j++) { @@ -78,9 +74,9 @@ Volcanos("core", { if (interval > 0) { function loop(i) { i >= list.length? typeof cbs == lang.FUNCTION && cbs(list): cb(list[i], i, list), setTimeout(function() { loop(i+1) }, interval) } typeof cb == lang.FUNCTION && list.length > 0 && setTimeout(function() { loop(0) }, interval/4) - } else { var slice = [], res - for (var i = 0; i < list.length; i++) { typeof cb == lang.FUNCTION? (res = cb(list[i], i, list)) != undefined && slice.push(res): slice.push(list[i]) } - list = slice + } else { var res = [] + for (var i = 0; i < list.length; i++) { var _res = typeof cb == lang.FUNCTION? cb(list[i], i, list): list[i]; _res != undefined && res.push(_res) } + list = res } return list }, Next: function(list, cb, cbs) { @@ -88,7 +84,7 @@ Volcanos("core", { case lang.OBJECT: if (list == null) { list = []; break } if (list.length == undefined) { var ls = []; for (var k in list) { ls.push(k) } list = ls } break default: if (list == undefined) { list = []; break } list = [list] } - function next(i) { i < list.length? typeof cb == lang.FUNCTION && cb(list[i], function() { next(i+1) }, i, list): typeof cbs == lang.FUNCTION && cbs(list) } + function next(i) { i < list.length? typeof cb == lang.FUNCTION && cb(list[i], function() { next(i+1) }, i, list): typeof cbs == lang.FUNCTION && cbs(list) } return next(0), list }, Item: function(obj, cb) { var list = [] @@ -100,24 +96,24 @@ Volcanos("core", { for (var i in keys) { var k = keys[i]; var res = typeof cb == lang.FUNCTION? cb(k, obj[k]): k; res != undefined && list.push(res) } return list }, - Items: function(obj, cb) { var list = [] - for (var k in obj) { list = list.concat(this.List(obj[k], function(v, i) { return typeof cb == lang.FUNCTION && cb(v, i, k, obj) })) } - return list - }, - ItemSort: function(obj, key, cb) { var list = [], order = [], keys = {}, vals = {}, i = 0 + ItemOrder: function(obj, key, cb) { var list = [], order = [], keys = {}, vals = {}, i = 0 for (var k in obj) { o = obj[k][key]||i++, order.push(o), keys[o] = k, vals[o] = obj[k] } order.sort() for (var i in order) { var k = order[i], res = typeof cb == lang.FUNCTION? cb(keys[k], vals[k]): k; res != undefined && list.push(res) } return list }, + ItemForm: function(obj, cb) { var list = [] + for (var k in obj) { list = list.concat(this.List(obj[k], function(v, i) { return typeof cb == lang.FUNCTION && cb(v, i, k, obj) })) } + return list + }, ItemCB: function(meta, cb, can, item) { var list = [] for (var k in meta) { if (k.indexOf("on") == 0 && typeof meta[k] == lang.FUNCTION) { (function(k) { list.push(k) if (typeof cb == lang.FUNCTION) { cb(k, meta[k]) } else { cb[k] = function(event) { meta[k](event, can, item) } } })(k) } } return list }, - Timer: shy("定时器, value, [1,2,3,4], {interval, length}", function(interval, cb, cbs) { var timer = {stop: false} + Timer: shy("定时器, value, [1,2,3,4], {delay, interval, length}", function(interval, cb, cbs) { var timer = {stop: false} function loop(i) { timer.stop || i >= interval.length && interval.length >= 0 || cb(timer, interval.interval||interval[i], i, interval)? - typeof cbs == lang.FUNCTION && cbs(timer, interval): setTimeout(function() { loop(i+1) }, interval.interval||interval[i+1]) + typeof cbs == lang.FUNCTION && cbs(timer, interval): setTimeout(function() { loop(i+1) }, interval.interval||interval[i+1]) } interval = typeof interval == lang.OBJECT? interval: [interval]; if (interval.interval == 0) { return cb(), timer } - return typeof cb == lang.FUNCTION && setTimeout(function() { loop(0) }, interval.interval||interval[0]), timer + return typeof cb == lang.FUNCTION && setTimeout(function() { loop(0) }, interval.delay||interval.interval/2||interval[0]), timer }), }) diff --git a/lib/misc.js b/lib/misc.js index 688eaea3..51199360 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -27,31 +27,27 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} return msg.append = can.base.AddUniq(msg.append, key), msg[key] = can.core.List(arguments).slice(1), val }, Result: function() { - if (msg.result && msg.result[0] == ice.ErrWarn) { var res = msg.result[0] - for (var i = 1; i < msg.result.length; i+=2) { res += msg.result[i]+(msg.result[i+1]||"")+ice.SP } - return res - } return msg.result && msg.result.join("") || "" + if (msg.result && msg.result[0] == ice.ErrWarn) { return msg.result.join(ice.SP) } + return msg.result && msg.result.join("") || "" }, Results: function() { return msg.result && msg.result[0] == ice.ErrWarn? "": msg.Result() }, - TableDetail: function() { var item = {hash: can.Option(mdb.HASH)} + TableDetail: function() { var item = can.Option() return msg.Table(function(value) { can.core.Value(item, value.key, value.value) }), item }, Table: function(cb) { - return can.core.List(msg.Length(), function(value, index, array) { var one = {}, res - can.core.List(msg.append, function(key) { one[key] = (msg[key]&&msg[key][index]||"") }) - return can.base.isFunc(cb) && (res = cb(one, index, array)) && res != undefined && res || one + return can.core.List(msg.Length(), function(index) { var value = {} + can.core.List(msg.append, function(k) { value[k] = msg[k]&&msg[k][index]||"" }) + return can.base.isFunc(cb)? cb(value, index): value }) }, Length: function() { - var max = "", len = 0; can.core.List(msg.append, function(key, index) { - if (msg[key] && msg[key].length > len) { max = key, len = msg[key].length } - }); return len + var max = 0; can.core.List(msg.append, function(k) { if (msg[k] && msg[k].length > max) { max = msg[k].length } }); return max }, Clear: function(key) { switch (key||ice.MSG_APPEND) { case ice.MSG_APPEND: case ice.MSG_OPTION: - can.core.List(msg[key], function(item) { delete(msg[item]) }) - default: msg[key] = [] + can.core.List(msg[key], function(key) { delete(msg[key]) }) + default: delete(msg[key]) } }, Copy: function(res) { if (!res) { return msg } res.append && (msg.append = res.append) && res.append.forEach(function(item) { @@ -67,10 +63,9 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} can.core.List(value||can.base.Obj(msg.Option(ice.MSG_FIELDS))||can.core.Item(key), function(item) { detail? msg.Push(mdb.KEY, item).Push(mdb.VALUE, key[item]||""): msg.Push(item, key[item]||"") }); return msg - } - msg.append = can.base.AddUniq(msg.append, key), msg[key] = msg[key]||[] + } msg.append = can.base.AddUniq(msg.append, key), msg[key] = msg[key]||[] var i = msg.option && msg.option.indexOf(key); if (i > -1) { msg.option[i] = "", msg[key] = [] } - msg[key].push(can.base.isString(value)||can.base.isFunction(value)? value: JSON.stringify(value)) + msg[key].push(can.base.isString(value)||can.base.isFunc(value)? value: JSON.stringify(value)) return msg }, Echo: function(res) { msg.result = msg.result||[] @@ -97,40 +92,37 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} if (meta[cmds[0]]) { return meta[cmds[0]](cmds.slice(1)), true } }, Run: function(event, can, dataset, cmds, cb) { var msg = can.request(event) - var form = {}; msg.option && msg.option.forEach(function(item) { - if ([ice.MSG_HANDLE, ice.MSG_DAEMON].indexOf(item) > -1) { return } - if (can.base.isObject(msg.Option(item))) { return } - if (can.base.isFunc(msg.Option(item))) { return } - msg[item] && (form[item] = msg[item]) - }), form.cmds = cmds||form.cmds + var form = {}; msg.option && msg.option.forEach(function(key) { + if ([ice.MSG_HANDLE, ice.MSG_DAEMON].indexOf(key) > -1) { return } + if (can.base.isObject(msg.Option(key))) { return } + if (can.base.isFunc(msg.Option(key))) { return } + msg[key] && (form[key] = msg[key]) + }), form.cmds = cmds||form.cmds; var _can = msg._can._outputs? msg._can: msg._can.sup||msg._can can.misc.POST(can, msg, can.base.MergeURL(dataset.names.toLowerCase(), - "_name", (msg._can.sup||msg._can)._name, "_index", (msg._can.sup||msg._can)._index, ice.MSG_DAEMON, msg.__daemon||dataset.daemon||"" - ), form, cb) + "_name", _can._name, "_index", _can._index, ice.MSG_DAEMON, dataset.daemon), form, cb) }, POST: function(can, msg, url, form, cb) { var xhr = new XMLHttpRequest(), begin = new Date(); msg._xhr = xhr - if (can.user.isMailMaster && !msg._upload) { - var data = can.core.Items(form, function(value, index, key) { return key+ice.EQ+encodeURIComponent(value) }).join("&") - if (data) { url += (url.indexOf(url, "?") == -1? "?": "&")+data } - } xhr.open(msg._method||web.POST, url), xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return } try { var res = JSON.parse(xhr.responseText) } catch (e) { var res = {result: [xhr.responseText]} } msg.Option("_cost", new Date() - begin) if (xhr.status == 200) { return can.base.isFunc(cb) && cb(msg.Copy(res)) } can.user.toastFailure(can, xhr.response), can.misc.Warn(xhr.status, res, url, form) }, xhr.setRequestHeader(web.Accept, msg._accept||web.ContentJSON) if (msg._upload) { - var data = new FormData(); can.core.Items(form, function(value, index, key) { data.append(key, value) }) + var data = new FormData(); can.core.ItemForm(form, function(v, i, k) { data.append(k, v) }) data.append(ice.MSG_UPLOAD, web.UPLOAD), data.append(web.UPLOAD, msg._upload) xhr.upload.onprogress = function(event) { can.base.isFunc(msg._progress) && msg._progress(event, parseInt(event.loaded*100/event.total), event.total, event.loaded) } + } else if (can.user.isMailMaster) { + var data = can.core.ItemForm(form, function(value, index, key) { return key+ice.EQ+encodeURIComponent(value) }).join("&") + if (data) { url += (url.indexOf(url, "?") == -1? "?": "&")+data } } else { - var data = can.core.Items(form, function(value, index, key) { return key+ice.EQ+encodeURIComponent(value) }).join("&") + var data = can.core.ItemForm(form, function(v, i, k) { return k+ice.EQ+encodeURIComponent(v) }).join("&") xhr.setRequestHeader(web.ContentType, web.ContentFORM) - } - try { xhr.send(data) } catch(e) { can.misc.Warn(e) } + } try { xhr.send(data) } catch(e) { can.misc.Warn(e) } }, GET: function(can, url, cb) { var xhr = new XMLHttpRequest() xhr.open(msg._method||web.GET, url), xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return } if (xhr.status == 200) { return can.base.isFunc(cb) && cb(xhr.responseText) } can.misc.Warn(xhr.status, res, url, form) - }; try { xhr.send() } catch(e) { can.misc.Warn(e) } + } try { xhr.send() } catch(e) { can.misc.Warn(e) } }, WSS: function(can, args, cb, onopen, onclose, onerror) { if (can.user.isIE) { return } var url = location.protocol.replace(ice.HTTP, "ws")+"//"+location.host+"/space/" @@ -163,7 +155,6 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} } catch (e) { can.misc.Warn(e), msg.Reply() } } }, - MergePath: function(can, file, path) { return file.indexOf(ice.PS) == 0 || file.indexOf(ice.HTTP) == 0? file: can.base.Path(path, file) }, MergeCache: function(can, hash) { return can.misc.MergeURL(can, {_path: can.base.Path(web.SHARE_CACHE, hash)}, true) }, MergePodCmd: function(can, objs) { @@ -215,7 +206,6 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} if (value != undefined) { localStorage.setItem(key, value) } return localStorage.getItem(key) }, - Log: function() { var args = [this._time(), this.FileLine(2, 3), ""] for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } diff --git a/lib/page.js b/lib/page.js index 5504c06b..8d976ffc 100644 --- a/lib/page.js +++ b/lib/page.js @@ -64,17 +64,17 @@ Volcanos("page", {ClassList: { data.innerHTML = list[0]||data.innerHTML||"", type = list[1]||html.SPAN, list[2] && can.page.ClassList.add(can, data, list[2]) } else if (item.button) { var list = can.core.List(item.button); type = html.BUTTON, name = name||list[0] data.innerText = can.user.trans(can, list[0]), data.onclick = function(event) { - can.base.isFunction(list[1]) && list[1](event, name), can.onkeymap.prevent(event); return true + can.base.isFunc(list[1]) && list[1](event, name), can.onkeymap.prevent(event); return true } } else if (item.select) { var list = item.select; type = html.SELECT data.name = name = name||list[0][0], data.title = can.user.trans(can, data.title||name), data.className = data.className||list[0][0]||"" item.list = list[0].slice(1).map(function(value) { return {type: html.OPTION, value: value, inner: can.user.trans(can, value)} }) - data.onchange = function(event) { can.base.isFunction(list[1]) && list[1](event, event.target.value, name) } + data.onchange = function(event) { can.base.isFunc(list[1]) && list[1](event, event.target.value, name) } } else if (item.input) { var list = can.core.List(item.input); type = html.INPUT, name = name||list[0]||"" data.type = data.type||"text", data.name = data.name||name, data.autocomplete = "off", data.className = data.className||data.name data.onfocus = data.onfocus||function(event) { event.target.setSelectionRange(0, -1) } - data.onkeydown = function(event) { can.base.isFunction(list[1]) && list[1](event) } - data.onkeyup = function(event) { can.base.isFunction(list[2]) && list[2](event) } + data.onkeydown = function(event) { can.base.isFunc(list[1]) && list[1](event) } + data.onkeyup = function(event) { can.base.isFunc(list[2]) && list[2](event) } } else if (item.username) { var list = can.core.List(item.username); type = html.INPUT, name = name||list[0]||html.USERNAME data.name = data.name||name, data.autocomplete = data.autocomplete||html.USERNAME, data.className = list[1]||data.className||data.name } else if (item.password) { var list = can.core.List(item.password); type = html.INPUT, name = name||list[0]||html.PASSWORD diff --git a/panel/river.js b/panel/river.js index f152d4e5..d981c32b 100644 --- a/panel/river.js +++ b/panel/river.js @@ -89,10 +89,10 @@ Volcanos(chat.ONEXPORT, {width: function(can) { return can._target.offsetWidth } }) }) }, }) Volcanos(chat.ONENGINE, {_engine: function(event, can, msg, panel, cmds, cb) { var list = can.river - cmds.length == 0 && can.core.ItemSort(list, "order", function(key, value) { can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) }) + cmds.length == 0 && can.core.ItemOrder(list, "order", function(key, value) { can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) }) if (cmds.length != 1 && cmds[1] != chat.STORM) { return false } var river = list[cmds[0]]; if (!river) { return false } - can.core.ItemSort(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) }) + can.core.ItemOrder(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) }) can.base.isFunc(cb) && cb(msg); return true }}) diff --git a/plugin/local/code/inner/syntax.js b/plugin/local/code/inner/syntax.js index 0b554483..8fe09c09 100644 --- a/plugin/local/code/inner/syntax.js +++ b/plugin/local/code/inner/syntax.js @@ -341,13 +341,14 @@ Volcanos(chat.ONSYNTAX, { }, js: { split: { - operator: "{[(.,:;!?|<*>- )]}", + operator: "{[(.,:;!?|&<*>=+/- )]}", }, prefix: { "// ": code.COMMENT, }, regexp: { // "can.*": code.FUNCTION, + "[A-Z_0-9]+": code.CONSTANT, }, keyword: { "const": code.KEYWORD, @@ -388,7 +389,9 @@ Volcanos(chat.ONSYNTAX, { "this": code.DATATYPE, "JSON": code.DATATYPE, "Date": code.DATATYPE, - "Error": code.DATATYPE, + "Array": code.DATATYPE, + "Date": code.DATATYPE, + "Math": code.DATATYPE, "XMLHttpRequest": code.DATATYPE, "encodeURIComponent": code.FUNCTION, @@ -399,7 +402,27 @@ Volcanos(chat.ONSYNTAX, { "delete": code.FUNCTION, "confirm": code.FUNCTION, "alert": code.FUNCTION, - + "hasOwnProperty": code.FUNCTION, + "callee": code.FUNCTION, + "apply": code.FUNCTION, + "call": code.FUNCTION, + "parse": code.FUNCTION, + "pop": code.FUNCTION, + "push": code.FUNCTION, + "sort": code.FUNCTION, + "join": code.FUNCTION, + "slice": code.FUNCTION, + "concat": code.FUNCTION, + "indexOf": code.FUNCTION, + "lastIndexOf": code.FUNCTION, + "reverse": code.FUNCTION, + "stringify": code.FUNCTION, + "forEach": code.FUNCTION, + "toLowerCase": code.FUNCTION, + "length": code.FUNCTION, + "split": code.FUNCTION, + "trim": code.FUNCTION, + "kit": code.DATATYPE, "ice": code.DATATYPE, "can": code.DATATYPE, diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index c6f35bc4..35b92060 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -72,23 +72,23 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)) } function key(time) { return time.getDay()+" "+can.base.Number(time.getHours(), 2) } function get(begin_time, col, row, hash) { return hash[col-1+" "+list[row]] } - function set(begin_time, col, row) { return can.base.Time(can.base.TimeAdd(begin_time, -begin_time.getDay()+col-1), "%y-%m-%d ")+list[row] } + function set(begin_time, col, row) { return can.base.Time(can.base.DateAdd(begin_time, -begin_time.getDay()+col-1), "%y-%m-%d ")+list[row] } can.onimport._content(can, msg, head, list, key, get, set) }, month: function(can, msg) { var head = can.onexport.head(can, "order") var list = [0]; for (var i = 1; i < 6; i++) { list.push(i) } function key(time) { return can.base.Time(time, "%y-%m-%d") } function get(begin_time, col, row, hash) { - var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)) - var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) - var day = can.base.TimeAdd(last, (row-1)*7+col) + var begin = can.base.DateAdd(begin_time, -(begin_time.getDate()-1)) + var last = can.base.DateAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) + var day = can.base.DateAdd(last, (row-1)*7+col) var l = can.date.solar2lunar(day) return [can.page.Format(html.SPAN, day.getDate(), "day")+" "+can.page.Format(html.SPAN, l.autoDay, l.autoClass)].concat(hash[key(day)]||[]) } function set(begin_time, col, row) { - var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)) - var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) - var day = can.base.TimeAdd(last, (row-1)*7+col) + var begin = can.base.DateAdd(begin_time, -(begin_time.getDate()-1)) + var last = can.base.DateAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) + var day = can.base.DateAdd(last, (row-1)*7+col) return key(day) } can.onimport._content(can, msg, head, list, key, get, set)