summaryrefslogtreecommitdiff
path: root/packages/client/src/components
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-12-04 20:35:08 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-12-04 20:35:08 +0900
commit8a3f860213a0221383e68ed545712f30757516b6 (patch)
tree89852fb6563683f04b9ec9a8d425fdb08d1e5b33 /packages/client/src/components
parentfix(client): tweak style (diff)
downloadmisskey-8a3f860213a0221383e68ed545712f30757516b6.tar.gz
misskey-8a3f860213a0221383e68ed545712f30757516b6.tar.bz2
misskey-8a3f860213a0221383e68ed545712f30757516b6.zip
fix(client): fix range slider rendering
Diffstat (limited to 'packages/client/src/components')
-rw-r--r--packages/client/src/components/form-dialog.vue2
-rw-r--r--packages/client/src/components/form/range.vue28
2 files changed, 23 insertions, 7 deletions
diff --git a/packages/client/src/components/form-dialog.vue b/packages/client/src/components/form-dialog.vue
index fbf49af5d2..efd0da443d 100644
--- a/packages/client/src/components/form-dialog.vue
+++ b/packages/client/src/components/form-dialog.vue
@@ -40,7 +40,7 @@
<template #caption><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template>
<option v-for="item in form[item].options" :key="item.value" :value="item.value">{{ item.label }}</option>
</FormRadios>
- <FormRange v-else-if="form[item].type === 'range'" v-model="values[item]" :min="form[item].mim" :max="form[item].max" :step="form[item].step" class="_formBlock">
+ <FormRange v-else-if="form[item].type === 'range'" v-model="values[item]" :min="form[item].mim" :max="form[item].max" :step="form[item].step" :text-converter="form[item].textConverter" class="_formBlock">
<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template>
<template v-if="form[item].description" #caption>{{ form[item].description }}</template>
</FormRange>
diff --git a/packages/client/src/components/form/range.vue b/packages/client/src/components/form/range.vue
index 79a83d6a93..3e02cacb9b 100644
--- a/packages/client/src/components/form/range.vue
+++ b/packages/client/src/components/form/range.vue
@@ -16,7 +16,7 @@
</template>
<script lang="ts">
-import { computed, defineComponent, ref, watch } from 'vue';
+import { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue';
import * as os from '@/os';
export default defineComponent({
@@ -58,6 +58,9 @@ export default defineComponent({
},
setup(props, context) {
+ const containerEl = ref<HTMLElement>();
+ const thumbEl = ref<HTMLElement>();
+
const rawValue = ref((props.modelValue - props.min) / (props.max - props.min));
const steppedValue = computed(() => {
if (props.step) {
@@ -78,10 +81,25 @@ export default defineComponent({
if (thumbEl.value == null) return 0;
return thumbEl.value!.offsetWidth;
});
- const thumbPosition = computed(() => {
- if (containerEl.value == null) return 0;
- return (containerEl.value.offsetWidth - thumbWidth.value) * steppedValue.value;
+ const thumbPosition = ref(0);
+ const calcThumbPosition = () => {
+ if (containerEl.value == null) {
+ thumbPosition.value = 0;
+ } else {
+ thumbPosition.value = (containerEl.value.offsetWidth - thumbWidth.value) * steppedValue.value;
+ }
+ };
+ watch([steppedValue, containerEl], calcThumbPosition);
+ onMounted(() => {
+ const ro = new ResizeObserver((entries, observer) => {
+ calcThumbPosition();
+ });
+ ro.observe(containerEl.value);
+ onUnmounted(() => {
+ ro.disconnect();
+ });
});
+
const steps = computed(() => {
if (props.step) {
return (props.max - props.min) / props.step;
@@ -89,8 +107,6 @@ export default defineComponent({
return 0;
}
});
- const containerEl = ref<HTMLElement>();
- const thumbEl = ref<HTMLElement>();
const onMousedown = (ev: MouseEvent | TouchEvent) => {
ev.preventDefault();