HarvardX / wiki / encyclopedia / views.py
views.py
Raw
from django.shortcuts import render
from markdown2 import markdown
import django.utils.html as html
from django import forms
from django.http import HttpResponseRedirect
from django.urls import reverse
import random

from . import util

class NewPage(forms.Form):
    title = forms.CharField(label="Title")
    content = forms.CharField(widget=forms.Textarea(), label="Markdown Content")

class EditPage(forms.Form):
    newContent = forms.CharField(widget=forms.Textarea(), label="Edit Markdown Content")

def index(request):
    return render(request, "encyclopedia/index.html", {
        "entries": util.list_entries()
    })

def wiki(request, entry):
    wiki_body = util.get_entry(entry)

    if wiki_body == None:
        return render(request, "encyclopedia/error.html", {
            "error_message": html.format_html("<h1> ERROR: Not Found </h1>")
        })
    else:
        return render(request, "encyclopedia/wiki.html", {
            "wiki_entry": entry,
            "wiki_body": html.format_html(markdown(wiki_body))
        })
    
def new(request):
    if request.method == "POST":
        form = NewPage(request.POST)
        if form.is_valid():
            title = form.cleaned_data["title"]

            if title in util.list_entries():
                return render(request, "encyclopedia/error.html", {
                    "error_message": html.format_html("<h1> ERROR: Entry Already Exists </h1>")
                })

            content = form.cleaned_data["content"]
            util.save_entry(title, content)
            return HttpResponseRedirect("/wiki/" + title)
        else:
            return render(request, "encyclopedia/new.html", {
                "form": form
            })
    else:
        return render(request, "encyclopedia/new.html", {
            "form": NewPage()
        })

def randomPage(request):
    wiki_entry = random.choice(util.list_entries())
    return HttpResponseRedirect("/wiki/" + wiki_entry)

def searchPage(request):
    if request.method == "POST":
        q = request.POST.get('q')
        wiki_body = util.get_entry(q)

        if wiki_body == None:
            searchResults = []
            empty_list =  []
            for entry in util.list_entries():
                if q in entry:
                    searchResults.append(entry)

            return render(request, "encyclopedia/search.html", {
                "entries": searchResults,
            })
        else:
            return HttpResponseRedirect("/wiki/" + q)

def editPage(request, entry):
    wiki_body = util.get_entry(entry)

    if wiki_body == None:
        return render(request, "encyclopedia/error.html", {
            "error_message": html.format_html("<h1> ERROR: Entry Does Not Exist </h1>")
        })

    if request.method == "POST":
            newContent = request.POST.get('newContent')
            util.save_entry(entry, newContent)
            return HttpResponseRedirect("/wiki/" + entry)
    else:
        return render(request, "encyclopedia/edit.html", {
            "entry": entry,
            "old_content": wiki_body
        })