mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
192 lines
7.2 KiB
JavaScript
192 lines
7.2 KiB
JavaScript
const lang = {
|
|
STRING: "string", OBJECT: "object", FUNCTION: "function",
|
|
ENTER: "Enter",
|
|
}
|
|
function shy(help, meta, list, cb) {
|
|
var index = 0, args = arguments; function next(type) {
|
|
if (index < args.length && (!type || type == typeof args[index])) {
|
|
return args[index++]
|
|
}
|
|
}
|
|
|
|
cb = args[args.length-1]||function() {}
|
|
cb.help = next(code.STRING)||""
|
|
cb.meta = next(code.OBJECT)|| {}
|
|
cb.list = next(code.OBJECT)||[]
|
|
return cb
|
|
}
|
|
module.exports = {
|
|
EQ: function(obj, other) {
|
|
if (typeof obj != typeof other) { return false }
|
|
|
|
if (typeof obj == "object") {
|
|
if (obj.length != other.length) { return false }
|
|
for (var i = 0; i < obj.length; i++) {
|
|
if (!this.EQ(obj[i], other[i])) { return false }
|
|
}
|
|
|
|
for (var k in obj) {
|
|
if (!this.EQ(obj[k], other[k])) { return false }
|
|
}
|
|
return true
|
|
}
|
|
return obj === other
|
|
},
|
|
Number: function(d, n) {var res = [];
|
|
while (d > 0) {res.push(d % 10); d = parseInt(d / 10); n--}
|
|
while (n > 0) {res.push("0"); n--}
|
|
return res.reverse(), res.join("");
|
|
},
|
|
Time: function(t, fmt) {var now = t? new Date(t): new Date();
|
|
fmt = fmt || "%y-%m-%d %H:%M:%S";
|
|
fmt = fmt.replace("%y", now.getFullYear())
|
|
fmt = fmt.replace("%m", Number(now.getMonth()+1, 2))
|
|
fmt = fmt.replace("%d", Number(now.getDate(), 2))
|
|
fmt = fmt.replace("%H", Number(now.getHours(), 2))
|
|
fmt = fmt.replace("%M", Number(now.getMinutes(), 2))
|
|
fmt = fmt.replace("%S", Number(now.getSeconds(), 2))
|
|
return fmt
|
|
},
|
|
Args: function(url, args) { var list = []
|
|
for (var k in args) {
|
|
list.push(encodeURIComponent(k)+"="+encodeURIComponent(args[k]))
|
|
}
|
|
return url+"?"+list.join("&")
|
|
},
|
|
List: function(list, cb, cbs) {var res = [], val;
|
|
for (var i = 0; i < list.length; i++) {
|
|
typeof cb == "function"? (val = cb(list[i], i, list)) != undefined && res.push(val): res.push(list[i])
|
|
}
|
|
return typeof cbs == "function" && cbs(res), res
|
|
},
|
|
Item: function(list, cb, cbs) {
|
|
for (var k in list) { cb(k, list[k]) }
|
|
},
|
|
Value: function(data, key, value) {
|
|
if (data == undefined) { return }
|
|
if (key == undefined) { return data }
|
|
if (typeof key == "object") { for (var k in key) {
|
|
arguments.callee.call(this, data, k, key[k])
|
|
}; return data }
|
|
|
|
if (value != undefined) { data[key] = value }
|
|
if (data[key] != undefined) { return data[key] }
|
|
|
|
var p = data, ls = key.split("."); while (p && ls.length > 0) {
|
|
if (ls[0] == "-1") { ls[0] = p.length-1 }
|
|
p = p[ls[0]], ls = ls.slice(1)
|
|
}; return p
|
|
},
|
|
Simple: function() { var res = []
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var arg = arguments[i]; switch (typeof arguments[i]) {
|
|
case "number": res.push(arg); break
|
|
case "string": res.push(arg); break
|
|
case "object":
|
|
if (arg.length > 0) {
|
|
res = res.concat(arg)
|
|
} else {
|
|
for (var k in arg) { res.push(k, arg[k]) }
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
},
|
|
|
|
Timer: shy("定时器, value, [1,2,3,4], {value, length}", function(interval, cb, cbs) {
|
|
interval = typeof interval == "object"? interval || []: [interval]
|
|
var timer = {stop: false}; function loop(timer, i) {
|
|
if (timer.stop || i >= interval.length && interval.length >= 0) {
|
|
return typeof cbs == "function" && cbs(timer, interval)
|
|
}
|
|
return typeof cb == "function" && cb(timer, interval.interval||interval[i], i, interval)?
|
|
typeof cbs == "function" && cbs(timer, interval): setTimeout(function() { loop(timer, i+1) }, interval.interval||interval[i+1])
|
|
}
|
|
setTimeout(function() { loop(timer, 0) }, interval.interval||interval[0])
|
|
return timer
|
|
}),
|
|
Split: shy("分词器", function(str) { if (!str || !str.length) { return [] }
|
|
var opt = {detail: false}, arg = []; for (var i = 1; i < arguments.length; i++) {
|
|
typeof arguments[i] == "object"? opt = arguments[i]: arg.push(arguments[i])
|
|
}
|
|
|
|
function _list(str) { var res = {}; for (var i = 0; i < str.length; i++) { res[str[i]] = true }; return res }
|
|
// 空白符
|
|
var seps = _list(arg[0]||"\t ,\n")
|
|
// 分隔符
|
|
var sups = _list(arg[1]||"{[(.:)]}")
|
|
// 引用符
|
|
var subs = _list(arg[2]||"'\"`")
|
|
|
|
// 开始分词
|
|
var res = [], list = str
|
|
var left = "", space = true, begin = 0
|
|
for (var i = 0; i < list.length; i++) {
|
|
if (seps[list[i]]) {
|
|
// 空白符
|
|
if (left == "") {
|
|
if (!space) {
|
|
res.push(list.slice(begin, i))
|
|
}
|
|
opt.detail && res.push({text: list.slice(i, i+1), type: "space", left: left})
|
|
space = true, begin = i+1
|
|
}
|
|
} else if (subs[list[i]]) {
|
|
// 引用符
|
|
if (left == "") {
|
|
left = list[i], space = false, begin = i+1
|
|
} else if (left == list[i]) {
|
|
opt.detail? res.push({text: list.slice(begin, i), type: "string", left: left, right: left}): res.push(list.slice(begin, i))
|
|
left = "", space = true, begin = i+1
|
|
}
|
|
} else if (sups[list[i]]) {
|
|
// 分隔符
|
|
if (left == "") {
|
|
if (!space) {
|
|
res.push(list.slice(begin, i))
|
|
}
|
|
res.push(list.slice(i, i+1))
|
|
space = true, begin = i+1
|
|
}
|
|
} else if (list[0] == '\\') {
|
|
// 转义符
|
|
for (var i = i; i < list.length-1; i++) {
|
|
list[i] = list[i+1]
|
|
}
|
|
list = list.slice(0, list.length-1)
|
|
space = false
|
|
} else {
|
|
space = false
|
|
}
|
|
}
|
|
|
|
// 末尾字符
|
|
if (left != "") {
|
|
res.push({text: list.slice(begin), type: "string", left: left, right: ""})
|
|
} else if (begin < list.length) {
|
|
res.push(list.slice(begin))
|
|
}
|
|
return res
|
|
}),
|
|
parseJSON: shy("解析器", function(str, def) { var res
|
|
if (!str) { return def||{} }
|
|
if (typeof str == "object") { return str }
|
|
if (str.indexOf("http") == 0) { var ls = str.split("?")
|
|
res = {type: "link", name: "", text: str}
|
|
res.name = ls[0].split("://").pop().split("/")[0]
|
|
ls[1] && ls[1].split("&").forEach(function(item) { var ls = item.split("=")
|
|
res[decodeURIComponent(ls[0])] = decodeURIComponent(ls[1])
|
|
})
|
|
return res
|
|
}
|
|
try { res = JSON.parse(str)
|
|
res.text = res.text||str
|
|
res.type = res.type||"json"
|
|
} catch (e) {
|
|
res = {type: "text", text: str}
|
|
}
|
|
return res
|
|
}),
|
|
}
|
|
|