Browse Source

new navbar

modals-to-spa
stingl 4 years ago
parent
commit
59885e07a1
  1. 39
      css/app.css
  2. 195
      index.html
  3. 13
      js/app.js

39
css/app.css

@ -21,36 +21,36 @@ body { @@ -21,36 +21,36 @@ body {
}
.side-button-right {
position: fixed;
right: 30px;
/*position: fixed;*/
/*right: 30px;*/
height: 60px;
width: 60px;
/*height: 60px;*/
/*width: 60px;*/
font-size: 1.7em;
}
.add-tracker-button {
position: fixed;
left: 30px;
bottom: 30px;
/*position: fixed;*/
/*left: 30px;*/
/*bottom: 30px;*/
height: 60px;
width: 60px;
/*height: 60px;*/
/*width: 60px;*/
font-size: 1.7em;
}
.first-button {
bottom: 30px;
/*bottom: 30px;*/
}
.second-button {
bottom: 110px;
/*bottom: 110px;*/
}
.third-button {
bottom: 190px;
/*bottom: 190px;*/
}
.navbar-brand {
@ -123,4 +123,19 @@ nav, .card { @@ -123,4 +123,19 @@ nav, .card {
display: inline-block;
max-width: 85%;
margin-left: 5%;
}
#bottom-menu {
position: fixed;
bottom: 0;
width: 100%;
align-content: center;
background-color: #bdbdbd;
height: 90px;
border-top: 1px solid grey;
padding: 0;
}
.bottom-menu-item {
width: 100%;
}

195
index.html

@ -11,104 +11,88 @@ @@ -11,104 +11,88 @@
</head>
<body oncontextmenu="return false;">
<div class="container" id="root">
<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"/>
<h5 class="brand-title">Timetrack</h5>
</a>
</nav>
<div class="row">
<div class="col-md-12">
<div class="row">
<template v-for="ticket in tickets">
<div class="col-lg-4 col-md-6">
<div class="card bg-gradient-secondary">
<div class="card-body">
<div class="card-text">
<input type="text"
v-model="ticket.number"
class="form-control trackingNameField"
@keydown="updateStorage()"/>
<div id="root">
<div class="container">
<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"/>
<h5 class="brand-title">Timetrack</h5>
</a>
</nav>
<div class="row">
<div class="col-md-12">
<div class="row">
<template v-for="(ticket, ticketIndex) in tickets">
<div class="col-lg-4 col-md-6">
<div class="card bg-gradient-secondary">
<div class="card-body">
<div class="card-text">
<input type="text"
v-model="ticket.number"
class="form-control trackingNameField"
@keydown="updateStorage()"/>
<div class="ticket-time-info">
<div v-if="ticket.tracking === true">
<div class="text-danger font-weight-bolder float-end">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="sr-only">Tracking...</span>
<div class="ticket-time-info">
<div v-if="ticket.tracking === true">
<div class="text-danger font-weight-bolder float-end">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="sr-only">Tracking...</span>
</div>
Tracking
</div>
Tracking
</div>
</div>
</div>
<div v-if="ticket.tracking === true" class="ticket-time-info">
<span class="float-end">{{ getTrackingStartTime(ticket) }}</span>
<span v-if="ticket.tracking === true">Gestartet: </span>
<br/>
<span class="float-end">{{ currentTrackingRunningFor(ticket) }}</span>
<span v-if="ticket.tracking === true">Läuft seit: </span>
</div>
<div v-if="ticket.tracking === true" class="ticket-time-info">
<span class="float-end">{{ getTrackingStartTime(ticket) }}</span>
<span v-if="ticket.tracking === true">Gestartet: </span>
<br/>
<span class="float-end">{{ currentTrackingRunningFor(ticket) }}</span>
<span v-if="ticket.tracking === true">Läuft seit: </span>
</div>
<div class="ticket-time-info">
<span class="float-end">{{ getTotalTime(ticket) }}</span>
<span class="current-ticket-info">Gesamt: </span>
</div>
<div class="ticket-time-info">
<span class="float-end">{{ getTotalTime(ticket) }}</span>
<span class="current-ticket-info">Gesamt: </span>
</div>
<span class="float-end">{{ getTotalTimeToday(ticket) }}</span>
<span class="">Heute: </span>
<span class="float-end">{{ getTotalTimeToday(ticket) }}</span>
<span class="">Heute: </span>
<div class="row">
<div class="col-md-12" v-if="!ticket.tracking">
<button type="button" class="btn btn-info ticket-action-button"
@click="startTracking(ticket)">
<i class="far fa-play-circle"></i>
</button>
</div>
<div class="row">
<div class="col-md-12" v-if="!ticket.tracking">
<button type="button" class="btn btn-info ticket-action-button"
@click="startTracking(ticket)">
<i class="far fa-play-circle"></i>
</button>
</div>
<div class="col-md-12" v-else>
<button type="button" class="btn btn-danger ticket-action-button"
@click="stopTracking(ticket)">
<i class="far fa-stop-circle"></i>
</button>
</div>
<div class="col-md-12" v-else>
<button type="button" class="btn btn-danger ticket-action-button"
@click="stopTracking(ticket)">
<i class="far fa-stop-circle"></i>
</button>
</div>
<div class="col-md-12">
<button class="btn btn-secondary ticket-action-button" data-bs-dismiss="modal"
@click="archiveTicket(ticketIndex)" title="Archivieren">
<i class="fas fa-archive"></i>
</button>
<div class="col-md-12">
<button class="btn btn-secondary ticket-action-button" data-bs-dismiss="modal"
@click="archiveTicket(ticketIndex)" title="Archivieren">
<i class="fas fa-archive"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
</template>
</div>
</div>
</div>
</div>
<a type="button" class="btn btn-success add-tracker-button text-light" @click="addTrackedTicket()">
<i class="fas fa-plus"></i>
</a>
<a type="button" :class="'btn btn-primary side-button-right text-light ' + (archive.length > 0 ? 'third-button' : 'second-button')" data-toggle="modal"
data-target="#showTicketsModal" v-if="tickets.length > 0">
<i class="fas fa-user-clock"></i>
</a>
<a type="button" :class="'btn btn-secondary side-button-right text-dark second-button'" data-toggle="modal"
data-target="#showArchivedTicketsModal" v-if="archive.length > 0">
<i class="fas fa-archive"></i>
</a>
<a type="button" class="btn btn-dark text-light side-button-right first-button" data-toggle="modal"
data-target="#settingsModal">
<i class="fas fa-sliders-h"></i>
</a>
<div class="modal modal-fullscreen fade" id="showTicketsModal" tabindex="-1" role="dialog"
aria-labelledby="showTicketsModalLabel"
@ -116,7 +100,7 @@ @@ -116,7 +100,7 @@
<div class="modal-dialog showTicketsModalDialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-user-clock"></i> Tracker</h5>
<h5 class="modal-title"><i class="fas fa-clock"></i> Tracker</h5>
<button type="button" class="btn-close" data-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
@ -386,8 +370,59 @@ @@ -386,8 +370,59 @@
</div>
</div>
</div>
<div id="bottom-menu">
<div class="container">
<div class="row">
<div class="col">
<a type="button"
class="btn btn-success text-light bottom-menu-item"
@click="addTrackedTicket()"
data-bs-toggle="tooltip"
data-bs-placement="left"
title="Neuer Tracker">
<i class="fas fa-plus"></i>
</a>
</div>
<div class="col" v-if="tickets.length > 0">
<a type="button"
class="btn btn-primary text-light bottom-menu-item"
data-toggle="modal"
data-target="#showTicketsModal"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Alle Tracker">
<i class="fas fa-clock"></i>
</a>
</div>
<div class="col" v-if="archive.length > 0">
<a type="button"
class="btn btn-secondary text-dark bottom-menu-item"
data-toggle="modal"
data-target="#showArchivedTicketsModal"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Archivierte Tracker">
<i class="fas fa-archive"></i>
</a>
</div>
<div class="col">
<a type="button"
class="btn btn-dark text-light bottom-menu-item"
data-toggle="modal"
data-target="#settingsModal"
data-bs-toggle="tooltip"
data-bs-placement="left"
title="Einstellungen">
<i class="fas fa-sliders-h"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<script src="https://kit.fontawesome.com/b54a4cceff.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment-with-locales.min.js"></script>
<script src="https://unpkg.com/vue@next"></script>

13
js/app.js

@ -25,9 +25,20 @@ const TimeTrack = { @@ -25,9 +25,20 @@ const TimeTrack = {
setInterval(() => {
vue.$forceUpdate();
}, 1000 * 60)
}, 1000 * 60);
vue.loadTooltips();
setInterval(() => {
vue.loadTooltips();
}, 5000);
},
methods: {
loadTooltips() {
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
},
loadStorage() {
let storedTickets = JSON.parse(localStorage.getItem('tickets'));
this.tickets = storedTickets == null ? [] : storedTickets;