From 109dcd205c9537a8d02d3917ef0b98350bba7054 Mon Sep 17 00:00:00 2001
From: david
Date: Fri, 26 Jul 2024 03:14:07 +0200
Subject: [PATCH] Add pandoc
---
Dockerfile | 4 +--
Gemfile | 1 +
Gemfile.lock | 2 ++
app/controllers/reports_controller.rb | 15 +++++++++++
app/views/elements/_element.odt.erb | 13 ++++++++++
app/views/home/show.html.erb | 10 +++++++-
app/views/reports/show.html.erb | 11 ++++++++
app/views/reports/show.odt.erb | 23 +++++++++++++++++
app/views/reports/show.rtf.erb | 25 +++++++++++++++++++
.../_success_criterion.odt.erb | 4 +++
config/initializers/mime_types.rb | 4 ++-
11 files changed, 108 insertions(+), 4 deletions(-)
create mode 100644 app/views/elements/_element.odt.erb
create mode 100644 app/views/reports/show.odt.erb
create mode 100644 app/views/reports/show.rtf.erb
create mode 100644 app/views/success_criteria/_success_criterion.odt.erb
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