Source Code

/ src / repository / views.py

from django.shortcuts import get_object_or_404, render
from repository.models import File

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 = File.get_files_in_directory(file_path)
        return render(
            request,
            "repository/code_file.html",
            {
                "is_directory": True,
                "file": file,
                "files": dir_files,
                "current_path": file_path,
                "expanded_dirs": expanded_dirs,
                "is_repo_page": True
            }
        )
    else:
        return render(
            request,
            "repository/code_file.html",
            {
                "is_directory": False,
                "file": file,
                "files": None,
                "current_path": file_path,
                "expanded_dirs": expanded_dirs,
                "is_repo_page": True
            }
        )

def code_file_index(request):
    """Handle root directory listing"""
    root_files = File.get_files_in_directory(None)

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