2014-02-18 20:00:00 +01:00
|
|
|
/**
|
|
|
|
* Icinga utility functions
|
|
|
|
*/
|
2014-03-26 10:25:01 +01:00
|
|
|
(function(Icinga, $) {
|
2014-02-18 20:00:00 +01:00
|
|
|
|
2014-03-04 14:08:29 +01:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
Icinga.Utils = function (icinga) {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Utility functions may need access to their Icinga instance
|
|
|
|
*/
|
|
|
|
this.icinga = icinga;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* We will use this to create an URL helper only once
|
|
|
|
*/
|
|
|
|
this.urlHelper = null;
|
|
|
|
};
|
|
|
|
|
|
|
|
Icinga.Utils.prototype = {
|
|
|
|
|
|
|
|
timeWithMs: function (now) {
|
|
|
|
|
|
|
|
if (typeof now === 'undefined') {
|
|
|
|
now = new Date();
|
|
|
|
}
|
|
|
|
|
|
|
|
var ms = now.getMilliseconds() + '';
|
|
|
|
while (ms.length < 3) {
|
|
|
|
ms = '0' + ms;
|
|
|
|
}
|
|
|
|
|
|
|
|
return now.toLocaleTimeString() + '.' + ms;
|
|
|
|
},
|
|
|
|
|
|
|
|
timeShort: function (now) {
|
|
|
|
|
|
|
|
if (typeof now === 'undefined') {
|
|
|
|
now = new Date();
|
|
|
|
}
|
|
|
|
|
|
|
|
return now.toLocaleTimeString().replace(/:\d{2}$/, '');
|
|
|
|
},
|
|
|
|
|
|
|
|
formatHHiiss: function (date) {
|
|
|
|
var hours = date.getHours();
|
|
|
|
var minutes = date.getMinutes();
|
|
|
|
var seconds = date.getSeconds();
|
|
|
|
if (hours < 10) hours = '0' + hours;
|
|
|
|
if (minutes < 10) minutes = '0' + minutes;
|
|
|
|
if (seconds < 10) seconds = '0' + seconds;
|
|
|
|
return hours + ':' + minutes + ':' + seconds;
|
|
|
|
},
|
|
|
|
|
2014-03-25 13:11:39 +01:00
|
|
|
getUrlHelper: function () {
|
|
|
|
if (this.urlHelper === null) {
|
|
|
|
this.urlHelper = document.createElement('a');
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.urlHelper;
|
|
|
|
},
|
|
|
|
|
2014-03-04 14:08:29 +01:00
|
|
|
/**
|
2014-03-06 13:08:11 +01:00
|
|
|
* Parse a given Url and return an object
|
2014-03-04 14:08:29 +01:00
|
|
|
*/
|
|
|
|
parseUrl: function (url) {
|
|
|
|
|
2014-03-25 13:11:39 +01:00
|
|
|
var a = this.getUrlHelper();
|
2014-03-04 14:08:29 +01:00
|
|
|
a.href = url;
|
|
|
|
|
|
|
|
var result = {
|
|
|
|
source : url,
|
|
|
|
protocol: a.protocol.replace(':', ''),
|
|
|
|
host : a.hostname,
|
|
|
|
port : a.port,
|
|
|
|
query : a.search,
|
|
|
|
file : (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
|
|
|
|
hash : a.hash.replace('#',''),
|
|
|
|
path : a.pathname.replace(/^([^\/])/,'/$1'),
|
|
|
|
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
|
|
|
|
segments: a.pathname.replace(/^\//,'').split('/'),
|
|
|
|
params : this.parseParams(a),
|
|
|
|
};
|
|
|
|
a = null;
|
|
|
|
|
|
|
|
return result;
|
|
|
|
},
|
|
|
|
|
2014-03-25 13:11:39 +01:00
|
|
|
// Local URLs only
|
|
|
|
addUrlParams: function (url, params) {
|
2014-03-26 08:48:22 +01:00
|
|
|
var parts = this.parseUrl(url),
|
|
|
|
result = parts.path,
|
|
|
|
newparams = parts.params;
|
|
|
|
|
|
|
|
$.each(params, function (key, value) {
|
2014-03-25 13:11:39 +01:00
|
|
|
// We overwrite existing params
|
2014-03-26 08:48:22 +01:00
|
|
|
newparams[key] = value;
|
2014-03-25 13:11:39 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
if (Object.keys(newparams).length > 0) {
|
|
|
|
var queryString = '?';
|
|
|
|
$.each(newparams, function (key, value) {
|
|
|
|
if (queryString !== '?') {
|
|
|
|
queryString += '&';
|
|
|
|
}
|
2014-03-31 18:24:29 +02:00
|
|
|
queryString += encodeURIComponent(key) + '=' + encodeURIComponent(value);
|
|
|
|
});
|
|
|
|
result += queryString;
|
|
|
|
}
|
|
|
|
if (parts.hash.length > 0) {
|
|
|
|
result += '#' + parts.hash;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Local URLs only
|
|
|
|
removeUrlParams: function (url, params) {
|
|
|
|
var parts = this.parseUrl(url),
|
|
|
|
result = parts.path,
|
|
|
|
newparams = parts.params;
|
|
|
|
|
|
|
|
$.each(params, function (idx, key) {
|
|
|
|
delete newparams[key];
|
|
|
|
});
|
|
|
|
|
|
|
|
if (Object.keys(newparams).length > 0) {
|
|
|
|
var queryString = '?';
|
|
|
|
$.each(newparams, function (key, value) {
|
|
|
|
if (queryString !== '?') {
|
|
|
|
queryString += '&';
|
|
|
|
}
|
2014-03-25 13:11:39 +01:00
|
|
|
queryString += encodeURIComponent(key) + '=' + encodeURIComponent(value);
|
|
|
|
});
|
|
|
|
result += queryString;
|
|
|
|
}
|
|
|
|
if (parts.hash.length > 0) {
|
|
|
|
result += '#' + parts.hash;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
},
|
|
|
|
|
2014-03-04 14:08:29 +01:00
|
|
|
/**
|
|
|
|
* Parse url params
|
|
|
|
*/
|
|
|
|
parseParams: function (a) {
|
|
|
|
var params = {},
|
|
|
|
segment = a.search.replace(/^\?/,'').split('&'),
|
|
|
|
len = segment.length,
|
|
|
|
i = 0,
|
|
|
|
s;
|
|
|
|
|
|
|
|
for (; i < len; i++) {
|
|
|
|
if (!segment[i]) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
s = segment[i].split('=');
|
|
|
|
params[s[0]] = decodeURIComponent(s[1]);
|
|
|
|
}
|
|
|
|
return params;
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cleanup
|
|
|
|
*/
|
|
|
|
destroy: function () {
|
|
|
|
this.urlHelper = null;
|
|
|
|
this.icinga = null;
|
|
|
|
}
|
|
|
|
};
|
2014-02-18 20:00:00 +01:00
|
|
|
|
2014-03-26 10:25:01 +01:00
|
|
|
}(Icinga, jQuery));
|