Commit 5f477232b9963c314c054552ca99c7338d2e947d

Authored by Felipe Bormann
1 parent 17776dcf

eased animations, improved tooltip of user bubble chart and worked on tag bubble chart

analytics/static/.sass-cache/01cecb7b42e56765f6ed49ed3c70281ebdc742c7/general.sassc 0 → 100644
No preview for this file type
analytics/static/analytics/general.css
... ... @@ -40,21 +40,19 @@
40 40 #most-used-tags-header h4 {
41 41 margin-left: 1%; }
42 42  
43   -.data-container {
44   - width: 80px;
45   - height: 40px; }
46   -
47 43 .tag-cloud {
48 44 border-radius: 25px;
49   - color: #ffffff;
50   - width: 80px; }
  45 + color: #ffffff; }
51 46  
52 47 .tag-name {
53 48 color: #ffffff;
54 49 font-size: 10px; }
55 50  
56 51 #left-data-selector {
57   - background: linear-gradient(#0e8999, #6bf0ce); }
  52 + background: linear-gradient(#0e8999, #6bf0ce);
  53 + margin-top: 5%;
  54 + padding-top: 3%;
  55 + padding-bottom: 2%; }
58 56  
59 57 .chart {
60 58 width: 30%;
... ... @@ -64,11 +62,11 @@
64 62  
65 63 .selector {
66 64 width: 90%;
67   - height: 20%;
  65 + height: 40px;
68 66 color: white;
69 67 padding-left: 5px;
70 68 background-color: #009688;
71   - margin-top: 10px;
  69 + margin-top: 5px;
72 70 border-radius: 0px 20px 20px 0px; }
73 71 .selector p {
74 72 padding-top: 10px;
... ... @@ -87,13 +85,31 @@
87 85 background-color: #52b7bd;
88 86 width: 80%;
89 87 margin-left: 2%;
90   - margin-top: 2%;
  88 + margin-top: 4%;
  89 + position: relative;
91 90 padding-left: 0;
92 91 color: white;
  92 + border: 2px solid #52b7bd;
93 93 transition: width 2s, height 2s, background-color 2s, transform 2s; }
94 94 .most-accessed-list li {
95 95 padding-left: 1%; }
96 96  
  97 +.most-accessed-list:after, .most-accessed-list:before {
  98 + bottom: 100%;
  99 + left: 50%;
  100 + border: solid transparent;
  101 + content: " ";
  102 + height: 0;
  103 + width: 0;
  104 + position: absolute;
  105 + pointer-events: none; }
  106 +
  107 +.most-accessed-list:before {
  108 + border-width: 12px;
  109 + margin-left: -50%;
  110 + border-color: rgba(136, 183, 213, 0);
  111 + border-bottom-color: #52b7bd; }
  112 +
97 113 .most-accessed-item:hover {
98 114 background-color: #3aa7ad; }
99 115  
... ...
analytics/static/analytics/general.css.map
1 1 {
2 2 "version": 3,
3   -"mappings": "AAEA,YAAY;EACR,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,KAAK,EAAE,IAAI;;AAEf,sBAAsB;EAClB,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,KAAK;EACd,yBAAE;IACE,KAAK,EAbC,OAAO;EAejB,yBAAE;IACE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IAEX,4BAAE;MACE,YAAY,EAAE,EAAE;MAChB,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,KAAK;MAEZ,yCAAY;QACR,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,IAAI;MAEvB,gCAAG;QACC,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,IAAI;;AAInC,sBAAsB;EAClB,UAAU,EAAE,2CAA2C;EACvD,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,GAAG;EAChB,UAAU,EAAE,IAAI;EAEhB,yBAAE;IACE,WAAW,EAAE,EAAE;;AAEvB,eAAe;EACX,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;;AAEhB,UAAU;EACN,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;EACd,KAAK,EAAE,IAAI;;AAIf,SAAS;EACL,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,IAAI;;AAGnB,mBAAmB;EACf,UAAU,EAAE,iCAAmC;;AAEnD,MAAM;EACF,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;EACX,SAAE;IACE,KAAK,EA1EC,OAAO;;AA4ErB,SAAS;EACL,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,GAAG;EACjB,gBAAgB,EAAE,OAAO;EACzB,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,iBAAiB;EAChC,WAAC;IACG,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;;AAInB,qBAAO;EACH,UAAU,EAAE,MAAM;;AAE1B,aAAa;EACT,UAAU,EAAE,iCAAkC;EAC9C,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,GAAG;;AAEhB,mBAAmB;EACf,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,EAAE;EACf,UAAU,EAAE,EAAE;EACd,YAAY,EAAE,CAAC;EACf,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,sDAAsD;EAElE,sBAAE;IACE,YAAY,EAAE,EAAE;;AAExB,yBAAyB;EACrB,gBAAgB,EAAE,OAAO",
  3 +"mappings": "AAEA,YAAY;EACR,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,KAAK,EAAE,IAAI;;AAEf,sBAAsB;EAClB,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,KAAK;EACd,yBAAE;IACE,KAAK,EAbC,OAAO;EAejB,yBAAE;IACE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IAEX,4BAAE;MACE,YAAY,EAAE,EAAE;MAChB,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,KAAK;MAEZ,yCAAY;QACR,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,IAAI;MAEvB,gCAAG;QACC,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,IAAI;;AAInC,sBAAsB;EAClB,UAAU,EAAE,2CAA2C;EACvD,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,GAAG;EAChB,UAAU,EAAE,IAAI;EAEhB,yBAAE;IACE,WAAW,EAAE,EAAE;;AAGvB,UAAU;EACN,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;;AAKlB,SAAS;EACL,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,IAAI;;AAGnB,mBAAmB;EACf,UAAU,EAAE,iCAAmC;EAC/C,UAAU,EAAE,EAAE;EACd,WAAW,EAAE,EAAE;EACf,cAAc,EAAE,EAAE;;AAEtB,MAAM;EACF,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;EACX,SAAE;IACE,KAAK,EA1EC,OAAO;;AA4ErB,SAAS;EACL,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,GAAG;EACjB,gBAAgB,EAAE,OAAO;EACzB,UAAU,EAAE,GAAG;EACf,aAAa,EAAE,iBAAiB;EAChC,WAAC;IACG,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;;AAInB,qBAAO;EACH,UAAU,EAAE,MAAM;;AAE1B,aAAa;EACT,UAAU,EAAE,iCAAkC;EAC9C,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,GAAG;;AAEhB,mBAAmB;EACf,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,EAAE;EACf,UAAU,EAAE,EAAE;EACd,QAAQ,EAAE,QAAQ;EAClB,YAAY,EAAE,CAAC;EACf,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,sDAAsD;EAElE,sBAAE;IACE,YAAY,EAAE,EAAE;;AAExB,qDAAqD;EACjD,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,IAAI;;AAGxB,0BAA0B;EACtB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,sBAAsB;EACpC,mBAAmB,EAAE,OAAO;;AAEhC,yBAAyB;EACrB,gBAAgB,EAAE,OAAO",
4 4 "sources": ["general.sass"],
5 5 "names": [],
6 6 "file": "general.css"
... ...
analytics/static/analytics/general.sass
... ... @@ -49,14 +49,11 @@ $title-color: #009688
49 49 h4
50 50 margin-left: 1%
51 51  
52   -.data-container
53   - width: 80px
54   - height: 40px
55 52  
56 53 .tag-cloud
57 54 border-radius: 25px
58 55 color: #ffffff
59   - width: 80px
  56 +
60 57  
61 58  
62 59  
... ... @@ -67,6 +64,9 @@ $title-color: #009688
67 64  
68 65 #left-data-selector
69 66 background: linear-gradient( #0e8999, #6bf0ce )
  67 + margin-top: 5%
  68 + padding-top: 3%
  69 + padding-bottom: 2%
70 70  
71 71 .chart
72 72 width: 30%
... ... @@ -76,11 +76,11 @@ $title-color: #009688
76 76  
77 77 .selector
78 78 width: 90%
79   - height: 20%
  79 + height: 40px
80 80 color: white
81 81 padding-left: 5px
82 82 background-color: #009688
83   - margin-top: 10px
  83 + margin-top: 5px
84 84 border-radius: 0px 20px 20px 0px
85 85 p
86 86 padding-top: 10px
... ... @@ -101,13 +101,32 @@ $title-color: #009688
101 101 background-color: #52b7bd
102 102 width: 80%
103 103 margin-left: 2%
104   - margin-top: 2%
  104 + margin-top: 4%
  105 + position: relative
105 106 padding-left: 0
106 107 color: white
  108 + border: 2px solid #52b7bd
107 109 transition: width 2s, height 2s, background-color 2s, transform 2s
108 110  
109 111 li
110 112 padding-left: 1%
111 113  
  114 +.most-accessed-list:after, .most-accessed-list:before
  115 + bottom: 100%
  116 + left: 50%
  117 + border: solid transparent
  118 + content: " "
  119 + height: 0
  120 + width: 0
  121 + position: absolute
  122 + pointer-events: none
  123 +
  124 +
  125 +.most-accessed-list:before
  126 + border-width: 12px
  127 + margin-left: -50%
  128 + border-color: rgba(136, 183, 213, 0)
  129 + border-bottom-color: #52b7bd
  130 +
112 131 .most-accessed-item:hover
113 132 background-color: #3aa7ad
114 133 \ No newline at end of file
... ...
analytics/static/analytics/js/behavior.js
... ... @@ -56,20 +56,13 @@ var selectors_options = {
56 56  
57 57 $(e).after(string_build);
58 58 var new_elem = $(e).next();
59   - new_elem.slideDown();
  59 + new_elem.slideDown({easing: 'easeInOutSine'}, 5000);
60 60 $(e).attr("opened", true);
61 61  
62 62 },
63 63 deleteChildren: function(e){
64   - console.log("delete children");
65 64 var most_accessed_list = $(e).next();
66   - $(most_accessed_list).animate(
67   - {height: 0,
68   - opacity: 0.1
69   - }, 1000, function(){
70   - $(this).remove(); //remove list from UI
71   - });
72   -
  65 + $(most_accessed_list).slideUp({easing: 'easeInOutSine'}, 1200);
73 66 $(e).removeAttr("opened"); //remove attribute so it can call API again
74 67 },
75 68 };
... ...
analytics/static/analytics/js/charts.js
... ... @@ -208,17 +208,17 @@ var charts = {
208 208  
209 209 groups.on("mouseover", function(d){
210 210 //$("#"+"user_tooltip_"+d['user_id']).show();
211   - tooltip_div.transition().duration(200).style("opacity", .9);
  211 + tooltip_div.transition().duration(500).style("opacity", .9);
212 212 tooltip_div.html(d['user'] + '</br>' + d['count'] + ' acessos')
213 213 .style("left", (d3.event.pageX) + "px")
214 214 .style("top", (d3.event.pageY - 28) + "px");
215   - console.log(d3.event.pageX);
216   - console.log(d3.event.pageY);
217 215 });
218 216  
219 217  
220 218 groups.on("mouseout", function(d){
221 219 //$("#"+"user_tooltip_"+d['user_id']).hide();
  220 + tooltip_div.transition().duration(500).style("opacity", 0);
  221 +
222 222 });
223 223  
224 224  
... ... @@ -253,7 +253,6 @@ var charts = {
253 253 simulation.nodes(dataset)
254 254 .on('tick', ticked); //so all data points are attached to it
255 255  
256   - console.log("finished simulation");
257 256 function ticked(){
258 257 groups.attr("transform", function(d){
259 258 return "translate(" + d.x + "," + d.y + ")";
... ... @@ -371,7 +370,6 @@ var charts = {
371 370 return maximum
372 371 }
373 372  
374   - console.log(dataset);
375 373  
376 374 var container_div = d3.select("#most-used-tags-body");
377 375 var svg = container_div.append("svg").attr("width", "100%").attr("height", height)
... ... @@ -394,7 +392,7 @@ var charts = {
394 392 return Math.floor(Math.random() * (max - min)) + min;
395 393 }
396 394  
397   - var xScale = d3.scaleSqrt().domain([min(), max()]).range([10,50]);
  395 + var xScale = d3.scaleSqrt().domain([min(), max()]).range([10,80]);
398 396 var tag_cloud = svg.selectAll('.tag-cloud-div')
399 397 .data(dataset)
400 398 .enter()
... ... @@ -409,7 +407,7 @@ var charts = {
409 407 return xScale(d['count'])*1.2;
410 408 })
411 409 .attr("height", function(d){
412   - return xScale(d["count"])*0.8;
  410 + return xScale(d["count"])*0.4;
413 411 })
414 412 .attr("fill", function(d, i) {
415 413 return color(getRandomInt(0,3));
... ... @@ -422,8 +420,12 @@ var charts = {
422 420 .text(function(d){
423 421 return d['name'];
424 422 })
425   - .attr("x", 20)
426   - .attr("y", 25)
  423 + .attr("x", function(d){
  424 + return xScale(d['count'])*0.2;
  425 + })
  426 + .attr("y", function(d){
  427 + return xScale(d["count"])*0.2;
  428 + })
427 429 .attr("class", "tag-name")
428 430 .attr("fill", "#ffffff");
429 431  
... ... @@ -432,7 +434,7 @@ var charts = {
432 434 .force("x", d3.forceX(width/2).strength(0.05))
433 435 .force("y", d3.forceY(height/2).strength(0.05))
434 436 .force("collide", d3.forceCollide(function(d){
435   - return 30;
  437 + return xScale(d['count'])*0.4;
436 438 }));
437 439  
438 440 //simulation
... ...
analytics/templates/analytics/category.html 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load static i18n pagination %}
  4 +{% load django_bootstrap_breadcrumbs %}
  5 +{% block style %}
  6 + <link rel="stylesheet" type="text/css" href="{% static 'analytics/general.css' %}">
  7 +{% endblock style %}
  8 +
  9 +{% block javascript %}
  10 + <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script>
  11 + <script type="text/javascript" src=" {% static "analytics/js/behavior.js" %} "></script>
  12 +{% endblock javascript %}
  13 +
  14 +{% block breadcrumbs %}
  15 + {{ block.super }}
  16 +
  17 + {% trans 'Analytics Category' as category %}
  18 +
  19 + {% breadcrumb category 'dashboard:view_general' %}
  20 +{% endblock %}
  21 +
  22 +
  23 +{% block content %}
  24 + test
  25 +{% endblock content %}
0 26 \ No newline at end of file
... ...
analytics/templates/analytics/general.html
... ... @@ -24,15 +24,17 @@
24 24 <section id="core-subjects-options-div">
25 25 <nav>
26 26 <ul class="core-subjects-options report-menu-choice">
27   - <li class="active">
28   - {% trans "Platform Report" %}
29   - </li>
30   - <li>
31   - {% trans "Category Report" %}
32   - </li>
33   - <li>
34   - {% trans "Subject Report" %}
35   - </li>
  27 +
  28 + <li class="active">
  29 + {% trans "Platform Report" %}
  30 + </li>
  31 + <li>
  32 + {% trans "Category Report" %}
  33 + </li>
  34 + <li>
  35 + {% trans "Subject Report" %}
  36 + </li>
  37 +
36 38 </ul>
37 39 </nav>
38 40 </section>
... ...
analytics/views.py
1 1 from django.shortcuts import render
2 2  
3   -# Create your views here.
4 3 from django.views import generic
5 4 from django.db.models import Count
  5 +from django.core.urlresolvers import reverse_lazy
6 6  
7 7 from subjects.models import Tag, Subject
8 8 from topics.models import Resource
... ... @@ -11,11 +11,19 @@ from django.http import HttpResponse, JsonResponse
11 11 from log.models import Log
12 12 import operator
13 13 from django.utils.translation import ugettext_lazy as _
  14 +from django.shortcuts import render, get_object_or_404, redirect
14 15  
15 16  
16 17 class GeneralView(generic.TemplateView):
17 18 template_name = "analytics/general.html"
18 19  
  20 + def dispatch(self, request, *args, **kwargs):
  21 +
  22 + if not request.user.is_staff:
  23 + self.template_name = "analytics/category.html"
  24 + return super(GeneralView, self).dispatch(request, *args, **kwargs)
  25 +
  26 +
19 27 def get_context_data(self, **kwargs):
20 28 context = {}
21 29  
... ... @@ -72,7 +80,7 @@ def most_accessed_subjects(request):
72 80  
73 81 #order the values of the dictionary by the count in descendent order
74 82 subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True )
75   - subjects = subjects[:30]
  83 + subjects = subjects[:5]
76 84  
77 85 return JsonResponse(subjects, safe=False)
78 86  
... ...