diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/Ranking/RankingEntry.vue | 52 | ||||
-rw-r--r-- | components/Ranking/RankingFirstEntry.vue | 52 | ||||
-rw-r--r-- | components/Ranking/RankingList.vue | 57 | ||||
-rw-r--r-- | components/Ranking/RankingRules.vue | 34 |
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> |