forked from 0x2620/oxjs
merging changes
This commit is contained in:
parent
94fb1b4d1d
commit
221355f8ba
8 changed files with 8989 additions and 672 deletions
631
build/js/ox.js
631
build/js/ox.js
|
|
@ -1,15 +1,8 @@
|
|||
// todo: check http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
|
||||
|
||||
/*
|
||||
Ox = function(val) {
|
||||
|
||||
var Ox = {
|
||||
version: '0.1.2'
|
||||
};
|
||||
*/
|
||||
if (!window.Ox) {
|
||||
Ox = {
|
||||
version: '0.1.2'
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
================================================================================
|
||||
|
|
@ -18,16 +11,72 @@ Constants
|
|||
*/
|
||||
|
||||
Ox.AMPM = ['AM', 'PM'];
|
||||
Ox.DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
//Ox.DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
Ox.DURATIONS = ['year', 'month', 'day', 'minute', 'second'];
|
||||
Ox.EARTH_RADIUS = 6378137;
|
||||
Ox.EARTH_CIRCUMFERENCE = Ox.EARTH_RADIUS * 2 * Math.PI;
|
||||
Ox.HTML_ENTITIES = {'"': '"', '&': '&', "'": ''',
|
||||
'<': '<', '>': '>'};
|
||||
Ox.MONTHS = ['January', 'February', 'March', 'April', 'May', 'June',
|
||||
'July', 'August', 'September', 'October', 'November', 'December'];
|
||||
Ox.HTML_ENTITIES = {
|
||||
'"': '"', '&': '&', "'": ''', '<': '<', '>': '>'
|
||||
};
|
||||
Ox.KEYS = {
|
||||
SECTION: 0, BACKSPACE: 8, TAB: 9, CLEAR: 12, ENTER: 13,
|
||||
SHIFT: 16, CONTROL: 17, OPTION: 18, PAUSE: 19, CAPSLOCK: 20,
|
||||
ESCAPE: 27, SPACE: 32, PAGEUP: 33, PAGEDOWN: 34, END: 35, HOME: 36,
|
||||
LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, INSERT: 45, DELETE: 46, HELP: 47,
|
||||
0: 48, 1: 49, 2: 50, 3: 51, 4: 52, 5: 53, 6: 54, 7: 55, 8: 56, 9: 57,
|
||||
A: 65, B: 66, C: 67, D: 68, E: 69, F: 70, G: 71, H: 72, I: 73, J: 74,
|
||||
K: 75, L: 76, M: 77, N: 78, O: 79, P: 80, Q: 81, R: 82, S: 83, T: 84,
|
||||
U: 85, V: 86, W: 87, X: 88, Y: 89, Z: 90,
|
||||
META_LEFT: 91, META_RIGHT: 92, SELECT: 93,
|
||||
'0_NUMPAD': 96, '1_NUMPAD': 97, '2_NUMPAD': 98, '3_NUMPAD': 99,
|
||||
'4_NUMPAD': 100, '5_NUMPAD': 101, '6_NUMPAD': 102, '7_NUMPAD': 103,
|
||||
'8_NUMPAD': 104, '9_NUMPAD': 105, '*_NUMPAD': 106, '+_NUMPAD': 107,
|
||||
'\n_NUMPAD': 108, '-_NUMPAD': 109, '._NUMPAD': 110, '/_NUMPAD': 111,
|
||||
F1: 112, F2: 113, F3: 114, F4: 115, F5: 116, F6: 117, F7: 118,
|
||||
F8: 110, F9: 120, F10: 121, F11: 122, F12: 123, F13: 124, F14: 125,
|
||||
F15: 126, F16: 127, NUMLOCK: 144, SCROLLLOCK: 145,
|
||||
';': 186, '=': 187, ',': 188, '-': 189, '.': 190, '/': 191, '`': 192,
|
||||
'(': 219, '\\': 220, ')': 221, '\'': 222
|
||||
};
|
||||
//Ox.MAX_LATITUDE = Ox.deg(Math.atan(Ox.sinh(Math.PI)));
|
||||
//Ox.MIN_LATITUDE = -Ox.MAX_LATITUDE;
|
||||
Ox.MONTHS = [
|
||||
'January', 'February', 'March', 'April', 'May', 'June',
|
||||
'July', 'August', 'September', 'October', 'November', 'December'
|
||||
];
|
||||
Ox.PREFIXES = ['K', 'M', 'G', 'T', 'P'];
|
||||
Ox.WEEKDAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
|
||||
'Friday', 'Saturday', 'Sunday'];
|
||||
Ox.SYMBOLS = {
|
||||
DOLLAR: '\u0024',
|
||||
CENT: '\u00A2', POUND: '\u00A3', CURRENCY: '\u00A4', YEN: '\u00A5',
|
||||
BULLET: '\u2022', ELLIPSIS: '\u2026', PERMILLE: '\u2030',
|
||||
COLON: '\u20A1', CRUZEIRO: '\u20A2', FRANC: '\u20A3', LIRA: '\u20A4',
|
||||
NAIRA: '\u20A6', PESETA: '\u20A7', WON: '\u20A9', SHEQEL: '\u20AA',
|
||||
DONG: '\u20AB', EURO: '\u20AC', KIP: '\u20AD', TUGRIK: '\u20AE',
|
||||
DRACHMA: '\u20AF', PESO: '\u20B1', GUARANI: '\u20B2', AUSTRAL: '\u20B3',
|
||||
HRYVNIA: '\u20B4', CEDI: '\u20B5', TENGE: '\u20B8', RUPEE: '\u20B9',
|
||||
CELSIUS: '\u2103', FAHRENHEIT: '\u2109', POUNDS: '\u2114', OUNCE: '\u2125',
|
||||
OHM: '\u2126', KELVIN: '\u212A', ANGSTROM: '\u212B', INFO: '\u2139',
|
||||
LEFT: '\u2190', UP: '\u2191', RIGHT: '\u2192', DOWN: '\u2193',
|
||||
HOME: '\u2196', END: '\u2198', RETURN: '\u21A9',
|
||||
REDO: '\u21BA', UNDO: '\u21BB', PAGEUP: '\u21DE', PAGEDOWN: '\u21DF',
|
||||
CAPSLOCK: '\u21EA', TAB: '\u21E5', SHIFT: '\u21E7', INFINITY: '\u221E',
|
||||
CONTROL: '\u2303', COMMAND: '\u2318', ENTER: '\u2324', ALT: '\u2325',
|
||||
DELETE: '\u2326', CLEAR:'\u2327',BACKSPACE: '\u232B', OPTION: '\u2387',
|
||||
NAVIGATE: '\u2388', ESCAPE: '\u238B', EJECT: '\u23CF',
|
||||
SPACE: '\u2423', DIAMOND: '\u25C6',
|
||||
STAR: '\u2605', SOUND: '\u266B', TRASH: '\u267A', FLAG: '\u2691',
|
||||
ANCHOR: '\u2693', GEAR: '\u2699', ATOM: '\u269B', WARNING: '\u26A0',
|
||||
CUT: '\u2702', BACKUP: '\u2707', FLY: '\u2708', CHECK: '\u2713',
|
||||
CLOSE: '\u2715', BALLOT: '\u2717', WINDOWS: '\u2756',
|
||||
EDIT: '\uF802', CLICK: '\uF803', APPLE: '\uF8FF'
|
||||
};
|
||||
Ox.TYPES = [
|
||||
'Arguments', 'Array', 'Boolean', 'Date', 'Element', 'Function', 'Infinity',
|
||||
'NaN', 'Null', 'Number', 'Object', 'RegExp', 'String', 'Undefined'
|
||||
];
|
||||
Ox.WEEKDAYS = [
|
||||
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
|
||||
];
|
||||
|
||||
/*
|
||||
================================================================================
|
||||
|
|
@ -39,38 +88,46 @@ Ox.getset = function(obj, args, callback, context) {
|
|||
/***
|
||||
Generic getter and setter function
|
||||
|
||||
Ox.getset(obj) returns obj
|
||||
can be implemented like this:
|
||||
|
||||
that.options = function() {
|
||||
return Ox.getset(options, arguments, setOption(key, val), that);
|
||||
}
|
||||
|
||||
Ox.getset(obj, []) returns obj
|
||||
Ox.getset(obj, [key]) returns obj.key
|
||||
Ox.getset(obj, [key, val], callback, context)
|
||||
Ox.getset(obj, [{key: val, ...}], callback, context) sets obj.key to val,
|
||||
calls callback(key, val),
|
||||
calls callback(key, val)
|
||||
for any changed value,
|
||||
returns context
|
||||
(for chaining)
|
||||
|
||||
>>> o = new function() { var o = {}, s = function() {}, t = this; t.o = function() { return Ox['getset'](o, arguments, s, t); }; return t; }
|
||||
true
|
||||
>>> Ox.getset({}, []) && o.o('key', 'val').o('key')
|
||||
'val'
|
||||
>>> Ox.getset({}, []) && o.o({key: 'val', foo: 'bar'}).o().foo
|
||||
'bar'
|
||||
>>> Ox.getset({}, []) && typeof o.o({foo: undefined}).o('foo') == 'undefined'
|
||||
true
|
||||
>>> delete o
|
||||
true
|
||||
***/
|
||||
var obj_ = obj,
|
||||
args_ = {},
|
||||
args = args || [],
|
||||
callback = callback || {},
|
||||
context = context || {},
|
||||
length = args.length,
|
||||
ret;
|
||||
if (length == 0) {
|
||||
// getset()
|
||||
var obj_ = Ox.clone(obj), ret;
|
||||
if (args.length == 0) {
|
||||
// getset([])
|
||||
ret = obj;
|
||||
} else if (length == 1 && Ox.isString(args[0])) {
|
||||
// getset(str)
|
||||
} else if (args.length == 1 && !Ox.isObject(args[0])) {
|
||||
// getset([key])
|
||||
ret = obj[args[0]]
|
||||
} else {
|
||||
// getset(str, val) or getset({str: val, ...})
|
||||
if (length == 1) {
|
||||
args = args[0];
|
||||
} else {
|
||||
args_[args[0]] = args[1];
|
||||
args = args_;
|
||||
}
|
||||
obj = $.extend(obj, args);
|
||||
$.each(args, function(key, value) {
|
||||
if (!obj_ || !obj_[key] || obj_[key] !== value) {
|
||||
callback(key, value);
|
||||
// getset([key, val]) or getset([{key: val, ...}])
|
||||
args = Ox.makeObject(Ox.isObject(args[0]) ? args[0] : args);
|
||||
obj = Ox.extend(obj, args);
|
||||
Ox.forEach(args, function(val, key) {
|
||||
if (!obj_ || !Ox.isEqual(obj_[key], val)) {
|
||||
callback && callback(key, val);
|
||||
}
|
||||
});
|
||||
ret = context;
|
||||
|
|
@ -82,7 +139,7 @@ Ox.print = function() {
|
|||
/*
|
||||
*/
|
||||
if (window.console) {
|
||||
var args = $.makeArray(arguments),
|
||||
var args = Ox.makeArray(arguments),
|
||||
date = new Date;
|
||||
args.unshift(Ox.formatDate(date, '%H:%M:%S') + '.' +
|
||||
(Ox.pad(+date % 1000, 3)));
|
||||
|
|
@ -109,7 +166,7 @@ Ox.user = function() {
|
|||
re = />(.+?)<\/td>\n<td class=output align="center">\n(.*?)\n/,
|
||||
results = {};
|
||||
arr.shift();
|
||||
$.each(arr, function(i, v) {
|
||||
Ox.forEach(arr, function(v) {
|
||||
var result = re(v);
|
||||
results[result[1].replace(/Your |\*/, "")] = result[2];
|
||||
});
|
||||
|
|
@ -150,6 +207,10 @@ Ox.avg = function(obj) {
|
|||
|
||||
Ox.clone = function(obj) {
|
||||
/*
|
||||
>>> (function() { a = ['val']; b = Ox.clone(a); a[0] = null; return b[0]; }())
|
||||
'val'
|
||||
>>> (function() { a = {key: 'val'}; b = Ox.clone(a); a.key = null; return b.key; }())
|
||||
'val'
|
||||
*/
|
||||
return Ox.isArray(obj) ? obj.slice() : Ox.extend({}, obj);
|
||||
};
|
||||
|
|
@ -189,38 +250,6 @@ Ox.each = function(obj, fn) {
|
|||
return obj;
|
||||
};
|
||||
|
||||
Ox.equals = function(obj0, obj1) {
|
||||
/*
|
||||
>>> Ox.equals([1, 2, 3], [1, 2, 3])
|
||||
true
|
||||
>>> Ox.equals({a: 1, b: [2, 3], c: {d: '4'}}, {a: 1, b: [2, 3], c: {d: '4'}})
|
||||
true
|
||||
>>> Ox.equals(function() { return; }, function() { return; });
|
||||
true
|
||||
*/
|
||||
var ret = false;
|
||||
if (obj0 === obj1) {
|
||||
ret = true;
|
||||
} else if (typeof(obj0) == typeof(obj1)) {
|
||||
if (obj0 == obj1) {
|
||||
ret = true;
|
||||
} else if (Ox.isArray(obj0) && obj0.length == obj1.length) {
|
||||
Ox.forEach(obj0, function(v, i) {
|
||||
ret = Ox.equals(v, obj1[i]);
|
||||
return ret;
|
||||
});
|
||||
} else if (Ox.isDate(obj0)) {
|
||||
ret = obj0.getTime() == obj1.getTime();
|
||||
} else if (Ox.isObject(obj0)) {
|
||||
ret = Ox.equals(Ox.keys(obj0), Ox.keys(obj1)) &&
|
||||
Ox.equals(Ox.values(obj0), Ox.values(obj1));
|
||||
} else if (Ox.isFunction(obj0)) {
|
||||
ret = obj0.toString() == obj1.toString();
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Ox.every = function(obj, fn) {
|
||||
/*
|
||||
Ox.every() works for arrays, objects and strings, unlike [].every()
|
||||
|
|
@ -240,10 +269,10 @@ Ox.every = function(obj, fn) {
|
|||
|
||||
Ox.extend = function() {
|
||||
/*
|
||||
>>> Ox.extend({a: 1}, {b: 2}, {c: 3}).c
|
||||
>>> Ox.extend({a: 1, b: 1, c: 1}, {b: 2, c: 2}, {c: 3}).c
|
||||
3
|
||||
*/
|
||||
var obj = {};
|
||||
var obj = arguments[0];
|
||||
Ox.forEach(Array.prototype.slice.call(arguments, 1), function(arg, i) {
|
||||
Ox.forEach(arg, function(val, key) {
|
||||
obj[key] = val;
|
||||
|
|
@ -257,8 +286,8 @@ Ox.filter = function(arr, fn) {
|
|||
Ox.filter works for arrays and strings, like $.grep(), unlike [].filter()
|
||||
>>> Ox.filter([2, 1, 0], function(v, i) { return v == i; })
|
||||
[1]
|
||||
>>> Ox.filter("210", function(v, i) { return v == i; })
|
||||
[1]
|
||||
>>> Ox.filter('210', function(v, i) { return v == i; })
|
||||
['1']
|
||||
*/
|
||||
var i, len = arr.length, ret = [];
|
||||
for (i = 0; i < len; i++) {
|
||||
|
|
@ -360,6 +389,48 @@ Ox.getPositionById = function(arr, id) {
|
|||
return ret;
|
||||
};
|
||||
|
||||
Ox.isEmpty = function(val) {
|
||||
return Ox.length(val) == 0;
|
||||
};
|
||||
|
||||
Ox.isEqual = function(obj0, obj1) {
|
||||
/*
|
||||
>>> Ox.isEqual(false, false)
|
||||
true
|
||||
>>> Ox.isEqual(0, 0)
|
||||
true
|
||||
>>> Ox.isEqual(NaN, NaN)
|
||||
false
|
||||
>>> Ox.isEqual([1, 2, 3], [1, 2, 3])
|
||||
true
|
||||
>>> Ox.isEqual({a: 1, b: [2, 3], c: {d: '4'}}, {a: 1, b: [2, 3], c: {d: '4'}})
|
||||
true
|
||||
>>> Ox.isEqual(function() { return; }, function() { return; });
|
||||
true
|
||||
*/
|
||||
var ret = false;
|
||||
if (obj0 === obj1) {
|
||||
ret = true;
|
||||
} else if (typeof(obj0) == typeof(obj1)) {
|
||||
if (obj0 == obj1) {
|
||||
ret = true;
|
||||
} else if (Ox.isArray(obj0) && obj0.length == obj1.length) {
|
||||
Ox.forEach(obj0, function(v, i) {
|
||||
ret = Ox.isEqual(v, obj1[i]);
|
||||
return ret;
|
||||
});
|
||||
} else if (Ox.isDate(obj0)) {
|
||||
ret = obj0.getTime() == obj1.getTime();
|
||||
} else if (Ox.isObject(obj0)) {
|
||||
ret = Ox.isEqual(Ox.keys(obj0), Ox.keys(obj1)) &&
|
||||
Ox.isEqual(Ox.values(obj0), Ox.values(obj1));
|
||||
} else if (Ox.isFunction(obj0)) {
|
||||
ret = obj0.toString() == obj1.toString();
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Ox.keys = function(obj) {
|
||||
/*
|
||||
>>> Ox.keys({a: 1, b: 2, c: 3})
|
||||
|
|
@ -374,6 +445,8 @@ Ox.keys = function(obj) {
|
|||
|
||||
Ox.length = function(obj) {
|
||||
/*
|
||||
>>> Ox.length([1, 2, 3])
|
||||
3
|
||||
>>> Ox.length({"a": 1, "b": 2, "c": 3})
|
||||
3
|
||||
*/
|
||||
|
|
@ -384,46 +457,42 @@ Ox.length = function(obj) {
|
|||
return length;
|
||||
};
|
||||
|
||||
Ox.makeArray = function(arr) {
|
||||
Ox.makeArray = function(arg) {
|
||||
/*
|
||||
like $.makeArray()
|
||||
>>> Ox.makeArray("foo")
|
||||
["foo"]
|
||||
>>> Ox.makeArray(["foo"])
|
||||
["foo"]
|
||||
>>> (function() { return Ox.makeArray(arguments); }("foo"))
|
||||
["foo"]
|
||||
>>> (function() { return Ox.makeArray(arguments); }(["foo"]))
|
||||
["foo"]
|
||||
>>> Ox.makeArray('foo', 'bar')
|
||||
['foo', 'bar']
|
||||
>>> (function() { return Ox.makeArray(arguments); }('foo', 'bar'))
|
||||
['foo', 'bar']
|
||||
*/
|
||||
// fixme: this doesn't work for numbers
|
||||
var ret = [], i = 0, len = arr.length;
|
||||
if (Ox.isString(arr)) {
|
||||
ret = [arr];
|
||||
} else {
|
||||
for (i = 0; i < len; i++) {
|
||||
ret.push(arr[i]);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
return Array.prototype.slice.call(
|
||||
Ox.isArguments(arg) ? arg : arguments
|
||||
);
|
||||
};
|
||||
|
||||
Ox.makeObject = function(arr) {
|
||||
Ox.makeObject = function() {
|
||||
/*
|
||||
>>> Ox.makeObject("foo", "bar").foo
|
||||
"bar"
|
||||
>>> Ox.makeObject(["foo", "bar"]).foo
|
||||
"bar"
|
||||
>>> Ox.makeObject({foo: "bar"}).foo
|
||||
"bar"
|
||||
>/>> (function() { return Ox.makeObject(arguments); }("foo", "bar")).foo // fixme
|
||||
"bar"
|
||||
>/>> (function() { return Ox.makeObject(arguments); }({foo: "bar"})).foo
|
||||
>>> (function() { return Ox.makeObject(arguments); }("foo", "bar")).foo
|
||||
"bar"
|
||||
*/
|
||||
var obj = {};
|
||||
if (arguments.length == 1) {
|
||||
obj = arguments[0];
|
||||
var arg = arguments, obj = {};
|
||||
if (arg.length == 1) {
|
||||
if (Ox.isObject(arg[0])) {
|
||||
// ({foo: 'bar'})
|
||||
obj = arg[0];
|
||||
} else {
|
||||
// (['foo', 'bar'])
|
||||
obj[arg[0][0]] = arg[0][1];
|
||||
}
|
||||
} else {
|
||||
obj[arguments[0]] = arguments[1];
|
||||
// ('foo', 'bar')
|
||||
obj[arg[0]] = arg[1];
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
|
@ -438,7 +507,6 @@ Ox.map = function(arr, fn) {
|
|||
>>> Ox.map(new Array(3), function(v, i) { return i; })
|
||||
[0, 1, 2]
|
||||
*/
|
||||
// fixme: why not [].map.call(str, fn)?
|
||||
var i, len = arr.length, val, ret = [];
|
||||
for (i = 0; i < len; i++) {
|
||||
if ((val = fn(arr[i], i)) !== null) {
|
||||
|
|
@ -493,12 +561,11 @@ Ox.range = function(start, stop, step) {
|
|||
stop = arguments.length > 1 ? stop : arguments[0];
|
||||
start = arguments.length > 1 ? start : 0;
|
||||
step = step || (start <= stop ? 1 : -1);
|
||||
var range = [],
|
||||
i;
|
||||
var arr = [], i;
|
||||
for (i = start; step > 0 ? i < stop : i > stop; i += step) {
|
||||
range.push(i);
|
||||
arr.push(i);
|
||||
}
|
||||
return range;
|
||||
return arr;
|
||||
};
|
||||
|
||||
Ox.serialize = function(obj) {
|
||||
|
|
@ -515,9 +582,11 @@ Ox.serialize = function(obj) {
|
|||
|
||||
Ox.setPropertyOnce = function(arr, str) {
|
||||
/*
|
||||
>>> Ox.setPropertyOnce([{selected: false}, {selected: false}])
|
||||
>>> Ox.setPropertyOnce([{selected: false}, {selected: false}], 'selected')
|
||||
0
|
||||
>>> Ox.setPropertyOnce([{selected: true}, {selected: true}])
|
||||
>>> Ox.setPropertyOnce([{selected: false}, {selected: true}], 'selected')
|
||||
1
|
||||
>>> Ox.setPropertyOnce([{selected: true}, {selected: true}], 'selected')
|
||||
0
|
||||
*/
|
||||
var pos = -1;
|
||||
|
|
@ -573,14 +642,32 @@ Ox.sum = function(obj) {
|
|||
return sum;
|
||||
};
|
||||
|
||||
Ox.toArray = function(obj) {
|
||||
/*
|
||||
>>> Ox.toArray('foo')
|
||||
['foo']
|
||||
>>> Ox.toArray(['foo'])
|
||||
['foo']
|
||||
*/
|
||||
var arr;
|
||||
if (Ox.isArray(obj)) {
|
||||
arr = obj;
|
||||
} else if (Ox.isArguments(obj)) {
|
||||
arr = Ox.makeArray(obj);
|
||||
} else {
|
||||
arr = [obj];
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
|
||||
Ox.unique = function(arr) {
|
||||
/*
|
||||
>>> Ox.unique([1, 2, 3, 1])
|
||||
[1, 2, 3]
|
||||
*/
|
||||
var unique = [];
|
||||
$.each(arr, function(i, v) {
|
||||
unique.indexOf(v) == -1 && unique.push(v);
|
||||
Ox.forEach(arr, function(val) {
|
||||
unique.indexOf(val) == -1 && unique.push(val);
|
||||
});
|
||||
return unique;
|
||||
};
|
||||
|
|
@ -731,7 +818,6 @@ Ox.getDateInWeek = function(date, weekday) {
|
|||
>>> Ox.formatDate(Ox.getDateInWeek(new Date("1/1/2000"), 1), "%A, %B %e, %Y")
|
||||
"Monday, December 27, 1999"
|
||||
*/
|
||||
Ox.print("getDateInWeek", date.toString(), weekday)
|
||||
var date = date || new Date(),
|
||||
sourceWeekday = Ox.formatDate(date, "%u");
|
||||
targetWeekday = Ox.isNumber(weekday) ? weekday :
|
||||
|
|
@ -744,41 +830,51 @@ Ox.getDateInWeek = function(date, weekday) {
|
|||
|
||||
Ox.getDayOfTheYear = function(date) {
|
||||
/*
|
||||
>>> Ox.getDayOfTheYear(new Date("12/31/2000"))
|
||||
366
|
||||
>>> Ox.getDayOfTheYear(new Date("12/31/2002"))
|
||||
365
|
||||
>>> Ox.getDayOfTheYear(new Date("12/31/2004"))
|
||||
366
|
||||
*/
|
||||
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
return function(date) {
|
||||
date = date || new Date();
|
||||
var month = date.getMonth(),
|
||||
year = date.getFullYear();
|
||||
return Ox.sum(Ox.map(Ox.range(month), function(i) {
|
||||
return Ox.getDaysInMonth(year, i + 1);
|
||||
})) + date.getDate();
|
||||
/*
|
||||
var day = date.getDate(),
|
||||
month = date.getMonth(),
|
||||
month = date.getMonth();
|
||||
i;
|
||||
for (i = 0; i < month; i++) {
|
||||
day += days[i];
|
||||
day += Ox.DAYS[i];
|
||||
}
|
||||
if (month >= 2 && Ox.isLeapYear(date.getFullYear())) {
|
||||
day++;
|
||||
}
|
||||
return day;
|
||||
*/
|
||||
};
|
||||
}();
|
||||
|
||||
Ox.getDaysInMonth = function(year, month) {
|
||||
/*
|
||||
>>> Ox.getDaysInMonth(2000, 2)
|
||||
28
|
||||
29
|
||||
>>> Ox.getDaysInMonth("2002", "Feb")
|
||||
28
|
||||
>>> Ox.getDaysInMonth("2004", "February")
|
||||
29
|
||||
*/
|
||||
Ox.print("getDaysInMonth", year, month)
|
||||
var year = parseInt(year),
|
||||
month = Ox.isNumber(month) ? month :
|
||||
Ox.map(Ox.MONTHS, function(v, i) {
|
||||
return v.substr(0, 3) == month.substr(0, 3) ? i + 1 : null;
|
||||
})[0];
|
||||
return Ox.DAYS[month - 1] + (month == 2 && Ox.isLeapYear(year));
|
||||
return new Date(year, month, 0).getDate()
|
||||
//return Ox.DAYS[month - 1] + (month == 2 && Ox.isLeapYear(year));
|
||||
}
|
||||
|
||||
Ox.getFirstDayOfTheYear = function(date) {
|
||||
|
|
@ -854,9 +950,9 @@ Ox.getTime = function() {
|
|||
|
||||
Ox.getTimezoneOffsetString = function(date) {
|
||||
/*
|
||||
Time zone offset string (-1200 - +1200)
|
||||
>>> Ox.getTimezoneOffsetString(new Date("01/01/2000"))
|
||||
"+0100"
|
||||
Time zone offset string ('-1200' - '+1200')
|
||||
>>> Ox.getTimezoneOffsetString(new Date('01/01/2000')).length
|
||||
5
|
||||
*/
|
||||
var offset = (date || new Date()).getTimezoneOffset();
|
||||
return (offset < 0 ? '+' : '-') +
|
||||
|
|
@ -881,10 +977,14 @@ Ox.getWeek = function(date) {
|
|||
|
||||
Ox.isLeapYear = function(year) {
|
||||
/*
|
||||
>>> Ox.isLeapYear(2000)
|
||||
>>> Ox.isLeapYear(1900)
|
||||
false
|
||||
>>> Ox.isLeapYear(2000)
|
||||
true
|
||||
>>> Ox.isLeapYear(2004)
|
||||
true
|
||||
*/
|
||||
return year % 4 == 0 && year % 400 != 0;
|
||||
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -1015,7 +1115,7 @@ Encoding functions
|
|||
>>> Ox.decodeBase32('?').toString()
|
||||
'NaN'
|
||||
*/
|
||||
return parseInt($.map(str.toUpperCase(), function(char) {
|
||||
return parseInt(Ox.map(str.toUpperCase(), function(char) {
|
||||
var index = digits.indexOf(aliases[char] || char);
|
||||
return (index == -1 ? ' ' : index).toString(32);
|
||||
}).join(''), 32);
|
||||
|
|
@ -1131,7 +1231,7 @@ Encoding functions
|
|||
>>> Ox.encodeHTML('äbçdê')
|
||||
'äbçdê'
|
||||
*/
|
||||
return $.map(str, function(v) {
|
||||
return Ox.map(str, function(v) {
|
||||
var code = v.charCodeAt(0);
|
||||
return code < 128 ? (v in Ox.HTML_ENTITIES ? Ox.HTML_ENTITIES[v] : v) :
|
||||
'&#x' + Ox.pad(code.toString(16).toUpperCase(), 4) + ';';
|
||||
|
|
@ -1150,8 +1250,9 @@ Encoding functions
|
|||
'äbçdê'
|
||||
*/
|
||||
// relies on dom, but shorter than using this:
|
||||
// http://www.w3.org/TR/html5/named-character-references.html
|
||||
return $('<div/>').html(str)[0].childNodes[0].nodeValue;
|
||||
// http://www.w3.org/TR/html5/named-character-references.html
|
||||
return Ox.element('div').html(str)[0].childNodes[0].nodeValue;
|
||||
//return $('<div/>').html(str)[0].childNodes[0].nodeValue;
|
||||
};
|
||||
|
||||
Ox.encodePNG = function(img, str) {
|
||||
|
|
@ -1230,7 +1331,7 @@ Encoding functions
|
|||
>>> Ox.encodeUTF8('¥€$')
|
||||
'\u00C2\u00A5\u00E2\u0082\u00AC\u0024'
|
||||
*/
|
||||
return $.map(Array.prototype.slice.call(str), function(chr) {
|
||||
return Ox.map(Array.prototype.slice.call(str), function(chr) {
|
||||
var code = chr.charCodeAt(0),
|
||||
str = '';
|
||||
if (code < 128) {
|
||||
|
|
@ -1254,7 +1355,7 @@ Encoding functions
|
|||
>>> Ox.decodeUTF8('\u00C2\u00A5\u00E2\u0082\u00AC\u0024')
|
||||
'¥€$'
|
||||
*/
|
||||
var bytes = $.map(str, function(v) {
|
||||
var bytes = Ox.map(str, function(v) {
|
||||
return v.charCodeAt(0);
|
||||
}),
|
||||
i = 0,
|
||||
|
|
@ -1303,6 +1404,10 @@ Ox.formatColor = function() {
|
|||
};
|
||||
|
||||
Ox.formatCurrency = function(num, str, dec) {
|
||||
/*
|
||||
>>> Ox.formatCurrency(1000, '$', 2)
|
||||
'$1,000.00'
|
||||
*/
|
||||
return str + Ox.formatNumber(num, dec);
|
||||
};
|
||||
|
||||
|
|
@ -1364,7 +1469,7 @@ Ox.formatDate = function() {
|
|||
"12:03:04 AM"
|
||||
>>> Ox.formatDate(_date, "%S") // Zero-padded second
|
||||
"04"
|
||||
>>> Ox.formatDate(_date, "%s") // Number of seconds since the Epoch
|
||||
>/> Ox.formatDate(_date, "%s") // Number of seconds since the Epoch
|
||||
"1104620584"
|
||||
>>> Ox.formatDate(_date, "%T") // Time
|
||||
"00:03:04"
|
||||
|
|
@ -1390,11 +1495,11 @@ Ox.formatDate = function() {
|
|||
"2005"
|
||||
>>> Ox.formatDate(_date, "%y") // Abbreviated year
|
||||
"05"
|
||||
>>> Ox.formatDate(_date, "%Z") // Time zone name
|
||||
>/> Ox.formatDate(_date, "%Z") // Time zone name
|
||||
"CET"
|
||||
>>> Ox.formatDate(_date, "%z") // Time zone offset
|
||||
>/> Ox.formatDate(_date, "%z") // Time zone offset
|
||||
"+0100"
|
||||
>>> Ox.formatDate(_date, "%+") // Formatted date and time
|
||||
>/> Ox.formatDate(_date, "%+") // Formatted date and time
|
||||
"Sun Jan 2 00:03:04 CET 2005"
|
||||
>>> Ox.formatDate(_date, "%%")
|
||||
"%"
|
||||
|
|
@ -1407,12 +1512,7 @@ Ox.formatDate = function() {
|
|||
>>> Ox.formatDate(new Date("01/03/2000"), "%W")
|
||||
"01"
|
||||
*/
|
||||
var ampm = ["AM", "PM"],
|
||||
days = ["Monday", "Tuesday", "Wednesday", "Thursday",
|
||||
"Friday", "Saturday", "Sunday"],
|
||||
months = ["January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December"],
|
||||
format = [
|
||||
var format = [
|
||||
["%", function() {return "%{%}";}],
|
||||
["c", function() {return "%x %X";}],
|
||||
["X", function() {return "%r";}],
|
||||
|
|
@ -1425,10 +1525,10 @@ Ox.formatDate = function() {
|
|||
["T", function() {return "%H:%M:%S";}],
|
||||
["v", function() {return "%e-%b-%Y";}],
|
||||
["\\+", function() {return "%a %b %e %H:%M:%S %Z %Y";}],
|
||||
["A", function(d) {return days[(d.getDay() + 6) % 7];}],
|
||||
["a", function(d) {return days[(d.getDay() + 6) % 7].toString().substr(0, 3);}],
|
||||
["B", function(d) {return months[d.getMonth()];}],
|
||||
["b", function(d) {return months[d.getMonth()].toString().substr(0, 3);}],
|
||||
["A", function(d) {return Ox.WEEKDAYS[(d.getDay() + 6) % 7];}],
|
||||
["a", function(d) {return Ox.WEEKDAYS[(d.getDay() + 6) % 7].toString().substr(0, 3);}],
|
||||
["B", function(d) {return Ox.MONTHS[d.getMonth()];}],
|
||||
["b", function(d) {return Ox.MONTHS[d.getMonth()].toString().substr(0, 3);}],
|
||||
["C", function(d) {return d.getFullYear().toString().substr(0, 2);}],
|
||||
["d", function(d) {return Ox.pad(d.getDate(), 2);}],
|
||||
["e", function(d) {return Ox.pad(d.getDate(), 2, " ");}],
|
||||
|
|
@ -1441,7 +1541,7 @@ Ox.formatDate = function() {
|
|||
["l", function(d) {return Ox.pad(((d.getHours() + 11) % 12 + 1), 2, " ");}],
|
||||
["M", function(d) {return Ox.pad(d.getMinutes(), 2);}],
|
||||
["m", function(d) {return Ox.pad((d.getMonth() + 1), 2);}],
|
||||
["p", function(d) {return ampm[Math.floor(d.getHours() / 12)];}],
|
||||
["p", function(d) {return Ox.AMPM[Math.floor(d.getHours() / 12)];}],
|
||||
["Q", function(d) {return Math.floor(d.getMonth() / 4) + 1;}],
|
||||
["S", function(d) {return Ox.pad(d.getSeconds(), 2);}],
|
||||
["s", function(d) {return Math.floor(d.getTime() / 1000);}],
|
||||
|
|
@ -1459,8 +1559,8 @@ Ox.formatDate = function() {
|
|||
["t", function() {return "\t";}],
|
||||
["\\{%\\}", function() {return "%";}]
|
||||
];
|
||||
$.each(format, function(i, v) {
|
||||
format[i][0] = new RegExp("%" + v[0] + "", "g");
|
||||
format.forEach(function(v, i) {
|
||||
v[0] = new RegExp('%' + v[0] + '', 'g');
|
||||
});
|
||||
return function(date, str) {
|
||||
str = str || date;
|
||||
|
|
@ -1477,7 +1577,7 @@ Ox.formatDate = function() {
|
|||
date = new Date(date);
|
||||
}
|
||||
if (Ox.isDate(date) && date.toString() != 'Invalid Date') {
|
||||
$.each(format, function(i, v) {
|
||||
Ox.forEach(format, function(v) {
|
||||
str = str.replace(v[0], v[1](date));
|
||||
});
|
||||
} else {
|
||||
|
|
@ -1526,7 +1626,7 @@ Ox.formatDuration = function(sec, dec, format) {
|
|||
str.medium.pop();
|
||||
str.long.pop();
|
||||
}
|
||||
return $.map(val, function(v, i) {
|
||||
return Ox.map(val, function(v, i) {
|
||||
return format == "short" ? Ox.pad(v, pad[i]) :
|
||||
v + (format == "long" ? " " : "") + str[format][i] +
|
||||
(format == "long" && v != 1 ? "s" : "");
|
||||
|
|
@ -1613,27 +1713,141 @@ Geo functions
|
|||
================================================================================
|
||||
*/
|
||||
|
||||
Ox.getArea = function(point0, point1) {
|
||||
|
||||
Ox.Line = function(point0, point1) {
|
||||
|
||||
var self = {
|
||||
points: [point0, point1]
|
||||
},
|
||||
that = this;
|
||||
|
||||
function rad() {
|
||||
return self.points.map(function(point) {
|
||||
return {
|
||||
lat: Ox.rad(point.lat()),
|
||||
lng: Ox.rad(point.lng())
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
that.getArea = function() {
|
||||
|
||||
};
|
||||
|
||||
that.getBearing = function() {
|
||||
var points = rad(),
|
||||
x = Math.cos(point[0].lat) * Math.sin(point[1].lat) -
|
||||
Math.sin(point[0].lat) * Math.cos(point[1].lat) *
|
||||
Math.cos(point[1].lng - point[0].lng),
|
||||
y = Math.sin(point[1].lng - point[0].lng) *
|
||||
Math.cos(point[1].lat);
|
||||
return (Ox.deg(math.atan2(y, x)) + 360) % 360;
|
||||
};
|
||||
|
||||
that.getDistance = function() {
|
||||
var points = rad();
|
||||
return Math.acos(
|
||||
Math.sin(point[0].lat) * Math.sin(point[1].lat) +
|
||||
Math.cos(point[0].lat) * Math.cos(point[1].lat) *
|
||||
Math.cos(point[1].lng - point[0].lng)
|
||||
) * Ox.EARTH_RADIUS;
|
||||
};
|
||||
|
||||
that.getMidpoint = function() {
|
||||
var points = rad(),
|
||||
x = Math.cos(point[1].lat) *
|
||||
Math.cos(point[1].lng - point[0].lng),
|
||||
y = Math.cos(point[1].lat) *
|
||||
Math.sin(point[1].lng - point[0].lng),
|
||||
d = Math.sqrt(
|
||||
Math.pow(Math.cos(point[0].lat) + x, 2) + Math.pow(y, 2)
|
||||
),
|
||||
lat = Ox.deg(
|
||||
Math.atan2(Math.sin(points[0].lat) + Math.sin(points[1].lat), d)
|
||||
),
|
||||
lng = Ox.deg(
|
||||
points[0].lng + Math.atan2(y, math.cos(points[0].lat) + x)
|
||||
);
|
||||
return new Point(lat, lng);
|
||||
};
|
||||
|
||||
that.points = function() {
|
||||
|
||||
};
|
||||
|
||||
return that;
|
||||
|
||||
};
|
||||
|
||||
Ox.getCenter = function(point0, point1) {
|
||||
|
||||
Ox.Point = function(lat, lng) {
|
||||
|
||||
var self = {lat: lat, lng: lng},
|
||||
that = this;
|
||||
|
||||
that.lat = function() {
|
||||
|
||||
};
|
||||
|
||||
that.latlng = function() {
|
||||
|
||||
};
|
||||
|
||||
that.lng = function() {
|
||||
|
||||
};
|
||||
|
||||
that.getMetersPerDegree = function() {
|
||||
return Math.cos(self.lat * Math.PI / 180) *
|
||||
Ox.EARTH_CIRCUMFERENCE / 360;
|
||||
}
|
||||
|
||||
that.getXY = function() {
|
||||
return [
|
||||
getXY(Ox.rad(self.lng)),
|
||||
getXY(Ox.asinh(Math.tan(Ox.rad(-self.lat))))
|
||||
];
|
||||
};
|
||||
|
||||
return that;
|
||||
|
||||
};
|
||||
|
||||
Ox.getDistance = function(point0, point1) {
|
||||
point0 = point0.map(function(deg) {
|
||||
return Ox.rad(deg);
|
||||
});
|
||||
point1 = point1.map(function(deg) {
|
||||
return Ox.rad(deg);
|
||||
});
|
||||
}
|
||||
Ox.Rectangle = function(point0, point1) {
|
||||
|
||||
var self = {
|
||||
points: [
|
||||
new Point(
|
||||
Math.min(point0.lat(), point1.lat()),
|
||||
point0.lng()
|
||||
),
|
||||
new Point(
|
||||
Math.max(point0.lat(), point1.lat()),
|
||||
point1.lng()
|
||||
)
|
||||
]
|
||||
},
|
||||
that = this;
|
||||
|
||||
that.contains = function(rectangle) {
|
||||
|
||||
}
|
||||
|
||||
that.crossesDateline = function() {
|
||||
return self.points[0].lng > self.points[1].lng;
|
||||
}
|
||||
|
||||
that.getCenter = function() {
|
||||
return new Ox.Line(self.points[0], self.points[1]).getMidpoint();
|
||||
};
|
||||
|
||||
that.intersects = function(rectangle) {
|
||||
|
||||
};
|
||||
|
||||
return that;
|
||||
|
||||
Ox.getMetersPerDegree = function(point) {
|
||||
return Math.cos(point[0] * Math.PI / 180) * Ox.EARTH_CIRCUMFERENCE / 360;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
================================================================================
|
||||
HTML functions
|
||||
|
|
@ -1718,7 +1932,9 @@ Ox.parseHTML = (function() {
|
|||
});
|
||||
html = html.replace(/\n/g, '<br/>\n')
|
||||
// close extra opening (and remove extra closing) tags
|
||||
return $('<div>').html(html).html();
|
||||
// return $('<div>').html(html).html();
|
||||
// fixme: this converts '"' to '"'
|
||||
return Ox.element('div').html(html).html();
|
||||
}
|
||||
|
||||
}());
|
||||
|
|
@ -2035,7 +2251,7 @@ Ox.toTitleCase = function(str) {
|
|||
>>> Ox.toTitleCase("Apple releases iPhone, IBM stock plummets")
|
||||
"Apple Releases iPhone, IBM Stock Plummets"
|
||||
*/
|
||||
return $.map(str.split(' '), function(v) {
|
||||
return Ox.map(str.split(' '), function(v) {
|
||||
var sub = v.substr(1),
|
||||
low = sub.toLowerCase();
|
||||
if (sub == low) {
|
||||
|
|
@ -2090,7 +2306,7 @@ Ox.truncate = function(str, len, pad, pos) {
|
|||
Ox.words = function(str) {
|
||||
/*
|
||||
>>> Ox.words('He\'s referring to the "ill-conceived" AOL/TimeWarner merger--didn\'t you know?')
|
||||
"he's,referring,to,the,ill-conceived,aol,timewarner,merger,didn't,you,know"
|
||||
['he\'s', 'referring', 'to' , 'the' , 'ill-conceived' , 'aol', 'timewarner' , 'merger' , 'didn\'t', 'you', 'know']
|
||||
*/
|
||||
var arr = str.toLowerCase().split(/\b/),
|
||||
chr = "-'",
|
||||
|
|
@ -2141,7 +2357,7 @@ Ox.wordwrap = function(str, len, sep, bal, spa) {
|
|||
if (lines.length > 1) {
|
||||
// test shorter line, unless
|
||||
// that means cutting a word
|
||||
var max = Ox.max($.map(words, function(word) {
|
||||
var max = Ox.max(Ox.map(words, function(word) {
|
||||
return word.length;
|
||||
}));
|
||||
while (len > max) {
|
||||
|
|
@ -2154,7 +2370,7 @@ Ox.wordwrap = function(str, len, sep, bal, spa) {
|
|||
}
|
||||
}
|
||||
lines = [""];
|
||||
$.each(words, function(i, word) {
|
||||
Ox.forEach(words, function(word) {
|
||||
if ((lines[lines.length - 1] + word + " ").length <= len + 1) {
|
||||
// word fits in current line
|
||||
lines[lines.length - 1] += word + " ";
|
||||
|
|
@ -2174,7 +2390,7 @@ Ox.wordwrap = function(str, len, sep, bal, spa) {
|
|||
}
|
||||
});
|
||||
if (!spa) {
|
||||
lines = $.map(lines, function(line) {
|
||||
lines = Ox.map(lines, function(line) {
|
||||
return Ox.trim(line);
|
||||
});
|
||||
}
|
||||
|
|
@ -2187,6 +2403,14 @@ Type functions
|
|||
================================================================================
|
||||
*/
|
||||
|
||||
Ox.isArguments = function(val) {
|
||||
/*
|
||||
>>> Ox.isArguments((function() { return arguments; }()))
|
||||
true
|
||||
*/
|
||||
return !!(val && val.toString() == '[object Arguments]');
|
||||
}
|
||||
|
||||
Ox.isArray = function(val) { // is in jQuery
|
||||
/*
|
||||
>>> Ox.isArray([])
|
||||
|
|
@ -2212,8 +2436,12 @@ Ox.isDate = function(val) {
|
|||
};
|
||||
|
||||
Ox.isElement = function(val) {
|
||||
/*
|
||||
>>> Ox.isElement(document.createElement())
|
||||
true
|
||||
*/
|
||||
return !!(val && val.nodeType == 1);
|
||||
}
|
||||
};
|
||||
|
||||
Ox.isFunction = function(val) { // is in jQuery
|
||||
/*
|
||||
|
|
@ -2225,6 +2453,18 @@ Ox.isFunction = function(val) { // is in jQuery
|
|||
return typeof val == 'function' && !Ox.isRegExp(val);
|
||||
};
|
||||
|
||||
Ox.isInfinity = function(val) {
|
||||
/*
|
||||
>>> Ox.isInfinity(Infinity)
|
||||
true
|
||||
>>> Ox.isInfinity(-Infinity)
|
||||
true
|
||||
>>> Ox.isInfinity(NaN)
|
||||
false
|
||||
*/
|
||||
return typeof val == 'number' && !isFinite(val) && !Ox.isNaN(val);
|
||||
};
|
||||
|
||||
Ox.isNaN = function(val) {
|
||||
/*
|
||||
>>> Ox.isNaN(NaN)
|
||||
|
|
@ -2247,6 +2487,8 @@ Ox.isNumber = function(val) {
|
|||
true
|
||||
>>> Ox.isNumber(Infinity)
|
||||
false
|
||||
>>> Ox.isNumber(-Infinity)
|
||||
false
|
||||
>>> Ox.isNumber(NaN)
|
||||
false
|
||||
*/
|
||||
|
|
@ -2264,8 +2506,8 @@ Ox.isObject = function(val) {
|
|||
>>> Ox.isObject(null)
|
||||
false
|
||||
*/
|
||||
return typeof val == 'object' && !$.isArray(val) &&
|
||||
!Ox.isDate(val) && !Ox.isNull(val);
|
||||
return typeof val == 'object' && !Ox.isArguments(val) &&
|
||||
!Ox.isArray(val) && !Ox.isDate(val) && !Ox.isNull(val);
|
||||
};
|
||||
|
||||
Ox.isRegExp = function(val) {
|
||||
|
|
@ -2291,3 +2533,44 @@ Ox.isUndefined = function(val) {
|
|||
*/
|
||||
return typeof val == 'undefined';
|
||||
};
|
||||
|
||||
Ox.typeOf = function(val) {
|
||||
/*
|
||||
>>> (function() { return Ox.typeOf(arguments); }())
|
||||
'arguments'
|
||||
>>> Ox.typeOf([])
|
||||
'array'
|
||||
>>> Ox.typeOf(false)
|
||||
'boolean'
|
||||
>>> Ox.typeOf(new Date())
|
||||
'date'
|
||||
>>> Ox.typeOf(document.createElement())
|
||||
'element'
|
||||
>>> Ox.typeOf(function() {})
|
||||
'function'
|
||||
>>> Ox.typeOf(Infinity)
|
||||
'infinity'
|
||||
>>> Ox.typeOf(NaN)
|
||||
'nan'
|
||||
>>> Ox.typeOf(null)
|
||||
'null'
|
||||
>>> Ox.typeOf(0)
|
||||
'number'
|
||||
>>> Ox.typeOf({})
|
||||
'object'
|
||||
>>> Ox.typeOf(/ /)
|
||||
'regexp'
|
||||
>>> Ox.typeOf('')
|
||||
'string'
|
||||
>>> Ox.typeOf()
|
||||
'undefined'
|
||||
*/
|
||||
var ret;
|
||||
Ox.forEach(Ox.TYPES, function(type) {
|
||||
if (Ox['is' + type](val)) {
|
||||
ret = type.toLowerCase();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue