diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index b5f1e6d..a76470e 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -16,9 +16,11 @@ application.register("collapse-chevron-toggler", CollapseChevronTogglerControlle import HelloController from "./hello_controller" application.register("hello", HelloController) +import RichTextLinkTargetsController from "./rich_text_link_targets_controller" +application.register("rich-text-link-targets", RichTextLinkTargetsController) + import SetThemeController from "./set_theme_controller" application.register("set-theme", SetThemeController) import ThemeSwitcherController from "./theme_switcher_controller" application.register("theme-switcher", ThemeSwitcherController) - diff --git a/app/javascript/controllers/rich_text_link_targets_controller.js b/app/javascript/controllers/rich_text_link_targets_controller.js new file mode 100644 index 0000000..ebca2ba --- /dev/null +++ b/app/javascript/controllers/rich_text_link_targets_controller.js @@ -0,0 +1,12 @@ +import { Controller } from "@hotwired/stimulus" + +// Connects to data-controller="rich-text-link-targets" +export default class extends Controller { + connect() { + this.element.querySelectorAll('div.trix-content a').forEach(function(link) { + if (link.host !== window.location.host) { + link.target = "_blank" + } + }) + } +} diff --git a/app/models/check.rb b/app/models/check.rb index a532a95..6438db9 100644 --- a/app/models/check.rb +++ b/app/models/check.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true class Check < ApplicationRecord - include RichTextTargetBlank - belongs_to :principle has_and_belongs_to_many :links diff --git a/app/models/concerns/rich_text_target_blank.rb b/app/models/concerns/rich_text_target_blank.rb deleted file mode 100644 index be405ed..0000000 --- a/app/models/concerns/rich_text_target_blank.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -module RichTextTargetBlank - extend ActiveSupport::Concern - - class_methods do - # Override has_rich_text to include target="_blank" functionality - def has_rich_text(name) - super # Call the original has_rich_text to set up the rich text association - - # Define the before_save callback to modify the links - before_save do - next # FIXME: This adds additional newlines for each blank line. - - rich_text_attribute = send(name) - if rich_text_attribute.present? - doc = Nokogiri::HTML::DocumentFragment.parse(rich_text_attribute.body.to_html) - doc.css("a").each { |a| a["target"] ||= "_blank" } - rich_text_attribute.body = doc.to_html - end - end - end - end -end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 3e2e2f2..98fa8c4 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -23,7 +23,9 @@ Menu <% end %> - <%= yield %> +