diff options
Diffstat (limited to 'packages/client/src/components/cw-button.vue')
| -rw-r--r-- | packages/client/src/components/cw-button.vue | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/packages/client/src/components/cw-button.vue b/packages/client/src/components/cw-button.vue new file mode 100644 index 0000000000..4bec7b511e --- /dev/null +++ b/packages/client/src/components/cw-button.vue @@ -0,0 +1,70 @@ +<template> +<button class="nrvgflfu _button" @click="toggle"> + <b>{{ modelValue ? $ts._cw.hide : $ts._cw.show }}</b> + <span v-if="!modelValue">{{ label }}</span> +</button> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import { length } from 'stringz'; +import { concat } from '@/scripts/array'; + +export default defineComponent({ + props: { + modelValue: { + type: Boolean, + required: true + }, + note: { + type: Object, + required: true + } + }, + + computed: { + label(): string { + return concat([ + this.note.text ? [this.$t('_cw.chars', { count: length(this.note.text) })] : [], + this.note.files && this.note.files.length !== 0 ? [this.$t('_cw.files', { count: this.note.files.length }) ] : [], + this.note.poll != null ? [this.$ts.poll] : [] + ] as string[][]).join(' / '); + } + }, + + methods: { + length, + + toggle() { + this.$emit('update:modelValue', !this.modelValue); + } + } +}); +</script> + +<style lang="scss" scoped> +.nrvgflfu { + display: inline-block; + padding: 4px 8px; + font-size: 0.7em; + color: var(--cwFg); + background: var(--cwBg); + border-radius: 2px; + + &:hover { + background: var(--cwHoverBg); + } + + > span { + margin-left: 4px; + + &:before { + content: '('; + } + + &:after { + content: ')'; + } + } +} +</style> |