diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index a8c4146..4cf0b31 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -65,4 +65,74 @@ .highlight-when-nonempty:not([value=""]) { @extend .border-primary +} + +@mixin details-icon($color) { + background: url('data:image/svg+xml;utf8,'); + background-size: cover; +} + +.page_nav nav ul { + padding-left: 0; + list-style-type: none; + line-height: 2rem; + + a { + color: var(--bs-text); + text-decoration: none; + } + + a:hover { + text-decoration: underline; + } + + ul { + // padding-left: 1.5rem; + } +} + + +summary, +summary a { + font-size: 1rem; + font-style: normal; +} + +summary { + display: flex; + line-height: 2rem; +} + +summary::before { + @include details-icon(to-rgb(map-get($theme-colors, "dark"))); + content: ''; + float: inline-end; + width: 0.7rem; + height: 1rem; + margin-top: 0.5rem; + margin-right: 6px; + // background: url('chevron-right.svg'); + // background-size: cover; + margin-left: 0; + transition: 0.2s; +} + +@include color-mode(dark) { + summary::before { + @include details-icon(to-rgb(map-get($theme-colors, "light"))); + // content: ''; + // float: inline-end; + // width: 0.7rem; + // height: 1rem; + // margin-top: 0.5rem; + // margin-right: 6px; + // // background: url('chevron-right.svg'); + // // background-size: cover; + // margin-left: 0; + // transition: 0.2s; + } +} + +details[open]>summary::before { + transform: rotate(90deg); } \ No newline at end of file diff --git a/app/controllers/checks_controller.rb b/app/controllers/checks_controller.rb index 1a70bf5..551e7c2 100644 --- a/app/controllers/checks_controller.rb +++ b/app/controllers/checks_controller.rb @@ -7,7 +7,7 @@ class ChecksController < ApplicationController # GET /checks or /checks.json def index - @pagy, @checks = pagy(Check.filter_by(filter_params).order(:external_number)) + @pagy, @checks = pagy(Check.filter_by(filter_params).order(:external_number_1, :external_number_2, :external_number_3)) end # GET /checks/1 or /checks/1.json @@ -69,7 +69,7 @@ class ChecksController < ApplicationController end def filter_params - @filter_params ||= params.permit(filter: [ :s, priority: [], conformity_level: [], standard_ids: [], principle_id: [], target_disabilities: []])[:filter] || {} + @filter_params ||= params.permit(filter: [ :s, priority: [], conformity_level: [], standard_ids: [], principle_id: [], target_disabilities: [] ])[:filter] || {} end private diff --git a/app/controllers/elements_controller.rb b/app/controllers/elements_controller.rb index 7574183..2fe89b5 100644 --- a/app/controllers/elements_controller.rb +++ b/app/controllers/elements_controller.rb @@ -58,7 +58,7 @@ class ElementsController < ApplicationController # DELETE /elements/1 def destroy @element.destroy! - redirect_to elements_url, notice: "Element was successfully destroyed.", status: :see_other + redirect_to page_elements_url(@element.page), notice: "Element was successfully destroyed.", status: :see_other end private diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 4bbee18..2be9f8c 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -44,7 +44,7 @@ class PagesController < ApplicationController # DELETE /pages/1 def destroy @page.destroy! - redirect_to pages_url, notice: "Page was successfully destroyed.", status: :see_other + redirect_to report_pages_url(@page.report), notice: "Page was successfully destroyed.", status: :see_other end private diff --git a/app/controllers/success_criteria_controller.rb b/app/controllers/success_criteria_controller.rb index 535de27..2233ac7 100644 --- a/app/controllers/success_criteria_controller.rb +++ b/app/controllers/success_criteria_controller.rb @@ -60,7 +60,7 @@ class SuccessCriteriaController < ApplicationController @success_criterion.destroy! respond_to do |format| format.html do - redirect_to success_criteria_url, notice: "Erfolgskriterium was successfully destroyed.", status: :see_other + redirect_to element_success_criteria_url(@success_criterion.element), notice: "Erfolgskriterium was successfully destroyed.", status: :see_other end format.turbo_stream end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6bd9db2..de268bb 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -24,4 +24,8 @@ module ApplicationHelper yield(value) end + + def current_page_displayed(page) + @current_page&.id == page.id ? "open" : nil + end end diff --git a/app/javascript/controllers/unsaved_changes_controller.js b/app/javascript/controllers/unsaved_changes_controller.js index 29b198d..15a70fb 100644 --- a/app/javascript/controllers/unsaved_changes_controller.js +++ b/app/javascript/controllers/unsaved_changes_controller.js @@ -7,18 +7,21 @@ export default class extends Controller { static targets = ["cancel"] initialState = null + isSubmitted = false connect() { + console.log("connect unsaved-changes") this.initialState = this.formState() - console.log(this.cancelTargets) + + console.log("usaved-changes connect ", this.cancelTargets) window.addEventListener("beforeunload", (event) => this.leavingPage(event)) document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e)) - this.element.addEventListener("submit", (_) => this.initialState = null) - this.cancelTargets.forEach(element => { - console.log(element) - element.addEventListener("onclick", (_) => this.initialState = null) - }); + this.element.addEventListener("submit", (_) => this.isSubmitted = true) + // this.cancelTargets.forEach(element => { + // console.log(element) + // element.addEventListener("onclick", (_) => this.reset()) + // }); } formState() { @@ -27,21 +30,23 @@ export default class extends Controller { .sort(x => x[0])) } + reset() { + console.log("reset") + this.initialState = this.formState() + } + + hasChanged() { + console.log("hasChanged result", this.initialState != this.formState()) + return this.formState() != this.initialState + } + leavingPage(event) { console.log(event.type) - if (this.initialState == null || this.initialState == this.formState()) { + if (this.isSubmitted || !this.hasChanged()) { return } - if (event.type == "turbo:before-visit") { - if (!window.confirm(LEAVE_ALERT)) { - event.preventDefault() - } else { - this.initialState = null - } - } else { - this.initialState = null - event.returnValue = LEAVE_ALERT; - return event.returnValue; + if (!window.confirm(LEAVE_ALERT)) { + event.preventDefault() } } } \ No newline at end of file diff --git a/app/models/check.rb b/app/models/check.rb index 76545a8..a201aa8 100644 --- a/app/models/check.rb +++ b/app/models/check.rb @@ -76,7 +76,7 @@ class Check < ApplicationRecord relation = relation.joins(:standards).where(standards: { id: value }) when "target_disabilities" cond = String.new - value.intersection(%w(auditory visual physical cognitive)).each_with_index do |v, i| + value.intersection(%w[auditory visual physical cognitive]).each_with_index do |v, i| if i == 0 cond << "checks.#{v} = 1" else @@ -112,10 +112,10 @@ class Check < ApplicationRecord end def display_applicabilities - %i[applicable_to_analogue - applicable_to_app - applicable_to_document - applicable_to_non_web + %i[applicable_to_analogue + applicable_to_app + applicable_to_document + applicable_to_non_web applicable_to_web].select { |a| send(:"#{a}?") } .map { |a| I18n.t("applicability.#{a}") } .sort_by(&:downcase) @@ -123,6 +123,10 @@ class Check < ApplicationRecord end def display_label - [external_number, name_de].compact_blank.join(" ") + [ external_number, name_de ].compact_blank.join(" ") + end + + def external_number + [ external_number_1, external_number_2, external_number_3 ].compact_blank.join(".") end end diff --git a/app/models/checklist_entry.rb b/app/models/checklist_entry.rb index 380f673..2cfe0c6 100644 --- a/app/models/checklist_entry.rb +++ b/app/models/checklist_entry.rb @@ -5,7 +5,6 @@ class ChecklistEntry < ApplicationRecord belongs_to :check before_validation :set_position - before_create :update_positions before_update :update_positions, if: :position_changed? def set_position diff --git a/app/models/element.rb b/app/models/element.rb index 807c4b6..5d86afe 100644 --- a/app/models/element.rb +++ b/app/models/element.rb @@ -18,7 +18,7 @@ class Element < ApplicationRecord def level return nil return nil unless success_criteria.all(&:result) - + element min_failed = success_criteria.select(&:failed?).map(&:level).min possible_levels = success_criteria.select(&:passed?).map(&:level).uniq @@ -37,4 +37,8 @@ class Element < ApplicationRecord Rails.logger.debug("element: position #{position}") self.position ||= (page.elements.pluck(:position).max || 0) + 1 end + + def number + "#{page.position}.#{position}" + end end diff --git a/app/views/checklist_entries/_form.html.erb b/app/views/checklist_entries/_form.html.erb index 8ff01f5..ec18544 100644 --- a/app/views/checklist_entries/_form.html.erb +++ b/app/views/checklist_entries/_form.html.erb @@ -3,7 +3,7 @@ <%= link_to "Abbrechen", checklist_entry.persisted? ? checklist_entry : checklist_entry.checklist, class: "btn btn-outline-secondary float-end", data: { turbo_frame: "checklist_entries" } %> <%= form.submit class: "btn btn-secondary float-end me-2" %> <%= form.hidden_field :checklist_id %> - <%= form.collection_select :check_id, Check.all.order(:external_number), :id, :display_label %> + <%= form.collection_select :check_id, Check.all.order(:external_number_1, :external_number_2, :external_number_3), :id, :display_label %> <%# form.number_field :position %> <% end %> \ No newline at end of file diff --git a/app/views/checklists/_form.html.erb_ b/app/views/checklists/_form.html.erb_ deleted file mode 100644 index bcce199..0000000 --- a/app/views/checklists/_form.html.erb_ +++ /dev/null @@ -1,5 +0,0 @@ -<%= bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| %> - <%= form.text_field :name %> - <%= form.rich_text_area :description_html, rows: 12 %> - <%= form.submit %> -<% end %> \ No newline at end of file diff --git a/app/views/checklists/_form.html.slim b/app/views/checklists/_form.html.slim index 59cc33c..e2ed02e 100644 --- a/app/views/checklists/_form.html.slim +++ b/app/views/checklists/_form.html.slim @@ -1,5 +1,5 @@ = bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| = form.text_field :name = form.rich_text_area :description_html, rows: 12 - = form.collection_check_boxes :check_ids, Check.all.order(:external_number), :id, :display_label + = form.collection_check_boxes :check_ids, Check.all.order(:external_number_1, :external_number_2, :external_number_3), :id, :display_label = form.submit diff --git a/app/views/checks/_form.html.slim b/app/views/checks/_form.html.slim index 77f69d6..53e4bb7 100644 --- a/app/views/checks/_form.html.slim +++ b/app/views/checks/_form.html.slim @@ -18,8 +18,17 @@ .col-md-2 = form.check_box d, label: t("applicability.#{d}").capitalize - h2 Richtlinie - = form.text_field :external_number + h2 Erfolgskriterium + .d-flex.justify-content-start + div style="width:60px" + = form.number_field :external_number_1, hide_label: true + div.px-1.mt-3 style="" = "." + div style="width:60px" + = form.number_field :external_number_2, hide_label: true + div.px-1.mt-3 style="" = "." + div style="width:60px" + = form.number_field :external_number_3, hide_label: true + = form.text_field :external_url = form.select :conformity_level, Check.conformity_levels.keys, include_blank: true = multilang_form_field(form, :conformity_notice, as: :rich_text_area) diff --git a/app/views/elements/_element.html.erb b/app/views/elements/_element.html.erb index 7ae81e7..566dd7d 100644 --- a/app/views/elements/_element.html.erb +++ b/app/views/elements/_element.html.erb @@ -1,4 +1,5 @@