From b719354a079b4e1e81d5afc71e2109ea3e88f46c Mon Sep 17 00:00:00 2001 From: Patrick Melanson Date: Tue, 5 Jan 2016 17:04:05 -0500 Subject: [PATCH] #700 detect locale formatting support on load --- js/glowingbear.js | 17 +++++++++++++++++ js/handlers.js | 28 ++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/js/glowingbear.js b/js/glowingbear.js index 51de8cc..9de3698 100644 --- a/js/glowingbear.js +++ b/js/glowingbear.js @@ -761,6 +761,23 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', } }; + $rootScope.supports_formatting_date = (function() { + // function toLocaleDateStringSupportsLocales taken from MDN: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString#Checking_for_support_for_locales_and_options_arguments + try { + new Date().toLocaleDateString('i'); + } catch (e) { + if (e.name !== 'RangeError') { + $log.info("Browser does not support toLocaleDateString()," + + " falling back to en-US"); + } + return e.name === 'RangeError'; + } + $log.info("Browser does not support toLocaleDateString()," + + " falling back to en-US"); + return false; + })(); + // Prevent user from accidentally leaving the page window.onbeforeunload = function(event) { diff --git a/js/handlers.js b/js/handlers.js index 18e1a31..0b3ea2f 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -59,8 +59,16 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific 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 ($rootScope.supports_formatting_date) { + content += new_date.toLocaleDateString(window.navigator.language, + {weekday: "long"}); + } else { + // Gross code that only does English dates ew gross + var dow_to_word = [ + "Sunday", "Monday", "Tuesday", + "Wednesday", "Thursday", "Friday", "Saturday"]; + content += dow_to_word[new_date.getDay()]; + } // 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) @@ -73,8 +81,20 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific extra_date_format.year = "numeric"; } content += " ("; - content += new_date.toLocaleDateString(window.navigator.language, - extra_date_format); + if ($rootScope.supports_formatting_date) { + content += new_date.toLocaleDateString(window.navigator.language, + extra_date_format); + } else { + // ew ew not more gross code + var month_to_word = [ + "January", "February", "March", "April", + "May", "June", "July", "August", + "September", "October", "November", "December"]; + content += month_to_word[new_date.getMonth()] + " " + new_date.getDate().toString(); + if (extra_date_format.year === "numeric") { + content += ", " + new_date.getFullYear().toString(); + } + } // Result should be something like // Friday (November 27) // or if the year is different,