Sortable handles
Some checks failed
/ Run tests (push) Successful in 1m45s
/ Run system tests (push) Failing after 1m55s
/ Build, push and deploy image (push) Successful in 1m24s

This commit is contained in:
david 2024-11-11 06:01:19 +01:00
parent e569bcb246
commit 37e9c5461c
6 changed files with 24 additions and 12 deletions

View file

@ -307,3 +307,7 @@ details.tree {
.sc-level-aaa { .sc-level-aaa {
background-color: $purple; background-color: $purple;
} }
.handle {
cursor: move;
}

View file

@ -6,16 +6,22 @@ import { put } from "@rails/request.js";
export default class extends Controller { export default class extends Controller {
linkedElement = null linkedElement = null
connect() { connect() {
this.element.style.cursor = "grab" // this.element.style.cursor = "grab"
if (this.element.dataset["linkedElementId"]) { if (this.element.dataset["linkedElementId"]) {
this.linkedElement = document.getElementById(this.element.dataset["linkedElementId"]) this.linkedElement = document.getElementById(this.element.dataset["linkedElementId"])
} }
new Sortable(this.element, { let draggableSelector = ".item"
group: this.groupValue, if (this.element.dataset["draggableSelector"]) {
draggableSelector = this.element.dataset["draggableSelector"]
}
console.log(draggableSelector, new Sortable(this.element, {
// group: this.groupValue,
onEnd: this.onEndFactory(this.linkedElement), onEnd: this.onEndFactory(this.linkedElement),
}) handle: ".handle",
// draggable: draggableSelector,
}))
} }
onEndFactory(linkedElement) { onEndFactory(linkedElement) {

View file

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

View file

@ -4,8 +4,10 @@ li id=dom_id(element, :page_nav_row) data={ "sortable-url": element_path(element
i.bi.bi-boxes.me-2 i.bi.bi-boxes.me-2
span id=dom_id(element, :page_nav_title) span id=dom_id(element, :page_nav_title)
= "#{element.number} #{element.title}" = "#{element.number} #{element.title}"
i.bi.bi-grip-vertical.float-end.handle
- else - else
=< link_to(report_path(element.report, page_id: element.page.id, anchor: dom_id(element)), data: { "turbo": false }) do =< link_to(report_path(element.report, page_id: element.page.id, anchor: dom_id(element)), data: { "turbo": false }) do
i.bi.bi-boxes.me-2 i.bi.bi-boxes.me-2
span id=dom_id(element, :page_nav_title) span id=dom_id(element, :page_nav_title)
=< "#{element.number} #{element.title}" =< "#{element.number} #{element.title}"
i.bi.bi-grip-vertical.float-end.handle

View file

@ -14,14 +14,15 @@
- is_current = current_page == page - is_current = current_page == page
li data={ "sortable-url": page_path(page), "form-name": "page", "position-attribute": "position" } li data={ "sortable-url": page_path(page), "form-name": "page", "position-attribute": "position" }
details.tree open=current_page_displayed(page) class="" details.tree open=current_page_displayed(page) class=""
summary class=(is_current ? "active" : nil) summary.d-flex class=(is_current ? "active" : nil)
.content .content.flex-fill
i.bi.me-1 class="bi-file-earmark-check#{is_current ? "" : "" }" i.bi.me-1 class="bi-file-earmark-check#{is_current ? "" : "" }"
- if is_current - if is_current
span id=dom_id(page, :title) =< "#{page.position} #{page.path}" span id=dom_id(page, :title) =< "#{page.position} #{page.path}"
- else - else
=< link_to(report_path(report, page_id: page.id), data: { "turbo-frame": :_top }) do =< link_to(report_path(report, page_id: page.id), data: { "turbo-frame": :_top }) do
span id=dom_id(page, :title) =< "#{page.position} #{page.path}" span id=dom_id(page, :title) =< "#{page.position} #{page.path}"
i.bi.bi-grip-vertical.align-self-end.handle
ul id=dom_id(page, :page_nav_elements) data={ controller: "sortable", "linked-element-id": "element_list" } ul id=dom_id(page, :page_nav_elements) data={ controller: "sortable", "linked-element-id": "element_list" }
- page.elements.each do |element| - page.elements.each do |element|
= render partial: "elements/page_nav_row", locals: { element: element, current_page: current_page == element.page } = render partial: "elements/page_nav_row", locals: { element: element, current_page: current_page == element.page }

View file

@ -1,9 +1,9 @@
- edit_mode = action_name == "edit" - edit_mode = action_name == "edit"
summary.d-flex.align-items-start id=dom_id(success_criterion, :header) summary.d-flex.align-items-start id=dom_id(success_criterion, :header)
.content.d-flex.align-items-center .content.d-flex.align-items-center.w-100
.result-icon.flex-shrink-0 class=[success_criterion_result_color_classes(success_criterion)] .result-icon.flex-shrink-0 class=[success_criterion_result_color_classes(success_criterion)]
span.h1.bi class=[success_criterion_result_icon_classes(success_criterion)] span.h1.bi class=[success_criterion_result_icon_classes(success_criterion)]
.fs- .flex-fill
span id=dom_id(success_criterion, :position) span id=dom_id(success_criterion, :position)
= success_criterion.page.position = success_criterion.page.position
| . | .
@ -19,5 +19,4 @@ summary.d-flex.align-items-start id=dom_id(success_criterion, :header)
= success_criterion_badge(success_criterion.check.external_number, extra_classes: "text-bg-info me-1") = success_criterion_badge(success_criterion.check.external_number, extra_classes: "text-bg-info me-1")
= success_criterion_badge(success_criterion.level, extra_classes: "sc-level-#{success_criterion.level.to_s.downcase} me-1") = success_criterion_badge(success_criterion.level, extra_classes: "sc-level-#{success_criterion.level.to_s.downcase} me-1")
i.bi.bi-grip-vertical.handle