catjs
Version:
(Mobile) Web Automation Framework
293 lines (222 loc) • 8.78 kB
JavaScript
if (typeof(_cat) !== "undefined") {
_cat.utils.Utils = function () {
var _module = {
addEventListener: function (elem, event, fn) {
if (typeof($) !== "undefined") {
if (event === "load") {
$( document ).ready(fn);
} else {
$( elem ).on( event, fn);
}
} else {
if (!elem) {
return undefined;
}
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function () {
return(fn.call(elem, window.event));
});
}
}
},
/**
* check if the path argument exists in the current location
*
* @param path {*} a given path list of type Array or String
* @returns {boolean} whether one of the path exists
*/
pathMatch: function (path) {
var location = window.location.href,
type, n=0;
if (path) {
type = _cat.utils.Utils.getType(path);
if (type === "string") {
path = [path];
}
path.forEach(function (item) {
if (item) {
if (location.indexOf(path) !== -1) {
n++;
}
}
});
} else {
return true;
}
return (n > 0 ? true : false);
},
isEmpty: function (srcobj) {
var key,
n = 0,
result = false;
if (!srcobj) {
return true;
}
if (Object.keys) {
result = (Object.keys(srcobj).length === 0);
} else {
for (key in srcobj) {
if (srcobj.hasOwnProperty(key)) {
n++;
break;
}
}
result = (n === 0);
}
return result;
},
/**
* Setting the reference object with default values or undefined for unassigned properties
* e.g. { global: {obj: obj}, props: [{key: "test", default: 1}] }
*
*
* @param value {Object} props values
* global {Object} global references
* obj {Object} [optional] The object to be copied the property from
*
* props {Array} prop value
* key {String} The property key
* obj {Object} [optional] The object to be copied the property from
* default {Object} [optional] A default value
* require {Boolean} Warning about undefined value, default set to false
*
*/
prepareProps: function (value) {
var globalreference, refobj;
if (value) {
if ("global" in value && value.global) {
globalreference = value.global.obj;
}
if ("props" in value && value.props && _module.getType(value.props) === "array") {
value.props.forEach(function (prop) {
var defaultval;
if (!("require" in prop)) {
prop.require = false;
}
if (!("key" in prop)) {
throw new Error("[catjs utils] 'key' is a required property for method 'getProps' ");
}
defaultval = ("default" in prop ? prop.default : undefined);
refobj = ("obj" in prop ? prop.obj : globalreference);
refobj[prop.key] = (prop.key in refobj ? refobj[prop.key] : defaultval);
if (prop.require && (refobj[prop.key] === undefined || refobj[prop.key] === null)) {
throw new Error("[catjs utils prepareProps] property '" + prop.key + "' is required ");
}
});
}
}
},
/**
* @deprecated use _cat.core.request.generate instead
*
* @param url
* @returns {*|string}
*/
getCatjsServerURL: function (url) {
_cat.core.log.warn("[catjs core utils] getCatjsServerURL method is deprecated, use _cat.core.request.generate instead");
return undefined;
},
querystring: function (name, query) {
var re, r = [], m;
re = new RegExp('(?:\\?|&)' + name + '=(.*?)(?=&|$)', 'gi');
while ((m = re.exec(query || document.location.search)) != null) {
r[r.length] = m[1];
}
return (r && r[0] ? r[0] : undefined);
},
getType: function (obj) {
if (!obj) {
return undefined;
}
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
},
getMatchValue: function (pattern, text) {
var regexp = new RegExp(pattern),
results;
if (regexp) {
results = regexp.exec(text);
if (results &&
results.length > 1) {
return results[1];
}
}
return results;
},
/**
* Validates an object and availability of its properties
*
*/
validate: function (obj, key, val) {
if (obj) {
// if key is available
if (key !== undefined) {
if (key in obj) {
if (obj[key] !== undefined) {
if (val !== undefined) {
if (obj[key] !== val) {
return false;
}
}
return true;
}
}
return false;
} else {
return true;
}
}
return false;
}
};
(function () {
var types = ['Array', 'Function', 'Object', 'String', 'Number'],
typesLength = types.length;
function _getType(type) {
return function (o) {
return !!o && ( Object.prototype.toString.call(o) === '[object ' + type + ']' );
};
}
while (typesLength--) {
_module['is' + types[typesLength]] = _getType(types[typesLength]);
}
})();
return _module;
}();
} else {
var _cat = {
utils: {
Utils: {}
}
};
}
_cat.utils.Utils.generateGUID = function () {
//GUID generator
function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
function guid() {
return [S4(), S4(), "-", S4(), "-", S4(), "-", S4(), "-", S4(), S4(), S4()].join("");
}
return guid();
};
_cat.utils.Utils.extExists = function (value) {
var pos;
if (value) {
pos = value.lastIndexOf(".");
if (pos !== -1) {
if (value.lastIndexOf(".js") !== -1 || value.lastIndexOf(".css") !== -1) {
return true;
}
}
}
return false;
};
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
// nodejs support
module.exports.generateGUID = _cat.utils.Utils.generateGUID;
module.exports.extExists = _cat.utils.Utils.extExists;
}
}