1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
harveyshao 2022-12-16 14:37:24 +08:00
parent cfc47ab273
commit a0f51ba901
7 changed files with 124 additions and 125 deletions

View File

@ -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 },
})

View File

@ -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
}),
})

View File

@ -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]) }

View File

@ -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

View File

@ -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
}})

View File

@ -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,

View File

@ -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)