Skip to content
Snippets Groups Projects
Select Git revision
  • fca2916c71af4374e09ce7f8612c27df8f46294c
  • main default protected
  • feature/export-filtering
  • feature/clear-schedule-button
  • fix/responsive-cols-in-polls
  • feature/preference-polling-form
  • feature/json-export-via-rest-framework
  • feature/json-schedule-import-tests
  • fix/add-room-import-only-once
  • ak-import
  • renovate/django-simple-history-3.x
  • renovate/django-debug-toolbar-4.x
  • renovate/django-5.x
  • renovate/mysqlclient-2.x
14 results

serializers.py

Blame
  • Forked from KIF / AKPlanning
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    availabilities.js 4.50 KiB
    // This part of the code was adapted from pretalx (https://github.com/pretalx/pretalx)
    // Copyright 2017-2019, Tobias Kunze
    // Original Copyrights licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0
    // Changes are marked in the code
    document.addEventListener("DOMContentLoaded", function () {
        "use strict"
    
        $("input.availabilities-editor-data").each(function () {
            var data_field = $(this)
            var editor = $('<div class="availabilities-editor">')
            editor.attr("data-name", data_field.attr("name"))
            data_field.after(editor)
    
            function save_events() {
                data = {
                    availabilities: editor.fullCalendar("clientEvents").map(function (e) {
                        if (e.allDay) {
                            return {
                                start: e.start.format("YYYY-MM-DD HH:mm:ss"),
                                end: e.end.format("YYYY-MM-DD HH:mm:ss"),
                            }
                        } else {
                            return {
                                start: e.start.toISOString(),
                                end: e.end.toISOString(),
                            }
                        }
                    }),
                }
                data_field.attr("value", JSON.stringify(data))
            }
    
            var editable = !Boolean(data_field.attr("disabled"))
    
            var data = JSON.parse(data_field.attr("value"))
            var events = data.availabilities.map(function (e) {
                e.start = moment(e.start)//.tz(data.event.timezone)
                e.end = moment(e.end)//.tz(data.event.timezone)
    
                if (e.start.format("HHmmss") == 0 && e.end.format("HHmmss") == 0) {
                    e.allDay = true
                }
    
                return e
            })
            editor.fullCalendar({
                views: {
                    agendaVariableDays: {
                        type: "agenda",
                        duration: {
                            days:
                                moment(data.event.date_to).diff(
                                    moment(data.event.date_from),
                                    "days"
                                ) + 1,
                        },
                    },
                },
                defaultView: "agendaVariableDays",
                defaultDate: data.event.date_from,
                visibleRange: {
                    start: data.event.date_from,
                    end: data.event.date_to,
                },
                events: events,
                nowIndicator: false,
                navLinks: false,
                header: false,
                timeFormat: "H:mm",
                slotLabelFormat: "H:mm",
                scrollTime: "09:00:00",
                selectable: editable,
                selectHelper: true,
                select: function (start, end) {
                    var wasInDeleteMode = false
                    editor.fullCalendar("clientEvents").forEach(function (e) {
                        if (e.className.indexOf("delete") >= 0) {
                            wasInDeleteMode = true
                        }
                        e.className = ""
                        editor.fullCalendar("updateEvent", e)
                    })
    
                    if (wasInDeleteMode) {
                        editor.fullCalendar("unselect")
                        return
                    }
    
                    var eventData = {
                        start: start,
                        end: end,
                    }
                    editor.fullCalendar("renderEvent", eventData, true)
                    editor.fullCalendar("unselect")
                    save_events()
                },
                eventResize: save_events,
                eventDrop: save_events,
                editable: editable,
                selectOverlap: false,
                eventOverlap: false,
                eventColor: "#00DD00",
                eventClick: function (calEvent, jsEvent, view) {
                    if (!editable) {
                        return
                    }
    
                    if (calEvent.className.indexOf("delete") >= 0) {
                        editor.fullCalendar("removeEvents", function (searchEvent) {
                            return searchEvent._id === calEvent._id
                        })
                        save_events()
                    } else {
                        editor.fullCalendar("clientEvents").forEach(function (e) {
                            if (e._id == calEvent._id) {
                                e.className = "delete"
                            } else {
                                e.className = ""
                            }
                            editor.fullCalendar("updateEvent", e)
                        })
                    }
                },
            })
        })
    })