diff --git a/Dockerfile b/Dockerfile index 43cae04..9f587ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,7 @@ RUN \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update -yqq && \ apt-get install -yqq --no-install-recommends \ - sqlite3 nodejs npm sassc yarn libvips fish ranger && \ + sqlite3 nodejs npm sassc yarn libvips fish ranger pandoc && \ apt-get clean && \ npm install tabby-agent && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ @@ -108,7 +108,7 @@ RUN \ ${NAME} && \ apt-get update -yqq && \ apt-get install -yqq --no-install-recommends \ - sqlite3 libvips && \ + sqlite3 libvips pandoc && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ truncate -s 0 /var/log/*log && \ diff --git a/Gemfile b/Gemfile index 49fa037..95e2e4e 100644 --- a/Gemfile +++ b/Gemfile @@ -52,6 +52,7 @@ gem 'caxlsx' gem 'caxlsx_rails' gem 'image_processing', '~> 1.2' gem 'pagy', '~> 9.0' +gem 'pandoc-ruby' gem 'prawn-markup' gem 'prawn-rails' gem 'sablon' diff --git a/Gemfile.lock b/Gemfile.lock index cdc7a37..ee0de82 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -179,6 +179,7 @@ GEM nokogiri (1.16.6-x86_64-linux) racc (~> 1.4) pagy (9.0.2) + pandoc-ruby (2.1.10) parallel (1.25.1) parser (3.3.4.0) ast (~> 2.4.1) @@ -356,6 +357,7 @@ DEPENDENCIES jbuilder jsbundling-rails pagy (~> 9.0) + pandoc-ruby prawn-markup prawn-rails puma (>= 5.0) diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 341f183..dfe6847 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -15,6 +15,21 @@ class ReportsController < ApplicationController response.headers['Content-Disposition'] = %(attachment; filename="#{filename(@report, extension: 'xlsx')}") render end + format.xml do + response.headers['Content-Disposition'] = %(attachment; filename="#{filename(@report, extension: 'html')}") + render formats: [:odt], layout: false + end + format.rtf do + html = render_to_string(template: 'reports/show', formats: [:odt], + layout: false) + rtf = "{\\rtf1\n#{PandocRuby.html(html).to_rtf}}" + send_data rtf, filename: filename(@report, extension: 'rtf') + end + format.odt do + html = render_to_string(layout: false) + odt = PandocRuby.html(html).to_odt + send_data odt, filename: filename(@report, extension: 'odt') + end format.docx do template = Sablon.template(Rails.root.join('lib/templates/docx/report.docx')) context = { diff --git a/app/views/elements/_element.odt.erb b/app/views/elements/_element.odt.erb new file mode 100644 index 0000000..bf1ae9e --- /dev/null +++ b/app/views/elements/_element.odt.erb @@ -0,0 +1,13 @@ +
+
+

+ <%= element.title %> +

+ <%= element.path %> +
+ <%= element.description_html %> + + <% element.success_criteria.each do |sc| %> + <%= render sc %> + <% end %> +
diff --git a/app/views/home/show.html.erb b/app/views/home/show.html.erb index b9e3e6a..c72ee9d 100644 --- a/app/views/home/show.html.erb +++ b/app/views/home/show.html.erb @@ -1,4 +1,4 @@ -

A11yDive

+

a11ydive

Dashboard

@@ -12,12 +12,20 @@ <%= Checklist.count %> <%= link_to Checklist.model_name.human(count: Checklist.count), :checklists %>

+

<%= Check.count %> <%= link_to Check.model_name.human(count: Check.count), :checks %>

+

+ +<%= Link.count %> +<%= link_to Link.model_name.human(count: Link.count), :links %> +

+ +

<%= link_to "Backup herunterladen", admin_backup_url, class: "btn btn-secondary", data: { turbo_prefetch: false, frame: "_top", turbo: false } %>

\ No newline at end of file diff --git a/app/views/reports/show.html.erb b/app/views/reports/show.html.erb index ad8b9ae..d6bd395 100644 --- a/app/views/reports/show.html.erb +++ b/app/views/reports/show.html.erb @@ -35,6 +35,17 @@ <%= link_to report_path(@report, format: :xlsx), class: "btn btn-primary", target: "_blank" do %> XLSX <% end %> + <%= link_to report_path(@report, format: :rtf), class: "btn btn-primary", target: "_blank" do %> + RTF + <% end %> + <%= link_to report_path(@report, format: :xml), class: "btn btn-primary", target: "_blank" do %> + HTML + <% end %> + <%= link_to report_path(@report, format: :odt), class: "btn btn-primary", target: "_blank" do %> + ODT + <% end %> + +
<%= link_to t("scaffold.link_edit", model: @report.model_name.human), edit_report_path(@report) %> <%= link_to t("scaffold.link_index", model: @report.model_name.human(count: 2)), reports_path %> <%= button_to t("scaffold.link_destroy", model: @report.model_name.human), @report, method: :delete, class: "btn btn-outline-danger" %> diff --git a/app/views/reports/show.odt.erb b/app/views/reports/show.odt.erb new file mode 100644 index 0000000..0120dbf --- /dev/null +++ b/app/views/reports/show.odt.erb @@ -0,0 +1,23 @@ + + + + +

<%= @report.name %>

+ + Erstellt am <%= l(@report.created_at, format: :short) %>, + zuletzt bearbeitet am <%= l(@report.updated_at, format: :short) %> + + + <% if @report.comment_html %> +
+ <%= @report.comment_html %> +
+ <% end %> + +
+ <% @report.elements.each do |element| %> + <%= render element %> + <% end %> +
+ + \ No newline at end of file diff --git a/app/views/reports/show.rtf.erb b/app/views/reports/show.rtf.erb new file mode 100644 index 0000000..55a6b6a --- /dev/null +++ b/app/views/reports/show.rtf.erb @@ -0,0 +1,25 @@ +

<%= @report.name %>

+

+ Erstellt am <%= l(@report.created_at, format: :short) %>, + zuletzt bearbeitet am <%= l(@report.updated_at, format: :short) %> +

+ + <% if @report.comment_html %> +
+ <%= @report.comment_html %> +
+ <% end %> + +
+ <%= turbo_frame_tag "new_element_frame" do %> + <%= render partial: "reports/new_element_button", locals: { report: @report } %> + <% end %> +
+ +
+ <% @report.elements.each do |element| %> + <%= turbo_frame_tag dom_id(element, :frame) do %> + <%= render element %> + <% end %> + <% end %> +
diff --git a/app/views/success_criteria/_success_criterion.odt.erb b/app/views/success_criteria/_success_criterion.odt.erb new file mode 100644 index 0000000..d486182 --- /dev/null +++ b/app/views/success_criteria/_success_criterion.odt.erb @@ -0,0 +1,4 @@ +
+ <%= success_criterion.result %> +
+<%= success_criterion.description_html %> diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb index 68b6e57..8133c80 100644 --- a/config/initializers/mime_types.rb +++ b/config/initializers/mime_types.rb @@ -1,2 +1,4 @@ # Add this line to config/initializers/mime_types.rb in your Rails application -Mime::Type.register "application/vnd.openxmlformats-officedocument.wordprocessingml.document", :docx \ No newline at end of file +Mime::Type.register "application/vnd.openxmlformats-officedocument.wordprocessingml.document", :docx +Mime::Type.register "text/richtext", :rtf +Mime::Type.register "application/vnd.oasis.opendocument.text", :odt \ No newline at end of file