exports.safeAngularApply = function (scope, callback, args) { if (!scope.$$phase && (scope.$rootScope ? !scope.$rootScope.$$phase : true)) { if (typeof callback !== "function") scope.$apply(); else if (args instanceof Array) callback.apply(scope, Array.prototype.slice.call(args)) else callback(); } else { setTimeout(function () { exports.safeAngularApply(scope, callback, args); }, 250); } }
exports.safeParseJson = function (str) { try { var p = JSON.parse(str); return p; } catch (e) { return str; } }
exports.getElemById = function (collection, by, id) { for (var i in collection) { if (collection[i][by] == id) return collection[i]; } return null; }
exports.checkNested = function (obj) { var args = Array.prototype.slice.call(arguments, 1);
for (var i = 0; i < args.length; i++) {
if (!obj || !obj.hasOwnProperty(args[i])) {
return false;
}
obj = obj[args[i]];
}
return true;
}
exports.detectIE = function () { var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return null;
}
exports.addToQuerystring = function (query, paramName, paramValue) { if (!query) query = ""; var char = (query.indexOf("?") > -1) ? "&" : "?"; return query + char + paramName + "=" + paramValue; }
exports.removeFromQuerystring = function (url, parameter) { //prefer to use l.search if you have a location/link object var urlparts = url.split('?'); if (urlparts.length >= 2) {
var prefix = encodeURIComponent(parameter) + '=';
var pars = urlparts[1].split(/[&;]/g);
//reverse iteration as may be destructive
for (var i = pars.length; i-- > 0;) {
//idiom for string.startsWith
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
pars.splice(i, 1);
}
}
url = urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
return url;
} else {
return url;
}
}
exports.fromObjectToQuerystring = function (obj, prefix) { var str = []; for (var p in obj) { if (obj.hasOwnProperty(p)) { var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p]; str.push(typeof v == "object" ? serialize(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v)); } } return str.join("&"); }
exports.extractDomainFromURL = function (url) { var a = document.createElement('a'); a.href = url; return a.hostname; }
exports.replaceAll = function (str, find, replace) { var escapeRegExp = function (str) { return str.replace(/[.*+?^${}()|[]\]/g, "\$&"); // $& means the whole matched string } return str.replace(new RegExp(escapeRegExp(find), 'g'), replace); }
exports.storage = { get: function (key) { var val = null; try { val = localStorage.getItem(key); return JSON.parse(val); } catch (e) { return val; } }, set: function (key, value) { var final = ''; if (typeof value === 'object') final = JSON.stringify(value); else final = value; try { localStorage.setItem(key, final); } catch (e) { } }, remove: function (key) { try { localStorage.removeItem(key); } catch (e) { } } }
exports.isParamExist = function (field, url) { url = url ? url : window.location.href; if (url.indexOf('?' + field + '=') != -1) return true; else if (url.indexOf('&' + field + '=') != -1) return true; return false };
exports.getReferrerByUrl = function (url) { var protocol = ''; if (url.indexOf('http:') == 0) protocol = 'http:'; else if (url.indexOf('https:') == 0) protocol = 'https:'; else protocol = window.location.protocol; url = url.replace(protocol, '').replace('//', ''); var indexOfSlash = url.indexOf('/'); if (indexOfSlash > -1) url = url.substring(0, indexOfSlash); return protocol + '//' + url; };
// https://davidwalsh.name/nested-objects exports.Objectifier = (function () {
// Utility method to get and set objects that may or may not exist
var objectifier = function (splits, create, context) {
var result = context || window;
for (var i = 0, s; result && (s = splits[i]); i++) {
result = (s in result ? result[s] : (create ? result[s] = {} : undefined));
}
return result;
};
return {
// Creates an object if it doesn't already exist
set: function (name, value, context) {
var splits = name.split('.'), s = splits.pop(), result = objectifier(splits, true, context);
return result && s ? (result[s] = value) : undefined;
},
get: function (name, create, context) {
return objectifier(name.split('.'), create, context);
},
exists: function (name, context) {
return this.get(name, false, context) !== undefined;
}
};
})();
// https://jsfiddle.net/Guffa/DDn6W/ exports.randomPassword = function (length) { if (!length) length = 6; var chars = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+<>ABCDEFGHIJKLMNOP1234567890"; var pass = ""; for (var x = 0; x < length; x++) { var i = Math.floor(Math.random() * chars.length); pass += chars.charAt(i); } return pass; }