Commit 780ddd533c22893e9d903531744c3550718b79d3

Authored by Zambom
1 parent 369dc542

Adding admin home content with infinite scroll. [Issue: #45]

app/templates/home.html
... ... @@ -2,11 +2,59 @@
2 2  
3 3 {% load static i18n django_bootstrap_breadcrumbs permission_tags %}
4 4  
5   -{% block breadcrumbs %}
  5 +{% block javascript %}
  6 + <script type="text/javascript">
  7 + var pageNum = {{ page_obj.number }}; // The latest page loaded
  8 + var hasNextPage = {{ paginator.num_pages }}; // Indicates whether to expect another page after this one
  9 + var baseUrl = '{% url "app:index" %}';
  10 +
  11 + // loadOnScroll handler
  12 + var loadOnScroll = function() {
  13 + // If the current scroll position is past out cutoff point...
  14 + if ($(window).scrollTop() > $(document).height() - ($(window).height()*3)) {
  15 + // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row
  16 + $(window).unbind();
  17 + // execute the load function below that will visit the JSON feed and stuff data into the HTML
  18 + loadItems();
  19 + }
  20 + };
  21 +
  22 + var loadItems = function() {
  23 + // If the next page doesn't exist, just quit now
  24 + if (pageNum == hasNextPage) {
  25 + return false
  26 + }
  27 + // Update the page number
  28 + pageNum = pageNum + 1;
6 29  
  30 + $("#loading").show();
  31 + // Configure the url we're about to hit
  32 + setTimeout(function (){
  33 + $.ajax({
  34 + url: baseUrl,
  35 + data: {'page': pageNum},
  36 + success: function(data) {
  37 + $("#loading").hide();
  38 +
  39 + $("#timeline").append(data);
  40 + },
  41 + complete: function(data, textStatus){
  42 + // Turn the scroll monitor back on
  43 + $(window).bind('scroll', loadOnScroll);
  44 + }
  45 + });
  46 + }, 1000)
  47 + };
  48 +
  49 + $(document).ready(function(){
  50 + $(window).bind('scroll', loadOnScroll);
  51 + });
  52 + </script>
  53 +{% endblock %}
  54 +
  55 +{% block breadcrumbs %}
7 56 {% clear_breadcrumbs %}
8 57 {% breadcrumb 'Home' 'app:index' %}
9   -
10 58 {% endblock %}
11 59  
12 60 {% block render_breadcrumbs %}
... ... @@ -45,7 +93,7 @@
45 93 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
46 94 {% endif %}
47 95 {% if user|has_role:'system_admin, professor' %}
48   - <li> <a href="../../course/home_course.html">{% trans 'Manage Courses' %}</a></li>
  96 + <li> <a href="{% url 'course:manage' %}">{% trans 'Manage Courses' %}</a></li>
49 97 {% endif %}
50 98 </ul>
51 99 </div>
... ... @@ -53,27 +101,18 @@
53 101 {% endblock %}
54 102  
55 103 {% block content %}
56   - <h3>{% trans 'Courses' %}</h3>
57   - {% if courses|length > 0 %}
58   - {% for course in courses %}
59   - <a href="{% url 'course:view' course.slug %}">
60   - <div class="panel panel-default courseHome">
61   - <div class="panel-body">
62   - <p>{{ course }}</p>
63   - </div>
64   - <div class="panel-footer">
65   - <ul>
66   - <li>{% trans 'Students:' %} 5</li>
67   - <li>{% trans 'Beginning:' %} {{ course.init_date }}</li>
68   - <li>{% trans 'End:' %} {{ course.end_date }}</li>
69   - </ul>
70   - </div>
71   - </div>
72   - </a>
73   - {% endfor %}
74   - {% else %}
75   - <p>{% trans "You didn't create any course yet." %}</p>
  104 + {% if user|has_role:'system_admin' %}
  105 + <h3>{% trans 'Courses' %}</h3>
76 106 {% endif %}
  107 +
  108 + <div id="timeline">
  109 + {% include page_template %}
  110 + </div>
  111 + <div id="loading" class="alert alert-primary" role="alert">
  112 + <center>
  113 + <span class="fa fa-spin fa-circle-o-notch"></span>
  114 + </center>
  115 + </div>
77 116 {% endblock %}
78 117  
79 118 {% block rightbar %}
... ...
app/templates/home_admin_content.html 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +{% load i18n %}
  2 +
  3 +{% for course in courses %}
  4 + <div class="panel panel-default courseHome">
  5 + <div class="panel-body">
  6 + <p>{{ course }}</p>
  7 + </div>
  8 + <div class="panel-footer">
  9 + <ul>
  10 + <li>{% trans 'Students' %}: {{ course.max_students }}</li>
  11 + <li>{% trans 'Beginning' %}: {{ course.init_date }}</li>
  12 + <li>{% trans 'End' %}: {{ course.end_date }}</li>
  13 + </ul>
  14 + </div>
  15 + <button type="button" class="btn btn-outline-info">{% trans 'Edit' %}</button>
  16 + </div>
  17 +{% endfor %}
0 18 \ No newline at end of file
... ...
app/views.py
1 1 from django.shortcuts import render
2   -from django.views.generic import TemplateView
  2 +from django.views.generic import ListView
3 3 from django.contrib.auth.mixins import LoginRequiredMixin
4 4 from django.core.urlresolvers import reverse_lazy
5 5 from core.mixins import LogMixin, NotificationMixin
... ... @@ -7,32 +7,42 @@ from core.models import Notification, Action, Resource, Action_Resource
7 7 from users.models import User
8 8 from courses.models import Course
9 9  
10   -class AppIndex(LoginRequiredMixin, LogMixin, TemplateView, NotificationMixin):
  10 +class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin):
11 11 log_action = "Acessar"
12 12 log_resource = "Home"
13   - login_url = reverse_lazy("core:home")
  13 +
  14 + login_url = reverse_lazy("core:home")
14 15 redirect_field_name = 'next'
  16 +
15 17 template_name = "home.html"
  18 + context_object_name = 'courses'
  19 + paginate_by = 3
16 20  
17 21 not_action = "Acessar"
18 22 not_resource = "home"
19 23  
20   - def render_to_response(self, context, **response_kwargs):
21   - context = {}
22   -
23   - if self.request.user.type_profile == 2:
24   - template = "home_student.html"
25   - context['courses'] = Course.objects.filter(user = self.request.user)
  24 + def get_queryset(self):
  25 + if self.request.user.is_staff:
  26 + objects = Course.objects.all()
26 27 else:
27   - template = self.get_template_names()
28   - context['courses'] = Course.objects.filter(user = self.request.user)
  28 + objects = Notification.objects.filter(user = self.request.user)
  29 +
  30 + return objects
29 31  
  32 + def render_to_response(self, context, **response_kwargs):
  33 + if self.request.user.is_staff:
  34 + context['page_template'] = "home_admin_content.html"
  35 +
30 36 context['title'] = 'Amadeus'
  37 +
  38 + if self.request.is_ajax():
  39 + self.template_name = "home_admin_content.html"
  40 +
31 41 #super(AppIndex, self).createNotification("teste", not_resource="home", resource_link="users")
32 42  
33 43 notifications = Notification.objects.filter(user= self.request.user, read=False)
34 44 context['notifications'] = notifications
35 45  
36   - return self.response_class(request = self.request, template = template, context = context, using = self.template_engine, **response_kwargs)
  46 + return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs)
37 47  
38 48  
... ...
core/templates/base.html
... ... @@ -32,9 +32,7 @@
32 32 </script>
33 33 <script src="{% static 'js/base/header.js'%}"></script>
34 34 <!--Javascript block for specific-app ones -->
35   - {% block javascript %}
36   -
37   - {% endblock %}
  35 +
38 36 </head>
39 37 <body>
40 38 <div class="container-fluid">
... ... @@ -144,5 +142,9 @@
144 142 </div>
145 143 </div>
146 144 </div>
  145 +
  146 + {% block javascript %}
  147 +
  148 + {% endblock %}
147 149 </body>
148 150 </html>
... ...