wip
This commit is contained in:
parent
941206922a
commit
aa0dadcf07
1 changed files with 44 additions and 39 deletions
|
@ -2,42 +2,50 @@
|
||||||
<div :data-is-voted="isVoted">
|
<div :data-is-voted="isVoted">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="choice in poll.choices" :key="choice.id" @click="vote.bind(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:common.tags.mk-poll.vote-to%'.replace('{}', choice.text) : ''">
|
<li v-for="choice in poll.choices" :key="choice.id" @click="vote.bind(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:common.tags.mk-poll.vote-to%'.replace('{}', choice.text) : ''">
|
||||||
<div class="backdrop" :style="{ 'width:' + (result ? (choice.votes / total * 100) : 0) + '%' }"></div>
|
<div class="backdrop" :style="{ 'width:' + (showResult ? (choice.votes / total * 100) : 0) + '%' }"></div>
|
||||||
<span>
|
<span>
|
||||||
<template v-if="choice.is_voted">%fa:check%</template>
|
<template v-if="choice.is_voted">%fa:check%</template>
|
||||||
{{ text }}
|
{{ text }}
|
||||||
<span class="votes" v-if="result">({{ '%i18n:common.tags.mk-poll.vote-count%'.replace('{}', choice.votes) }})</span>
|
<span class="votes" v-if="showResult">({{ '%i18n:common.tags.mk-poll.vote-count%'.replace('{}', choice.votes) }})</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p v-if="total > 0">
|
<p v-if="total > 0">
|
||||||
<span>{{ '%i18n:common.tags.mk-poll.total-users%'.replace('{}', total) }}</span>
|
<span>{{ '%i18n:common.tags.mk-poll.total-users%'.replace('{}', total) }}</span>
|
||||||
・
|
・
|
||||||
<a v-if="!isVoted" @click="toggleResult">{{ result ? '%i18n:common.tags.mk-poll.vote%' : '%i18n:common.tags.mk-poll.show-result%' }}</a>
|
<a v-if="!isVoted" @click="toggleShowResult">{{ showResult ? '%i18n:common.tags.mk-poll.vote%' : '%i18n:common.tags.mk-poll.show-result%' }}</a>
|
||||||
<span v-if="isVoted">%i18n:common.tags.mk-poll.voted%</span>
|
<span v-if="isVoted">%i18n:common.tags.mk-poll.voted%</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="typescript">
|
<script lang="typescript">
|
||||||
this.mixin('api');
|
export default {
|
||||||
|
props: ['post'],
|
||||||
this.init = post => {
|
data() {
|
||||||
this.post = post;
|
return {
|
||||||
this.poll = this.post.poll;
|
showResult: false
|
||||||
this.total = this.poll.choices.reduce((a, b) => a + b.votes, 0);
|
|
||||||
this.isVoted = this.poll.choices.some(c => c.is_voted);
|
|
||||||
this.result = this.isVoted;
|
|
||||||
this.update();
|
|
||||||
};
|
};
|
||||||
|
},
|
||||||
this.init(this.opts.post);
|
computed: {
|
||||||
|
poll() {
|
||||||
this.toggleResult = () => {
|
return this.post.poll;
|
||||||
this.result = !this.result;
|
},
|
||||||
};
|
total() {
|
||||||
|
return this.poll.choices.reduce((a, b) => a + b.votes, 0);
|
||||||
this.vote = id => {
|
},
|
||||||
|
isVoted() {
|
||||||
|
return this.poll.choices.some(c => c.is_voted);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.showResult = this.isVoted;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggleShowResult() {
|
||||||
|
this.showResult = !this.showResult;
|
||||||
|
},
|
||||||
|
vote(id) {
|
||||||
if (this.poll.choices.some(c => c.is_voted)) return;
|
if (this.poll.choices.some(c => c.is_voted)) return;
|
||||||
this.api('posts/polls/vote', {
|
this.api('posts/polls/vote', {
|
||||||
post_id: this.post.id,
|
post_id: this.post.id,
|
||||||
|
@ -49,13 +57,10 @@
|
||||||
c.is_voted = true;
|
c.is_voted = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.update({
|
this.showResult = true;
|
||||||
poll: this.poll,
|
|
||||||
isVoted: true,
|
|
||||||
result: true,
|
|
||||||
total: this.total + 1
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue