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

174 lines
3.6 KiB
Vue
Raw Normal View History

2019-06-19 06:28:31 +10:00
<template>
2019-07-05 17:17:44 +10:00
<div
v-if="visible"
class="poll-form"
>
<div
v-for="(option, index) in options"
:key="index"
class="poll-option"
>
2019-06-19 06:28:31 +10:00
<div class="input-container">
<input
2019-07-05 17:17:44 +10:00
:id="`poll-${index}`"
v-model="options[index]"
size="1"
2019-06-19 06:28:31 +10: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 17:17:44 +10:00
v-if="options.length > 2"
class="delete-option button-unstyled -hover-highlight"
@click="deleteOption(index)"
2019-07-05 17:17:44 +10:00
>
<FAIcon icon="times" />
</button>
2019-06-19 06:28:31 +10:00
</div>
<button
2019-06-19 06:28:31 +10:00
v-if="options.length < maxOptions"
class="add-option faint button-unstyled -hover-highlight"
2019-06-19 06:28:31 +10:00
@click="addOption"
>
2020-10-21 08:31:16 +11:00
<FAIcon
icon="plus"
size="sm"
/>
2019-06-19 06:28:31 +10:00
{{ $t("polls.add_option") }}
</button>
2019-06-19 06:28:31 +10:00
<div class="poll-type-expiry">
2019-07-05 17:17:44 +10:00
<div
class="poll-type"
:title="$t('polls.type')"
>
<label
for="poll-type-selector"
class="select"
>
<select
v-model="pollType"
class="select"
@change="updatePollToParent"
>
<option value="single">{{ $t('polls.single_choice') }}</option>
<option value="multiple">{{ $t('polls.multiple_choices') }}</option>
2019-06-19 06:28:31 +10:00
</select>
2020-10-21 08:31:16 +11:00
<FAIcon
class="select-down-icon"
icon="chevron-down"
/>
2019-06-19 06:28:31 +10:00
</label>
</div>
2019-07-05 17:17:44 +10:00
<div
class="poll-expiry"
:title="$t('polls.expiry')"
>
<input
v-model="expiryAmount"
2019-06-19 06:28:31 +10:00
type="number"
class="expiry-amount hide-number-spinner"
:min="minExpirationInCurrentUnit"
:max="maxExpirationInCurrentUnit"
@change="expiryAmountChange"
>
<label class="expiry-unit select">
2019-07-05 17:17:44 +10:00
<select
2019-06-19 06:28:31 +10:00
v-model="expiryUnit"
@change="expiryAmountChange"
>
2019-07-05 17:17:44 +10:00
<option
v-for="unit in expiryUnits"
2019-07-07 07:54:17 +10:00
:key="unit"
2019-07-05 17:17:44 +10:00
:value="unit"
>
2019-06-19 06:28:31 +10:00
{{ $t(`time.${unit}_short`, ['']) }}
</option>
</select>
2020-10-21 08:31:16 +11:00
<FAIcon
class="select-down-icon"
icon="chevron-down"
/>
2019-06-19 06:28:31 +10:00
</label>
</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-19 06:28:31 +10: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-19 06:28:31 +10:00
// Hack: Move the icon over the input box
width: 1.5em;
margin-left: -1.5em;
2019-06-19 06:28:31 +10: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%;
.select {
border: none;
box-shadow: none;
background-color: transparent;
padding-right: 0.75em;
2019-06-19 06:28:31 +10:00
}
}
.poll-expiry {
display: flex;
.expiry-amount {
width: 3em;
text-align: right;
}
.expiry-unit {
border: none;
box-shadow: none;
background-color: transparent;
}
}
}
</style>