From 73d71e3feed0923f17673f5e7ddf0bd29ce8120e Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Wed, 8 Apr 2020 20:24:18 +0300 Subject: [PATCH] FEATURE: Show noscript view to unsupported browsers (#9373) --- app/assets/javascripts/browser-detect.js | 3 +++ app/assets/javascripts/discourse.js | 4 ++++ app/views/layouts/application.html.erb | 2 ++ config/application.rb | 1 + .../config/locales/server.en.yml | 2 +- .../public/js/ie.js | 3 +++ .../assets/javascripts/browser-update.js.erb | 23 ++++++++++--------- 7 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 app/assets/javascripts/browser-detect.js diff --git a/app/assets/javascripts/browser-detect.js b/app/assets/javascripts/browser-detect.js new file mode 100644 index 00000000000..bdbbc27b3ef --- /dev/null +++ b/app/assets/javascripts/browser-detect.js @@ -0,0 +1,3 @@ +if (!window.WeakMap || !window.Promise) { + window.unsupportedBrowser = true; +} diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js index 10fb7dd407d..eea5c756400 100644 --- a/app/assets/javascripts/discourse.js +++ b/app/assets/javascripts/discourse.js @@ -6,6 +6,10 @@ import discourseComputed, { observes } from "discourse-common/utils/decorators"; import FocusEvent from "discourse-common/mixins/focus-event"; import deprecated from "discourse-common/lib/deprecated"; +if (window.unsupportedBrowser) { + throw "Unsupported browser detected"; +} + const _pluginCallbacks = []; const Discourse = Application.extend(FocusEvent, { diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 7340c45a467..22a29e19e43 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -19,6 +19,8 @@ <%= build_plugin_html 'server:before-script-load' %> + <%= preload_script 'browser-detect' %> + <%= preload_script "locales/#{I18n.locale}" %> <%- if ExtraLocalesController.client_overrides_exist? %> <%= preload_script_url ExtraLocalesController.url('overrides') %> diff --git a/config/application.rb b/config/application.rb index cf820c39dc6..bad76c94f69 100644 --- a/config/application.rb +++ b/config/application.rb @@ -135,6 +135,7 @@ module Discourse vendor.js admin.js preload-store.js + browser-detect.js browser-update.js break_string.js ember_jquery.js diff --git a/plugins/discourse-internet-explorer/config/locales/server.en.yml b/plugins/discourse-internet-explorer/config/locales/server.en.yml index 6e1292efeb4..03100823db4 100644 --- a/plugins/discourse-internet-explorer/config/locales/server.en.yml +++ b/plugins/discourse-internet-explorer/config/locales/server.en.yml @@ -1,4 +1,4 @@ en: site_settings: - discourse_internet_explorer_enabled: "Internet Explorer support" + discourse_internet_explorer_enabled: "Enable temporary Internet Explorer support. This plugin is an effort to maintain compatibility with older browsers and will be completely removed in the near future." discourse_internet_explorer_deprecation_warning: "Show an Internet Explorer deprecation warning" diff --git a/plugins/discourse-internet-explorer/public/js/ie.js b/plugins/discourse-internet-explorer/public/js/ie.js index 6c998e402a1..168731d5ffb 100644 --- a/plugins/discourse-internet-explorer/public/js/ie.js +++ b/plugins/discourse-internet-explorer/public/js/ie.js @@ -972,6 +972,9 @@ if (!String.prototype.startsWith) { /* eslint-enable */ // Polyfill Promise - used by popper.js +if (!window.Promise) { + window.Promise = true; +} window.addEventListener( "load", function() { diff --git a/vendor/assets/javascripts/browser-update.js.erb b/vendor/assets/javascripts/browser-update.js.erb index 7309e8fdcf8..b32410b8e6d 100644 --- a/vendor/assets/javascripts/browser-update.js.erb +++ b/vendor/assets/javascripts/browser-update.js.erb @@ -4,24 +4,25 @@ (function() { var $buo = function() { - - var badAndroid = false, ua = null; - // Sometimes we have to resort to parsing the user agent string. :( if (navigator && navigator.userAgent) { - ua = navigator.userAgent; + var ua = navigator.userAgent; + + // we don't ask Googlebot to update their browser + if (ua.indexOf('Googlebot') >= 0 || ua.indexOf('Mediapartners') >= 0 || ua.indexOf('AdsBot') >= 0) { + return; + } } - // sam: we require WeakMap, this allows us to easily feature detect IE10 that does not support it - // This also catches ancient android phones that never had that feature (2.2 and below) - if (window.WeakMap) { + if (!window.unsupportedBrowser) { return; } - // we don't ask Googlebot to update their browser - if (ua.indexOf('Googlebot') >= 0 || ua.indexOf('Mediapartners') >= 0 || ua.indexOf('AdsBot') >= 0) { - return; - } + var mainElement = document.getElementById("main"); + var noscriptElements = document.getElementsByTagName("noscript"); + // noscriptElements[0].innerHTML contains encoded HTML + var innerHTML = noscriptElements[0].childNodes[0].nodeValue; + mainElement.innerHTML = innerHTML; // retrieve localized browser upgrade text var t = <%= "'" + I18n.t('js.browser_update') + "'" %>;