Merge: concurrent_collections: Add implementation of has method
[nit.git] / contrib / nitrpg / src / templates / templates_events.nit
index 20f7b58..3e141b9 100644 (file)
@@ -17,7 +17,7 @@
 # Templates to display `GameEvent` kinds.
 module templates_events
 
-import events
+import achievements
 import templates_base
 
 redef class GameEvent
@@ -29,6 +29,8 @@ redef class GameEvent
                        return new TplPullMerged(self)
                else if kind == "pull_review" then
                        return new TplPullReview(self)
+               else if kind == "achievement_unlocked" then
+                       return new TplAchievementUnlocked(self)
                end
                abort
        end
@@ -53,14 +55,17 @@ class TplEvent
 
        # Load `github_event` data key as a PullRequestEvent.
        var pull_event: PullRequestEvent is lazy do
-               var obj = event.data["github_event"].as(JsonObject)
-               return new PullRequestEvent.from_json(event.game.api, obj)
+               return event.game.api.deserialize(event.data["github_event"].as(JsonObject).to_json).as(PullRequestEvent)
        end
 
        # Load `github_event` data key as a IssueCommentEvent.
        var issue_comment_event: IssueCommentEvent is lazy do
-               var obj = event.data["github_event"].as(JsonObject)
-               return new IssueCommentEvent.from_json(event.game.api, obj)
+               return event.game.api.deserialize(event.data["github_event"].as(JsonObject).to_json).as(IssueCommentEvent)
+       end
+
+       # Load `achievement` data key as an Achievement.
+       var achievement: Achievement is lazy do
+               return player.load_achievement(event.data["achievement"].to_s).as(not null)
        end
 
        # Display a media item for a reward event.
@@ -70,7 +75,7 @@ class TplEvent
                                 <span class="badge progress-bar-success"
                                  style=\"position: absolute\">+{{{reward}}}</span>
                                 <img class=\"img-circle\" style="width:50px"
-                                  src="{{{player.user.avatar_url}}}" alt="{{{player.name}}}">
+                                src="{{{player.user.avatar_url or else "#"}}}" alt="{{{player.name}}}">
                                </a>
                                <div class="media-body">
                                 <h4 class="media-heading">{{{title}}}</h4>
@@ -109,3 +114,12 @@ class TplPullReview
                return "{player.link} reviewed {issue.link}"
        end
 end
+
+# Event: achievement_unlocked
+class TplAchievementUnlocked
+       super TplEvent
+
+       redef var title is lazy do
+               return "{player.link} unlocked {achievement.link}"
+       end
+end