1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00
jappix_ynh/source/app/javascripts/date.js
2014-04-08 20:14:28 +02:00

402 lines
No EOL
9.7 KiB
JavaScript

/*
Jappix - An open social platform
These are the date related JS scripts for Jappix
-------------------------------------------------
License: dual-licensed under AGPL and MPLv2
Author: Valérian Saliou
*/
// Bundle
var DateUtils = (function () {
/**
* Alias of this
* @private
*/
var self = {};
/* Variables */
self.last_activity = 0;
self.presence_last_activity = 0;
/**
* Gets a stamp from a date
* @public
* @param {Date} date
* @return {number}
*/
self.extractStamp = function(date) {
try {
return Math.round(date.getTime() / 1000);
} catch(e) {
Console.error('DateUtils.extractStamp', e);
}
};
/**
* Gets the time from a date
* @public
* @param {Date} date
* @return {string}
*/
self.extractTime = function(date) {
try {
return date.toLocaleTimeString();
} catch(e) {
Console.error('DateUtils.extractTime', e);
}
};
/**
* Gets the actual date stamp
* @public
* @return {number}
*/
self.getTimeStamp = function() {
try {
return self.extractStamp(new Date());
} catch(e) {
Console.error('DateUtils.getTimeStamp', e);
}
};
/**
* Gets the last user activity in seconds
* @public
* @return {number}
*/
self.getLastActivity = function() {
try {
// Last activity not yet initialized?
if(self.last_activity === 0)
return 0;
return self.getTimeStamp() - self.last_activity;
} catch(e) {
Console.error('DateUtils.getLastActivity', e);
}
};
/**
* Gets the last user available presence in seconds
* @public
* @return {number}
*/
self.getPresenceLast = function() {
try {
// Last presence stamp not yet initialized?
if(self.presence_last_activity === 0)
return 0;
return self.getTimeStamp() - self.presence_last_activity;
} catch(e) {
Console.error('DateUtils.getPresenceLast', e);
}
};
/**
* Generates the time for XMPP
* @public
* @param {string} location
* @return {string}
*/
self.getXMPPTime = function(location) {
/* FROM : http://trac.jwchat.org/jsjac/browser/branches/jsjac_1.0/jsextras.js?rev=221 */
try {
// Initialize
var jInit = new Date();
var year, month, day, hours, minutes, seconds;
// Gets the UTC date
if(location == 'utc') {
year = jInit.getUTCFullYear();
month = jInit.getUTCMonth();
day = jInit.getUTCDate();
hours = jInit.getUTCHours();
minutes = jInit.getUTCMinutes();
seconds = jInit.getUTCSeconds();
}
// Gets the local date
else {
year = jInit.getFullYear();
month = jInit.getMonth();
day = jInit.getDate();
hours = jInit.getHours();
minutes = jInit.getMinutes();
seconds = jInit.getSeconds();
}
// Generates the date string
var jDate = year + '-';
jDate += Common.padZero(month + 1) + '-';
jDate += Common.padZero(day) + 'T';
jDate += Common.padZero(hours) + ':';
jDate += Common.padZero(minutes) + ':';
jDate += Common.padZero(seconds) + 'Z';
// Returns the date string
return jDate;
} catch(e) {
Console.error('DateUtils.getXMPPTime', e);
}
};
/**
* Generates then human time
* @public
* @return {string}
*/
self.getCompleteTime = function() {
try {
var init = new Date();
var time = Common.padZero(init.getHours()) + ':';
time += Common.padZero(init.getMinutes()) + ':';
time += Common.padZero(init.getSeconds());
return time;
} catch(e) {
Console.error('DateUtils.getCompleteTime', e);
}
};
/**
* Gets the TZO of a date
* @public
* @return {string}
*/
self.getTZO = function() {
try {
// Get the date
var date = new Date();
var offset = date.getTimezoneOffset();
// Default vars
var sign = '';
var hours = 0;
var minutes = 0;
// Process a neutral offset
if(offset < 0) {
offset = offset * -1;
sign = '+';
}
// Get the values
var n_date = new Date(offset * 60 * 1000);
hours = n_date.getHours() - 1;
minutes = n_date.getMinutes();
// Process the TZO
tzo = sign + Common.padZero(hours) + ':' + Common.padZero(minutes);
// Return the processed value
return tzo;
} catch(e) {
Console.error('DateUtils.getTZO', e);
}
};
/**
* Returns a date representing the difference of time between 2 timestamps
* @public
* @param {string} now_stamp
* @param {string} past_stamp
* @return {Date}
*/
self.difference = function(now_stamp, past_stamp) {
try {
return (new Date()).clearTime().addSeconds(
past_stamp > 0 ? now_stamp - past_stamp : 0
);
} catch(e) {
Console.error('DateUtils.difference', e);
}
};
/**
* Parses a XMPP date (yyyy-mm-dd, hh-mm-ss) into an human-readable one
* @public
* @param {string} to_parse
* @return {string}
*/
self.parse = function(to_parse) {
try {
var date = Date.jab2date(to_parse);
var parsed = date.toLocaleDateString() + ' (' + date.toLocaleTimeString() + ')';
return parsed;
} catch(e) {
Console.error('DateUtils.parse', e);
}
};
/**
* Parses a XMPP date (yyyy-mm-dd) into an human-readable one
* @public
* @param {string} to_parse
* @return {string}
*/
self.parseDay = function(to_parse) {
try {
var date = Date.jab2date(to_parse);
var parsed = date.toLocaleDateString();
return parsed;
} catch(e) {
Console.error('DateUtils.parseDay', e);
}
};
/**
* Parses a XMPP date (hh-mm-ss) into an human-readable one
* @public
* @param {string} to_parse
* @return {string}
*/
self.parseTime = function(to_parse) {
try {
var date = Date.jab2date(to_parse);
var parsed = date.toLocaleTimeString();
return parsed;
} catch(e) {
Console.error('DateUtils.parseTime', e);
}
};
/**
* Parses a XMPP date stamp into a relative one
* @public
* @param {string} to_parse
* @return {string}
*/
self.relative = function(to_parse) {
try {
// Get the current date
var current_date = Date.jab2date(self.getXMPPTime('utc'));
var current_day = current_date.getDate();
var current_stamp = current_date.getTime();
// Parse the given date
var old_date = Date.jab2date(to_parse);
var old_day = old_date.getDate();
var old_stamp = old_date.getTime();
var old_time = old_date.toLocaleTimeString();
// Get the day number between the two dates
var days = Math.round((current_stamp - old_stamp) / 86400000);
// Invalid date?
if(isNaN(old_stamp) || isNaN(days))
return self.getCompleteTime();
// Is it today?
if(current_day == old_day)
return old_time;
// It is yesterday?
if(days <= 1)
return Common._e("Yesterday") + ' - ' + old_time;
// Is it less than a week ago?
if(days <= 7)
return Common.printf(Common._e("%s days ago"), days) + ' - ' + old_time;
// Another longer period
return old_date.toLocaleDateString() + ' - ' + old_time;
} catch(e) {
Console.error('DateUtils.relative', e);
}
};
/**
* Reads a message delay
* @public
* @param {string} node
* @return {string}
*/
self.readMessageDelay = function(node) {
try {
// Initialize
var delay, d_delay;
// Read the delay
d_delay = jQuery(node).find('delay[xmlns="' + NS_URN_DELAY + '"]:first').attr('stamp');
// New delay (valid XEP)
if(d_delay)
delay = d_delay;
// Old delay (obsolete XEP!)
else {
// Try to read the old-school delay
var x_delay = jQuery(node).find('x[xmlns="' + NS_DELAY + '"]:first').attr('stamp');
if(x_delay)
delay = x_delay.replace(/^(\w{4})(\w{2})(\w{2})T(\w{2}):(\w{2}):(\w{2})Z?(\S+)?/, '$1-$2-$3T$4:$5:$6Z$7');
}
return delay;
} catch(e) {
Console.error('DateUtils.readMessageDelay', e);
}
};
/**
* Return class scope
*/
return self;
})();
var JappixDateUtils = DateUtils;