mirror of https://github.com/doccano/doccano.git
Hironsan
5 years ago
5 changed files with 0 additions and 394 deletions
Split View
Diff Options
-
79frontend/components/Logo.vue
-
69frontend/components/Modal.vue
-
7frontend/components/README.md
-
21frontend/components/VuetifyLogo.vue
-
218frontend/pages/projects/_id/users/index.vue
@ -1,79 +0,0 @@ |
|||
<template> |
|||
<div class="VueToNuxtLogo"> |
|||
<div class="Triangle Triangle--two" /> |
|||
<div class="Triangle Triangle--one" /> |
|||
<div class="Triangle Triangle--three" /> |
|||
<div class="Triangle Triangle--four" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<style> |
|||
.VueToNuxtLogo { |
|||
display: inline-block; |
|||
animation: turn 2s linear forwards 1s; |
|||
transform: rotateX(180deg); |
|||
position: relative; |
|||
overflow: hidden; |
|||
height: 180px; |
|||
width: 245px; |
|||
} |
|||
|
|||
.Triangle { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 0; |
|||
height: 0; |
|||
} |
|||
|
|||
.Triangle--one { |
|||
border-left: 105px solid transparent; |
|||
border-right: 105px solid transparent; |
|||
border-bottom: 180px solid #41b883; |
|||
} |
|||
|
|||
.Triangle--two { |
|||
top: 30px; |
|||
left: 35px; |
|||
animation: goright 0.5s linear forwards 3.5s; |
|||
border-left: 87.5px solid transparent; |
|||
border-right: 87.5px solid transparent; |
|||
border-bottom: 150px solid #3b8070; |
|||
} |
|||
|
|||
.Triangle--three { |
|||
top: 60px; |
|||
left: 35px; |
|||
animation: goright 0.5s linear forwards 3.5s; |
|||
border-left: 70px solid transparent; |
|||
border-right: 70px solid transparent; |
|||
border-bottom: 120px solid #35495e; |
|||
} |
|||
|
|||
.Triangle--four { |
|||
top: 120px; |
|||
left: 70px; |
|||
animation: godown 0.5s linear forwards 3s; |
|||
border-left: 35px solid transparent; |
|||
border-right: 35px solid transparent; |
|||
border-bottom: 60px solid #fff; |
|||
} |
|||
|
|||
@keyframes turn { |
|||
100% { |
|||
transform: rotateX(0deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes godown { |
|||
100% { |
|||
top: 180px; |
|||
} |
|||
} |
|||
|
|||
@keyframes goright { |
|||
100% { |
|||
left: 70px; |
|||
} |
|||
} |
|||
</style> |
@ -1,69 +0,0 @@ |
|||
<template> |
|||
<v-dialog |
|||
v-model="dialog" |
|||
width="800px" |
|||
> |
|||
<v-card> |
|||
<v-card-title class="grey lighten-2"> |
|||
{{ title }} |
|||
</v-card-title> |
|||
<v-container grid-list-sm> |
|||
<v-layout |
|||
wrap |
|||
> |
|||
<v-flex xs12> |
|||
<slot /> |
|||
</v-flex> |
|||
</v-layout> |
|||
</v-container> |
|||
<v-card-actions> |
|||
<v-spacer /> |
|||
<v-btn |
|||
class="text-capitalize" |
|||
text |
|||
color="primary" |
|||
@click="dialog = false" |
|||
> |
|||
Cancel |
|||
</v-btn> |
|||
<v-btn |
|||
class="text-none" |
|||
text |
|||
@click="agree" |
|||
> |
|||
{{ button }} |
|||
</v-btn> |
|||
</v-card-actions> |
|||
</v-card> |
|||
</v-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
props: { |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
button: { |
|||
type: String, |
|||
default: 'Yes' |
|||
} |
|||
}, |
|||
data: () => ({ |
|||
dialog: false |
|||
}), |
|||
methods: { |
|||
open() { |
|||
this.dialog = true |
|||
}, |
|||
agree() { |
|||
this.dialog = false |
|||
this.$emit('agree') |
|||
}, |
|||
cancel() { |
|||
this.dialog = false |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,7 +0,0 @@ |
|||
# COMPONENTS |
|||
|
|||
**This directory is not required, you can delete it if you don't want to use it.** |
|||
|
|||
The components directory contains your Vue.js Components. |
|||
|
|||
_Nuxt.js doesn't supercharge these components._ |
@ -1,21 +0,0 @@ |
|||
<template> |
|||
<img |
|||
class="VuetifyLogo" |
|||
alt="Vuetify Logo" |
|||
src="data:image/png;base64,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" |
|||
> |
|||
</template> |
|||
|
|||
<style> |
|||
.VuetifyLogo { |
|||
width: 180px; |
|||
transform: rotateY(560deg); |
|||
animation: turn 3.5s ease-out forwards 1s; |
|||
} |
|||
|
|||
@keyframes turn { |
|||
100% { |
|||
transform: rotateY(0deg); |
|||
} |
|||
} |
|||
</style> |
@ -1,218 +0,0 @@ |
|||
<template> |
|||
<v-content> |
|||
<v-container |
|||
fluid |
|||
fill-height |
|||
> |
|||
<v-layout |
|||
justify-center |
|||
> |
|||
<v-flex> |
|||
<v-card> |
|||
<v-card-title> |
|||
<v-btn |
|||
class="mb-2 text-capitalize" |
|||
color="primary" |
|||
@click="openAddModal" |
|||
> |
|||
Add User |
|||
</v-btn> |
|||
<Modal |
|||
ref="childDialogue" |
|||
:title="addModal.title" |
|||
:button="addModal.button" |
|||
> |
|||
<v-autocomplete |
|||
v-model="selectedUser" |
|||
:items="items" |
|||
:loading="isLoading" |
|||
:search-input.sync="username" |
|||
color="white" |
|||
hide-no-data |
|||
hide-selected |
|||
item-text="username" |
|||
label="User Search APIs" |
|||
placeholder="Start typing to Search" |
|||
prepend-icon="mdi-account" |
|||
return-object |
|||
/> |
|||
<v-select |
|||
:items="roles" |
|||
label="Role" |
|||
prepend-icon="mdi-account-card-details-outline" |
|||
/> |
|||
</Modal> |
|||
<v-btn |
|||
class="mb-2 ml-2 text-capitalize" |
|||
outlined |
|||
:disabled="selected.length === 0" |
|||
@click="openRemoveModal" |
|||
> |
|||
Remove |
|||
</v-btn> |
|||
<Modal |
|||
ref="removeDialogue" |
|||
:title="removeModal.title" |
|||
:button="removeModal.button" |
|||
> |
|||
Are you sure you want to remove these users from this project? |
|||
<v-list dense> |
|||
<v-list-item v-for="(user, i) in selected" :key="i"> |
|||
<v-list-item-content> |
|||
<v-list-item-title>{{ user.name }}</v-list-item-title> |
|||
</v-list-item-content> |
|||
</v-list-item> |
|||
</v-list> |
|||
</Modal> |
|||
</v-card-title> |
|||
<v-data-table |
|||
v-model="selected" |
|||
:headers="headers" |
|||
:items="users" |
|||
item-key="name" |
|||
:search="search" |
|||
show-select |
|||
> |
|||
<template v-slot:top> |
|||
<v-text-field |
|||
v-model="search" |
|||
prepend-inner-icon="search" |
|||
label="Search" |
|||
single-line |
|||
hide-details |
|||
filled |
|||
/> |
|||
</template> |
|||
<template v-slot:item.role="props"> |
|||
<v-edit-dialog |
|||
:return-value.sync="props.item.role" |
|||
large |
|||
persistent |
|||
@save="save" |
|||
> |
|||
<div>{{ props.item.role }}</div> |
|||
<template v-slot:input> |
|||
<div class="mt-4 title"> |
|||
Update Role |
|||
</div> |
|||
</template> |
|||
<template v-slot:input> |
|||
<v-select |
|||
v-model="props.item.role" |
|||
:items="roles" |
|||
label="Role" |
|||
/> |
|||
</template> |
|||
</v-edit-dialog> |
|||
</template> |
|||
</v-data-table> |
|||
</v-card> |
|||
</v-flex> |
|||
</v-layout> |
|||
</v-container> |
|||
</v-content> |
|||
</template> |
|||
|
|||
<script> |
|||
import Modal from '~/components/Modal' |
|||
|
|||
export default { |
|||
layout: 'project', |
|||
components: { |
|||
Modal |
|||
}, |
|||
data: () => ({ |
|||
search: '', |
|||
username: '', |
|||
isLoading: false, |
|||
selected: [], |
|||
selectedUser: null, |
|||
roles: ['Admin', 'Member'], |
|||
addModal: { |
|||
title: 'Add User', |
|||
button: 'Add User' |
|||
}, |
|||
removeModal: { |
|||
title: 'Remove User', |
|||
button: 'Yes, remove' |
|||
}, |
|||
headers: [ |
|||
{ |
|||
text: 'Name', |
|||
align: 'left', |
|||
sortable: false, |
|||
value: 'name' |
|||
}, |
|||
{ text: 'Role', value: 'role' } |
|||
], |
|||
users: [ |
|||
{ |
|||
name: 'Hiroki Nakayama', |
|||
role: 'Admin' |
|||
}, |
|||
{ |
|||
name: 'Takahiro Kubo', |
|||
role: 'Member' |
|||
}, |
|||
{ |
|||
name: 'Junya Kamura', |
|||
role: 'Member' |
|||
}, |
|||
{ |
|||
name: 'Yasufumi Taniguchi', |
|||
role: 'Member' |
|||
}, |
|||
{ |
|||
name: 'Ryo Sho', |
|||
role: 'Member' |
|||
} |
|||
], |
|||
items: [ |
|||
{ |
|||
id: 1, |
|||
username: 'Donald Trump', |
|||
Description: 'Daily cat facts' |
|||
}, |
|||
{ |
|||
id: 2, |
|||
username: 'Barack Obama', |
|||
Description: 'Pictures of cats from Tumblr' |
|||
} |
|||
] |
|||
}), |
|||
|
|||
watch: { |
|||
username(val) { |
|||
// Items have already been requested |
|||
if (this.isLoading) return |
|||
|
|||
this.isLoading = true |
|||
|
|||
// Lazily load input items |
|||
// GET /users endpoint |
|||
// fetch('https://api.publicapis.org/entries') |
|||
// .then(res => res.json()) |
|||
// .then((res) => { |
|||
// this.items.push({ username: 'Bush', id: this.items.length + 1 }) |
|||
// }) |
|||
// .catch((err) => { |
|||
// alert(err) |
|||
// }) |
|||
// .finally(() => (this.isLoading = false)) |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
save() { |
|||
// send server |
|||
}, |
|||
openAddModal() { |
|||
this.$refs.childDialogue.open() |
|||
}, |
|||
openRemoveModal() { |
|||
this.$refs.removeDialogue.open() |
|||
} |
|||
} |
|||
|
|||
} |
|||
</script> |
Write
Preview
Loading…
Cancel
Save