Source Code

/ ssg / src / repository / views.py

from django.shortcuts import get_object_or_404, render
from django.conf import settings

from repository.models import File
from repository.navigation import breadcrumbs
from repository.tree import get_children_of

def code_file(request, file_path):
    file_path = file_path.strip('/')
    file = get_object_or_404(File, path=file_path)

    expanded_dirs = []

    if file.is_directory:
        current = file.path
    else:
        current = file.parent_path

    while current:
        expanded_dirs.append(current)
        parent_file = File.objects.filter(path=current).first()
        if parent_file:
            current = parent_file.parent_path
        else:
            current = None

    if file.is_directory:
        dir_files = get_children_of(file.path).order_by("-is_directory", "name")
        return render(
            request,
            "repository/code_file.html",
            {
                "is_directory": True,
                "file": file,
                "files": dir_files,
                "expanded_dirs": expanded_dirs,
                "is_repo_page": True,
                "breadcrumbs": breadcrumbs(file.path),
            }
        )
    else:
        return render(
            request,
            "repository/code_file.html",
            {
                "is_directory": False,
                "file": file,
                "files": None,
                "expanded_dirs": expanded_dirs,
                "is_repo_page": True,
                "breadcrumbs": breadcrumbs(file.path),
            }
        )


def code_file_index(request):
    files = get_children_of(None).order_by("-is_directory", "name")

    return render(
        request,
        "repository/code_file.html",
        {
            "is_directory": True,
            "file": None,
            "files": files,
            "expanded_dirs": [],
            "is_repo_page": True,
            "repo_name": settings.REPO_NAME,
        }
    )