VERO: Initialer Import
201
DB_SCHEMA.sql
Normal file
@ -0,0 +1,201 @@
|
||||
-- MySQL dump 10.15 Distrib 10.0.36-MariaDB, for debian-linux-gnu (x86_64)
|
||||
--
|
||||
-- Host: localhost Database: VERO
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 10.0.36-MariaDB-0ubuntu0.16.04.1
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
DROP DATABASE IF EXISTS VERO;
|
||||
CREATE DATABASE VERO;
|
||||
USE VERO;
|
||||
|
||||
--
|
||||
-- Table structure for table `BibliographicData`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `BibliographicData`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `BibliographicData` (
|
||||
`biblioId` int(11) NOT NULL COMMENT 'ID',
|
||||
`biblioUserId` int(11) NOT NULL,
|
||||
`biblioTitle` varchar(255) NOT NULL COMMENT 'Hauptsachtitel',
|
||||
`biblioFirstAuthor` varchar(255) NOT NULL COMMENT '1. Autor',
|
||||
`biblioOccurrence` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Vorgangsnummer',
|
||||
`biblioIdStatus` int(11) NOT NULL COMMENT 'Link zum Status',
|
||||
`biblioData` text NOT NULL COMMENT 'bibliographische Daten',
|
||||
PRIMARY KEY (`biblioId`),
|
||||
KEY `biblioTitle` (`biblioTitle`),
|
||||
KEY `biblioOccurance` (`biblioOccurrence`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `BibliographicData`
|
||||
--
|
||||
|
||||
LOCK TABLES `BibliographicData` WRITE;
|
||||
/*!40000 ALTER TABLE `BibliographicData` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `BibliographicData` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `Document`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `Document`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `Document` (
|
||||
`documentId` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`BibliographicData_biblioId` int(11) NOT NULL,
|
||||
`documentIdOccurance` int(11) NOT NULL,
|
||||
`documentType` varchar(16) DEFAULT NULL,
|
||||
`documentContent` mediumtext,
|
||||
PRIMARY KEY (`documentId`),
|
||||
KEY `idOccurance` (`documentIdOccurance`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `Document`
|
||||
--
|
||||
|
||||
LOCK TABLES `Document` WRITE;
|
||||
/*!40000 ALTER TABLE `Document` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `Document` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `Mail`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `Mail`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `Mail` (
|
||||
`MailId` int(11) NOT NULL,
|
||||
`mailOccurance` int(11) NOT NULL,
|
||||
`mailSent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`mailContent` text,
|
||||
`BibliographicData_biblioId` int(11) NOT NULL,
|
||||
PRIMARY KEY (`MailId`,`BibliographicData_biblioId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `Mail`
|
||||
--
|
||||
|
||||
LOCK TABLES `Mail` WRITE;
|
||||
/*!40000 ALTER TABLE `Mail` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `Mail` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `Status`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `Status`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `Status` (
|
||||
`statusID` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`statusOccurance` int(11) NOT NULL,
|
||||
`statusLastUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`statusCode` int(11) DEFAULT NULL,
|
||||
`statusValue` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`statusID`),
|
||||
KEY `statusOccurance` (`statusID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `Status`
|
||||
--
|
||||
|
||||
LOCK TABLES `Status` WRITE;
|
||||
/*!40000 ALTER TABLE `Status` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `Status` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `User`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `User`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `User` (
|
||||
`userId` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`userPassword` varchar(255) NOT NULL,
|
||||
`userTitle` varchar(32) DEFAULT NULL,
|
||||
`userLastName` varchar(255) NOT NULL,
|
||||
`userFirstName` varchar(255) NOT NULL,
|
||||
`userEmail` varchar(255) NOT NULL,
|
||||
`userStatus` smallint(6) DEFAULT NULL,
|
||||
`userLastActivity` timestamp NULL DEFAULT NULL,
|
||||
`userToken` varchar(255) DEFAULT NULL,
|
||||
UNIQUE KEY `userId` (`userId`),
|
||||
KEY `userName` (`userLastName`,`userFirstName`) USING BTREE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `User`
|
||||
--
|
||||
|
||||
LOCK TABLES `User` WRITE;
|
||||
/*!40000 ALTER TABLE `User` DISABLE KEYS */;
|
||||
INSERT INTO `User` VALUES (25,'$2y$12$sgcOO8gmCsgKVE4i1McfyumDAc5iqXjrqFvwR1T6ywnJ4IwjgyNVe','','Woll','Christian','woll@bibb.de',0,'2025-06-27 07:58:44',''),(30,'$2y$12$/HfDgxSsGgpfsSein8NyKOszJd9RzpBXfih5/SK875ZM9QlrWoKDO','','Savi','Annemarie','annemarie.savi@bibb.de',0,'2025-06-30 11:03:16',''),(33,'$2y$10$QUM.e.vAlVOmTcp1PPANM.tUSOhFj4krlYhDU9YmQwCedD8KzQ9ua','','Zeuner','Philipp','Zeuner@bibb.de',0,'2025-11-17 13:36:53',''),(37,'$2y$12$n75hOgjLDG6hSiwdE4kIee7KRya87FmuHeaGioX5pZUh2JDFnRGIu','','Nolden','Julia','nolden@bibb.de',0,'2025-11-26 10:48:55',''),(41,'$2y$12$sRvkgrl2mxYVt9i8mTCNYeC5W5jJA3D1QEZNwi4FxD8qxBqqZpski','','Taufenbach','Kerstin','taufenbach@bibb.de',0,'2025-07-18 10:50:46',''),(44,'$2y$10$5AIL1l7TccUzNjQBiFGWJO4OeO7g640gLF537HK44dS0vitJSTFoK','','Keck','Roland','roland.keck@conlicom.de',0,'2025-11-13 06:48:11',''),(51,'$2y$10$ne.8rcknmFMIuG4MSAp78O8Ahqct28JNlOEOokcTopIUJRkANZgxy','','Offerhaus','Judith','judith.offerhaus@bibb.de',0,'2025-08-18 14:09:39',''),(52,'$2y$10$5NMmcUfzCtV9bjZ7ongMTuAaR.xqYiMkBIjJ02AyBC7kC31430Pva','','Adrian','René','rene.adrian@bibb.de',0,'2025-08-18 14:35:26',''),(53,'$2y$10$FyzmAmt7KG.Myrymltgs3O4jmmoFhsjQ5MszD3xRnOEAd8tBdEbpO','','Ganz','Kathrin','kathrin.ganz@fu-berlin.de',0,'2025-08-19 08:06:14',''),(54,'$2y$10$BX0XHkY/hbVrr7z6xji9K.Ms3pScIYxDJYhPlVxGItPD9Zj/iVvIO','','Linder','Dennis','dennis.linder@bibb.de',0,'2025-08-21 11:09:15',''),(56,'$2y$10$WUUh82pZak7cM4ltEBKBReSjEiPXQUUd/vlPt.n7NshntEFNQ.mlG','','Weiland','Jan','j.weiland@zbw.eu',0,'2025-08-22 07:38:11',''),(57,'$2y$10$RJmKOJB7MSPRbtTVitzMNuPVGfEpHIR5wmssFLvEaXEamnLTmWXDW','','Müller-Wegner','Max','max.mueller@bibb.de',0,'2025-08-22 12:40:57',''),(58,'$2y$10$Pa4hj758OEajqv4ijEyYq.j4vVjevFnvMqG0rKweUvL2izo6E2a7e','','Materna','Thomas','materna@bibb.de',0,'2025-08-22 15:35:11',''),(59,'$2y$10$WR3hxRvIb.5kWHwrDWnJhODu.bsUecYocwXBQShBEwGvIUVu6iX7q','','Winkler','Antje','winkler@bibb.de',0,'2025-11-26 15:41:52',''),(62,'$2y$10$4ElTcMUsURkwXAdbQihbjeEqx.i8lldSwqUYEBBENdvf8pDV9KDaa','','Schambeck','Arne','schambeck@bibb.de',0,'2025-09-02 09:22:53',''),(63,'$2y$10$4Ykw5q1I8wDgJyYTQ0hubepV2woRZHVvMSfGbkeJnwaE1CJz5Ci1q','','Rüsing','Karin Maria','ruesing@bibb.de',0,'2025-09-11 10:17:03',''),(64,'$2y$10$SAn1NDfETiblx3ZTOR8N7uGlqvxHTam3gq.yZarKDasN35Bh7ZaWK','','Gerhards','Lea','leg@leibniz-psychology.org',0,'2025-09-15 09:58:41',''),(65,'$2y$10$B3U3SjVEGjIHOE2jTT9qTeomTEbXHvauWagMdVYCoiox9YAel5izK','','Langenkamp','Karin','langenkamp@bibb.de',0,'2025-09-15 13:01:13',''),(66,'$2y$10$gpBc6.p8Vkq34EnczDiJBuwbcoJgIV7Eivap.Mb0lbXoPIoucYYx2','','Göckede','Benno','benno.goeckede@uni-koeln.de',0,'2025-09-19 07:46:22',''),(67,'$2y$10$pZFgYQDdBq6szhl.XwF0Mehw8HotQuvOUIWoR55RpF/JxGbFXUa6G','','Woll','Christian','christian.woll@gmx.de',0,'2025-09-29 12:58:08',''),(68,'$2y$10$/GI4JtqQOsB7561xSGAtfO2NKnvzy9uJTwc8tCknpkgX0U07WE7t.','','Thole','Christine','christiane.thole@t-online.de',0,'2025-10-01 17:30:18',''),(69,'$2y$10$31O9u2eoFaWnAy4uLryJ5OB.ZsquPRHdGYtpNTDzjEU0s2TSREkHG','','Scharlach','Matthias','post@extro-company.de',0,'2025-10-14 09:46:38',''),(70,'$2y$10$pOIP2YlmLaumO8zvNawN7OTQrY96EGbsrmfp/93utr1TcjDNMCF1a','','Holzer','Julia Teresa','julia.t.holzer@gmail.com',0,'2025-10-20 18:43:12',''),(71,'$2y$10$sGdXoi6kE1pri9gsMJ/jluniVP7Ky2ayemzNfQC.jdV.Yx3f9B8Nq','','Grotluschen','Anke','anke.grotlueschen@uni-hamburg.de',0,'2025-11-18 13:09:29',''),(72,'$2y$10$9qA2Cu79GvO1pA.ocRvaFef9176ilEGH4Opul0yEon/wrCZx9IzOu','','Wittmann','Eveline','eveline.wittmann@tum.de',0,'2025-11-19 11:13:52',''),(73,'$2y$10$dyBxPG2QaSABs60OOKaan.y99LjXD4YVnp3Z3i6fM9WEBagFw753a','','Winkler','Antje','winkler@web.de',99,'2025-11-19 20:18:38','b68d965b4cfc396013f6ec359b05549b62ba0b78f172a0020ce0f84e23b5e6bb'),(74,'$2y$10$ByaoZb3JJL9WpIQbJtdyYuDZxl9XBsou2vHWN.18ZPUuxP8XqL8xW','','Bunschoten','Michelle Celine','michelle.bunschoten@neustart.kom-bildung.de',0,'2025-11-24 08:48:01','');
|
||||
/*!40000 ALTER TABLE `User` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `additionalDocuments`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `additionalDocuments`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `additionalDocuments` (
|
||||
`documentId` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`documentIdOccurance` int(11) NOT NULL,
|
||||
`documentType` varchar(16) NOT NULL,
|
||||
`documentContent` mediumtext,
|
||||
`BibliographicData_biblioId` int(11) NOT NULL,
|
||||
PRIMARY KEY (`documentId`),
|
||||
KEY `idOccurance` (`documentIdOccurance`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `additionalDocuments`
|
||||
--
|
||||
|
||||
LOCK TABLES `additionalDocuments` WRITE;
|
||||
/*!40000 ALTER TABLE `additionalDocuments` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `additionalDocuments` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2025-11-28 7:12:12
|
||||
|
||||
374
DisposableMails/LocalBlocklist.php
Normal file
@ -0,0 +1,374 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
// Konfiguration
|
||||
define('DOMAINS_FILE', 'localdomains.conf');
|
||||
define('USERNAME', 'admin');
|
||||
define('PASSWORD', 'password123'); // In Produktion sollte dies gehasht werden!
|
||||
|
||||
// Hilfsfunktionen
|
||||
function isLoggedIn() {
|
||||
return isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true;
|
||||
}
|
||||
|
||||
function validateDomain($domain) {
|
||||
// Domain-Validierung
|
||||
$domain = trim($domain);
|
||||
if (empty($domain)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Basis-Validierung für Domain-Format
|
||||
return filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) !== false;
|
||||
}
|
||||
|
||||
function loadDomains() {
|
||||
if (!file_exists(DOMAINS_FILE)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$domains = file(DOMAINS_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
return array_filter(array_map('trim', $domains));
|
||||
}
|
||||
|
||||
function saveDomains($domains) {
|
||||
|
||||
// Alphabetische Sortierung vor dem Speichern
|
||||
sort($domains, SORT_STRING | SORT_FLAG_CASE);
|
||||
exec ('touch disposable_email_blocklist.conf -d "-2 hours" disposable_email_blocklist.conf 2>&1',$output, $retval);
|
||||
|
||||
return file_put_contents(DOMAINS_FILE, implode("\n", $domains) . "\n");
|
||||
}
|
||||
|
||||
function addDomain($domain) {
|
||||
if (!validateDomain($domain)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$domains = loadDomains();
|
||||
if (in_array($domain, $domains)) {
|
||||
return false; // Domain bereits vorhanden
|
||||
}
|
||||
|
||||
$domains[] = $domain;
|
||||
return saveDomains($domains);
|
||||
}
|
||||
|
||||
function deleteDomain($domain) {
|
||||
$domains = loadDomains();
|
||||
$domains = array_filter($domains, function($d) use ($domain) {
|
||||
return $d !== $domain;
|
||||
});
|
||||
return saveDomains($domains);
|
||||
}
|
||||
|
||||
function updateDomain($oldDomain, $newDomain) {
|
||||
if (!validateDomain($newDomain)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$domains = loadDomains();
|
||||
$key = array_search($oldDomain, $domains);
|
||||
if ($key !== false) {
|
||||
$domains[$key] = $newDomain;
|
||||
return saveDomains($domains);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Request-Verarbeitung
|
||||
$message = '';
|
||||
$error = '';
|
||||
|
||||
// Login-Verarbeitung
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
|
||||
switch ($_POST['action']) {
|
||||
case 'login':
|
||||
if ($_POST['username'] === USERNAME && $_POST['password'] === PASSWORD) {
|
||||
$_SESSION['logged_in'] = true;
|
||||
$message = 'Erfolgreich angemeldet!';
|
||||
} else {
|
||||
$error = 'Ungültige Anmeldedaten!';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'logout':
|
||||
session_destroy();
|
||||
header('Location: ' . $_SERVER['PHP_SELF']);
|
||||
exit;
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
if (isLoggedIn()) {
|
||||
$domain = trim($_POST['domain']);
|
||||
if (addDomain($domain)) {
|
||||
$message = "Domain '$domain' wurde erfolgreich hinzugefügt!";
|
||||
} else {
|
||||
$error = "Fehler beim Hinzufügen der Domain '$domain'. Möglicherweise ungültig oder bereits vorhanden.";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if (isLoggedIn() && isset($_POST['domain'])) {
|
||||
$domain = $_POST['domain'];
|
||||
if (deleteDomain($domain)) {
|
||||
$message = "Domain '$domain' wurde erfolgreich gelöscht!";
|
||||
} else {
|
||||
$error = "Fehler beim Löschen der Domain '$domain'.";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
if (isLoggedIn() && isset($_POST['old_domain']) && isset($_POST['new_domain'])) {
|
||||
$oldDomain = $_POST['old_domain'];
|
||||
$newDomain = trim($_POST['new_domain']);
|
||||
if (updateDomain($oldDomain, $newDomain)) {
|
||||
$message = "Domain wurde erfolgreich von '$oldDomain' zu '$newDomain' geändert!";
|
||||
} else {
|
||||
$error = "Fehler beim Aktualisieren der Domain. Neue Domain möglicherweise ungültig.";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$domains = isLoggedIn() ? loadDomains() : [];
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Lokale Blocklist</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.container {
|
||||
background: white;
|
||||
padding: 30px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #333;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"] {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
button {
|
||||
background: #007cba;
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: #005a87;
|
||||
}
|
||||
|
||||
button.danger {
|
||||
background: #dc3545;
|
||||
}
|
||||
|
||||
button.danger:hover {
|
||||
background: #c82333;
|
||||
}
|
||||
|
||||
.message {
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.success {
|
||||
background: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
|
||||
.error {
|
||||
background: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
|
||||
.domain-list {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.domain-item {
|
||||
background: #f8f9fa;
|
||||
padding: 15px;
|
||||
margin: 10px 0;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #dee2e6;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.domain-name {
|
||||
font-family: monospace;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.edit-form {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.stats {
|
||||
background: #e9ecef;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.logout-btn {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Lokale Blocklist bearbeiten</h1>
|
||||
|
||||
<?php if ($message): ?>
|
||||
<div class="message success"><?= htmlspecialchars($message) ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= htmlspecialchars($error) ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!isLoggedIn()): ?>
|
||||
<!-- Login-Formular -->
|
||||
<form method="POST">
|
||||
<input type="hidden" name="action" value="login">
|
||||
<div class="form-group">
|
||||
<label for="username">Benutzername:</label>
|
||||
<input type="text" id="username" name="username" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Passwort:</label>
|
||||
<input type="password" id="password" name="password" required>
|
||||
</div>
|
||||
<button type="submit">Anmelden</button>
|
||||
</form>
|
||||
|
||||
<div class="message" style="margin-top: 20px; background: #cce5ff;">
|
||||
<strong>Demo-Zugangsdaten:</strong><br>
|
||||
Benutzername: admin<br>
|
||||
Passwort: password123
|
||||
</div>
|
||||
|
||||
<?php else: ?>
|
||||
<!-- Logout-Button -->
|
||||
<form method="POST" style="display: inline;">
|
||||
<input type="hidden" name="action" value="logout">
|
||||
<button type="submit" class="logout-btn">Abmelden</button>
|
||||
</form>
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
<!-- Statistiken -->
|
||||
<div class="stats">
|
||||
<strong>Statistiken:</strong> <?= count($domains) ?> Domains verwaltet
|
||||
</div>
|
||||
|
||||
<!-- Domain hinzufügen -->
|
||||
<h2>Neue Domain hinzufügen</h2>
|
||||
<form method="POST">
|
||||
<input type="hidden" name="action" value="add">
|
||||
<div class="form-group">
|
||||
<label for="domain">Domain:</label>
|
||||
<input type="text" id="domain" name="domain" placeholder="z.B. example.com" required>
|
||||
</div>
|
||||
<button type="submit">Domain hinzufügen</button>
|
||||
</form>
|
||||
|
||||
<!-- Domain-Liste -->
|
||||
<div class="domain-list">
|
||||
<h2>Verwaltete Domains (<?= count($domains) ?>)</h2>
|
||||
|
||||
<?php if (empty($domains)): ?>
|
||||
<p>Keine Domains vorhanden. Fügen Sie eine Domain hinzu, um zu beginnen.</p>
|
||||
<?php else: ?>
|
||||
<?php foreach ($domains as $domain): ?>
|
||||
<div class="domain-item">
|
||||
<span class="domain-name"><?= htmlspecialchars($domain) ?></span>
|
||||
<div class="actions">
|
||||
<button onclick="showEditForm('<?= htmlspecialchars($domain) ?>')">Bearbeiten</button>
|
||||
<form method="POST" style="display: inline;" onsubmit="return confirm('Domain \'<?= htmlspecialchars($domain) ?>\' wirklich löschen?')">
|
||||
<input type="hidden" name="action" value="delete">
|
||||
<input type="hidden" name="domain" value="<?= htmlspecialchars($domain) ?>">
|
||||
<button type="submit" class="danger">Löschen</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bearbeitungsformular (versteckt) -->
|
||||
<div id="edit-<?= htmlspecialchars($domain) ?>" class="edit-form">
|
||||
<form method="POST" style="margin-top: 10px;">
|
||||
<input type="hidden" name="action" value="update">
|
||||
<input type="hidden" name="old_domain" value="<?= htmlspecialchars($domain) ?>">
|
||||
<div class="form-group">
|
||||
<label>Domain bearbeiten:</label>
|
||||
<input type="text" name="new_domain" value="<?= htmlspecialchars($domain) ?>" required>
|
||||
</div>
|
||||
<button type="submit">Speichern</button>
|
||||
<button type="button" onclick="hideEditForm('<?= htmlspecialchars($domain) ?>')">Abbrechen</button>
|
||||
</form>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function showEditForm(domain) {
|
||||
document.getElementById('edit-' + domain).style.display = 'block';
|
||||
}
|
||||
|
||||
function hideEditForm(domain) {
|
||||
document.getElementById('edit-' + domain).style.display = 'none';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
19
DisposableMails/checkMX.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
// Hole MX-Record
|
||||
getmxrr("web.de", $mx_records, $mx_weight);
|
||||
|
||||
$mxs = [];
|
||||
|
||||
// In Array schreiben
|
||||
for($i=0;$i<count($mx_records);$i++){
|
||||
$mxs[$mx_records[$i]] = $mx_weight[$i];
|
||||
}
|
||||
|
||||
if (!$mxs) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
?>
|
||||
|
||||
71632
DisposableMails/disposable_email_blocklist.conf
Normal file
2
DisposableMails/localdomains.conf
Normal file
@ -0,0 +1,2 @@
|
||||
123.com
|
||||
huber.de
|
||||
247
DisposableMails/mailCheck.php
Normal file
@ -0,0 +1,247 @@
|
||||
<?php
|
||||
// ===========================================
|
||||
// FUNKTIONEN FÜR DISPOSABLE EMAIL CHECK
|
||||
// ===========================================
|
||||
|
||||
function is_disposable_email($email, $blocklist_path = null) {
|
||||
// Standard-Pfad zur lokalen Blocklist-Datei
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
// E-Mail-Format prüfen
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Lade die Blocklist falls nötig
|
||||
if (!file_exists($blocklist_path)) {
|
||||
download_blocklist($blocklist_path);
|
||||
}
|
||||
|
||||
// Lese alle Domains aus der Datei
|
||||
$disposable_domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
|
||||
// Extrahiere Domain aus der E-Mail-Adresse
|
||||
$email_parts = explode('@', trim($email));
|
||||
if (count($email_parts) != 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$domain = strtolower($email_parts[1]);
|
||||
// echo $domain ."\n";
|
||||
|
||||
// Prüfe ob Domain in der Liste steht
|
||||
$ret = in_array($domain, $disposable_domains);
|
||||
// echo "in_array: " .$ret ."<br>" ;
|
||||
|
||||
// Check, ob für Domain (mindestens) ein MX-Record existiert
|
||||
if ($ret === false ) {
|
||||
// MX-Record(s) abholen
|
||||
getmxrr($domain, $mx_records, $mx_weight);
|
||||
|
||||
$mxs =[];
|
||||
// Array zusammenstellen für Sortierung
|
||||
for($i=0;$i<count($mx_records);$i++){
|
||||
$mxs[$mx_records[$i]] = $mx_weight[$i];
|
||||
}
|
||||
|
||||
// Sortieren
|
||||
$records = [];
|
||||
if (count($mxs) > 0) {
|
||||
asort ($mxs);
|
||||
// Erforderliche Daten stehen im Key => nach Array "records" schreiben
|
||||
$records = array_keys($mxs);
|
||||
}
|
||||
|
||||
if (count($records) == 0) {
|
||||
$ret = true;
|
||||
}
|
||||
}
|
||||
|
||||
return ($ret);
|
||||
}
|
||||
|
||||
function download_blocklist($file_path) {
|
||||
// Alternative Liste: $url = 'https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf';
|
||||
$url = 'https://raw.githubusercontent.com/disposable/disposable-email-domains/master/domains.txt';
|
||||
|
||||
echo "Lade Blocklist herunter...\n";
|
||||
|
||||
$content = file_get_contents($url);
|
||||
if ($content === false) {
|
||||
die("FEHLER: Konnte Blocklist nicht herunterladen von: $url\n");
|
||||
}
|
||||
|
||||
// Zusätzliche lokale Liste der nicht zugelassenen Domains
|
||||
$localContent = '';
|
||||
if (file_exists(__DIR__ . '/localdomains.conf')) {
|
||||
$localContent = file_get_contents(__DIR__ ."/localdomains.conf");
|
||||
}
|
||||
|
||||
// Listen kombinieren
|
||||
$content = $content ."\n" .$localContent;
|
||||
|
||||
if (file_put_contents($file_path, $content) === false) {
|
||||
die("FEHLER: Konnte Blocklist nicht speichern: $file_path\n");
|
||||
}
|
||||
|
||||
echo "Blocklist erfolgreich heruntergeladen: $file_path\n";
|
||||
}
|
||||
|
||||
function update_blocklist_if_needed($blocklist_path = null, $max_age_hours = 1) {
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
// Prüfe ob Datei existiert und wie alt sie ist
|
||||
if (!file_exists($blocklist_path)) {
|
||||
download_blocklist($blocklist_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
$file_age = time() - filemtime($blocklist_path);
|
||||
$max_age_seconds = $max_age_hours * 3600;
|
||||
|
||||
if ($file_age > $max_age_seconds) {
|
||||
echo "Blocklist ist " . round($file_age / 3600, 1) . " Stunden alt. Aktualisiere...\n";
|
||||
download_blocklist($blocklist_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function filter_disposable_emails($emails, $blocklist_path = null) {
|
||||
$valid_emails = array();
|
||||
|
||||
foreach ($emails as $email) {
|
||||
if (!is_disposable_email($email, $blocklist_path)) {
|
||||
$valid_emails[] = $email;
|
||||
}
|
||||
}
|
||||
|
||||
return $valid_emails;
|
||||
}
|
||||
|
||||
function get_email_domain($email) {
|
||||
$email_parts = explode('@', trim($email));
|
||||
return count($email_parts) === 2 ? strtolower($email_parts[1]) : '';
|
||||
}
|
||||
|
||||
function validate_email_form($email) {
|
||||
// Umfassende Validierung für Formulare
|
||||
if (empty($email)) {
|
||||
return array('valid' => false, 'error' => 'E-Mail-Adresse ist erforderlich');
|
||||
}
|
||||
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
return array('valid' => false, 'error' => 'Ungültige E-Mail-Adresse');
|
||||
}
|
||||
|
||||
if (is_disposable_email($email)) {
|
||||
return array('valid' => false, 'error' => 'Wegwerf-E-Mail-Adressen sind nicht erlaubt');
|
||||
}
|
||||
|
||||
return array('valid' => true, 'error' => null);
|
||||
}
|
||||
|
||||
// ===========================================
|
||||
// BEISPIELE:
|
||||
// ===========================================
|
||||
|
||||
// Test-E-Mails
|
||||
$test_emails = array(
|
||||
'user@gmail.com', // Legitim
|
||||
'test@mailinator.com', // Disposable
|
||||
'demo@10minutemail.com', // Disposable
|
||||
'contact@tempmail.org', // Disposable
|
||||
'roland.keck@t-onlin.de',
|
||||
'roland.keck@conlicom.de' // Legitim
|
||||
);
|
||||
|
||||
// Blocklist aktualisieren falls nötig (alle 24h)
|
||||
$updated = update_blocklist_if_needed();
|
||||
if ($updated) {
|
||||
echo "Blocklist wurde aktualisiert.<br>\n";
|
||||
}
|
||||
|
||||
echo "<h3>E-Mail-Validierung:</h3>\n";
|
||||
foreach ($test_emails as $email) {
|
||||
if (is_disposable_email($email)) {
|
||||
echo "❌ BLOCKIERT: $email ist eine Wegwerf-Adresse<br>\n";
|
||||
} else {
|
||||
echo "✅ ERLAUBT: $email<br>\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Bulk-Filterung
|
||||
//echo "<h3>Gefilterte Liste:</h3>\n";
|
||||
//$valid_emails = filter_disposable_emails($test_emails);
|
||||
//echo "Gültige E-Mails: " . implode(', ', $valid_emails) . "<br>\n";
|
||||
|
||||
// ===========================================
|
||||
// FORMULAR-INTEGRATION:
|
||||
// ===========================================
|
||||
|
||||
// In deinem Registrierungsformular:
|
||||
if (isset($_POST['email'])) {
|
||||
$email = trim($_POST['email']);
|
||||
$validation = validate_email_form($email);
|
||||
|
||||
if ($validation['valid']) {
|
||||
echo "✅ E-Mail-Adresse ist gültig: $email<br>\n";
|
||||
// Hier: Registrierung fortsetzen...
|
||||
} else {
|
||||
echo "❌ " . $validation['error'] . "<br>\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- EINFACHES TEST-FORMULAR -->
|
||||
<form method="post">
|
||||
<label>E-Mail-Adresse:</label>
|
||||
<input type="email" name="email" required>
|
||||
<button type="submit">Prüfen</button>
|
||||
</form>
|
||||
|
||||
<?php
|
||||
// ===========================================
|
||||
// WEITERE HILFS-FUNKTIONEN:
|
||||
// ===========================================
|
||||
|
||||
function count_disposable_domains($blocklist_path = null) {
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
if (!file_exists($blocklist_path)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
return count($domains);
|
||||
}
|
||||
|
||||
function show_blocklist_info($blocklist_path = null) {
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
if (file_exists($blocklist_path)) {
|
||||
$count = count_disposable_domains($blocklist_path);
|
||||
$age_hours = round((time() - filemtime($blocklist_path)) / 3600, 1);
|
||||
|
||||
echo "Blocklist-Info:<br>\n";
|
||||
echo "- Anzahl Domains: $count<br>\n";
|
||||
echo "- Alter: $age_hours Stunden<br>\n";
|
||||
echo "- Datei: $blocklist_path<br>\n";
|
||||
} else {
|
||||
echo "Blocklist-Datei existiert noch nicht.<br>\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Zeige Info über die Blocklist
|
||||
echo "<h3>Blocklist-Status:</h3>\n";
|
||||
show_blocklist_info();
|
||||
?>
|
||||
231
Upload.php
Normal file
@ -0,0 +1,231 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PDF Upload Formular</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.upload-container {
|
||||
background: white;
|
||||
padding: 30px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333;
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.upload-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15px;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.upload-item label {
|
||||
font-weight: bold;
|
||||
margin-right: 15px;
|
||||
min-width: 80px;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.file-input {
|
||||
flex: 1;
|
||||
margin-right: 15px;
|
||||
padding: 8px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.document-type {
|
||||
min-width: 180px;
|
||||
padding: 8px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.submit-container {
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.submit-btn {
|
||||
background-color: #007cba;
|
||||
color: white;
|
||||
padding: 12px 30px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s;
|
||||
}
|
||||
|
||||
.submit-btn:hover {
|
||||
background-color: #005a87;
|
||||
}
|
||||
|
||||
.add-remove-container {
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.add-btn, .remove-btn {
|
||||
background-color: #28a745;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 8px 15px;
|
||||
margin: 0 5px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.remove-btn {
|
||||
background-color: #dc3545;
|
||||
}
|
||||
|
||||
.add-btn:hover {
|
||||
background-color: #218838;
|
||||
}
|
||||
|
||||
.remove-btn:hover {
|
||||
background-color: #c82333;
|
||||
}
|
||||
|
||||
.info-text {
|
||||
text-align: center;
|
||||
color: #666;
|
||||
margin-bottom: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="upload-container">
|
||||
<h2>PDF Dokumente hochladen</h2>
|
||||
<p class="info-text">Laden Sie 1-10 PDF-Dateien hoch und wählen Sie für jede Datei die entsprechende Dokumentenart aus.</p>
|
||||
|
||||
<form id="uploadForm" enctype="multipart/form-data">
|
||||
<div id="uploadItems">
|
||||
<div class="upload-item">
|
||||
<label>Datei 1:</label>
|
||||
<input type="file" name="pdf_file_1" class="file-input" accept=".pdf" required>
|
||||
<select name="doc_type_1" class="document-type" required>
|
||||
<option value="">-- Dokumentenart wählen --</option>
|
||||
<option value="publikation">Publikation</option>
|
||||
<option value="benotung">Benotung</option>
|
||||
<option value="andere_nachweise">Andere Nachweise</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="add-remove-container">
|
||||
<button type="button" class="add-btn" onclick="addUploadItem()">+ Weitere Datei hinzufügen</button>
|
||||
<button type="button" class="remove-btn" onclick="removeUploadItem()">- Letzte Datei entfernen</button>
|
||||
</div>
|
||||
|
||||
<div class="submit-container">
|
||||
<button type="submit" class="submit-btn">Dateien hochladen</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let fileCount = 1;
|
||||
const maxFiles = 10;
|
||||
|
||||
function addUploadItem() {
|
||||
if (fileCount >= maxFiles) {
|
||||
alert('Maximal 10 Dateien können hochgeladen werden.');
|
||||
return;
|
||||
}
|
||||
|
||||
fileCount++;
|
||||
const uploadItems = document.getElementById('uploadItems');
|
||||
|
||||
const newItem = document.createElement('div');
|
||||
newItem.className = 'upload-item';
|
||||
newItem.innerHTML = `
|
||||
<label>Datei ${fileCount}:</label>
|
||||
<input type="file" name="pdf_file_${fileCount}" class="file-input" accept=".pdf">
|
||||
<select name="doc_type_${fileCount}" class="document-type">
|
||||
<option value="">-- Dokumentenart wählen --</option>
|
||||
<option value="publikation">Publikation</option>
|
||||
<option value="benotung">Benotung</option>
|
||||
<option value="andere_nachweise">Andere Nachweise</option>
|
||||
</select>
|
||||
`;
|
||||
|
||||
uploadItems.appendChild(newItem);
|
||||
}
|
||||
|
||||
function removeUploadItem() {
|
||||
if (fileCount <= 1) {
|
||||
alert('Mindestens eine Datei muss vorhanden sein.');
|
||||
return;
|
||||
}
|
||||
|
||||
const uploadItems = document.getElementById('uploadItems');
|
||||
uploadItems.removeChild(uploadItems.lastElementChild);
|
||||
fileCount--;
|
||||
}
|
||||
|
||||
document.getElementById('uploadForm').addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Validierung: Prüfen ob für jede ausgewählte Datei auch eine Dokumentenart gewählt wurde
|
||||
const fileInputs = document.querySelectorAll('input[type="file"]');
|
||||
const selectInputs = document.querySelectorAll('select');
|
||||
let isValid = true;
|
||||
let hasAtLeastOneFile = false;
|
||||
|
||||
for (let i = 0; i < fileInputs.length; i++) {
|
||||
const fileInput = fileInputs[i];
|
||||
const selectInput = selectInputs[i];
|
||||
|
||||
if (fileInput.files.length > 0) {
|
||||
hasAtLeastOneFile = true;
|
||||
if (!selectInput.value) {
|
||||
alert(`Bitte wählen Sie eine Dokumentenart für Datei ${i + 1} aus.`);
|
||||
isValid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasAtLeastOneFile) {
|
||||
alert('Bitte wählen Sie mindestens eine Datei zum Hochladen aus.');
|
||||
isValid = false;
|
||||
}
|
||||
|
||||
if (isValid) {
|
||||
// Hier würden Sie normalerweise die Daten an Ihren Server senden
|
||||
alert('Formular bereit zum Senden! (In der realen Anwendung würden die Dateien jetzt hochgeladen werden)');
|
||||
|
||||
// Beispiel für FormData Erstellung:
|
||||
const formData = new FormData(this);
|
||||
console.log('FormData bereit für Upload:', formData);
|
||||
|
||||
// Hier könnten Sie eine AJAX-Anfrage machen:
|
||||
// fetch('upload.php', { method: 'POST', body: formData })
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
428
checkContractForm.php
Normal file
@ -0,0 +1,428 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>VET Repository - Publikationsvertrag</title>
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
.hrbibb {
|
||||
border-top: 2px solid #007bff;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.validation-message {
|
||||
color: #dc3545;
|
||||
font-size: 0.875em;
|
||||
margin-top: 10px;
|
||||
display: none;
|
||||
}
|
||||
.submit-section {
|
||||
background-color: #f8f9fa;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.invalid-field {
|
||||
border-color: #dc3545 !important;
|
||||
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container mt-4">
|
||||
<h2>VET Repository - Publikationsvertrag</h2>
|
||||
|
||||
<form id="mainForm" novalidate>
|
||||
|
||||
<!-- Erstveröffentlichung Open Access -->
|
||||
<div id="divErstveroeffentlichungOpenAccess" class="ms-3">
|
||||
<div class="pt-3"></div>
|
||||
<hr class="hrbibb">
|
||||
<h5>Erstveröffentlichung Open Access</h5>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="col-12">
|
||||
<div class="row pt-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxBestaetigungCCBY"
|
||||
name="checkBoxBestaetigungCCBY"
|
||||
aria-labelledby="checkBoxBestaetigungCCBYLabel">
|
||||
<label class="form-check-label fw-bold"
|
||||
id="checkBoxBestaetigungCCBYLabel"
|
||||
for="checkBoxBestaetigungCCBY">
|
||||
</label>
|
||||
Ich bestätige, dass ich die <a href="https://www.bibb.de/dokumente/pdf/Publikationsvertrag_CC_BY-SA.pdf" target='_blank' rel='noopener noreferrer'><span class="fw-bold">Vertragsbedingungen </span></a>verstanden habe und diesen zustimme.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkCCBYSA"
|
||||
name="checkCCBYSA"
|
||||
aria-labelledby="ccbysaLabel">
|
||||
<label class="form-check-label fw-bold"
|
||||
id="ccbysaLabel"
|
||||
for="checkCCBYSA">
|
||||
CC BY-SA-Lizenz:
|
||||
</label>
|
||||
Ich möchte die Publikation unter der CC BY-SA-Lizenz veröffentlichen.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zweitveröffentlichung Open Access -->
|
||||
<div id="divZweitveroeffentlichungOpenAccess" class="ms-3">
|
||||
<div class="pt-3"></div>
|
||||
<hr class="hrbibb">
|
||||
<h5>Zweitveröffentlichung Open Access</h5>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="col-12">
|
||||
<div class="row pt-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxBestaetigungCCBYV3"
|
||||
name="checkBoxBestaetigungCCBYV3"
|
||||
aria-labelledby="checkBoxBestaetigungCCBYV3Label">
|
||||
<label class="form-check-label fw-bold"
|
||||
id="checkBoxBestaetigungCCBYV3Label"
|
||||
for="checkBoxBestaetigungCCBYV3">
|
||||
</label>
|
||||
Ich bestätige, dass ich die Publikation im VET Repository zweitveröffentlichen möchte.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p class="fw-bold">Wählen Sie die bereits verwendete CC-Lizenz:</p>
|
||||
<div class="license-group">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBY"
|
||||
value="CC BY">
|
||||
<label class="form-check-label" for="OpenAccessCCBY">
|
||||
<a href="http://creativecommons.org/licenses/by/4.0" target='_blank'>CC BY 4.0 (Namensnennung)</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBYSA"
|
||||
value="CC BY-SA">
|
||||
<label class="form-check-label" for="OpenAccessCCBYSA">
|
||||
<a href="http://creativecommons.org/licenses/by-sa/4.0" target='_blank'>CC BY-SA 4.0 (Namensnennung, Weitergabe unter gleichen Bedingungen)</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBYND"
|
||||
value="CC BY-ND">
|
||||
<label class="form-check-label" for="OpenAccessCCBYND">
|
||||
<a href="http://creativecommons.org/licenses/by-nd/4.0" target='_blank'>CC BY-ND 4.0 (Namensnennung, keine Bearbeitung)</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBYNC"
|
||||
value="CC BY-NC">
|
||||
<label class="form-check-label" for="OpenAccessCCBYNC">
|
||||
<a href="http://creativecommons.org/licenses/by-nc/4.0" target='_blank'>CC BY-NC 4.0 (Namensnennung, keine kommerzielle Nutzung)</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBYNCND"
|
||||
value="CC BY-NC-ND">
|
||||
<label class="form-check-label" for="OpenAccessCCBYNCND">
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0" target='_blank'>CC BY-NC-ND 4.0 (Namensnennung, keine kommerzielle Nutzung, keine Bearbeitung)</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input"
|
||||
type="radio"
|
||||
name="OAlicenseType"
|
||||
id="OpenAccessCCBYNCSA"
|
||||
value="CC BY-NC-SA">
|
||||
<label class="form-check-label" for="OpenAccessCCBYNCSA">
|
||||
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0" target='_blank'>CC BY-NC-SA 4.0 (Namensnennung, keine kommerzielle Nutzung, Weitergabe unter gleichen Bedingungen)</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Allgemeine Bedingungen -->
|
||||
<div id="divCommon" class="ms-3">
|
||||
<div class="pt-3"></div>
|
||||
<hr class="hrbibb">
|
||||
<h5>Allgemeine Bedingungen</h5>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="col-12">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxBerechtigung"
|
||||
name="checkBoxBerechtigung">
|
||||
<label class="form-check-label fw-bold" for="checkBoxBerechtigung">
|
||||
Berechtigung:
|
||||
</label>
|
||||
Ich erkläre, dass ich selbst Autor/-in der Publikation bin bzw. als Mitglied eines Autorenteams auch im Namen meiner Mitautoren die Publikation zur Veröffentlichung einreichen darf.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxBildrechte"
|
||||
name="checkBoxBildrechte">
|
||||
<label class="form-check-label fw-bold" for="checkBoxBildrechte">
|
||||
Bildrechte:
|
||||
</label>
|
||||
Ich bestätige, dass die Rechte für eventuell enthaltene Bilder und Tabellen auch für die Zurverfügungstellung gelten.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxHaftung"
|
||||
name="checkBoxHaftung">
|
||||
<label class="form-check-label fw-bold" for="checkBoxHaftung">
|
||||
Haftung/Mitteilungspflicht:
|
||||
</label>
|
||||
Ich versichere, dass ich zur Veröffentlichung berechtigt bin und keine Rechte Dritter verletzt werden.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input required-field"
|
||||
type="checkbox"
|
||||
id="checkBoxDatenschutz"
|
||||
name="checkBoxDatenschutz">
|
||||
<label class="form-check-label fw-bold" for="checkBoxDatenschutz">
|
||||
Datenschutz:
|
||||
</label>
|
||||
Ich willige ein, dass meine Daten für die Veröffentlichung verarbeitet werden dürfen.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zusätzliche Felder -->
|
||||
<div id="erstVeroeffentlichtSection" class="ms-3">
|
||||
<div class="pt-3"></div>
|
||||
<hr class="hrbibb">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<h5>Erstveröffentlicht</h5>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<textarea rows="2"
|
||||
id="erstVeroeffentlichtInput"
|
||||
class="form-control"
|
||||
placeholder="Bitte geben Sie den Link zum Erstveröffentlichungsort an."
|
||||
aria-label="erstVeroeffentlicht"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="mitteilungSection" class="ms-3">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<h5>Mitteilung</h5>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<textarea rows="2"
|
||||
id="mitteilungInput"
|
||||
class="form-control"
|
||||
placeholder="Möchten Sie uns noch etwas mitteilen?"
|
||||
aria-label="mitteilung"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Section -->
|
||||
<div class="submit-section">
|
||||
<div class="validation-message" id="validationMessage">
|
||||
<strong>Bitte füllen Sie alle erforderlichen Felder aus:</strong>
|
||||
<ul id="missingFields"></ul>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<small class="text-muted">* Alle markierten Felder sind Pflichtfelder</small>
|
||||
</div>
|
||||
<div>
|
||||
<button type="button" id="validateButton" class="btn btn-secondary me-2">Formular prüfen</button>
|
||||
<button type="submit" id="submitButton" class="btn btn-primary" disabled>Absenden</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const form = document.getElementById('mainForm');
|
||||
const submitButton = document.getElementById('submitButton');
|
||||
const validateButton = document.getElementById('validateButton');
|
||||
const validationMessage = document.getElementById('validationMessage');
|
||||
const missingFieldsList = document.getElementById('missingFields');
|
||||
|
||||
// Definiere erforderliche Felder
|
||||
const requiredCheckboxes = [
|
||||
'checkBoxBestaetigungCCBY',
|
||||
'checkCCBYSA',
|
||||
'checkBoxBestaetigungCCBYV3',
|
||||
'checkBoxBerechtigung',
|
||||
'checkBoxBildrechte',
|
||||
'checkBoxHaftung',
|
||||
'checkBoxDatenschutz'
|
||||
];
|
||||
|
||||
const requiredRadioGroups = [
|
||||
'OAlicenseType'
|
||||
];
|
||||
|
||||
// Validierungsfunktion
|
||||
function validateForm() {
|
||||
let isValid = true;
|
||||
let missingFields = [];
|
||||
|
||||
// Entferne vorherige Hervorhebungen
|
||||
document.querySelectorAll('.invalid-field').forEach(field => {
|
||||
field.classList.remove('invalid-field');
|
||||
});
|
||||
|
||||
// Prüfe erforderliche Checkboxen
|
||||
requiredCheckboxes.forEach(checkboxId => {
|
||||
const checkbox = document.getElementById(checkboxId);
|
||||
if (checkbox && !checkbox.checked) {
|
||||
isValid = false;
|
||||
checkbox.classList.add('invalid-field');
|
||||
const label = document.querySelector(`label[for="${checkboxId}"]`);
|
||||
const fieldName = label ? label.textContent.trim() : checkboxId;
|
||||
missingFields.push(fieldName);
|
||||
}
|
||||
});
|
||||
|
||||
// Prüfe erforderliche Radio-Button-Gruppen
|
||||
requiredRadioGroups.forEach(groupName => {
|
||||
const radios = document.querySelectorAll(`input[name="${groupName}"]`);
|
||||
const isGroupSelected = Array.from(radios).some(radio => radio.checked);
|
||||
|
||||
if (!isGroupSelected) {
|
||||
isValid = false;
|
||||
radios.forEach(radio => radio.classList.add('invalid-field'));
|
||||
missingFields.push('CC-Lizenz Auswahl');
|
||||
}
|
||||
});
|
||||
|
||||
// Aktualisiere UI basierend auf Validierungsergebnis
|
||||
if (isValid) {
|
||||
validationMessage.style.display = 'none';
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = 'Absenden';
|
||||
} else {
|
||||
// Zeige Fehlermeldung
|
||||
missingFieldsList.innerHTML = '';
|
||||
missingFields.forEach(field => {
|
||||
const li = document.createElement('li');
|
||||
li.textContent = field;
|
||||
missingFieldsList.appendChild(li);
|
||||
});
|
||||
validationMessage.style.display = 'block';
|
||||
submitButton.disabled = true;
|
||||
}
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
||||
// Event Listeners für Live-Validierung
|
||||
document.querySelectorAll('input[type="checkbox"], input[type="radio"]').forEach(input => {
|
||||
input.addEventListener('change', validateForm);
|
||||
});
|
||||
|
||||
// Validate Button Event
|
||||
validateButton.addEventListener('click', function() {
|
||||
const isValid = validateForm();
|
||||
if (isValid) {
|
||||
alert('✅ Alle erforderlichen Felder sind ausgefüllt. Sie können das Formular jetzt absenden.');
|
||||
} else {
|
||||
// Scroll zu der ersten fehlenden Validierungsmeldung
|
||||
validationMessage.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
||||
}
|
||||
});
|
||||
|
||||
// Form Submit Event
|
||||
form.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (validateForm()) {
|
||||
// Hier würdest du normalerweise die Daten an den Server senden
|
||||
alert('✅ Formular erfolgreich abgesendet!');
|
||||
console.log('Formulardaten:', new FormData(form));
|
||||
} else {
|
||||
alert('❌ Bitte füllen Sie alle erforderlichen Felder aus.');
|
||||
}
|
||||
});
|
||||
|
||||
// Verhindere das Verlassen der Seite bei unvollständigem Formular
|
||||
window.addEventListener('beforeunload', function(e) {
|
||||
if (!validateForm()) {
|
||||
e.preventDefault();
|
||||
e.returnValue = 'Sie haben noch nicht alle erforderlichen Felder ausgefüllt. Möchten Sie die Seite wirklich verlassen?';
|
||||
return e.returnValue;
|
||||
}
|
||||
});
|
||||
|
||||
// Initiale Validierung
|
||||
validateForm();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
131
checkDisposableMails.php
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
// ===========================================
|
||||
// FUNKTIONEN FÜR DISPOSABLE EMAIL CHECK
|
||||
// ===========================================
|
||||
|
||||
function is_disposable_email($email, $blocklist_path = null) {
|
||||
// Standard-Pfad zur lokalen Blocklist-Datei
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
// Lade die Blocklist falls nötig
|
||||
if (!file_exists($blocklist_path)) {
|
||||
download_blocklist($blocklist_path);
|
||||
}
|
||||
|
||||
// Lese alle Domains aus der Datei
|
||||
$disposable_domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
|
||||
// Extrahiere Domain aus der E-Mail-Adresse
|
||||
$email_parts = explode('@', trim($email));
|
||||
if (count($email_parts) != 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$domain = strtolower($email_parts[1]);
|
||||
|
||||
// Prüfe ob Domain in der Liste steht
|
||||
$ret = in_array($domain, $disposable_domains);
|
||||
|
||||
// Check, ob für Domain (mindestens) ein MX-Record existiert
|
||||
if ($ret === false ) {
|
||||
// MX-Record(s) abholen
|
||||
getmxrr($domain, $mx_records, $mx_weight);
|
||||
|
||||
$mxs =[];
|
||||
// Array zusammenstellen für Sortierung
|
||||
for($i=0;$i<count($mx_records);$i++){
|
||||
$mxs[$mx_records[$i]] = $mx_weight[$i];
|
||||
}
|
||||
|
||||
if (count($mxs) == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false ;
|
||||
}
|
||||
|
||||
function download_blocklist($file_path) {
|
||||
// Alternative Liste: $url = 'https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf';
|
||||
$url = 'https://raw.githubusercontent.com/disposable/disposable-email-domains/master/domains.txt';
|
||||
|
||||
// echo "Lade Blocklist herunter...\n";
|
||||
|
||||
$content = file_get_contents($url);
|
||||
if ($content === false) {
|
||||
die("FEHLER: Konnte Blocklist nicht herunterladen von: $url\n");
|
||||
}
|
||||
|
||||
// Zusätzliche lokale Liste der nicht zugelassenen Domains
|
||||
$localContent = '';
|
||||
if (file_exists(__DIR__ . '/localdomains.conf')) {
|
||||
$localContent = file_get_contents(__DIR__ ."/localdomains.conf");
|
||||
}
|
||||
|
||||
// Listen kombinieren
|
||||
$content = $content ."\n" .$localContent;
|
||||
|
||||
if (file_put_contents($file_path, $content) === false) {
|
||||
die("FEHLER: Konnte Blocklist nicht speichern: $file_path\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function update_blocklist_if_needed($blocklist_path = null, $max_age_hours = 1) {
|
||||
if (!$blocklist_path) {
|
||||
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
|
||||
}
|
||||
|
||||
// Prüfe ob Datei existiert und wie alt sie ist
|
||||
if (!file_exists($blocklist_path)) {
|
||||
download_blocklist($blocklist_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
$file_age = time() - filemtime($blocklist_path);
|
||||
$max_age_seconds = $max_age_hours * 3600;
|
||||
|
||||
if ($file_age > $max_age_seconds) {
|
||||
download_blocklist($blocklist_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function filter_disposable_emails($emails, $blocklist_path = null) {
|
||||
$valid_emails = array();
|
||||
|
||||
foreach ($emails as $email) {
|
||||
if (!is_disposable_email($email, $blocklist_path)) {
|
||||
$valid_emails[] = $email;
|
||||
}
|
||||
}
|
||||
|
||||
return $valid_emails;
|
||||
}
|
||||
|
||||
function get_email_domain($email) {
|
||||
$email_parts = explode('@', trim($email));
|
||||
return count($email_parts) === 2 ? strtolower($email_parts[1]) : '';
|
||||
}
|
||||
|
||||
function validate_email_form($email) {
|
||||
|
||||
// Blocklist aktualisieren falls nötig (jede Stunde)
|
||||
$updated = update_blocklist_if_needed();
|
||||
|
||||
if (is_disposable_email($email)) {
|
||||
// echo "Wegwerfadresse\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// echo "Adresse gültig\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
// Zum Testen
|
||||
// validate_email_form("roland.keck@webxxx.de");
|
||||
|
||||
?>
|
||||
187
checkModal.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
// Arrays dekodieren
|
||||
$bibliographicArray = json_decode($_POST['bibliographicArray'] ?? '[]', true);
|
||||
$identificatorArray = json_decode($_POST['identificatorArray'] ?? '[]', true);
|
||||
$typeArray = json_decode($_POST['typeArray'] ?? '[]', true);
|
||||
$subjectArray = json_decode($_POST['subjectArray'] ?? '[]', true);
|
||||
$contractArray = json_decode($_POST['contractArray'] ?? '[]', true);
|
||||
$uploadArray = json_decode($_POST['uploadArray'] ?? '[]', true);
|
||||
|
||||
|
||||
|
||||
// Arrays zusammenfassen
|
||||
$dataArrays = [
|
||||
'Bibliografische Grunddaten' => $bibliographicArray,
|
||||
'Identifikatoren' => $identificatorArray,
|
||||
'Dokumenttyp und weitere Daten' => $typeArray,
|
||||
'Freie Schlagworte' => $subjectArray,
|
||||
'Vertragssektion' => $contractArray,
|
||||
'Dateiupload' => $uploadArray
|
||||
];
|
||||
|
||||
// Feldlabel-Funktion
|
||||
function getFieldLabel($fieldId) {
|
||||
|
||||
include "include/summaryLabels.php" ;
|
||||
|
||||
return $labels[$fieldId] ?? $fieldId;
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- CSS-Styles einbetten -->
|
||||
<style>
|
||||
|
||||
/* Modal-Body Breite anpassen */
|
||||
.modal-body {
|
||||
width: 100% !important;
|
||||
max-width: none !important;
|
||||
min-width: 650px !important;
|
||||
padding: 20px !important;
|
||||
overflow-x: visible !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* Modal-Dialog entsprechend anpassen */
|
||||
.modal-dialog {
|
||||
max-width: 800px !important;
|
||||
width: 90% !important;
|
||||
margin: 1.75rem auto !important;
|
||||
}
|
||||
|
||||
/* Modal-Content sicherstellen */
|
||||
.modal-content {
|
||||
width: 100% !important;
|
||||
min-width: 650px !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
|
||||
.field-container {
|
||||
display: grid;
|
||||
grid-template-columns: 150px 550px;
|
||||
gap: 15px;
|
||||
align-items: center;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
background-color: #f8f9fa;
|
||||
border-radius: 5px;
|
||||
border-left: 4px solid #14416b;
|
||||
width: 100%; /* Volle Breite des Containers nutzen */
|
||||
/*max-width: 580px; */ /* Maximale Breite begrenzen */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.field-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.field-id {
|
||||
font-weight: bold;
|
||||
color: #495057;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.field-value {
|
||||
text-align: left; /* linksbündig */
|
||||
justify-self: start; /* bei Grid zusätzlich für horizontale Ausrichtung */
|
||||
background-color: white;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #dee2e6;
|
||||
font-size: 16px;
|
||||
min-height: 20px;
|
||||
}
|
||||
|
||||
.status-selected {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.status-unselected {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.modal-buttons {
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.btn-correct {
|
||||
background-color: #44910d;
|
||||
color: white;
|
||||
padding: 8px 15px;
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.btn-publish {
|
||||
background-color: #44910d;
|
||||
color: white;
|
||||
padding: 8px 15px;
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
.btn-publish,.btn-correct :hover{
|
||||
border-color:#014701
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<!-- Formatierungslogik in PHP -->
|
||||
<h4 style="text-align: center;">Zusammenfassung</h4>
|
||||
|
||||
<?php foreach ($dataArrays as $sectionName => $sectionData): ?>
|
||||
<?php if (!empty($sectionData)): ?>
|
||||
<h5 style="margin-top: 10px; margin-bottom: 10px; border-bottom: 2px solid #14416b; padding-bottom: 5px;">
|
||||
<?= htmlspecialchars($sectionName) ?>
|
||||
</h5>
|
||||
|
||||
<?php foreach ($sectionData as $field): ?>
|
||||
<?php if(strncmp("uploadHiddenItem", $field['fieldId'], strlen("uploadHiddenItem")) != 0): ?>
|
||||
<div class="field-container">
|
||||
<div class="field-header">
|
||||
<div class="field-id"><?= htmlspecialchars(getFieldLabel($field['fieldId'])) ?></div>
|
||||
<!--
|
||||
<div class="<?//= $field['isSelected'] ? 'status-selected' : 'status-unselected' ?>">
|
||||
<?// = $field['isSelected'] ? 'Ausgewählt' : 'Nicht ausgewählt' ?>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<div class="field-value"><?= htmlspecialchars($field['fieldValue'] ?: '(Leer)') ?></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
|
||||
|
||||
<div class="button-container">
|
||||
<button class="btn-publish secondary" id="closeModalButton" onclick="closeModal()">Eingaben korrigieren</button>
|
||||
<button class="btn-publish" id="sendFinalMailsButton" onclick="finishPublication(); sendFinalMails();">Publikation abschließen</button>
|
||||
</div>
|
||||
620
components/blockUI/blockUI.js
Executable file
@ -0,0 +1,620 @@
|
||||
/*!
|
||||
* jQuery blockUI plugin
|
||||
* Version 2.70.0-2014.11.23
|
||||
* Requires jQuery v1.7 or later
|
||||
*
|
||||
* Examples at: http://malsup.com/jquery/block/
|
||||
* Copyright (c) 2007-2013 M. Alsup
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Thanks to Amir-Hossein Sobhi for some excellent contributions!
|
||||
*/
|
||||
|
||||
;(function() {
|
||||
/*jshint eqeqeq:false curly:false latedef:false */
|
||||
"use strict";
|
||||
|
||||
function setup($) {
|
||||
$.fn._fadeIn = $.fn.fadeIn;
|
||||
|
||||
var noOp = $.noop || function() {};
|
||||
|
||||
// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
|
||||
// confusing userAgent strings on Vista)
|
||||
var msie = /MSIE/.test(navigator.userAgent);
|
||||
var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
|
||||
var mode = document.documentMode || 0;
|
||||
var setExpr = $.isFunction( document.createElement('div').style.setExpression );
|
||||
|
||||
// global $ methods for blocking/unblocking the entire page
|
||||
$.blockUI = function(opts) { install(window, opts); };
|
||||
$.unblockUI = function(opts) { remove(window, opts); };
|
||||
|
||||
// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
|
||||
$.growlUI = function(title, message, timeout, onClose) {
|
||||
var $m = $('<div class="growlUI"></div>');
|
||||
if (title) $m.append('<h1>'+title+'</h1>');
|
||||
if (message) $m.append('<h2>'+message+'</h2>');
|
||||
if (timeout === undefined) timeout = 3000;
|
||||
|
||||
// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
|
||||
var callBlock = function(opts) {
|
||||
opts = opts || {};
|
||||
|
||||
$.blockUI({
|
||||
message: $m,
|
||||
fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
|
||||
fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
|
||||
timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
|
||||
centerY: false,
|
||||
showOverlay: false,
|
||||
onUnblock: onClose,
|
||||
css: $.blockUI.defaults.growlCSS
|
||||
});
|
||||
};
|
||||
|
||||
callBlock();
|
||||
var nonmousedOpacity = $m.css('opacity');
|
||||
$m.mouseover(function() {
|
||||
callBlock({
|
||||
fadeIn: 0,
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
var displayBlock = $('.blockMsg');
|
||||
displayBlock.stop(); // cancel fadeout if it has started
|
||||
displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
|
||||
}).mouseout(function() {
|
||||
$('.blockMsg').fadeOut(1000);
|
||||
});
|
||||
// End konapun additions
|
||||
};
|
||||
|
||||
// plugin method for blocking element content
|
||||
$.fn.block = function(opts) {
|
||||
if ( this[0] === window ) {
|
||||
$.blockUI( opts );
|
||||
return this;
|
||||
}
|
||||
var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||
this.each(function() {
|
||||
var $el = $(this);
|
||||
if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
|
||||
return;
|
||||
$el.unblock({ fadeOut: 0 });
|
||||
});
|
||||
|
||||
return this.each(function() {
|
||||
if ($.css(this,'position') == 'static') {
|
||||
this.style.position = 'relative';
|
||||
$(this).data('blockUI.static', true);
|
||||
}
|
||||
this.style.zoom = 1; // force 'hasLayout' in ie
|
||||
install(this, opts);
|
||||
});
|
||||
};
|
||||
|
||||
// plugin method for unblocking element content
|
||||
$.fn.unblock = function(opts) {
|
||||
if ( this[0] === window ) {
|
||||
$.unblockUI( opts );
|
||||
return this;
|
||||
}
|
||||
return this.each(function() {
|
||||
remove(this, opts);
|
||||
});
|
||||
};
|
||||
|
||||
$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
|
||||
|
||||
// override these in your code to change the default behavior and style
|
||||
$.blockUI.defaults = {
|
||||
// message displayed when blocking (use null for no message)
|
||||
message: '<h1>Please wait...</h1>',
|
||||
|
||||
title: null, // title string; only used when theme == true
|
||||
draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
|
||||
|
||||
theme: false, // set to true to use with jQuery UI themes
|
||||
|
||||
// styles for the message when blocking; if you wish to disable
|
||||
// these and use an external stylesheet then do this in your code:
|
||||
// $.blockUI.defaults.css = {};
|
||||
css: {
|
||||
padding: 0,
|
||||
margin: 0,
|
||||
width: '30%',
|
||||
top: '40%',
|
||||
left: '35%',
|
||||
textAlign: 'center',
|
||||
color: '#000',
|
||||
border: '3px solid #aaa',
|
||||
backgroundColor:'#fff',
|
||||
cursor: 'wait'
|
||||
},
|
||||
|
||||
// minimal style set used when themes are used
|
||||
themedCSS: {
|
||||
width: '30%',
|
||||
top: '40%',
|
||||
left: '35%'
|
||||
},
|
||||
|
||||
// styles for the overlay
|
||||
overlayCSS: {
|
||||
backgroundColor: '#000',
|
||||
opacity: 0.6,
|
||||
cursor: 'wait'
|
||||
},
|
||||
|
||||
// style to replace wait cursor before unblocking to correct issue
|
||||
// of lingering wait cursor
|
||||
cursorReset: 'default',
|
||||
|
||||
// styles applied when using $.growlUI
|
||||
growlCSS: {
|
||||
width: '350px',
|
||||
top: '10px',
|
||||
left: '',
|
||||
right: '10px',
|
||||
border: 'none',
|
||||
padding: '5px',
|
||||
opacity: 0.6,
|
||||
cursor: 'default',
|
||||
color: '#fff',
|
||||
backgroundColor: '#000',
|
||||
'-webkit-border-radius':'10px',
|
||||
'-moz-border-radius': '10px',
|
||||
'border-radius': '10px'
|
||||
},
|
||||
|
||||
// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
|
||||
// (hat tip to Jorge H. N. de Vasconcelos)
|
||||
/*jshint scripturl:true */
|
||||
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
|
||||
|
||||
// force usage of iframe in non-IE browsers (handy for blocking applets)
|
||||
forceIframe: false,
|
||||
|
||||
// z-index for the blocking overlay
|
||||
baseZ: 1000,
|
||||
|
||||
// set these to true to have the message automatically centered
|
||||
centerX: true, // <-- only effects element blocking (page block controlled via css above)
|
||||
centerY: true,
|
||||
|
||||
// allow body element to be stetched in ie6; this makes blocking look better
|
||||
// on "short" pages. disable if you wish to prevent changes to the body height
|
||||
allowBodyStretch: true,
|
||||
|
||||
// enable if you want key and mouse events to be disabled for content that is blocked
|
||||
bindEvents: true,
|
||||
|
||||
// be default blockUI will supress tab navigation from leaving blocking content
|
||||
// (if bindEvents is true)
|
||||
constrainTabKey: true,
|
||||
|
||||
// fadeIn time in millis; set to 0 to disable fadeIn on block
|
||||
fadeIn: 200,
|
||||
|
||||
// fadeOut time in millis; set to 0 to disable fadeOut on unblock
|
||||
fadeOut: 400,
|
||||
|
||||
// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
|
||||
timeout: 0,
|
||||
|
||||
// disable if you don't want to show the overlay
|
||||
showOverlay: true,
|
||||
|
||||
// if true, focus will be placed in the first available input field when
|
||||
// page blocking
|
||||
focusInput: true,
|
||||
|
||||
// elements that can receive focus
|
||||
focusableElements: ':input:enabled:visible',
|
||||
|
||||
// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
|
||||
// no longer needed in 2012
|
||||
// applyPlatformOpacityRules: true,
|
||||
|
||||
// callback method invoked when fadeIn has completed and blocking message is visible
|
||||
onBlock: null,
|
||||
|
||||
// callback method invoked when unblocking has completed; the callback is
|
||||
// passed the element that has been unblocked (which is the window object for page
|
||||
// blocks) and the options that were passed to the unblock call:
|
||||
// onUnblock(element, options)
|
||||
onUnblock: null,
|
||||
|
||||
// callback method invoked when the overlay area is clicked.
|
||||
// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
|
||||
onOverlayClick: null,
|
||||
|
||||
// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
|
||||
quirksmodeOffsetHack: 4,
|
||||
|
||||
// class name of the message block
|
||||
blockMsgClass: 'blockMsg',
|
||||
|
||||
// if it is already blocked, then ignore it (don't unblock and reblock)
|
||||
ignoreIfBlocked: false
|
||||
};
|
||||
|
||||
// private data and functions follow...
|
||||
|
||||
var pageBlock = null;
|
||||
var pageBlockEls = [];
|
||||
|
||||
function install(el, opts) {
|
||||
var css, themedCSS;
|
||||
var full = (el == window);
|
||||
var msg = (opts && opts.message !== undefined ? opts.message : undefined);
|
||||
opts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||
|
||||
if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
|
||||
return;
|
||||
|
||||
opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
|
||||
css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
|
||||
if (opts.onOverlayClick)
|
||||
opts.overlayCSS.cursor = 'pointer';
|
||||
|
||||
themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
|
||||
msg = msg === undefined ? opts.message : msg;
|
||||
|
||||
// remove the current block (if there is one)
|
||||
if (full && pageBlock)
|
||||
remove(window, {fadeOut:0});
|
||||
|
||||
// if an existing element is being used as the blocking content then we capture
|
||||
// its current place in the DOM (and current display style) so we can restore
|
||||
// it when we unblock
|
||||
if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
|
||||
var node = msg.jquery ? msg[0] : msg;
|
||||
var data = {};
|
||||
$(el).data('blockUI.history', data);
|
||||
data.el = node;
|
||||
data.parent = node.parentNode;
|
||||
data.display = node.style.display;
|
||||
data.position = node.style.position;
|
||||
if (data.parent)
|
||||
data.parent.removeChild(node);
|
||||
}
|
||||
|
||||
$(el).data('blockUI.onUnblock', opts.onUnblock);
|
||||
var z = opts.baseZ;
|
||||
|
||||
// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
|
||||
// layer1 is the iframe layer which is used to supress bleed through of underlying content
|
||||
// layer2 is the overlay layer which has opacity and a wait cursor (by default)
|
||||
// layer3 is the message content that is displayed while blocking
|
||||
var lyr1, lyr2, lyr3, s;
|
||||
if (msie || opts.forceIframe)
|
||||
lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
|
||||
else
|
||||
lyr1 = $('<div class="blockUI" style="display:none"></div>');
|
||||
|
||||
if (opts.theme)
|
||||
lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
|
||||
else
|
||||
lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
|
||||
|
||||
if (opts.theme && full) {
|
||||
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
|
||||
if ( opts.title ) {
|
||||
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
|
||||
}
|
||||
s += '<div class="ui-widget-content ui-dialog-content"></div>';
|
||||
s += '</div>';
|
||||
}
|
||||
else if (opts.theme) {
|
||||
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
|
||||
if ( opts.title ) {
|
||||
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
|
||||
}
|
||||
s += '<div class="ui-widget-content ui-dialog-content"></div>';
|
||||
s += '</div>';
|
||||
}
|
||||
else if (full) {
|
||||
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
|
||||
}
|
||||
else {
|
||||
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
|
||||
}
|
||||
lyr3 = $(s);
|
||||
|
||||
// if we have a message, style it
|
||||
if (msg) {
|
||||
if (opts.theme) {
|
||||
lyr3.css(themedCSS);
|
||||
lyr3.addClass('ui-widget-content');
|
||||
}
|
||||
else
|
||||
lyr3.css(css);
|
||||
}
|
||||
|
||||
// style the overlay
|
||||
if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
|
||||
lyr2.css(opts.overlayCSS);
|
||||
lyr2.css('position', full ? 'fixed' : 'absolute');
|
||||
|
||||
// make iframe layer transparent in IE
|
||||
if (msie || opts.forceIframe)
|
||||
lyr1.css('opacity',0.0);
|
||||
|
||||
//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
|
||||
var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
|
||||
$.each(layers, function() {
|
||||
this.appendTo($par);
|
||||
});
|
||||
|
||||
if (opts.theme && opts.draggable && $.fn.draggable) {
|
||||
lyr3.draggable({
|
||||
handle: '.ui-dialog-titlebar',
|
||||
cancel: 'li'
|
||||
});
|
||||
}
|
||||
|
||||
// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
|
||||
var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
|
||||
if (ie6 || expr) {
|
||||
// give body 100% height
|
||||
if (full && opts.allowBodyStretch && $.support.boxModel)
|
||||
$('html,body').css('height','100%');
|
||||
|
||||
// fix ie6 issue when blocked element has a border width
|
||||
if ((ie6 || !$.support.boxModel) && !full) {
|
||||
var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
|
||||
var fixT = t ? '(0 - '+t+')' : 0;
|
||||
var fixL = l ? '(0 - '+l+')' : 0;
|
||||
}
|
||||
|
||||
// simulate fixed position
|
||||
$.each(layers, function(i,o) {
|
||||
var s = o[0].style;
|
||||
s.position = 'absolute';
|
||||
if (i < 2) {
|
||||
if (full)
|
||||
s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
|
||||
else
|
||||
s.setExpression('height','this.parentNode.offsetHeight + "px"');
|
||||
if (full)
|
||||
s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
|
||||
else
|
||||
s.setExpression('width','this.parentNode.offsetWidth + "px"');
|
||||
if (fixL) s.setExpression('left', fixL);
|
||||
if (fixT) s.setExpression('top', fixT);
|
||||
}
|
||||
else if (opts.centerY) {
|
||||
if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
|
||||
s.marginTop = 0;
|
||||
}
|
||||
else if (!opts.centerY && full) {
|
||||
var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
|
||||
var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
|
||||
s.setExpression('top',expression);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// show the message
|
||||
if (msg) {
|
||||
if (opts.theme)
|
||||
lyr3.find('.ui-widget-content').append(msg);
|
||||
else
|
||||
lyr3.append(msg);
|
||||
if (msg.jquery || msg.nodeType)
|
||||
$(msg).show();
|
||||
}
|
||||
|
||||
if ((msie || opts.forceIframe) && opts.showOverlay)
|
||||
lyr1.show(); // opacity is zero
|
||||
if (opts.fadeIn) {
|
||||
var cb = opts.onBlock ? opts.onBlock : noOp;
|
||||
var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
|
||||
var cb2 = msg ? cb : noOp;
|
||||
if (opts.showOverlay)
|
||||
lyr2._fadeIn(opts.fadeIn, cb1);
|
||||
if (msg)
|
||||
lyr3._fadeIn(opts.fadeIn, cb2);
|
||||
}
|
||||
else {
|
||||
if (opts.showOverlay)
|
||||
lyr2.show();
|
||||
if (msg)
|
||||
lyr3.show();
|
||||
if (opts.onBlock)
|
||||
opts.onBlock.bind(lyr3)();
|
||||
}
|
||||
|
||||
// bind key and mouse events
|
||||
bind(1, el, opts);
|
||||
|
||||
if (full) {
|
||||
pageBlock = lyr3[0];
|
||||
pageBlockEls = $(opts.focusableElements,pageBlock);
|
||||
if (opts.focusInput)
|
||||
setTimeout(focus, 20);
|
||||
}
|
||||
else
|
||||
center(lyr3[0], opts.centerX, opts.centerY);
|
||||
|
||||
if (opts.timeout) {
|
||||
// auto-unblock
|
||||
var to = setTimeout(function() {
|
||||
if (full)
|
||||
$.unblockUI(opts);
|
||||
else
|
||||
$(el).unblock(opts);
|
||||
}, opts.timeout);
|
||||
$(el).data('blockUI.timeout', to);
|
||||
}
|
||||
}
|
||||
|
||||
// remove the block
|
||||
function remove(el, opts) {
|
||||
var count;
|
||||
var full = (el == window);
|
||||
var $el = $(el);
|
||||
var data = $el.data('blockUI.history');
|
||||
var to = $el.data('blockUI.timeout');
|
||||
if (to) {
|
||||
clearTimeout(to);
|
||||
$el.removeData('blockUI.timeout');
|
||||
}
|
||||
opts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||
bind(0, el, opts); // unbind events
|
||||
|
||||
if (opts.onUnblock === null) {
|
||||
opts.onUnblock = $el.data('blockUI.onUnblock');
|
||||
$el.removeData('blockUI.onUnblock');
|
||||
}
|
||||
|
||||
var els;
|
||||
if (full) // crazy selector to handle odd field errors in ie6/7
|
||||
els = $('body').children().filter('.blockUI').add('body > .blockUI');
|
||||
else
|
||||
els = $el.find('>.blockUI');
|
||||
|
||||
// fix cursor issue
|
||||
if ( opts.cursorReset ) {
|
||||
if ( els.length > 1 )
|
||||
els[1].style.cursor = opts.cursorReset;
|
||||
if ( els.length > 2 )
|
||||
els[2].style.cursor = opts.cursorReset;
|
||||
}
|
||||
|
||||
if (full)
|
||||
pageBlock = pageBlockEls = null;
|
||||
|
||||
if (opts.fadeOut) {
|
||||
count = els.length;
|
||||
els.stop().fadeOut(opts.fadeOut, function() {
|
||||
if ( --count === 0)
|
||||
reset(els,data,opts,el);
|
||||
});
|
||||
}
|
||||
else
|
||||
reset(els, data, opts, el);
|
||||
}
|
||||
|
||||
// move blocking element back into the DOM where it started
|
||||
function reset(els,data,opts,el) {
|
||||
var $el = $(el);
|
||||
if ( $el.data('blockUI.isBlocked') )
|
||||
return;
|
||||
|
||||
els.each(function(i,o) {
|
||||
// remove via DOM calls so we don't lose event handlers
|
||||
if (this.parentNode)
|
||||
this.parentNode.removeChild(this);
|
||||
});
|
||||
|
||||
if (data && data.el) {
|
||||
data.el.style.display = data.display;
|
||||
data.el.style.position = data.position;
|
||||
data.el.style.cursor = 'default'; // #59
|
||||
if (data.parent)
|
||||
data.parent.appendChild(data.el);
|
||||
$el.removeData('blockUI.history');
|
||||
}
|
||||
|
||||
if ($el.data('blockUI.static')) {
|
||||
$el.css('position', 'static'); // #22
|
||||
}
|
||||
|
||||
if (typeof opts.onUnblock == 'function')
|
||||
opts.onUnblock(el,opts);
|
||||
|
||||
// fix issue in Safari 6 where block artifacts remain until reflow
|
||||
var body = $(document.body), w = body.width(), cssW = body[0].style.width;
|
||||
body.width(w-1).width(w);
|
||||
body[0].style.width = cssW;
|
||||
}
|
||||
|
||||
// bind/unbind the handler
|
||||
function bind(b, el, opts) {
|
||||
var full = el == window, $el = $(el);
|
||||
|
||||
// don't bother unbinding if there is nothing to unbind
|
||||
if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
|
||||
return;
|
||||
|
||||
$el.data('blockUI.isBlocked', b);
|
||||
|
||||
// don't bind events when overlay is not in use or if bindEvents is false
|
||||
if (!full || !opts.bindEvents || (b && !opts.showOverlay))
|
||||
return;
|
||||
|
||||
// bind anchors and inputs for mouse and key events
|
||||
var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
|
||||
if (b)
|
||||
$(document).bind(events, opts, handler);
|
||||
else
|
||||
$(document).unbind(events, handler);
|
||||
|
||||
// former impl...
|
||||
// var $e = $('a,:input');
|
||||
// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
|
||||
}
|
||||
|
||||
// event handler to suppress keyboard/mouse events when blocking
|
||||
function handler(e) {
|
||||
// allow tab navigation (conditionally)
|
||||
if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
|
||||
if (pageBlock && e.data.constrainTabKey) {
|
||||
var els = pageBlockEls;
|
||||
var fwd = !e.shiftKey && e.target === els[els.length-1];
|
||||
var back = e.shiftKey && e.target === els[0];
|
||||
if (fwd || back) {
|
||||
setTimeout(function(){focus(back);},10);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
var opts = e.data;
|
||||
var target = $(e.target);
|
||||
if (target.hasClass('blockOverlay') && opts.onOverlayClick)
|
||||
opts.onOverlayClick(e);
|
||||
|
||||
// allow events within the message content
|
||||
if (target.parents('div.' + opts.blockMsgClass).length > 0)
|
||||
return true;
|
||||
|
||||
// allow events for content that is not being blocked
|
||||
return target.parents().children().filter('div.blockUI').length === 0;
|
||||
}
|
||||
|
||||
function focus(back) {
|
||||
if (!pageBlockEls)
|
||||
return;
|
||||
var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
|
||||
if (e)
|
||||
e.focus();
|
||||
}
|
||||
|
||||
function center(el, x, y) {
|
||||
var p = el.parentNode, s = el.style;
|
||||
var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
|
||||
var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
|
||||
if (x) s.left = l > 0 ? (l+'px') : '0';
|
||||
if (y) s.top = t > 0 ? (t+'px') : '0';
|
||||
}
|
||||
|
||||
function sz(el, p) {
|
||||
return parseInt($.css(el,p),10)||0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*global define:true */
|
||||
if (typeof define === 'function' && define.amd && define.amd.jQuery) {
|
||||
define(['jquery'], setup);
|
||||
} else {
|
||||
setup(jQuery);
|
||||
}
|
||||
|
||||
})();
|
||||
4085
components/bootstrap-5.3.3-dist/css/bootstrap-grid.css
vendored
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap-grid.min.css
vendored
Normal file
4084
components/bootstrap-5.3.3-dist/css/bootstrap-grid.rtl.css
vendored
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap-grid.rtl.min.css
vendored
Normal file
597
components/bootstrap-5.3.3-dist/css/bootstrap-reboot.css
vendored
Normal file
@ -0,0 +1,597 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2024 The Bootstrap Authors
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
:root,
|
||||
[data-bs-theme=light] {
|
||||
--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-black: #000;
|
||||
--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-primary-text-emphasis: #052c65;
|
||||
--bs-secondary-text-emphasis: #2b2f32;
|
||||
--bs-success-text-emphasis: #0a3622;
|
||||
--bs-info-text-emphasis: #055160;
|
||||
--bs-warning-text-emphasis: #664d03;
|
||||
--bs-danger-text-emphasis: #58151c;
|
||||
--bs-light-text-emphasis: #495057;
|
||||
--bs-dark-text-emphasis: #495057;
|
||||
--bs-primary-bg-subtle: #cfe2ff;
|
||||
--bs-secondary-bg-subtle: #e2e3e5;
|
||||
--bs-success-bg-subtle: #d1e7dd;
|
||||
--bs-info-bg-subtle: #cff4fc;
|
||||
--bs-warning-bg-subtle: #fff3cd;
|
||||
--bs-danger-bg-subtle: #f8d7da;
|
||||
--bs-light-bg-subtle: #fcfcfd;
|
||||
--bs-dark-bg-subtle: #ced4da;
|
||||
--bs-primary-border-subtle: #9ec5fe;
|
||||
--bs-secondary-border-subtle: #c4c8cb;
|
||||
--bs-success-border-subtle: #a3cfbb;
|
||||
--bs-info-border-subtle: #9eeaf9;
|
||||
--bs-warning-border-subtle: #ffe69c;
|
||||
--bs-danger-border-subtle: #f1aeb5;
|
||||
--bs-light-border-subtle: #e9ecef;
|
||||
--bs-dark-border-subtle: #adb5bd;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, 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-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg: #fff;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-emphasis-color: #000;
|
||||
--bs-emphasis-color-rgb: 0, 0, 0;
|
||||
--bs-secondary-color: rgba(33, 37, 41, 0.75);
|
||||
--bs-secondary-color-rgb: 33, 37, 41;
|
||||
--bs-secondary-bg: #e9ecef;
|
||||
--bs-secondary-bg-rgb: 233, 236, 239;
|
||||
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
|
||||
--bs-tertiary-color-rgb: 33, 37, 41;
|
||||
--bs-tertiary-bg: #f8f9fa;
|
||||
--bs-tertiary-bg-rgb: 248, 249, 250;
|
||||
--bs-heading-color: inherit;
|
||||
--bs-link-color: #0d6efd;
|
||||
--bs-link-color-rgb: 13, 110, 253;
|
||||
--bs-link-decoration: underline;
|
||||
--bs-link-hover-color: #0a58ca;
|
||||
--bs-link-hover-color-rgb: 10, 88, 202;
|
||||
--bs-code-color: #d63384;
|
||||
--bs-highlight-color: #212529;
|
||||
--bs-highlight-bg: #fff3cd;
|
||||
--bs-border-width: 1px;
|
||||
--bs-border-style: solid;
|
||||
--bs-border-color: #dee2e6;
|
||||
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
|
||||
--bs-border-radius: 0.375rem;
|
||||
--bs-border-radius-sm: 0.25rem;
|
||||
--bs-border-radius-lg: 0.5rem;
|
||||
--bs-border-radius-xl: 1rem;
|
||||
--bs-border-radius-xxl: 2rem;
|
||||
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
|
||||
--bs-border-radius-pill: 50rem;
|
||||
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
||||
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
|
||||
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
|
||||
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
--bs-focus-ring-width: 0.25rem;
|
||||
--bs-focus-ring-opacity: 0.25;
|
||||
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
|
||||
--bs-form-valid-color: #198754;
|
||||
--bs-form-valid-border-color: #198754;
|
||||
--bs-form-invalid-color: #dc3545;
|
||||
--bs-form-invalid-border-color: #dc3545;
|
||||
}
|
||||
|
||||
[data-bs-theme=dark] {
|
||||
color-scheme: dark;
|
||||
--bs-body-color: #dee2e6;
|
||||
--bs-body-color-rgb: 222, 226, 230;
|
||||
--bs-body-bg: #212529;
|
||||
--bs-body-bg-rgb: 33, 37, 41;
|
||||
--bs-emphasis-color: #fff;
|
||||
--bs-emphasis-color-rgb: 255, 255, 255;
|
||||
--bs-secondary-color: rgba(222, 226, 230, 0.75);
|
||||
--bs-secondary-color-rgb: 222, 226, 230;
|
||||
--bs-secondary-bg: #343a40;
|
||||
--bs-secondary-bg-rgb: 52, 58, 64;
|
||||
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
|
||||
--bs-tertiary-color-rgb: 222, 226, 230;
|
||||
--bs-tertiary-bg: #2b3035;
|
||||
--bs-tertiary-bg-rgb: 43, 48, 53;
|
||||
--bs-primary-text-emphasis: #6ea8fe;
|
||||
--bs-secondary-text-emphasis: #a7acb1;
|
||||
--bs-success-text-emphasis: #75b798;
|
||||
--bs-info-text-emphasis: #6edff6;
|
||||
--bs-warning-text-emphasis: #ffda6a;
|
||||
--bs-danger-text-emphasis: #ea868f;
|
||||
--bs-light-text-emphasis: #f8f9fa;
|
||||
--bs-dark-text-emphasis: #dee2e6;
|
||||
--bs-primary-bg-subtle: #031633;
|
||||
--bs-secondary-bg-subtle: #161719;
|
||||
--bs-success-bg-subtle: #051b11;
|
||||
--bs-info-bg-subtle: #032830;
|
||||
--bs-warning-bg-subtle: #332701;
|
||||
--bs-danger-bg-subtle: #2c0b0e;
|
||||
--bs-light-bg-subtle: #343a40;
|
||||
--bs-dark-bg-subtle: #1a1d20;
|
||||
--bs-primary-border-subtle: #084298;
|
||||
--bs-secondary-border-subtle: #41464b;
|
||||
--bs-success-border-subtle: #0f5132;
|
||||
--bs-info-border-subtle: #087990;
|
||||
--bs-warning-border-subtle: #997404;
|
||||
--bs-danger-border-subtle: #842029;
|
||||
--bs-light-border-subtle: #495057;
|
||||
--bs-dark-border-subtle: #343a40;
|
||||
--bs-heading-color: inherit;
|
||||
--bs-link-color: #6ea8fe;
|
||||
--bs-link-hover-color: #8bb9fe;
|
||||
--bs-link-color-rgb: 110, 168, 254;
|
||||
--bs-link-hover-color-rgb: 139, 185, 254;
|
||||
--bs-code-color: #e685b5;
|
||||
--bs-highlight-color: #dee2e6;
|
||||
--bs-highlight-bg: #664d03;
|
||||
--bs-border-color: #495057;
|
||||
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
|
||||
--bs-form-valid-color: #75b798;
|
||||
--bs-form-valid-border-color: #75b798;
|
||||
--bs-form-invalid-color: #ea868f;
|
||||
--bs-form-invalid-border-color: #ea868f;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
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: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
border: 0;
|
||||
border-top: var(--bs-border-width) solid;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
color: var(--bs-heading-color);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.1875em;
|
||||
color: var(--bs-highlight-color);
|
||||
background-color: var(--bs-highlight-bg);
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-code-color);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.1875rem 0.375rem;
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-body-bg);
|
||||
background-color: var(--bs-body-color);
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: var(--bs-secondary-color);
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
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]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]: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: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||
6
components/bootstrap-5.3.3-dist/css/bootstrap-reboot.min.css
vendored
Normal file
594
components/bootstrap-5.3.3-dist/css/bootstrap-reboot.rtl.css
vendored
Normal file
@ -0,0 +1,594 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2024 The Bootstrap Authors
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
:root,
|
||||
[data-bs-theme=light] {
|
||||
--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-black: #000;
|
||||
--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-primary-text-emphasis: #052c65;
|
||||
--bs-secondary-text-emphasis: #2b2f32;
|
||||
--bs-success-text-emphasis: #0a3622;
|
||||
--bs-info-text-emphasis: #055160;
|
||||
--bs-warning-text-emphasis: #664d03;
|
||||
--bs-danger-text-emphasis: #58151c;
|
||||
--bs-light-text-emphasis: #495057;
|
||||
--bs-dark-text-emphasis: #495057;
|
||||
--bs-primary-bg-subtle: #cfe2ff;
|
||||
--bs-secondary-bg-subtle: #e2e3e5;
|
||||
--bs-success-bg-subtle: #d1e7dd;
|
||||
--bs-info-bg-subtle: #cff4fc;
|
||||
--bs-warning-bg-subtle: #fff3cd;
|
||||
--bs-danger-bg-subtle: #f8d7da;
|
||||
--bs-light-bg-subtle: #fcfcfd;
|
||||
--bs-dark-bg-subtle: #ced4da;
|
||||
--bs-primary-border-subtle: #9ec5fe;
|
||||
--bs-secondary-border-subtle: #c4c8cb;
|
||||
--bs-success-border-subtle: #a3cfbb;
|
||||
--bs-info-border-subtle: #9eeaf9;
|
||||
--bs-warning-border-subtle: #ffe69c;
|
||||
--bs-danger-border-subtle: #f1aeb5;
|
||||
--bs-light-border-subtle: #e9ecef;
|
||||
--bs-dark-border-subtle: #adb5bd;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, 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-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg: #fff;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-emphasis-color: #000;
|
||||
--bs-emphasis-color-rgb: 0, 0, 0;
|
||||
--bs-secondary-color: rgba(33, 37, 41, 0.75);
|
||||
--bs-secondary-color-rgb: 33, 37, 41;
|
||||
--bs-secondary-bg: #e9ecef;
|
||||
--bs-secondary-bg-rgb: 233, 236, 239;
|
||||
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
|
||||
--bs-tertiary-color-rgb: 33, 37, 41;
|
||||
--bs-tertiary-bg: #f8f9fa;
|
||||
--bs-tertiary-bg-rgb: 248, 249, 250;
|
||||
--bs-heading-color: inherit;
|
||||
--bs-link-color: #0d6efd;
|
||||
--bs-link-color-rgb: 13, 110, 253;
|
||||
--bs-link-decoration: underline;
|
||||
--bs-link-hover-color: #0a58ca;
|
||||
--bs-link-hover-color-rgb: 10, 88, 202;
|
||||
--bs-code-color: #d63384;
|
||||
--bs-highlight-color: #212529;
|
||||
--bs-highlight-bg: #fff3cd;
|
||||
--bs-border-width: 1px;
|
||||
--bs-border-style: solid;
|
||||
--bs-border-color: #dee2e6;
|
||||
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
|
||||
--bs-border-radius: 0.375rem;
|
||||
--bs-border-radius-sm: 0.25rem;
|
||||
--bs-border-radius-lg: 0.5rem;
|
||||
--bs-border-radius-xl: 1rem;
|
||||
--bs-border-radius-xxl: 2rem;
|
||||
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
|
||||
--bs-border-radius-pill: 50rem;
|
||||
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
||||
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
|
||||
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
|
||||
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
--bs-focus-ring-width: 0.25rem;
|
||||
--bs-focus-ring-opacity: 0.25;
|
||||
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
|
||||
--bs-form-valid-color: #198754;
|
||||
--bs-form-valid-border-color: #198754;
|
||||
--bs-form-invalid-color: #dc3545;
|
||||
--bs-form-invalid-border-color: #dc3545;
|
||||
}
|
||||
|
||||
[data-bs-theme=dark] {
|
||||
color-scheme: dark;
|
||||
--bs-body-color: #dee2e6;
|
||||
--bs-body-color-rgb: 222, 226, 230;
|
||||
--bs-body-bg: #212529;
|
||||
--bs-body-bg-rgb: 33, 37, 41;
|
||||
--bs-emphasis-color: #fff;
|
||||
--bs-emphasis-color-rgb: 255, 255, 255;
|
||||
--bs-secondary-color: rgba(222, 226, 230, 0.75);
|
||||
--bs-secondary-color-rgb: 222, 226, 230;
|
||||
--bs-secondary-bg: #343a40;
|
||||
--bs-secondary-bg-rgb: 52, 58, 64;
|
||||
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
|
||||
--bs-tertiary-color-rgb: 222, 226, 230;
|
||||
--bs-tertiary-bg: #2b3035;
|
||||
--bs-tertiary-bg-rgb: 43, 48, 53;
|
||||
--bs-primary-text-emphasis: #6ea8fe;
|
||||
--bs-secondary-text-emphasis: #a7acb1;
|
||||
--bs-success-text-emphasis: #75b798;
|
||||
--bs-info-text-emphasis: #6edff6;
|
||||
--bs-warning-text-emphasis: #ffda6a;
|
||||
--bs-danger-text-emphasis: #ea868f;
|
||||
--bs-light-text-emphasis: #f8f9fa;
|
||||
--bs-dark-text-emphasis: #dee2e6;
|
||||
--bs-primary-bg-subtle: #031633;
|
||||
--bs-secondary-bg-subtle: #161719;
|
||||
--bs-success-bg-subtle: #051b11;
|
||||
--bs-info-bg-subtle: #032830;
|
||||
--bs-warning-bg-subtle: #332701;
|
||||
--bs-danger-bg-subtle: #2c0b0e;
|
||||
--bs-light-bg-subtle: #343a40;
|
||||
--bs-dark-bg-subtle: #1a1d20;
|
||||
--bs-primary-border-subtle: #084298;
|
||||
--bs-secondary-border-subtle: #41464b;
|
||||
--bs-success-border-subtle: #0f5132;
|
||||
--bs-info-border-subtle: #087990;
|
||||
--bs-warning-border-subtle: #997404;
|
||||
--bs-danger-border-subtle: #842029;
|
||||
--bs-light-border-subtle: #495057;
|
||||
--bs-dark-border-subtle: #343a40;
|
||||
--bs-heading-color: inherit;
|
||||
--bs-link-color: #6ea8fe;
|
||||
--bs-link-hover-color: #8bb9fe;
|
||||
--bs-link-color-rgb: 110, 168, 254;
|
||||
--bs-link-hover-color-rgb: 139, 185, 254;
|
||||
--bs-code-color: #e685b5;
|
||||
--bs-highlight-color: #dee2e6;
|
||||
--bs-highlight-bg: #664d03;
|
||||
--bs-border-color: #495057;
|
||||
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
|
||||
--bs-form-valid-color: #75b798;
|
||||
--bs-form-valid-border-color: #75b798;
|
||||
--bs-form-invalid-color: #ea868f;
|
||||
--bs-form-invalid-border-color: #ea868f;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
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: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
border: 0;
|
||||
border-top: var(--bs-border-width) solid;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
color: var(--bs-heading-color);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
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-right: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.1875em;
|
||||
color: var(--bs-highlight-color);
|
||||
background-color: var(--bs-highlight-bg);
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-code-color);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.1875rem 0.375rem;
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-body-bg);
|
||||
background-color: var(--bs-body-color);
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: var(--bs-secondary-color);
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
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]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]: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: right;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
|
||||
6
components/bootstrap-5.3.3-dist/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
5402
components/bootstrap-5.3.3-dist/css/bootstrap-utilities.css
vendored
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap-utilities.min.css
vendored
Normal file
5393
components/bootstrap-5.3.3-dist/css/bootstrap-utilities.rtl.css
vendored
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
12057
components/bootstrap-5.3.3-dist/css/bootstrap.css
vendored
Normal file
1
components/bootstrap-5.3.3-dist/css/bootstrap.css.map
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap.min.css
vendored
Normal file
12030
components/bootstrap-5.3.3-dist/css/bootstrap.rtl.css
vendored
Normal file
6
components/bootstrap-5.3.3-dist/css/bootstrap.rtl.min.css
vendored
Normal file
6314
components/bootstrap-5.3.3-dist/js/bootstrap.bundle.js
vendored
Normal file
7
components/bootstrap-5.3.3-dist/js/bootstrap.bundle.min.js
vendored
Normal file
4447
components/bootstrap-5.3.3-dist/js/bootstrap.esm.js
vendored
Normal file
1
components/bootstrap-5.3.3-dist/js/bootstrap.esm.js.map
Normal file
7
components/bootstrap-5.3.3-dist/js/bootstrap.esm.min.js
vendored
Normal file
4494
components/bootstrap-5.3.3-dist/js/bootstrap.js
vendored
Normal file
1
components/bootstrap-5.3.3-dist/js/bootstrap.js.map
Normal file
7
components/bootstrap-5.3.3-dist/js/bootstrap.min.js
vendored
Normal file
1
components/bootstrap-5.3.3-dist/js/bootstrap.min.js.map
Normal file
4
components/bootstrap-icons-1.11.3/0-circle-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.012 4.158c1.858 0 2.96-1.582 2.96-3.99V7.84c0-2.426-1.079-3.996-2.936-3.996-1.864 0-2.965 1.588-2.965 3.996v.328c0 2.42 1.09 3.99 2.941 3.99"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 476 B |
4
components/bootstrap-icons-1.11.3/0-circle.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle" viewBox="0 0 16 16">
|
||||
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
4
components/bootstrap-icons-1.11.3/0-square-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 514 B |
4
components/bootstrap-icons-1.11.3/0-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square" viewBox="0 0 16 16">
|
||||
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 579 B |
3
components/bootstrap-icons-1.11.3/1-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M9.283 4.002H7.971L6.072 5.385v1.271l1.834-1.318h.065V12h1.312z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 250 B |
3
components/bootstrap-icons-1.11.3/1-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 279 B |
3
components/bootstrap-icons-1.11.3/1-square-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm7.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 286 B |
4
components/bootstrap-icons-1.11.3/1-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square" viewBox="0 0 16 16">
|
||||
<path d="M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 366 B |
3
components/bootstrap-icons-1.11.3/123.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-123" viewBox="0 0 16 16">
|
||||
<path d="M2.873 11.297V4.142H1.699L0 5.379v1.137l1.64-1.18h.06v5.961zm3.213-5.09v-.063c0-.618.44-1.169 1.196-1.169.676 0 1.174.44 1.174 1.106 0 .624-.42 1.101-.807 1.526L4.99 10.553v.744h4.78v-.99H6.643v-.069L8.41 8.252c.65-.724 1.237-1.332 1.237-2.27C9.646 4.849 8.723 4 7.308 4c-1.573 0-2.36 1.064-2.36 2.15v.057zm6.559 1.883h.786c.823 0 1.374.481 1.379 1.179.01.707-.55 1.216-1.421 1.21-.77-.005-1.326-.419-1.379-.953h-1.095c.042 1.053.938 1.918 2.464 1.918 1.478 0 2.642-.839 2.62-2.144-.02-1.143-.922-1.651-1.551-1.714v-.063c.535-.09 1.347-.66 1.326-1.678-.026-1.053-.933-1.855-2.359-1.845-1.5.005-2.317.88-2.348 1.898h1.116c.032-.498.498-.944 1.206-.944.703 0 1.206.435 1.206 1.07.005.64-.504 1.106-1.2 1.106h-.75z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 854 B |
3
components/bootstrap-icons-1.11.3/2-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M6.646 6.24c0-.691.493-1.306 1.336-1.306.756 0 1.313.492 1.313 1.236 0 .697-.469 1.23-.902 1.705l-2.971 3.293V12h5.344v-1.107H7.268v-.077l1.974-2.22.096-.107c.688-.763 1.287-1.428 1.287-2.43 0-1.266-1.031-2.215-2.613-2.215-1.758 0-2.637 1.19-2.637 2.402v.065h1.271v-.07Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 457 B |
3
components/bootstrap-icons-1.11.3/2-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 477 B |
3
components/bootstrap-icons-1.11.3/2-square-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
4
components/bootstrap-icons-1.11.3/2-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square" viewBox="0 0 16 16">
|
||||
<path d="M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 564 B |
3
components/bootstrap-icons-1.11.3/3-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.082.414c.92 0 1.535.54 1.541 1.318.012.791-.615 1.36-1.588 1.354-.861-.006-1.482-.469-1.54-1.066H5.104c.047 1.177 1.05 2.144 2.754 2.144 1.653 0 2.954-.937 2.93-2.396-.023-1.278-1.031-1.846-1.734-1.916v-.07c.597-.1 1.505-.739 1.482-1.876-.03-1.177-1.043-2.074-2.637-2.062-1.675.006-2.59.984-2.625 2.12h1.248c.036-.556.557-1.054 1.348-1.054.785 0 1.348.486 1.348 1.195.006.715-.563 1.237-1.342 1.237h-.838v1.072h.879Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 607 B |
4
components/bootstrap-icons-1.11.3/3-circle.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle" viewBox="0 0 16 16">
|
||||
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 642 B |
3
components/bootstrap-icons-1.11.3/3-square-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 634 B |
4
components/bootstrap-icons-1.11.3/3-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square" viewBox="0 0 16 16">
|
||||
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 714 B |
3
components/bootstrap-icons-1.11.3/4-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M7.519 5.057c-.886 1.418-1.772 2.838-2.542 4.265v1.12H8.85V12h1.26v-1.559h1.007V9.334H10.11V4.002H8.176zM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 359 B |
4
components/bootstrap-icons-1.11.3/4-circle.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle" viewBox="0 0 16 16">
|
||||
<path d="M7.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 421 B |
4
components/bootstrap-icons-1.11.3/4-square-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 428 B |
4
components/bootstrap-icons-1.11.3/4-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square" viewBox="0 0 16 16">
|
||||
<path d="M7.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 493 B |
3
components/bootstrap-icons-1.11.3/5-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.006 4.158c1.74 0 2.924-1.119 2.924-2.806 0-1.641-1.178-2.584-2.56-2.584-.897 0-1.442.421-1.612.68h-.064l.193-2.344h3.621V4.002H5.791L5.445 8.63h1.149c.193-.358.668-.809 1.435-.809.85 0 1.582.604 1.582 1.57 0 1.085-.779 1.682-1.57 1.682-.697 0-1.389-.31-1.53-1.031H5.276c.065 1.213 1.149 2.115 2.72 2.115Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 495 B |
3
components/bootstrap-icons-1.11.3/5-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8m15 0A8 8 0 1 0 0 8a8 8 0 0 0 16 0m-8.006 4.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 514 B |
3
components/bootstrap-icons-1.11.3/5-square-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 521 B |
4
components/bootstrap-icons-1.11.3/5-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square" viewBox="0 0 16 16">
|
||||
<path d="M7.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 601 B |
3
components/bootstrap-icons-1.11.3/6-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.21 3.855c-1.868 0-3.116 1.395-3.116 4.407 0 1.183.228 2.039.597 2.642.569.926 1.477 1.254 2.409 1.254 1.629 0 2.847-1.013 2.847-2.783 0-1.676-1.254-2.555-2.508-2.555-1.125 0-1.752.61-1.98 1.155h-.082c-.012-1.946.727-3.036 1.805-3.036.802 0 1.213.457 1.312.815h1.29c-.06-.908-.962-1.899-2.573-1.899Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 617 B |
3
components/bootstrap-icons-1.11.3/6-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 640 B |
4
components/bootstrap-icons-1.11.3/6-square-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M8.111 7.863c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm6.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 662 B |
4
components/bootstrap-icons-1.11.3/6-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square" viewBox="0 0 16 16">
|
||||
<path d="M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 727 B |
3
components/bootstrap-icons-1.11.3/7-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.37 5.11h3.972v.07L6.025 12H7.42l3.258-6.85V4.002H5.369v1.107Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 251 B |
3
components/bootstrap-icons-1.11.3/7-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 279 B |
3
components/bootstrap-icons-1.11.3/7-square-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm3.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 286 B |
4
components/bootstrap-icons-1.11.3/7-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square" viewBox="0 0 16 16">
|
||||
<path d="M5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 366 B |
3
components/bootstrap-icons-1.11.3/8-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-5.03 1.803c0-1.248-.943-1.84-1.646-1.992v-.065c.598-.187 1.336-.72 1.336-1.781 0-1.225-1.084-2.121-2.654-2.121s-2.66.896-2.66 2.12c0 1.044.709 1.589 1.33 1.782v.065c-.697.152-1.647.732-1.647 2.003 0 1.39 1.19 2.344 2.953 2.344 1.77 0 2.989-.96 2.989-2.355Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 686 B |
3
components/bootstrap-icons-1.11.3/8-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-5.03 1.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 717 B |
4
components/bootstrap-icons-1.11.3/8-square-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M6.623 6.094c0 .738.586 1.254 1.383 1.254s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23m-.281 3.644c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm8.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 737 B |
4
components/bootstrap-icons-1.11.3/8-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square" viewBox="0 0 16 16">
|
||||
<path d="M10.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 804 B |
3
components/bootstrap-icons-1.11.3/9-circle-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.223 4.146c2.104 0 3.123-1.464 3.123-4.3 0-3.147-1.459-4.014-2.97-4.014-1.63 0-2.871 1.02-2.871 2.73 0 1.706 1.171 2.667 2.566 2.667 1.06 0 1.7-.557 1.934-1.184h.076c.047 1.67-.475 3.023-1.834 3.023-.71 0-1.149-.363-1.248-.72H5.258c.094.908.926 1.798 2.52 1.798Zm.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
3
components/bootstrap-icons-1.11.3/9-circle.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle" viewBox="0 0 16 16">
|
||||
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.223 4.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3m.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 597 B |
4
components/bootstrap-icons-1.11.3/9-square-fill.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square-fill" viewBox="0 0 16 16">
|
||||
<path d="M7.895 8.174c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
|
||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 620 B |
4
components/bootstrap-icons-1.11.3/9-square.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square" viewBox="0 0 16 16">
|
||||
<path d="M7.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3m.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 684 B |
3
components/bootstrap-icons-1.11.3/activity.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-activity" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M6 2a.5.5 0 0 1 .47.33L10 12.036l1.53-4.208A.5.5 0 0 1 12 7.5h3.5a.5.5 0 0 1 0 1h-3.15l-1.88 5.17a.5.5 0 0 1-.94 0L6 3.964 4.47 8.171A.5.5 0 0 1 4 8.5H.5a.5.5 0 0 1 0-1h3.15l1.88-5.17A.5.5 0 0 1 6 2"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 366 B |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.35 4.35 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 687 B |
3
components/bootstrap-icons-1.11.3/airplane-engines.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines" viewBox="0 0 16 16">
|
||||
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.35 4.35 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0M7 3c0-.432.11-.979.322-1.401C7.542 1.159 7.787 1 8 1s.458.158.678.599C8.889 2.02 9 2.569 9 3v4a.5.5 0 0 0 .276.447l5.448 2.724a.5.5 0 0 1 .276.447v.792l-5.418-.903a.5.5 0 0 0-.575.41l-.5 3a.5.5 0 0 0 .14.437l.646.646H6.707l.647-.646a.5.5 0 0 0 .14-.436l-.5-3a.5.5 0 0 0-.576-.411L1 11.41v-.792a.5.5 0 0 1 .276-.447l5.448-2.724A.5.5 0 0 0 7 7z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
3
components/bootstrap-icons-1.11.3/airplane-fill.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-fill" viewBox="0 0 16 16">
|
||||
<path d="M6.428 1.151C6.708.591 7.213 0 8 0s1.292.592 1.572 1.151C9.861 1.73 10 2.431 10 3v3.691l5.17 2.585a1.5 1.5 0 0 1 .83 1.342V12a.5.5 0 0 1-.582.493l-5.507-.918-.375 2.253 1.318 1.318A.5.5 0 0 1 10.5 16h-5a.5.5 0 0 1-.354-.854l1.319-1.318-.376-2.253-5.507.918A.5.5 0 0 1 0 12v-1.382a1.5 1.5 0 0 1 .83-1.342L6 6.691V3c0-.568.14-1.271.428-1.849"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 492 B |