Loading overlay, reload functions, color fixes
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name Foodsharing Planner
|
// @name Foodsharing Planner
|
||||||
// @namespace http://tampermonkey.net/
|
// @namespace http://tampermonkey.net/
|
||||||
// @version 0.5
|
// @version 0.6
|
||||||
// @updateURL https://github.com/TroogS/userscripts/blob/master/foodsharing_planner.user.js
|
// @updateURL https://github.com/TroogS/userscripts/raw/master/foodsharing_planner.user.js
|
||||||
// @downloadURL https://github.com/TroogS/userscripts/blob/master/foodsharing_planner.user.js
|
// @downloadURL https://github.com/TroogS/userscripts/raw/master/foodsharing_planner.user.js
|
||||||
// @description Generate a calendar like view as addition to the foodsharing website germany, austria and switzerland
|
// @description Generate a calendar like view as addition to the foodsharing website germany, austria and switzerland
|
||||||
// @author A. Beging
|
// @author A. Beging
|
||||||
// @match https://foodsharing.de*
|
// @match https://foodsharing.de*
|
||||||
@@ -42,13 +42,37 @@ var gFirstDayDate;
|
|||||||
|
|
||||||
CreateButton();
|
CreateButton();
|
||||||
gFirstDayDate = GetFirstDay();
|
gFirstDayDate = GetFirstDay();
|
||||||
|
|
||||||
var weekPanel = CreateElement("div", "week");
|
var weekPanel = CreateElement("div", "week");
|
||||||
var mainPanel = CreateElement("div", "fspl d-none", weekPanel);
|
var mainPanel = CreateElement("div", "fspl d-none", weekPanel);
|
||||||
|
mainPanel.append(CreatingLoadingOverlay());
|
||||||
CreateNavigationButtons(mainPanel);
|
CreateNavigationButtons(mainPanel);
|
||||||
|
|
||||||
document.querySelectorAll("body")[0].append(mainPanel);
|
document.querySelectorAll("body")[0].append(mainPanel);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
function CreatingLoadingOverlay() {
|
||||||
|
var loadingOverlay = CreateElement("div", "loading-overlay hidden");
|
||||||
|
|
||||||
|
var spinnerDiv = CreateElement("div");
|
||||||
|
spinnerDiv.innerHTML = '<i class="fas fa-pizza-slice" />';
|
||||||
|
spinnerDiv.innerHTML += " Lade...";
|
||||||
|
|
||||||
|
loadingOverlay.append(spinnerDiv);
|
||||||
|
|
||||||
|
return loadingOverlay;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ShowLoadingOverlay() {
|
||||||
|
var loadingOverlay = document.querySelectorAll(".fspl .loading-overlay")[0];
|
||||||
|
loadingOverlay.classList.remove('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
function HideLoadingOverlay() {
|
||||||
|
var loadingOverlay = document.querySelectorAll(".fspl .loading-overlay")[0];
|
||||||
|
loadingOverlay.classList.add('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
GM_addStyle ( `
|
GM_addStyle ( `
|
||||||
|
|
||||||
a.navbar-brand.brand span:first-child,
|
a.navbar-brand.brand span:first-child,
|
||||||
@@ -82,11 +106,37 @@ a.navbar-brand.brand span:nth-child(2) span{
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fspl .loading-overlay {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fspl .loading-overlay.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fspl .loading-overlay > div {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fspl .loading-overlay i {
|
||||||
|
animation: rotation 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
.day {
|
.day {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
border: 1px solid #533a20;
|
border: 1px solid #533a20;
|
||||||
height: max-content;
|
height: max-content;
|
||||||
min-height: 100%;
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.day.today {
|
||||||
|
background-color: #ffeeba;
|
||||||
}
|
}
|
||||||
|
|
||||||
.day .day-title {
|
.day .day-title {
|
||||||
@@ -103,6 +153,14 @@ a.navbar-brand.brand span:nth-child(2) span{
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.day .pickup.me {
|
||||||
|
background-color: #d8ffbe;
|
||||||
|
}
|
||||||
|
|
||||||
|
.day .pickup > a {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
.day .pickup.pickup-green {
|
.day .pickup.pickup-green {
|
||||||
border-left-color: #64ae24;
|
border-left-color: #64ae24;
|
||||||
}
|
}
|
||||||
@@ -153,6 +211,15 @@ a.navbar-brand.brand span:nth-child(2) span{
|
|||||||
color: #533a20;
|
color: #533a20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@keyframes rotation {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
` );
|
` );
|
||||||
|
|
||||||
async function LoadMe() {
|
async function LoadMe() {
|
||||||
@@ -162,6 +229,8 @@ async function LoadMe() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function BuildPlannerAsync() {
|
async function BuildPlannerAsync() {
|
||||||
|
ShowLoadingOverlay();
|
||||||
|
|
||||||
var weekPanel = document.querySelectorAll(".fspl .week")[0];
|
var weekPanel = document.querySelectorAll(".fspl .week")[0];
|
||||||
weekPanel.innerHTML = "";
|
weekPanel.innerHTML = "";
|
||||||
|
|
||||||
@@ -216,12 +285,15 @@ async function BuildPlannerAsync() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
HideLoadingOverlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
function CreateNavigationButtons(mainPanel) {
|
function CreateNavigationButtons(mainPanel) {
|
||||||
var navigationPanel = CreateElement("div", "fspl-nav text-center");
|
var navigationPanel = CreateElement("div", "fspl-nav text-center");
|
||||||
|
|
||||||
var prevButton = CreateElement("button", "button m-1");
|
var prevButton = CreateElement("button", "button m-1");
|
||||||
|
prevButton.setAttribute("title", "Vorherige Woche");
|
||||||
prevButton.innerHTML = '<i class="fas fa-arrow-left" />';
|
prevButton.innerHTML = '<i class="fas fa-arrow-left" />';
|
||||||
prevButton.addEventListener('click',function () {
|
prevButton.addEventListener('click',function () {
|
||||||
gFirstDayDate.setDate(gFirstDayDate.getDate() - 7);
|
gFirstDayDate.setDate(gFirstDayDate.getDate() - 7);
|
||||||
@@ -229,7 +301,26 @@ function CreateNavigationButtons(mainPanel) {
|
|||||||
});
|
});
|
||||||
navigationPanel.append(prevButton);
|
navigationPanel.append(prevButton);
|
||||||
|
|
||||||
|
var todayButton = CreateElement("button", "button m-1");
|
||||||
|
todayButton.setAttribute("title", "Heute");
|
||||||
|
todayButton.innerHTML = '<i class="fas fa-calendar-day" />';
|
||||||
|
todayButton.addEventListener('click',function () {
|
||||||
|
gFirstDayDate = GetFirstDay();
|
||||||
|
BuildPlannerAsync();
|
||||||
|
});
|
||||||
|
navigationPanel.append(todayButton);
|
||||||
|
|
||||||
|
var reloadButton = CreateElement("button", "button m-1");
|
||||||
|
reloadButton.setAttribute("title", "Neu laden");
|
||||||
|
reloadButton.innerHTML = '<i class="fas fa-sync" />';
|
||||||
|
reloadButton.addEventListener('click',function () {
|
||||||
|
gLoaded = false;
|
||||||
|
BuildPlannerAsync();
|
||||||
|
});
|
||||||
|
navigationPanel.append(reloadButton);
|
||||||
|
|
||||||
var nextButton = CreateElement("button", "button m-1");
|
var nextButton = CreateElement("button", "button m-1");
|
||||||
|
nextButton.setAttribute("title", "Nächste Woche");
|
||||||
nextButton.innerHTML = '<i class="fas fa-arrow-right" />';
|
nextButton.innerHTML = '<i class="fas fa-arrow-right" />';
|
||||||
nextButton.addEventListener('click',function () {
|
nextButton.addEventListener('click',function () {
|
||||||
gFirstDayDate.setDate(gFirstDayDate.getDate() + 7);
|
gFirstDayDate.setDate(gFirstDayDate.getDate() + 7);
|
||||||
@@ -267,7 +358,9 @@ function CreatePickupDiv(data) {
|
|||||||
|
|
||||||
var element = CreateElement("div", elementClass);
|
var element = CreateElement("div", elementClass);
|
||||||
|
|
||||||
var headerSpan = CreateElement("div", "font-weight-bold", data.store.name);
|
var headerSpan = CreateElement("a", "font-weight-bold", data.store.name);
|
||||||
|
headerSpan.setAttribute("href", "https://foodsharing.de/?page=fsbetrieb&id=" + data.store.id);
|
||||||
|
headerSpan.setAttribute("target", "_blank");
|
||||||
element.append(headerSpan);
|
element.append(headerSpan);
|
||||||
|
|
||||||
var hours = (data.pickup.dateObj.getHours() < 10 ? '0' : '') + data.pickup.dateObj.getHours();
|
var hours = (data.pickup.dateObj.getHours() < 10 ? '0' : '') + data.pickup.dateObj.getHours();
|
||||||
@@ -286,6 +379,10 @@ function CreatePickupDiv(data) {
|
|||||||
var imgUrl = 'https://' + window.location.hostname + '/images/mini_q_' + slot.profile.avatar;
|
var imgUrl = 'https://' + window.location.hostname + '/images/mini_q_' + slot.profile.avatar;
|
||||||
if(slot.profile.avatar.startsWith('/api/')) imgUrl = slot.profile.avatar + '?w=35&h=35';
|
if(slot.profile.avatar.startsWith('/api/')) imgUrl = slot.profile.avatar + '?w=35&h=35';
|
||||||
|
|
||||||
|
if(slot.profile.id == userId) {
|
||||||
|
element.classList.add("me");
|
||||||
|
}
|
||||||
|
|
||||||
var imgClass = "";
|
var imgClass = "";
|
||||||
if(!slot.isConfirmed) imgClass = "not-confirmed";
|
if(!slot.isConfirmed) imgClass = "not-confirmed";
|
||||||
var imgDiv = CreateElement("div", imgClass);
|
var imgDiv = CreateElement("div", imgClass);
|
||||||
@@ -378,7 +475,10 @@ function CreateColumn(num, title) {
|
|||||||
|
|
||||||
titleDiv.innerHTML = titleDiv.innerHTML + "<br />" + GetDateText(displayDate);
|
titleDiv.innerHTML = titleDiv.innerHTML + "<br />" + GetDateText(displayDate);
|
||||||
|
|
||||||
var day = CreateElement("div", "day day-" + num, titleDiv);
|
var classes = "day day-" + num;
|
||||||
|
if(IsToday(displayDate)) classes += " today";
|
||||||
|
|
||||||
|
var day = CreateElement("div", classes, titleDiv);
|
||||||
|
|
||||||
return day;
|
return day;
|
||||||
}
|
}
|
||||||
@@ -388,9 +488,16 @@ function GetTimeText(date) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function GetDateText(date) {
|
function GetDateText(date) {
|
||||||
return WithLeadingZeros(date.getDate(), 2) + "." + WithLeadingZeros(date.getMonth(), 2) + "." + WithLeadingZeros(date.getFullYear(), 4)
|
return WithLeadingZeros(date.getDate(), 2) + "." + WithLeadingZeros(date.getMonth() + 1, 2) + "." + WithLeadingZeros(date.getFullYear(), 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const IsToday = (date) => {
|
||||||
|
const today = new Date()
|
||||||
|
return date.getDate() === today.getDate() &&
|
||||||
|
date.getMonth() === today.getMonth() &&
|
||||||
|
date.getFullYear() === today.getFullYear();
|
||||||
|
};
|
||||||
|
|
||||||
function WithLeadingZeros(number, length) {
|
function WithLeadingZeros(number, length) {
|
||||||
|
|
||||||
var stringNumber = number.toString();
|
var stringNumber = number.toString();
|
||||||
|
|||||||
Reference in New Issue
Block a user