about summary refs log tree commit diff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/Ranking/RankingEntry.vue52
-rw-r--r--components/Ranking/RankingFirstEntry.vue52
-rw-r--r--components/Ranking/RankingList.vue57
-rw-r--r--components/Ranking/RankingRules.vue34
4 files changed, 195 insertions, 0 deletions
diff --git a/components/Ranking/RankingEntry.vue b/components/Ranking/RankingEntry.vue
new file mode 100644
index 0000000..79746eb
--- /dev/null
+++ b/components/Ranking/RankingEntry.vue
@@ -0,0 +1,52 @@
+<template>
+  <li class="ranking-entry">
+    <div class="ranking-entry__troop">{{ troop }}</div>
+    <div class="ranking-entry__points">{{ points }}</div>
+  </li>
+</template>
+
+<script>
+export default {
+  name: 'RankingEntry',
+  props: {
+    troop: {
+      type: String,
+      required: true
+    },
+    points: {
+      type: Number,
+      required: true
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ranking-entry {
+  min-width: 200px;
+  list-style: none;
+
+  margin: 5px;
+  padding: 10px 20px;
+
+  border: 2px solid #efefef;
+
+  display: grid;
+  grid-template-columns: 0% 75% 25%;
+
+  font-size: 20px;
+}
+
+.ranking-entry div {
+  display: inline-block;
+}
+
+.ranking-entry__troop {
+  text-align: left;
+  grid-column: 2;
+}
+
+.ranking-entry__points {
+  grid-column: 3;
+}
+</style>
diff --git a/components/Ranking/RankingFirstEntry.vue b/components/Ranking/RankingFirstEntry.vue
new file mode 100644
index 0000000..d9f290b
--- /dev/null
+++ b/components/Ranking/RankingFirstEntry.vue
@@ -0,0 +1,52 @@
+<template>
+  <li class="ranking-first-entry">
+    <img class="crown" src="/assets/crown.svg" />
+    <div class="ranking-first-entry__troop">{{ troop }}</div>
+    <div class="ranking-first-entry__points">{{ points }}</div>
+  </li>
+</template>
+
+<script>
+export default {
+  name: 'RankingFirstEntry',
+  props: {
+    troop: {
+      type: String,
+      required: true
+    },
+    points: {
+      type: Number,
+      required: true
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ranking-first-entry {
+  list-style: none;
+  padding: 10px 20px;
+  margin: 10px;
+  width: 100%;
+
+  display: grid;
+  grid-template-columns: 15% 60% 25%;
+  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25);
+
+  line-height: 50px;
+  font-size: 26px;
+  font-weight: 600;
+}
+
+.crown {
+  margin: auto;
+}
+
+.ranking-first-entry__troop {
+  grid-column: 2;
+}
+
+.ranking-first-entry__points {
+  grid-column: 3;
+}
+</style>
diff --git a/components/Ranking/RankingList.vue b/components/Ranking/RankingList.vue
new file mode 100644
index 0000000..ce700ab
--- /dev/null
+++ b/components/Ranking/RankingList.vue
@@ -0,0 +1,57 @@
+<template>
+  <ol class="ranking-list">
+    <ranking-first-entry
+      :troop="sortedScores[0].troop"
+      :points="sortedScores[0].points"
+    />
+    <ranking-entry
+      v-for="score in sortedScores.slice(1)"
+      :key="score.troop"
+      :troop="score.troop"
+      :points="score.points"
+    />
+  </ol>
+</template>
+
+<script>
+import RankingFirstEntry from './RankingFirstEntry'
+import RankingEntry from './RankingEntry'
+
+function compare(a, b) {
+  return b.points - a.points
+}
+
+export default {
+  name: 'RankingList',
+  components: {
+    RankingEntry,
+    RankingFirstEntry
+  },
+  props: {
+    scores: {
+      type: Array, //i.e. [{troop: "Troop 1", points: 12}, {troop: "Troop 2", points: 22}]
+      required: true
+    }
+  },
+  computed: {
+    sortedScores() {
+      return [...this.scores].sort(compare)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ranking-list {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin: 10px;
+  padding: 0;
+  padding-inline-start: 0;
+
+  width: 100%;
+  max-width: 300px;
+  margin: 10px;
+}
+</style>
diff --git a/components/Ranking/RankingRules.vue b/components/Ranking/RankingRules.vue
new file mode 100644
index 0000000..5ae3c74
--- /dev/null
+++ b/components/Ranking/RankingRules.vue
@@ -0,0 +1,34 @@
+<template>
+  <div>
+    <h2>Zasady punktacji</h2>
+    <div class="rules" v-html="rules"></div>
+  </div>
+</template>
+
+<script>
+import rules from '~/assets/zasady-punktacji.md'
+
+const md = require('markdown-it')()
+
+export default {
+  name: 'RankingRules',
+  data() {
+    return {
+      rules: md.render(rules)
+    }
+  }
+}
+</script>
+
+<style>
+.rules table {
+  border-collapse: collapse;
+  margin: 20px 10px;
+}
+
+.rules th,
+.rules td {
+  padding: 5px 15px;
+  border: 1px solid #000;
+}
+</style>