Compare commits
26 Commits
poc/redesi
...
chronos
Author | SHA1 | Date |
---|---|---|
![]() |
d8ed85792a | 3 years ago |
![]() |
b9d82dbf93 | 3 years ago |
![]() |
0f08919318 | 3 years ago |
![]() |
21bf3a7035 | 3 years ago |
![]() |
3824776c7e | 3 years ago |
![]() |
075e3a37e1 | 3 years ago |
![]() |
4a5f06cc4a | 3 years ago |
|
d6053fb205 | 3 years ago |
|
b8860afe93 | 3 years ago |
|
cc91919da1 | 3 years ago |
|
1be7efaff7 | 3 years ago |
|
9ab4122bd6 | 3 years ago |
|
6fb5ba4220 | 3 years ago |
|
c636bb6f82 | 3 years ago |
|
287a335f21 | 3 years ago |
|
0c2cb6c44a | 3 years ago |
![]() |
5e25410897 | 3 years ago |
![]() |
e1ecf56258 | 3 years ago |
![]() |
c5671f0fc7 | 3 years ago |
![]() |
f7605e8084 | 3 years ago |
![]() |
ed32f4ba13 | 3 years ago |
![]() |
d97dce6905 | 4 years ago |
![]() |
d3c13a37b2 | 4 years ago |
![]() |
b449678ace | 4 years ago |
![]() |
fd3a7b6911 | 4 years ago |
![]() |
35b605a8f8 | 4 years ago |
14 changed files with 17326 additions and 251 deletions
Binary file not shown.
@ -0,0 +1,190 @@
@@ -0,0 +1,190 @@
|
||||
<template> |
||||
<div class="row"> |
||||
<div class="col-md-12"> |
||||
<div class="float-end"> |
||||
<div v-if="$store.state.notes.length > 0" class="filter-wrapper"> |
||||
<a href="javascript:" |
||||
v-if="colorToFilter !== ''" |
||||
v-on:click="colorToFilter = ''" |
||||
class="color-change-button disable-filter-button" |
||||
:style="'background-color: '+colorToFilter"> |
||||
Filter aus |
||||
</a> |
||||
<span v-for="color in noteColors" |
||||
v-bind:key="color"> |
||||
<a href="javascript:" |
||||
v-if="colorToFilter !== color" |
||||
v-on:click="colorToFilter = color" |
||||
class="color-change-button" |
||||
:style="'background-color: ' + color"> |
||||
<i class="fas fa-filter filter-icon"></i> |
||||
</a> |
||||
</span> |
||||
</div> |
||||
|
||||
<a href="javascript:" v-on:click="createNote()" class="btn btn-sm btn-success">Neue Notiz</a> |
||||
</div> |
||||
<h5><i class="fa fa-pen"></i> Notizen</h5> |
||||
</div> |
||||
<template v-for="(note, noteIndex) in $store.state.notes" v-bind:key="noteIndex"> |
||||
<div v-if="colorToFilter === '' || note.color === colorToFilter" class="col-sm-6 col-md-4 col-lg-3 card-box"> |
||||
<div class="card"> |
||||
<div class="card-body note" |
||||
:style="'background-color:' + note.color ?? '#ffea77'"> |
||||
<textarea v-model="note.body" spellcheck="false" |
||||
@keydown="this.$store.commit('saveNotes')"></textarea> |
||||
<div class="color-changer"> |
||||
<span v-for="color in noteColors" v-bind:key="color"> |
||||
<span href="javascript:" |
||||
@click="changeColor(note, color);" |
||||
class="color-change-button" |
||||
v-if="color !== note.color" |
||||
:style="'background-color: ' + color"> |
||||
</span> |
||||
</span> |
||||
</div> |
||||
<div class="float-end"> |
||||
<a href="javascript:" class="delete-button" |
||||
@click="$store.commit('deleteNote', noteIndex)"><i |
||||
class="fas fa-trash"></i></a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
<span v-if="colorToFilter !== '' && !notesExistInFilteredColor"> |
||||
Keine Notizen mit gewählter Farbe vorhanden<br> |
||||
<a href="javascript:" |
||||
class="color-change-button disable-filter-button" |
||||
:style="'background-color: '+colorToFilter" |
||||
v-on:click="colorToFilter = ''"> |
||||
Filter ausschalten |
||||
</a> |
||||
</span> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import axios from "axios"; |
||||
|
||||
export default { |
||||
name: "Notes", |
||||
data() { |
||||
return { |
||||
noteColors: ['#ffea77', '#ee6352', '#59cd90', '#3fa7d6', '#fac05e', '#f79d84'], |
||||
colorToFilter: '' |
||||
} |
||||
}, |
||||
methods: { |
||||
createNote() { |
||||
let component = this; |
||||
|
||||
axios.get( |
||||
'https://api.quotable.io/random' |
||||
).then((response) => { |
||||
component.$store.commit('createNote', response.data.content + '\n - ' + response.data.author); |
||||
component.$store.commit('saveNotes'); |
||||
}).catch(() => { |
||||
component.$store.commit('createNote', ''); |
||||
component.$store.commit('saveNotes'); |
||||
}) |
||||
}, |
||||
changeColor(note, color) { |
||||
note.color = color; |
||||
this.$store.commit('saveNotes'); |
||||
} |
||||
}, |
||||
computed: { |
||||
notesExistInFilteredColor() { |
||||
let component = this; |
||||
|
||||
return this.$store.state.notes.filter((note) => { |
||||
return note.color === component.colorToFilter; |
||||
}).length; |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.card-body { |
||||
font-family: NotePaper, sans-serif; |
||||
} |
||||
|
||||
#note-container { |
||||
margin-top: 1em; |
||||
} |
||||
|
||||
textarea { |
||||
width: 100%; |
||||
height: 100%; |
||||
padding: 0; |
||||
margin: 0; |
||||
background-color: transparent; |
||||
border: 0 solid transparent; |
||||
min-height: 10em; |
||||
} |
||||
|
||||
textarea:focus { |
||||
outline: none; |
||||
} |
||||
|
||||
.color-changer { |
||||
position: absolute; |
||||
bottom: -0.8em; |
||||
z-index: 1000; |
||||
} |
||||
|
||||
.color-change-button { |
||||
margin-right: 0.2em; |
||||
background-color: red; |
||||
border-radius: 25px; |
||||
padding: 0.2em 0.7em; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.color-change-button:hover { |
||||
opacity: 0.9; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.delete-button { |
||||
position: absolute; |
||||
bottom: -1.5em; |
||||
right: 0.5em; |
||||
|
||||
text-align: right; |
||||
background-color: red; |
||||
border-radius: 25px; |
||||
z-index: 1000; |
||||
} |
||||
|
||||
.delete-button i { |
||||
margin: 1em; |
||||
color: black; |
||||
} |
||||
|
||||
.delete-button:hover * { |
||||
color: white; |
||||
} |
||||
|
||||
.filter-icon { |
||||
color: white; |
||||
font-size: 0.7em; |
||||
} |
||||
|
||||
.disable-filter-button { |
||||
color: white; |
||||
background-color: grey; |
||||
} |
||||
|
||||
.filter-wrapper { |
||||
display: inline-block; |
||||
margin: 0.3em 1em; |
||||
} |
||||
|
||||
.card-box { |
||||
margin-top: 0.5em; |
||||
margin-bottom: 0.5em; |
||||
} |
||||
</style> |
@ -0,0 +1,120 @@
@@ -0,0 +1,120 @@
|
||||
<template> |
||||
<div class="offcanvas offcanvas-end" |
||||
id="tasksCanvas" |
||||
tabindex="-1" |
||||
role="dialog" |
||||
aria-labelledby="showTasksCanvas" |
||||
aria-hidden="true"> |
||||
<div class="offcanvas-header"> |
||||
<h5><i class="fas fa-clipboard"></i> Tasks</h5> |
||||
</div> |
||||
<div class="offcanvas-body"> |
||||
<div class="form-group"> |
||||
<input type="text" id="newTaskInput" class="form-control" |
||||
v-model="newTaskInput" placeholder="Neuer Task" v-on:keyup.enter="addTask()"/> |
||||
</div> |
||||
<ul class="list-group" v-if="$store.state.tasks && $store.state.tasks.length > 0"> |
||||
<template v-for="(task, taskIndex) in $store.state.tasks" v-bind:key="taskIndex"> |
||||
<li class="list-group-item" v-if="!task.done"> |
||||
<span class="float-end"> |
||||
<a href="javascript:"> |
||||
<i class="fas fa-trash" @click="deleteTask(taskIndex)"></i> |
||||
</a> |
||||
</span> |
||||
<a href="javascript:" @click="toggleTask(task)"> |
||||
<i class="far fa-square"></i> |
||||
</a> {{ task.name }} |
||||
<div class="form-group"> |
||||
<div class="float-end"> |
||||
{{ task.percentDone }}% erledigt |
||||
</div> |
||||
<input type="range" |
||||
class="range range-success range-tasks" |
||||
min="0" |
||||
max="100" |
||||
step="5" |
||||
v-model="task.percentDone" |
||||
@change="checkForCompletionOfTask(task)"> |
||||
</div> |
||||
</li> |
||||
</template> |
||||
</ul> |
||||
<br/> |
||||
<ul class="list-group" v-if="$store.state.tasks && $store.state.tasks.length > 0"> |
||||
<template v-for="(task, taskIndex) in $store.state.tasks" v-bind:key="taskIndex"> |
||||
<li class="list-group-item" v-if="task.done"> |
||||
<span class="float-end"> |
||||
<a href="javascript:"> |
||||
<i class="fas fa-trash" @click="deleteTask(taskIndex)"></i> |
||||
</a> |
||||
</span> |
||||
<a href="javascript:" @click="toggleTask(task)"> |
||||
<i class="far fa-check-square"></i> |
||||
</a> <span class="finished-task">{{ task.name }}</span> |
||||
</li> |
||||
</template> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import moment from "moment"; |
||||
|
||||
export default { |
||||
name: "Tasks", |
||||
data() { |
||||
return { |
||||
newTaskInput: '' |
||||
} |
||||
}, |
||||
methods: { |
||||
deleteTask(taskIndex) { |
||||
this.$store.state.tasks.splice(taskIndex, 1) |
||||
this.$store.commit('saveTasks'); |
||||
}, |
||||
addTask() { |
||||
if (this.newTaskInput.length <= 0 || this.newTaskInput.trim() === '') { |
||||
return false; |
||||
} |
||||
|
||||
if (!this.$store.state.tasks) { |
||||
this.$store.state.tasks = []; |
||||
} |
||||
|
||||
this.$store.state.tasks.pushToBeginning({ |
||||
name: this.newTaskInput, |
||||
done: false, |
||||
created: moment(), |
||||
percentDone: 0, |
||||
finished: null |
||||
}); |
||||
|
||||
this.newTaskInput = ''; |
||||
this.$store.commit('saveTasks'); |
||||
}, |
||||
toggleTask(task) { |
||||
task.done = !task.done; |
||||
|
||||
if (task.done) { |
||||
task.finished = moment(); |
||||
task.percentDone = 100; |
||||
} else { |
||||
task.finished = null; |
||||
task.percentDone = 0; |
||||
} |
||||
|
||||
this.$store.commit('saveTasks'); |
||||
}, |
||||
checkForCompletionOfTask(task) { |
||||
task.done = task.percentDone === 100; |
||||
this.$forceUpdate(); |
||||
this.$store.commit('saveTasks'); |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
|
||||
</style> |
Loading…
Reference in new issue