mirror of
https://github.com/discourse/discourse.git
synced 2024-12-17 12:23:45 +08:00
bc97d39688
A proper fix would involve it being precompiled like other assets, but due to the conditional nature of the resource this is more complicated. For now this is better than IE being broken.
58 lines
1.8 KiB
Ruby
58 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# name: discourse-internet-explorer
|
|
# about: Attempts to provide backward support for internt explorer
|
|
# version: 1.0
|
|
# authors: Joffrey Jaffeux, David Taylor, Daniel Waterworth, Robin Ward
|
|
# url: https://github.com/discourse/discourse/tree/master/plugins/discourse-internet-explorer
|
|
|
|
enabled_site_setting :discourse_internet_explorer_enabled
|
|
hide_plugin if self.respond_to?(:hide_plugin)
|
|
|
|
register_asset 'stylesheets/ie.scss'
|
|
|
|
after_initialize do
|
|
|
|
# Conditionally load the stylesheet. There is unfortunately no easy way to do this via
|
|
# Plugin API.
|
|
reloadable_patch do |plugin|
|
|
ApplicationHelper.module_eval do
|
|
alias_method :previous_discourse_stylesheet_link_tag, :discourse_stylesheet_link_tag
|
|
def discourse_stylesheet_link_tag(name, opts = {})
|
|
|
|
if name == 'discourse-internet-explorer'
|
|
return unless SiteSetting.discourse_internet_explorer_enabled?
|
|
return unless request.env['HTTP_USER_AGENT'] =~ /MSIE|Trident/
|
|
end
|
|
|
|
previous_discourse_stylesheet_link_tag(name, opts)
|
|
end
|
|
end
|
|
end
|
|
|
|
register_anonymous_cache_key(:ie) do
|
|
unless defined?(@is_ie)
|
|
session = @env[self.class::RACK_SESSION]
|
|
# don't initialize params until later
|
|
# otherwise you get a broken params on the request
|
|
params = {}
|
|
|
|
@is_ie = BrowserDetection.browser(@env[self.class::USER_AGENT]) == :ie
|
|
end
|
|
|
|
@is_ie
|
|
end
|
|
|
|
# not using patch on preload_script as js is fine and we need this file
|
|
# to be loaded before other files
|
|
register_html_builder('server:before-script-load') do |controller|
|
|
if BrowserDetection.browser(controller.request.env['HTTP_USER_AGENT']) == :ie
|
|
path = "#{Discourse.base_uri}/plugins/discourse-internet-explorer/js/ie.js"
|
|
|
|
<<~JAVASCRIPT
|
|
<script src="#{path}"></script>
|
|
JAVASCRIPT
|
|
end
|
|
end
|
|
end
|