akkoma-fe/src/components/poll/poll_form.vue

159 lines
3.2 KiB
Vue
Raw Normal View History

2019-06-18 20:28:31 +00:00
<template>
2019-07-05 07:17:44 +00:00
<div
v-if="visible"
class="poll-form"
>
<div
v-for="(option, index) in options"
:key="index"
class="poll-option"
>
2019-06-18 20:28:31 +00:00
<div class="input-container">
<input
2019-07-05 07:17:44 +00:00
:id="`poll-${index}`"
v-model="options[index]"
size="1"
2019-06-18 20:28:31 +00:00
class="poll-option-input"
type="text"
:placeholder="$t('polls.option')"
:maxlength="maxLength"
@change="updatePollToParent"
@keydown.enter.stop.prevent="nextOption(index)"
>
</div>
<button
2019-07-05 07:17:44 +00:00
v-if="options.length > 2"
class="delete-option button-unstyled -hover-highlight"
@click="deleteOption(index)"
2019-07-05 07:17:44 +00:00
>
<FAIcon icon="times" />
</button>
2019-06-18 20:28:31 +00:00
</div>
<button
2019-06-18 20:28:31 +00:00
v-if="options.length < maxOptions"
class="add-option faint button-unstyled -hover-highlight"
2019-06-18 20:28:31 +00:00
@click="addOption"
>
2020-10-20 21:31:16 +00:00
<FAIcon
icon="plus"
size="sm"
/>
2019-06-18 20:28:31 +00:00
{{ $t("polls.add_option") }}
</button>
2019-06-18 20:28:31 +00:00
<div class="poll-type-expiry">
2019-07-05 07:17:44 +00:00
<div
class="poll-type"
:title="$t('polls.type')"
>
<Select
2021-05-31 11:02:36 +00:00
v-model="pollType"
2021-03-11 14:31:15 +00:00
class="poll-type-select"
unstyled="true"
@change="updatePollToParent"
2019-07-05 07:17:44 +00:00
>
2021-05-31 11:02:36 +00:00
<option value="single">
{{ $t('polls.single_choice') }}
</option>
<option value="multiple">
{{ $t('polls.multiple_choices') }}
</option>
</Select>
2019-06-18 20:28:31 +00:00
</div>
2019-07-05 07:17:44 +00:00
<div
class="poll-expiry"
:title="$t('polls.expiry')"
>
<input
v-model="expiryAmount"
2019-06-18 20:28:31 +00:00
type="number"
class="expiry-amount hide-number-spinner"
:min="minExpirationInCurrentUnit"
:max="maxExpirationInCurrentUnit"
@change="expiryAmountChange"
>
2022-03-23 14:15:05 +00:00
{{ ' ' }}
<Select
v-model="expiryUnit"
2021-03-11 14:31:15 +00:00
unstyled="true"
class="expiry-unit"
@change="expiryAmountChange"
>
<option
v-for="unit in expiryUnits"
:key="unit"
:value="unit"
2019-06-18 20:28:31 +00:00
>
2022-07-23 12:40:52 +00:00
{{ $t(`time.unit.${unit}_short`, ['']) }}
</option>
</Select>
2019-06-18 20:28:31 +00:00
</div>
</div>
</div>
</template>
<script src="./poll_form.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.poll-form {
display: flex;
flex-direction: column;
padding: 0 0.5em 0.5em;
.add-option {
align-self: flex-start;
padding-top: 0.25em;
padding-left: 0.1em;
2019-06-18 20:28:31 +00:00
}
.poll-option {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 0.25em;
}
.input-container {
width: 100%;
input {
// Hack: dodge the floating X icon
padding-right: 2.5em;
width: 100%;
}
}
.delete-option {
2019-06-18 20:28:31 +00:00
// Hack: Move the icon over the input box
width: 1.5em;
margin-left: -1.5em;
2019-06-18 20:28:31 +00:00
z-index: 1;
}
.poll-type-expiry {
margin-top: 0.5em;
display: flex;
width: 100%;
}
.poll-type {
margin-right: 0.75em;
flex: 1 1 60%;
2021-03-11 14:31:15 +00:00
.poll-type-select {
padding-right: 0.75em;
}
2019-06-18 20:28:31 +00:00
}
.poll-expiry {
display: flex;
.expiry-amount {
width: 3em;
text-align: right;
}
}
}
</style>