# Templates to display `GameEvent` kinds.
module templates_events
-import events
+import achievements
import templates_base
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
# 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.
<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>
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