From ebb9a9b64f0ad994bbc0aba3be49d741777662a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= <root@acid-chicken.com> Date: Thu, 26 Sep 2019 04:24:38 +0900 Subject: [PATCH] Add mk-frac component (#5456) * Add mk-frac component * Follow lint * FIx linting miss --- .../app/common/views/components/frac.vue | 49 +++++++++++++++++++ .../app/common/views/components/index.ts | 2 + 2 files changed, 51 insertions(+) create mode 100644 src/client/app/common/views/components/frac.vue diff --git a/src/client/app/common/views/components/frac.vue b/src/client/app/common/views/components/frac.vue new file mode 100644 index 0000000000..1840bd28fe --- /dev/null +++ b/src/client/app/common/views/components/frac.vue @@ -0,0 +1,49 @@ +<template> +<span class="mk-frac"><span>{{ pad }}</span><span>{{ value }} / {{ total }}</span></span> +</template> + +<script lang="ts"> +import Vue from 'vue'; +import i18n from '../../../i18n'; + +export default Vue.extend({ + i18n: i18n(), + props: { + value: { + type: Number, + required: true, + }, + total: { + type: Number, + required: true, + }, + }, + computed: { + pad(this: { + value: number; + total: number; + length(value: number): number; + }) { + return '0'.repeat(this.length(this.total) - this.length(this.value)); + }, + }, + methods: { + length(value: number) { + const string = value.toString(); + + return string.includes('e') ? -~string.substr(string.indexOf('e')) : string.length; + }, + }, +}); +</script> + +<style lang="stylus" scoped> +.mk-frac + -webkit-font-feature-settings 'tnum' + -moz-font-feature-settings 'tnum' + font-feature-settings 'tnum' + font-variant-numeric tabular-nums + + > :first-child + visibility hidden +</style> diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts index d5392fb8cd..4253118ba8 100644 --- a/src/client/app/common/views/components/index.ts +++ b/src/client/app/common/views/components/index.ts @@ -33,6 +33,7 @@ import fileTypeIcon from './file-type-icon.vue'; import emoji from './emoji.vue'; import welcomeTimeline from './welcome-timeline.vue'; import userList from './user-list.vue'; +import frac from './frac.vue'; import uiInput from './ui/input.vue'; import uiButton from './ui/button.vue'; import uiHorizonGroup from './ui/horizon-group.vue'; @@ -82,6 +83,7 @@ Vue.component('mk-file-type-icon', fileTypeIcon); Vue.component('mk-emoji', emoji); Vue.component('mk-welcome-timeline', welcomeTimeline); Vue.component('mk-user-list', userList); +Vue.component('mk-frac', frac); Vue.component('ui-input', uiInput); Vue.component('ui-button', uiButton); Vue.component('ui-horizon-group', uiHorizonGroup);