mirror of
https://github.com/YunoHost-Apps/jappix_ynh.git
synced 2024-09-03 19:26:19 +02:00
402 lines
No EOL
9.7 KiB
JavaScript
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; |