{% extends "base.html" %} {% load course %} {% block title %} Module {{ module.order|add:1 }}: {{ module.title }} {% endblock %} {% block content %} {% with course=module.course %}

Course "{{ course.title }}"

Modules

Edit modules

Module {{ module.order|add:1 }}: {{ module.title }}

Module contents:

{% for content in module.contents.all %}
{% with item=content.item %}

{{ item }} ({{ item|model_name }})

Edit
{% csrf_token %}
{% endwith %}
{% empty %}

This module has no contents yet.

{% endfor %}

Add new content:

{% endwith %} {% endblock %} {% block include_js %} {% endblock %} {% block domready %} var options = { method: 'POST', mode: 'same-origin' } const moduleOrderUrl = '{% url "module_order" %}'; sortable('#modules', { forcePlaceholderSize: true, placeholderClass: 'placeholder' })[0].addEventListener('sortupdate', function(e) { modulesOrder = {}; var modules = document.querySelectorAll('#modules li'); modules.forEach(function (module, index) { // update module index modulesOrder[module.dataset.id] = index; // update index in HTML element module.querySelector('.order').innerHTML = index + 1; }); // add new order to the HTTP request options options['body'] = JSON.stringify(modulesOrder); // send HTTP request fetch(moduleOrderUrl, options) }); const contentOrderUrl = '{% url "content_order" %}'; sortable('#module-contents', { forcePlaceholderSize: true, placeholderClass: 'placeholder' })[0].addEventListener('sortupdate', function(e) { contentOrder = {}; var contents = document.querySelectorAll('#module-contents div'); contents.forEach(function (content, index) { // update content index contentOrder[content.dataset.id] = index; }); // add new order to the HTTP request options options['body'] = JSON.stringify(contentOrder); // send HTTP request fetch(contentOrderUrl, options) }); {% endblock %}