Merge pull request #678 from glowing-bear/date-change
Add date change markers
This commit is contained in:
commit
134ac86743
2 changed files with 81 additions and 1 deletions
|
@ -19,12 +19,85 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific
|
||||||
models.closeBuffer(bufferId);
|
models.closeBuffer(bufferId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// inject a fake buffer line for date change if needed
|
||||||
|
var injectDateChangeMessageIfNeeded = function(buffer, old_date, new_date) {
|
||||||
|
old_date.setHours(0, 0, 0, 0);
|
||||||
|
new_date.setHours(0, 0, 0, 0);
|
||||||
|
// Check if the date changed
|
||||||
|
if (old_date.valueOf() !== new_date.valueOf()) {
|
||||||
|
var old_date_plus_one = old_date;
|
||||||
|
old_date_plus_one.setDate(old_date.getDate() + 1);
|
||||||
|
// it's not always true that a date with time 00:00:00
|
||||||
|
// plus one day will be time 00:00:00
|
||||||
|
old_date_plus_one.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
|
var content = "\u001943"; // this colour corresponds to chat_day_change
|
||||||
|
// Add day of the week
|
||||||
|
content += new_date.toLocaleDateString(window.navigator.language,
|
||||||
|
{weekday: "long"});
|
||||||
|
// if you're testing different date formats,
|
||||||
|
// make sure to test different locales such as "en-US",
|
||||||
|
// "en-US-u-ca-persian" (which has different weekdays, year 0, and an ERA)
|
||||||
|
// "ja-JP-u-ca-persian-n-thai" (above, diff numbering, diff text)
|
||||||
|
var extra_date_format = {
|
||||||
|
day: "numeric",
|
||||||
|
month: "long"
|
||||||
|
};
|
||||||
|
if (new_date.getYear() !== old_date.getYear()) {
|
||||||
|
extra_date_format.year = "numeric";
|
||||||
|
}
|
||||||
|
content += " (";
|
||||||
|
content += new_date.toLocaleDateString(window.navigator.language,
|
||||||
|
extra_date_format);
|
||||||
|
// Result should be something like
|
||||||
|
// Friday (November 27)
|
||||||
|
// or if the year is different,
|
||||||
|
// Friday (November 27, 2015)
|
||||||
|
|
||||||
|
// Comparing dates in javascript is beyond tedious
|
||||||
|
if (old_date_plus_one.valueOf() !== new_date.valueOf()) {
|
||||||
|
var date_diff = Math.round((new_date - old_date)/(24*60*60*1000)) + 1;
|
||||||
|
if (date_diff < 0) {
|
||||||
|
date_diff = -1*(date_diff);
|
||||||
|
if (date_diff === 1) {
|
||||||
|
content += ", 1 day before";
|
||||||
|
} else {
|
||||||
|
content += ", " + date_diff + " days before";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
content += ", " + date_diff + " days later";
|
||||||
|
}
|
||||||
|
// Result: Friday (November 27, 5 days later)
|
||||||
|
}
|
||||||
|
content += ")";
|
||||||
|
|
||||||
|
var line = {
|
||||||
|
buffer: buffer,
|
||||||
|
date: new_date,
|
||||||
|
prefix: '\u001943\u2500',
|
||||||
|
tags_array: [],
|
||||||
|
displayed: true,
|
||||||
|
highlight: 0,
|
||||||
|
message: content
|
||||||
|
};
|
||||||
|
var new_message = new models.BufferLine(line);
|
||||||
|
buffer.addLine(new_message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var handleLine = function(line, manually) {
|
var handleLine = function(line, manually) {
|
||||||
var message = new models.BufferLine(line);
|
var message = new models.BufferLine(line);
|
||||||
var buffer = models.getBuffer(message.buffer);
|
var buffer = models.getBuffer(message.buffer);
|
||||||
buffer.requestedLines++;
|
buffer.requestedLines++;
|
||||||
// Only react to line if its displayed
|
// Only react to line if its displayed
|
||||||
if (message.displayed) {
|
if (message.displayed) {
|
||||||
|
// Check for date change
|
||||||
|
if (buffer.lines.length > 0) {
|
||||||
|
var old_date = new Date(buffer.lines[buffer.lines.length - 1].date),
|
||||||
|
new_date = new Date(message.date);
|
||||||
|
injectDateChangeMessageIfNeeded(buffer, old_date, new_date);
|
||||||
|
}
|
||||||
|
|
||||||
message = plugins.PluginManager.contentForMessage(message);
|
message = plugins.PluginManager.contentForMessage(message);
|
||||||
buffer.addLine(message);
|
buffer.addLine(message);
|
||||||
|
|
||||||
|
@ -187,6 +260,13 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific
|
||||||
lines.forEach(function(l) {
|
lines.forEach(function(l) {
|
||||||
handleLine(l, manually);
|
handleLine(l, manually);
|
||||||
});
|
});
|
||||||
|
if (message.objects[0].content.length > 0) {
|
||||||
|
var last_line =
|
||||||
|
message.objects[0].content[message.objects[0].content.length-1];
|
||||||
|
var last_message = new models.BufferLine(last_line);
|
||||||
|
var buffer = models.getBuffer(last_message.buffer);
|
||||||
|
injectDateChangeMessageIfNeeded(buffer, last_message.date, new Date());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -290,7 +290,7 @@
|
||||||
var ret = {};
|
var ret = {};
|
||||||
var optionCode = parseInt(m[1]);
|
var optionCode = parseInt(m[1]);
|
||||||
|
|
||||||
if (optionCode > 43) {
|
if (optionCode >= WeeChatProtocol._colorsOptionsNames.length) {
|
||||||
// should never happen
|
// should never happen
|
||||||
return {
|
return {
|
||||||
fgColor: null,
|
fgColor: null,
|
||||||
|
|
Loading…
Reference in a new issue