X-Git-Url: http://nitlanguage.org
diff --git a/contrib/nitrpg/src/templates/panels.nit b/contrib/nitrpg/src/templates/panels.nit
index 0a49241..14538c5 100644
--- a/contrib/nitrpg/src/templates/panels.nit
+++ b/contrib/nitrpg/src/templates/panels.nit
@@ -17,7 +17,7 @@
# Panels templates for `nitpg`.
module panels
-import templates_base
+import templates_events
# A panel can be displayed in a html page.
#
@@ -107,12 +107,14 @@ class GameStatusPanel
redef fun render_title do
add " "
- add "{game.name}"
+ add "{game.link}"
end
redef fun render_body do
add "{game.load_players.length}"
- add " players
"
+ add " players
"
+ add "{game.stats["achievements"]}"
+ add " achievements
"
add "{game.stats["pulls"]} pull requests"
add " ({game.stats["pulls_open"]} open)
"
add "{game.stats["issues"]} issues"
@@ -135,8 +137,7 @@ class PlayerStatusPanel
add ""
add "
"
- add " "
- add "{player.name}"
+ add " {player.link}"
end
redef fun render_body do
@@ -145,10 +146,10 @@ class PlayerStatusPanel
add "
ranked "
add " # {ranking[player.name]}
"
add "{player.nitcoins} nitcoins
"
+ add "{player.stats["achievements"]} achievements
"
add "{player.stats["pulls"]} pull requests
"
add "{player.stats["issues"]} issues
"
add "{player.stats["commits"]} commits"
-
end
end
@@ -172,9 +173,7 @@ class ShortListPlayersPanel
end
(new PlayerCoinComparator).sort(players)
for player in players do
- add ""
- add player.name
- add " ({player.nitcoins})
"
+ add "{player.nitcoins} - {player.link}
"
end
end
end
@@ -210,7 +209,7 @@ class ListPlayersPanel
for player in players do
add ""
add " {rank} | "
- add " {player.name} | "
+ add " {player.link} | "
add " {player.nitcoins} | "
add "
"
rank += 1
@@ -256,7 +255,7 @@ class PodiumPanel
src="{{{player.user.avatar_url}}}" alt="{{{player.name}}}">
- {{{player.name}}}
+ {{{player.link}}}
{{{player.nitcoins}}}
@@ -293,18 +292,146 @@ class PlayerReviewsPanel
return
end
for issue in issues do
+ var user = issue.user
+ var uplay = user.player(game)
add """"""
end
end
end
+
+# A `Panel` that displays a pagined list of events stored in the `entity`.
+#
+# This way the panel can be used to view events stored under `Game`, `Player`...
+class EventListPanel
+ super Panel
+
+ # Entity to load the events from.
+ var entity: GameEntity
+
+ # Number of events to display.
+ var limit: Int
+
+ # From where to start?
+ var from: Int
+
+ redef fun render_title do
+ add " "
+ add "Last events"
+ end
+
+ redef fun render_body do
+ var events = entity.load_events
+ if events.is_empty then
+ add "No event yet..."
+ return
+ end
+ # check input
+ if limit < 0 then limit = 10
+ if from < 0 then from = 0
+ # display events
+ for i in [from .. from + limit] do
+ if i >= events.length then break
+ add events[i].tpl_event.media_item
+ end
+ # pagination
+ if limit > events.length then return
+ add "
"
+ add """"""
+ if from > 0 then
+ add """
+ """
+ end
+ if from + limit < events.length then
+ add """
+
+ """
+ end
+ add "
"
+ end
+end
+
+# Achievement unlocked list panel.
+class AchievementsListPanel
+ super Panel
+
+ # Entity to load the events from.
+ var entity: GameEntity
+
+ redef fun render_title do
+ add " "
+ add "Achievements unlocked"
+ end
+
+ redef fun render_body do
+ var achs = entity.load_achievements.values.to_a
+ if achs.is_empty then
+ add "No achievement yet..."
+ return
+ end
+ for ach in achs do add ach.list_item
+ end
+end
+
+# Achievement detail panel.
+class AchievementPanel
+ super Panel
+
+ # Achievement to display.
+ var achievement: Achievement
+
+ redef fun render_title do
+ add " "
+ add "Achievement details"
+ end
+
+ redef fun render_body do
+ add """
+ +{{{achievement.reward}}}
+ {{{achievement.name}}}
+
+ {{{achievement.desc}}}
"""
+
+ var events = achievement.load_events
+
+ if events.is_empty then
+ add "Never unlocked..."
+ return
+ end
+
+ var event = events.last
+ var tpl = event.tpl_event
+ var player = tpl.player
+ add "
"
+ add """"""
+
+ if events.length > 1 then
+ add """
Also unlocked by
+ {{{events.length}}} players.
"""
+ end
+ end
+end