icingaweb2/public/js/icinga/utils.js

173 lines
4.8 KiB
JavaScript
Raw Normal View History

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
/**
* 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) {
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
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 += '&';
}
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));