From 271a5d0626b65fbc602c791daf78f11e331e69fb Mon Sep 17 00:00:00 2001 From: Patrick Melanson Date: Fri, 27 Nov 2015 11:24:32 -0500 Subject: [PATCH 1/2] when switching buffers, will inject date change if date changed --- js/handlers.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/js/handlers.js b/js/handlers.js index eab2101..a2240de 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -20,7 +20,7 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific }; // inject a fake buffer line for date change - var injectDateChangeMessage = function(message, buffer, old_date, new_date) { + var injectDateChangeMessage = function(buffer, old_date, new_date) { var old_date_plus_one = old_date; old_date_plus_one.setDate(old_date.getDate() + 1); @@ -56,6 +56,15 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific 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); + } + }; + var handleLine = function(line, manually) { var message = new models.BufferLine(line); var buffer = models.getBuffer(message.buffer); @@ -66,11 +75,7 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific if (buffer.lines.length > 0) { var previous_date = new Date(buffer.lines[buffer.lines.length - 1].date), current_date = new Date(message.date); - previous_date.setHours(0, 0, 0, 0); - current_date.setHours(0, 0, 0, 0); - if (previous_date.valueOf() !== current_date.valueOf()) { - injectDateChangeMessage(message, buffer, previous_date, current_date); - } + injectDateChangeMessageIfNeeded(buffer, previous_date, current_date); } message = plugins.PluginManager.contentForMessage(message); @@ -235,6 +240,13 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific lines.forEach(function(l) { 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()); + } }; /* From 9334f44cdeeb1144d4ca9c14dbf8f9917ca9b96e Mon Sep 17 00:00:00 2001 From: Patrick Melanson Date: Fri, 27 Nov 2015 14:38:18 -0500 Subject: [PATCH 2/2] more human readable date change, per #679 For one day later: Friday (November 27) (examples in en-US) For n>1 days: Friday (November 27, 2 days later) For n<0 days: Friday (November 27, 1 day before) For different years: Friday (November 27, 2015, 2156 days later) --- js/handlers.js | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/js/handlers.js b/js/handlers.js index a2240de..3541aa8 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -30,23 +30,49 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific // plus one day will be time 00:00:00 old_date_plus_one.setHours(0, 0, 0, 0); - var content = "\u001943" + // styling - "Date changed to " + new_date.toDateString(); + var content = "\u001943"; // this colour corresponds to chat_day_change + 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)); + var date_diff = Math.round((new_date - old_date)/(24*60*60*1000)) + 1; if (date_diff < 0) { - date_diff = -1*(date_diff + 1); - content += " (" + date_diff + " days before " + old_date.toDateString() + ")"; + date_diff = -1*(date_diff); + if (date_diff === 1) { + content += ", 1 day before"; + } else { + content += ", " + date_diff + " days before"; + } } else { - content += " (" + date_diff + " days have passed since " + old_date.toDateString() + ")"; + content += ", " + date_diff + " days later"; } + // Result: Friday (November 27, 5 days later) } + content += ")"; var line = { buffer: buffer, date: new_date, - prefix: '\u001943\u2500\u2500', + prefix: '\u001943\u2500', tags_array: [], displayed: true, highlight: 0,