Date change: refactoring

paste-quickfix
Lorenz Hübschle-Schneider 10 years ago
parent b90a0f763d
commit da7a7f85e8
  1. 130
      js/handlers.js

@ -19,75 +19,69 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific
models.closeBuffer(bufferId); models.closeBuffer(bufferId);
}; };
// inject a fake buffer line for date change // inject a fake buffer line for date change if needed
var injectDateChangeMessage = function(buffer, old_date, new_date) { var injectDateChangeMessageIfNeeded = function(buffer, old_date, new_date) {
var old_date_plus_one = old_date;
old_date_plus_one.setDate(old_date.getDate() + 1);
new_date.setHours(0, 0, 0, 0);
old_date.setHours(0, 0, 0, 0); old_date.setHours(0, 0, 0, 0);
// it's not always true that a date with time 00:00:00 new_date.setHours(0, 0, 0, 0);
// plus one day will be time 00:00:00 // Check if the date changed
old_date_plus_one.setHours(0, 0, 0, 0); if (old_date.valueOf() !== new_date.valueOf()) {
var old_date_plus_one = old_date;
var content = "\u001943"; // this colour corresponds to chat_day_change old_date_plus_one.setDate(old_date.getDate() + 1);
content += new_date.toLocaleDateString(window.navigator.language, // it's not always true that a date with time 00:00:00
{weekday: "long"}); // plus one day will be time 00:00:00
// if you're testing different date formats, old_date_plus_one.setHours(0, 0, 0, 0);
// make sure to test different locales such as "en-US",
// "en-US-u-ca-persian" (which has different weekdays, year 0, and an ERA) var content = "\u001943"; // this colour corresponds to chat_day_change
// "ja-JP-u-ca-persian-n-thai" (above, diff numbering, diff text) // Add day of the week
var extra_date_format = { content += new_date.toLocaleDateString(window.navigator.language,
day: "numeric", {weekday: "long"});
month: "long" // if you're testing different date formats,
}; // make sure to test different locales such as "en-US",
if (new_date.getYear() !== old_date.getYear()) { // "en-US-u-ca-persian" (which has different weekdays, year 0, and an ERA)
extra_date_format.year = "numeric"; // "ja-JP-u-ca-persian-n-thai" (above, diff numbering, diff text)
} var extra_date_format = {
content += " ("; day: "numeric",
content += new_date.toLocaleDateString(window.navigator.language, month: "long"
extra_date_format); };
// Result should be something like if (new_date.getYear() !== old_date.getYear()) {
// Friday (November 27) extra_date_format.year = "numeric";
// or if the year is different, }
// Friday (November 27, 2015) content += " (";
content += new_date.toLocaleDateString(window.navigator.language,
// Comparing dates in javascript is beyond tedious extra_date_format);
if (old_date_plus_one.valueOf() !== new_date.valueOf()) { // Result should be something like
var date_diff = Math.round((new_date - old_date)/(24*60*60*1000)) + 1; // Friday (November 27)
if (date_diff < 0) { // or if the year is different,
date_diff = -1*(date_diff); // Friday (November 27, 2015)
if (date_diff === 1) {
content += ", 1 day before"; // 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 { } else {
content += ", " + date_diff + " days before"; content += ", " + date_diff + " days later";
} }
} else { // Result: Friday (November 27, 5 days later)
content += ", " + date_diff + " days later";
} }
// Result: Friday (November 27, 5 days later) content += ")";
}
content += ")"; var line = {
buffer: buffer,
var line = { date: new_date,
buffer: buffer, prefix: '\u001943\u2500',
date: new_date, tags_array: [],
prefix: '\u001943\u2500', displayed: true,
tags_array: [], highlight: 0,
displayed: true, message: content
highlight: 0, };
message: content var new_message = new models.BufferLine(line);
}; buffer.addLine(new_message);
var new_message = new models.BufferLine(line);
buffer.addLine(new_message);
};
// wrapper to do the logic checking
var injectDateChangeMessageIfNeeded = function(buffer, previous_date, current_date) {
previous_date.setHours(0, 0, 0, 0);
current_date.setHours(0, 0, 0, 0);
if (previous_date.valueOf() !== current_date.valueOf()) {
injectDateChangeMessage(buffer, previous_date, current_date);
} }
}; };
@ -99,9 +93,9 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific
if (message.displayed) { if (message.displayed) {
// Check for date change // Check for date change
if (buffer.lines.length > 0) { if (buffer.lines.length > 0) {
var previous_date = new Date(buffer.lines[buffer.lines.length - 1].date), var old_date = new Date(buffer.lines[buffer.lines.length - 1].date),
current_date = new Date(message.date); new_date = new Date(message.date);
injectDateChangeMessageIfNeeded(buffer, previous_date, current_date); injectDateChangeMessageIfNeeded(buffer, old_date, new_date);
} }
message = plugins.PluginManager.contentForMessage(message); message = plugins.PluginManager.contentForMessage(message);

Loading…
Cancel
Save