Files @ 09a4b021c1f5
Branch filter:

Location: website/www/conservancy/static/views.py

Bradley M. Kuhn
Repair menu highlighting, both for main menu and submenus

During the recent improvements made on the website, the menus and
submenu highlighting for selected menus fell into disarray.
Correction requires changes to the CSS and templates both, because
Django doesn't really have a convenient way to set variables in
templates to use to solve this.

There are still a few submenu items highlighting not working even
after this commit. More work needs to be done.
import mimetypes
import os.path
from django.http import HttpResponse
from django.template.response import TemplateResponse

from conservancy.apps.fundgoal.models import FundraisingGoal
from conservancy.local_context_processors import fundgoal_lookup

STATIC_ROOT = os.path.abspath(os.path.dirname(__file__))
FILESYSTEM_ENCODING = 'utf-8'

def handler(request, errorcode):
    path = os.path.join('error', str(errorcode), 'index.html')
    fullpath = os.path.join(STATIC_ROOT, path)
    if not os.path.exists(fullpath):
        return HttpResponse("Internal error: " + path, status=int(errorcode))
    else:
        return TemplateResponse(request, path, status=int(errorcode))

def handler401(request):
    return handler(request, 401)

def handler403(request):
    return handler(request, 403)

def handler404(request):
    return handler(request, 404)

def handler500(request):
    return handler(request, 500)

def index(request, *args, **kwargs):
    path = request.path.lstrip(u'/')
    if path.endswith(u'/'):
        path += u'index.html'
    try:
        path_bytes = path.encode(FILESYSTEM_ENCODING)
    except UnicodeEncodeError:
        # If the path can't be expressed on the filesystem, it must not exist.
        return handler404(request)
    fullpath = os.path.join(STATIC_ROOT, path_bytes)
    if not os.path.exists(fullpath):
        return handler404(request)
    content_type, _ = mimetypes.guess_type(path)
    if content_type != 'text/html':
        return HttpResponse(open(fullpath, 'rb'), content_type)
    else:
        context = kwargs.copy()
        try:
            context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought'])
        except KeyError:
            pass
        return TemplateResponse(request, path, context)

def debug(request):
    path = request.get_full_path()
    path = path.lstrip('/')
    return HttpResponse("Hello, static world: " + path)