Make stuff sortable

This commit is contained in:
david 2024-11-11 04:04:13 +01:00
parent 50e853098b
commit ee5dbcf33e
21 changed files with 161 additions and 28 deletions

View file

@ -26,7 +26,7 @@
</p>
<% end %>
<div id="<%= dom_id(element, :success_criteria_list) %>" class="mb-3">
<div id="<%= dom_id(element, :success_criteria_list) %>" class="mb-3" data-controller="sortable" data-form-name="success_criterion" data-position-attribute= "position">
<% element.success_criteria.each do |sc| %>
<%= render sc %>
<% end %>

View file

@ -1,9 +1,11 @@
li id=dom_id(element, :page_nav_row)
li id=dom_id(element, :page_nav_row) data={ "sortable-url": element_path(element), "form-name": "element", "position-attribute": "position" }
- if current_page
=< link_to("##{dom_id(element)}", data: { "turbo": false }) do
i.bi.bi-boxes.me-1
=< "#{element.number} #{element.title}"
span id=dom_id(element, :page_nav_title)
= "#{element.number} #{element.title}"
- else
=< link_to(report_path(element.report, page_id: element.page.id, anchor: dom_id(element)), data: { "turbo": false }) do
i.bi.bi-boxes.me-1
=< "#{element.number} #{element.title}"
span id=dom_id(element, :page_nav_title)
=< "#{element.number} #{element.title}"

View file

@ -0,0 +1,7 @@
- @element.page.elements.each do |element|
= turbo_stream.update dom_id(element, :page_nav_title), "#{element.number} #{element.title}"
= turbo_stream.update dom_id(element, :title), "#{element.page.position}.#{element.position} #{element.title}"
/ - element.success_criteria.each do |sc|
/ = turbo_stream.update dom_id(sc, :title), "#{sc.page.position}.#{sc.element.position}.#{sc.position} #{sc.title}"
- element.success_criteria.each do |sc|
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"

View file

@ -1,9 +1,9 @@
<div id="<%= dom_id page %>" class="mb-3" data-bs-scrollspy-target="#<%= dom_id(page.report, :page_nav_spy) %>" data-controller="bs-scrollspy">
<div class="text-end">
<a href="#" data-action="click->details-list#closeAll" data-controller="hotkey" data-hotkey="z">Alle zu [z]</a>
<a href="#" data-action="click->details-list#openAll" data-controller="hotkey" data-hotkey="a">Alle auf [a]</a>
</div>
<div id="element_list" data-controller="details-list">
<div class="text-end">
<a href="#" data-action="click->details-list#closeAll" data-controller="hotkey" data-hotkey="z">Alle zu [z]</a>
<a href="#" data-action="click->details-list#openAll" data-controller="hotkey" data-hotkey="a">Alle auf [a]</a>
</div>
<% page.elements.each do |element| %>
<%= render element %>
<% end %>

View file

@ -0,0 +1,7 @@
- @page.report.pages.each do |page|
= turbo_stream.update dom_id(page, :title), "#{page.position} #{page.path}"
- page.elements.each do |element|
= turbo_stream.update dom_id(element, :title), "#{element.page.position}.#{element.position} #{element.title}"
= turbo_stream.replace dom_id(element, :page_nav_row), partial: "elements/page_nav_row", locals: { element: element, current_page: element.page == @page}
- element.success_criteria.each do |sc|
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"

View file

@ -9,19 +9,20 @@
- if @page_nav_mode != :comment || current_page.nil?
- if report.pages.any?
nav.mt-3 id=dom_id(report, :page_nav_spy)
ul
ul data={ controller: :sortable }
- report.pages.each do |page|
- is_current = current_page == page
li
li data={ "sortable-url": page_path(page), "form-name": "page", "position-attribute": "position" }
details.tree open=current_page_displayed(page) class=""
summary class=(is_current ? "active" : nil)
.content
i.bi.me-1 class="bi-file-earmark-check#{is_current ? "" : "" }"
- if is_current
=< "#{page.position} #{page.path}"
span id=dom_id(page, :title) =< "#{page.position} #{page.path}"
- else
=< link_to("#{page.position} #{page.path}", report_path(report, page_id: page.id), data: { "turbo-frame": :_top })
ul id=dom_id(page, :page_nav_elements)
=< link_to(report_path(report, page_id: page.id), data: { "turbo-frame": :_top }) do
span id=dom_id(page, :title) =< "#{page.position} #{page.path}"
ul id=dom_id(page, :page_nav_elements) data={ controller: "sortable", "linked-element-id": "element_list" }
- page.elements.each do |element|
= render partial: "elements/page_nav_row", locals: { element: element, current_page: current_page == element.page }
/li

View file

@ -1,5 +1,5 @@
/ = turbo_frame_tag(dom_id(success_criterion, :frame)) do
- expanded = false unless defined?(expanded)
details.success_criterion id="#{dom_id(success_criterion)}" class="#{success_criterion.result}"
details.success_criterion id="#{dom_id(success_criterion)}" class="#{success_criterion.result}" data={ "sortable-url": success_criterion_path(success_criterion), "form-name": :success_criterion, "position-attribute": "position" }
== render partial: "success_criteria/header", locals: {success_criterion: success_criterion }
== render partial: "success_criteria/body", locals: {success_criterion: success_criterion }

View file

@ -1,2 +1,5 @@
= turbo_stream.replace dom_id(@success_criterion, :header), partial: "success_criteria/header", locals: {success_criterion: @success_criterion }
= turbo_stream.replace dom_id(@success_criterion, :body), partial: "success_criteria/body", locals: {success_criterion: @success_criterion }
= turbo_stream.replace dom_id(@success_criterion, :body), partial: "success_criteria/body", locals: {success_criterion: @success_criterion }
- @success_criterion.element.success_criteria.each do |sc|
= turbo_stream.update(dom_id(sc, :position), sc.number)