Browse Source

Refactor WIP

modals-to-spa
stingl 4 years ago
parent
commit
b66b98edb0
  1. 1
      .idea/timetrack.iml
  2. 1
      css/app.css
  3. 340
      index.html
  4. 14
      js/app.js

1
.idea/timetrack.iml

@ -4,5 +4,6 @@ @@ -4,5 +4,6 @@
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="izitoast" level="application" />
</component>
</module>

1
css/app.css

@ -1,5 +1,4 @@ @@ -1,5 +1,4 @@
body {
background-color: #e7e7e7;
overflow-y: auto;
}

340
index.html

@ -15,28 +15,12 @@ @@ -15,28 +15,12 @@
<body>
<div id="root">
<!-- Tracker-Display -->
<div class="container" id="content">
<link rel="stylesheet" :href="'https://bootswatch.com/5/' + theme + '/bootstrap.min.css'">
<link rel="stylesheet" href="css/app.css">
<!-- <nav class="navbar navbar-expand-lg navbar-light bg-light">-->
<!-- <a class="navbar-brand">-->
<!-- <img :src="dashboardLogo" alt="logo" class="logo-nav float-end" v-if="dashboardLogo"/>-->
<!-- <div v-if="experimental.trackWorktime">-->
<!-- <template v-if="worktimeTracker.tracking">-->
<!-- <i class="far fa-pause-circle"></i>-->
<!-- <i class="far fa-stop-circle" @click="stopTracking(worktimeTracker)"></i>-->
<!-- </template>-->
<!-- <template v-else>-->
<!-- <a href="javascript:" @click="startTracking(worktimeTracker)">-->
<!-- <i class="far fa-play-circle"></i>-->
<!-- </a>-->
<!-- </template>-->
<!-- </div>-->
<!-- <h5 class="brand-title">Timetrack</h5>-->
<!-- </a>-->
<!-- </nav>-->
<div class="row" v-if="!experimental.boardView || view === 'trackers'">
<!-- Content -->
<div class="container" id="content">
<div id="trackers" class="row" v-if="view === 'trackers'">
<div class="col-md-12">
<div class="row">
<template v-for="(ticket, ticketIndex) in tickets">
@ -130,12 +114,12 @@ @@ -130,12 +114,12 @@
<div class="col-12">
Minuten:
</div>
<!-- <div class="col">-->
<!-- <button type="button" class="btn btn-secondary ticket-action-button"-->
<!-- @click="startTimeBox(ticket, 1)">-->
<!-- <i class="far fa-play-circle"></i> 1-->
<!-- </button>-->
<!-- </div>-->
<!-- <div class="col">-->
<!-- <button type="button" class="btn btn-secondary ticket-action-button"-->
<!-- @click="startTimeBox(ticket, 1)">-->
<!-- <i class="far fa-play-circle"></i> 1-->
<!-- </button>-->
<!-- </div>-->
<div class="col">
<button type="button" class="btn btn-secondary ticket-action-button"
@click="startTimeBox(ticket, 15)">
@ -195,7 +179,9 @@ @@ -195,7 +179,9 @@
</div>
</div>
</div>
<div class="row" v-if="experimental.boardView && view === 'board'" id="board-view">
<!-- Board View-->
<div id="board" class="col row" v-if="view === 'board'">
<div class="col-4 col-board-inner">
<h5>Todo</h5>
<template v-for="(ticket, ticketIndex) in tickets">
@ -332,20 +318,9 @@ @@ -332,20 +318,9 @@
</template>
</div>
</div>
</div>
<!-- Tickets Modal -->
<div class="modal modal-fullscreen fade" id="showTicketsModal" tabindex="-1" role="dialog"
aria-labelledby="showTicketsModalLabel"
aria-hidden="true">
<div class="modal-dialog showTicketsModalDialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-clock"></i> Tracker</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<!-- Trackers-Detail -->
<!-- TODO: Merge to main Trackers-page -->
<div id="trackersDetail" class="col-md-auto row" v-if="view === 'trackersDetail'">
<template v-for="(ticket, ticketIndex) in tickets">
<div class="col-md-6">
<h6><span v-if="isTicketNumber(ticket.number)"></span>{{ ticket.number }}</h6>
@ -393,28 +368,13 @@ @@ -393,28 +368,13 @@
</div>
</template>
</div>
</div>
</div>
</div>
</div>
<!-- Archive Modal -->
<div class="modal modal-fullscreen fade" id="showArchivedTicketsModal" tabindex="-1" role="dialog"
aria-labelledby="showArchivedTicketsModalLabel"
aria-hidden="true">
<div class="modal-dialog showArchivedTicketsModalDialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-archive"></i> Archivierte Tracker</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-6"></div>
<!-- Archive -->
<div id="archive" class="col-md-auto row" v-if="view === 'archive'">
<div class="col-sm-6">
<i class="fas fa-search"></i>
<input @keydown="$forceUpdate()" type="text" class="form-control search-field float-right" v-model="searchQuery" placeholder="Suche..">
</div>
<div class="col-sm-6"></div>
<template v-for="(ticket, ticketIndex) in archive">
<div class="col-md-6" v-if="searchQuery === '' || ticket.number.search(searchQuery) >= 0 || (ticket.description && ticket.description.search(searchQuery)) >= 0">
<h6><span v-if="isTicketNumber(ticket.number)"></span>{{ ticket.number }}</h6>
@ -460,21 +420,8 @@ @@ -460,21 +420,8 @@
</div>
</template>
</div>
</div>
</div>
</div>
</div>
<!-- Settings Modal -->
<div class="modal fade" id="settingsModal" tabindex="-1" role="dialog" aria-labelledby="settingsModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-sliders-h"></i> Einstellungen</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body row">
<!-- Settings -->
<div id="settings" class="col-md-auto row" v-if="view === 'settings'">
<div class="col-md-6">
<h5>Allgemeine Einstellungen</h5>
<div class="form-group">
@ -551,88 +498,8 @@ @@ -551,88 +498,8 @@
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" v-on:click="updateStorage()" data-bs-dismiss="modal">Speichern</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Schließen</button>
</div>
</div>
</div>
</div>
<!-- History Modal -->
<div class="modal fade" id="historyModal" tabindex="-1" role="dialog" aria-labelledby="historyModalLabel"
aria-hidden="true" v-if="selectedTracker">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-history"></i> History von {{ selectedTracker.number }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<ul class="list-group ticket-history">
<template v-for="(tracker, historyIndex) in selectedTracker.history">
<li class="list-group-item" v-if="!tracker.manually">
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStarted)">
{{ formattedDate(tracker.trackingStarted) }}
</div>
Start:
</div>
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStopped)">
{{ formattedDate(tracker.trackingStopped) }}
</div>
Ende:
</div>
<div>
<div class="float-end">
{{ timeWithPostFix(tracker.minutes) }}
</div>
Zeit:
</div>
<a href="javascript:" @click="deleteHistoryEntry(null, historyIndex)" class="float-end">
<i class="fas fa-trash"></i>
</a>
<br/>
</li>
</template>
<template v-for="(tracker, historyIndex) in selectedTracker.history">
<li class="list-group-item bg-light"
v-if="tracker.manually">
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStarted)">
{{ formattedDate(tracker.trackingStarted) }}
</div>
Manuell erfasst am:
</div>
<div>
<div class="float-end">
{{ timeWithPostFix(tracker.minutes) }}
</div>
Zeit:
</div>
<a href="javascript:" @click="deleteHistoryEntry(ticketIndex, historyIndex)" class="float-end">
<i class="fas fa-trash"></i>
</a>
<br/>
</li>
</template>
</ul>
</div>
</div>
</div>
</div>
<!-- Custom Booking Modal -->
<div class="modal fade" id="customBookingModal" tabindex="-1" role="dialog" aria-labelledby="customBookingModalLabel"
aria-hidden="true" v-if="selectedTracker">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-user-edit"></i> Buchung für {{selectedTracker.number}}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- Custom Booking-->
<div id="customBooking" class="col-md-auto row" v-if="view === 'customBooking' && selectedTracker">
<div class="form-group">
<label>Zeit in Minuten:</label>
<input type="text" class="form-control" v-model="customBookingValue">
@ -646,21 +513,8 @@ @@ -646,21 +513,8 @@
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Switcher Modal -->
<div class="modal fade" id="switcherModal" tabindex="-1" role="dialog" aria-labelledby="switcherModalLabel"
aria-hidden="true" v-if="experimental.portalSwitcher">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-random"></i> Portal Switcher</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<!-- Switcher -->
<div id="switcher" class="col-md-auto row" v-if="view === 'switcher'">
<div class="col-12">
<div class="form-group">
<label class="text-muted">Portalname:</label>
@ -694,22 +548,8 @@ @@ -694,22 +548,8 @@
</div>
</template>
</div>
</div>
</div>
</div>
</div>
<!-- Past Days Modal -->
<div class="modal fade" id="pastDaysModal" tabindex="-1" role="dialog" aria-labelledby="pastDaysModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-random"></i> Buchungsverlauf</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<!-- Past Days-->
<div id="pastDays" class="col-md-auto row" v-if="view === 'pastDays'">
<div class="col-12">
<div class="form-group">
<div class="form-group">
@ -725,22 +565,8 @@ @@ -725,22 +565,8 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- SnippetSpace Modal -->
<div class="modal fade" id="snippetSpaceModal" tabindex="-1" role="dialog" aria-labelledby="snippetSpaceModalLabel"
aria-hidden="true" v-if="experimental.snippetSpace">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-code"></i> Snippet Space</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<!-- Snippet Space-->
<div id="snippetSpace" class="col-md-auto row" v-if="view === 'snippetSpace'">
<div class="col-12">
<a href="javascript:" class="btn btn-sm btn-success btn-wide float-end" @click="createSnippet()">
<i class="fas fa-plus"></i>
@ -758,6 +584,59 @@ @@ -758,6 +584,59 @@
</div>
</div>
</div>
<div class="col-6 card" v-if="showHistory">
<div class="card-body">
<!-- History -->
<div class="row">
<ul class="list-group ticket-history">
<template v-for="(tracker, historyIndex) in selectedTracker.history">
<li class="list-group-item" v-if="!tracker.manually">
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStarted)">
{{ formattedDate(tracker.trackingStarted) }}
</div>
Start:
</div>
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStopped)">
{{ formattedDate(tracker.trackingStopped) }}
</div>
Ende:
</div>
<div>
<div class="float-end">
{{ timeWithPostFix(tracker.minutes) }}
</div>
Zeit:
</div>
<a href="javascript:" @click="deleteHistoryEntry(null, historyIndex)" class="float-end">
<i class="fas fa-trash"></i>
</a>
<br/>
</li>
</template>
<template v-for="(tracker, historyIndex) in selectedTracker.history">
<li class="list-group-item bg-light"
v-if="tracker.manually">
<div>
<div class="float-end" :title="exactTimestamp(tracker.trackingStarted)">
{{ formattedDate(tracker.trackingStarted) }}
</div>
Manuell erfasst am:
</div>
<div>
<div class="float-end">
{{ timeWithPostFix(tracker.minutes) }}
</div>
Zeit:
</div>
<a href="javascript:" @click="deleteHistoryEntry(ticketIndex, historyIndex)" class="float-end">
<i class="fas fa-trash"></i>
</a>
<br/>
</li>
</template>
</ul>
</div>
</div>
</div>
@ -773,17 +652,35 @@ @@ -773,17 +652,35 @@
<i class="fas fa-plus"></i>
</button>
<ul class="dropdown-menu" aria-labelledby="create-dropdown-menu">
<li><button class="btn btn-light dropdown-menu-button" type="button" @click="createTracker()">Tracker</button></li>
<li><button class="btn btn-light dropdown-menu-button" type="button" @click="createTimeBox()">Timebox</button></li>
<li>
<button class="btn btn-light dropdown-menu-button" type="button" @click="createTracker()">Tracker</button>
</li>
<li>
<button class="btn btn-light dropdown-menu-button" type="button" @click="createTimeBox()">Timebox</button>
</li>
</ul>
</div>
</div>
<div>
<a type="button"
class="btn btn-dark text-light bottom-menu-item"
v-on:click="view = 'trackers'"
title="Alle Tracker">
<i class="fas fa-home"></i>
</a>
</div>
<div>
<a type="button"
class="btn btn-dark text-light bottom-menu-item"
v-on:click="view = 'board'"
title="Alle Tracker">
<i class="fas fa-clipboard-check"></i>
</a>
</div>
<div class="" v-if="tickets.length > 0">
<a type="button"
class="btn btn-primary text-light bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#showTicketsModal"
data-bs-placement="top"
v-on:click="view = 'trackersDetail'"
title="Alle Tracker">
<i class="fas fa-clock"></i>
</a>
@ -791,9 +688,7 @@ @@ -791,9 +688,7 @@
<div class="" v-if="archive.length > 0">
<a type="button"
class="btn btn-secondary text-dark bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#showArchivedTicketsModal"
data-bs-placement="top"
v-on:click="view = 'archive'"
title="Archivierte Tracker">
<i class="fas fa-archive"></i>
</a>
@ -801,9 +696,7 @@ @@ -801,9 +696,7 @@
<div class="" v-if="experimental.portalSwitcher">
<a type="button"
class="btn btn-warning text-light bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#switcherModal"
data-bs-placement="top"
v-on:click="view = 'switcher'"
title="Portal Switcher">
<i class="fas fa-random"></i>
</a>
@ -811,9 +704,7 @@ @@ -811,9 +704,7 @@
<div class="" v-if="experimental.snippetSpace">
<a type="button"
class="btn btn-info text-light bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#snippetSpaceModal"
data-bs-placement="top"
v-on:click="view = 'snippetSpace'"
title="Snippet Space">
<i class="fas fa-code"></i>
</a>
@ -821,9 +712,7 @@ @@ -821,9 +712,7 @@
<div class="">
<a type="button"
class="btn btn-info text-light bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#pastDaysModal"
data-bs-placement="top"
v-on:click="view = 'pastDays'"
title="Buchungsverlauf">
<i class="fas fa-history"></i>
</a>
@ -831,9 +720,7 @@ @@ -831,9 +720,7 @@
<div class="">
<a type="button"
class="btn btn-dark text-light bottom-menu-item"
data-bs-toggle="modal"
data-bs-target="#settingsModal"
data-bs-placement="left"
v-on:click="view = 'settings'"
title="Einstellungen">
<i class="fas fa-sliders-h"></i>
</a>
@ -841,13 +728,6 @@ @@ -841,13 +728,6 @@
</div>
</div>
</div>
<template v-if="fun">
<div id="hidden-one" @click="tellJoke('pun', 'de')"></div>
<div id="hidden-two" @click="tellJoke('programming,coding,development')"></div>
<div id="hidden-three" @click="tellJoke('dark')"></div>
<div id="hidden-four" @click="tellJoke('misc')"></div>
</template>
</div>
<script src="js/codemirror.js"></script>

14
js/app.js

@ -7,7 +7,8 @@ const TimeTrack = { @@ -7,7 +7,8 @@ const TimeTrack = {
snippetSpace: false,
portalSwitcher: true
},
view: 'board',
view: 'trackers',
showHistory: false,
theme: 'materia',
themes: null,
dashboardLogo: 'assets/img/logo.png',
@ -348,7 +349,8 @@ const TimeTrack = { @@ -348,7 +349,8 @@ const TimeTrack = {
iziToast.show({
message: message,
color: 'blue'
color: 'blue',
position: 'topCenter'
});
this.updateStorage();
@ -358,11 +360,18 @@ const TimeTrack = { @@ -358,11 +360,18 @@ const TimeTrack = {
this.stopActiveTracker();
}
iziToast.show({
title: 'Tracker archiviert',
color: 'green',
position: 'topCenter'
});
this.archive.push(this.tickets[index]);
this.tickets.splice(index, 1);
this.updateStorage();
},
reactivateTicket(index) {
this.view = 'trackers';
this.tickets.push(this.archive[index]);
this.archive.splice(index, 1);
this.updateStorage();
@ -443,6 +452,7 @@ const TimeTrack = { @@ -443,6 +452,7 @@ const TimeTrack = {
},
showHistoryForTracker(ticket) {
this.selectedTracker = ticket;
this.showHistory = true;
this.$forceUpdate();
setTimeout(() => {
let historyModal = new bootstrap.Modal(document.getElementById('historyModal'));