소스 검색

Page template for individual counter, improvments in display

Denis Merigoux 9 년 전
부모
커밋
b9c4435c7f
5개의 변경된 파일121개의 추가작업 그리고 42개의 파일을 삭제
  1. 5 0
      counter/templates/baseTemplate.html
  2. 44 37
      counter/templates/counterTemplate.html
  3. 53 0
      counter/templates/homeTemplate.html
  4. 2 1
      counter/urls.py
  5. 17 4
      counter/views.py

+ 5 - 0
counter/templates/baseTemplate.html

@@ -17,6 +17,11 @@
17 17
 			overflow: auto;
18 18
 			margin-bottom: 15px;
19 19
 		}
20
+
21
+		.graphs > div {
22
+			display: block;
23
+			margin: 0 auto;
24
+		}
20 25
 	</style>
21 26
 
22 27
 	<script type="text/javascript" src="https://www.google.com/jsapi"></script>

+ 44 - 37
counter/templates/counterTemplate.html

@@ -1,42 +1,49 @@
1 1
 {% extends 'baseTemplate.html' %} {% block title %}Compteurs{% endblock %} {% block content %}
2 2
 <div class="text-center">
3
-	<h1>Compteurs de seum</h1>
3
+  <h1>{{counter.trigramme}}</h1>
4 4
 </div>
5 5
 <div class="container-fluid">
6
-	<div class="row">
7
-		{% for counter in counters %}
8
-		<div class="col-md-4 col-sm-6 col-lg-3">
9
-			<div class="panel panel-primary">
10
-				<div class="panel-heading">
11
-					<h2 class="panel-title">{{ counter.trigramme }} <small>{{ counter.name }}</small></h2>
12
-				</div>
13
-				<div class="seum-counter panel-body">
14
-					{% if counter.lastReset.noSeum  %}
15
-					<strong>N'a pas encore eu le seum.</strong>
16
-					<br> {% else %}
17
-					<strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
18
-					<br> {% endif %}
6
+  <div class="row">
7
+    <div class="col-md-4 col-sm-6 col-lg-3">
8
+      <div class="panel panel-primary">
9
+        <div class="panel-heading">
10
+          <h2 class="panel-title">{{ counter.name }}</h2>
11
+        </div>
12
+        <div class="seum-counter panel-body">
13
+          {% if counter.lastReset.noSeum %}
14
+          <strong>N'a pas encore eu le seum.</strong>
15
+          <br> {% else %}
16
+          <strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
17
+          <br> {% endif %}
19 18
 
20
-					<p>{{ counter.lastReset.reason }}</p>
21
-					<div class="text-center">
22
-						<button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
23
-					</div>
24
-					<form style="display:none" id="counter{{counter.id}}" action="/reset-counter/" method="post">
25
-						{% csrf_token %}
26
-						<div class="form-group">
27
-							<label for="reason">Motif du seum :</label>
28
-							<textarea class="form-control" name="reason"></textarea>
29
-						</div>
30
-						<input type="hidden" name="counter" value="{{counter.id}}"></input>
31
-						<div class="text-center">
32
-							<button type="submit" class="btn btn-default btn-success">Foutre le seum</button>
33
-						</div>
34
-					</form>
35
-				</div>
36
-			</div>
37
-		</div>
38
-		{% endfor %}
39
-	</div>
40
-			{{ chart.as_html }}
41
-	</div>
42
-	{% endblock %}
19
+          <p>{{ counter.lastReset.reason }}</p>
20
+          <div class="text-center">
21
+            <button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
22
+          </div>
23
+          <form style="display:none" id="counter{{counter.id}}" action="/reset-counter/" method="post">
24
+            {% csrf_token %}
25
+            <div class="form-group">
26
+              <label for="reason">Motif du seum :</label>
27
+              <textarea class="form-control" name="reason"></textarea>
28
+            </div>
29
+            <input type="hidden" name="counter" value="{{counter.id}}"></input>
30
+            <div class="text-center">
31
+              <button type="submit" class="btn btn-default btn-success">Foutre le seum</button>
32
+            </div>
33
+          </form>
34
+        </div>
35
+      </div>
36
+    </div>
37
+    <div class="col-md-8 col-sm-6 col-lg-9">
38
+      <div class="panel panel-default">
39
+        <div class="panel-heading">
40
+          <h2 class="panel-title">Timeline du seum</h2>
41
+        </div>
42
+        <div class="seum-counter panel-body">
43
+          Salut !
44
+        </div>
45
+      </div>
46
+    </div>
47
+  </div>
48
+</div>
49
+{% endblock %}

+ 53 - 0
counter/templates/homeTemplate.html

@@ -0,0 +1,53 @@
1
+{% extends 'baseTemplate.html' %} {% block title %}Compteurs{% endblock %} {% block content %}
2
+<div class="text-center">
3
+	<h1>Compteurs de seum</h1>
4
+</div>
5
+<div class="container-fluid">
6
+	<div class="row">
7
+		{% for counter in counters %}
8
+		<div class="col-md-4 col-sm-6 col-lg-3">
9
+			<div class="panel panel-primary">
10
+				<div class="panel-heading">
11
+					<h2 class="panel-title">{{ counter.trigramme }} <small>{{ counter.name }}</small></h2>
12
+				</div>
13
+				<div class="seum-counter panel-body">
14
+					{% if counter.lastReset.noSeum %}
15
+					<strong>N'a pas encore eu le seum.</strong>
16
+					<br> {% else %}
17
+					<strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
18
+					<br> {% endif %}
19
+
20
+					<p>{{ counter.lastReset.reason }}</p>
21
+					<div class="text-center">
22
+						<button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
23
+					</div>
24
+					<form style="display:none" id="counter{{counter.id}}" action="/reset-counter/" method="post">
25
+						{% csrf_token %}
26
+						<div class="form-group">
27
+							<label for="reason">Motif du seum :</label>
28
+							<textarea class="form-control" name="reason"></textarea>
29
+						</div>
30
+						<input type="hidden" name="counter" value="{{counter.id}}"></input>
31
+						<div class="text-center">
32
+							<button type="submit" class="btn btn-default btn-success">Foutre le seum</button>
33
+						</div>
34
+					</form>
35
+				</div>
36
+			</div>
37
+		</div>
38
+		{% endfor %}
39
+	</div>
40
+	<div class="row">
41
+		<div class="col-sm-12">
42
+			<div class="panel panel-default">
43
+				<div class="panel-heading">
44
+					<h2 class="panel-title">Graphe du seum</h2>
45
+				</div>
46
+				<div class="panel-body graphs">
47
+					{{ chart.as_html }}
48
+				</div>
49
+			</div>
50
+		</div>
51
+	</div>
52
+</div>
53
+{% endblock %}

+ 2 - 1
counter/urls.py

@@ -4,5 +4,6 @@ from . import views
4 4
 
5 5
 urlpatterns = [
6 6
     url(r'^$', views.home,name='home'),
7
-    url(r'^reset-counter/',views.resetCounter,name='reset-counter')
7
+    url(r'^reset-counter/',views.resetCounter,name='reset-counter'),
8
+    url(r'^counter/(?P<id_counter>\d+)$', views.counter, name='counter'),
8 9
 ]

+ 17 - 4
counter/views.py

@@ -34,15 +34,15 @@ def home(request):
34 34
             lastResets.append([counter.trigramme,(counter.lastReset.delta.total_seconds())/(24*3600)])
35 35
             if (counter.lastReset.delta.total_seconds())/(24*3600) > maxJSS:
36 36
                 maxJSS = (counter.lastReset.delta.total_seconds())/(24*3600)
37
-            counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr')
37
+            counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
38 38
         counter.isHidden = "hidden"
39 39
     counters = sorted(counters,key=lambda t: -t.lastReset.delta)
40 40
     #Generate graph
41 41
     lastResets.sort(key=lambda x: (x[1],x[0]))
42 42
     lastResets.insert(0,['Trigramme','Jours sans seum'])
43 43
     data = SimpleDataSource(lastResets)
44
-    chart = gchart.ColumnChart(data,options={'title' : 'Graphe du seum', 'legend' : 'none','vAxis' : { 'viewWindow' : { 'max' : max(maxJSS,1) , 'min' : 0} , 'ticks' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14],'title' : 'Jours sans seum' }, 'hAxis' : {'title' : 'Trigramme' }})
45
-    return render(request,'counterTemplate.html', {'counters' : counters, 'chart' : chart})
44
+    chart = gchart.ColumnChart(data,options={'title' : '', 'legend' : 'none','vAxis' : { 'viewWindow' : { 'max' : max(maxJSS,1) , 'min' : 0} , 'ticks' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14],'title' : 'Jours sans seum' }, 'hAxis' : {'title' : 'Trigramme' }})
45
+    return render(request,'homeTemplate.html', {'counters' : counters, 'chart' : chart})
46 46
 
47 47
 def resetCounter(request):
48 48
     #Update Form counter
@@ -50,7 +50,6 @@ def resetCounter(request):
50 50
         # create a form instance and populate it with data from the request:
51 51
         data = dict(request.POST)
52 52
         counter =  Counter.objects.get(pk=int(data['counter'][0]))
53
-        print(counter)
54 53
         reset = Reset()
55 54
         reset.counter = counter
56 55
         reset.reason = data['reason'][0]
@@ -58,3 +57,17 @@ def resetCounter(request):
58 57
         reset.save()
59 58
         # check whether it's valid
60 59
     return HttpResponseRedirect('/')
60
+
61
+def counter(request, id_counter):
62
+    counter = Counter.objects.get(pk=id_counter)
63
+    lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
64
+    if (lastReset.count() == 0):
65
+        counter.lastReset = Reset()
66
+        counter.lastReset.delta = timezero
67
+        counter.lastReset.noSeum = True
68
+    else:
69
+        counter.lastReset = lastReset[0]
70
+        counter.lastReset.noSeum = False
71
+        counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
72
+
73
+    return render(request,'counterTemplate.html', { 'counter' : counter})