Task Reordering
#1. To Make TodoList Sortable by Using sortable.js NPM package.
#2 To make sortable TodoList permanent.
Last updated
Last updated
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script><script>
var taskList = document.getElementById("tasklist");
let sortable = Sortable.create(taskList, {
handle: '.handle',
ghostClass: 'dropArea',
chosenClass: 'selectedTask',
});
</script><!-- Hidden form. To collect the unique keys of the tasks list -->
<form style="display: none;" id="reorderForm" method="post" action="{% url 'task-reorder' %}">
{% csrf_token %}
<input type="hidden" id="positionInput" name="position">
</form>var reorderForm = document.getElementById("reorderForm");
var positionInput = document.getElementById("positionInput");
function reordering() {
const rows = document.getElementsByClassName("task-wrapper");
let pos = [];
for (let row of rows) {
pos.push(row.dataset.position);
}
console.log(pos.join(","))
positionInput.value = pos.join(',');
reorderForm.submit();
}
let result = document.getElementsByClassName("task-wrapper");
document.ondrop = reordering<!-- Hidden form. To get collected unique keys -->
<form style="display: none;" id="reorderForm" method="post" action="{% url 'task-reorder' %}">
{% csrf_token %}
<input type="hidden" id="positionInput" name="position">
</form>from django import forms
# Reordering Form and View
class PositionForm(forms.Form):
position = forms.CharField()
from django.shortcuts import redirect
from django.db import transaction
from .forms import PositionFormclass TaskReorder(View):
def post(self, request):
form = PositionForm(request.POST)
if form.is_valid():
positionList = form.cleaned_data["position"].split(',')
with transaction.atomic():
self.request.user.set_task_order(positionList)
return redirect(reverse_lazy('tasks'))path('task-reorder/', TaskReorder.as_view(), name='task-reorder'),