From 2ed49e2ac1bc9ed8a9d514d3ea9515e455768152 Mon Sep 17 00:00:00 2001 From: Michal Rezler Date: Mon, 28 Mar 2011 23:09:13 +0200 Subject: JS API is corrected to the original state --- lib/scripts/helpers.js | 146 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 lib/scripts/helpers.js (limited to 'lib/scripts/helpers.js') diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js new file mode 100644 index 000000000..babd652d7 --- /dev/null +++ b/lib/scripts/helpers.js @@ -0,0 +1,146 @@ +/** +* Differrent helper functions +* +* @author Ilya Lebedev +* @license LGPL +*/ +//----------------------------------------------------------------------------- +// Variable/property checks +//----------------------------------------------------------------------------- +/** +* Checks if property is undefined +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isUndefined (prop /* :Object */) /* :Boolean */ { + return (typeof prop == 'undefined'); +} +/** +* Checks if property is function +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isFunction (prop /* :Object */) /* :Boolean */ { + return (typeof prop == 'function'); +} +/** +* Checks if property is string +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isString (prop /* :Object */) /* :Boolean */ { + return (typeof prop == 'string'); +} +/** +* Checks if property is number +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isNumber (prop /* :Object */) /* :Boolean */ { + return (typeof prop == 'number'); +} +/** +* Checks if property is the calculable number +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isNumeric (prop /* :Object */) /* :Boolean */ { + return isNumber(prop)&&!isNaN(prop)&&isFinite(prop); +} +/** +* Checks if property is array +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isArray (prop /* :Object */) /* :Boolean */ { + return (prop instanceof Array); +} +/** +* Checks if property is regexp +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isRegExp (prop /* :Object */) /* :Boolean */ { + return (prop instanceof RegExp); +} +/** +* Checks if property is a boolean value +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isBoolean (prop /* :Object */) /* :Boolean */ { + return ('boolean' == typeof prop); +} +/** +* Checks if property is a scalar value (value that could be used as the hash key) +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isScalar (prop /* :Object */) /* :Boolean */ { + return isNumeric(prop)||isString(prop); +} +/** +* Checks if property is empty +* +* @param {Object} prop value to check +* @return {Boolean} true if matched +* @scope public +*/ +function isEmpty (prop /* :Object */) /* :Boolean */ { + if (isBoolean(prop)) return false; + if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true; + if (isString(prop) || isNumber(prop)) return !prop; + if (Boolean(prop)&&false != prop) { + for (var i in prop) if(prop.hasOwnProperty(i)) return false; + } + return true; +} + +/** +* Checks if property is derived from prototype, applies method if it is not exists +* +* @param string property name +* @return bool true if prototyped +* @access public +*/ +if ('undefined' == typeof Object.hasOwnProperty) { + Object.prototype.hasOwnProperty = function (prop) { + return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]); + }; +} + +/** +* Very simplistic Flash plugin check, probably works for Flash 8 and higher only +*/ +function hasFlash(version){ + var ver = 0; + try{ + if(navigator.plugins != null && navigator.plugins.length > 0){ + ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0]; + }else{ + var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + ver = axo.GetVariable("$version").split(' ')[1].split(',')[0]; + } + }catch(e){ } + + if(ver >= version) return true; + return false; +} \ No newline at end of file -- cgit v1.2.3