Removes dlbo onging qt5 development income folder

This commit is contained in:
torsten committed 2026-09-16 12:44:04 +00:00
1 parent dba7759292
commit a5e5560478
16256 files changed
-3383918

No files matched your search

@@ -1,2 +0,0 @@
# NoahsDataTool
Datenvisualisierung mit js/node/chartjs
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

@@ -1,425 +0,0 @@
#!/usr/bin/env bash
{ # this ensures the entire script is downloaded #
nvm_has() {
type "$1" > /dev/null 2>&1
}
nvm_default_install_dir() {
[ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm"
}
nvm_install_dir() {
if [ -n "$NVM_DIR" ]; then
printf %s "${NVM_DIR}"
else
nvm_default_install_dir
fi
}
nvm_latest_version() {
echo "v0.35.0"
}
nvm_profile_is_bash_or_zsh() {
local TEST_PROFILE
TEST_PROFILE="${1-}"
case "${TEST_PROFILE-}" in
*"/.bashrc" | *"/.bash_profile" | *"/.zshrc")
return
;;
*)
return 1
;;
esac
}
#
# Outputs the location to NVM depending on:
# * The availability of $NVM_SOURCE
# * The method used ("script" or "git" in the script, defaults to "git")
# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
#
nvm_source() {
local NVM_METHOD
NVM_METHOD="$1"
local NVM_SOURCE_URL
NVM_SOURCE_URL="$NVM_SOURCE"
if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/nvm-exec"
elif [ "_$NVM_METHOD" = "_script-nvm-bash-completion" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/bash_completion"
elif [ -z "$NVM_SOURCE_URL" ]; then
if [ "_$NVM_METHOD" = "_script" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/nvm.sh"
elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then
NVM_SOURCE_URL="https://github.com/nvm-sh/nvm.git"
else
echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD"
return 1
fi
fi
echo "$NVM_SOURCE_URL"
}
#
# Node.js version to install
#
nvm_node_version() {
echo "$NODE_VERSION"
}
nvm_download() {
if nvm_has "curl"; then
curl --compressed -q "$@"
elif nvm_has "wget"; then
# Emulate curl with wget
ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
-e 's/-L //' \
-e 's/--compressed //' \
-e 's/-I /--server-response /' \
-e 's/-s /-q /' \
-e 's/-o /-O /' \
-e 's/-C - /-c /')
# shellcheck disable=SC2086
eval wget $ARGS
fi
}
install_nvm_from_git() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
if [ -d "$INSTALL_DIR/.git" ]; then
echo "=> nvm is already installed in $INSTALL_DIR, trying to update using git"
command printf '\r=> '
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin tag "$(nvm_latest_version)" --depth=1 2> /dev/null || {
echo >&2 "Failed to update nvm, run 'git fetch' in $INSTALL_DIR yourself."
exit 1
}
else
# Cloning to $INSTALL_DIR
echo "=> Downloading nvm from git to '$INSTALL_DIR'"
command printf '\r=> '
mkdir -p "${INSTALL_DIR}"
if [ "$(ls -A "${INSTALL_DIR}")" ]; then
command git init "${INSTALL_DIR}" || {
echo >&2 'Failed to initialize nvm repo. Please report this!'
exit 2
}
command git --git-dir="${INSTALL_DIR}/.git" remote add origin "$(nvm_source)" 2> /dev/null \
|| command git --git-dir="${INSTALL_DIR}/.git" remote set-url origin "$(nvm_source)" || {
echo >&2 'Failed to add remote "origin" (or set the URL). Please report this!'
exit 2
}
command git --git-dir="${INSTALL_DIR}/.git" fetch origin tag "$(nvm_latest_version)" --depth=1 || {
echo >&2 'Failed to fetch origin with tags. Please report this!'
exit 2
}
else
command git -c advice.detachedHead=false clone "$(nvm_source)" -b "$(nvm_latest_version)" --depth=1 "${INSTALL_DIR}" || {
echo >&2 'Failed to clone nvm repo. Please report this!'
exit 2
}
fi
fi
command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet "$(nvm_latest_version)"
if [ -n "$(command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" show-ref refs/heads/master)" ]; then
if command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet 2>/dev/null; then
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet -D master >/dev/null 2>&1
else
echo >&2 "Your version of git is out of date. Please update it!"
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch -D master >/dev/null 2>&1
fi
fi
echo "=> Compressing and cleaning up git repository"
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" reflog expire --expire=now --all; then
echo >&2 "Your version of git is out of date. Please update it!"
fi
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" gc --auto --aggressive --prune=now ; then
echo >&2 "Your version of git is out of date. Please update it!"
fi
return
}
#
# Automatically install Node.js
#
nvm_install_node() {
local NODE_VERSION_LOCAL
NODE_VERSION_LOCAL="$(nvm_node_version)"
if [ -z "$NODE_VERSION_LOCAL" ]; then
return 0
fi
echo "=> Installing Node.js version $NODE_VERSION_LOCAL"
nvm install "$NODE_VERSION_LOCAL"
local CURRENT_NVM_NODE
CURRENT_NVM_NODE="$(nvm_version current)"
if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
else
echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
fi
}
install_nvm_as_script() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
local NVM_SOURCE_LOCAL
NVM_SOURCE_LOCAL="$(nvm_source script)"
local NVM_EXEC_SOURCE
NVM_EXEC_SOURCE="$(nvm_source script-nvm-exec)"
local NVM_BASH_COMPLETION_SOURCE
NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
# Downloading to $INSTALL_DIR
mkdir -p "$INSTALL_DIR"
if [ -f "$INSTALL_DIR/nvm.sh" ]; then
echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
else
echo "=> Downloading nvm as script to '$INSTALL_DIR'"
fi
nvm_download -s "$NVM_SOURCE_LOCAL" -o "$INSTALL_DIR/nvm.sh" || {
echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'"
return 1
} &
nvm_download -s "$NVM_EXEC_SOURCE" -o "$INSTALL_DIR/nvm-exec" || {
echo >&2 "Failed to download '$NVM_EXEC_SOURCE'"
return 2
} &
nvm_download -s "$NVM_BASH_COMPLETION_SOURCE" -o "$INSTALL_DIR/bash_completion" || {
echo >&2 "Failed to download '$NVM_BASH_COMPLETION_SOURCE'"
return 2
} &
for job in $(jobs -p | command sort)
do
wait "$job" || return $?
done
chmod a+x "$INSTALL_DIR/nvm-exec" || {
echo >&2 "Failed to mark '$INSTALL_DIR/nvm-exec' as executable"
return 3
}
}
nvm_try_profile() {
if [ -z "${1-}" ] || [ ! -f "${1}" ]; then
return 1
fi
echo "${1}"
}
#
# Detect profile file if not specified as environment variable
# (eg: PROFILE=~/.myprofile)
# The echo'ed path is guaranteed to be an existing file
# Otherwise, an empty string is returned
#
nvm_detect_profile() {
if [ "${PROFILE-}" = '/dev/null' ]; then
# the user has specifically requested NOT to have nvm touch their profile
return
fi
if [ -n "${PROFILE}" ] && [ -f "${PROFILE}" ]; then
echo "${PROFILE}"
return
fi
local DETECTED_PROFILE
DETECTED_PROFILE=''
if [ -n "${BASH_VERSION-}" ]; then
if [ -f "$HOME/.bashrc" ]; then
DETECTED_PROFILE="$HOME/.bashrc"
elif [ -f "$HOME/.bash_profile" ]; then
DETECTED_PROFILE="$HOME/.bash_profile"
fi
elif [ -n "${ZSH_VERSION-}" ]; then
DETECTED_PROFILE="$HOME/.zshrc"
fi
if [ -z "$DETECTED_PROFILE" ]; then
for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zshrc"
do
if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
break
fi
done
fi
if [ -n "$DETECTED_PROFILE" ]; then
echo "$DETECTED_PROFILE"
fi
}
#
# Check whether the user has any globally-installed npm modules in their system
# Node, and warn them if so.
#
nvm_check_global_modules() {
command -v npm >/dev/null 2>&1 || return 0
local NPM_VERSION
NPM_VERSION="$(npm --version)"
NPM_VERSION="${NPM_VERSION:--1}"
[ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0
local NPM_GLOBAL_MODULES
NPM_GLOBAL_MODULES="$(
npm list -g --depth=0 |
command sed -e '/ npm@/d' -e '/ (empty)$/d'
)"
local MODULE_COUNT
MODULE_COUNT="$(
command printf %s\\n "$NPM_GLOBAL_MODULES" |
command sed -ne '1!p' | # Remove the first line
wc -l | command tr -d ' ' # Count entries
)"
if [ "${MODULE_COUNT}" != '0' ]; then
# shellcheck disable=SC2016
echo '=> You currently have modules installed globally with `npm`. These will no'
# shellcheck disable=SC2016
echo '=> longer be linked to the active version of Node when you install a new node'
# shellcheck disable=SC2016
echo '=> with `nvm`; and they may (depending on how you construct your `$PATH`)'
# shellcheck disable=SC2016
echo '=> override the binaries of modules installed with `nvm`:'
echo
command printf %s\\n "$NPM_GLOBAL_MODULES"
echo '=> If you wish to uninstall them at a later point (or re-install them under your'
# shellcheck disable=SC2016
echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
echo
echo ' $ nvm use system'
echo ' $ npm uninstall -g a_module'
echo
fi
}
nvm_do_install() {
if [ -n "${NVM_DIR-}" ] && ! [ -d "${NVM_DIR}" ]; then
if [ -e "${NVM_DIR}" ]; then
echo >&2 "File \"${NVM_DIR}\" has the same name as installation directory."
exit 1
fi
if [ "${NVM_DIR}" = "$(nvm_default_install_dir)" ]; then
mkdir "${NVM_DIR}"
else
echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
exit 1
fi
fi
if [ -z "${METHOD}" ]; then
# Autodetect install method
if nvm_has git; then
install_nvm_from_git
elif nvm_has nvm_download; then
install_nvm_as_script
else
echo >&2 'You need git, curl, or wget to install nvm'
exit 1
fi
elif [ "${METHOD}" = 'git' ]; then
if ! nvm_has git; then
echo >&2 "You need git to install nvm"
exit 1
fi
install_nvm_from_git
elif [ "${METHOD}" = 'script' ]; then
if ! nvm_has nvm_download; then
echo >&2 "You need curl or wget to install nvm"
exit 1
fi
install_nvm_as_script
else
echo >&2 "The environment variable \$METHOD is set to \"${METHOD}\", which is not recognized as a valid installation method."
exit 1
fi
echo
local NVM_PROFILE
NVM_PROFILE="$(nvm_detect_profile)"
local PROFILE_INSTALL_DIR
PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")"
SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\" # This loads nvm\\n"
# shellcheck disable=SC2016
COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
BASH_OR_ZSH=false
if [ -z "${NVM_PROFILE-}" ] ; then
local TRIED_PROFILE
if [ -n "${PROFILE}" ]; then
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
fi
echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
echo "=> Create one of them and run this script again"
echo " OR"
echo "=> Append the following lines to the correct file yourself:"
command printf "${SOURCE_STR}"
echo
else
if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
BASH_OR_ZSH=true
fi
if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
echo "=> Appending nvm source string to $NVM_PROFILE"
command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
else
echo "=> nvm source string already in ${NVM_PROFILE}"
fi
# shellcheck disable=SC2016
if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
echo "=> Appending bash_completion source string to $NVM_PROFILE"
command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
else
echo "=> bash_completion source string already in ${NVM_PROFILE}"
fi
fi
if ${BASH_OR_ZSH} && [ -z "${NVM_PROFILE-}" ] ; then
echo "=> Please also append the following lines to the if you are using bash/zsh shell:"
command printf "${COMPLETION_STR}"
fi
# Source nvm
# shellcheck source=/dev/null
\. "$(nvm_install_dir)/nvm.sh"
nvm_check_global_modules
nvm_install_node
nvm_reset
echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
command printf "${SOURCE_STR}"
if ${BASH_OR_ZSH} ; then
command printf "${COMPLETION_STR}"
fi
}
#
# Unsets the various functions defined
# during the execution of the install script
#
nvm_reset() {
unset -f nvm_has nvm_install_dir nvm_latest_version nvm_profile_is_bash_or_zsh \
nvm_source nvm_node_version nvm_download install_nvm_from_git nvm_install_node \
install_nvm_as_script nvm_try_profile nvm_detect_profile nvm_check_global_modules \
nvm_do_install nvm_reset nvm_default_install_dir
}
[ "_$NVM_ENV" = "_testing" ] || nvm_do_install
} # this ensures the entire script is downloaded #
File diff suppressed because it is too large. Load diff
@@ -1,35 +0,0 @@
{
"name": "js-rme",
"version": "1.0.0",
"description": "Datenvisualisierung mit js/node/chartjs",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "Noah Thiering",
"license": "ISC",
"dependencies": {
"bootstrap": "^5.1.3",
"chart.js": "^3.7.0",
"chartjs-plugin-zoom": "^1.2.0",
"ejs": "^3.1.6",
"express": "^4.17.2",
"jquery": "^3.6.0",
"leaflet": "^1.7.1",
"leaflet.offline": "^2.1.0",
"mysql": "^2.18.1",
"pg": "^8.7.1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Noah4ever/NoahsDataTool.git"
},
"bugs": {
"url": "https://github.com/Noah4ever/NoahsDataTool/issues"
},
"homepage": "https://github.com/Noah4ever/NoahsDataTool#readme",
"devDependencies": {
"nodemon": "^2.0.15"
}
}
@@ -1,575 +0,0 @@
"use strict";
var path = require("path");
var bodyParser = require("body-parser");
var util = require("util");
var urlencodedParser = bodyParser.urlencoded({ extended: false });
// ----- SERVER
var express = require("express");
var app = express();
const port = 8080;
// ----- DATA
var ejs = require("ejs");
app.set("view engine", "ejs");
var mysql = require("mysql");
var { Client } = require("pg");
var con;
var query;
app.use(express.static(path.join(__dirname, 'views')));
/*
host: "ctcap09",
user: "ets_exm",
password: "",
database: "guez1",
*/
// Hostname: ctcap02
// Username: ets_exm
// Database: guez_20210926
// If the user presses "GetData" button, they get saved here:
let data = {};
let tempData = {};
// If the user presses "GetAllData" button, they get saved here:
let allData = [];
// Timelabels (01:00, 01:30, 02:00, ...) get saved here:
let time = [];
// Inputfields get saved here:
let inputs = {
// Database settings
host: "ctcap09",
user: "ets_exm",
password: "",
database: "guez1",
startDay: 1,
endDay: 1,
selectedEvents: [],
eventtypes: [],
exercise: {},
};
let processStatus = "";
let progressCount = {
cur: 0,
max: 0
};
// All Exercises get saved here:
let allExercises = [];
let exerciseTable = "";
// All Eventtypes get saved here:
let allEventtypes = [];
// All distinct eventtypes on selected exercise
let exerciseEventtypes = [];
// Days that the user can select get saved here:
let days = ["YYYY-MM-DD"];
// If user presses "Connect" button to connect to database. If successfull it gets set to true:
let connectedToDatabase = false;
let selectedExercise = {};
// Error array (should be 0)
let error = 0;
/*
1 = Database settings error
2 =
3 =
4 =
5 =
*/
// Settings that can be changed in /settings
let settings = {};
const color = {
reset: "\x1b[0m",
bright: "\x1b[1m",
dim: "\x1b[2m",
underscore: "\x1b[4m",
blink: "\x1b[5m",
reverse: "\x1b[7m",
hidden: "\x1b[8m",
fg_black: "\x1b[30m",
fg_red: "\x1b[31m",
fg_green: "\x1b[32m",
fg_yellow: "\x1b[33m",
fg_blue: "\x1b[34m",
fg_magenta: "\x1b[35m",
fg_cyan: "\x1b[36m",
fg_white: "\x1b[37m",
bg_black: "\x1b[40m",
bg_red: "\x1b[41m",
bg_green: "\x1b[42m",
bg_yellow: "\x1b[43m",
bg_blue: "\x1b[44m",
bg_magenta: "\x1b[45m",
bg_cyan: "\x1b[46m",
bg_white: "\x1b[47m"
}
function loadSiteFunc(siteRenderer){
loadSite(siteRenderer, data, time, inputs, days, allExercises, error);
}
async function loadSite(siteRenderer, dataSet, timeSet, inputsSet, daysSet, allExercisesSet, errorNum) {
siteRenderer.render("index", {
data: dataSet,
time: timeSet,
inputs: inputsSet,
days: daysSet,
allExercises: allExercisesSet,
exerciseEventtypes: exerciseEventtypes,
error: errorNum
});
}
async function getExercises() {
try {
let allExercises = [];
const result = await query("SELECT * FROM exm.exercise ORDER BY start_time DESC");
for (let i = 0; i < result.rows.length; i++) {
allExercises[i] = {};
allExercises[i]["name"] = result.rows[i].name;
if(result.rows[i].start_time == 0){
allExercises[i]["start_time"] = await getStringDay(result.rows[i].begin_time);
}else{
allExercises[i]["start_time"] = await getStringDay(result.rows[i].start_time);
}
if(result.rows[i].stop_time == 0){
allExercises[i]["stop_time"] = await getStringDay(0)
}else{
allExercises[i]["stop_time"] = await getStringDay(result.rows[i].stop_time);
}
allExercises[i]["id"] = result.rows[i].id;
}
return allExercises;
//loadSite(siteRenderer, {}, time, inputs, days, allExercises, error);
} catch (err) {
errOutput(err);
return err
}
}
async function getExerciseDays() {
days = [];
// Converting selected exercise start time to unix timestamp
let mintime = new Date(inputs.exercise.start_time) * 1;
// Converting selected exercise stop time to unix timestamp
let maxtime = new Date(inputs.exercise.stop_time) * 1;
// Calculate time difference
let timeDifference = maxtime - mintime;
// Calculate day difference from time difference
let dayDifference = Math.floor(timeDifference / (1000 * 3600 * 24));
days[0] = await getStringDay(mintime);
// Filling the day difference with days
for (let i = 0; i < dayDifference ; i++) {
let day = new Date(days[i])
day.setDate(day.getDate() + 1);
// Converting Unixtimestamp to readable format (YYYY-MM-DD) and inserting it
days[i + 1] = await getStringDay(parseInt(day * 1));
}
return days;
}
async function getData(startTime, endTime, dayDif) {
try {
// Gets correct timelabels for x axis
time = [];
// 1 Day: 00:00 - 24:00, 2 Days: 00:00 - 24:00 - 00:00 - 24:00, ...
for (let i = 0; i < dayDif; i++) {
time = time.concat(await getTimeInSteps(startTime, endTime, 23, i));
}
data = {};
// For every eventtype in exercise
progressCount.max = inputs.eventtypes.length;
for (const el of inputs.eventtypes) {
if(inputs.selectedEvents.includes(el.id.toString())){
processStatus = el.name; // For showing what the server does on the client
progressCount.cur++; // For showing what the server does on the client
process.stdout.clearLine(0);
process.stdout.cursorTo(0);
process.stdout.write("Adding \"" + el.name + "\" to dataset..."); // For showing what the server does on the server
data[el.id] = [[], el.name];
// Init data set to zero
for (let i = 0; i < 24 * dayDif; i++) {
data[el.id][0][i] = 0;
}
// Get start and end day from user inputs
let startDay = new Date(days[parseInt(inputs.startDay)]);
let endDay = new Date(days[parseInt(inputs.endDay)]);
// Convert to unixtimestamp
startDay *= 1;
endDay = (endDay * 1) + 86400000; // Plus 24 hours
// Sql query to database. Every sample_time from the selected exercise table where the event type is el.id and the sample time between start and endday from user inputs
const res2 = await query("SELECT sample_time FROM " + exerciseTable + " WHERE event_type_id = " + el.id + " AND sample_time BETWEEN " + startDay + " AND " + endDay);
// For every row from the query result
for (const row of res2.rows) {
let date = new Date(parseInt(row.sample_time)); // Converts current sample_time to javascript date
data[el.id][0][date.getHours() + (24 * Math.floor(Math.abs(date - startDay) / (1000 * 60 * 60 * 24)))]++;
/*
* date.getHours() - gives a value between 0 and 23
*
* Math.floor(Math.abs(date - startDay) / (1000 * 60 * 60 * 24)) - gives the day difference between the start day and the currentday
*
* The day difference is then multiplied by 24 to give the correct index in the data array
*
* Datenstruktur:
* data = {event_type.id: [[0,0,0,0,0,0,0,0,0,0,0,0,...], event_type.name, [latitude, longitude]], ...}
* 24 zeros, every zero stands for a time (first zero = 0:00, second = 1:00,...), if an
* event is found at 1:00 that zero is incremented to 1, if another event is found the 1 is incremented to 2.
* This is done for every zero on every event_type.
*/
}
}
}
process.stdout.clearLine(0);
process.stdout.cursorTo(0);
successOutput("Filled \"dataset\" with data!");
successOutput("Sending data to \"index.ejs\"...");
progressCount.cur = 0;
progressCount.max = 0;
return data;
} catch (err) {
console.log(err);
errOutput(err);
data.errorcode = 600;
data.errorinfo = "Something went wrong while the Server processed the data! Please try again later!"
return data;
}
}
app.get("/", (req, res2) => {
//sendFile(__dirname + "/views/index.html") // -> input field sind nicht richtig
loadSiteFunc(res2);
//loadSite(res2, data, time, inputs, days, allExercises, error);
});
app.get("/settings", (req, res) => {
res.render("settings", {
settings: settings,
error: error
});
})
app.get("/processstatus", async (req, res) => {
let data = {
curElement: processStatus,
count: {
cur: parseInt(progressCount.cur),
max: parseInt(progressCount.max)
}
}
res.send(data);
processStatus = "";
});
app.get("/connectdatabase", async function(req, res){
let data = {};
if (req.query.host && req.query.user && req.query.database) {
inputs["host"] = req.query.host;
inputs["user"] = req.query.user;
inputs["password"] = req.query.password;
inputs["database"] = req.query.database;
// Create connection from user inputs
con = new Client({
user: inputs["user"],
host: inputs["host"],
database: inputs["database"],
password: inputs["password"]
});
// Check connection to database
infoOutput("Connecting to \"" + inputs["database"] + "\"...")
await con.connect()
.then(async () => {
successOutput("Connected to new Database (\"" + inputs["database"] + "\")!");
query = util.promisify(con.query).bind(con);
data.errorcode = 0;
data.allExercises = await getExercises();
allExercises = data.allExercises; // Save all Exercises
})
.catch((err) => {
console.log(err);
if(err.code == "ENOTFOUND"){ // Hostname wrong
data.errorcode = 501;
data.errorinfo = "Hostname (" + err.hostname + ") is incorrect! Please check your inputfields and try again!";
}else if(err.code == "28000"){ // Username wrong
data.errorcode = 502;
data.errorinfo = "Username (" + inputs.user + ") is incorrect! Please check your inputfields and try again!";
}else if(err.code == "WRONG PASSWORD"){ // Not working (Has to be correct err.code)
data.errorcode = 503;
data.errorinfo = "Password is incorrect! Please check your inputfields and try again!";
}else if(err.code == "3D000"){ // Databasename wrong
data.errorcode = 504;
data.errorinfo = "Database (" + inputs.database + ") is incorrect! Please check your inputfields and try again!";
}
errOutput(err);
});
}else{
if(!req.query.host){ // Host inputfield empty
data.errorcode = 505;
data.errorinfo = "Host inputfield is empty! Please try again!";
}else if(!req.query.user){ // User inputfield empty
data.errorcode = 506;
data.errorinfo = "User inputfield is empty! Please try again!";
}else if(!req.query.database){ // Database inputfield empty
data.errorcode = 508;
data.errorinfo = "Database inputfield is empty! Please try again!";
}else{ // Something else
data.errorcode = 500;
data.errorinfo = "Internal server error!";
}
}
// Send data to client
res.send(data);
});
app.get("/selectexercise", async function(req, res){
let data = {};
inputs.startDay = req.query.startDay;
inputs.endDay = req.query.endDay;
inputs.eventtypes = await getEventtypes(req.query.id);
inputs.days = await getExerciseDays();
data.errorcode = 0;
data.data = await getData(0, 23, (inputs.endDay - inputs.startDay)+1);
data.time = time;
data.inputs = inputs;
res.send(data);
});
app.get("/getdata", async function(req, res){
let data = {};
inputs.startDay = req.query.startDay;
inputs.endDay = req.query.endDay;
data.errorcode = 0;
inputs.selectedEvents = req.query.eventtypes;
data.data = await getData(0, 23, (inputs.endDay - inputs.startDay)+1);
data.time = time;
data.inputs = inputs;
res.send(data);
});
app.post("/", urlencodedParser, async function (req, res) {
let button_id = req.body.button_id; // 1 -> Connect, 2 -> Get Data, 3 -> Get All Data, 6 -> Select Exercise
if (button_id == 1) { // Connect Button
if (req.body.host && req.body.user && req.body.database) {
inputs["host"] = req.body.host;
inputs["user"] = req.body.user;
inputs["password"] = req.body.password;
inputs["database"] = req.body.database;
// Create connection from user inputs
con = new Client({
user: inputs["user"],
host: inputs["host"],
database: inputs["database"],
password: inputs["password"]
});
// Check connection to database
infoOutput("Connecting to \"" + inputs["database"] + "\"...")
con.connect()
.then(async () => {
connectedToDatabase = true;
inputs["button_id"] = button_id;
successOutput("Connected to new Database (\"" + inputs["database"] + "\")!");
query = util.promisify(con.query).bind(con);
error = 0;
getExercises(res);
})
.catch((err) => {
connectedToDatabase = false;
errOutput(err);
error = 1;
loadSiteFunc(res);
});
}
}
if (connectedToDatabase) {
if (button_id == 2) { // Get Data Button
let startTime = 0, endTime = 23;
if (req.body.startTime && req.body.endTime) {
startTime = parseInt(req.body.startTime);
endTime = parseInt(req.body.endTime);
// If end time is smaller/earlier than start time
if (endTime < startTime) {
endTime = startTime + 1;
}
} else if (req.body.startTime && !req.body.endTime) {
startTime = parseInt(req.body.startTime);
} else if (!req.body.start && req.body.endTime) {
endTime = parseInt(req.body.endTime);
}
// If user selected eventtypes
if (req.body.eventtypes) {
// Insert them into inputs
inputs["selectedEvents"] = req.body.eventtypes;
} else {
// Insert "random" number so .length is not 0
inputs["selectedEvents"] = ["1", "7"];
}
// Save user inputs into inputs{}
inputs["startTime"] = startTime;
inputs["endTime"] = endTime;
inputs["days"][0] = req.body.startDay;
inputs["days"][1] = req.body.endDay;
inputs["button_id"] = button_id;
// Check if start day is higher than end days
if (inputs["days"][0] > inputs["days"][1]) {
inputs["days"][0] = inputs["days"][1];
}
if (inputs["days"][0] == inputs["days"][1]) {
getData(startTime, endTime, 1, res);
} else {
let dayDif = inputs["days"][1] - inputs["days"][0] + 1;
getData(startTime, 23, dayDif, res);
}
}
if (button_id == 6) { // Select exercise
inputs["button_id"] = button_id;
// Find exercise information
selectedExercise = allExercises.find(el => el.id == req.body.exercise)
selectedExerciseTable = "ex_" + selectedExercise.id + ".eem_event";
inputs["selectedExercise"] = selectedExercise.name + ", " + selectedExercise.id + ", " + selectedExercise.start_time + ", " + selectedExercise.stop_time;
successOutput("Selected exercise: \"" + selectedExercise.name + ", " + selectedExercise.id + ", " + selectedExercise.start_time + ", " + selectedExercise.stop_time + "\"");
// Select all event types
const RESULTeventtypes = await query("SELECT * FROM pdm.pdm_event_type"); // all event types
allEventtypes = RESULTeventtypes.rows;
/*
exerciseEventtypes = allEventtypes;
let count = 0;
for(let el in allEventtypes){
inputs["selectedEvents"][count] = el.toString();
count++;
}*/
// Get all distinct event types from selected exercise
const RESULTexerciseEventtypesid = await query("SELECT DISTINCT event_type_id FROM " + selectedExerciseTable + " ORDER BY event_type_id ASC" ); // all event types in selected exercise
const exerciseEventtypesid = RESULTexerciseEventtypesid.rows;
exerciseEventtypes = [];
for (let i = 0; i < exerciseEventtypesid.length; i++) {
// Activate all checkboxes
inputs["selectedEvents"][i] = parseInt(exerciseEventtypesid[i].event_type_id).toString();
exerciseEventtypes[i] = {};
// Get name via id from allEventtypes
exerciseEventtypes[i] = allEventtypes.find(el => el.id == exerciseEventtypesid[i].event_type_id);
}
// Empty allExercises so pop up window does not show up
allExercises = [];
getExerciseDays(res);
}
}
});
async function getEventtypes(exerciseId){
let eventtypes = [];
// Set exercise table
exerciseTable = "ex_" + exerciseId + ".eem_event";
// Find selected exercise information
let exercise = allExercises.find(el => el.id == exerciseId)
// Save information in inputs
inputs.exercise.name = exercise.name;
inputs.exercise.id = exercise.id;
inputs.exercise.start_time = exercise.start_time;
inputs.exercise.stop_time = exercise.stop_time;
successOutput("Selected exercise: \"" + inputs.exercise.name + ", " + inputs.exercise.id + ", " + inputs.exercise.start_time + ", " + inputs.exercise.stop_time + "\"");
// Select all event types
allEventtypes = (await query("SELECT * FROM pdm.pdm_event_type")).rows;
// Get all distinct event types from selected exercise
const exerciseEventtypesid = (await query("SELECT DISTINCT event_type_id FROM " + exerciseTable + " ORDER BY event_type_id ASC" )).rows;
for (let i = 0; i < exerciseEventtypesid.length; i++) {
// Activate all checkboxes
inputs.selectedEvents[i] = parseInt(exerciseEventtypesid[i].event_type_id).toString();
eventtypes[i] = {};
// Get name via id from allEventtypes
eventtypes[i] = allEventtypes.find(el => el.id == exerciseEventtypesid[i].event_type_id);
}
return eventtypes;
}
async function getTimeInSteps(start, end, steps, curDayIndex) {
let times = []; // Where times are stored
let hour = start;
let startDay = new Date(days[parseInt(inputs["startDay"])])
let dayDate = await getStringDay(startDay.setDate(startDay.getDate() + curDayIndex) * 1);
// First and last entry are the start and end time
times[0] = dayDate + " " +("0" + hour).substr(-2) + ":00";
times[steps] = ("0" + end).substr(-2) + ":00";
let dif = end - start; // Difference between start time and end time
let step = dif / steps * 60; // Calculate steps
let minutes = 0, printMin, printHour;
for (let i = 0; i < steps - 1; i++) {
minutes += step;
if (minutes >= 60) { // If minutes are over or 60 minutes
hour++; // Hour gets incremented
minutes -= 60; // Minutes minus 60
}
printMin = ("0" + Math.trunc(minutes)).substr(-2);
printHour = ("0" + Math.trunc(hour)).substr(-2);
times[i + 1] = printHour + ":" + printMin;
}
return times; // Return times
}
async function getStringDay(InputTime) {
let unixTimestamp = 0;
let seperator = "-";
if (InputTime > 0) {
unixTimestamp = new Date(parseInt(InputTime));
} else {
unixTimestamp = new Date(new Date().getTime())
}
return unixTimestamp.getFullYear() + seperator + ("0" + (unixTimestamp.getMonth() + 1)).substr(-2) + seperator + ("0" + unixTimestamp.getDate()).substr(-2);
}
function infoOutput(message, returnText){
let firstWord = message.split(' ')[0];
let quoteIndex = message.indexOf("\"");
let text = color.fg_yellow + color.bg_black + "Message:" + color.reset + " " + color.fg_green + firstWord + color.fg_green + message.substring(firstWord.length, quoteIndex) +
"\"" +color.fg_white + message.substring(quoteIndex+1, message.indexOf("\"", quoteIndex+1)) + color.fg_green + message.substring(message.indexOf("\"", quoteIndex+1), message.length+1) + color.reset + color.fg_white;
if(returnText)
return text;
console.log(text);
}
function successOutput(message){
let firstWord = message.split(' ')[0];
let quoteIndex = message.indexOf("\"");
console.log(color.fg_white + color.bg_green + "Successfully:" + color.bg_black + " " + color.fg_yellow + firstWord + color.fg_green + message.substring(firstWord.length, quoteIndex) +
"\"" +color.fg_white + message.substring(quoteIndex+1, message.indexOf("\"", quoteIndex+1)) + color.fg_green + message.substring(message.indexOf("\"", quoteIndex+1), message.length+1) + color.reset + color.fg_white);
}
function errOutput(error) {
// Prints error message with red color
console.log(color.bg_red + "ERROR CAUGHT:" + color.bg_black + " " + color.fg_red + error + color.fg_white + color.reset);
}
app.listen(port, () => {
infoOutput("Server: \"http://localhost:" + port + "/\"");
infoOutput("Settings: \"http://localhost:" + port + "/settings\"");
});
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1000 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 965 KiB

@@ -1,985 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="static/libarys/chartjs/chart.js"></script>
<script src="static/libarys/chartjs/zoom-plugin/chartjs-plugin-zoom.js"></script>
<link rel="stylesheet" href="static/style.css">
<link rel="stylesheet" href="static/libarys/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="static/libarys/leaflet/leaflet.css">
<link rel="stylesheet" href="static/libarys/jquery/jquery-ui-1.13.1.min.css">
<link rel="icon" type="image/x-icon" href="static/images/favicon/favicon.png">
<script src="static/libarys/favicon/favloader.min.js"></script>
<script src="static/libarys/favicon/parseGIF.min.js"></script>
<script type="text/javascript" src="static/libarys/jquery/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="static/libarys/jquery/jquery-ui-1.13.1.min.js"></script>
<script type="application/javascript" src="static/libarys/chartjs/resizeObserver/resizeObserver.js"></script>
<script>
let matched = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (matched) {
favloader.init({
gif: "static/images/favicon/Favicon2ForDarkmode.gif"
});
} else {
favloader.init({
gif: "static/images/favicon/Favicon2.gif"
});
}
favloader.start();
</script>
<title id="title">Noah's Timeline | RME</title>
</head>
<body>
<main style="margin-bottom: 30px;">
<div id="selectexercisediv"></div>
<div id="processStatus-container"></div>
<div id="info-container"></div>
<div class="d-flex flex-column flex-shrink-0 ps-3 border-end border-secondary pe-2" style="width: 280px; position: fixed;">
<p href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-decoration-none">
<svg class="bi me-2" width="40" height="32">
<use xlink:href="#bootstrap"></use>
</svg>
<span class="fs-4">Settings</span>
</p>
<hr>
<ul class="nav nav-pills flex-column mb-auto ">
<li>
<div class="container text-center">
<button class="btn btn-primary mb-2" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggleExternalContent"
aria-expanded="false" aria-controls="navbarToggleExternalContent">
Database settings
</button>
</div>
</li>
<li>
<div class="row mb-1">
<div class="collapse" style="height: 160px;" id="navbarToggleExternalContent">
<div class="pt-2">
<div class="col"></div>
<div class="col-10 mx-auto">
<form action="/" method="POST">
<div id="" class="row mb-0">
<div class="row mt-1 mx-auto">
<div class="input-group input-group-sm mb-2">
<span class="input-group-text" id="inputGroup-sizing-sm">Host</span>
<input type="text" id="host" name="host" title="Host" value="<%- inputs['host'] %>" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-sm">
</div>
</div>
<div class="row mx-auto">
<div class="input-group input-group-sm mb-2">
<span class="input-group-text" id="inputGroup-sizing-sm">Username</span>
<input type="text" id="user" name="user" title="Username" value="<%- inputs['user'] %>" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-sm">
</div>
</div>
<div class="row mx-auto">
<div class="input-group input-group-sm mb-2">
<span class="input-group-text" id="inputGroup-sizing-sm">Password</span>
<input type="password" id="password" name="password" title="Password for user" value="<%- inputs['password'] %>" class="form-control"
aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
</div>
</div>
<div class="row mx-auto">
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" id="inputGroup-sizing-sm">Database</span>
<input type="text" id="database" name="database" title="Databasename" value="<%- inputs['database'] %>" class="form-control"
aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
</div>
</div>
<div id="inputs">
<button id="connect" class="btn btn-primary mt-1" type="submit" title="Connect to database!" name="button_id" value="1">Connect</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</li>
<hr>
<li>
<div id="mb-3">
<div id="inputs">
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#toggleEventTypes" aria-expanded="true"
aria-controls="toggleEventTypes">Eventtypes</button>
<!-- <button class="btn btn-primary " type="submit" id="getAllData" title="Connect to database!" name="button_id" value="3" <%
if(inputs[ "getAllData"]) { %> disabled
<% } %> >Get all data</button> -->
</div>
</div>
<form action="/" method="POST">
<div class="container p-0 show collapse scrollable" id="toggleEventTypes">
</div>
</li>
<hr>
<li class="nav-item">
<div id="allInputs" class="container mb-1">
<div id="day-select" class="row container p-0 text-center mx-auto" style="width: 100%">
</div>
</div>
<div id="inputs">
<button id="getdata" class="btn btn-success mt-3" style="width: 80%;" type="submit" title="Gets data from database and shows them!" name="button_id"
value="2">Get data</button>
</div>
</li>
</form>
</li>
</ul>
</div>
<div class="container mx-auto mt-4 window">
<div class="row">
<div class="col"></div>
<div class="col-15">
<h1 class="text-center pt-1 mb-2 mt-0">Noah's Timeline</h1>
</div>
</div>
<div class="row">
<div class="col"></div>
<div class="col-15 mx-2 mt-0" style="max-width: 100%;">
<p class="text-muted text-center fs-5 mb-1">
<small id="info-waiting">Connect to database</small>
</p>
<div class="chart-containter">
<div class="container ">
<canvas id="myChartAll"></canvas>
</div>
<div id="reset_zoom" class="container text-end">
</div>
</div>
</div>
<div class="row pb-2">
<div class="col">
<div class="container" style="width: 80%; margin-right: 15px;">
<canvas id="myChartDoughnut"></canvas>
</div>
</div>
<div class="col">
<div class="container mx-auto" style="padding-top: 25%;">
<canvas id="myChartBar"></canvas>
</div>
</div>
</div>
<!-- <div class="row mb-5">
<div class="col"></div>
<div class="col-10">
<div id="map"></div>
</div>
</div> -->
<div class="container" id="singleCharts">
</div>
</div>
</main>
<script src="static/libarys/leaflet/leaflet.js"></script>
<script>
let progress = { // For progress bar
current: 0,
max: 0
}
function updateProgress(current, max){
if(current == -1 && max == -1){
progress.current = (progress.max - 4);
}else{
progress.current = current;
progress.max = max;
}
updateProgressbar()
}
function updateProgressbar(){
console.log("CURRENT: " + progress.current + "\nMAX: " + progress.max);
let greyPortion = progress.max - progress.current;
let grey = "";
for(let i = 0; i < greyPortion; i++){
grey += ", #cecece"
}
let green = "";
for(let i = 0; i < progress.current; i++){
green += " #7afe52,"
}
green += "#10ff00";
document.getElementById("processStatus").style.backgroundImage = "linear-gradient(to right," + green + grey + ")";
}
let getDataButton = document.getElementById("getdata"); // Get Data Button
getDataButton.addEventListener("click", function(e){ // Eventlistener for Get Data Button
e.preventDefault();
let eventtypesValues = [];
document.querySelectorAll("input[name=eventtypes]:checked").forEach((checkbox) => {
eventtypesValues.push(checkbox.value); // Get all checked eventtypes
});
let data = {};
data.startDay = document.getElementById("startday-select").value;
data.endDay = document.getElementById("endday-select").value;
data.eventtypes = eventtypesValues;
$.ajax({ // Getdata
url: "/getdata",
type: "GET",
data: data,
contentType: "application/json",
success: function(data){
if(data.errorcode == 0){
console.log(data);
updateCharts(data);
clearInterval(processStatusInterval);
updateProgress(-1, -1); // -> progress.current = progress.max - 4 // (Loading main linechart, Loading doughnutchart, Loading barchart, Loading all singlecharts)
}else{
info("error", data.errorcode, data.errorinfo);
}
},
error: function(jqXHR, textStatus, errorThrown) {
info("error", textStatus, errorThrown);
}
});
document.getElementById("processStatus-container").innerHTML = '<div id="processStatus" class="pt-3 text-center">Waiting for server...</div>'
let processStatusElement = document.getElementById("processStatus");
let processStatusInterval = setInterval(
() => {
$.ajax({ // Get currentstatus of server process
url: "/processstatus",
type: "GET",
contentType: "application/json",
success: function(data){ // If data successfully comes back
if(data.curElement){
processStatusElement.innerHTML = "Adding " + data.curElement + "...";
}
if(data.count.cur > 0){
updateProgress(data.count.cur, data.count.max + 4) // + 4 (Loading main linechart, Loading doughnutchart, Loading barchart, Loading all singlecharts)
}
}
})
}, 10);
});
let connectButton = document.getElementById("connect");
connectButton.addEventListener("click", function(e){
e.preventDefault();
let data = {};
data.host = document.getElementById("host").value;
data.user = document.getElementById("user").value;
data.password = document.getElementById("password").value;
data.database = document.getElementById("database").value;
$.ajax({ // Connect to database
url: "/connectdatabase",
type: "GET",
data: data,
contentType: "application/json",
success: function(data){
if(data.errorcode == 0){ // If no error occurred
function getExerciseOptions(options){
let str = "";
for(let i = 0; i < options.length; i++){
str += '<option value="' + options[i].id + '" class="text-center">' +
options[i].name + "|" + options[i].id + "|" + options[i].start_time + " - " + options[i].stop_time + '</option>';
}
return str;
}
document.getElementById("selectexercisediv").innerHTML =
'<div id="exercise" class="p-2 container mx-auto text-center position-fixed">' +
'<button id="exercise-close">X</button>' +
'<label for="day-select" class="mb-1 px-5 mx-5" style="display: block;">Select an exercise:</label>' +
'<select class="btn btn-outline-primary mb-2" name="exercise" id="exercise-select">' +
getExerciseOptions(data.allExercises) +
'</select>' +
'<div class="input-group input-group-sm my-3 px-5">' +
'<span class="input-group-text" id="day-range-sm">Day Range</span>' +
'<input type="text" id="day-range" class="form-control" aria-label="day-range-sm" aria-describedby="day-range-sm" disabled>' +
'</div>' +
'<div class="container px-3 my-2">' +
'<div id="slider-range"></div>' +
'</div>' +
'<button class="btn btn-primary d-block mx-auto mt-3" id="selectexercise">Select exercise</button>' +
'</div>';
$("#exercise").draggable();
document.getElementById("exercise-close").addEventListener("click", (e) => {
document.getElementById("selectexercisediv").innerHTML = "";
});
async function getExerciseDays(exercise){ // Get days between start and stop time
let days = [];
// Converting selected exercise start time to unix timestamp
let mintime = new Date(exercise.start_time) * 1;
// Converting selected exercise stop time to unix timestamp
let maxtime = new Date(exercise.stop_time) * 1;
// Calculate time difference
let timeDifference = maxtime - mintime;
// Calculate day difference from time difference
let dayDifference = Math.floor(timeDifference / (1000 * 3600 * 24));
days[0] = await getStringDay(mintime);
// Filling the day difference with days
for (let i = 0; i < dayDifference ; i++) {
let day = new Date(days[i])
day.setDate(day.getDate() + 1);
// Converting Unixtimestamp to readable format (YYYY-MM-DD) and inserting it
days[i + 1] = await getStringDay(parseInt(day * 1));
}
async function getStringDay(InputTime) {
let unixTimestamp = 0;
let seperator = "-";
if (InputTime > 0) {
unixTimestamp = new Date(parseInt(InputTime));
} else {
unixTimestamp = new Date(new Date().getTime())
}
return unixTimestamp.getFullYear() + seperator + ("0" + (unixTimestamp.getMonth() + 1)).substr(-2) + seperator + ("0" + unixTimestamp.getDate()).substr(-2);
}
return days;
}
let startDaySlider = 0;
let endDaySlider = 0;
let exerciseSelect = document.getElementById("exercise-select");
let exercise = data.allExercises.find(el => el.id == exerciseSelect.value); // Get current selected exercise
async function slider(){
let days = await getExerciseDays(exercise); // Get days between start and stop time
$("#slider-range").slider({
range: true,
min: 0,
max: days.length-1,
values: [ 0, 1 ],
slide: function( event, ui ) {
$("#day-range").val( days[ui.values[ 0 ]] + " - " + days[ui.values[ 1 ]]);
},
stop: function(event, ui){ // When user stops slider:
startDaySlider = ui.values[0]; // Save values
endDaySlider = ui.values[1];
}
});
$("#day-range").val( days[$("#slider-range").slider("values", 0)] +
" - " + days[$("#slider-range").slider("values", 1)] );
}
slider();
exerciseSelect.addEventListener("change", async (e) =>{ // On user change exercise
let exercise = data.allExercises.find(el => el.id == exerciseSelect.value); // Get current selected exercise
let days = await getExerciseDays(exercise); // Get days between start and stop time
$("#slider-range").slider({
range: true,
min: 0,
max: days.length - 1,
values: [ 0, 1 ],
slide: function(event, ui) {
$("#day-range").val( days[ui.values[ 0 ]] + " - " + days[ui.values[ 1 ]]); // Show date values
},
stop: function(event, ui){ // When user stops slider:
startDaySlider = ui.values[0]; // Save values
endDaySlider = ui.values[1];
}
});
$("#day-range").val( days[$("#slider-range").slider("values", 0)] +
" - " + days[$("#slider-range").slider("values", 1)] ); // Show date values
});
let selectexerciseButton = document.getElementById("selectexercise");
selectexerciseButton.addEventListener("click", function(e){ // On "Select Exercise"-Button click
e.preventDefault();
let exercise = document.getElementById("exercise-select").value; // Get exercise id
document.getElementById("selectexercisediv").innerHTML = ""; // Clear pop up
let data = {}; // Data object that gets send to server
data.startDay = startDaySlider;
data.endDay = endDaySlider;
data.id = exercise;
let gotData = false;
$.ajax({ // Select exercise
url: "/selectexercise",
type: "GET",
data: data,
contentType: "application/json",
success: function(data){ // If data successfully comes back
gotData = true;
clearInterval(processStatusInterval);
if(data.errorcode == 0){
let str =
'<div class="row">' +
'<div class="checkboxList">' +
'<input type="checkbox" name="eventtypes" id="checkbox_all" checked>' +
'<label for="checkbox_all" class="ms-1"><b>Select all</b></label>' +
'</div>' +
'</div>';
let eventtypes = data.inputs.eventtypes;
function checkChecked(eventtypeId){ // For checking if the checkbox is checked or not
if(data.inputs.selectedEvents.includes(eventtypeId.toString()))
return "checked";
}
for(let i = 0; i < eventtypes.length; i++){ // Checkbox eventtypes
let eventtype = eventtypes[i];
str +=
'<div class="row">' +
'<div class="checkboxList">' +
'<input type="checkbox" name="eventtypes" id="checkbox_' + i + '" value="' + eventtype.id + '"' + checkChecked(eventtype.id) + '>' +
'<label for="checkbox_' + i + '" class="ms-1">' +
eventtype.name + ' (id: ' + eventtype.id + ')' +
'</label>' +
'</div>' +
'</div>';
}
document.getElementById("toggleEventTypes").innerHTML = str;
let selectAllCheckbox = document.getElementById("checkbox_all");
selectAllCheckbox.addEventListener("click", (e) => {
let checkboxes = document.getElementsByName("eventtypes");
for(let checkbox of checkboxes){
checkbox.checked = selectAllCheckbox.checked;
}
});
str = "";
function getDayOptions(end_start_day){ // Day select options (Current start Day, Current end Day)
let days = data.inputs.days;
let str_options = "";
for(let i = 0; i < days.length; i++){ // For every day
let selected = "";
if(end_start_day == i){
selected = "selected"
}
str_options +=
'<option value="' + i + '" class="text-center"' + selected + '>' +
days[i] +
'</option>'; // All day options
}
return str_options;
}
str =
'<div class="col p-0 mt-1">' +
'<label for="startday-select">Start Day</label>' +
'<select class="btn btn-outline-primary p-1" name="startDay" id="startday-select" style="width: 100%; margin-right: 2px;">' +
'<option value="0" class="text-center">Start day</option>' +
getDayOptions(data.inputs.startDay) +
'</select>' +
'</div>' +
'<div class="col p-0 mt-1">' +
'<label for="endday-select">End Day</label>' +
'<select class="btn btn-outline-primary p-1" name="endDay" id="endday-select"style="width: 100%; margin-left: 2px;">' +
'<option value="0" class="text-center">End day</option>' +
getDayOptions(data.inputs.endDay) +
'</select>' +
'</div>';
document.getElementById("day-select").innerHTML = str;
updateProgress(-1, -1); // -> progress.current = progress.max - 4 // (Loading main linechart, Loading doughnutchart, Loading barchart, Loading all singlecharts)
updateCharts(data); // Update all charts with new data
}else{
info("error", data.errorcode, data.errorinfo);
}
},
error: function(jqXHR, textStatus, errorThrown) {
info("error", textStatus, errorThrown);
}
}); // Vlt gradient von rechts nach links in grün, wie weit der process ist...
document.getElementById("processStatus-container").innerHTML = '<div id="processStatus" class="pt-3 text-center">Waiting for server...</div>'
let processStatusElement = document.getElementById("processStatus");
let processStatusInterval = setInterval(
() => {
$.ajax({ // Get currentstatus of server process
url: "/processstatus",
type: "GET",
contentType: "application/json",
success: function(data){ // If data successfully comes back
if(data.curElement){
processStatusElement.innerHTML = "Adding " + data.curElement + "...";
}
if(data.count.cur > 0){
updateProgress(data.count.cur, data.count.max + 4) // + 4 (Loading main linechart, Loading doughnutchart, Loading barchart, Loading all singlecharts)
}
}
})
}, 10);
loadingSpinner();
});
}else{ // If error occurred
info("error", data.errorcode, data.errorinfo);
}
},
error: function(jqXHR, textStatus, errorThrown) {
info("error", textStatus, errorThrown);
}
});
});
// ----------========================================================----------
// ----< Chartjs >----
// ----------========================================================----------
// Chart infos
let charts = {};
charts.chartAll = {}; // Main chart
charts.doughnutChart = {}; // Pie chart
charts.barChart = {}; // Bar chart
charts.singleCharts = {}; // All single charts
charts.singleCharts.chart = []; // Array for all single charts
charts.chartAll.init = true; // If chart has to be initialized
charts.doughnutChart.init = true; // "
charts.barChart.init = true; // "
function getInitColors(){
let opacity = 0.4;
const colors = ['rgba(255, 61, 61,' + opacity + ')', 'rgba(255, 145, 61,' + opacity + ')',
'rgba(255, 213, 61,' + opacity + ')', 'rgba(232, 255, 61,' + opacity + ')',
'rgba(168, 255, 61,' + opacity + ')', 'rgba(93, 255, 61,' + opacity + ')',
'rgba(61, 255, 197,' + opacity + ')', 'rgba(61, 236, 255,' + opacity + ')',
'rgba(61, 168, 255,' + opacity + ')', 'rgba(61, 67, 255,' + opacity + ')',
'rgba(158, 61, 255,' + opacity + ')', 'rgba(236, 61, 255,' + opacity + ')',
'rgba(255, 61, 210,' + opacity + ')', 'rgba(255, 61, 152,' + opacity + ')',
'rgba(255, 209, 209,' + opacity + ')', 'rgba(255, 239, 186,' + opacity + ')',
'rgba(211, 255, 161,' + opacity + ')', 'rgba(161, 255, 210,' + opacity + ')',
'rgba(161, 214, 255,' + opacity + ')', 'rgba(255, 161, 255,' + opacity + ')'
];
const colorsOutline = ['rgba(255, 61, 61, 1)', 'rgba(255, 145, 61, 1)',
'rgba(255, 213, 61, 1)', 'rgba(232, 255, 61, 1)',
'rgba(168, 255, 61, 1)', 'rgba(93, 255, 61, 1)',
'rgba(61, 255, 197, 1)', 'rgba(61, 236, 255, 1)',
'rgba(61, 168, 255, 1)', 'rgba(61, 67, 255, 1)',
'rgba(158, 61, 255, 1)', 'rgba(236, 61, 255, 1)',
'rgba(255, 61, 210, 1)', 'rgba(255, 61, 152, 1)',
'rgba(255, 209, 209, 1)', 'rgba(255, 239, 186, 1)',
'rgba(211, 255, 161, 1)', 'rgba(161, 255, 210, 1)',
'rgba(161, 214, 255, 1)', 'rgba(255, 161, 255, 1)'
];
return [colors, colorsOutline];
}
const [colors, colorsOutline] = getInitColors();
async function updateCharts(allData){ // Initialized/Update all charts with new data
let processStatusElement = document.getElementById("processStatus");
loadingSpinner(); // Loading spinner (Loading data...)
let timeout = 25;
setTimeout(() => { // Timeout so progress can load
let data = allData.data; // Data
let exercise = allData.inputs.exercise; // Exercise informations
let timeLabels = allData.time; // Time labels
/* Update or init charts with data */
let lineConfig = getLineChartConfig(data); // Get config for all line charts
processStatusElement.innerHTML = "Loading main linechart...";
setTimeout(() => { // Timeout so progress can load
myChartAll(timeLabels, getDataset(data), lineConfig); // Update or init main chart
updateProgress(progress.current+1, progress.max);
let [dataLabels, dataCount] = getDataLables_Count(data);
processStatusElement.innerHTML = "Loading doughnutchart...";
setTimeout(() => { // Timeout so progress can load
doughnutChart(dataLabels, dataCount); // Update or init doughnut/pie chart
updateProgress(progress.current+1, progress.max);
processStatusElement.innerHTML = "Loading barchart...";
setTimeout(() => { // Timeout so progress can load
barChart(dataLabels, dataCount); // Update or init bar chart
updateProgress(progress.current+1, progress.max);
processStatusElement.innerHTML = "Loading all singlecharts...";
setTimeout(() => { // Timeout so progress can load
singleCharts(timeLabels, data, lineConfig); // Update or init all single charts
updateProgress(progress.current+1, progress.max);
resetZoomButton();
/* Header with exercise information */
$("#info-waiting").text(exercise.name + ", " + exercise.id + ", " + exercise.start_time + " - " + exercise.stop_time + " | Enable/disable by clicking event names");
document.getElementById("processStatus").style.backgroundImage = "linear-gradient(to right, grey, grey)";
document.getElementById("processStatus-container").innerHTML = "";
}, timeout);
}, timeout);
}, timeout);
}, timeout);
}, timeout);
}
function loadingSpinner(){ // Loading spinner
document.getElementById("info-waiting").innerHTML =
'<div class="spinner-border" role="status">' +
'<span class="sr-only"></span>' +
'</div>' +
'<div class="container text-center my-auto">' +
' Loading data...' +
'</div>';
}
function countEvents(dataArr) { // Sum all numbers in array
return dataArr.reduce((partialSum, a) => partialSum + a, 0); // Sum
}
function getDataLables_Count(data){ // Get all labels and total count of each eventtype
let dataLabels = [];
let dataCount = [];
let counter = 0;
for (let i in data) {
dataLabels[counter] = data[i][1]; // All labels
dataCount[counter] = countEvents(data[i][0]); // Total count of event
counter++;
}
return [dataLabels, dataCount];
}
function getDataset(data){
let dataset = [];
let counter = 1;
for(let i in data){
dataset.push({
label: data[i][1], // Event Type
data: data[i][0], // Event Count
backgroundColor: [
colors[counter - 1]
],
borderColor: [
colorsOutline[counter - 1]
],
borderWidth: 1,
fill: true
});
counter++;
}
return dataset;
}
function getHighest(data){ // Get highest value
let totalHighest = 0;
let curHighest = 0;
for(let i in data){
curHighest = Math.max.apply(null, data[i][0]); // Get current max from data[eventtype]
if(curHighest > totalHighest) // If current highest if bigger than total highest
totalHighest = curHighest
}
return totalHighest;
}
function getLineChartConfig(data){ // Config for all line charts
var config = {
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: "Number of events",
font: {
size: 20
}
},
max: getYHeight(getHighest(data)), // Sets the maximum and adds some ontop
stepSize: 5
},
x: {
title: {
display: true,
text: "Time",
font: {
size: 15
}
},
ticks: {
//autoSkip: false, // <- Shows every label
maxRotation: 180
}
}
},
plugins: { // https://www.chartjs.org/chartjs-plugin-zoom/samples/fetch-data.html <-- Zoom und dabei Daten besser auflösen
tooltip: true,
zoom: {
pan: {
enabled: true,
mode: 'x',
modifierKey: 'ctrl'
},
zoom: {
drag: {
enabled: true
},
mode: 'x'
}
}
},
animations: {
tension: {
to: 0.3 // Corners of lines are round
}
},
maintainAspectRatio: false
};
return config;
}
function getYHeight(highestValue) { // Get Y height for charts
if (highestValue == 0) {
return 1;
}
for (let i = highestValue; i < highestValue + 200; i++) {
if (i % 100 == 0) {
return i;
}
}
return highestValue + 1;
}
function getMaxValue(arr) { // Get max value for bar chart
return Math.max.apply(null, arr);
}
async function myChartAll(timelabel, dataset, config){ // Main big chart
if(charts.chartAll.init){
const ctx = document.getElementById('myChartAll').getContext('2d');
let myChart = new Chart(ctx, {
type: 'line',
data: {
labels: timelabel,
datasets: dataset
},
options: config
});
charts.chartAll.chart = myChart;
charts.chartAll.init = false;
}else{
const chart = charts.chartAll.chart;
chart.data.labels = timelabel;
chart.data.datasets = dataset;
chart.options = config;
chart.update();
}
}
async function doughnutChart(datalabels, datacount){ // Round pie chart
if(charts.doughnutChart.init){
const ctx = document.getElementById("myChartDoughnut").getContext("2d");
const myChartDonut = new Chart(ctx, {
type: "pie",
data: {
labels: datalabels,
datasets: [{
label: "Total Event Count",
data: datacount,
backgroundColor: colors,
borderColor: colorsOutline,
borderWidth: 1,
}]
},
options: {
responsive: true
}
});
charts.doughnutChart.init = false;
charts.doughnutChart.chart = myChartDonut;
}else{
let chart = charts.doughnutChart.chart;
chart.data = {
labels: datalabels,
datasets: [{
label: "Total Event Count",
data: datacount,
backgroundColor: colors,
borderColor: colorsOutline,
borderWidth: 1,
}]
};
chart.update();
}
}
async function barChart(datalabels, datacount){ // Bar chart
if(charts.barChart.init){
const ctx3 = document.getElementById("myChartBar").getContext("2d");
const myChartBar = new Chart(ctx3, {
type: "bar",
data: {
labels: datalabels,
datasets: [{
label: "Total events for event type",
data: datacount,
backgroundColor: colors,
borderColor: colorsOutline,
borderWidth: 1,
borderRadius: 5,
borderSkipped: false
}]
},
options: {
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: "Number of events",
font: {
size: 15
}
},
max: getYHeight(getMaxValue(datacount)), // sets the maximum and adds some ontop
stepSize: 5
},
maintainAspectRatio: false,
responsive: true
}
}
});
charts.barChart.init = false;
charts.barChart.chart = myChartBar;
}else{
const chart = charts.barChart.chart;
chart.data = {
labels: datalabels,
datasets: [{
label: "Total events for event type",
data: datacount,
backgroundColor: colors,
borderColor: colorsOutline,
borderWidth: 1,
borderRadius: 5,
borderSkipped: false
}]
}
chart.options.scales.y.max = getYHeight(getMaxValue(datacount));
chart.update();
}
}
async function singleCharts(timelabel, data, config){ // All single charts
let str = "";
let singleCharts = document.getElementById("singleCharts");
for(let i = 0; i < Object.keys(data).length; i+=2){
str +=
'<div class="row pb-2">' +
'<div class="col"></div>' +
'<div class="col-5 ms-2 me-1 ">' +
'<canvas id="myChart' + (i+1) + '"></canvas>' +
'</div>' +
'<div class="col-5 ms-1 me-2 ">' +
'<canvas id="myChart' + (i+2) + '"></canvas>' +
'</div>' +
'</div>';
}
singleCharts.innerHTML = str;
let counter = 0;
for (let i in data) {
const ctx = document.getElementById('myChart' + (counter+1)).getContext('2d');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels: timelabel, // Timestamp
datasets: [{
label: data[i][1], // Event Type
data: data[i][0], // Event Count
backgroundColor: [
colors[counter]
],
borderColor: [
colorsOutline[counter]
],
borderWidth: 1,
fill: true
}]
},
options: config
});
charts.singleCharts.chart[counter] = myChart;
counter++;
}
}
async function map(){
var map = L.map('map', {
crs: L.CRS.Simple,
minZoom: -5,
});
// horiz verti
// top-right : 52.95249, 10.40041 (1000, 1000)
// bottom-left : 52.82840, 10.21173 (0, 0)
// - 0.12409, 0.18868
var bounds = [[52.82840, 10.21173], [52.95249, 10.40041]];
var image = L.imageOverlay("static/map/unterluess1.jpeg", bounds).addTo(map);
map.fitBounds(bounds);
// 52.91522, 10.28567
var guez = L.latLng([52.91522, 10.28567]);
L.marker(guez).addTo(map);
/*for (let i = 1; i <= Object.keys(data).length; i++) {
var polygon = L.polygon([
data[i][2][0],
data[i][2][1],
data[i][2][2],
data[i][2][3]
]).addTo(map);
}*/
}
async function info(type, code, text){ // If user should get an information (Error, Info)
/*
(type) => "error", "info", "clear".
(code) => Distinct number.
(text) => Short text that should help with error or short information text.
TYPES:
- error => Red-Orange error message.
- info => Green info message.
- clear => "Deletes" the info popup.
*/
let container = document.getElementById("info-container");
if(type == "error"){ // Error
container.innerHTML =
'<div id="info" class="error p-2 container mx-auto text-center position-fixed">' +
'<p>Erorr-' + code + '</p>' +
'<p>' + text + '</p>' +
'</div>';
setTimeout(() => { // After 5000ms error slides to right
info("clear");
}, 5000);
}else if(type == "info"){ // Info
container.innerHTML =
'<div id="info" class="info p-2 container mx-auto text-center position-fixed">' +
'<p>Info-' + code + '</p>' +
'<p>' + text + '</p>' +
'</div>';
setTimeout(() => { // After 5000ms info slides to right
info("clear");
}, 5000);
}else if(type == "clear"){ // Clear
if(document.getElementById("info")){
document.getElementById("info").classList.add("slideToRight");
setTimeout(() => {
container.innerHTML = "";
}, 1000);
}
}
container.addEventListener("mousewheel", (e) => { // If user clicks on info popup (mousewheel click)
info("clear");
});
container.addEventListener("mousedown", (e) => { // If user clicks on info popup (mouse click)
info("clear");
});
}
async function resetZoomButton(){ // Reset zoom button
document.getElementById("reset_zoom").innerHTML = '<button id="reset_zoom_btn" class="btn btn-secondary ">Reset Zoom</button>';
document.getElementById("reset_zoom_btn").addEventListener("click", (e) => { // If button is clicked
charts.chartAll.chart.resetZoom();
});
}
</script>
<script src="static/libarys/bootstrap/bootstrap.bundle.min.js"></script>
</body>
</html>
@@ -1,25 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="static/style.css">
<script src="static/libarys/chartjs/chart.js"></script>
<link rel="stylesheet" href="static/libarys/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="static/libarys/leaflet/leaflet.css">
<link rel="icon" type="image/x-icon" href="static/images/favicon/favicon.png">
<script src="static/libarys/favicon/favloader.min.js"></script>
<script src="static/libarys/favicon/parseGIF.min.js"></script>
<script type="application/javascript" src="https://polyfill.io/v3/polyfill.min.js?features=ResizeObserver"></script>
<title>Timeline settings</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is /settings</p>
<script src="static/libarys/bootstrap/bootstrap.bundle.min.js"></script>
</body>
</html>
@@ -1,7 +0,0 @@
"use strict";
console.log("worker 1");
document.getElementById("info-waiting").innerHTML =
'<div class="spinner-border" role="status">' +
'<span class="sr-only">Loading...</span>' +
'</div>'; // Loading spinner (Not working (It does not update #info_waiting. After all charts have loaded it updates it))
console.log("worker 2");
Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,7 +0,0 @@
/*!
* Bootstrap v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;s<o;s++){const o=t[n[s]];if(o.originalHandler===e&&o.delegationSelector===i)return o}return null}function S(t,e,i){const n="string"==typeof e,s=n?i:e;let o=P(t);return k.has(o)||(o=t),[n,s,o]}function N(t,e,i,n,s){if("string"!=typeof e||!t)return;if(i||(i=n,n=null),C.test(e)){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!Line truncated
//# sourceMappingURL=bootstrap.bundle.min.js.map
@@ -1 +0,0 @@
{"version":3,"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/manipulator.js","../../js/src/dom/selector-engine.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"names":["TRANSITION_END","getSelector","element","selector","getAttribute","hrefAttr","includes","startsWith","split","trim","getSelectorFromElement","document","querySelector","getElementFromSelector","triggerTransitionEnd","dispatchEvent","Event","isElement","obj","jquery","nodeType","getElement","length","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","toString","call","match","toLowerCase","RegExp","test","TypeError","toUpperCase","isVisible","getClientRects","getComputedStyle","getPropertyValue","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","noop","reflow","offsetHeight","getjQueryLine truncated
@@ -1,7 +0,0 @@
@charset "UTF-8";/*!
* Bootstrap v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:iLine truncated
/*# sourceMappingURL=bootstrap.min.css.map */
@@ -1 +0,0 @@
{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"iBAAA;;;;;ACAA,MAQI,UAAA,QAAA,YAAA,QAAA,YAAA,QAAA,UAAA,QAAA,SAAA,QAAA,YAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAAA,UAAA,QAAA,WAAA,KAAA,UAAA,QAAA,eAAA,QAIA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAIA,aAAA,QAAA,eAAA,QAAA,aAAA,QAAA,UAAA,QAAA,aAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAIA,iBAAA,EAAA,CAAA,GAAA,CAAA,IAAA,mBAAA,GAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,GAAA,CAAA,GAAA,cAAA,EAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,GAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,GAAA,CAAA,EAAA,CAAA,GAAA,eAAA,GAAA,CAAA,GAAA,CAAA,IAAA,cAAA,EAAA,CAAA,EAAA,CAAA,GAGF,eAAA,GAAA,CAAA,GAAA,CAAA,IACA,eAAA,CAAA,CAAA,CAAA,CAAA,EACA,oBAAA,EAAA,CAAA,EAAA,CAAA,GACA,iBAAA,GAAA,CAAA,GAAA,CAAA,IAMA,qBAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,oBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,cAAA,2EAQA,sBAAA,0BACA,oBAAA,KACA,sBAAA,IACA,sBAAA,IACA,gBAAA,QAIA,aAAA,KCnCF,ECgDA,QADA,SD5CE,WAAA,WAeE,8CANJ,MAOM,gBAAA,QAcN,KACE,OAAA,EACA,YAAA,2BEmPI,UAAA,yBFjPJ,YAAA,2BACA,YAAA,2BACA,MAAA,qBACA,WAAA,0BACA,iBAAA,kBACA,yBAAA,KACA,4BAAA,YAUF,GACE,OAAA,KAAA,EACA,MAAA,QACA,iBAAA,aACA,OAAA,EACA,QAAA,IAGF,eACE,OAAA,IAUF,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAGA,YAAA,IACA,YAAA,IAIF,IAAA,GEwMQ,UAAA,uBAlKJ,0BFtCJ,IAAA,GE+MQ,UAAA,QF1MR,IAAA,GEmMQ,UAAA,sBAlKJ,0BFjCJ,IAAA,GE0MQ,UAAA,MFrMR,IAAA,GE8LQ,UAAA,oBAlKJ,0BF5BJ,IAAA,GEqMQ,UAAA,SFhMR,IAAA,GEyLQ,UAAA,sBAlKJ,0BFvBJ,IAAA,GEgMQ,UAAA,QF3LR,IAAA,GEgLM,UAAA,QF3KN,IAAA,GE2KM,UAAA,KFhKN,EACE,WAAA,EACA,cAAA,KCoBF,6BDTA,YAEE,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,iCAAA,KAAA,yBAAA,KAMF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAMF,GCKA,GDHE,aAAA,KCSF,GDNA,GCKA,GDFE,WAAA,EACA,cAAA,KAGF,MCMA,MACA,MAFA,MDDE,cAAA,EAGF,GACE,YAAA,IAKF,GACE,cAAA,MACA,YAAA,EAMF,WACE,OAAA,EAAA,EAAA,KAQF,ECLA,ODOE,YAAA,OAQF,OAAA,ME4EM,UAAA,OFrEN,MAAA,KACE,QAAA,KACA,iBAAA,QASF,ICnBA,IDqBE,SAAA,SEwDI,UAAA,MFtDJ,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAKN,EACE,MAAA,QACA,gBAAA,UAEA,QACE,MAAA,QAWF,2BAAA,iCAEE,MAAA,QACA,gBAAA,KCvBJ,KACA,ID6BA,IC5BA,KDgCE,YAAA,yBEcI,UAAA,IFZJ,UAAA,IACA,aAAA,cAOF,IACE,QAAA,MACA,WAAA,EACA,cAAA,KACA,SAAA,KEAI,UAAA,OFKJ,SELI,UAAA,QFOF,MAAA,QACA,WAAA,OAIJ,KEZM,UAAA,OFcJ,MAAA,QACA,UAAA,WAGA,OACE,MAAA,QAIJ,IACE,QAAA,MAAA,MExBI,UAAA,OF0BJ,MAAA,KACA,iBAAA,QG7SE,cAAA,MHgTF,QACE,QAAA,EE/BE,UAAA,IFiCF,YAAA,IASJ,OACE,OAAA,EAAA,EAAA,KAMF,IChDA,IDkDE,eAAA,OAQF,MACE,aAAA,OACA,gBAAA,SAGF,QACE,YAAA,MACA,eAAA,MACA,MAAA,QACA,WAAA,KAOF,GAEE,WAAA,QACA,WAAA,qBCvDF,MAGA,GAFA,MAGA,GDsDA,MCxDA,GD8DE,aAAA,QACA,aAAA,MACA,aAAA,EAQF,MACE,QAAA,aAMF,OAEE,cAAA,EAQF,iCACE,QAAA,ECrEF,OD0EA,MCxEA,SADA,OAEA,SD4EELine truncated
@@ -1,13 +0,0 @@
/*!
* Chart.js v3.7.0
* https://www.chartjs.org
* (c) 2021 Chart.js Contributors
* Released under the MIT License
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>"start"===t?"left":"end"===t?"right":"center",n=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,o=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}};
/*!
* @kurkle/color v0.1.9
* https://github.com/kurkle/color#readme
* (c) 2020 Jukka Kurkela
* Released under the MIT License
*/const r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l="0123456789ABCDEF",h=t=>l[15&t],c=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?h:c;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function w(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function M(t,e,i){const s=v(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function k(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=n===e?(i-s)/h+(i<s?6:0):n===i?(s-e)/h+2:(e-i)/h+4,r=60*r+.5),[0|r,l||0,a]}function S(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(m)}function P(t,e,i){return S(v,t,e,i)}function D(t){return(t%360+360)%360}function C(t){const e=y.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?p(+e[5]):m(+e[5]));const n=D(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return S(M,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return S(w,t,e,i)}(n,o,a):P(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const O={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},A={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let T;function L(t){T||(T=function(){const t={},e=Object.keys(A),i=Object.keys(O);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,O[o]);o=parseInt(A[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function R(t,e,i){if(t){let s=k(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=P(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=Line truncated
@@ -1,4 +0,0 @@
/* Polyfill service v3.110.1
* Disable minification (remove `.min` from URL path) for more info */
(function(self, undefined) {!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e="undefined"!=typeof globalThis?globalThis:e||self,t(e.ResizeObserver={}))}(this,function(e){"use strict";var t,n=[],r=function(){return n.some(function(e){return e.activeTargets.length>0})},i=function(){return n.some(function(e){return e.skippedTargets.length>0})},o="ResizeObserver loop completed with undelivered notifications.",s=function(){var e;"function"==typeof ErrorEvent?e=new ErrorEvent("error",{message:o}):(e=document.createEvent("Event"),e.initEvent("error",!1,!1),e.message=o),window.dispatchEvent(e)};!function(e){e.BORDER_BOX="border-box",e.CONTENT_BOX="content-box",e.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box"}(t||(t={}));var c,a=function(e){return Object.freeze(e)},u=function(){function e(e,t){this.inlineSize=e,this.blockSize=t,a(this)}return e}(),f=function(){function e(e,t,n,r){return this.x=e,this.y=t,this.width=n,this.height=r,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,a(this)}return e.prototype.toJSON=function(){var e=this;return{x:e.x,y:e.y,top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.width,height:e.height}},e.fromRect=function(t){return new e(t.x,t.y,t.width,t.height)},e}(),h=function(e){return e instanceof SVGElement&&"getBBox"in e},d=function(e){if(h(e)){var t=e.getBBox(),n=t.width,r=t.height;return!n&&!r}var i=e,o=i.offsetWidth,s=i.offsetHeight;return!(o||s||e.getClientRects().length)},v=function(e){var t,n;if(e instanceof Element)return!0;var r=null===(n=null===(t=e)||void 0===t?void 0:t.ownerDocument)||void 0===n?void 0:n.defaultView;return!!(r&&e instanceof r.Element)},l=function(e){switch(e.tagName){case"INPUT":if("image"!==e.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1},p="undefined"!=typeof window?window:{},b=new WeakMap,g=/auto|scroll/,w=/^tb|vertical/,E=/msie|trident/i.test(p.navigator&&p.navigator.userAgent),x=function(e){return parseFloat(e||"0")},y=function(e,t,n){return void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=!1),new u((n?t:e)||0,(n?e:t)||0)},z=a({devicePixelContentBoxSize:y(),borderBoxSize:y(),contentBoxSize:y(),contentRect:new f(0,0,0,0)}),T=function(e,t){if(void 0===t&&(t=!1),b.has(e)&&!t)return b.get(e);if(d(e))return b.set(e,z),z;var n=getComputedStyle(e),r=h(e)&&e.ownerSVGElement&&e.getBBox(),i=!E&&"border-box"===n.boxSizing,o=w.test(n.writingMode||""),s=!r&&g.test(n.overflowY||""),c=!r&&g.test(n.overflowX||""),u=r?0:x(n.paddingTop),v=r?0:x(n.paddingRight),l=r?0:x(n.paddingBottom),p=r?0:x(n.paddingLeft),T=r?0:x(n.borderTopWidth),m=r?0:x(n.borderRightWidth),O=r?0:x(n.borderBottomWidth),R=r?0:x(n.borderLeftWidth),S=p+v,B=u+l,C=R+m,k=T+O,N=c?e.offsetHeight-k-e.clientHeight:0,D=s?e.offsetWidth-C-e.clientWidth:0,M=i?S+C:0,_=i?B+k:0,I=r?r.width:x(n.width)-M-D,P=r?r.height:x(n.height)-_-N,F=I+S+D+C,L=P+B+N+k,W=a({devicePixelContentBoxSize:y(Math.round(I*devicePixelRatio),Math.round(P*devicePixelRatio),o),borderBoxSize:y(F,L,o),contentBoxSize:y(I,P,o),contentRect:new f(p,u,I,P)});return b.set(e,W),W},m=function(e,n,r){var i=T(e,r),o=i.borderBoxSize,s=i.contentBoxSize,c=i.devicePixelContentBoxSize;switch(n){case t.DEVICE_PIXEL_CONTENT_BOX:return c;case t.BORDER_BOX:return o;default:return s}},O=function(){function e(e){var t=T(e);this.target=e,this.contentRect=t.contentRect,this.borderBoxSize=a([t.borderBoxSize]),this.contentBoxSize=a([t.contentBoxSize]),this.devicePixelContentBoxSize=a([t.devicePixelContentBoxSize])}return e}(),R=function(e){if(d(e))return Infinity;for(var t=0,n=e.parentNode;n;)t+=1,n=n.parentNode;return t},S=function(){var e=Infinity,t=[];n.forEach(function o(n){if(0!==n.activeTargets.length){var r=[];n.activeTargets.forEach(function i(t){var n=new O(t.target),i=R(t.target);r.push(n),t.lastReportedSize=m(t.target,t.observedBox),i<e&&(e=i)}),t.push(function o(){n.callback.call(n.observer,r,n.observer)}),n.activeTargets.splice(0,n.activeTargets.length)}});for(var r=0,i=t;r<i.length;r++){(0,i[r])()}return e},B=function(e){n.forEach(function t(n){n.activeTargets.splice(0,n.activeTargets.length),n.skippedTargets.splice(0,n.skippedTargets.length),n.observationTargets.forEach(function r(t){t.isActive()&&(R(t.target)>e?n.activeTargets.push(t):n.skippedTargets.push(t))})})},C=function(){var e=0;for(B(e);r();)e=S(),B(e);return i()&&s(),e>0},k=[],N=function(){return k.splice(0).forEach(function(e){return e()})},D=function(e){if(!c){var t=0,n=document.createTextNode(""),r={characterData:!0};new MutationObserver(function(){return N()}).observe(n,r),c=function(){n.textContent=""+(t?t--:t++)}}k.push(e),c()},M=function(e){D(function t(){requestAnimationFrame(e)})},_=0,I=function(){return!!_},P={attributes:!0,characterData:!0,childList:!0,subtree:!0},F=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydowLine truncated
@@ -1,7 +0,0 @@
/*!
* chartjs-plugin-zoom v1.2.0
* undefined
* (c) 2016-2021 chartjs-plugin-zoom Contributors
* Released under the MIT License
*/
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("chart.js"),require("hammerjs"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","hammerjs","chart.js/helpers"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).ChartZoom=n(e.Chart,e.Hammer,e.Chart.helpers)}(this,(function(e,n,t){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(n);const i=e=>e&&e.enabled&&e.modifierKey,c=(e,n)=>e&&n[e+"Key"],r=(e,n)=>e&&!n[e+"Key"];function l(e,n,t){return void 0===e||("string"==typeof e?-1!==e.indexOf(n):"function"==typeof e&&-1!==e({chart:t}).indexOf(n))}function s(e,n,o){const a=function({x:e,y:n},t){const o=t.scales,a=Object.keys(o);for(let t=0;t<a.length;t++){const i=o[a[t]];if(n>=i.top&&n<=i.bottom&&e>=i.left&&e<=i.right)return i}return null}(n,o);if(a&&l(e,a.axis,o))return[a];const i=[];return t.each(o.scales,(function(n){l(e,n.axis,o)||i.push(n)})),i}const m=new WeakMap;function u(e){let n=m.get(e);return n||(n={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},panDelta:{}},m.set(e,n)),n}function d(e,n,t){const o=e.max-e.min,a=o*(n-1),i=e.isHorizontal()?t.x:t.y,c=Math.max(0,Math.min(1,(e.getValueForPixel(i)-e.min)/o||0));return{min:a*c,max:a*(1-c)}}function f(e,n,o,a,i){let c=o[a];if("original"===c){const o=e.originalScaleLimits[n.id][a];c=t.valueOrDefault(o.options,o.scale)}return t.valueOrDefault(c,i)}function h(e,{min:n,max:t},o,a=!1){const i=u(e.chart),{id:c,axis:r,options:l}=e,s=o&&(o[c]||o[r])||{},{minRange:m=0}=s,d=f(i,e,s,"min",-1/0),h=f(i,e,s,"max",1/0),p=Math.max(n,d),x=Math.min(t,h),g=a?Math.max(x-p,m):e.max-e.min;if(x-p!==g)if(d>x-g)n=p,t=p+g;else if(h<p+g)t=x,n=x-g;else{const e=(g-x+p)/2;n=p-e,t=x+e}else n=p,t=x;return l.min=n,l.max=t,i.updatedScaleLimits[e.id]={min:n,max:t},e.parse(n)!==e.min||e.parse(t)!==e.max}const p=e=>0===e||isNaN(e)?0:e<0?Math.min(Math.round(e),-1):Math.max(Math.round(e),1);const x={second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function g(e,n,t,o=!1){const{min:a,max:i,options:c}=e,r=c.time&&c.time.round,l=x[r]||0,s=e.getValueForPixel(e.getPixelForValue(a+l)-n),m=e.getValueForPixel(e.getPixelForValue(i+l)-n),{min:u=-1/0,max:d=1/0}=o&&t&&t[e.axis]||{};return!!(isNaN(s)||isNaN(m)||s<u||m>d)||h(e,{min:s,max:m},t,o)}function b(e,n,t){return g(e,n,t,!0)}const y={category:function(e,n,t,o){const a=d(e,n,t);return e.min===e.max&&n<1&&function(e){const n=e.getLabels().length-1;e.min>0&&(e.min-=1),e.max<n&&(e.max+=1)}(e),h(e,{min:e.min+p(a.min),max:e.max-p(a.max)},o,!0)},default:function(e,n,t,o){const a=d(e,n,t);return h(e,{min:e.min+a.min,max:e.max-a.max},o,!0)}},v={category:function(e,n,t){const o=e.getLabels().length-1;let{min:a,max:i}=e;const c=Math.max(i-a,1),r=Math.round(function(e){return e.isHorizontal()?e.width:e.height}(e)/Math.max(c,10)),l=Math.round(Math.abs(n/r));let s;return n<-r?(i=Math.min(i+l,o),a=1===c?i:i-c,s=i===o):n>r&&(a=Math.max(0,a-l),i=1===c?a:a+c,s=0===a),h(e,{min:a,max:i},t)||s},default:g,logarithmic:b,timeseries:b};function z(e,n){t.each(e,((t,o)=>{n[o]||delete e[o]}))}function M(e,n){const{scales:o}=e,{originalScaleLimits:a,updatedScaleLimits:i}=n;return t.each(o,(function(e){(function(e,n,t){const{id:o,options:{min:a,max:i}}=e;if(!n[o]||!t[o])return!0;const c=t[o];return c.min!==a||c.max!==i})(e,a,i)&&(a[e.id]={min:{scale:e.min,options:e.options.min},max:{scale:e.max,options:e.options.max}})})),z(a,o),z(i,o),a}function k(e,n,o,a){const i=y[e.type]||y.default;t.callback(i,[e,n,o,a])}function w(e){const n=e.chartArea;return{x:(n.left+n.right)/2,y:(n.top+n.bottom)/2}}function S(e,n,o="none"){const{x:a=1,y:i=1,focalPoint:c=w(e)}="number"==typeof n?{x:n,y:n}:n,r=u(e),{options:{limits:m,zoom:d}}=r,{mode:f="xy",overScaleMode:h}=d||{};M(e,r);const p=1!==a&&l(f,"x",e),x=1!==i&&l(f,"y",e),g=h&&s(h,c,e);t.each(g||e.scales,(function(e){e.isHorizontal()&&p?k(e,a,c,m):!e.isHorizontal()&&x&&k(e,i,c,m)})),e.update(o),t.callback(d.onZoom,[{chart:e}])}function P(e,n,t){const o=e.getValueForPixel(n),a=e.getValueForPixel(t);return{min:Math.min(o,a),max:Math.max(o,a)}}function C(e){const n=u(e);let o=1,a=1;return t.each(e.scales,(function(e){const i=function(e,n){const o=e.originalScaleLimits[n];if(!o)return;const{min:a,max:i}=o;return t.valueOrDefault(i.options,i.scale)-t.valueOrDefault(a.options,a.scale)}(n,e.id);if(i){const n=Math.round(i/(e.max-e.min)*100)/100;o=Math.min(o,n),a=Math.max(a,n)}})),o<1?o:a}function j(e,n,o,a){const{panDelta:i}=a,c=i[e.id]||0;t.sign(c)===t.sign(n)&&(n+=c);const r=v[e.type]||v.default;t.callback(r,[e,n,o])?i[e.id]=0:i[e.id]=n}function Z(e,n,o,a="none"){const{x:i=0,y:c=0}="number"==typeof n?{x:n,y:n}:n,r=u(e),{options:{pan:s,limits:m}}=r,{mode:d="xy",onPan:f}=s||{};M(e,r);const h=0!==i&&l(d,"x",e),p=0!==c&&l(d,"y",e);t.each(o||e.scales,(function(e){e.isHorizontal()&&h?j(e,i,m,r):!e.isHorizontal()&&p&&j(e,c,m,r)})),e.update(a),t.callback(f,[{chart:e}])}function LLine truncated
@@ -1,299 +0,0 @@
/**@license
*
* favloader v. 0.4.4
*
* Vanilla JavaScript library for loading animation in favicon
*
* Copyright (c) 2018-2019 Jakub T. Jankiewicz <https://jcubic.pl/me>
* Released under the MIT license
*
* Build: Sat, 22 May 2021 11:37:31 +0000
*/
/* global define, module, global, Worker, Blob, BlobBuilder, setTimeout, parseGIF */
(function(factory) {
var root = typeof window !== 'undefined' ? window : global;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
// istanbul ignore next
define([], factory);
} else if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = factory();
} else {
// Browser
// istanbul ignore next
root.favloader = factory();
}
})(function(undefined) {
// we use web worker to trigger interval since browser main thread is limited
// when tab is not active
function fworker(fn) {
// ref: https://stackoverflow.com/a/10372280/387194
var str = '(' + fn.toString() + ')()';
var URL = window.URL || window.webkitURL;
var blob;
try {
blob = new Blob([str], {type: 'application/javascript'});
} catch (e) { // Backwards-compatibility
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(str);
blob = blob.getBlob();
}
return new Worker(URL.createObjectURL(blob));
}
// ----------------------------------------------------------------------------------
var interval = (function() {
var worker = fworker(function() {
// rAF polyfil without setTimeout, ref: https://gist.github.com/paulirish/1579671
var vendors = ['ms', 'moz', 'webkit', 'o'];
for(var x = 0; x < vendors.length && !self.requestAnimationFrame; ++x) {
self.requestAnimationFrame = self[vendors[x]+'RequestAnimationFrame'];
self.cancelAnimationFrame = self[vendors[x]+'CancelAnimationFrame']
|| self[vendors[x]+'CancelRequestAnimationFrame'];
}
var raf = {};
self.addEventListener('message', function(response) {
var data = response.data;
var id = data.id;
if (data.type !== 'RPC' || id === null) {
return;
}
if (data.method == 'setInterval') {
var interval_id = data.params[0];
if (typeof interval_id === 'number') {
raf[interval_id] = self.setInterval(function() {
self.postMessage({ type: 'interval', id: interval_id });
}, data.params[1]);
self.postMessage({ type: 'RPC', id: id, result: interval_id });
} else {
self.postMessage({
type: 'RPC',
id: id,
result: null,
error: 'Invalid Argument, expected number'
});
}
} else if (data.method == 'clearInterval') {
self.clearInterval(raf[data.params[0]]);
delete raf[data.params[0]];
}
});
});
var callbacks = {};
var rpc = (function() {
var id = 0;
return function rpc(method, params) {
var _id = ++id;
return new Promise(function(resolve, reject) {
worker.addEventListener('message', function handler(response) {
var data = response.data;
if (data && data.type === 'RPC' && data.id === _id) {
if (data.error) {
reject(data.error);
} else {
resolve(data.result);
}
worker.removeEventListener('message', handler);
}
});
worker.postMessage({ type: 'RPC', method: method, id: _id, params: params });
});
};
})();
worker.addEventListener('message', function(response) {
var data = response.data;
if (data && data.type === 'interval' && callbacks[data.id]) {
callbacks[data.id]();
}
});
return {
set: function(fn, interval) {
var interval_id = Date.now();
callbacks[interval_id] = fn;
rpc('setInterval', [interval_id, interval]);
return interval_id;
},
clear: function(id) {
delete callbacks[id];
return rpc('clearInterval', [id]);
}
};
})();
// ----------------------------------------------------------------------------------
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
// ----------------------------------------------------------------------------------
function warn(message) {
if (console && console.warn) {
console.warn(message);
} else {
setTimeout(function() {
throw new Error(message);
}, 0);
}
}
// ----------------------------------------------------------------------------------
var ctx,
c,
link,
icon,
id,
progress = 0,
duration,
initialized,
settings,
gif,
type,
initial_turns = -.25,
interval_id,
step;
// ----------------------------------------------------------------------------------
function init(options) {
if (document.readyState !== "complete") {
setTimeout(init.bind(this, options), 100);
return;
}
settings = Object.assign({
size: 16,
radius: 6,
thickness: 2,
color: '#0F60A8',
duration: 5000
}, options);
if (!link) {
link = document.querySelector('link[rel*="icon"]');
if (!link) {
link = document.createElement('link');
link.setAttribute('rel', 'icon');
document.head.appendChild(link);
warn("No default icon found, restore state will not work");
} else {
icon = link.getAttribute('href');
type = link.getAttribute('type');
}
}
clear();
if (settings.gif) {
if (typeof parseGIF === 'undefined') {
throw new Error('parseGIF not defined, please include parseGIF.js file');
}
parseGIF(settings.gif).then(function(data) {
gif = data;
});
} else {
if (!c) {
c = document.createElement('canvas');
}
c.width = c.height = settings.size;
ctx = c.getContext('2d');
ctx.lineCap = "round";
ctx.lineWidth = settings.thickness;
ctx.strokeStyle = settings.color;
duration = settings.duration;
}
initialized = true;
}
// ----------------------------------------------------------------------------------
function clear() {
if (interval_id) {
interval.clear(interval_id);
interval_id = null;
}
}
// ----------------------------------------------------------------------------------
function restore() {
if (icon) {
link.setAttribute('href', icon + '?' + Date.now());
link.setAttribute('type', type);
} else if (link) {
link.parentNode.removeChild(link);
}
clear();
}
// ----------------------------------------------------------------------------------
function animate() {
if (!initialized) {
setTimeout(animate, 100);
return;
}
if (interval_id) {
return;
}
progress = 0;
if (settings.gif && parseGIF) {
if (!gif) {
setTimeout(animate, 100);
return;
}
interval_id = interval.set(animateGIF, 300);
} else {
interval_id = interval.set(draw, 300);
}
}
// ----------------------------------------------------------------------------------
function turn(x) {
return (x + initial_turns) * 2 * Math.PI;
}
// ----------------------------------------------------------------------------------
function animateGIF() {
progress++;
if (progress >= gif.uris.length) {
progress = 0;
}
update(gif.uris[progress]);
}
// ----------------------------------------------------------------------------------
function arcStart(pos) {
return turn(pos + initial_turns) + turn(Math.max(0, pos * 2 - 1));
}
// ----------------------------------------------------------------------------------
function arcEnd(pos) {
return turn(pos + initial_turns) + turn(Math.min(1, pos * 2));
}
// ----------------------------------------------------------------------------------
function update(dataURI) {
var newIcon, icon = document.querySelector('link[rel*="icon"]');
(newIcon = icon.cloneNode(true)).setAttribute('href', dataURI);
icon.parentNode.replaceChild(newIcon, icon);
link = newIcon;
}
// ----------------------------------------------------------------------------------
function draw() {
ctx.clearRect(0, 0, settings.size, settings.size);
if (typeof settings.frame === 'function') {
settings.frame(ctx);
} else {
var position = progress % duration / duration;
ctx.beginPath();
var center = Math.round(settings.size / 2);
ctx.arc(center, center, settings.radius, arcStart(position), arcEnd(position));
ctx.stroke();
}
update(ctx.canvas.toDataURL());
progress += duration / 100;
}
// ----------------------------------------------------------------------------------
return {
init: init,
start: animate,
stop: restore,
version: '0.4.4'
};
});
@@ -1 +0,0 @@
(function(e){var t=typeof window!=="undefined"?window:global;if(typeof define==="function"&&define.amd){define([],e)}else if(typeof module==="object"&&module.exports){module.exports=e()}else{t.parseGIF=e()}})(function(e){var c=function(e){return e.reduce(function(e,t){return e*2+t},0)};var f=function(e){var t=[];for(var r=7;r>=0;r--){t.push(!!(e&1<<r))}return t};var n=function(e){this.data=e;this.len=this.data.length;this.pos=0;this.readByte=function(){if(this.pos>=this.data.length){throw new Error("Attempted to read past end of stream.")}return e.charCodeAt(this.pos++)&255};this.readBytes=function(e){var t=[];for(var r=0;r<e;r++){t.push(this.readByte())}return t};this.read=function(e){var t="";for(var r=0;r<e;r++){t+=String.fromCharCode(this.readByte())}return t};this.readUnsigned=function(){var e=this.readBytes(2);return(e[1]<<8)+e[0]}};var u=function(t,a){var n=0;var e=function(e){var t=0;for(var r=0;r<e;r++){if(a.charCodeAt(n>>3)&1<<(n&7)){t|=1<<r}n++}return t};var r=[];var i=1<<t;var o=i+1;var s=t+1;var d=[];var c=function(){d=[];s=t+1;for(var e=0;e<i;e++){d[e]=[e]}d[i]=[];d[o]=null};var f;var u;while(true){u=f;f=e(s);if(f===i){c();continue}if(f===o)break;if(f<d.length){if(u!==i){d.push(d[u].concat(d[f][0]))}}else{if(f!==d.length)throw new Error("Invalid LZW code.");d.push(d[u].concat(d[u][0]))}r.push.apply(r,d[f]);if(d.length===1<<s&&s<12){s++}}return r};var i=function(o,s){s||(s={});var n=function(e){var t=[];for(var r=0;r<e;r++){t.push(o.readBytes(3))}return t};var d=function(){var e,t;t="";do{e=o.readByte();t+=o.read(e)}while(e!==0);return t};var e=function(){var e={};e.sig=o.read(3);e.ver=o.read(3);if(e.sig!=="GIF")throw new Error("Not a GIF file.");e.width=o.readUnsigned();e.height=o.readUnsigned();var t=f(o.readByte());e.gctFlag=t.shift();e.colorRes=c(t.splice(0,3));e.sorted=t.shift();e.gctSize=c(t.splice(0,3));e.bgColor=o.readByte();e.pixelAspectRatio=o.readByte();if(e.gctFlag){e.gct=n(1<<e.gctSize+1)}s.hdr&&s.hdr(e)};var t=function(e){var t=function(e){var t=o.readByte();var r=f(o.readByte());e.reserved=r.splice(0,3);e.disposalMethod=c(r.splice(0,3));e.userInput=r.shift();e.transparencyGiven=r.shift();e.delayTime=o.readUnsigned();e.transparencyIndex=o.readByte();e.terminator=o.readByte();s.gce&&s.gce(e)};var r=function(e){e.comment=d();s.com&&s.com(e)};var a=function(e){var t=o.readByte();e.ptHeader=o.readBytes(12);e.ptData=d();s.pte&&s.pte(e)};var n=function(e){var t=function(e){var t=o.readByte();e.unknown=o.readByte();e.iterations=o.readUnsigned();e.terminator=o.readByte();s.app&&s.app.NETSCAPE&&s.app.NETSCAPE(e)};var r=function(e){e.appData=d();s.app&&s.app[e.identifier]&&s.app[e.identifier](e)};var a=o.readByte();e.identifier=o.read(8);e.authCode=o.read(3);switch(e.identifier){case"NETSCAPE":t(e);break;default:r(e);break}};var i=function(e){e.data=d();s.unknown&&s.unknown(e)};e.label=o.readByte();switch(e.label){case 249:e.extType="gce";t(e);break;case 254:e.extType="com";r(e);break;case 1:e.extType="pte";a(e);break;case 255:e.extType="app";n(e);break;default:e.extType="unknown";i(e);break}};var r=function(e){var t=function(a,n){var i=new Array(a.length);var e=a.length/n;var t=function(e,t){var r=a.slice(t*n,(t+1)*n);i.splice.apply(i,[e*n,n].concat(r))};var r=[0,4,2,1];var o=[8,8,4,2];var s=0;for(var d=0;d<4;d++){for(var c=r[d];c<e;c+=o[d]){t(c,s);s++}}return i};e.leftPos=o.readUnsigned();e.topPos=o.readUnsigned();e.width=o.readUnsigned();e.height=o.readUnsigned();var r=f(o.readByte());e.lctFlag=r.shift();e.interlaced=r.shift();e.sorted=r.shift();e.reserved=r.splice(0,2);e.lctSize=c(r.splice(0,3));if(e.lctFlag){e.lct=n(1<<e.lctSize+1)}e.lzwMinCodeSize=o.readByte();var a=d();e.pixels=u(e.lzwMinCodeSize,a);if(e.interlaced){e.pixels=t(e.pixels,e.width)}s.img&&s.img(e)};var a=function(){var e={};e.sentinel=o.readByte();switch(String.fromCharCode(e.sentinel)){case"!":e.type="ext";t(e);break;case",":e.type="img";r(e);break;case";":e.type="eof";s.eof&&s.eof(e);break;default:throw new Error("Unknown block: 0x"+e.sentinel.toString(16))}if(e.type!=="eof")setTimeout(a,0)};var i=function(){e();setTimeout(a,0)};i()};function o(a){return new Promise(function(t,e){var r=new XMLHttpRequest;r.overrideMimeType("text/plain; charset=x-user-defined");r.onload=function(e){t(new n(r.responseText))};r.onerror=e;r.open("GET",a,true);r.send()})}function s(t,e){var r=document.createElement("canvas");r.setAttribute("width",e[0].width);r.setAttribute("height",e[0].height);var i=r.getContext("2d");var o=[];e.forEach(function(r,e){i.clearRect(r.leftPos,r.topPos,r.width,r.height);var a=i.getImageData(r.leftPos,r.topPos,r.width,r.height);var n=r.lctFlag?r.lct:t.gtc;r.pixels.forEach(function(e,t){if(r.transparency!==e){a.data[t*4+0]=n[e][0];a.data[t*4+1]=n[e][1];a.data[t*4+2]=n[e][2];a.data[t*4+3]=255}else{if(r.disposalMethod===2||r.disposalMethod===3){a.data[t*4+3]=0}else{}}});i.putImageData(a,r.leftPos,r.topPos);o.push(i.canvas.toDataURL())});return o}return function(e){return new Promise(function(t){var r={};var a=[];Line truncated
@@ -1,2 +0,0 @@
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^Line truncated
@@ -1,7 +0,0 @@
/*! jQuery UI - v1.13.1 - 2022-01-20
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
* Copyright jQuery Foundation and other contributors; Licensed MIT */
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;Line truncated
@@ -1,6 +0,0 @@
/*! jQuery UI - v1.13.1 - 2022-01-20
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */
!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.1";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],a.call(s[n],e)&&void 0!==i&&(V.isPlainObject(i)?t[e]=V.isPlainObject(t[e])?V.widget.extend({},t[e],i):V.widget.extend({},i):t[e]=i);return t},V.widget.bridge=function(o,e){var a=e.prototype.widgetFullName||o;V.fn[o]=function(i){var t="string"==typeof i,s=r.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=V.data(this,a);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?V.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V.data(this,a);t?(t.option(i||{}),t._init&&t._init()):V.data(this,a,new e(i,this))})),n}},V.Widget=function(){},V.Widget._childConstructors=[],V.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=V(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({diLine truncated
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 B

@@ -1,640 +0,0 @@
/* required styles */
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
position: absolute;
left: 0;
top: 0;
}
.leaflet-container {
overflow: hidden;
}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-user-drag: none;
}
/* Prevents IE11 from highlighting tiles in blue */
.leaflet-tile::selection {
background: transparent;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast;
}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
width: 1600px;
height: 1600px;
-webkit-transform-origin: 0 0;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
display: block;
}
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg,
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
max-width: none !important;
max-height: none !important;
}
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
}
.leaflet-container.leaflet-touch-drag {
-ms-touch-action: pinch-zoom;
/* Fallback for FF which doesn't support pinch-zoom */
touch-action: none;
touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
-ms-touch-action: none;
touch-action: none;
}
.leaflet-container {
-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
filter: inherit;
visibility: hidden;
}
.leaflet-tile-loaded {
visibility: inherit;
}
.leaflet-zoom-box {
width: 0;
height: 0;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 800;
}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
-moz-user-select: none;
}
.leaflet-pane { z-index: 400; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-vml-shape {
width: 1px;
height: 1px;
}
.lvml {
behavior: url(#default#VML);
display: inline-block;
position: absolute;
}
/* control positioning */
.leaflet-control {
position: relative;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
.leaflet-top,
.leaflet-bottom {
position: absolute;
z-index: 1000;
pointer-events: none;
}
.leaflet-top {
top: 0;
}
.leaflet-right {
right: 0;
}
.leaflet-bottom {
bottom: 0;
}
.leaflet-left {
left: 0;
}
.leaflet-control {
float: left;
clear: both;
}
.leaflet-right .leaflet-control {
float: right;
}
.leaflet-top .leaflet-control {
margin-top: 10px;
}
.leaflet-bottom .leaflet-control {
margin-bottom: 10px;
}
.leaflet-left .leaflet-control {
margin-left: 10px;
}
.leaflet-right .leaflet-control {
margin-right: 10px;
}
/* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1;
}
.leaflet-zoom-animated {
-webkit-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
will-change: transform;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
transition: none;
}
.leaflet-zoom-anim .leaflet-zoom-hide {
visibility: hidden;
}
/* cursors */
.leaflet-interactive {
cursor: pointer;
}
.leaflet-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane,
.leaflet-control {
cursor: auto;
}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
pointer-events: none;
}
.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive,
svg.leaflet-image-layer.leaflet-interactive path {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */
.leaflet-container {
background: #ddd;
outline: 0;
}
.leaflet-container a {
color: #0078A8;
}
.leaflet-container a.leaflet-active {
outline: 2px solid orange;
}
.leaflet-zoom-box {
border: 2px dotted #38f;
background: rgba(255,255,255,0.5);
}
/* general typography */
.leaflet-container {
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
}
/* general toolbar styles */
.leaflet-bar {
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
border-radius: 4px;
}
.leaflet-bar a,
.leaflet-bar a:hover {
background-color: #fff;
border-bottom: 1px solid #ccc;
width: 26px;
height: 26px;
line-height: 26px;
display: block;
text-align: center;
text-decoration: none;
color: black;
}
.leaflet-bar a,
.leaflet-control-layers-toggle {
background-position: 50% 50%;
background-repeat: no-repeat;
display: block;
}
.leaflet-bar a:hover {
background-color: #f4f4f4;
}
.leaflet-bar a:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.leaflet-bar a:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom: none;
}
.leaflet-bar a.leaflet-disabled {
cursor: default;
background-color: #f4f4f4;
color: #bbb;
}
.leaflet-touch .leaflet-bar a {
width: 30px;
height: 30px;
line-height: 30px;
}
.leaflet-touch .leaflet-bar a:first-child {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.leaflet-touch .leaflet-bar a:last-child {
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
/* zoom control */
.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
font: bold 18px 'Lucida Console', Monaco, monospace;
text-indent: 1px;
}
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
font-size: 22px;
}
/* layers control */
.leaflet-control-layers {
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
background: #fff;
border-radius: 5px;
}
.leaflet-control-layers-toggle {
background-image: url(images/layers.png);
width: 36px;
height: 36px;
}
.leaflet-retina .leaflet-control-layers-toggle {
background-image: url(images/layers-2x.png);
background-size: 26px 26px;
}
.leaflet-touch .leaflet-control-layers-toggle {
width: 44px;
height: 44px;
}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
display: none;
}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
display: block;
position: relative;
}
.leaflet-control-layers-expanded {
padding: 6px 10px 6px 6px;
color: #333;
background: #fff;
}
.leaflet-control-layers-scrollbar {
overflow-y: scroll;
overflow-x: hidden;
padding-right: 5px;
}
.leaflet-control-layers-selector {
margin-top: 2px;
position: relative;
top: 1px;
}
.leaflet-control-layers label {
display: block;
}
.leaflet-control-layers-separator {
height: 0;
border-top: 1px solid #ddd;
margin: 5px -10px 5px -6px;
}
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
/* attribution and scale controls */
.leaflet-container .leaflet-control-attribution {
background: #fff;
background: rgba(255, 255, 255, 0.7);
margin: 0;
}
.leaflet-control-attribution,
.leaflet-control-scale-line {
padding: 0 5px;
color: #333;
}
.leaflet-control-attribution a {
text-decoration: none;
}
.leaflet-control-attribution a:hover {
text-decoration: underline;
}
.leaflet-container .leaflet-control-attribution,
.leaflet-container .leaflet-control-scale {
font-size: 11px;
}
.leaflet-left .leaflet-control-scale {
margin-left: 5px;
}
.leaflet-bottom .leaflet-control-scale {
margin-bottom: 5px;
}
.leaflet-control-scale-line {
border: 2px solid #777;
border-top: none;
line-height: 1.1;
padding: 2px 5px 1px;
font-size: 11px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
}
.leaflet-control-scale-line:not(:first-child) {
border-top: 2px solid #777;
border-bottom: none;
margin-top: -2px;
}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
border-bottom: 2px solid #777;
}
.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
box-shadow: none;
}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
border: 2px solid rgba(0,0,0,0.2);
background-clip: padding-box;
}
/* popup */
.leaflet-popup {
position: absolute;
text-align: center;
margin-bottom: 20px;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
}
.leaflet-popup-content {
margin: 13px 19px;
line-height: 1.4;
}
.leaflet-popup-content p {
margin: 18px 0;
}
.leaflet-popup-tip-container {
width: 40px;
height: 20px;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden;
pointer-events: none;
}
.leaflet-popup-tip {
width: 17px;
height: 17px;
padding: 1px;
margin: -10px auto 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
background: white;
color: #333;
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
}
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 4px 4px 0 0;
border: none;
text-align: center;
width: 18px;
height: 14px;
font: 16px/14px Tahoma, Verdana, sans-serif;
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-container a.leaflet-popup-close-button:hover {
color: #999;
}
.leaflet-popup-scrolled {
overflow: auto;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
}
.leaflet-oldie .leaflet-popup-content-wrapper {
-ms-zoom: 1;
}
.leaflet-oldie .leaflet-popup-tip {
width: 24px;
margin: 0 auto;
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
}
.leaflet-oldie .leaflet-popup-tip-container {
margin-top: -1px;
}
.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
border: 1px solid #999;
}
/* div icon */
.leaflet-div-icon {
background: #fff;
border: 1px solid #666;
}
/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
position: absolute;
padding: 6px;
background-color: #fff;
border: 1px solid #fff;
border-radius: 3px;
color: #222;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.leaflet-tooltip.leaflet-clickable {
cursor: pointer;
pointer-events: auto;
}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
position: absolute;
pointer-events: none;
border: 6px solid transparent;
background: transparent;
content: "";
}
/* Directions */
.leaflet-tooltip-bottom {
margin-top: 6px;
}
.leaflet-tooltip-top {
margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
left: 50%;
margin-left: -6px;
}
.leaflet-tooltip-top:before {
bottom: 0;
margin-bottom: -12px;
border-top-color: #fff;
}
.leaflet-tooltip-bottom:before {
top: 0;
margin-top: -12px;
margin-left: -6px;
border-bottom-color: #fff;
}
.leaflet-tooltip-left {
margin-left: -6px;
}
.leaflet-tooltip-right {
margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
top: 50%;
margin-top: -6px;
}
.leaflet-tooltip-left:before {
right: 0;
margin-right: -12px;
border-left-color: #fff;
}
.leaflet-tooltip-right:before {
left: 0;
margin-left: -12px;
border-right-color: #fff;
}
@@ -1,6 +0,0 @@
/* @preserve
* Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com
* (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function h(t){for(var i,e,n=1,o=arguments.length;n<o;n++)for(i in e=arguments[n])t[i]=e[i];return t}var s=Object.create||function(t){return i.prototype=t,new i};function i(){}function p(t,i){var e=Array.prototype.slice;if(t.bind)return t.bind.apply(t,e.call(arguments,1));var n=e.call(arguments,2);return function(){return t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}var e=0;function m(t){return t._leaflet_id=t._leaflet_id||++e,t._leaflet_id}function n(t,i,e){var n,o,s=function(){n=!1,o&&(r.apply(e,o),o=!1)},r=function(){n?o=arguments:(t.apply(e,arguments),setTimeout(s,i),n=!0)};return r}function o(t,i,e){var n=i[1],o=i[0],s=n-o;return t===n&&e?t:((t-o)%s+s)%s+o}function a(){return!1}function r(t,i){var e=Math.pow(10,void 0===i?6:i);return Math.round(t*e)/e}function u(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function l(t){return u(t).split(/\s+/)}function c(t,i){for(var e in Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?s(t.options):{}),i)t.options[e]=i[e];return t.options}function _(t,i,e){var n=[];for(var o in t)n.push(encodeURIComponent(e?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(i&&-1!==i.indexOf("?")?"&":"?")+n.join("&")}var d=/\{ *([\w_-]+) *\}/g;function f(t,n){return t.replace(d,function(t,i){var e=n[i];if(void 0===e)throw new Error("No value provided for variable "+t);return"function"==typeof e&&(e=e(n)),e})}var g=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function v(t,i){for(var e=0;e<t.length;e++)if(t[e]===i)return e;return-1}var y="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function x(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var w=0;function P(t){var i=+new Date,e=Math.max(0,16-(i-w));return w=i+e,window.setTimeout(t,e)}var b=window.requestAnimationFrame||x("RequestAnimationFrame")||P,T=window.cancelAnimationFrame||x("CancelAnimationFrame")||x("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function M(t,i,e){if(!e||b!==P)return b.call(window,p(t,i));t.call(i)}function z(t){t&&T.call(window,t)}var C={extend:h,create:s,bind:p,lastId:e,stamp:m,throttle:n,wrapNum:o,falseFn:a,formatNum:r,trim:u,splitWords:l,setOptions:c,getParamString:_,template:f,isArray:g,indexOf:v,emptyImageUrl:y,requestFn:b,cancelFn:T,requestAnimFrame:M,cancelAnimFrame:z};function S(){}S.extend=function(t){function i(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()}var e=i.__super__=this.prototype,n=s(e);for(var o in(n.constructor=i).prototype=n,this)Object.prototype.hasOwnProperty.call(this,o)&&"prototype"!==o&&"__super__"!==o&&(i[o]=this[o]);return t.statics&&(h(i,t.statics),delete t.statics),t.includes&&(function(t){if("undefined"==typeof L||!L||!L.Mixin)return;t=g(t)?t:[t];for(var i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",(new Error).stack)}(t.includes),h.apply(null,[n].concat(t.includes)),delete t.includes),n.options&&(t.options=h(s(n.options),t.options)),h(n,t),n._initHooks=[],n.callInitHooks=function(){if(!this._initHooksCalled){e.callInitHooks&&e.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=n._initHooks.length;t<i;t++)n._initHooks[t].call(this)}},i},S.include=function(t){return h(this.prototype,t),this},S.mergeOptions=function(t){return h(this.prototype.options,t),this},S.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),e="function"==typeof t?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(e),this};var Z={on:function(t,i,e){if("object"==typeof t)for(var n in t)this._on(n,t[n],i);else for(var o=0,s=(t=l(t)).length;o<s;o++)this._on(t[o],i,e);return this},off:function(t,i,e){if(t)if("object"==typeof t)for(var n in t)this._off(n,t[n],i);else for(var o=0,s=(t=l(t)).length;o<s;o++)this._off(t[o],i,e);else delete this._events;return this},_on:function(t,i,e){this._events=this._events||{};var n=this._events[t];n||(n=[],this._events[t]=n),e===this&&(e=void 0);for(var o={fn:i,ctx:e},s=n,r=0,a=s.length;r<a;r++)if(s[r].fn===i&&s[r].ctx===e)return;s.push(o)},_off:function(t,i,e){var n,o,s;if(this._events&&(n=this._events[t]))if(i){if(e===this&&(e=void 0),n)for(o=0,s=n.length;o<s;o++){var r=n[o];if(r.ctx===e&&r.fn===i)return r.fn=a,this._firingCount&&(this._events[t]=n=n.slice()),void n.splice(o,1)}}else{for(o=0,s=n.length;o<s;o++)n[o].fn=a;delete this._events[t]}},fire:function(t,i,e){if(!this.listens(t,e))return this;var n=h({},i,{type:t,target:this,sourceTarget:i&&i.sourceTarget||this});if(this._events){var o=this._events[t];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,r=o.length;s<r;s++){vaLine truncated
//# sourceMappingURL=leaflet.js.map
@@ -1 +0,0 @@
{"version":3,"file":"dist/leaflet.js.map","sources":["../src/core/Util.js","../src/core/Class.js","../src/core/Events.js","../src/geometry/Point.js","../src/geometry/Bounds.js","../src/geo/LatLngBounds.js","../src/geo/LatLng.js","../src/geo/crs/CRS.js","../src/geo/projection/Projection.SphericalMercator.js","../src/geo/crs/CRS.Earth.js","../src/geometry/Transformation.js","../src/geo/crs/CRS.EPSG3857.js","../src/layer/vector/SVG.Util.js","../src/core/Browser.js","../src/dom/DomEvent.Pointer.js","../src/dom/DomEvent.DoubleTap.js","../src/dom/DomUtil.js","../src/dom/DomEvent.js","../src/dom/PosAnimation.js","../src/map/Map.js","../src/control/Control.js","../src/control/Control.Layers.js","../src/control/Control.Zoom.js","../src/control/Control.Scale.js","../src/control/Control.Attribution.js","../src/control/index.js","../src/core/Handler.js","../src/core/index.js","../src/geometry/LineUtil.js","../src/dom/Draggable.js","../src/geometry/PolyUtil.js","../src/geo/crs/CRS.EPSG3395.js","../src/geo/projection/Projection.LonLat.js","../src/geo/projection/Projection.Mercator.js","../src/geo/crs/CRS.EPSG4326.js","../src/geo/crs/CRS.Simple.js","../src/geo/crs/index.js","../src/layer/Layer.js","../src/layer/LayerGroup.js","../src/layer/FeatureGroup.js","../src/layer/marker/Icon.js","../src/layer/marker/Icon.Default.js","../src/layer/marker/Marker.Drag.js","../src/layer/marker/Marker.js","../src/layer/vector/Path.js","../src/layer/vector/CircleMarker.js","../src/layer/vector/Circle.js","../src/layer/vector/Polyline.js","../src/layer/vector/Polygon.js","../src/layer/GeoJSON.js","../src/layer/ImageOverlay.js","../src/layer/VideoOverlay.js","../src/layer/SVGOverlay.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/DivIcon.js","../src/layer/marker/index.js","../src/layer/tile/GridLayer.js","../src/layer/tile/TileLayer.js","../src/layer/tile/TileLayer.WMS.js","../src/layer/tile/index.js","../src/layer/vector/Renderer.js","../src/layer/vector/Canvas.js","../src/layer/vector/SVG.VML.js","../src/layer/vector/SVG.js","../src/layer/vector/Renderer.getRenderer.js","../src/layer/vector/Rectangle.js","../src/layer/vector/index.js","../src/layer/index.js","../src/map/handler/Map.BoxZoom.js","../src/map/handler/Map.DoubleClickZoom.js","../src/map/handler/Map.Drag.js","../src/map/handler/Map.Keyboard.js","../src/map/handler/Map.ScrollWheelZoom.js","../src/map/handler/Map.Tap.js","../src/map/handler/Map.TouchZoom.js","../src/map/index.js"],"names":["extend","dest","i","src","j","len","arguments","length","create","Object","proto","F","prototype","bind","fn","obj","slice","Array","apply","call","args","concat","lastId","stamp","_leaflet_id","throttle","time","context","lock","later","wrapperFn","setTimeout","wrapNum","x","range","includeMax","max","min","d","falseFn","formatNum","num","digits","pow","Math","undefined","round","trim","str","replace","splitWords","split","setOptions","options","hasOwnProperty","getParamString","existingUrl","uppercase","params","push","encodeURIComponent","toUpperCase","indexOf","join","templateRe","template","data","key","value","Error","isArray","toString","array","el","emptyImageUrl","getPrefixed","name","window","lastTime","timeoutDefer","Date","timeToCall","requestFn","requestAnimationFrame","cancelFn","cancelAnimationFrame","id","clearTimeout","requestAnimFrame","immediate","cancelAnimFrame","Class","props","NewClass","this","initialize","callInitHooks","parentProto","__super__","Util.create","constructor","statics","Util.extend","includes","L","Mixin","Util.isArray","Events","console","warn","stack","checkDeprecatedMixinEvents","_initHooks","_initHooksCalled","include","mergeOptions","addInitHook","init","on","types","type","_on","Util.splitWords","off","_off","_events","typeListeners","newListener","ctx","listeners","l","Util.falseFn","_firingCount","splice","fire","propagate","listens","event","target","sourceTarget","_propagateEvent","_eventParents","once","handler","Util.bind","addEventParent","Util.stamp","removeEventParent","e","layer","propagatedFrom","addEventListener","removeEventListener","clearAllEventListeners","addOneTimeEventListener","fireEvent","hasEventListeners","Evented","Point","y","trunc","v","floor","ceil","toPoint","Bounds","a","b","points","toBounds","LatLngBounds","corner1","corner2","latlngs","toLatLngBounds","LatLng","lat","lng","alt","isNaN","toLatLng","c","lon","clone","add","point","_add","subtract","_subtract","divideBy","_divideBy","multiplyBy","_multiplyBy","scaleBy","unscaleBy","_round","_floor","_ceil","_trunc","distanceTo","sqrt","equals","contains","abs","getCenter","getBottomLeft","getTopRight","getTopLeft","getBottomRight","getSize","intersects","bounds","min2","max2","xIntersects","yIntersects","overlaps","xOverlaps","yOverlaps","isValid","sw2","ne2","sw","_southWest","ne","_northEast","pad","bufferRatio","heightBuffer","widthBuffer","getSouthWest","getNorthEast","getNorthWest","getNorth","getWest","getSoLine truncated
@@ -1,189 +0,0 @@
h1{
color: black;
-webkit-transition: letter-spacing .15s, color 1s;
-moz-transition: color 1s;
transition: letter-spacing .15s, color 1s;
}
@keyframes rainbow{
0% { color: #ff2400; }
12.5% { color: #e81d1d; }
25% { color: #e8b71d; }
37.5% { color: #e3e81d; }
50% { color: #1de840; }
62.5% { color: #1ddde8; }
75% { color: #3900f3; }
87.5% { color: #dd00f3; }
95% { color: #f30082; }
100% { color: #ff2400; }
}
@keyframes blackToRed{
0% { color: black; }
50% { color: black; }
75% { color: black; }
100% { color: #ff2400; }
}
h1:hover{
letter-spacing: 1px;
animation: blackToRed 5s ease 0s, rainbow 18s ease 5s infinite;
}
canvas{
width: 100%;
}
#map{
height: 500px;
width: 60%;
margin: auto;
}
#getData-form{
border: 1px solid black;
border-radius: 10px;
height: 100%;
width: 100%;
margin: auto;
}
#database-form{
width: 100%;
margin: auto;
margin-bottom: 50px;
padding-bottom: 10px;
border: 1px solid black;
border-radius: 10px;
font-size: 1em;
}
#getAllData-form{
width: 100%;
margin: auto;
margin-bottom: 50px;
padding-bottom: 10px;
border-radius: 10px;
font-size: 1em;
}
label, input{
margin: auto;
}
#inputs{
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
margin-top: 2px;
}
.form{
width: 100%;
height: 100%;
padding: 0;
}
#allInputs{
width: 100%;
height: 50%;
}
.btnDays{
height: 75%;
padding-bottom: 7px;
}
#exercise-close {
position: absolute;
width: 5%;
right: 0px;
top: 0px;
border: none;
border-radius: 0px 10px 0px 0px;
background-color: rgb(240, 240, 240);
transition: background-color 0.2s ease-out, color 0.05s ease-in;
}
#exercise-close:hover{
background-color: rgb(231, 15, 15);
color: white;
}
#exercise{
position: absolute;
top: 25%;
left: 25%;
height: 40%;
width: 60%;
background-color: rgb(240, 240, 240);
border-radius: 10px;
z-index: 10;
animation-duration: .3s;
animation-timing-function: ease-out;
animation-delay: 0s;
animation-iteration-count: 1;
animation-name: darkTransition;
box-shadow: 0 0 0 99999px rgba(0, 0, 0, .5), 2px 3px 5px 2px rgb(151, 150, 150);
}
@keyframes darkTransition{
0% {
box-shadow: 0 0 0 99999px rgba(0, 0, 0, .01), 2px 3px 5px 2px rgb(200, 200, 200);
}
100% {
box-shadow: 0 0 0 99999px rgba(0, 0, 0, .5), 2px 3px 5px 2px rgb(151, 150, 150);
}
}
.scrollable{
max-height: 300px;
right: 15px;
overflow-y: scroll;
overflow-x: hidden;
}
.checkboxList{
display: block;
}
.error{
background: linear-gradient(#ff2b0f, #ff6a00);
box-shadow: 5px 5px 15px 1px #ff2b0f69;
}
.info{
background: linear-gradient(#26a50c, #6eeb09);
box-shadow: 5px 5px 15px 1px rgba(6, 240, 6, 0.5);
}
#info{
position: fixed;
right: 1%; bottom: 2.5%;
width: 25%;
color: white;
font-size: 1.25em;
border-radius: 10px;
padding: 5px;
animation-duration: 1s;
animation-timing-function: ease-out;
animation-delay: 0s;
animation-iteration-count: 1;
animation-name: slideInFromRight;
transition: right 1s ease-in;
}
@keyframes slideInFromRight {
0% {
right: -100%;
}
100% {
right: 1%;
}
}
#info.slideToRight {
right: -100%;
}
#processStatus{
background-color: #cecece;
box-shadow: 2px 3px 5px 1px rgba(143, 143, 143, 0.616);
width: 15%;
height: 5%;
position: fixed;
top: -1%;
right: 2px;
border-radius: 10px;
animation-duration: 250ms;
animation-timing-function: ease-out;
animation-delay: 0s;
animation-iteration-count: 1;
animation-name: slideInFromTop;
}
@keyframes slideInFromTop {
0% {
top: -12%;
}
100% {
top: -1%;
}
}