Compare commits
13 Commits
d6d02510f1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c481817e33 | |||
|
|
79b1f37bc7 | ||
| 28e0707076 | |||
|
|
13d0ae62c1 | ||
|
|
bcef80338c | ||
|
|
5db1c28fd8 | ||
| 6020b304a6 | |||
|
|
4739a83d2c | ||
|
|
ae9b9d1efc | ||
|
|
ce01f19404 | ||
| 465e1de59f | |||
|
|
3ad86a4f5f | ||
|
|
ea387f2733 |
6
.env.example
Normal file
@@ -0,0 +1,6 @@
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_NAME=DB
|
||||
DB_USER=USER
|
||||
DB_PASS=PASS
|
||||
DB_CHARSET=utf8
|
||||
21
.gitattributes
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# Forcer LF pour tous les fichiers texte
|
||||
* text eol=lf
|
||||
|
||||
# Forcer explicitement PHP
|
||||
*.php text eol=lf
|
||||
|
||||
# Autres fichiers courants
|
||||
*.js text eol=lf
|
||||
*.css text eol=lf
|
||||
*.html text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.env text eol=lf
|
||||
|
||||
# Images vectorielles
|
||||
*.svg text diff eol=lf
|
||||
|
||||
# Forcer WebP en fichier binaire
|
||||
*.webp binary
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
75
.gitea/workflows/deploy-dev.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
name: Déploiement DEV
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Récupérer le dépôt
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
|
||||
- name: Installer les outils
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y rsync openssh-client
|
||||
|
||||
- name: Configurer SSH Synology
|
||||
env:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.NAS_SSH_KEY }}
|
||||
NAS_HOST: ${{ vars.NAS_HOST }}
|
||||
NAS_PORT: ${{ vars.NAS_PORT }}
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
ssh-keyscan \
|
||||
-p "$NAS_PORT" \
|
||||
"$NAS_HOST" \
|
||||
>> ~/.ssh/known_hosts
|
||||
|
||||
chmod 600 ~/.ssh/known_hosts
|
||||
|
||||
- name: Vérifier la destination DEV
|
||||
env:
|
||||
NAS_HOST: ${{ vars.NAS_HOST }}
|
||||
NAS_PORT: ${{ vars.NAS_PORT }}
|
||||
NAS_USER: ${{ vars.NAS_USER }}
|
||||
NAS_PATH: ${{ vars.NAS_PATH }}
|
||||
run: |
|
||||
ssh \
|
||||
-p "$NAS_PORT" \
|
||||
-i ~/.ssh/id_ed25519 \
|
||||
-o IdentitiesOnly=yes \
|
||||
"$NAS_USER@$NAS_HOST" \
|
||||
"test -d '$NAS_PATH' && test -w '$NAS_PATH'"
|
||||
|
||||
- name: Déployer sur le Synology
|
||||
env:
|
||||
NAS_HOST: ${{ vars.NAS_HOST }}
|
||||
NAS_PORT: ${{ vars.NAS_PORT }}
|
||||
NAS_USER: ${{ vars.NAS_USER }}
|
||||
NAS_PATH: ${{ vars.NAS_PATH }}
|
||||
run: |
|
||||
rsync -rz \
|
||||
--no-perms \
|
||||
--no-owner \
|
||||
--no-group \
|
||||
--omit-dir-times \
|
||||
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r \
|
||||
--exclude=".git/" \
|
||||
--exclude=".gitea/" \
|
||||
--exclude=".env" \
|
||||
--exclude="uploads/" \
|
||||
--exclude="logs/" \
|
||||
--exclude="storage/" \
|
||||
-e "ssh -p $NAS_PORT -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes" \
|
||||
./ \
|
||||
"$NAS_USER@$NAS_HOST:$NAS_PATH/"
|
||||
75
.gitea/workflows/deploy-prod.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
name: Déploiement PROD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Récupérer le dépôt
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
|
||||
- name: Installer les outils
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y rsync openssh-client
|
||||
|
||||
- name: Configurer SSH VPS
|
||||
env:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.VPS_SSH_KEY }}
|
||||
VPS_HOST: ${{ vars.VPS_HOST }}
|
||||
VPS_PORT: ${{ vars.VPS_PORT }}
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
ssh-keyscan \
|
||||
-p "$VPS_PORT" \
|
||||
"$VPS_HOST" \
|
||||
>> ~/.ssh/known_hosts
|
||||
|
||||
chmod 600 ~/.ssh/known_hosts
|
||||
|
||||
- name: Vérifier la destination PROD
|
||||
env:
|
||||
VPS_HOST: ${{ vars.VPS_HOST }}
|
||||
VPS_PORT: ${{ vars.VPS_PORT }}
|
||||
VPS_USER: ${{ vars.VPS_USER }}
|
||||
VPS_PATH: ${{ vars.VPS_PATH }}
|
||||
run: |
|
||||
ssh \
|
||||
-p "$VPS_PORT" \
|
||||
-i ~/.ssh/id_ed25519 \
|
||||
-o IdentitiesOnly=yes \
|
||||
"$VPS_USER@$VPS_HOST" \
|
||||
"test -d '$VPS_PATH' && test -w '$VPS_PATH'"
|
||||
|
||||
- name: Déployer sur le VPS
|
||||
env:
|
||||
VPS_HOST: ${{ vars.VPS_HOST }}
|
||||
VPS_PORT: ${{ vars.VPS_PORT }}
|
||||
VPS_USER: ${{ vars.VPS_USER }}
|
||||
VPS_PATH: ${{ vars.VPS_PATH }}
|
||||
run: |
|
||||
rsync -rz \
|
||||
--no-perms \
|
||||
--no-owner \
|
||||
--no-group \
|
||||
--omit-dir-times \
|
||||
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r \
|
||||
--exclude=".git/" \
|
||||
--exclude=".gitea/" \
|
||||
--exclude=".env" \
|
||||
--exclude="uploads/" \
|
||||
--exclude="logs/" \
|
||||
--exclude="storage/" \
|
||||
-e "ssh -p $VPS_PORT -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes" \
|
||||
./ \
|
||||
"$VPS_USER@$VPS_HOST:$VPS_PATH/"
|
||||
113
.gitignore
vendored
@@ -1,4 +1,111 @@
|
||||
Thumbs.db
|
||||
# ----------------------
|
||||
# Personnalisé / PHP MVC
|
||||
# ----------------------
|
||||
# **/module/
|
||||
**/.env
|
||||
**/*.local
|
||||
**/*.config
|
||||
**/config/database.php
|
||||
**/documents
|
||||
**/Libs
|
||||
|
||||
# ----------------------
|
||||
# Node.js
|
||||
# ----------------------
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
# ----------------------
|
||||
# Python
|
||||
# ----------------------
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.pyo
|
||||
*.pyd
|
||||
env/
|
||||
venv/
|
||||
*.egg-info/
|
||||
|
||||
# ----------------------
|
||||
# Java
|
||||
# ----------------------
|
||||
*.class
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
target/
|
||||
.idea/
|
||||
*.iml
|
||||
|
||||
# ----------------------
|
||||
# Visual Studio
|
||||
# ----------------------
|
||||
.vs/
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# ----------------------
|
||||
# macOS
|
||||
# ----------------------
|
||||
.DS_Store
|
||||
/module
|
||||
config/connexion_sql.php
|
||||
|
||||
# ----------------------
|
||||
# Windows
|
||||
# ----------------------
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
Desktop.ini
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# ----------------------
|
||||
# Logs
|
||||
# ----------------------
|
||||
*.log
|
||||
|
||||
# ----------------------
|
||||
# IDE-specific files
|
||||
# ----------------------
|
||||
.idea/
|
||||
.vscode/
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
|
||||
# ----------------------
|
||||
# Other temporary / backup files
|
||||
# ----------------------
|
||||
*.bak
|
||||
*.tmp
|
||||
*.swp
|
||||
*.orig
|
||||
*.diff
|
||||
*.patch
|
||||
*.sqlite
|
||||
*.db
|
||||
*.tar.gz
|
||||
*.zip
|
||||
|
||||
# ----------------------
|
||||
# Documentation
|
||||
# ----------------------
|
||||
*.pdf
|
||||
*.docx
|
||||
|
||||
# ----------------------
|
||||
# Images
|
||||
# ----------------------
|
||||
# *.png
|
||||
# *.jpg
|
||||
# *.jpeg
|
||||
*.gif
|
||||
|
||||
# ----------------------
|
||||
# Output / build directories
|
||||
# ----------------------
|
||||
# dist/
|
||||
build/
|
||||
out/
|
||||
|
||||
@@ -1,43 +1,48 @@
|
||||
<?php
|
||||
// Connexion à la base de données
|
||||
try
|
||||
{
|
||||
$bdd = new PDO('mysql:host=nasccb:3307;dbname=CARIA', 'christian', 'fYUYWc5rSyC!',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
|
||||
$env = parse_ini_file(__DIR__ . '/../.env');
|
||||
if ($env === false) { die('Impossible de charger le fichier .env');}
|
||||
|
||||
try {
|
||||
$bdd = new PDO(
|
||||
sprintf('mysql:host=%s;port=%s;dbname=%s;charset=%s', $env['DB_HOST'], $env['DB_PORT'], $env['DB_NAME'], $env['DB_CHARSET']),
|
||||
$env['DB_USER'], $env['DB_PASS'],
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
die('Erreur : ' . $e->getMessage());
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
die('Erreur : '.$e->getMessage());
|
||||
}
|
||||
# Constantes
|
||||
|
||||
define('VISITEUR',1);
|
||||
define('INSCRIT',2);
|
||||
define('MODO',3);
|
||||
define('ADMIN',4);
|
||||
|
||||
define('ERR_IS_CO','Vous ne pouvez pas accéder à cette page si vous n\'êtes pas connecté');
|
||||
|
||||
session_start();
|
||||
# Connexion et initialisation des variables
|
||||
|
||||
$lvl_session = isset($_SESSION['privilege_session']) ? (int)$_SESSION['privilege_session'] : 1;
|
||||
$id_session = isset($_SESSION['id_session']) ? (int)$_SESSION['id_session'] : 0;
|
||||
$pseudo_session = isset($_SESSION['pseudo_session']) ? $_SESSION['pseudo_session'] : '';
|
||||
|
||||
function verifierAcces($min_privilege_requis) {
|
||||
// Vérifier si l'utilisateur est connecté
|
||||
function verifierAcces($min_privilege_requis)
|
||||
{
|
||||
if (!isset($_SESSION['id_session'])) {
|
||||
// Afficher la page d'erreur en incluant le fichier de vue
|
||||
$message = "Vous devez être connecté pour accéder à cette page.";
|
||||
include 'erreur.php';
|
||||
exit(); // Arrêter l'exécution du script après affichage de l'erreur
|
||||
exit();
|
||||
}
|
||||
|
||||
// Vérifier le privilège de l'utilisateur
|
||||
$privilege_utilisateur = isset($_SESSION['privilege_session']) ? (int)$_SESSION['privilege_session'] : VISITEUR;
|
||||
|
||||
// Vérifier si le privilège de l'utilisateur est suffisant pour accéder à la page
|
||||
$privilege_utilisateur = isset($_SESSION['privilege_session'])
|
||||
? (int)$_SESSION['privilege_session']
|
||||
: VISITEUR;
|
||||
if ($privilege_utilisateur < $min_privilege_requis) {
|
||||
// Afficher la page d'erreur en incluant le fichier de vue
|
||||
$message = "Vous n'avez pas les droits d'accès nécessaires pour accéder à cette page.";
|
||||
include 'erreur.php';
|
||||
exit(); // Arrêter l'exécution du script après affichage de l'erreur
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 10 KiB |
BIN
config/images/favicon.webp
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 10 KiB |
BIN
config/images/logo.webp
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
images/avatars/admccb/img_user.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
images/avatars/utilisateur1/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur10/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur11/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur12/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur13/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur14/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur15/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur16/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur17/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur18/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur19/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur2/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur20/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur3/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur4/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur5/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur6/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur7/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur8/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/avatars/utilisateur9/img_user.jpg
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
@@ -50,3 +50,4 @@
|
||||
{"id":"1","latitude":"48.6779999","longitude":"2.3875904","datetime":"18-05-2024 00.49"}
|
||||
{"id":"1","latitude":"48.8184344","longitude":"2.2759596","datetime":"19-06-2024 10.20"}
|
||||
{"id":"1","latitude":"48.6757095","longitude":"2.3862128","datetime":"20-06-2024 09.50"}
|
||||
{"id":"1","latitude":"48.7864707","longitude":"2.3255429","datetime":"06-09-2024 14.36"}
|
||||
|
||||
1293
module/fullcalendar-3.9.0/fullcalendar.css
Normal file
15010
module/fullcalendar-3.9.0/fullcalendar.js
Normal file
5
module/fullcalendar-3.9.0/fullcalendar.min.css
vendored
Normal file
12
module/fullcalendar-3.9.0/fullcalendar.min.js
vendored
Normal file
176
module/fullcalendar-3.9.0/fullcalendar.print.css
Normal file
@@ -0,0 +1,176 @@
|
||||
/*!
|
||||
* FullCalendar v3.9.0
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*/
|
||||
/*!
|
||||
* FullCalendar v3.9.0 Print Stylesheet
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*/
|
||||
/*
|
||||
* Include this stylesheet on your page to get a more printer-friendly calendar.
|
||||
* When including this stylesheet, use the media='print' attribute of the <link> tag.
|
||||
* Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
|
||||
*/
|
||||
.fc {
|
||||
max-width: 100% !important; }
|
||||
|
||||
/* Global Event Restyling
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-event {
|
||||
background: #fff !important;
|
||||
color: #000 !important;
|
||||
page-break-inside: avoid; }
|
||||
|
||||
.fc-event .fc-resizer {
|
||||
display: none; }
|
||||
|
||||
/* Table & Day-Row Restyling
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc th,
|
||||
.fc td,
|
||||
.fc hr,
|
||||
.fc thead,
|
||||
.fc tbody,
|
||||
.fc-row {
|
||||
border-color: #ccc !important;
|
||||
background: #fff !important; }
|
||||
|
||||
/* kill the overlaid, absolutely-positioned components */
|
||||
/* common... */
|
||||
.fc-bg,
|
||||
.fc-bgevent-skeleton,
|
||||
.fc-highlight-skeleton,
|
||||
.fc-helper-skeleton,
|
||||
.fc-bgevent-container,
|
||||
.fc-business-container,
|
||||
.fc-highlight-container,
|
||||
.fc-helper-container {
|
||||
display: none; }
|
||||
|
||||
/* don't force a min-height on rows (for DayGrid) */
|
||||
.fc tbody .fc-row {
|
||||
height: auto !important;
|
||||
/* undo height that JS set in distributeHeight */
|
||||
min-height: 0 !important;
|
||||
/* undo the min-height from each view's specific stylesheet */ }
|
||||
|
||||
.fc tbody .fc-row .fc-content-skeleton {
|
||||
position: static;
|
||||
/* undo .fc-rigid */
|
||||
padding-bottom: 0 !important;
|
||||
/* use a more border-friendly method for this... */ }
|
||||
|
||||
.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td {
|
||||
/* only works in newer browsers */
|
||||
padding-bottom: 1em;
|
||||
/* ...gives space within the skeleton. also ensures min height in a way */ }
|
||||
|
||||
.fc tbody .fc-row .fc-content-skeleton table {
|
||||
/* provides a min-height for the row, but only effective for IE, which exaggerates this value,
|
||||
making it look more like 3em. for other browers, it will already be this tall */
|
||||
height: 1em; }
|
||||
|
||||
/* Undo month-view event limiting. Display all events and hide the "more" links
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-more-cell,
|
||||
.fc-more {
|
||||
display: none !important; }
|
||||
|
||||
.fc tr.fc-limited {
|
||||
display: table-row !important; }
|
||||
|
||||
.fc td.fc-limited {
|
||||
display: table-cell !important; }
|
||||
|
||||
.fc-popover {
|
||||
display: none;
|
||||
/* never display the "more.." popover in print mode */ }
|
||||
|
||||
/* TimeGrid Restyling
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
/* undo the min-height 100% trick used to fill the container's height */
|
||||
.fc-time-grid {
|
||||
min-height: 0 !important; }
|
||||
|
||||
/* don't display the side axis at all ("all-day" and time cells) */
|
||||
.fc-agenda-view .fc-axis {
|
||||
display: none; }
|
||||
|
||||
/* don't display the horizontal lines */
|
||||
.fc-slats,
|
||||
.fc-time-grid hr {
|
||||
/* this hr is used when height is underused and needs to be filled */
|
||||
display: none !important;
|
||||
/* important overrides inline declaration */ }
|
||||
|
||||
/* let the container that holds the events be naturally positioned and create real height */
|
||||
.fc-time-grid .fc-content-skeleton {
|
||||
position: static; }
|
||||
|
||||
/* in case there are no events, we still want some height */
|
||||
.fc-time-grid .fc-content-skeleton table {
|
||||
height: 4em; }
|
||||
|
||||
/* kill the horizontal spacing made by the event container. event margins will be done below */
|
||||
.fc-time-grid .fc-event-container {
|
||||
margin: 0 !important; }
|
||||
|
||||
/* TimeGrid *Event* Restyling
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
/* naturally position events, vertically stacking them */
|
||||
.fc-time-grid .fc-event {
|
||||
position: static !important;
|
||||
margin: 3px 2px !important; }
|
||||
|
||||
/* for events that continue to a future day, give the bottom border back */
|
||||
.fc-time-grid .fc-event.fc-not-end {
|
||||
border-bottom-width: 1px !important; }
|
||||
|
||||
/* indicate the event continues via "..." text */
|
||||
.fc-time-grid .fc-event.fc-not-end:after {
|
||||
content: "..."; }
|
||||
|
||||
/* for events that are continuations from previous days, give the top border back */
|
||||
.fc-time-grid .fc-event.fc-not-start {
|
||||
border-top-width: 1px !important; }
|
||||
|
||||
/* indicate the event is a continuation via "..." text */
|
||||
.fc-time-grid .fc-event.fc-not-start:before {
|
||||
content: "..."; }
|
||||
|
||||
/* time */
|
||||
/* undo a previous declaration and let the time text span to a second line */
|
||||
.fc-time-grid .fc-event .fc-time {
|
||||
white-space: normal !important; }
|
||||
|
||||
/* hide the the time that is normally displayed... */
|
||||
.fc-time-grid .fc-event .fc-time span {
|
||||
display: none; }
|
||||
|
||||
/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */
|
||||
.fc-time-grid .fc-event .fc-time:after {
|
||||
content: attr(data-full); }
|
||||
|
||||
/* Vertical Scroller & Containers
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
/* kill the scrollbars and allow natural height */
|
||||
.fc-scroller,
|
||||
.fc-day-grid-container,
|
||||
.fc-time-grid-container {
|
||||
/* */
|
||||
overflow: visible !important;
|
||||
height: auto !important; }
|
||||
|
||||
/* kill the horizontal border/padding used to compensate for scrollbars */
|
||||
.fc-row {
|
||||
border: 0 !important;
|
||||
margin: 0 !important; }
|
||||
|
||||
/* Button Controls
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-button-group,
|
||||
.fc button {
|
||||
display: none;
|
||||
/* don't display any button-related controls */ }
|
||||
9
module/fullcalendar-3.9.0/fullcalendar.print.min.css
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* FullCalendar v3.9.0
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*//*!
|
||||
* FullCalendar v3.9.0 Print Stylesheet
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*/.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-agenda-view .fc-axis,.fc-popover{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}
|
||||
324
module/fullcalendar-3.9.0/gcal.js
Normal file
@@ -0,0 +1,324 @@
|
||||
/*!
|
||||
* FullCalendar v3.9.0
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*/
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if(typeof exports === 'object' && typeof module === 'object')
|
||||
module.exports = factory(require("fullcalendar"), require("jquery"));
|
||||
else if(typeof define === 'function' && define.amd)
|
||||
define(["fullcalendar", "jquery"], factory);
|
||||
else if(typeof exports === 'object')
|
||||
factory(require("fullcalendar"), require("jquery"));
|
||||
else
|
||||
factory(root["FullCalendar"], root["jQuery"]);
|
||||
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {
|
||||
return /******/ (function(modules) { // webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if(installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
/******/ configurable: false,
|
||||
/******/ enumerable: true,
|
||||
/******/ get: getter
|
||||
/******/ });
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function(module) {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ function getDefault() { return module['default']; } :
|
||||
/******/ function getModuleExports() { return module; };
|
||||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__(__webpack_require__.s = 266);
|
||||
/******/ })
|
||||
/************************************************************************/
|
||||
/******/ ({
|
||||
|
||||
/***/ 1:
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 2:
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
/*
|
||||
derived from:
|
||||
https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js
|
||||
|
||||
only include the helpers we need, to keep down filesize
|
||||
*/
|
||||
var extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b)
|
||||
if (b.hasOwnProperty(p))
|
||||
d[p] = b[p]; };
|
||||
exports.__extends = function (d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 266:
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var exportHooks = __webpack_require__(1);
|
||||
var GcalEventSource_1 = __webpack_require__(267);
|
||||
exportHooks.EventSourceParser.registerClass(GcalEventSource_1.default);
|
||||
exportHooks.GcalEventSource = GcalEventSource_1.default;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 267:
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var tslib_1 = __webpack_require__(2);
|
||||
var $ = __webpack_require__(3);
|
||||
var fullcalendar_1 = __webpack_require__(1);
|
||||
var GcalEventSource = /** @class */ (function (_super) {
|
||||
tslib_1.__extends(GcalEventSource, _super);
|
||||
function GcalEventSource() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
GcalEventSource.parse = function (rawInput, calendar) {
|
||||
var rawProps;
|
||||
if (typeof rawInput === 'object') {
|
||||
rawProps = rawInput;
|
||||
}
|
||||
else if (typeof rawInput === 'string') {
|
||||
rawProps = { url: rawInput }; // url will be parsed with parseGoogleCalendarId
|
||||
}
|
||||
if (rawProps) {
|
||||
return fullcalendar_1.EventSource.parse.call(this, rawProps, calendar);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
GcalEventSource.prototype.fetch = function (start, end, timezone) {
|
||||
var _this = this;
|
||||
var url = this.buildUrl();
|
||||
var requestParams = this.buildRequestParams(start, end, timezone);
|
||||
var ajaxSettings = this.ajaxSettings || {};
|
||||
var onSuccess = ajaxSettings.success;
|
||||
if (!requestParams) {
|
||||
return fullcalendar_1.Promise.reject();
|
||||
}
|
||||
this.calendar.pushLoading();
|
||||
return fullcalendar_1.Promise.construct(function (onResolve, onReject) {
|
||||
$.ajax($.extend({}, // destination
|
||||
fullcalendar_1.JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {
|
||||
url: url,
|
||||
data: requestParams,
|
||||
success: function (responseData, status, xhr) {
|
||||
var rawEventDefs;
|
||||
var successRes;
|
||||
_this.calendar.popLoading();
|
||||
if (responseData.error) {
|
||||
_this.reportError('Google Calendar API: ' + responseData.error.message, responseData.error.errors);
|
||||
onReject();
|
||||
}
|
||||
else if (responseData.items) {
|
||||
rawEventDefs = _this.gcalItemsToRawEventDefs(responseData.items, requestParams.timeZone);
|
||||
successRes = fullcalendar_1.applyAll(onSuccess, _this, [responseData, status, xhr]); // passthru
|
||||
if ($.isArray(successRes)) {
|
||||
rawEventDefs = successRes;
|
||||
}
|
||||
onResolve(_this.parseEventDefs(rawEventDefs));
|
||||
}
|
||||
},
|
||||
error: function (xhr, statusText, errorThrown) {
|
||||
_this.reportError('Google Calendar network failure: ' + statusText, [xhr, errorThrown]);
|
||||
_this.calendar.popLoading();
|
||||
onReject();
|
||||
}
|
||||
}));
|
||||
});
|
||||
};
|
||||
GcalEventSource.prototype.gcalItemsToRawEventDefs = function (items, gcalTimezone) {
|
||||
var _this = this;
|
||||
return items.map(function (item) {
|
||||
return _this.gcalItemToRawEventDef(item, gcalTimezone);
|
||||
});
|
||||
};
|
||||
GcalEventSource.prototype.gcalItemToRawEventDef = function (item, gcalTimezone) {
|
||||
var url = item.htmlLink || null;
|
||||
// make the URLs for each event show times in the correct timezone
|
||||
if (url && gcalTimezone) {
|
||||
url = injectQsComponent(url, 'ctz=' + gcalTimezone);
|
||||
}
|
||||
return {
|
||||
id: item.id,
|
||||
title: item.summary,
|
||||
start: item.start.dateTime || item.start.date,
|
||||
end: item.end.dateTime || item.end.date,
|
||||
url: url,
|
||||
location: item.location,
|
||||
description: item.description
|
||||
};
|
||||
};
|
||||
GcalEventSource.prototype.buildUrl = function () {
|
||||
return GcalEventSource.API_BASE + '/' +
|
||||
encodeURIComponent(this.googleCalendarId) +
|
||||
'/events?callback=?'; // jsonp
|
||||
};
|
||||
GcalEventSource.prototype.buildRequestParams = function (start, end, timezone) {
|
||||
var apiKey = this.googleCalendarApiKey || this.calendar.opt('googleCalendarApiKey');
|
||||
var params;
|
||||
if (!apiKey) {
|
||||
this.reportError('Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/');
|
||||
return null;
|
||||
}
|
||||
// The API expects an ISO8601 datetime with a time and timezone part.
|
||||
// Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each
|
||||
// side, guaranteeing we will receive all events in the desired range, albeit a superset.
|
||||
// .utc() will set a zone and give it a 00:00:00 time.
|
||||
if (!start.hasZone()) {
|
||||
start = start.clone().utc().add(-1, 'day');
|
||||
}
|
||||
if (!end.hasZone()) {
|
||||
end = end.clone().utc().add(1, 'day');
|
||||
}
|
||||
params = $.extend(this.ajaxSettings.data || {}, {
|
||||
key: apiKey,
|
||||
timeMin: start.format(),
|
||||
timeMax: end.format(),
|
||||
singleEvents: true,
|
||||
maxResults: 9999
|
||||
});
|
||||
if (timezone && timezone !== 'local') {
|
||||
// when sending timezone names to Google, only accepts underscores, not spaces
|
||||
params.timeZone = timezone.replace(' ', '_');
|
||||
}
|
||||
return params;
|
||||
};
|
||||
GcalEventSource.prototype.reportError = function (message, apiErrorObjs) {
|
||||
var calendar = this.calendar;
|
||||
var calendarOnError = calendar.opt('googleCalendarError');
|
||||
var errorObjs = apiErrorObjs || [{ message: message }]; // to be passed into error handlers
|
||||
if (this.googleCalendarError) {
|
||||
this.googleCalendarError.apply(calendar, errorObjs);
|
||||
}
|
||||
if (calendarOnError) {
|
||||
calendarOnError.apply(calendar, errorObjs);
|
||||
}
|
||||
// print error to debug console
|
||||
fullcalendar_1.warn.apply(null, [message].concat(apiErrorObjs || []));
|
||||
};
|
||||
GcalEventSource.prototype.getPrimitive = function () {
|
||||
return this.googleCalendarId;
|
||||
};
|
||||
GcalEventSource.prototype.applyManualStandardProps = function (rawProps) {
|
||||
var superSuccess = fullcalendar_1.EventSource.prototype.applyManualStandardProps.apply(this, arguments);
|
||||
var googleCalendarId = rawProps.googleCalendarId;
|
||||
if (googleCalendarId == null && rawProps.url) {
|
||||
googleCalendarId = parseGoogleCalendarId(rawProps.url);
|
||||
}
|
||||
if (googleCalendarId != null) {
|
||||
this.googleCalendarId = googleCalendarId;
|
||||
return superSuccess;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
GcalEventSource.prototype.applyMiscProps = function (rawProps) {
|
||||
if (!this.ajaxSettings) {
|
||||
this.ajaxSettings = {};
|
||||
}
|
||||
$.extend(this.ajaxSettings, rawProps);
|
||||
};
|
||||
GcalEventSource.API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
|
||||
return GcalEventSource;
|
||||
}(fullcalendar_1.EventSource));
|
||||
exports.default = GcalEventSource;
|
||||
GcalEventSource.defineStandardProps({
|
||||
// manually process...
|
||||
url: false,
|
||||
googleCalendarId: false,
|
||||
// automatically transfer...
|
||||
googleCalendarApiKey: true,
|
||||
googleCalendarError: true
|
||||
});
|
||||
function parseGoogleCalendarId(url) {
|
||||
var match;
|
||||
// detect if the ID was specified as a single string.
|
||||
// will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
|
||||
if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
|
||||
return url;
|
||||
}
|
||||
else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
|
||||
(match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {
|
||||
return decodeURIComponent(match[1]);
|
||||
}
|
||||
}
|
||||
// Injects a string like "arg=value" into the querystring of a URL
|
||||
function injectQsComponent(url, component) {
|
||||
// inject it after the querystring but before the fragment
|
||||
return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {
|
||||
return (qs ? qs + '&' : '?') + component + hash;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 3:
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
});
|
||||
6
module/fullcalendar-3.9.0/gcal.min.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* FullCalendar v3.9.0
|
||||
* Docs & License: https://fullcalendar.io/
|
||||
* (c) 2018 Adam Shaw
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("fullcalendar"),require("jquery")):"function"==typeof define&&define.amd?define(["fullcalendar","jquery"],t):"object"==typeof exports?t(require("fullcalendar"),require("jquery")):t(e.FullCalendar,e.jQuery)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=266)}({1:function(t,r){t.exports=e},2:function(e,t){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};t.__extends=function(e,t){function o(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}},266:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),n=r(267);o.EventSourceParser.registerClass(n.default),o.GcalEventSource=n.default},267:function(e,t,r){function o(e){var t;return/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(e)?e:(t=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(e))||(t=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(e))?decodeURIComponent(t[1]):void 0}function n(e,t){return e.replace(/(\?.*?)?(#|$)/,function(e,r,o){return(r?r+"&":"?")+t+o})}Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),l=r(3),i=r(1),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return a.__extends(t,e),t.parse=function(e,t){var r;return"object"==typeof e?r=e:"string"==typeof e&&(r={url:e}),!!r&&i.EventSource.parse.call(this,r,t)},t.prototype.fetch=function(e,t,r){var o=this,n=this.buildUrl(),a=this.buildRequestParams(e,t,r),u=this.ajaxSettings||{},c=u.success;return a?(this.calendar.pushLoading(),i.Promise.construct(function(e,t){l.ajax(l.extend({},i.JsonFeedEventSource.AJAX_DEFAULTS,u,{url:n,data:a,success:function(r,n,u){var s,p;o.calendar.popLoading(),r.error?(o.reportError("Google Calendar API: "+r.error.message,r.error.errors),t()):r.items&&(s=o.gcalItemsToRawEventDefs(r.items,a.timeZone),p=i.applyAll(c,o,[r,n,u]),l.isArray(p)&&(s=p),e(o.parseEventDefs(s)))},error:function(e,r,n){o.reportError("Google Calendar network failure: "+r,[e,n]),o.calendar.popLoading(),t()}}))})):i.Promise.reject()},t.prototype.gcalItemsToRawEventDefs=function(e,t){var r=this;return e.map(function(e){return r.gcalItemToRawEventDef(e,t)})},t.prototype.gcalItemToRawEventDef=function(e,t){var r=e.htmlLink||null;return r&&t&&(r=n(r,"ctz="+t)),{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:r,location:e.location,description:e.description}},t.prototype.buildUrl=function(){return t.API_BASE+"/"+encodeURIComponent(this.googleCalendarId)+"/events?callback=?"},t.prototype.buildRequestParams=function(e,t,r){var o,n=this.googleCalendarApiKey||this.calendar.opt("googleCalendarApiKey");return n?(e.hasZone()||(e=e.clone().utc().add(-1,"day")),t.hasZone()||(t=t.clone().utc().add(1,"day")),o=l.extend(this.ajaxSettings.data||{},{key:n,timeMin:e.format(),timeMax:t.format(),singleEvents:!0,maxResults:9999}),r&&"local"!==r&&(o.timeZone=r.replace(" ","_")),o):(this.reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"),null)},t.prototype.reportError=function(e,t){var r=this.calendar,o=r.opt("googleCalendarError"),n=t||[{message:e}];this.googleCalendarError&&this.googleCalendarError.apply(r,n),o&&o.apply(r,n),i.warn.apply(null,[e].concat(t||[]))},t.prototype.getPrimitive=function(){return this.googleCalendarId},t.prototype.applyManualStandardProps=function(e){var t=i.EventSource.prototype.applyManualStandardProps.apply(this,arguments),r=e.googleCalendarId;return null==r&&e.url&&(r=o(e.url)),null!=r&&(this.googleCalendarId=r,t)},t.prototype.applyMiscProps=function(e){this.ajaxSettings||(this.ajaxSettings={}),l.extend(this.ajaxSettings,e)},t.API_BASE="https://www.googleapis.com/calendar/v3/calendars",t}(i.EventSource);t.default=u,u.defineStandardProps({url:!1,googleCalendarId:!1,googleCalendarApiKey:!0,googleCalendarError:!0})},3:function(e,r){e.exports=t}})});
|
||||
13
module/fullcalendar-3.9.0/lib/jquery-ui.min.js
vendored
Normal file
2
module/fullcalendar-3.9.0/lib/jquery.min.js
vendored
Normal file
1
module/fullcalendar-3.9.0/lib/moment.min.js
vendored
Normal file
6
module/fullcalendar-3.9.0/locale-all.js
Normal file
1
module/fullcalendar-3.9.0/locale/fr.js
Normal file
@@ -0,0 +1 @@
|
||||
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=127)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},127:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(128);var t=n(1);t.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},128:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,r){switch(r){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})}})});
|
||||
60
module/leaflet-1.3.0/dist/MarkerCluster.Default.css
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
.marker-cluster-small {
|
||||
background-color: rgba(181, 226, 140, 0.6);
|
||||
}
|
||||
.marker-cluster-small div {
|
||||
background-color: rgba(110, 204, 57, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-medium {
|
||||
background-color: rgba(241, 211, 87, 0.6);
|
||||
}
|
||||
.marker-cluster-medium div {
|
||||
background-color: rgba(240, 194, 12, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-large {
|
||||
background-color: rgba(253, 156, 115, 0.6);
|
||||
}
|
||||
.marker-cluster-large div {
|
||||
background-color: rgba(241, 128, 23, 0.6);
|
||||
}
|
||||
|
||||
/* IE 6-8 fallback colors */
|
||||
.leaflet-oldie .marker-cluster-small {
|
||||
background-color: rgb(181, 226, 140);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-small div {
|
||||
background-color: rgb(110, 204, 57);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-medium {
|
||||
background-color: rgb(241, 211, 87);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-medium div {
|
||||
background-color: rgb(240, 194, 12);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-large {
|
||||
background-color: rgb(253, 156, 115);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-large div {
|
||||
background-color: rgb(241, 128, 23);
|
||||
}
|
||||
|
||||
.marker-cluster {
|
||||
background-clip: padding-box;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.marker-cluster div {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
|
||||
text-align: center;
|
||||
border-radius: 15px;
|
||||
font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.marker-cluster span {
|
||||
line-height: 30px;
|
||||
}
|
||||
14
module/leaflet-1.3.0/dist/MarkerCluster.css
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
|
||||
-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
transition: transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
}
|
||||
|
||||
.leaflet-cluster-spider-leg {
|
||||
/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
|
||||
-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
|
||||
-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
|
||||
transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
|
||||
}
|
||||
636
module/leaflet-1.3.0/dist/leaflet.css
vendored
Normal file
@@ -0,0 +1,636 @@
|
||||
/* required styles */
|
||||
|
||||
.leaflet-pane,
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-tile-container,
|
||||
.leaflet-pane > svg,
|
||||
.leaflet-pane > canvas,
|
||||
.leaflet-zoom-box,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-layer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||
.leaflet-safari .leaflet-tile {
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
}
|
||||
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||
.leaflet-safari .leaflet-tile-container {
|
||||
width: 1600px;
|
||||
height: 1600px;
|
||||
-webkit-transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
display: block;
|
||||
}
|
||||
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||
.leaflet-container .leaflet-overlay-pane svg,
|
||||
.leaflet-container .leaflet-marker-pane img,
|
||||
.leaflet-container .leaflet-shadow-pane img,
|
||||
.leaflet-container .leaflet-tile-pane img,
|
||||
.leaflet-container img.leaflet-image-layer {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
|
||||
.leaflet-container.leaflet-touch-zoom {
|
||||
-ms-touch-action: pan-x pan-y;
|
||||
touch-action: pan-x pan-y;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag {
|
||||
-ms-touch-action: pinch-zoom;
|
||||
/* Fallback for FF which doesn't support pinch-zoom */
|
||||
touch-action: none;
|
||||
touch-action: pinch-zoom;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.leaflet-container {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.leaflet-container a {
|
||||
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||
}
|
||||
.leaflet-tile {
|
||||
filter: inherit;
|
||||
visibility: hidden;
|
||||
}
|
||||
.leaflet-tile-loaded {
|
||||
visibility: inherit;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
width: 0;
|
||||
height: 0;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
z-index: 800;
|
||||
}
|
||||
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||
.leaflet-overlay-pane svg {
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
.leaflet-pane { z-index: 400; }
|
||||
|
||||
.leaflet-tile-pane { z-index: 200; }
|
||||
.leaflet-overlay-pane { z-index: 400; }
|
||||
.leaflet-shadow-pane { z-index: 500; }
|
||||
.leaflet-marker-pane { z-index: 600; }
|
||||
.leaflet-tooltip-pane { z-index: 650; }
|
||||
.leaflet-popup-pane { z-index: 700; }
|
||||
|
||||
.leaflet-map-pane canvas { z-index: 100; }
|
||||
.leaflet-map-pane svg { z-index: 200; }
|
||||
|
||||
.leaflet-vml-shape {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
}
|
||||
.lvml {
|
||||
behavior: url(#default#VML);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
/* control positioning */
|
||||
|
||||
.leaflet-control {
|
||||
position: relative;
|
||||
z-index: 800;
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-top,
|
||||
.leaflet-bottom {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-top {
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-right {
|
||||
right: 0;
|
||||
}
|
||||
.leaflet-bottom {
|
||||
bottom: 0;
|
||||
}
|
||||
.leaflet-left {
|
||||
left: 0;
|
||||
}
|
||||
.leaflet-control {
|
||||
float: left;
|
||||
clear: both;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
float: right;
|
||||
}
|
||||
.leaflet-top .leaflet-control {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.leaflet-left .leaflet-control {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* zoom and fade animations */
|
||||
|
||||
.leaflet-fade-anim .leaflet-tile {
|
||||
will-change: opacity;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-popup {
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity 0.2s linear;
|
||||
-moz-transition: opacity 0.2s linear;
|
||||
-o-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||
opacity: 1;
|
||||
}
|
||||
.leaflet-zoom-animated {
|
||||
-webkit-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
will-change: transform;
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
-o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-tile,
|
||||
.leaflet-pan-anim .leaflet-tile {
|
||||
-webkit-transition: none;
|
||||
-moz-transition: none;
|
||||
-o-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
/* cursors */
|
||||
|
||||
.leaflet-interactive {
|
||||
cursor: pointer;
|
||||
}
|
||||
.leaflet-grab {
|
||||
cursor: -webkit-grab;
|
||||
cursor: -moz-grab;
|
||||
}
|
||||
.leaflet-crosshair,
|
||||
.leaflet-crosshair .leaflet-interactive {
|
||||
cursor: crosshair;
|
||||
}
|
||||
.leaflet-popup-pane,
|
||||
.leaflet-control {
|
||||
cursor: auto;
|
||||
}
|
||||
.leaflet-dragging .leaflet-grab,
|
||||
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||
.leaflet-dragging .leaflet-marker-draggable {
|
||||
cursor: move;
|
||||
cursor: -webkit-grabbing;
|
||||
cursor: -moz-grabbing;
|
||||
}
|
||||
|
||||
/* marker & overlays interactivity */
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-pane > svg path,
|
||||
.leaflet-tile-container {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.leaflet-marker-icon.leaflet-interactive,
|
||||
.leaflet-image-layer.leaflet-interactive,
|
||||
.leaflet-pane > svg path.leaflet-interactive {
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* visual tweaks */
|
||||
|
||||
.leaflet-container {
|
||||
background: #ddd;
|
||||
outline: 0;
|
||||
}
|
||||
.leaflet-container a {
|
||||
color: #0078A8;
|
||||
}
|
||||
.leaflet-container a.leaflet-active {
|
||||
outline: 2px solid orange;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
border: 2px dotted #38f;
|
||||
background: rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
|
||||
/* general typography */
|
||||
.leaflet-container {
|
||||
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
|
||||
/* general toolbar styles */
|
||||
|
||||
.leaflet-bar {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-bar a:hover {
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #ccc;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-control-layers-toggle {
|
||||
background-position: 50% 50%;
|
||||
background-repeat: no-repeat;
|
||||
display: block;
|
||||
}
|
||||
.leaflet-bar a:hover {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
.leaflet-bar a:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom: none;
|
||||
}
|
||||
.leaflet-bar a.leaflet-disabled {
|
||||
cursor: default;
|
||||
background-color: #f4f4f4;
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-bar a {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:first-child {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
/* zoom control */
|
||||
|
||||
.leaflet-control-zoom-in,
|
||||
.leaflet-control-zoom-out {
|
||||
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||
text-indent: 1px;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
|
||||
/* layers control */
|
||||
|
||||
.leaflet-control-layers {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers.png);
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
.leaflet-retina .leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers-2x.png);
|
||||
background-size: 26px 26px;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers-toggle {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
.leaflet-control-layers .leaflet-control-layers-list,
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||
display: none;
|
||||
}
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.leaflet-control-layers-expanded {
|
||||
padding: 6px 10px 6px 6px;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
.leaflet-control-layers-scrollbar {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
padding-right: 5px;
|
||||
}
|
||||
.leaflet-control-layers-selector {
|
||||
margin-top: 2px;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
.leaflet-control-layers label {
|
||||
display: block;
|
||||
}
|
||||
.leaflet-control-layers-separator {
|
||||
height: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
margin: 5px -10px 5px -6px;
|
||||
}
|
||||
|
||||
/* Default icon URLs */
|
||||
.leaflet-default-icon-path {
|
||||
background-image: url(images/marker-icon.png);
|
||||
}
|
||||
|
||||
|
||||
/* attribution and scale controls */
|
||||
|
||||
.leaflet-container .leaflet-control-attribution {
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
margin: 0;
|
||||
}
|
||||
.leaflet-control-attribution,
|
||||
.leaflet-control-scale-line {
|
||||
padding: 0 5px;
|
||||
color: #333;
|
||||
}
|
||||
.leaflet-control-attribution a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.leaflet-control-attribution a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.leaflet-container .leaflet-control-attribution,
|
||||
.leaflet-container .leaflet-control-scale {
|
||||
font-size: 11px;
|
||||
}
|
||||
.leaflet-left .leaflet-control-scale {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control-scale {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.leaflet-control-scale-line {
|
||||
border: 2px solid #777;
|
||||
border-top: none;
|
||||
line-height: 1.1;
|
||||
padding: 2px 5px 1px;
|
||||
font-size: 11px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child) {
|
||||
border-top: 2px solid #777;
|
||||
border-bottom: none;
|
||||
margin-top: -2px;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||
border-bottom: 2px solid #777;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-attribution,
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
border: 2px solid rgba(0,0,0,0.2);
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
|
||||
/* popup */
|
||||
|
||||
.leaflet-popup {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.leaflet-popup-content-wrapper {
|
||||
padding: 1px;
|
||||
text-align: left;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.leaflet-popup-content {
|
||||
margin: 13px 19px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.leaflet-popup-content p {
|
||||
margin: 18px 0;
|
||||
}
|
||||
.leaflet-popup-tip-container {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -20px;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-popup-tip {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
padding: 1px;
|
||||
|
||||
margin: -10px auto 0;
|
||||
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
-o-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.leaflet-popup-content-wrapper,
|
||||
.leaflet-popup-tip {
|
||||
background: white;
|
||||
color: #333;
|
||||
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: 4px 4px 0 0;
|
||||
border: none;
|
||||
text-align: center;
|
||||
width: 18px;
|
||||
height: 14px;
|
||||
font: 16px/14px Tahoma, Verdana, sans-serif;
|
||||
color: #c3c3c3;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
background: transparent;
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button:hover {
|
||||
color: #999;
|
||||
}
|
||||
.leaflet-popup-scrolled {
|
||||
overflow: auto;
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||
zoom: 1;
|
||||
}
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
width: 24px;
|
||||
margin: 0 auto;
|
||||
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
||||
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
||||
}
|
||||
.leaflet-oldie .leaflet-popup-tip-container {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.leaflet-oldie .leaflet-control-zoom,
|
||||
.leaflet-oldie .leaflet-control-layers,
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
|
||||
/* div icon */
|
||||
|
||||
.leaflet-div-icon {
|
||||
background: #fff;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
|
||||
/* Tooltip */
|
||||
/* Base styles for the element that has a tooltip */
|
||||
.leaflet-tooltip {
|
||||
position: absolute;
|
||||
padding: 6px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 3px;
|
||||
color: #222;
|
||||
white-space: nowrap;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-tooltip.leaflet-clickable {
|
||||
cursor: pointer;
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-tooltip-top:before,
|
||||
.leaflet-tooltip-bottom:before,
|
||||
.leaflet-tooltip-left:before,
|
||||
.leaflet-tooltip-right:before {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border: 6px solid transparent;
|
||||
background: transparent;
|
||||
content: "";
|
||||
}
|
||||
|
||||
/* Directions */
|
||||
|
||||
.leaflet-tooltip-bottom {
|
||||
margin-top: 6px;
|
||||
}
|
||||
.leaflet-tooltip-top {
|
||||
margin-top: -6px;
|
||||
}
|
||||
.leaflet-tooltip-bottom:before,
|
||||
.leaflet-tooltip-top:before {
|
||||
left: 50%;
|
||||
margin-left: -6px;
|
||||
}
|
||||
.leaflet-tooltip-top:before {
|
||||
bottom: 0;
|
||||
margin-bottom: -12px;
|
||||
border-top-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-bottom:before {
|
||||
top: 0;
|
||||
margin-top: -12px;
|
||||
margin-left: -6px;
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-left {
|
||||
margin-left: -6px;
|
||||
}
|
||||
.leaflet-tooltip-right {
|
||||
margin-left: 6px;
|
||||
}
|
||||
.leaflet-tooltip-left:before,
|
||||
.leaflet-tooltip-right:before {
|
||||
top: 50%;
|
||||
margin-top: -6px;
|
||||
}
|
||||
.leaflet-tooltip-left:before {
|
||||
right: 0;
|
||||
margin-right: -12px;
|
||||
border-left-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-right:before {
|
||||
left: 0;
|
||||
margin-left: -12px;
|
||||
border-right-color: #fff;
|
||||
}
|
||||
5
module/leaflet-1.3.0/dist/leaflet.js
vendored
Normal file
3
module/leaflet-1.3.0/dist/leaflet.markercluster.js
vendored
Normal file
@@ -8,9 +8,9 @@
|
||||
<script type='text/javascript' src="./module/fullcalendar-3.9.0/locale/fr.js"></script>
|
||||
<script type='text/javascript' src="./js/script_calendar.js"></script>
|
||||
<!--Bootsrap-->
|
||||
<script type='text/javascript' src="./module/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script type='text/javascript' src="./module/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>
|
||||
<script type='text/javascript' src="./module/bootstrap@5.3.3/dist/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.min.js"></script>
|
||||
<!--MAP-->
|
||||
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script> <script type='text/javascript' src='./module/leaflet-1.3.0/dist/leaflet.markercluster.js'></script>
|
||||
<script type='text/javascript' src="./js/script_map.js"></script>
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>CARIA Project</title>
|
||||
<link rel="shortcut icon" type="image/png" href="./config/images/favicon.png" />
|
||||
<link rel="shortcut icon" href="./config/images/favicon.webp" />
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="./css/style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="./module/bootstrap@5.3.3/dist/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css">
|
||||
<!--MAP-->
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin="" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="./module/leaflet-1.3.0/dist/MarkerCluster.css" />
|
||||
<link rel="stylesheet" type="text/css" href="./module/leaflet-1.3.0/dist/MarkerCluster.Default.css" />
|
||||
<!--CALENDAR-->
|
||||
@@ -17,7 +17,7 @@
|
||||
<body class="bg1">
|
||||
<header>
|
||||
<div class="container">
|
||||
<div class="text-center"><a href="index.php"><img src="./config/images/logo.png"></a></div>
|
||||
<div class="text-center"><a href="index.php"><img src="./config/images/logo.webp"></a></div>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-secondary">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
|
||||