143 lines
2.9 KiB
JavaScript
143 lines
2.9 KiB
JavaScript
/**
|
|
* Some general javascript code for use with jQuery.
|
|
*
|
|
* @copyright 2014-2015 Horde LLC
|
|
* @license LGPL-2.1 (http://www.horde.org/licenses/lgpl21)
|
|
*/
|
|
|
|
/**
|
|
*/
|
|
Date.prototype.getRealWeek = function()
|
|
{
|
|
var monday = this;
|
|
if (monday.getDay() < 1) {
|
|
monday = monday.clone().next().monday();
|
|
}
|
|
return monday.getWeek();
|
|
};
|
|
|
|
/**
|
|
* Moves a date to the end of the corresponding week.
|
|
*
|
|
* @return Date The same Date object, now pointing to the end of the week.
|
|
*/
|
|
Date.prototype.moveToEndOfWeek = function(weekStart)
|
|
{
|
|
var weekEndDay = weekStart + 6;
|
|
if (weekEndDay > 6) {
|
|
weekEndDay -= 7;
|
|
}
|
|
if (this.getDay() != weekEndDay) {
|
|
this.moveToDayOfWeek(weekEndDay, 1);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Moves a date to the begin of the corresponding week.
|
|
*
|
|
* @return Date The same Date object, now pointing to the begin of the
|
|
* week.
|
|
*/
|
|
Date.prototype.moveToBeginOfWeek = function(weekStart)
|
|
{
|
|
if (this.getDay() != weekStart) {
|
|
this.moveToDayOfWeek(weekStart, -1);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Format date and time to be passed around as a short url parameter,
|
|
* cache id, etc.
|
|
*
|
|
* @return string Date and time.
|
|
*/
|
|
Date.prototype.dateString = function()
|
|
{
|
|
return this.toString('yyyyMMdd');
|
|
};
|
|
|
|
/**
|
|
*/
|
|
Number.prototype.toPaddedString = function(len,pad)
|
|
{
|
|
len=(len) ? Number(len) : 2;
|
|
if (isNaN(len)) {
|
|
return null;
|
|
}
|
|
var dflt = (isNaN(this.toString())) ? " " : "0",
|
|
str = this.toString();
|
|
pad = (pad) ? pad.toString().substr(0,1) : dflt;
|
|
if (dflt=="0") {
|
|
while (str.length < len) {
|
|
str=pad+str;
|
|
}
|
|
} else {
|
|
while (str.length < len) {
|
|
str += pad;
|
|
}
|
|
}
|
|
return str;
|
|
};
|
|
|
|
String.prototype.toPaddedString = Number.prototype.toPaddedString;
|
|
|
|
/**
|
|
*/
|
|
Array.prototype.numericSort = function()
|
|
{
|
|
return $.map(this, function(n) {
|
|
return parseInt(n, 10);
|
|
}).sort(function(a, b) {
|
|
return (a > b) ? 1 : ((a < b) ? -1 : 0);
|
|
});
|
|
};
|
|
|
|
/**
|
|
*/
|
|
String.prototype.toQueryParams = function()
|
|
{
|
|
var params = {};
|
|
|
|
$.map($.trim(this.substring(this.indexOf('?') + 1)).split('#')[0].split('&'), function(i) {
|
|
var pair = i.split('=');
|
|
HordeJquery.addToObject(
|
|
params,
|
|
decodeURIComponent(pair[0]),
|
|
pair[1] ? decodeURIComponent(pair[1]) : undefined
|
|
);
|
|
});
|
|
|
|
return params;
|
|
};
|
|
|
|
/**
|
|
*/
|
|
HordeJquery = {
|
|
|
|
formToObject: function(form)
|
|
{
|
|
var ob = {};
|
|
|
|
$.map(form.serializeArray(), function(v) {
|
|
HordeJquery.addToObject(ob, v.name, v.value);
|
|
});
|
|
|
|
return ob;
|
|
},
|
|
|
|
addToObject: function(ob, k, v)
|
|
{
|
|
if (ob[k]) {
|
|
if (typeof ob[k] == "string") {
|
|
ob[k] = [ ob[k] ];
|
|
}
|
|
ob[k].push(v);
|
|
} else {
|
|
ob[k] = v;
|
|
}
|
|
}
|
|
|
|
};
|