mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-13 20:57:24 +01:00
193 lines
3.9 KiB
Vue
193 lines
3.9 KiB
Vue
<template>
|
|
<b-modal
|
|
id="won-challenge"
|
|
:title="$t('wonChallenge')"
|
|
size="sm"
|
|
:hide-header="true"
|
|
>
|
|
<close-icon @click="close()" />
|
|
<div
|
|
class="text-center"
|
|
>
|
|
<h1
|
|
v-once
|
|
class="header purple"
|
|
>
|
|
{{ $t('wonChallenge') }}
|
|
</h1>
|
|
<div class="d-flex align-items-center justify-content-center mb-4">
|
|
<div
|
|
v-once
|
|
class="svg-icon sparkles sparkles-rotate"
|
|
v-html="icons.sparkles"
|
|
></div>
|
|
<div class="achievement-karaoke-2x"></div>
|
|
<div
|
|
v-once
|
|
class="svg-icon sparkles"
|
|
v-html="icons.sparkles"
|
|
></div>
|
|
</div>
|
|
<p
|
|
class="mb-4 chal-desc"
|
|
v-html="$t('wonChallengeDesc', {challengeName: challengeName})"
|
|
>
|
|
</p>
|
|
</div>
|
|
<div
|
|
v-if="notification"
|
|
slot="modal-footer"
|
|
class="pt-3 w-100"
|
|
>
|
|
<div class="d-flex align-items-center justify-content-center mb-3">
|
|
<div
|
|
v-once
|
|
class="svg-icon stars"
|
|
v-html="icons.stars"
|
|
></div>
|
|
<strong v-once>{{ $t('yourReward') }}</strong>
|
|
<div
|
|
v-once
|
|
class="svg-icon stars stars-rotate"
|
|
v-html="icons.stars"
|
|
></div>
|
|
</div>
|
|
|
|
<div class="d-flex align-items-center justify-content-center mb-4">
|
|
<div
|
|
v-once
|
|
class="svg-icon gem mr-1"
|
|
v-html="icons.gem"
|
|
></div>
|
|
<strong>{{ notification.data.prize }}</strong>
|
|
</div>
|
|
<button
|
|
v-once
|
|
class="btn btn-primary"
|
|
@click="close()"
|
|
>
|
|
{{ $t('onwards') }}
|
|
</button>
|
|
</div>
|
|
</b-modal>
|
|
</template>
|
|
|
|
<style lang="scss">
|
|
@import '@/assets/scss/colors.scss';
|
|
|
|
#won-challenge {
|
|
.modal-body {
|
|
padding: 0 1.5rem;
|
|
}
|
|
|
|
.modal-footer {
|
|
background: $gray-700;
|
|
border-top: none;
|
|
padding: 0 1.5rem 2rem 1.5rem;
|
|
}
|
|
|
|
.modal-dialog {
|
|
width: 20.625rem;
|
|
font-size: 0.875rem;
|
|
line-height: 1.71;
|
|
text-align: center;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<style lang="scss" scoped>
|
|
@import '@/assets/scss/colors.scss';
|
|
|
|
.purple {
|
|
color: $purple-300;
|
|
}
|
|
|
|
.header {
|
|
font-size: 1.25rem;
|
|
line-height: 1.4;
|
|
text-align: center;
|
|
margin-top: 2rem;
|
|
}
|
|
|
|
.sparkles {
|
|
width: 2.5rem;
|
|
height: 4rem;
|
|
margin-left: 2rem;
|
|
|
|
&.sparkles-rotate {
|
|
transform: rotate(180deg);
|
|
margin-right: 2rem;
|
|
margin-left: 0rem;
|
|
}
|
|
}
|
|
|
|
.stars {
|
|
width: 2rem;
|
|
height: 1.063rem;
|
|
margin-right: 1.25rem;
|
|
|
|
&.stars-rotate {
|
|
transform: rotate(180deg);
|
|
margin-left: 1.25rem;
|
|
margin-right: 0rem;
|
|
}
|
|
}
|
|
|
|
.gem {
|
|
width: 1.5rem;
|
|
height: 1.5rem;
|
|
}
|
|
|
|
.chal-desc ::v-deep p {
|
|
display: inline;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
import habiticaMarkdown from 'habitica-markdown';
|
|
import closeIcon from '@/components/shared/closeIcon';
|
|
import sparkles from '@/assets/svg/star-group.svg?raw';
|
|
import gem from '@/assets/svg/gem.svg?raw';
|
|
import stars from '@/assets/svg/sparkles-left.svg?raw';
|
|
import { mapState } from '@/libs/store';
|
|
|
|
export default {
|
|
components: {
|
|
closeIcon,
|
|
},
|
|
data () {
|
|
// const tweet = this.$t('wonChallengeShare');
|
|
return {
|
|
// tweet,
|
|
notification: null,
|
|
icons: Object.freeze({
|
|
sparkles,
|
|
gem,
|
|
stars,
|
|
}),
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState({ user: 'user.data' }),
|
|
challengeName () {
|
|
if (!this.notification) return null;
|
|
return habiticaMarkdown.render(String(this.notification.data.name));
|
|
},
|
|
},
|
|
mounted () {
|
|
this.$root.$on('habitica:won-challenge', notification => {
|
|
this.notification = notification;
|
|
this.$root.$emit('bv::show::modal', 'won-challenge');
|
|
});
|
|
},
|
|
beforeDestroy () {
|
|
this.$root.$off('habitica:won-challenge');
|
|
},
|
|
methods: {
|
|
close () {
|
|
this.$root.$emit('bv::hide::modal', 'won-challenge');
|
|
},
|
|
},
|
|
};
|
|
</script>
|