From 57eedfbebc481aab4040ecda57d23eabf828733f Mon Sep 17 00:00:00 2001 From: Jayaram Pai Date: Wed, 4 Dec 2013 00:00:26 +0530 Subject: basic filter and ajax-loader --- static/website/css/main.css | 57 ++++++++++---------- static/website/js/custom.js | 8 +++ static/website/templates/base.html | 3 +- static/website/templates/filter.html | 86 ++++++++++++++++++++++++++++++ static/website/templates/get-question.html | 74 +++++++++++++++++++++++++ static/website/templates/index.html | 30 ++++++++--- static/website/templates/new-question.html | 6 ++- website/forms.py | 4 ++ website/models.py | 1 - website/urls.py | 1 + website/views.py | 51 +++++++++++++++--- 11 files changed, 273 insertions(+), 48 deletions(-) create mode 100644 static/website/templates/filter.html create mode 100644 static/website/templates/get-question.html diff --git a/static/website/css/main.css b/static/website/css/main.css index 315845d..cd42d84 100644 --- a/static/website/css/main.css +++ b/static/website/css/main.css @@ -16,55 +16,52 @@ padding: 15px 0 15px 0; border-bottom: 1px solid #f5f5f5; } -#content .question .title { +#content .question .title a{ padding: 0 0 7px 0; font-size: 1.3em; color: #424242; } -#content .question .title a { - color: #424242; -} -#content .question .category { - padding: 2px 5px; +#content .question .category a, +#content .question .tutorial a, +#content .question .minute_range a, +#content .question .second_range a { + padding: 3px 5px; margin: 0 10px 0 0; - background: #a26dc8; - color: #ffffff; -webkit-border-radius: 3px; -moz-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } -#content .question .tutorial { - padding: 2px 5px; - margin: 0 10px 0 0; +#content .question .category a { + background: #a26dc8; + color: #ffffff; +} +#content .question .tutorial a { background: #424242; color: #ffffff; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; } -#content .question .minute_range { - padding: 2px 5px; - margin: 0 10px 0 0; +#content .question .minute_range a { background: #f5f5f5; color: #424242; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; } -#content .question .second_range { - padding: 2px 5px; - margin: 0 10px 0 0; +#content .question .second_range a { background: #f5f5f5; color: #424242; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; } - +#content .reply { + position: relative; + border-bottom: 1px solid #f5f5f5; + padding: 25px 0; +} +#content .reply .body { +} +#content .reply .user { + position: absolute; + right: 0px; + bottom: 0px; + padding: 2px 7px; + background: #f5f5f5; +} #footer-wrapper { background-color: #2d2d2d; min-height: 60px; diff --git a/static/website/js/custom.js b/static/website/js/custom.js index 20801f6..ef0752e 100644 --- a/static/website/js/custom.js +++ b/static/website/js/custom.js @@ -41,4 +41,12 @@ $(document).ready(function() { } }); }); + + $(document).ajaxStart(function() { + $("#ajax-loader").show(); + }); + + $(document).ajaxStop(function() { + $("#ajax-loader").hide(); + }); }); diff --git a/static/website/templates/base.html b/static/website/templates/base.html index f89417f..8d95162 100644 --- a/static/website/templates/base.html +++ b/static/website/templates/base.html @@ -24,7 +24,8 @@ {% endfor %} {% endblock %} diff --git a/static/website/templates/new-question.html b/static/website/templates/new-question.html index 5005e13..81da5cf 100644 --- a/static/website/templates/new-question.html +++ b/static/website/templates/new-question.html @@ -1,4 +1,5 @@ {% extends 'website/templates/base.html' %} +{% load static %} {% load widget_tweaks %} {% block content %}

@@ -9,7 +10,10 @@
{% csrf_token %} {% with WIDGET_ERROR_CLASS='field_error' %} -

Please enter the tutorial details.

+

+ Please enter the tutorial details. + +

{% render_field form.category class+="form-control"%} diff --git a/website/forms.py b/website/forms.py index 00b0cfe..44ce323 100644 --- a/website/forms.py +++ b/website/forms.py @@ -69,3 +69,7 @@ class NewQuestionForm(forms.Form): second_range = forms.CharField(widget=forms.Select(choices=seconds)) title = forms.CharField(max_length=200) body = forms.CharField(widget=forms.Textarea()) + +class ReplyQuesitionForm(forms.Form): + question = forms.IntegerField(widget=forms.HiddenInput()) + body = forms.CharField(widget=forms.Textarea()) diff --git a/website/models.py b/website/models.py index 7a3072a..004ef3c 100644 --- a/website/models.py +++ b/website/models.py @@ -15,7 +15,6 @@ class Question(models.Model): class Reply(models.Model): user = models.ForeignKey(User) question = models.ForeignKey(Question) - title = models.CharField(max_length=200) body = models.TextField() date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) diff --git a/website/urls.py b/website/urls.py index bad4e34..81d61d5 100644 --- a/website/urls.py +++ b/website/urls.py @@ -3,6 +3,7 @@ from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^$', 'website.views.home', name='home'), url(r'^question/(?P\d+)/$', 'website.views.get_question', name='get_question'), + url(r'^question-reply/$', 'website.views.question_reply', name='question_reply'), url(r'^filter/(?P[^/]+)/$', 'website.views.filter', name='filter'), url(r'^filter/(?P[^/]+)/(?P[^/]+)/$', 'website.views.filter', name='filter'), url(r'^filter/(?P[^/]+)/(?P[^/]+)/(?P[^/]+)/$', 'website.views.filter', name='filter'), diff --git a/website/views.py b/website/views.py index fea9855..d8c4012 100644 --- a/website/views.py +++ b/website/views.py @@ -3,9 +3,10 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.core.context_processors import csrf from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.decorators import login_required +from django.db.models import Q from website.models import Question, Reply, TutorialDetails, TutorialResources -from website.forms import NewQuestionForm +from website.forms import NewQuestionForm, ReplyQuesitionForm from website.helpers import get_video_info categories = [ @@ -26,7 +27,7 @@ categories = [ ] def home(request): - questions = Question.objects.all() + questions = Question.objects.all().order_by('date_created').reverse()[:10] context = { 'questions': questions } @@ -35,15 +36,49 @@ def home(request): def get_question(request, question_id=None): question = get_object_or_404(Question, id=question_id) replies = question.reply_set.all() + form = ReplyQuesitionForm() context = { 'question': question, - 'replies': replies + 'replies': replies, + 'form': form } - return render_to_response('website/templates/get_question.html', context) + context.update(csrf(request)) + return render_to_response('website/templates/get-question.html', context) + +def question_reply(request): + if request.method == 'POST': + form = ReplyQuesitionForm(request.POST) + if form.is_valid(): + cleaned_data = form.cleaned_data + qid = cleaned_data['question'] + body = cleaned_data['body'] + question = get_object_or_404(Question, id=qid) + reply = Reply() + reply.user = request.user + reply.question = question + reply.body = body + reply.save() + return HttpResponseRedirect('/question/'+str(qid)) + +def filter(request, category=None, tutorial=None, minute_range=None, second_range=None): + context = {} + if category and tutorial and minute_range and second_range: + questions = Question.objects.filter(category=category).filter(tutorial=tutorial).filter(minute_range=minute_range).filter(second_range=second_range) + elif tutorial is None: + questions = Question.objects.filter(category=category) + elif minute_range is None: + questions = Question.objects.filter(category=category).filter(tutorial=tutorial) + else: #second_range is None + questions = Question.objects.filter(category=category).filter(tutorial=tutorial).filter(minute_range=minute_range) + + if 'qid' in request.GET: + qid = request.GET['qid'] + question = get_object_or_404(Question, id=qid) + context['question'] = question + questions = questions.filter(~Q(id=qid)) -def filter(request, category='', tutorial='', minute_range='', second_range=''): - res = category + '
' + tutorial + '
' + minute_range + '
' + second_range - return HttpResponse(res) + context['questions'] = questions + return render_to_response('website/templates/filter.html', context) @login_required def new_question(request): @@ -60,7 +95,7 @@ def new_question(request): question.title = cleaned_data['title'] question.body = cleaned_data['body'] question.save() - return HttpResponse('atlast :>') + return HttpResponseRedirect('/') else: form = NewQuestionForm() -- cgit