mirror of https://github.com/doccano/doccano.git
pythonannotation-tooldatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learning
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
2.7 KiB
136 lines
2.7 KiB
<template>
|
|
<div class="v-data-footer">
|
|
<v-edit-dialog large persistent @save="changePageNumber">
|
|
<span>{{ value }} of {{ total }}</span>
|
|
<template #input>
|
|
<div class="mt-4 title">Move Page</div>
|
|
<v-text-field
|
|
v-model="editedPage"
|
|
:rules="rules"
|
|
:label="$t('generic.edit')"
|
|
single-line
|
|
counter
|
|
autofocus
|
|
/>
|
|
</template>
|
|
</v-edit-dialog>
|
|
<v-btn
|
|
v-shortkey.once="['shift', 'arrowleft']"
|
|
:disabled="isFirstPage"
|
|
text
|
|
fab
|
|
small
|
|
@shortkey="firstPage"
|
|
@click="firstPage"
|
|
>
|
|
<v-icon>{{ mdiPageFirst }}</v-icon>
|
|
</v-btn>
|
|
<v-btn
|
|
v-shortkey.once="['arrowleft']"
|
|
:disabled="isFirstPage"
|
|
text
|
|
fab
|
|
small
|
|
@shortkey="prevPage"
|
|
@click="prevPage"
|
|
>
|
|
<v-icon>{{ mdiChevronLeft }}</v-icon>
|
|
</v-btn>
|
|
<v-btn
|
|
v-shortkey.once="['arrowright']"
|
|
:disabled="isLastPage"
|
|
text
|
|
fab
|
|
small
|
|
@shortkey="nextPage"
|
|
@click="nextPage"
|
|
>
|
|
<v-icon>{{ mdiChevronRight }}</v-icon>
|
|
</v-btn>
|
|
<v-btn
|
|
v-shortkey.once="['shift', 'arrowright']"
|
|
:disabled="isLastPage"
|
|
text
|
|
fab
|
|
small
|
|
@shortkey="lastPage"
|
|
@click="lastPage"
|
|
>
|
|
<v-icon>{{ mdiPageLast }}</v-icon>
|
|
</v-btn>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import Vue from 'vue'
|
|
import { mdiPageFirst, mdiPageLast, mdiChevronLeft, mdiChevronRight } from '@mdi/js'
|
|
|
|
export default Vue.extend({
|
|
props: {
|
|
value: {
|
|
type: Number,
|
|
default: 1,
|
|
required: true
|
|
},
|
|
total: {
|
|
type: Number,
|
|
default: 1,
|
|
required: true
|
|
}
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
editedPage: '1',
|
|
rules: [
|
|
(v: string) =>
|
|
(v && parseInt(v, 10) > 0 && parseInt(v, 10) <= this.total) || 'Invalid page number!'
|
|
],
|
|
mdiPageFirst,
|
|
mdiPageLast,
|
|
mdiChevronLeft,
|
|
mdiChevronRight
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
isFirstPage(): boolean {
|
|
return this.value === 1
|
|
},
|
|
isLastPage(): boolean {
|
|
return this.value === this.total || this.total === 0
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
changePageNumber() {
|
|
if (!this.editedPage) {
|
|
return
|
|
}
|
|
const page = parseInt(this.editedPage, 10)
|
|
if (page < 0 || page > this.total) {
|
|
return
|
|
}
|
|
this.$emit('click:jump', page)
|
|
},
|
|
prevPage() {
|
|
if (this.value === 1) {
|
|
return
|
|
}
|
|
this.$emit('click:prev')
|
|
},
|
|
nextPage() {
|
|
if (this.value === this.total) {
|
|
return
|
|
}
|
|
this.$emit('click:next')
|
|
},
|
|
firstPage() {
|
|
this.$emit('click:first')
|
|
},
|
|
lastPage() {
|
|
this.$emit('click:last')
|
|
}
|
|
}
|
|
})
|
|
</script>
|