Repository: vas3k/vas3k.club

Issue:
Визуализировать результаты батлов
<img width="1113" alt="image" src="https://user-images.githubusercontent.com/19980512/81127819-1f135780-8f48-11ea-83bc-7c56e6e849e4.png">

Было бы круто как-то визуализировать полоску в зависимости от результатов баттла. Чтобы такой раз — и увидел результат, а не подсчитывал, где больше аргументов и плюсов


Discussion:
В заголовок это запихать будет тяжело, но вот под постом рисовать какую-то статистику — я за. Вопрос в том как и кто продумает там UI :)
У меня в голове была двигающаяся полоска вот как в заголовке, только отдельная)

Фёдор

> On 6 May 2020, at 13:34, Vasily Zubarev <notifications@github.com> wrote:
> 
> ﻿
> В заголовок это запихать будет тяжело, но вот под постом рисовать какую-то статистику — я за. Вопрос в том как и кто продумает там UI :)
> 
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub, or unsubscribe.

Как насчёт чего-то такого?
![Bildschirmfoto 2020-05-07 um 16 37 36](https://user-images.githubusercontent.com/11667674/81290210-18d4c680-9081-11ea-82f4-aa5d3e0fe8e6.png)

@Takheer вот это нормас! Сделаешь — будет круто :)
<img width="726" alt="image" src="https://user-images.githubusercontent.com/19980512/81292049-9691d580-9073-11ea-9438-5d6d18363b5a.png">
Я вот над такими двумя думал, но я не дизайнер совершенно

Resolving patch:
diff --git a/posts/templatetags/battle.py b/posts/templatetags/battle.py
--- a/posts/templatetags/battle.py
+++ b/posts/templatetags/battle.py
@@ -3,7 +3,6 @@
 
 register = template.Library()
 
-
 battle_stats_template = loader.get_template("posts/widgets/battle_stats.html")
 
 
@@ -20,6 +19,7 @@ def battle_stats(post, comments):
 
     total_votes_a = sum(c.upvotes for c in arguments_for_a)
     total_votes_b = sum(c.upvotes for c in arguments_for_b)
+
     return battle_stats_template.render({
         "total_arguments": {
             "a": len(arguments_for_a),
@@ -29,6 +29,7 @@ def battle_stats(post, comments):
             "a": total_votes_a,
             "b": total_votes_b,
         },
+        "graph": graph_percentages(len(arguments_for_a), len(arguments_for_b), total_votes_a, total_votes_b),
         "battle": post,
     })
 
@@ -39,3 +40,27 @@ def side_name(battle, side_code):
         return battle.metadata["battle"]["sides"][side_code]["name"]
     return ""
 
+
+def graph_percentages(a_arguments: int, b_arguments: int, a_votes: int, b_votes: int):
+    """Counts percentages for battle graph
+
+    Percentage for a side is a rounded up arithmetic average of side's argument and upvote percentages
+
+    For each side: (argument % of total arguments amount + vote % of total votes amount ) / 2
+    """
+    percent_a = 0
+    percent_b = 0
+    total_arguments = a_arguments + b_arguments
+    total_upvotes = a_votes + b_votes
+    if total_arguments > 0:
+        argument_percent = 100 / total_arguments
+        percent_a = a_arguments * argument_percent
+        percent_b = b_arguments * argument_percent
+        if total_upvotes > 0:
+            upvote_percent = 100 / total_upvotes
+            percent_a = (percent_a + a_votes * upvote_percent) / 2
+            percent_b = (percent_b + b_votes * upvote_percent) / 2
+    return {
+        "percent_a": round(percent_a),
+        "percent_b": round(percent_b)
+    }


Test patch: