From da7a7f85e87d7328d76a6530ef5c53c1e1ebe2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenz=20H=C3=BCbschle-Schneider?= Date: Sat, 28 Nov 2015 13:23:41 +0100 Subject: [PATCH] Date change: refactoring --- js/handlers.js | 130 +++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 68 deletions(-) diff --git a/js/handlers.js b/js/handlers.js index 3541aa8..bf41604 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -19,75 +19,69 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific models.closeBuffer(bufferId); }; - // inject a fake buffer line for date change - var injectDateChangeMessage = 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); + // 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); - // 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 - 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"; + 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 before"; + content += ", " + date_diff + " days later"; } - } else { - content += ", " + date_diff + " days later"; + // Result: Friday (November 27, 5 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); - }; - - // 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); + 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); } }; @@ -99,9 +93,9 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific if (message.displayed) { // Check for date change if (buffer.lines.length > 0) { - var previous_date = new Date(buffer.lines[buffer.lines.length - 1].date), - current_date = new Date(message.date); - injectDateChangeMessageIfNeeded(buffer, previous_date, current_date); + 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);