├── backend
├── .htaccess
├── config
│ ├── dbConfig.php
│ ├── Controller.php
│ ├── Core.php
│ └── DB.php
├── controllers
│ └── Pages.php
├── view
│ └── index.php
├── bootstrap.php
└── models
│ ├── RDVModel.php
│ └── UserModel.php
├── front
├── .browserslistrc
├── public
│ ├── favicon.ico
│ └── index.html
├── src
│ ├── assets
│ │ └── logo.png
│ ├── views
│ │ ├── About.vue
│ │ ├── Login.vue
│ │ └── Register.vue
│ ├── main.js
│ ├── components
│ │ ├── Tasks.vue
│ │ ├── Footer.vue
│ │ ├── ButtonVue.vue
│ │ ├── Header.vue
│ │ ├── HelloWorld.vue
│ │ ├── LoginForm.vue
│ │ └── AddTask.vue
│ ├── router
│ │ └── index.js
│ └── App.vue
├── babel.config.js
├── vue.config.js
├── .gitignore
├── README.md
├── package.json
└── db.json
├── .gitattributes
├── composer.json
├── vendor
├── fpdf
│ ├── tutorial
│ │ ├── logo.png
│ │ ├── 20k_c1.txt
│ │ ├── calligra.ttf
│ │ ├── calligra.z
│ │ ├── makefont.php
│ │ ├── tuto1.php
│ │ ├── tuto7.php
│ │ ├── countries.txt
│ │ ├── index.htm
│ │ ├── tuto2.php
│ │ ├── tuto3.php
│ │ ├── tuto4.php
│ │ ├── tuto5.php
│ │ └── tuto6.php
│ ├── license.txt
│ ├── font
│ │ ├── courier.php
│ │ ├── courierb.php
│ │ ├── courieri.php
│ │ └── courierbi.php
│ ├── doc
│ │ ├── pageno.htm
│ │ ├── getpageheight.htm
│ │ ├── getpagewidth.htm
│ │ ├── getx.htm
│ │ ├── gety.htm
│ │ ├── setfontsize.htm
│ │ ├── getstringwidth.htm
│ │ ├── close.htm
│ │ ├── ln.htm
│ │ ├── setx.htm
│ │ ├── error.htm
│ │ ├── settopmargin.htm
│ │ ├── setrightmargin.htm
│ │ ├── addlink.htm
│ │ ├── setxy.htm
│ │ ├── setlinewidth.htm
│ │ ├── setleftmargin.htm
│ │ ├── line.htm
│ │ ├── sety.htm
│ │ ├── setcompression.htm
│ │ ├── settitle.htm
│ │ ├── setsubject.htm
│ │ ├── setauthor.htm
│ │ ├── setlink.htm
│ │ ├── setkeywords.htm
│ │ ├── setmargins.htm
│ │ ├── setcreator.htm
│ │ ├── setautopagebreak.htm
│ │ ├── footer.htm
│ │ ├── header.htm
│ │ ├── text.htm
│ │ ├── aliasnbpages.htm
│ │ ├── settextcolor.htm
│ │ ├── link.htm
│ │ ├── setfillcolor.htm
│ │ ├── rect.htm
│ │ ├── setdrawcolor.htm
│ │ ├── write.htm
│ │ ├── setdisplaymode.htm
│ │ ├── output.htm
│ │ ├── acceptpagebreak.htm
│ │ ├── addfont.htm
│ │ ├── __construct.htm
│ │ ├── addpage.htm
│ │ └── multicell.htm
│ ├── install.txt
│ └── fpdf.css
├── firebase
│ └── php-jwt
│ │ ├── src
│ │ ├── ExpiredException.php
│ │ ├── BeforeValidException.php
│ │ └── SignatureInvalidException.php
│ │ ├── composer.json
│ │ └── LICENSE
├── autoload.php
└── composer
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_classmap.php
│ ├── installed.php
│ ├── platform_check.php
│ ├── LICENSE
│ ├── autoload_static.php
│ ├── autoload_real.php
│ └── installed.json
├── frontend
├── assets
│ └── bootstrqp
│ │ ├── img
│ │ └── mdb-favicon.ico
│ │ └── src
│ │ └── js
│ │ ├── mdb
│ │ ├── perfect-scrollbar
│ │ │ ├── lib
│ │ │ │ ├── css.js
│ │ │ │ ├── dom.js
│ │ │ │ ├── class-names.js
│ │ │ │ ├── util.js
│ │ │ │ └── event-manager.js
│ │ │ ├── handlers
│ │ │ │ ├── click-rail.js
│ │ │ │ └── drag-thumb.js
│ │ │ └── process-scroll-diff.js
│ │ ├── util
│ │ │ ├── touch
│ │ │ │ ├── touchUtil.js
│ │ │ │ ├── index.js
│ │ │ │ └── swipe.js
│ │ │ ├── keycodes.js
│ │ │ ├── focusTrap.js
│ │ │ └── stack.js
│ │ └── dom
│ │ │ ├── data.js
│ │ │ ├── selector-engine.js
│ │ │ └── manipulator.js
│ │ ├── mdb.free.js
│ │ ├── bootstrap
│ │ ├── src
│ │ │ ├── base-component.js
│ │ │ ├── dom
│ │ │ │ ├── data.js
│ │ │ │ ├── selector-engine.js
│ │ │ │ └── manipulator.js
│ │ │ ├── util
│ │ │ │ └── scrollbar.js
│ │ │ └── button.js
│ │ ├── mdb-prefix
│ │ │ ├── base-component.js
│ │ │ ├── dom
│ │ │ │ ├── data.js
│ │ │ │ ├── selector-engine.js
│ │ │ │ └── manipulator.js
│ │ │ ├── util
│ │ │ │ └── scrollbar.js
│ │ │ └── button.js
│ │ └── dist
│ │ │ ├── base-component.js.map
│ │ │ ├── base-component.js
│ │ │ └── dom
│ │ │ ├── data.js
│ │ │ ├── selector-engine.js
│ │ │ ├── data.js.map
│ │ │ └── manipulator.js
│ │ └── free
│ │ ├── alert.js
│ │ ├── scrollspy.js
│ │ └── carousel.js
└── js
│ ├── admin.js
│ ├── auth.js
│ ├── download.js
│ ├── customers.js
│ └── index.js
├── .htaccess
├── public
├── .htaccess
└── index.php
└── composer.lock
/backend/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
2 |
--------------------------------------------------------------------------------
/front/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "require": {
3 | "firebase/php-jwt": "^5.2"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/front/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/front/public/favicon.ico
--------------------------------------------------------------------------------
/front/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/front/src/assets/logo.png
--------------------------------------------------------------------------------
/front/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/vendor/fpdf/tutorial/logo.png
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/20k_c1.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/vendor/fpdf/tutorial/20k_c1.txt
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/calligra.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/vendor/fpdf/tutorial/calligra.ttf
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/calligra.z:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/vendor/fpdf/tutorial/calligra.z
--------------------------------------------------------------------------------
/front/src/views/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
hello
4 | Go back
5 |
6 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/img/mdb-favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WalidMoultamiss/RD_vy/HEAD/frontend/assets/bootstrqp/img/mdb-favicon.ico
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine on
3 | RewriteRule ^$ public/ [L]
4 | RewriteRule (.*) public/$1 [L]
5 |
6 |
7 |
--------------------------------------------------------------------------------
/frontend/js/admin.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | authUser.isAdmin()
4 | if (authUser.role != "Admin") {
5 | window.location.replace('http://localhost:3000')
6 | }
7 |
8 |
9 |
--------------------------------------------------------------------------------
/vendor/firebase/php-jwt/src/ExpiredException.php:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/backend/config/dbConfig.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vendor/autoload.php:
--------------------------------------------------------------------------------
1 | AddPage();
6 | $pdf->SetFont('Arial','B',16);
7 | $pdf->Cell(40,10,'Hello World!');
8 | $pdf->Output();
9 | ?>
10 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | view('index');
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | Options -Multiviews
3 | RewriteEngine On
4 | RewriteBase /RD_vy/public
5 | RewriteCond %{REQUEST_FILENAME} !-d
6 | RewriteCond %{REQUEST_FILENAME} !-f
7 | RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
8 |
9 |
10 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_psr4.php:
--------------------------------------------------------------------------------
1 | array($vendorDir . '/firebase/php-jwt/src'),
10 | );
11 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_classmap.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/composer/InstalledVersions.php',
10 | );
11 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto7.php:
--------------------------------------------------------------------------------
1 | AddFont('Calligrapher','','calligra.php');
7 | $pdf->AddPage();
8 | $pdf->SetFont('Calligrapher','',35);
9 | $pdf->Cell(0,10,'Enjoy new fonts with FPDF!');
10 | $pdf->Output();
11 | ?>
12 |
--------------------------------------------------------------------------------
/front/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports={
2 | devServer: {
3 | proxy:{
4 | '^/api': {
5 | target: 'http://localhost:5000',
6 | changeOrigin: true,
7 | logLevel: 'debug',
8 | pathRewrite: {'^/api': '/'}
9 | },
10 | },
11 | },
12 | }
--------------------------------------------------------------------------------
/front/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/vendor/fpdf/license.txt:
--------------------------------------------------------------------------------
1 | Permission is hereby granted, free of charge, to any person obtaining a copy
2 | of this software to use, copy, modify, distribute, sublicense, and/or sell
3 | copies of the software, and to permit persons to whom the software is furnished
4 | to do so.
5 |
6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
--------------------------------------------------------------------------------
/front/README.md:
--------------------------------------------------------------------------------
1 | # app
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Customize configuration
19 | See [Configuration Reference](https://cli.vuejs.org/config/).
20 |
--------------------------------------------------------------------------------
/backend/view/index.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Flights
14 |
15 |
16 | Backend
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/frontend/js/auth.js:
--------------------------------------------------------------------------------
1 | let authUser = new User()
2 | setTimeout(() => {
3 | authUser.checkAuth().then(result => {
4 | if (result.error) {
5 | console.log(result.error);
6 | localStorage.getItem('Token') ? localStorage.removeItem('Token') : null
7 | window.location.replace('http://localhost:3000/assets/pages/login.html')
8 | }
9 | })
10 | }, 500);
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/lib/css.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | export function get(element) {
4 | return getComputedStyle(element);
5 | }
6 |
7 | export function set(element, obj) {
8 | for (const key in obj) {
9 | let val = obj[key];
10 | if (typeof val === 'number') {
11 | val = `${val}px`;
12 | }
13 | element.style[key] = val;
14 | }
15 | return element;
16 | }
17 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
10 | ?>
11 |
--------------------------------------------------------------------------------
/vendor/fpdf/font/courierb.php:
--------------------------------------------------------------------------------
1 | array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
10 | ?>
11 |
--------------------------------------------------------------------------------
/vendor/fpdf/font/courieri.php:
--------------------------------------------------------------------------------
1 | array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
10 | ?>
11 |
--------------------------------------------------------------------------------
/vendor/fpdf/font/courierbi.php:
--------------------------------------------------------------------------------
1 | array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
10 | ?>
11 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/countries.txt:
--------------------------------------------------------------------------------
1 | Austria;Vienna;83859;8075
2 | Belgium;Brussels;30518;10192
3 | Denmark;Copenhagen;43094;5295
4 | Finland;Helsinki;304529;5147
5 | France;Paris;543965;58728
6 | Germany;Berlin;357022;82057
7 | Greece;Athens;131625;10511
8 | Ireland;Dublin;70723;3694
9 | Italy;Roma;301316;57563
10 | Luxembourg;Luxembourg;2586;424
11 | Netherlands;Amsterdam;41526;15654
12 | Portugal;Lisbon;91906;9957
13 | Spain;Madrid;504790;39348
14 | Sweden;Stockholm;410934;8839
15 | United Kingdom;London;243820;58862
16 |
--------------------------------------------------------------------------------
/front/src/components/Tasks.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
28 |
--------------------------------------------------------------------------------
/front/src/components/Footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | copyrights 2021
5 |
6 |
7 | about
8 | logout
9 |
10 |
11 |
12 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/pageno.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PageNo
6 |
7 |
8 |
9 | PageNo
10 | int PageNo()
11 | Description
12 | Returns the current page number.
13 | See also
14 | AliasNbPages
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/touch/touchUtil.js:
--------------------------------------------------------------------------------
1 | class TouchUtil {
2 | _getCoordinates(e) {
3 | const [touch] = e.touches;
4 | return {
5 | x: touch.clientX,
6 | y: touch.clientY,
7 | };
8 | }
9 |
10 | _getDirection(displacement) {
11 | return {
12 | x: {
13 | direction: displacement.x < 0 ? 'left' : 'right',
14 | value: Math.abs(displacement.x),
15 | },
16 | y: {
17 | direction: displacement.y < 0 ? 'up' : 'down',
18 | value: Math.abs(displacement.y),
19 | },
20 | };
21 | }
22 | }
23 |
24 | export default TouchUtil;
25 |
--------------------------------------------------------------------------------
/vendor/fpdf/install.txt:
--------------------------------------------------------------------------------
1 | The FPDF library is made up of the following elements:
2 |
3 | - the main file, fpdf.php, which contains the class
4 | - the font definition files located in the font directory
5 |
6 | The font definition files are necessary as soon as you want to output some text in a document.
7 | If they are not accessible, the SetFont() method will produce the following error:
8 |
9 | FPDF error: Could not include font definition file
10 |
11 |
12 | Remarks:
13 |
14 | - Only the files corresponding to the fonts actually used are necessary
15 | - The tutorials provided in this package are ready to be executed
16 |
--------------------------------------------------------------------------------
/front/src/components/ButtonVue.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ nameBtn }}
3 |
4 |
5 |
6 |
7 |
24 |
27 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/getpageheight.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GetPageHeight
6 |
7 |
8 |
9 | GetPageHeight
10 | float GetPageHeight()
11 | Description
12 | Returns the current page height.
13 | See also
14 | GetPageWidth
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/getpagewidth.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GetPageWidth
6 |
7 |
8 |
9 | GetPageWidth
10 | float GetPageWidth()
11 | Description
12 | Returns the current page width.
13 | See also
14 | GetPageHeight
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/getx.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GetX
6 |
7 |
8 |
9 | GetX
10 | float GetX()
11 | Description
12 | Returns the abscissa of the current position.
13 | See also
14 | SetX ,
15 | GetY ,
16 | SetY
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/gety.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GetY
6 |
7 |
8 |
9 | GetY
10 | float GetY()
11 | Description
12 | Returns the ordinate of the current position.
13 | See also
14 | SetY ,
15 | GetX ,
16 | SetX
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/front/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "backend": "json-server --watch db.json --port 5000"
9 | },
10 | "dependencies": {
11 | "core-js": "^3.6.5",
12 | "json-server": "^0.16.3",
13 | "vue": "^3.0.0",
14 | "vue-router": "^4.0.8"
15 | },
16 | "devDependencies": {
17 | "@vue/cli-plugin-babel": "~4.5.0",
18 | "@vue/cli-service": "~4.5.0",
19 | "@vue/compiler-sfc": "^3.0.0",
20 | "sass": "^1.26.5",
21 | "sass-loader": "^8.0.2",
22 | "vue-cli-plugin-vuetify": "~2.4.1"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/frontend/js/download.js:
--------------------------------------------------------------------------------
1 | let id = location.search
2 | params = new URLSearchParams(id)
3 |
4 | setTimeout(() => {
5 | let ticket = document.querySelector("#tm")
6 | let a = ReserverUser.all.filter((elm) => {
7 | if (+elm.id === +params.get("id")) {
8 | return elm
9 | }
10 | })
11 | console.log(a);
12 | Passengers.getPassengersByRes(params.get("id")).then((result) => {
13 | console.log(result);
14 |
15 | })
16 | html2pdf().set({
17 | pagebreak: { mode: 'avoid-all', before: '#breakPage' }
18 | });
19 |
20 | html2pdf().from(ticket).save()
21 | setTimeout(() => {
22 | window.close()
23 | }, 1000);
24 |
25 | }, 100);
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | //
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setfontsize.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetFontSize
6 |
7 |
8 |
9 | SetFontSize
10 | SetFontSize(float size)
11 | Description
12 | Defines the size of the current font.
13 | Parameters
14 |
15 | size
16 |
17 | The size (in points).
18 |
19 |
20 | See also
21 | SetFont
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/getstringwidth.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GetStringWidth
6 |
7 |
8 |
9 | GetStringWidth
10 | float GetStringWidth(string s)
11 | Description
12 | Returns the length of a string in user unit. A font must be selected.
13 | Parameters
14 |
15 | s
16 |
17 | The string whose length is to be computed.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/close.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Close
6 |
7 |
8 |
9 | Close
10 | Close()
11 | Description
12 | Terminates the PDF document. It is not necessary to call this method explicitly because Output()
13 | does it automatically.
14 |
15 | If the document contains no page, AddPage() is called to prevent from getting an invalid document.
16 | See also
17 | Output
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/front/src/router/index.js:
--------------------------------------------------------------------------------
1 | import {createRouter, createWebHistory} from 'vue-router';
2 | import Home from '../views/Home.vue'
3 | import About from '../views/About.vue'
4 | import Login from '../views/Login.vue'
5 | import Register from '../views/Register.vue'
6 | const routes = [
7 | {
8 | path: '/',
9 | name: 'Home',
10 | component: Home,
11 | },
12 | {
13 | path: '/register',
14 | name: 'Register',
15 | component: Register,
16 | },
17 | {
18 | path: '/login',
19 | name: 'Login',
20 | component: Login,
21 | },
22 | {
23 | path: '/about',
24 | name: 'About',
25 | component: About,
26 | }
27 | ]
28 |
29 | const router = createRouter({
30 | history: createWebHistory(process.env.BASE_URL),
31 | routes
32 | })
33 |
34 | export default router
--------------------------------------------------------------------------------
/vendor/composer/installed.php:
--------------------------------------------------------------------------------
1 |
3 | array (
4 | 'pretty_version' => 'dev-master',
5 | 'version' => 'dev-master',
6 | 'aliases' =>
7 | array (
8 | ),
9 | 'reference' => '22a333eeb1e8c2356fe4eb1119685b37b11097d9',
10 | 'name' => '__root__',
11 | ),
12 | 'versions' =>
13 | array (
14 | '__root__' =>
15 | array (
16 | 'pretty_version' => 'dev-master',
17 | 'version' => 'dev-master',
18 | 'aliases' =>
19 | array (
20 | ),
21 | 'reference' => '22a333eeb1e8c2356fe4eb1119685b37b11097d9',
22 | ),
23 | 'firebase/php-jwt' =>
24 | array (
25 | 'pretty_version' => 'v5.2.1',
26 | 'version' => '5.2.1.0',
27 | 'aliases' =>
28 | array (
29 | ),
30 | 'reference' => 'f42c9110abe98dd6cfe9053c49bc86acc70b2d23',
31 | ),
32 | ),
33 | );
34 |
--------------------------------------------------------------------------------
/front/db.json:
--------------------------------------------------------------------------------
1 | {
2 | "tasks": [
3 | {
4 | "id": 1,
5 | "text": "Atlastrip Appointment",
6 | "day": "March 3rd at 2:30pm",
7 | "reminder": true,
8 | "status": "viewed"
9 | },
10 | {
11 | "id": 79264,
12 | "text": "task default54",
13 | "day": "dsgdfgdfgds",
14 | "reminder": true,
15 | "status": "viewed"
16 | },
17 | {
18 | "id": 71674,
19 | "text": "dfgsdg",
20 | "day": "dsfgdfgsdfg",
21 | "reminder": false,
22 | "status": "viewed"
23 | },
24 | {
25 | "id": 3284,
26 | "text": "dfgdfgd",
27 | "day": "fgggfffggfffgfgfgdqszses",
28 | "reminder": false,
29 | "status": "viewed"
30 | },
31 | {
32 | "id": 33222,
33 | "text": "task default9",
34 | "day": "qsdqsdqsd",
35 | "reminder": false,
36 | "status": "viewed"
37 | }
38 | ]
39 | }
--------------------------------------------------------------------------------
/vendor/fpdf/doc/ln.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Ln
6 |
7 |
8 |
9 | Ln
10 | Ln([float h])
11 | Description
12 | Performs a line break. The current abscissa goes back to the left margin and the ordinate
13 | increases by the amount passed in parameter.
14 | Parameters
15 |
16 | h
17 |
18 | The height of the break.
19 |
20 | By default, the value equals the height of the last printed cell.
21 |
22 |
23 | See also
24 | Cell
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/index.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Tutorials
6 |
7 |
8 |
9 | Tutorials
10 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setx.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetX
6 |
7 |
8 |
9 | SetX
10 | SetX(float x)
11 | Description
12 | Defines the abscissa of the current position. If the passed value is negative, it is relative
13 | to the right of the page.
14 | Parameters
15 |
16 | x
17 |
18 | The value of the abscissa.
19 |
20 |
21 | See also
22 | GetX ,
23 | GetY ,
24 | SetY ,
25 | SetXY
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/error.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Error
6 |
7 |
8 |
9 | Error
10 | Error(string msg)
11 | Description
12 | This method is automatically called in case of a fatal error; it simply throws an exception
13 | with the provided message.
14 | An inherited class may override it to customize the error handling but the method should
15 | never return, otherwise the resulting document would probably be invalid.
16 | Parameters
17 |
18 | msg
19 |
20 | The error message.
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto2.php:
--------------------------------------------------------------------------------
1 | Image('logo.png',10,6,30);
11 | // Arial bold 15
12 | $this->SetFont('Arial','B',15);
13 | // Move to the right
14 | $this->Cell(80);
15 | // Title
16 | $this->Cell(30,10,'Title',1,0,'C');
17 | // Line break
18 | $this->Ln(20);
19 | }
20 |
21 | // Page footer
22 | function Footer()
23 | {
24 | // Position at 1.5 cm from bottom
25 | $this->SetY(-15);
26 | // Arial italic 8
27 | $this->SetFont('Arial','I',8);
28 | // Page number
29 | $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
30 | }
31 | }
32 |
33 | // Instanciation of inherited class
34 | $pdf = new PDF();
35 | $pdf->AliasNbPages();
36 | $pdf->AddPage();
37 | $pdf->SetFont('Times','',12);
38 | for($i=1;$i<=40;$i++)
39 | $pdf->Cell(0,10,'Printing line number '.$i,0,1);
40 | $pdf->Output();
41 | ?>
42 |
--------------------------------------------------------------------------------
/vendor/firebase/php-jwt/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "firebase/php-jwt",
3 | "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
4 | "homepage": "https://github.com/firebase/php-jwt",
5 | "keywords": [
6 | "php",
7 | "jwt"
8 | ],
9 | "authors": [
10 | {
11 | "name": "Neuman Vong",
12 | "email": "neuman+pear@twilio.com",
13 | "role": "Developer"
14 | },
15 | {
16 | "name": "Anant Narayanan",
17 | "email": "anant@php.net",
18 | "role": "Developer"
19 | }
20 | ],
21 | "license": "BSD-3-Clause",
22 | "require": {
23 | "php": ">=5.3.0"
24 | },
25 | "autoload": {
26 | "psr-4": {
27 | "Firebase\\JWT\\": "src"
28 | }
29 | },
30 | "require-dev": {
31 | "phpunit/phpunit": ">=4.8 <=9"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/settopmargin.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetTopMargin
6 |
7 |
8 |
9 | SetTopMargin
10 | SetTopMargin(float margin)
11 | Description
12 | Defines the top margin. The method can be called before creating the first page.
13 | Parameters
14 |
15 | margin
16 |
17 | The margin.
18 |
19 |
20 | See also
21 | SetLeftMargin ,
22 | SetRightMargin ,
23 | SetAutoPageBreak ,
24 | SetMargins
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setrightmargin.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetRightMargin
6 |
7 |
8 |
9 | SetRightMargin
10 | SetRightMargin(float margin)
11 | Description
12 | Defines the right margin. The method can be called before creating the first page.
13 | Parameters
14 |
15 | margin
16 |
17 | The margin.
18 |
19 |
20 | See also
21 | SetLeftMargin ,
22 | SetTopMargin ,
23 | SetAutoPageBreak ,
24 | SetMargins
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb.free.js:
--------------------------------------------------------------------------------
1 | // BOOTSTRAP CORE COMPONENTS
2 | import Button from './free/button';
3 | import Collapse from './bootstrap/mdb-prefix/collapse';
4 | import Offcanvas from './bootstrap/mdb-prefix/offcanvas';
5 | import Alert from './free/alert';
6 | import Carousel from './free/carousel';
7 | import Modal from './free/modal';
8 | import Popover from './free/popover';
9 | import ScrollSpy from './free/scrollspy';
10 | import Tab from './free/tab';
11 | import Tooltip from './free/tooltip';
12 | import Toast from './free/toast';
13 |
14 | // MDB FREE COMPONENTS
15 | import Input from './free/input';
16 | import Dropdown from './free/dropdown';
17 | import Ripple from './free/ripple';
18 | import Range from './free/range';
19 |
20 | export {
21 | Alert,
22 | Button,
23 | Carousel,
24 | Collapse,
25 | Offcanvas,
26 | Dropdown,
27 | Input,
28 | Modal,
29 | Popover,
30 | Ripple,
31 | ScrollSpy,
32 | Tab,
33 | Toast,
34 | Tooltip,
35 | Range,
36 | };
37 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/addlink.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AddLink
6 |
7 |
8 |
9 | AddLink
10 | int AddLink()
11 | Description
12 | Creates a new internal link and returns its identifier. An internal link is a clickable area
13 | which directs to another place within the document.
14 |
15 | The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is
16 | defined with SetLink().
17 | See also
18 | Cell ,
19 | Write ,
20 | Image ,
21 | Link ,
22 | SetLink
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setxy.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetXY
6 |
7 |
8 |
9 | SetXY
10 | SetXY(float x, float y)
11 | Description
12 | Defines the abscissa and ordinate of the current position. If the passed values are negative,
13 | they are relative respectively to the right and bottom of the page.
14 | Parameters
15 |
16 | x
17 |
18 | The value of the abscissa.
19 |
20 | y
21 |
22 | The value of the ordinate.
23 |
24 |
25 | See also
26 | SetX ,
27 | SetY
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setlinewidth.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetLineWidth
6 |
7 |
8 |
9 | SetLineWidth
10 | SetLineWidth(float width)
11 | Description
12 | Defines the line width. By default, the value equals 0.2 mm. The method can be called before
13 | the first page is created and the value is retained from page to page.
14 | Parameters
15 |
16 | width
17 |
18 | The width.
19 |
20 |
21 | See also
22 | Line ,
23 | Rect ,
24 | Cell ,
25 | MultiCell
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/front/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | <%= htmlWebpackPlugin.options.title %>
12 |
13 |
14 |
15 | We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/vendor/composer/platform_check.php:
--------------------------------------------------------------------------------
1 | = 50300)) {
8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 5.3.0". You are running ' . PHP_VERSION . '.';
9 | }
10 |
11 | if ($issues) {
12 | if (!headers_sent()) {
13 | header('HTTP/1.1 500 Internal Server Error');
14 | }
15 | if (!ini_get('display_errors')) {
16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18 | } elseif (!headers_sent()) {
19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20 | }
21 | }
22 | trigger_error(
23 | 'Composer detected issues in your platform: ' . implode(' ', $issues),
24 | E_USER_ERROR
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/frontend/js/customers.js:
--------------------------------------------------------------------------------
1 | authUser.all().then(({users}) => {
2 | const dashUsers = document.querySelector('#Users')
3 | console.log(users);
4 | users.map((user) => {
5 | let tr = document.createElement('tr')
6 | console.log(user);
7 | /*html*/
8 | tr.innerHTML = `
9 | ${user.cin}
10 | ${user.first_name}
11 | ${user.last_name}
12 | ${user.phone}
13 | ${user.email}
14 | ${user.address}
15 | ${user.birth_date}
16 | ${user.num_passport}
17 | ${user.role}
18 |
19 | `
20 | dashUsers.appendChild(tr)
21 | })
22 | }).catch((err) => {
23 |
24 | });
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setleftmargin.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetLeftMargin
6 |
7 |
8 |
9 | SetLeftMargin
10 | SetLeftMargin(float margin)
11 | Description
12 | Defines the left margin. The method can be called before creating the first page.
13 |
14 | If the current abscissa gets out of page, it is brought back to the margin.
15 | Parameters
16 |
17 | margin
18 |
19 | The margin.
20 |
21 |
22 | See also
23 | SetTopMargin ,
24 | SetRightMargin ,
25 | SetAutoPageBreak ,
26 | SetMargins
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/lib/dom.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | export function div(className) {
4 | const div = document.createElement('div');
5 | div.className = className;
6 | return div;
7 | }
8 |
9 | const elMatches =
10 | typeof Element !== 'undefined' &&
11 | (Element.prototype.matches ||
12 | Element.prototype.webkitMatchesSelector ||
13 | Element.prototype.mozMatchesSelector ||
14 | Element.prototype.msMatchesSelector);
15 |
16 | export function matches(element, query) {
17 | if (!elMatches) {
18 | throw new Error('No element matching method supported');
19 | }
20 |
21 | return elMatches.call(element, query);
22 | }
23 |
24 | export function remove(element) {
25 | if (element.remove) {
26 | element.remove();
27 | } else {
28 | if (element.parentNode) {
29 | element.parentNode.removeChild(element);
30 | }
31 | }
32 | }
33 |
34 | export function queryChildren(element, selector) {
35 | return Array.prototype.filter.call(element.children, (child) => matches(child, selector));
36 | }
37 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/line.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Line
6 |
7 |
8 |
9 | Line
10 | Line(float x1, float y1, float x2, float y2)
11 | Description
12 | Draws a line between two points.
13 | Parameters
14 |
15 | x1
16 |
17 | Abscissa of first point.
18 |
19 | y1
20 |
21 | Ordinate of first point.
22 |
23 | x2
24 |
25 | Abscissa of second point.
26 |
27 | y2
28 |
29 | Ordinate of second point.
30 |
31 |
32 | See also
33 | SetLineWidth ,
34 | SetDrawColor
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/sety.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetY
6 |
7 |
8 |
9 | SetY
10 | SetY(float y [, boolean resetX])
11 | Description
12 | Sets the ordinate and optionally moves the current abscissa back to the left margin. If the value
13 | is negative, it is relative to the bottom of the page.
14 | Parameters
15 |
16 | y
17 |
18 | The value of the ordinate.
19 |
20 | resetX
21 |
22 | Whether to reset the abscissa. Default value: true.
23 |
24 |
25 | See also
26 | GetX ,
27 | GetY ,
28 | SetX ,
29 | SetXY
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setcompression.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetCompression
6 |
7 |
8 |
9 | SetCompression
10 | SetCompression(boolean compress)
11 | Description
12 | Activates or deactivates page compression. When activated, the internal representation of
13 | each page is compressed, which leads to a compression ratio of about 2 for the resulting
14 | document.
15 |
16 | Compression is on by default.
17 |
18 |
19 | Note: the Zlib extension is required for this feature. If not present, compression
20 | will be turned off.
21 | Parameters
22 |
23 | compress
24 |
25 | Boolean indicating if compression must be enabled.
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/settitle.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetTitle
6 |
7 |
8 |
9 | SetTitle
10 | SetTitle(string title [, boolean isUTF8])
11 | Description
12 | Defines the title of the document.
13 | Parameters
14 |
15 | title
16 |
17 | The title.
18 |
19 | isUTF8
20 |
21 | Indicates if the string is encoded in ISO-8859-1 (false) or UTF-8 (true).
22 | Default value: false.
23 |
24 |
25 | See also
26 | SetAuthor ,
27 | SetCreator ,
28 | SetKeywords ,
29 | SetSubject
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setsubject.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetSubject
6 |
7 |
8 |
9 | SetSubject
10 | SetSubject(string subject [, boolean isUTF8])
11 | Description
12 | Defines the subject of the document.
13 | Parameters
14 |
15 | subject
16 |
17 | The subject.
18 |
19 | isUTF8
20 |
21 | Indicates if the string is encoded in ISO-8859-1 (false) or UTF-8 (true).
22 | Default value: false.
23 |
24 |
25 | See also
26 | SetAuthor ,
27 | SetCreator ,
28 | SetKeywords ,
29 | SetTitle
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setauthor.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetAuthor
6 |
7 |
8 |
9 | SetAuthor
10 | SetAuthor(string author [, boolean isUTF8])
11 | Description
12 | Defines the author of the document.
13 | Parameters
14 |
15 | author
16 |
17 | The name of the author.
18 |
19 | isUTF8
20 |
21 | Indicates if the string is encoded in ISO-8859-1 (false) or UTF-8 (true).
22 | Default value: false.
23 |
24 |
25 | See also
26 | SetCreator ,
27 | SetKeywords ,
28 | SetSubject ,
29 | SetTitle
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/keycodes.js:
--------------------------------------------------------------------------------
1 | export const LEFT_ARROW = 37;
2 | export const UP_ARROW = 38;
3 | export const RIGHT_ARROW = 39;
4 | export const DOWN_ARROW = 40;
5 | export const HOME = 36;
6 | export const END = 35;
7 | export const PAGE_UP = 33;
8 | export const PAGE_DOWN = 34;
9 | export const ENTER = 13;
10 | export const SPACE = 32;
11 | export const ESCAPE = 27;
12 | export const TAB = 9;
13 | export const BACKSPACE = 8;
14 | export const DELETE = 46;
15 | export const A = 65;
16 | export const B = 66;
17 | export const C = 67;
18 | export const D = 68;
19 | export const E = 69;
20 | export const F = 70;
21 | export const G = 71;
22 | export const H = 72;
23 | export const I = 73;
24 | export const J = 74;
25 | export const K = 75;
26 | export const L = 76;
27 | export const M = 77;
28 | export const N = 78;
29 | export const O = 79;
30 | export const P = 80;
31 | export const Q = 81;
32 | export const R = 82;
33 | export const S = 83;
34 | export const T = 84;
35 | export const U = 85;
36 | export const V = 86;
37 | export const W = 87;
38 | export const X = 88;
39 | export const Y = 89;
40 | export const Z = 90;
41 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/handlers/click-rail.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | import updateGeometry from '../update-geometry';
4 |
5 | export default function (i) {
6 | // const element = i.element;
7 |
8 | i.event.bind(i.scrollbarY, 'mousedown', (e) => e.stopPropagation());
9 | i.event.bind(i.scrollbarYRail, 'mousedown', (e) => {
10 | const positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;
11 | const direction = positionTop > i.scrollbarYTop ? 1 : -1;
12 |
13 | i.element.scrollTop += direction * i.containerHeight;
14 | updateGeometry(i);
15 |
16 | e.stopPropagation();
17 | });
18 |
19 | i.event.bind(i.scrollbarX, 'mousedown', (e) => e.stopPropagation());
20 | i.event.bind(i.scrollbarXRail, 'mousedown', (e) => {
21 | const positionLeft =
22 | e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;
23 | const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;
24 |
25 | i.element.scrollLeft += direction * i.containerWidth;
26 | updateGeometry(i);
27 |
28 | e.stopPropagation();
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/front/src/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{name}}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
31 |
32 |
33 |
42 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setlink.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetLink
6 |
7 |
8 |
9 | SetLink
10 | SetLink(int link [, float y [, int page]])
11 | Description
12 | Defines the page and position a link points to.
13 | Parameters
14 |
15 | link
16 |
17 | The link identifier returned by AddLink().
18 |
19 | y
20 |
21 | Ordinate of target position; -1 indicates the current position.
22 | The default value is 0 (top of page).
23 |
24 | page
25 |
26 | Number of target page; -1 indicates the current page. This is the default value.
27 |
28 |
29 | See also
30 | AddLink
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/vendor/composer/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) Nils Adermann, Jordi Boggiano
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is furnished
9 | to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
22 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setkeywords.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetKeywords
6 |
7 |
8 |
9 | SetKeywords
10 | SetKeywords(string keywords [, boolean isUTF8])
11 | Description
12 | Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
13 | Parameters
14 |
15 | keywords
16 |
17 | The list of keywords.
18 |
19 | isUTF8
20 |
21 | Indicates if the string is encoded in ISO-8859-1 (false) or UTF-8 (true).
22 | Default value: false.
23 |
24 |
25 | See also
26 | SetAuthor ,
27 | SetCreator ,
28 | SetSubject ,
29 | SetTitle
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setmargins.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetMargins
6 |
7 |
8 |
9 | SetMargins
10 | SetMargins(float left, float top [, float right])
11 | Description
12 | Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change
13 | them.
14 | Parameters
15 |
16 | left
17 |
18 | Left margin.
19 |
20 | top
21 |
22 | Top margin.
23 |
24 | right
25 |
26 | Right margin. Default value is the left one.
27 |
28 |
29 | See also
30 | SetLeftMargin ,
31 | SetTopMargin ,
32 | SetRightMargin ,
33 | SetAutoPageBreak
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setcreator.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetCreator
6 |
7 |
8 |
9 | SetCreator
10 | SetCreator(string creator [, boolean isUTF8])
11 | Description
12 | Defines the creator of the document. This is typically the name of the application that
13 | generates the PDF.
14 | Parameters
15 |
16 | creator
17 |
18 | The name of the creator.
19 |
20 | isUTF8
21 |
22 | Indicates if the string is encoded in ISO-8859-1 (false) or UTF-8 (true).
23 | Default value: false.
24 |
25 |
26 | See also
27 | SetAuthor ,
28 | SetKeywords ,
29 | SetSubject ,
30 | SetTitle
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setautopagebreak.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetAutoPageBreak
6 |
7 |
8 |
9 | SetAutoPageBreak
10 | SetAutoPageBreak(boolean auto [, float margin])
11 | Description
12 | Enables or disables the automatic page breaking mode. When enabling, the second parameter is
13 | the distance from the bottom of the page that defines the triggering limit. By default, the
14 | mode is on and the margin is 2 cm.
15 | Parameters
16 |
17 | auto
18 |
19 | Boolean indicating if mode should be on or off.
20 |
21 | margin
22 |
23 | Distance from the bottom of the page.
24 |
25 |
26 | See also
27 | Cell ,
28 | MultiCell ,
29 | AcceptPageBreak
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/footer.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Footer
6 |
7 |
8 |
9 | Footer
10 | Footer()
11 | Description
12 | This method is used to render the page footer. It is automatically called by AddPage() and
13 | Close() and should not be called directly by the application. The implementation in FPDF is
14 | empty, so you have to subclass it and override the method if you want a specific processing.
15 | Example
16 |
17 |
class PDF extends FPDF
18 | {
19 | function Footer()
20 | {
21 | // Go to 1.5 cm from bottom
22 | $this->SetY(-15);
23 | // Select Arial italic 8
24 | $this->SetFont('Arial','I',8);
25 | // Print centered page number
26 | $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
27 | }
28 | }
29 |
30 | See also
31 | Header
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/header.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Header
6 |
7 |
8 |
9 | Header
10 | Header()
11 | Description
12 | This method is used to render the page header. It is automatically called by AddPage() and
13 | should not be called directly by the application. The implementation in FPDF is empty, so
14 | you have to subclass it and override the method if you want a specific processing.
15 | Example
16 |
17 |
class PDF extends FPDF
18 | {
19 | function Header()
20 | {
21 | // Select Arial bold 15
22 | $this->SetFont('Arial','B',15);
23 | // Move to the right
24 | $this->Cell(80);
25 | // Framed title
26 | $this->Cell(30,10,'Title',1,0,'C');
27 | // Line break
28 | $this->Ln(20);
29 | }
30 | }
31 |
32 | See also
33 | Footer
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_static.php:
--------------------------------------------------------------------------------
1 |
11 | array (
12 | 'Firebase\\JWT\\' => 13,
13 | ),
14 | );
15 |
16 | public static $prefixDirsPsr4 = array (
17 | 'Firebase\\JWT\\' =>
18 | array (
19 | 0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
20 | ),
21 | );
22 |
23 | public static $classMap = array (
24 | 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
25 | );
26 |
27 | public static function getInitializer(ClassLoader $loader)
28 | {
29 | return \Closure::bind(function () use ($loader) {
30 | $loader->prefixLengthsPsr4 = ComposerStaticInit1c3260cfa4cff3800f50c4f7595d8739::$prefixLengthsPsr4;
31 | $loader->prefixDirsPsr4 = ComposerStaticInit1c3260cfa4cff3800f50c4f7595d8739::$prefixDirsPsr4;
32 | $loader->classMap = ComposerStaticInit1c3260cfa4cff3800f50c4f7595d8739::$classMap;
33 |
34 | }, null, ClassLoader::class);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/lib/class-names.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | const cls = {
4 | main: 'ps',
5 | rtl: 'ps__rtl',
6 | element: {
7 | thumb: (x) => `ps__thumb-${x}`,
8 | rail: (x) => `ps__rail-${x}`,
9 | consuming: 'ps__child--consume',
10 | },
11 | state: {
12 | focus: 'ps--focus',
13 | clicking: 'ps--clicking',
14 | active: (x) => `ps--active-${x}`,
15 | scrolling: (x) => `ps--scrolling-${x}`,
16 | },
17 | };
18 |
19 | export default cls;
20 |
21 | /*
22 | * Helper methods
23 | */
24 | const scrollingClassTimeout = { x: null, y: null };
25 |
26 | export function addScrollingClass(i, x) {
27 | const classList = i.element.classList;
28 | const className = cls.state.scrolling(x);
29 |
30 | if (classList.contains(className)) {
31 | clearTimeout(scrollingClassTimeout[x]);
32 | } else {
33 | classList.add(className);
34 | }
35 | }
36 |
37 | export function removeScrollingClass(i, x) {
38 | scrollingClassTimeout[x] = setTimeout(
39 | () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),
40 | i.settings.scrollingThreshold
41 | );
42 | }
43 |
44 | export function setScrollingClassInstantly(i, x) {
45 | addScrollingClass(i, x);
46 | removeScrollingClass(i, x);
47 | }
48 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/text.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Text
6 |
7 |
8 |
9 | Text
10 | Text(float x, float y, string txt)
11 | Description
12 | Prints a character string. The origin is on the left of the first character, on the baseline.
13 | This method allows to place a string precisely on the page, but it is usually easier to use
14 | Cell(), MultiCell() or Write() which are the standard methods to print text.
15 | Parameters
16 |
17 | x
18 |
19 | Abscissa of the origin.
20 |
21 | y
22 |
23 | Ordinate of the origin.
24 |
25 | txt
26 |
27 | String to print.
28 |
29 |
30 | See also
31 | SetFont ,
32 | SetTextColor ,
33 | Cell ,
34 | MultiCell ,
35 | Write
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/base-component.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): base-component.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import Data from './dom/data';
9 |
10 | /**
11 | * ------------------------------------------------------------------------
12 | * Constants
13 | * ------------------------------------------------------------------------
14 | */
15 |
16 | const VERSION = '5.0.0-beta3';
17 |
18 | class BaseComponent {
19 | constructor(element) {
20 | element = typeof element === 'string' ? document.querySelector(element) : element;
21 |
22 | if (!element) {
23 | return;
24 | }
25 |
26 | this._element = element;
27 | Data.set(this._element, this.constructor.DATA_KEY, this);
28 | }
29 |
30 | dispose() {
31 | Data.remove(this._element, this.constructor.DATA_KEY);
32 | this._element = null;
33 | }
34 |
35 | /** Static */
36 |
37 | static getInstance(element) {
38 | return Data.get(element, this.DATA_KEY);
39 | }
40 |
41 | static get VERSION() {
42 | return VERSION;
43 | }
44 | }
45 |
46 | export default BaseComponent;
47 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/base-component.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): base-component.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import Data from './dom/data';
9 |
10 | /**
11 | * ------------------------------------------------------------------------
12 | * Constants
13 | * ------------------------------------------------------------------------
14 | */
15 |
16 | const VERSION = '5.0.0-beta3';
17 |
18 | class BaseComponent {
19 | constructor(element) {
20 | element = typeof element === 'string' ? document.querySelector(element) : element;
21 |
22 | if (!element) {
23 | return;
24 | }
25 |
26 | this._element = element;
27 | Data.set(this._element, this.constructor.DATA_KEY, this);
28 | }
29 |
30 | dispose() {
31 | Data.remove(this._element, this.constructor.DATA_KEY);
32 | this._element = null;
33 | }
34 |
35 | /** Static */
36 |
37 | static getInstance(element) {
38 | return Data.get(element, this.DATA_KEY);
39 | }
40 |
41 | static get VERSION() {
42 | return VERSION;
43 | }
44 | }
45 |
46 | export default BaseComponent;
47 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/aliasnbpages.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AliasNbPages
6 |
7 |
8 |
9 | AliasNbPages
10 | AliasNbPages([string alias])
11 | Description
12 | Defines an alias for the total number of pages. It will be substituted as the document is
13 | closed.
14 | Parameters
15 |
16 | alias
17 |
18 | The alias. Default value: {nb}.
19 |
20 |
21 | Example
22 |
23 |
class PDF extends FPDF
24 | {
25 | function Footer()
26 | {
27 | // Go to 1.5 cm from bottom
28 | $this->SetY(-15);
29 | // Select Arial italic 8
30 | $this->SetFont('Arial','I',8);
31 | // Print current and total page numbers
32 | $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
33 | }
34 | }
35 |
36 | $pdf = new PDF();
37 | $pdf->AliasNbPages();
38 |
39 | See also
40 | PageNo ,
41 | Footer
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/vendor/fpdf/fpdf.css:
--------------------------------------------------------------------------------
1 | body {font-family:"Times New Roman",serif}
2 | h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
3 | h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
4 | dl.param dt {text-decoration:underline}
5 | dl.param dd {margin-top:1em; margin-bottom:1em}
6 | dl.param ul {margin-top:1em; margin-bottom:1em}
7 | tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
8 | div.source {margin-top:1.4em; margin-bottom:1.3em}
9 | div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
10 | div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
11 | div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
12 | div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
13 | div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
14 | .kw {color:#000080; font-weight:bold}
15 | .str {color:#CC0000}
16 | .cmt {color:#008000}
17 | p.demo {text-align:center; margin-top:-0.9em}
18 | a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
19 | a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
20 | a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
21 | a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
22 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/settextcolor.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetTextColor
6 |
7 |
8 |
9 | SetTextColor
10 | SetTextColor(int r [, int g, int b])
11 | Description
12 | Defines the color used for text. It can be expressed in RGB components or gray scale. The
13 | method can be called before the first page is created and the value is retained from page to
14 | page.
15 | Parameters
16 |
17 | r
18 |
19 | If g et b are given, red component; if not, indicates the gray level.
20 | Value between 0 and 255.
21 |
22 | g
23 |
24 | Green component (between 0 and 255).
25 |
26 | b
27 |
28 | Blue component (between 0 and 255).
29 |
30 |
31 | See also
32 | SetDrawColor ,
33 | SetFillColor ,
34 | Text ,
35 | Cell ,
36 | MultiCell
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/lib/util.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | import * as CSS from './css';
4 | import * as DOM from './dom';
5 |
6 | export function toInt(x) {
7 | return parseInt(x, 10) || 0;
8 | }
9 |
10 | export function isEditable(el) {
11 | return (
12 | DOM.matches(el, 'input,[contenteditable]') ||
13 | DOM.matches(el, 'select,[contenteditable]') ||
14 | DOM.matches(el, 'textarea,[contenteditable]') ||
15 | DOM.matches(el, 'button,[contenteditable]')
16 | );
17 | }
18 |
19 | export function outerWidth(element) {
20 | const styles = CSS.get(element);
21 | return (
22 | toInt(styles.width) +
23 | toInt(styles.paddingLeft) +
24 | toInt(styles.paddingRight) +
25 | toInt(styles.borderLeftWidth) +
26 | toInt(styles.borderRightWidth)
27 | );
28 | }
29 |
30 | export const env = {
31 | isWebKit: typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style,
32 | supportsTouch:
33 | typeof window !== 'undefined' &&
34 | ('ontouchstart' in window ||
35 | ('maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints > 0) ||
36 | (window.DocumentTouch && document instanceof window.DocumentTouch)),
37 | supportsIePointer: typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,
38 | isChrome: typeof navigator !== 'undefined' && /Chrome/i.test(navigator && navigator.userAgent),
39 | };
40 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/link.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Link
6 |
7 |
8 |
9 | Link
10 | Link(float x, float y, float w, float h, mixed link)
11 | Description
12 | Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(),
13 | Write() or Image(), but this method can be useful for instance to define a clickable area inside
14 | an image.
15 | Parameters
16 |
17 | x
18 |
19 | Abscissa of the upper-left corner of the rectangle.
20 |
21 | y
22 |
23 | Ordinate of the upper-left corner of the rectangle.
24 |
25 | w
26 |
27 | Width of the rectangle.
28 |
29 | h
30 |
31 | Height of the rectangle.
32 |
33 | link
34 |
35 | URL or identifier returned by AddLink().
36 |
37 |
38 | See also
39 | AddLink ,
40 | Cell ,
41 | Write ,
42 | Image
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setfillcolor.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetFillColor
6 |
7 |
8 |
9 | SetFillColor
10 | SetFillColor(int r [, int g, int b])
11 | Description
12 | Defines the color used for all filling operations (filled rectangles and cell backgrounds).
13 | It can be expressed in RGB components or gray scale. The method can be called before the first
14 | page is created and the value is retained from page to page.
15 | Parameters
16 |
17 | r
18 |
19 | If g and b are given, red component; if not, indicates the gray level.
20 | Value between 0 and 255.
21 |
22 | g
23 |
24 | Green component (between 0 and 255).
25 |
26 | b
27 |
28 | Blue component (between 0 and 255).
29 |
30 |
31 | See also
32 | SetDrawColor ,
33 | SetTextColor ,
34 | Rect ,
35 | Cell ,
36 | MultiCell
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/rect.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Rect
6 |
7 |
8 |
9 | Rect
10 | Rect(float x, float y, float w, float h [, string style])
11 | Description
12 | Outputs a rectangle. It can be drawn (border only), filled (with no border) or both.
13 | Parameters
14 |
15 | x
16 |
17 | Abscissa of upper-left corner.
18 |
19 | y
20 |
21 | Ordinate of upper-left corner.
22 |
23 | w
24 |
25 | Width.
26 |
27 | h
28 |
29 | Height.
30 |
31 | style
32 |
33 | Style of rendering. Possible values are:
34 |
35 | D or empty string: draw. This is the default value.
36 | F: fill
37 | DF or FD: draw and fill
38 |
39 |
40 |
41 | See also
42 | SetLineWidth ,
43 | SetDrawColor ,
44 | SetFillColor
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/touch/index.js:
--------------------------------------------------------------------------------
1 | import Swipe from './swipe';
2 |
3 | class Touch {
4 | constructor(element, event = 'swipe', options = {}) {
5 | this._element = element;
6 | this._event = event;
7 |
8 | // events
9 |
10 | this.swipe = new Swipe(element, options);
11 |
12 | // handlers
13 |
14 | this._touchStartHandler = this._handleTouchStart.bind(this);
15 | this._touchMoveHandler = this._handleTouchMove.bind(this);
16 | this._touchEndHandler = this._handleTouchEnd.bind(this);
17 | }
18 |
19 | dispose() {
20 | this._element.removeEventListener('touchstart', this._touchStartHandler);
21 | this._element.removeEventListener('touchmove', this._touchMoveHandler);
22 | window.removeEventListener('touchend', this._touchEndHandler);
23 | }
24 |
25 | init() {
26 | // istanbul ignore next
27 | this._element.addEventListener('touchstart', (e) => this._handleTouchStart(e));
28 | // istanbul ignore next
29 | this._element.addEventListener('touchmove', (e) => this._handleTouchMove(e));
30 | // istanbul ignore next
31 | window.addEventListener('touchend', (e) => this._handleTouchEnd(e));
32 | }
33 |
34 | _handleTouchStart(e) {
35 | this[this._event].handleTouchStart(e);
36 | }
37 |
38 | _handleTouchMove(e) {
39 | this[this._event].handleTouchMove(e);
40 | }
41 |
42 | _handleTouchEnd(e) {
43 | this[this._event].handleTouchEnd(e);
44 | }
45 | }
46 |
47 | export default Touch;
48 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setdrawcolor.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetDrawColor
6 |
7 |
8 |
9 | SetDrawColor
10 | SetDrawColor(int r [, int g, int b])
11 | Description
12 | Defines the color used for all drawing operations (lines, rectangles and cell borders). It
13 | can be expressed in RGB components or gray scale. The method can be called before the first
14 | page is created and the value is retained from page to page.
15 | Parameters
16 |
17 | r
18 |
19 | If g et b are given, red component; if not, indicates the gray level.
20 | Value between 0 and 255.
21 |
22 | g
23 |
24 | Green component (between 0 and 255).
25 |
26 | b
27 |
28 | Blue component (between 0 and 255).
29 |
30 |
31 | See also
32 | SetFillColor ,
33 | SetTextColor ,
34 | Line ,
35 | Rect ,
36 | Cell ,
37 | MultiCell
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/backend/config/Controller.php:
--------------------------------------------------------------------------------
1 | "localhost",
37 | "aud" => "localhost",
38 | "iat" => $iat,
39 | 'exp' => $exp,
40 | 'reference' => $reference,
41 | 'role' => $role,
42 | 'hash' => $hash,
43 | );
44 |
45 | $jwt = JWT::encode($payload, $this->key, 'HS512');
46 |
47 | return $jwt;
48 | }
49 | public function verifyAuth($token){
50 | $decoded = JWT::decode($token, $this->key, array('HS512'));
51 | return $decoded;
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/vendor/firebase/php-jwt/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011, Neuman Vong
2 |
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | * Redistributions of source code must retain the above copyright
9 | notice, this list of conditions and the following disclaimer.
10 |
11 | * Redistributions in binary form must reproduce the above
12 | copyright notice, this list of conditions and the following
13 | disclaimer in the documentation and/or other materials provided
14 | with the distribution.
15 |
16 | * Neither the name of Neuman Vong nor the names of other
17 | contributors may be used to endorse or promote products derived
18 | from this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 |
--------------------------------------------------------------------------------
/backend/config/Core.php:
--------------------------------------------------------------------------------
1 | getUrl(); //get the url
17 | if ($url?file_exists('../backend/controllers/' . ucwords($url[0]) . '.php'):null) {
18 | $this->Controller = ucwords($url[0]);
19 | unset($url[0]);
20 | }
21 |
22 | require_once '../backend/controllers/' . $this->Controller . '.php';
23 | $this->Controller = new $this->Controller;
24 |
25 | if (isset($url[1])) {
26 | if (method_exists($this->Controller, $url[1])) {
27 | $this->Method = $url[1];
28 | unset($url[1]);
29 | }
30 | }
31 |
32 | $this->Controller->data = file_get_contents("php://input") ? json_decode(file_get_contents("php://input")) : [];
33 | $this->params = $url ? array_values($url) : [];
34 |
35 | call_user_func_array([$this->Controller, $this->Method], $this->params);
36 |
37 | }
38 |
39 | public function getUrl()
40 | {
41 | if (isset($_GET['url'])) {
42 | $url = rtrim($_GET['url'], '/');
43 | $url = filter_var($url, FILTER_SANITIZE_URL);
44 | $url = explode('/', $url);
45 | return $url;
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/write.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Write
6 |
7 |
8 |
9 | Write
10 | Write(float h, string txt [, mixed link])
11 | Description
12 | This method prints text from the current position. When the right margin is reached (or the \n
13 | character is met) a line break occurs and text continues from the left margin. Upon method exit,
14 | the current position is left just at the end of the text.
15 |
16 | It is possible to put a link on the text.
17 | Parameters
18 |
19 | h
20 |
21 | Line height.
22 |
23 | txt
24 |
25 | String to print.
26 |
27 | link
28 |
29 | URL or identifier returned by AddLink().
30 |
31 |
32 | Example
33 |
34 |
// Begin with regular font
35 | $pdf->SetFont('Arial','',14);
36 | $pdf->Write(5,'Visit ');
37 | // Then put a blue underlined link
38 | $pdf->SetTextColor(0,0,255);
39 | $pdf->SetFont('','U');
40 | $pdf->Write(5,'www.fpdf.org','http://www.fpdf.org');
41 |
42 | See also
43 | SetFont ,
44 | SetTextColor ,
45 | AddLink ,
46 | MultiCell ,
47 | SetAutoPageBreak
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/front/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
46 |
47 |
82 |
--------------------------------------------------------------------------------
/frontend/js/index.js:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | let newUser = new User()
5 |
6 | const loginEmail = document.querySelector('#loginEmail')
7 | const loginPassword = document.querySelector('#loginPassword')
8 | const formLogin = document.querySelector('#auth-login');
9 | const formRegister = document.querySelector('#auth-register');
10 |
11 |
12 | formLogin?formLogin.addEventListener('submit', (e) => {
13 | e.preventDefault()
14 | login()
15 | }):null
16 | formRegister?formRegister.addEventListener('submit', (e) => {
17 | e.preventDefault()
18 | register()
19 | }):null
20 |
21 | function login() {
22 | newUser.login(loginEmail.value, loginPassword.value)
23 | setTimeout(() => {
24 | console.log(newUser.currentUser)
25 | }, 300);
26 |
27 | }
28 |
29 | function register() {
30 | const email = document.querySelector('#registerEmail').value
31 | const cin = document.querySelector('#registerCin').value
32 | const first_name = document.querySelector('#registerfirst_name').value
33 | const last_name = document.querySelector('#registerlast_name').value
34 | const address = document.querySelector('#registerAddress').value
35 | const num_passport = document.querySelector('#registerPassport').value
36 | const birth_date = document.querySelector('#registerBirthday').value
37 | const phone = document.querySelector('#registerPhone').value
38 | const password = document.querySelector('#registerPassword').value
39 | const password_repeat = document.querySelector('#registerRepeatPassword').value
40 |
41 | let data = {
42 | email,
43 | cin,
44 | first_name,
45 | last_name,
46 | address,
47 | num_passport,
48 | birth_date,
49 | password,
50 | phone,
51 | password_repeat,
52 | role:"Admin"
53 | }
54 |
55 | newUser.register(data)
56 | }
57 |
58 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/dom/data.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta2): dom/data.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const mapData = (() => {
15 | const storeData = {};
16 | let id = 1;
17 | return {
18 | set(element, key, data) {
19 | if (typeof element[key] === 'undefined') {
20 | element[key] = {
21 | key,
22 | id,
23 | };
24 | id++;
25 | }
26 |
27 | storeData[element[key].id] = data;
28 | },
29 | get(element, key) {
30 | if (!element || typeof element[key] === 'undefined') {
31 | return null;
32 | }
33 |
34 | const keyProperties = element[key];
35 | if (keyProperties.key === key) {
36 | return storeData[keyProperties.id];
37 | }
38 |
39 | return null;
40 | },
41 | delete(element, key) {
42 | if (typeof element[key] === 'undefined') {
43 | return;
44 | }
45 |
46 | const keyProperties = element[key];
47 | if (keyProperties.key === key) {
48 | delete storeData[keyProperties.id];
49 | delete element[key];
50 | }
51 | },
52 | };
53 | })();
54 |
55 | const Data = {
56 | setData(instance, key, data) {
57 | mapData.set(instance, key, data);
58 | },
59 | getData(instance, key) {
60 | return mapData.get(instance, key);
61 | },
62 | removeData(instance, key) {
63 | mapData.delete(instance, key);
64 | },
65 | };
66 |
67 | export default Data;
68 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/dom/data.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/data.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const elementMap = new Map();
15 |
16 | export default {
17 | set(element, key, instance) {
18 | if (!elementMap.has(element)) {
19 | elementMap.set(element, new Map());
20 | }
21 |
22 | const instanceMap = elementMap.get(element);
23 |
24 | // make it clear we only want one instance per element
25 | // can be removed later when multiple key/instances are fine to be used
26 | if (!instanceMap.has(key) && instanceMap.size !== 0) {
27 | // eslint-disable-next-line no-console
28 | console.error(
29 | `Bootstrap doesn't allow more than one instance per element. Bound instance: ${
30 | Array.from(instanceMap.keys())[0]
31 | }.`
32 | );
33 | return;
34 | }
35 |
36 | instanceMap.set(key, instance);
37 | },
38 |
39 | get(element, key) {
40 | if (elementMap.has(element)) {
41 | return elementMap.get(element).get(key) || null;
42 | }
43 |
44 | return null;
45 | },
46 |
47 | remove(element, key) {
48 | if (!elementMap.has(element)) {
49 | return;
50 | }
51 |
52 | const instanceMap = elementMap.get(element);
53 |
54 | instanceMap.delete(key);
55 |
56 | // free up element references if there are no instances left for an element
57 | if (instanceMap.size === 0) {
58 | elementMap.delete(element);
59 | }
60 | },
61 | };
62 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/touch/swipe.js:
--------------------------------------------------------------------------------
1 | import TouchUtil from './touchUtil';
2 | import EventHandler from '../../dom/event-handler';
3 |
4 | const DEFAULT_OPTIONS = {
5 | threshold: 10,
6 | direction: 'all',
7 | };
8 |
9 | class Swipe extends TouchUtil {
10 | constructor(element, options) {
11 | super();
12 | this._element = element;
13 | this._startPosition = null;
14 | this._options = {
15 | ...DEFAULT_OPTIONS,
16 | ...options,
17 | };
18 | }
19 |
20 | handleTouchStart(e) {
21 | this._startPosition = this._getCoordinates(e);
22 | }
23 |
24 | handleTouchMove(e) {
25 | if (!this._startPosition) return;
26 |
27 | const position = this._getCoordinates(e);
28 | const displacement = {
29 | x: position.x - this._startPosition.x,
30 | y: position.y - this._startPosition.y,
31 | };
32 |
33 | const swipe = this._getDirection(displacement);
34 |
35 | if (this._options.direction === 'all') {
36 | if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {
37 | return;
38 | }
39 | const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;
40 | EventHandler.trigger(this._element, `swipe${direction}`);
41 | EventHandler.trigger(this._element, 'swipe', { direction });
42 | this._startPosition = null;
43 | return;
44 | }
45 |
46 | const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';
47 |
48 | if (
49 | swipe[axis].direction === this._options.direction &&
50 | swipe[axis].value > this._options.threshold
51 | ) {
52 | EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`);
53 | this._startPosition = null;
54 | }
55 | }
56 |
57 | handleTouchEnd() {
58 | this._startPosition = null;
59 | }
60 | }
61 |
62 | export default Swipe;
63 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/setdisplaymode.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SetDisplayMode
6 |
7 |
8 |
9 | SetDisplayMode
10 | SetDisplayMode(mixed zoom [, string layout])
11 | Description
12 | Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be
13 | displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a
14 | specific zooming factor or use viewer default (configured in the Preferences menu of Adobe Reader).
15 | The page layout can be specified too: single at once, continuous display, two columns or viewer
16 | default.
17 | Parameters
18 |
19 | zoom
20 |
21 | The zoom to use. It can be one of the following string values:
22 |
23 | fullpage: displays the entire page on screen
24 | fullwidth: uses maximum width of window
25 | real: uses real size (equivalent to 100% zoom)
26 | default: uses viewer default mode
27 |
28 | or a number indicating the zooming factor to use.
29 |
30 | layout
31 |
32 | The page layout. Possible values are:
33 |
34 | single: displays one page at once
35 | continuous: displays pages continuously
36 | two: displays two pages on two columns
37 | default: uses viewer default mode
38 |
39 | Default value is default.
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/dom/data.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/data.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const elementMap = new Map();
15 |
16 | export default {
17 | set(element, key, instance) {
18 | if (!elementMap.has(element)) {
19 | elementMap.set(element, new Map());
20 | }
21 |
22 | const instanceMap = elementMap.get(element);
23 |
24 | // make it clear we only want one instance per element
25 | // can be removed later when multiple key/instances are fine to be used
26 | if (!instanceMap.has(key) && instanceMap.size !== 0) {
27 | // eslint-disable-next-line no-console
28 | console.error(
29 | `Bootstrap doesn't allow more than one instance per element. Bound instance: ${
30 | Array.from(instanceMap.keys())[0]
31 | }.`
32 | );
33 | return;
34 | }
35 |
36 | instanceMap.set(key, instance);
37 | },
38 |
39 | get(element, key) {
40 | if (elementMap.has(element)) {
41 | return elementMap.get(element).get(key) || null;
42 | }
43 |
44 | return null;
45 | },
46 |
47 | remove(element, key) {
48 | if (!elementMap.has(element)) {
49 | return;
50 | }
51 |
52 | const instanceMap = elementMap.get(element);
53 |
54 | instanceMap.delete(key);
55 |
56 | // free up element references if there are no instances left for an element
57 | if (instanceMap.size === 0) {
58 | elementMap.delete(element);
59 | }
60 | },
61 | };
62 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/output.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Output
6 |
7 |
8 |
9 | Output
10 | string Output([string dest [, string name [, boolean isUTF8]]])
11 | Description
12 | Send the document to a given destination: browser, file or string. In the case of a browser, the
13 | PDF viewer may be used or a download may be forced.
14 |
15 | The method first calls Close() if necessary to terminate the document.
16 | Parameters
17 |
18 | dest
19 |
20 | Destination where to send the document. It can be one of the following:
21 |
22 | I: send the file inline to the browser. The PDF viewer is used if available.
23 | D: send to the browser and force a file download with the name given by name.
24 | F: save to a local file with the name given by name (may include a path).
25 | S: return the document as a string.
26 |
27 | The default value is I.
28 |
29 | name
30 |
31 | The name of the file. It is ignored in case of destination S.
32 | The default value is doc.pdf.
33 |
34 | isUTF8
35 |
36 | Indicates if name is encoded in ISO-8859-1 (false) or UTF-8 (true).
37 | Only used for destinations I and D.
38 | The default value is false.
39 |
40 |
41 | See also
42 | Close
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/acceptpagebreak.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AcceptPageBreak
6 |
7 |
8 |
9 | AcceptPageBreak
10 | boolean AcceptPageBreak()
11 | Description
12 | Whenever a page break condition is met, the method is called, and the break is issued or not
13 | depending on the returned value. The default implementation returns a value according to the
14 | mode selected by SetAutoPageBreak().
15 |
16 | This method is called automatically and should not be called directly by the application.
17 | Example
18 | The method is overriden in an inherited class in order to obtain a 3 column layout:
19 |
20 |
class PDF extends FPDF
21 | {
22 | var $col = 0;
23 |
24 | function SetCol($col)
25 | {
26 | // Move position to a column
27 | $this->col = $col;
28 | $x = 10+$col*65;
29 | $this->SetLeftMargin($x);
30 | $this->SetX($x);
31 | }
32 |
33 | function AcceptPageBreak()
34 | {
35 | if($this->col<2)
36 | {
37 | // Go to next column
38 | $this->SetCol($this->col+1);
39 | $this->SetY(10);
40 | return false;
41 | }
42 | else
43 | {
44 | // Go back to first column and issue page break
45 | $this->SetCol(0);
46 | return true;
47 | }
48 | }
49 | }
50 |
51 | $pdf = new PDF();
52 | $pdf->AddPage();
53 | $pdf->SetFont('Arial','',12);
54 | for($i=1;$i<=300;$i++)
55 | $pdf->Cell(0,5,"Line $i",0,1);
56 | $pdf->Output();
57 |
58 | See also
59 | SetAutoPageBreak
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/addfont.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AddFont
6 |
7 |
8 |
9 | AddFont
10 | AddFont(string family [, string style [, string file]])
11 | Description
12 | Imports a TrueType, OpenType or Type1 font and makes it available. It is necessary to generate a font
13 | definition file first with the MakeFont utility.
14 |
15 | The definition file (and the font file itself when embedding) must be present in the font directory.
16 | If it is not found, the error "Could not include font definition file" is raised.
17 | Parameters
18 |
19 | family
20 |
21 | Font family. The name can be chosen arbitrarily. If it is a standard family name, it will
22 | override the corresponding font.
23 |
24 | style
25 |
26 | Font style. Possible values are (case insensitive):
27 |
28 | empty string: regular
29 | B: bold
30 | I: italic
31 | BI or IB: bold italic
32 |
33 | The default value is regular.
34 |
35 | file
36 |
37 | The font definition file.
38 |
39 | By default, the name is built from the family and style, in lower case with no space.
40 |
41 |
42 | Example
43 |
44 |
$pdf->AddFont('Comic','I');
45 |
46 | is equivalent to:
47 |
48 |
$pdf->AddFont('Comic','I','comici.php');
49 |
50 | See also
51 | SetFont
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/process-scroll-diff.js:
--------------------------------------------------------------------------------
1 | import { setScrollingClassInstantly } from './lib/class-names';
2 |
3 | function createEvent(name) {
4 | if (typeof window.CustomEvent === 'function') {
5 | return new CustomEvent(name);
6 | }
7 |
8 | const evt = document.createEvent('CustomEvent');
9 | evt.initCustomEvent(name, false, false, undefined);
10 | return evt;
11 | }
12 |
13 | export default function (i, axis, diff, useScrollingClass = true, forceFireReachEvent = false) {
14 | let fields;
15 | if (axis === 'top') {
16 | fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];
17 | } else if (axis === 'left') {
18 | fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];
19 | } else {
20 | throw new Error('A proper axis should be provided');
21 | }
22 |
23 | processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);
24 | }
25 |
26 | function processScrollDiff(
27 | i,
28 | diff,
29 | [contentHeight, containerHeight, scrollTop, y, up, down],
30 | useScrollingClass = true,
31 | forceFireReachEvent = false
32 | ) {
33 | const element = i.element;
34 |
35 | // reset reach
36 | i.reach[y] = null;
37 |
38 | // 1 for subpixel rounding
39 | if (element[scrollTop] < 1) {
40 | i.reach[y] = 'start';
41 | }
42 |
43 | // 1 for subpixel rounding
44 | if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {
45 | i.reach[y] = 'end';
46 | }
47 |
48 | if (diff) {
49 | element.dispatchEvent(createEvent(`ps-scroll-${y}`));
50 |
51 | if (diff < 0) {
52 | element.dispatchEvent(createEvent(`ps-scroll-${up}`));
53 | } else if (diff > 0) {
54 | element.dispatchEvent(createEvent(`ps-scroll-${down}`));
55 | }
56 |
57 | if (useScrollingClass) {
58 | setScrollingClassInstantly(i, y);
59 | }
60 | }
61 |
62 | if (i.reach[y] && (diff || forceFireReachEvent)) {
63 | element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/backend/models/RDVModel.php:
--------------------------------------------------------------------------------
1 | db = new DB();
9 | }
10 |
11 | public function getRDVs($date)
12 | {
13 | $this->db->query("SELECT * FROM slots where date = :date ORDER BY slot ASC ");
14 | $this->db->bind(':date', $date);
15 | return $this->db->all();
16 | }
17 |
18 | public function RDVInfo($id)
19 | {
20 | $this->db->query("SELECT * FROM slots WHERE id = :id");
21 | $this->db->bind(':id', $id);
22 | return $this->db->single();
23 | }
24 |
25 | public function RDVInfoByRef($rdv)
26 | {
27 | $this->db->query("SELECT * FROM slots WHERE refenrence_id = :rdv");
28 | $this->db->bind(':rdv', $rdv);
29 | return $this->db->single();
30 | }
31 |
32 |
33 |
34 | public function getRDVsByDate($date)
35 | {
36 | $this->db->query("SELECT * FROM slots WHERE date = :date");
37 | $this->db->bind(':date', $date);
38 | return $this->db->single();
39 | }
40 |
41 |
42 | public function add($data, $reference)
43 | {
44 | try {
45 | $this->db->query("INSERT INTO
46 | slots
47 | SET
48 | date = :date,
49 | slot = :slot,
50 | refenrence_id = :reference
51 | ");
52 |
53 | $this->db->bind(':date', $data->date);
54 | $this->db->bind(':slot', $data->slot);
55 | $this->db->bind(':reference', $data->reference);
56 | $this->db->single();
57 | } catch (\PDOExeption $err) {
58 | return $err->getMessage();
59 | die();
60 | }
61 | return true;
62 | }
63 |
64 | public function delete($data)
65 | {
66 | $this->db->query('DELETE FROM slots WHERE id=:id');
67 | $this->db->bind(':id', $data->id);
68 | $this->db->execute();
69 | }
70 |
71 |
72 |
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto3.php:
--------------------------------------------------------------------------------
1 | SetFont('Arial','B',15);
12 | // Calculate width of title and position
13 | $w = $this->GetStringWidth($title)+6;
14 | $this->SetX((210-$w)/2);
15 | // Colors of frame, background and text
16 | $this->SetDrawColor(0,80,180);
17 | $this->SetFillColor(230,230,0);
18 | $this->SetTextColor(220,50,50);
19 | // Thickness of frame (1 mm)
20 | $this->SetLineWidth(1);
21 | // Title
22 | $this->Cell($w,9,$title,1,1,'C',true);
23 | // Line break
24 | $this->Ln(10);
25 | }
26 |
27 | function Footer()
28 | {
29 | // Position at 1.5 cm from bottom
30 | $this->SetY(-15);
31 | // Arial italic 8
32 | $this->SetFont('Arial','I',8);
33 | // Text color in gray
34 | $this->SetTextColor(128);
35 | // Page number
36 | $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
37 | }
38 |
39 | function ChapterTitle($num, $label)
40 | {
41 | // Arial 12
42 | $this->SetFont('Arial','',12);
43 | // Background color
44 | $this->SetFillColor(200,220,255);
45 | // Title
46 | $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
47 | // Line break
48 | $this->Ln(4);
49 | }
50 |
51 | function ChapterBody($file)
52 | {
53 | // Read text file
54 | $txt = file_get_contents($file);
55 | // Times 12
56 | $this->SetFont('Times','',12);
57 | // Output justified text
58 | $this->MultiCell(0,5,$txt);
59 | // Line break
60 | $this->Ln();
61 | // Mention in italics
62 | $this->SetFont('','I');
63 | $this->Cell(0,5,'(end of excerpt)');
64 | }
65 |
66 | function PrintChapter($num, $title, $file)
67 | {
68 | $this->AddPage();
69 | $this->ChapterTitle($num,$title);
70 | $this->ChapterBody($file);
71 | }
72 | }
73 |
74 | $pdf = new PDF();
75 | $title = '20000 Leagues Under the Seas';
76 | $pdf->SetTitle($title);
77 | $pdf->SetAuthor('Jules Verne');
78 | $pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
79 | $pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
80 | $pdf->Output();
81 | ?>
82 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/base-component.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.0-beta3'\n\nclass BaseComponent {\n constructor(element) {\n element = typeof element === 'string' ? document.querySelector(element) : element\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n this._element = null\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.get(element, this.DATA_KEY)\n }\n\n static get VERSION() {\n return VERSION\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","constructor","element","document","querySelector","_element","Data","set","DATA_KEY","dispose","remove","getInstance","get"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;;EAEA,MAAMA,OAAO,GAAG,aAAhB;;EAEA,MAAMC,aAAN,CAAoB;EAClBC,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAG,OAAOA,OAAP,KAAmB,QAAnB,GAA8BC,QAAQ,CAACC,aAAT,CAAuBF,OAAvB,CAA9B,GAAgEA,OAA1E;;EAEA,QAAI,CAACA,OAAL,EAAc;EACZ;EACD;;EAED,SAAKG,QAAL,GAAgBH,OAAhB;EACAI,IAAAA,wBAAI,CAACC,GAAL,CAAS,KAAKF,QAAd,EAAwB,KAAKJ,WAAL,CAAiBO,QAAzC,EAAmD,IAAnD;EACD;;EAEDC,EAAAA,OAAO,GAAG;EACRH,IAAAA,wBAAI,CAACI,MAAL,CAAY,KAAKL,QAAjB,EAA2B,KAAKJ,WAAL,CAAiBO,QAA5C;EACA,SAAKH,QAAL,GAAgB,IAAhB;EACD;EAED;;;EAEkB,SAAXM,WAAW,CAACT,OAAD,EAAU;EAC1B,WAAOI,wBAAI,CAACM,GAAL,CAASV,OAAT,EAAkB,KAAKM,QAAvB,CAAP;EACD;;EAEiB,aAAPT,OAAO,GAAG;EACnB,WAAOA,OAAP;EACD;;EAzBiB;;;;;;;;"}
--------------------------------------------------------------------------------
/vendor/composer/autoload_real.php:
--------------------------------------------------------------------------------
1 | = 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32 | if ($useStaticLoader) {
33 | require __DIR__ . '/autoload_static.php';
34 |
35 | call_user_func(\Composer\Autoload\ComposerStaticInit1c3260cfa4cff3800f50c4f7595d8739::getInitializer($loader));
36 | } else {
37 | $map = require __DIR__ . '/autoload_namespaces.php';
38 | foreach ($map as $namespace => $path) {
39 | $loader->set($namespace, $path);
40 | }
41 |
42 | $map = require __DIR__ . '/autoload_psr4.php';
43 | foreach ($map as $namespace => $path) {
44 | $loader->setPsr4($namespace, $path);
45 | }
46 |
47 | $classMap = require __DIR__ . '/autoload_classmap.php';
48 | if ($classMap) {
49 | $loader->addClassMap($classMap);
50 | }
51 | }
52 |
53 | $loader->register(true);
54 |
55 | return $loader;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/front/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
5 | For a guide and recipes on how to configure / customize this project,
6 | check out the
7 | vue-cli documentation .
8 |
9 |
Installed CLI Plugins
10 |
13 |
Essential Links
14 |
21 |
Ecosystem
22 |
29 |
30 |
31 |
32 |
40 |
41 |
42 |
59 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/dom/selector-engine.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/selector-engine.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const NODE_TEXT = 3;
15 |
16 | const SelectorEngine = {
17 | find(selector, element = document.documentElement) {
18 | return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
19 | },
20 |
21 | findOne(selector, element = document.documentElement) {
22 | return Element.prototype.querySelector.call(element, selector);
23 | },
24 |
25 | children(element, selector) {
26 | return [].concat(...element.children).filter((child) => child.matches(selector));
27 | },
28 |
29 | parents(element, selector) {
30 | const parents = [];
31 |
32 | let ancestor = element.parentNode;
33 |
34 | while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
35 | if (ancestor.matches(selector)) {
36 | parents.push(ancestor);
37 | }
38 |
39 | ancestor = ancestor.parentNode;
40 | }
41 |
42 | return parents;
43 | },
44 |
45 | prev(element, selector) {
46 | let previous = element.previousElementSibling;
47 |
48 | while (previous) {
49 | if (previous.matches(selector)) {
50 | return [previous];
51 | }
52 |
53 | previous = previous.previousElementSibling;
54 | }
55 |
56 | return [];
57 | },
58 |
59 | next(element, selector) {
60 | let next = element.nextElementSibling;
61 |
62 | while (next) {
63 | if (next.matches(selector)) {
64 | return [next];
65 | }
66 |
67 | next = next.nextElementSibling;
68 | }
69 |
70 | return [];
71 | },
72 | };
73 |
74 | export default SelectorEngine;
75 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/dom/selector-engine.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/selector-engine.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const NODE_TEXT = 3;
15 |
16 | const SelectorEngine = {
17 | find(selector, element = document.documentElement) {
18 | return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
19 | },
20 |
21 | findOne(selector, element = document.documentElement) {
22 | return Element.prototype.querySelector.call(element, selector);
23 | },
24 |
25 | children(element, selector) {
26 | return [].concat(...element.children).filter((child) => child.matches(selector));
27 | },
28 |
29 | parents(element, selector) {
30 | const parents = [];
31 |
32 | let ancestor = element.parentNode;
33 |
34 | while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
35 | if (ancestor.matches(selector)) {
36 | parents.push(ancestor);
37 | }
38 |
39 | ancestor = ancestor.parentNode;
40 | }
41 |
42 | return parents;
43 | },
44 |
45 | prev(element, selector) {
46 | let previous = element.previousElementSibling;
47 |
48 | while (previous) {
49 | if (previous.matches(selector)) {
50 | return [previous];
51 | }
52 |
53 | previous = previous.previousElementSibling;
54 | }
55 |
56 | return [];
57 | },
58 |
59 | next(element, selector) {
60 | let next = element.nextElementSibling;
61 |
62 | while (next) {
63 | if (next.matches(selector)) {
64 | return [next];
65 | }
66 |
67 | next = next.nextElementSibling;
68 | }
69 |
70 | return [];
71 | },
72 | };
73 |
74 | export default SelectorEngine;
75 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/dom/manipulator.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/manipulator.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | function normalizeData(val) {
9 | if (val === 'true') {
10 | return true;
11 | }
12 |
13 | if (val === 'false') {
14 | return false;
15 | }
16 |
17 | if (val === Number(val).toString()) {
18 | return Number(val);
19 | }
20 |
21 | if (val === '' || val === 'null') {
22 | return null;
23 | }
24 |
25 | return val;
26 | }
27 |
28 | function normalizeDataKey(key) {
29 | return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
30 | }
31 |
32 | const Manipulator = {
33 | setDataAttribute(element, key, value) {
34 | element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
35 | },
36 |
37 | removeDataAttribute(element, key) {
38 | element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
39 | },
40 |
41 | getDataAttributes(element) {
42 | if (!element) {
43 | return {};
44 | }
45 |
46 | const attributes = {};
47 |
48 | Object.keys(element.dataset)
49 | .filter((key) => key.startsWith('bs'))
50 | .forEach((key) => {
51 | let pureKey = key.replace(/^bs/, '');
52 | pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
53 | attributes[pureKey] = normalizeData(element.dataset[key]);
54 | });
55 |
56 | return attributes;
57 | },
58 |
59 | getDataAttribute(element, key) {
60 | return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
61 | },
62 |
63 | offset(element) {
64 | const rect = element.getBoundingClientRect();
65 |
66 | return {
67 | top: rect.top + document.body.scrollTop,
68 | left: rect.left + document.body.scrollLeft,
69 | };
70 | },
71 |
72 | position(element) {
73 | return {
74 | top: element.offsetTop,
75 | left: element.offsetLeft,
76 | };
77 | },
78 | };
79 |
80 | export default Manipulator;
81 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/lib/event-manager.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | class EventElement {
3 | constructor(element) {
4 | this.element = element;
5 | this.handlers = {};
6 | }
7 |
8 | bind(eventName, handler) {
9 | if (typeof this.handlers[eventName] === 'undefined') {
10 | this.handlers[eventName] = [];
11 | }
12 | this.handlers[eventName].push(handler);
13 | this.element.addEventListener(eventName, handler, false);
14 | }
15 |
16 | unbind(eventName, target) {
17 | this.handlers[eventName] = this.handlers[eventName].filter((handler) => {
18 | if (target && handler !== target) {
19 | return true;
20 | }
21 | this.element.removeEventListener(eventName, handler, false);
22 | return false;
23 | });
24 | }
25 |
26 | unbindAll() {
27 | for (const name in this.handlers) {
28 | this.unbind(name);
29 | }
30 | }
31 |
32 | get isEmpty() {
33 | return Object.keys(this.handlers).every((key) => this.handlers[key].length === 0);
34 | }
35 | }
36 |
37 | export default class EventManager {
38 | constructor() {
39 | this.eventElements = [];
40 | }
41 |
42 | eventElement(element) {
43 | let ee = this.eventElements.filter((ee) => ee.element === element)[0];
44 | if (!ee) {
45 | ee = new EventElement(element);
46 | this.eventElements.push(ee);
47 | }
48 | return ee;
49 | }
50 |
51 | bind(element, eventName, handler) {
52 | this.eventElement(element).bind(eventName, handler);
53 | }
54 |
55 | unbind(element, eventName, handler) {
56 | const ee = this.eventElement(element);
57 | ee.unbind(eventName, handler);
58 |
59 | if (ee.isEmpty) {
60 | // remove
61 | this.eventElements.splice(this.eventElements.indexOf(ee), 1);
62 | }
63 | }
64 |
65 | unbindAll() {
66 | this.eventElements.forEach((e) => e.unbindAll());
67 | this.eventElements = [];
68 | }
69 |
70 | once(element, eventName, handler) {
71 | const ee = this.eventElement(element);
72 | const onceHandler = (evt) => {
73 | ee.unbind(eventName, onceHandler);
74 | handler(evt);
75 | };
76 | ee.bind(eventName, onceHandler);
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/dom/manipulator.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): dom/manipulator.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | function normalizeData(val) {
9 | if (val === 'true') {
10 | return true;
11 | }
12 |
13 | if (val === 'false') {
14 | return false;
15 | }
16 |
17 | if (val === Number(val).toString()) {
18 | return Number(val);
19 | }
20 |
21 | if (val === '' || val === 'null') {
22 | return null;
23 | }
24 |
25 | return val;
26 | }
27 |
28 | function normalizeDataKey(key) {
29 | return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
30 | }
31 |
32 | const Manipulator = {
33 | setDataAttribute(element, key, value) {
34 | element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);
35 | },
36 |
37 | removeDataAttribute(element, key) {
38 | element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);
39 | },
40 |
41 | getDataAttributes(element) {
42 | if (!element) {
43 | return {};
44 | }
45 |
46 | const attributes = {};
47 |
48 | Object.keys(element.dataset)
49 | .filter((key) => key.startsWith('mdb'))
50 | .forEach((key) => {
51 | let pureKey = key.replace(/^mdb/, '');
52 | pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
53 | attributes[pureKey] = normalizeData(element.dataset[key]);
54 | });
55 |
56 | return attributes;
57 | },
58 |
59 | getDataAttribute(element, key) {
60 | return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));
61 | },
62 |
63 | offset(element) {
64 | const rect = element.getBoundingClientRect();
65 |
66 | return {
67 | top: rect.top + document.body.scrollTop,
68 | left: rect.left + document.body.scrollLeft,
69 | };
70 | },
71 |
72 | position(element) {
73 | return {
74 | top: element.offsetTop,
75 | left: element.offsetLeft,
76 | };
77 | },
78 | };
79 |
80 | export default Manipulator;
81 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/__construct.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | __construct
6 |
7 |
8 |
9 | __construct
10 | __construct([string orientation [, string unit [, mixed size]]])
11 | Description
12 | This is the class constructor. It allows to set up the page size, the orientation and the
13 | unit of measure used in all methods (except for font sizes).
14 | Parameters
15 |
16 | orientation
17 |
18 | Default page orientation. Possible values are (case insensitive):
19 |
20 | P or Portrait
21 | L or Landscape
22 |
23 | Default value is P.
24 |
25 | unit
26 |
27 | User unit. Possible values are:
28 |
29 | pt: point
30 | mm: millimeter
31 | cm: centimeter
32 | in: inch
33 |
34 | A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This
35 | is a very common unit in typography; font sizes are expressed in that unit.
36 |
37 |
38 | Default value is mm.
39 |
40 | size
41 |
42 | The size used for pages. It can be either one of the following values (case insensitive):
43 |
44 | A3
45 | A4
46 | A5
47 | Letter
48 | Legal
49 |
50 | or an array containing the width and the height (expressed in the unit given by unit).
51 |
52 | Default value is A4.
53 |
54 |
55 | Example
56 | Example with a custom 100x150 mm page size:
57 |
58 |
$pdf = new FPDF('P','mm',array(100,150));
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/backend/config/DB.php:
--------------------------------------------------------------------------------
1 | host . ';dbname=' . $this->dbname;
18 | $optins = array(
19 | PDO::ATTR_PERSISTENT => true,
20 | PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
21 | );
22 |
23 | try {
24 | $this->conn = new PDO($connection, $this->user, $this->pass, $optins);
25 | } catch (PDOExeption $err) {
26 | $this->error = $err->getMessage();
27 | echo $this->error;
28 | }
29 |
30 | }
31 |
32 | public function query($sql)
33 | {
34 | $this->stmt = $this->conn->prepare($sql);
35 | }
36 |
37 | public function bind($param, $value, $type = null)
38 | {
39 | if (is_null($type)) {
40 | switch (true) {
41 | case is_int($value):
42 | $type = PDO::PARAM_INT;
43 | break;
44 | case is_bool($value):
45 | $type = PDO::PARAM_BOOL;
46 | break;
47 | case is_null($value):
48 | $type = PDO::PARAM_NULL;
49 | break;
50 | default:
51 | $type = PDO::PARAM_STR;
52 | }
53 | }
54 | $this->stmt->bindValue($param, $value, $type);
55 | }
56 |
57 |
58 | public function execute()
59 | {
60 | return $this->stmt->execute();
61 | }
62 |
63 |
64 | public function all()
65 | {
66 | $this->execute();
67 | return $this->stmt->fetchAll(PDO::FETCH_OBJ);
68 | }
69 |
70 | public function single()
71 | {
72 | $this->execute();
73 | return $this->stmt->fetch(PDO::FETCH_OBJ);
74 | }
75 |
76 | public function rowCount()
77 | {
78 | return $this->stmt->rowCount();
79 | }
80 |
81 | public function lastInsertId()
82 | {
83 | return $this->dbh->lastInsertId();
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/front/src/components/LoginForm.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
25 |
63 |
64 |
88 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/dom/selector-engine.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta2): dom/selector-engine.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | /**
9 | * ------------------------------------------------------------------------
10 | * Constants
11 | * ------------------------------------------------------------------------
12 | */
13 |
14 | const NODE_TEXT = 3;
15 |
16 | const SelectorEngine = {
17 | closest(element, selector) {
18 | return element.closest(selector);
19 | },
20 |
21 | matches(element, selector) {
22 | return element.matches(selector);
23 | },
24 |
25 | find(selector, element = document.documentElement) {
26 | return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
27 | },
28 |
29 | findOne(selector, element = document.documentElement) {
30 | return Element.prototype.querySelector.call(element, selector);
31 | },
32 |
33 | children(element, selector) {
34 | const children = [].concat(...element.children);
35 |
36 | return children.filter((child) => child.matches(selector));
37 | },
38 |
39 | parents(element, selector) {
40 | const parents = [];
41 |
42 | let ancestor = element.parentNode;
43 |
44 | while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
45 | if (this.matches(ancestor, selector)) {
46 | parents.push(ancestor);
47 | }
48 |
49 | ancestor = ancestor.parentNode;
50 | }
51 |
52 | return parents;
53 | },
54 |
55 | prev(element, selector) {
56 | let previous = element.previousElementSibling;
57 |
58 | while (previous) {
59 | if (previous.matches(selector)) {
60 | return [previous];
61 | }
62 |
63 | previous = previous.previousElementSibling;
64 | }
65 |
66 | return [];
67 | },
68 |
69 | next(element, selector) {
70 | let next = element.nextElementSibling;
71 |
72 | while (next) {
73 | if (this.matches(next, selector)) {
74 | return [next];
75 | }
76 |
77 | next = next.nextElementSibling;
78 | }
79 |
80 | return [];
81 | },
82 | };
83 |
84 | export default SelectorEngine;
85 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/base-component.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap base-component.js v5.0.0-beta3 (https://getbootstrap.com/)
3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | */
6 | (function (global, factory) {
7 | typeof exports === 'object' && typeof module !== 'undefined'
8 | ? (module.exports = factory(require('./dom/data.js')))
9 | : typeof define === 'function' && define.amd
10 | ? define(['./dom/data'], factory)
11 | : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),
12 | (global.Base = factory(global.Data)));
13 | })(this, function (Data) {
14 | 'use strict';
15 |
16 | function _interopDefaultLegacy(e) {
17 | return e && typeof e === 'object' && 'default' in e ? e : { default: e };
18 | }
19 |
20 | var Data__default = /*#__PURE__*/ _interopDefaultLegacy(Data);
21 |
22 | /**
23 | * --------------------------------------------------------------------------
24 | * Bootstrap (v5.0.0-beta3): base-component.js
25 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
26 | * --------------------------------------------------------------------------
27 | */
28 | /**
29 | * ------------------------------------------------------------------------
30 | * Constants
31 | * ------------------------------------------------------------------------
32 | */
33 |
34 | const VERSION = '5.0.0-beta3';
35 |
36 | class BaseComponent {
37 | constructor(element) {
38 | element = typeof element === 'string' ? document.querySelector(element) : element;
39 |
40 | if (!element) {
41 | return;
42 | }
43 |
44 | this._element = element;
45 | Data__default['default'].set(this._element, this.constructor.DATA_KEY, this);
46 | }
47 |
48 | dispose() {
49 | Data__default['default'].remove(this._element, this.constructor.DATA_KEY);
50 | this._element = null;
51 | }
52 | /** Static */
53 |
54 | static getInstance(element) {
55 | return Data__default['default'].get(element, this.DATA_KEY);
56 | }
57 |
58 | static get VERSION() {
59 | return VERSION;
60 | }
61 | }
62 |
63 | return BaseComponent;
64 | });
65 | //# sourceMappingURL=base-component.js.map
66 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/addpage.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AddPage
6 |
7 |
8 |
9 | AddPage
10 | AddPage([string orientation [, mixed size [, int rotation]]])
11 | Description
12 | Adds a new page to the document. If a page is already present, the Footer() method is called
13 | first to output the footer. Then the page is added, the current position set to the top-left
14 | corner according to the left and top margins, and Header() is called to display the header.
15 |
16 | The font which was set before calling is automatically restored. There is no need to call
17 | SetFont() again if you want to continue with the same font. The same is true for colors and
18 | line width.
19 |
20 | The origin of the coordinate system is at the top-left corner and increasing ordinates go
21 | downwards.
22 | Parameters
23 |
24 | orientation
25 |
26 | Page orientation. Possible values are (case insensitive):
27 |
28 | P or Portrait
29 | L or Landscape
30 |
31 | The default value is the one passed to the constructor.
32 |
33 | size
34 |
35 | Page size. It can be either one of the following values (case insensitive):
36 |
37 | A3
38 | A4
39 | A5
40 | Letter
41 | Legal
42 |
43 | or an array containing the width and the height (expressed in user unit).
44 |
45 | The default value is the one passed to the constructor.
46 |
47 | rotation
48 |
49 | Angle by which to rotate the page. It must be a multiple of 90; positive values
50 | mean clockwise rotation. The default value is 0.
51 |
52 |
53 | See also
54 | __construct ,
55 | Header ,
56 | Footer ,
57 | SetMargins
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/front/src/components/AddTask.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
25 |
65 |
66 |
90 |
--------------------------------------------------------------------------------
/vendor/composer/installed.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | {
4 | "name": "firebase/php-jwt",
5 | "version": "v5.2.1",
6 | "version_normalized": "5.2.1.0",
7 | "source": {
8 | "type": "git",
9 | "url": "https://github.com/firebase/php-jwt.git",
10 | "reference": "f42c9110abe98dd6cfe9053c49bc86acc70b2d23"
11 | },
12 | "dist": {
13 | "type": "zip",
14 | "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f42c9110abe98dd6cfe9053c49bc86acc70b2d23",
15 | "reference": "f42c9110abe98dd6cfe9053c49bc86acc70b2d23",
16 | "shasum": ""
17 | },
18 | "require": {
19 | "php": ">=5.3.0"
20 | },
21 | "require-dev": {
22 | "phpunit/phpunit": ">=4.8 <=9"
23 | },
24 | "time": "2021-02-12T00:02:00+00:00",
25 | "type": "library",
26 | "installation-source": "dist",
27 | "autoload": {
28 | "psr-4": {
29 | "Firebase\\JWT\\": "src"
30 | }
31 | },
32 | "notification-url": "https://packagist.org/downloads/",
33 | "license": [
34 | "BSD-3-Clause"
35 | ],
36 | "authors": [
37 | {
38 | "name": "Neuman Vong",
39 | "email": "neuman+pear@twilio.com",
40 | "role": "Developer"
41 | },
42 | {
43 | "name": "Anant Narayanan",
44 | "email": "anant@php.net",
45 | "role": "Developer"
46 | }
47 | ],
48 | "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
49 | "homepage": "https://github.com/firebase/php-jwt",
50 | "keywords": [
51 | "jwt",
52 | "php"
53 | ],
54 | "support": {
55 | "issues": "https://github.com/firebase/php-jwt/issues",
56 | "source": "https://github.com/firebase/php-jwt/tree/v5.2.1"
57 | },
58 | "install-path": "../firebase/php-jwt"
59 | }
60 | ],
61 | "dev": true,
62 | "dev-package-names": []
63 | }
64 |
--------------------------------------------------------------------------------
/front/src/views/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
14 |
15 |
67 |
--------------------------------------------------------------------------------
/front/src/views/Register.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
63 |
64 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/dom/data.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap data.js v5.0.0-beta3 (https://getbootstrap.com/)
3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | */
6 | (function (global, factory) {
7 | typeof exports === 'object' && typeof module !== 'undefined'
8 | ? (module.exports = factory())
9 | : typeof define === 'function' && define.amd
10 | ? define(factory)
11 | : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),
12 | (global.Data = factory()));
13 | })(this, function () {
14 | 'use strict';
15 |
16 | /**
17 | * --------------------------------------------------------------------------
18 | * Bootstrap (v5.0.0-beta3): dom/data.js
19 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
20 | * --------------------------------------------------------------------------
21 | */
22 |
23 | /**
24 | * ------------------------------------------------------------------------
25 | * Constants
26 | * ------------------------------------------------------------------------
27 | */
28 | const elementMap = new Map();
29 | var data = {
30 | set(element, key, instance) {
31 | if (!elementMap.has(element)) {
32 | elementMap.set(element, new Map());
33 | }
34 |
35 | const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
36 | // can be removed later when multiple key/instances are fine to be used
37 |
38 | if (!instanceMap.has(key) && instanceMap.size !== 0) {
39 | // eslint-disable-next-line no-console
40 | console.error(
41 | `Bootstrap doesn't allow more than one instance per element. Bound instance: ${
42 | Array.from(instanceMap.keys())[0]
43 | }.`
44 | );
45 | return;
46 | }
47 |
48 | instanceMap.set(key, instance);
49 | },
50 |
51 | get(element, key) {
52 | if (elementMap.has(element)) {
53 | return elementMap.get(element).get(key) || null;
54 | }
55 |
56 | return null;
57 | },
58 |
59 | remove(element, key) {
60 | if (!elementMap.has(element)) {
61 | return;
62 | }
63 |
64 | const instanceMap = elementMap.get(element);
65 | instanceMap.delete(key); // free up element references if there are no instances left for an element
66 |
67 | if (instanceMap.size === 0) {
68 | elementMap.delete(element);
69 | }
70 | },
71 | };
72 |
73 | return data;
74 | });
75 | //# sourceMappingURL=data.js.map
76 |
--------------------------------------------------------------------------------
/backend/models/UserModel.php:
--------------------------------------------------------------------------------
1 | db = new DB();
10 | }
11 |
12 | public function getUsers()
13 | {
14 | $this->db->query("SELECT * FROM user");
15 | return $this->db->all();
16 | }
17 |
18 | public function getUserByRef($reference)
19 | {
20 | $this->db->query("SELECT * FROM user WHERE reference = :reference");
21 | $this->db->bind(':reference', $reference);
22 | return $this->db->single();
23 | }
24 |
25 | public function getUserByEmail($email)
26 | {
27 | $this->db->query("SELECT * FROM user WHERE email = :email");
28 | $this->db->bind(':email', $email);
29 | return $this->db->single();
30 | }
31 |
32 | public function getUserByRole($role)
33 | {
34 | echo $role;
35 | $this->db->query("SELECT * FROM user WHERE role = :role");
36 | $this->db->bind(':role', $role);
37 | return $this->db->all();
38 | }
39 |
40 |
41 | public function uniqidReal($lenght = 8) {
42 | if (function_exists("random_bytes")) {
43 | $bytes = random_bytes(ceil($lenght / 2));
44 | } elseif (function_exists("openssl_random_pseudo_bytes")) {
45 | $bytes = openssl_random_pseudo_bytes(ceil($lenght / 2));
46 | } else {
47 | throw new Exception("no cryptographically secure random function available");
48 | }
49 | return substr(bin2hex($bytes), 0, $lenght);
50 | }
51 |
52 | public function register($data)
53 | {
54 | $uniqueRef=strtoupper($this->uniqidReal());
55 |
56 | try {
57 | $this->db->query("INSERT INTO
58 | user
59 | SET
60 | email = :email,
61 | first_name = :first_name,
62 | last_name = :last_name,
63 | -- phone = :phone,
64 | password = :password,
65 | reference = :reference
66 |
67 | ");
68 |
69 | $this->db->bind(':email', $data->email);
70 | $this->db->bind(':first_name', $data->first_name);
71 | $this->db->bind(':last_name', $data->last_name);
72 | // $this->db->bind(':phone', $data->phone);
73 | $this->db->bind(':password', $data->password);
74 | $this->db->bind(':reference', $uniqueRef);
75 | $this->db->single();
76 | } catch (\PDOExeption $err) {
77 | return $err->getMessage();
78 | die();
79 | }
80 | return $this->getUserByRef($uniqueRef);
81 | }
82 |
83 |
84 |
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/vendor/fpdf/doc/multicell.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | MultiCell
6 |
7 |
8 |
9 | MultiCell
10 | MultiCell(float w, float h, string txt [, mixed border [, string align [, boolean fill]]])
11 | Description
12 | This method allows printing text with line breaks. They can be automatic (as soon as the
13 | text reaches the right border of the cell) or explicit (via the \n character). As many cells
14 | as necessary are output, one below the other.
15 |
16 | Text can be aligned, centered or justified. The cell block can be framed and the background
17 | painted.
18 | Parameters
19 |
20 | w
21 |
22 | Width of cells. If 0, they extend up to the right margin of the page.
23 |
24 | h
25 |
26 | Height of cells.
27 |
28 | txt
29 |
30 | String to print.
31 |
32 | border
33 |
34 | Indicates if borders must be drawn around the cell block. The value can be either a number:
35 |
36 | 0: no border
37 | 1: frame
38 |
39 | or a string containing some or all of the following characters (in any order):
40 |
41 | L: left
42 | T: top
43 | R: right
44 | B: bottom
45 |
46 | Default value: 0.
47 |
48 | align
49 |
50 | Sets the text alignment. Possible values are:
51 |
52 | L: left alignment
53 | C: center
54 | R: right alignment
55 | J: justification (default value)
56 |
57 |
58 | fill
59 |
60 | Indicates if the cell background must be painted (true) or transparent (false).
61 | Default value: false.
62 |
63 |
64 | See also
65 | SetFont ,
66 | SetDrawColor ,
67 | SetFillColor ,
68 | SetTextColor ,
69 | SetLineWidth ,
70 | Cell ,
71 | Write ,
72 | SetAutoPageBreak
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto4.php:
--------------------------------------------------------------------------------
1 | SetFont('Arial','B',15);
15 | $w = $this->GetStringWidth($title)+6;
16 | $this->SetX((210-$w)/2);
17 | $this->SetDrawColor(0,80,180);
18 | $this->SetFillColor(230,230,0);
19 | $this->SetTextColor(220,50,50);
20 | $this->SetLineWidth(1);
21 | $this->Cell($w,9,$title,1,1,'C',true);
22 | $this->Ln(10);
23 | // Save ordinate
24 | $this->y0 = $this->GetY();
25 | }
26 |
27 | function Footer()
28 | {
29 | // Page footer
30 | $this->SetY(-15);
31 | $this->SetFont('Arial','I',8);
32 | $this->SetTextColor(128);
33 | $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
34 | }
35 |
36 | function SetCol($col)
37 | {
38 | // Set position at a given column
39 | $this->col = $col;
40 | $x = 10+$col*65;
41 | $this->SetLeftMargin($x);
42 | $this->SetX($x);
43 | }
44 |
45 | function AcceptPageBreak()
46 | {
47 | // Method accepting or not automatic page break
48 | if($this->col<2)
49 | {
50 | // Go to next column
51 | $this->SetCol($this->col+1);
52 | // Set ordinate to top
53 | $this->SetY($this->y0);
54 | // Keep on page
55 | return false;
56 | }
57 | else
58 | {
59 | // Go back to first column
60 | $this->SetCol(0);
61 | // Page break
62 | return true;
63 | }
64 | }
65 |
66 | function ChapterTitle($num, $label)
67 | {
68 | // Title
69 | $this->SetFont('Arial','',12);
70 | $this->SetFillColor(200,220,255);
71 | $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
72 | $this->Ln(4);
73 | // Save ordinate
74 | $this->y0 = $this->GetY();
75 | }
76 |
77 | function ChapterBody($file)
78 | {
79 | // Read text file
80 | $txt = file_get_contents($file);
81 | // Font
82 | $this->SetFont('Times','',12);
83 | // Output text in a 6 cm width column
84 | $this->MultiCell(60,5,$txt);
85 | $this->Ln();
86 | // Mention
87 | $this->SetFont('','I');
88 | $this->Cell(0,5,'(end of excerpt)');
89 | // Go back to first column
90 | $this->SetCol(0);
91 | }
92 |
93 | function PrintChapter($num, $title, $file)
94 | {
95 | // Add chapter
96 | $this->AddPage();
97 | $this->ChapterTitle($num,$title);
98 | $this->ChapterBody($file);
99 | }
100 | }
101 |
102 | $pdf = new PDF();
103 | $title = '20000 Leagues Under the Seas';
104 | $pdf->SetTitle($title);
105 | $pdf->SetAuthor('Jules Verne');
106 | $pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
107 | $pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
108 | $pdf->Output();
109 | ?>
110 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/free/alert.js:
--------------------------------------------------------------------------------
1 | import { getjQuery, onDOMContentLoaded } from '../mdb/util/index';
2 | import EventHandler from '../mdb/dom/event-handler';
3 | import SelectorEngine from '../mdb/dom/selector-engine';
4 | import BSAlert from '../bootstrap/mdb-prefix/alert';
5 |
6 | /**
7 | * ------------------------------------------------------------------------
8 | * Constants
9 | * ------------------------------------------------------------------------
10 | */
11 |
12 | const NAME = 'alert';
13 | const DATA_KEY = `mdb.${NAME}`;
14 | const EVENT_KEY = `.${DATA_KEY}`;
15 |
16 | const EVENT_CLOSE_BS = 'close.bs.alert';
17 | const EVENT_CLOSED_BS = 'closed.bs.alert';
18 |
19 | const EVENT_CLOSE = `close${EVENT_KEY}`;
20 | const EVENT_CLOSED = `closed${EVENT_KEY}`;
21 |
22 | const SELECTOR_ALERT = '.alert';
23 |
24 | class Alert extends BSAlert {
25 | constructor(element, data = {}) {
26 | super(element, data);
27 |
28 | this._init();
29 | }
30 |
31 | dispose() {
32 | EventHandler.off(this._element, EVENT_CLOSE_BS);
33 | EventHandler.off(this._element, EVENT_CLOSED_BS);
34 |
35 | super.dispose();
36 | }
37 |
38 | // Getters
39 | static get NAME() {
40 | return NAME;
41 | }
42 |
43 | // Private
44 | _init() {
45 | this._bindCloseEvent();
46 | this._bindClosedEvent();
47 | }
48 |
49 | _bindCloseEvent() {
50 | EventHandler.on(this._element, EVENT_CLOSE_BS, () => {
51 | EventHandler.trigger(this._element, EVENT_CLOSE);
52 | });
53 | }
54 |
55 | _bindClosedEvent() {
56 | EventHandler.on(this._element, EVENT_CLOSED_BS, () => {
57 | EventHandler.trigger(this._element, EVENT_CLOSED);
58 | });
59 | }
60 | }
61 |
62 | /**
63 | * ------------------------------------------------------------------------
64 | * Data Api implementation - auto initialization
65 | * ------------------------------------------------------------------------
66 | */
67 |
68 | SelectorEngine.find(SELECTOR_ALERT).forEach((el) => {
69 | let instance = Alert.getInstance(el);
70 | if (!instance) {
71 | instance = new Alert(el);
72 | }
73 | });
74 |
75 | /**
76 | * ------------------------------------------------------------------------
77 | * jQuery
78 | * ------------------------------------------------------------------------
79 | * add .rating to jQuery only if jQuery is present
80 | */
81 | onDOMContentLoaded(() => {
82 | const $ = getjQuery();
83 |
84 | if ($) {
85 | const JQUERY_NO_CONFLICT = $.fn[NAME];
86 | $.fn[NAME] = Alert.jQueryInterface;
87 | $.fn[NAME].Constructor = Alert;
88 | $.fn[NAME].noConflict = () => {
89 | $.fn[NAME] = JQUERY_NO_CONFLICT;
90 | return Alert.jQueryInterface;
91 | };
92 | }
93 | });
94 |
95 | export default Alert;
96 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto5.php:
--------------------------------------------------------------------------------
1 | Cell(40,7,$col,1);
23 | $this->Ln();
24 | // Data
25 | foreach($data as $row)
26 | {
27 | foreach($row as $col)
28 | $this->Cell(40,6,$col,1);
29 | $this->Ln();
30 | }
31 | }
32 |
33 | // Better table
34 | function ImprovedTable($header, $data)
35 | {
36 | // Column widths
37 | $w = array(40, 35, 40, 45);
38 | // Header
39 | for($i=0;$iCell($w[$i],7,$header[$i],1,0,'C');
41 | $this->Ln();
42 | // Data
43 | foreach($data as $row)
44 | {
45 | $this->Cell($w[0],6,$row[0],'LR');
46 | $this->Cell($w[1],6,$row[1],'LR');
47 | $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');
48 | $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');
49 | $this->Ln();
50 | }
51 | // Closing line
52 | $this->Cell(array_sum($w),0,'','T');
53 | }
54 |
55 | // Colored table
56 | function FancyTable($header, $data)
57 | {
58 | // Colors, line width and bold font
59 | $this->SetFillColor(255,0,0);
60 | $this->SetTextColor(255);
61 | $this->SetDrawColor(128,0,0);
62 | $this->SetLineWidth(.3);
63 | $this->SetFont('','B');
64 | // Header
65 | $w = array(40, 35, 40, 45);
66 | for($i=0;$iCell($w[$i],7,$header[$i],1,0,'C',true);
68 | $this->Ln();
69 | // Color and font restoration
70 | $this->SetFillColor(224,235,255);
71 | $this->SetTextColor(0);
72 | $this->SetFont('');
73 | // Data
74 | $fill = false;
75 | foreach($data as $row)
76 | {
77 | $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
78 | $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
79 | $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill);
80 | $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);
81 | $this->Ln();
82 | $fill = !$fill;
83 | }
84 | // Closing line
85 | $this->Cell(array_sum($w),0,'','T');
86 | }
87 | }
88 |
89 | $pdf = new PDF();
90 | // Column headings
91 | $header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)');
92 | // Data loading
93 | $data = $pdf->LoadData('countries.txt');
94 | $pdf->SetFont('Arial','',14);
95 | $pdf->AddPage();
96 | $pdf->BasicTable($header,$data);
97 | $pdf->AddPage();
98 | $pdf->ImprovedTable($header,$data);
99 | $pdf->AddPage();
100 | $pdf->FancyTable($header,$data);
101 | $pdf->Output();
102 | ?>
103 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/perfect-scrollbar/handlers/drag-thumb.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | import * as CSS from '../lib/css';
4 | import * as DOM from '../lib/dom';
5 | import cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';
6 | import updateGeometry from '../update-geometry';
7 | import { toInt } from '../lib/util';
8 |
9 | export default function (i) {
10 | bindMouseScrollHandler(i, [
11 | 'containerWidth',
12 | 'contentWidth',
13 | 'pageX',
14 | 'railXWidth',
15 | 'scrollbarX',
16 | 'scrollbarXWidth',
17 | 'scrollLeft',
18 | 'x',
19 | 'scrollbarXRail',
20 | ]);
21 | bindMouseScrollHandler(i, [
22 | 'containerHeight',
23 | 'contentHeight',
24 | 'pageY',
25 | 'railYHeight',
26 | 'scrollbarY',
27 | 'scrollbarYHeight',
28 | 'scrollTop',
29 | 'y',
30 | 'scrollbarYRail',
31 | ]);
32 | }
33 |
34 | function bindMouseScrollHandler(
35 | i,
36 | [
37 | containerHeight,
38 | contentHeight,
39 | pageY,
40 | railYHeight,
41 | scrollbarY,
42 | scrollbarYHeight,
43 | scrollTop,
44 | y,
45 | scrollbarYRail,
46 | ]
47 | ) {
48 | const element = i.element;
49 |
50 | let startingScrollTop = null;
51 | let startingMousePageY = null;
52 | let scrollBy = null;
53 |
54 | function mouseMoveHandler(e) {
55 | if (e.touches && e.touches[0]) {
56 | e[pageY] = e.touches[0].pageY;
57 | }
58 | element[scrollTop] = startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);
59 | addScrollingClass(i, y);
60 | updateGeometry(i);
61 |
62 | e.stopPropagation();
63 | e.preventDefault();
64 | }
65 |
66 | function mouseUpHandler() {
67 | removeScrollingClass(i, y);
68 | i[scrollbarYRail].classList.remove(cls.state.clicking);
69 | i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
70 | }
71 |
72 | function bindMoves(e, touchMode) {
73 | startingScrollTop = element[scrollTop];
74 | if (touchMode && e.touches) {
75 | e[pageY] = e.touches[0].pageY;
76 | }
77 | startingMousePageY = e[pageY];
78 | scrollBy = (i[contentHeight] - i[containerHeight]) / (i[railYHeight] - i[scrollbarYHeight]);
79 | if (!touchMode) {
80 | i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
81 | i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
82 | e.preventDefault();
83 | } else {
84 | i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);
85 | }
86 |
87 | i[scrollbarYRail].classList.add(cls.state.clicking);
88 |
89 | e.stopPropagation();
90 | }
91 |
92 | i.event.bind(i[scrollbarY], 'mousedown', (e) => {
93 | bindMoves(e);
94 | });
95 | i.event.bind(i[scrollbarY], 'touchstart', (e) => {
96 | bindMoves(e, true);
97 | });
98 | }
99 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "2e81f436193da5b40f951c6849eda663",
8 | "packages": [
9 | {
10 | "name": "firebase/php-jwt",
11 | "version": "v5.2.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/firebase/php-jwt.git",
15 | "reference": "f42c9110abe98dd6cfe9053c49bc86acc70b2d23"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f42c9110abe98dd6cfe9053c49bc86acc70b2d23",
20 | "reference": "f42c9110abe98dd6cfe9053c49bc86acc70b2d23",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=5.3.0"
25 | },
26 | "require-dev": {
27 | "phpunit/phpunit": ">=4.8 <=9"
28 | },
29 | "type": "library",
30 | "autoload": {
31 | "psr-4": {
32 | "Firebase\\JWT\\": "src"
33 | }
34 | },
35 | "notification-url": "https://packagist.org/downloads/",
36 | "license": [
37 | "BSD-3-Clause"
38 | ],
39 | "authors": [
40 | {
41 | "name": "Neuman Vong",
42 | "email": "neuman+pear@twilio.com",
43 | "role": "Developer"
44 | },
45 | {
46 | "name": "Anant Narayanan",
47 | "email": "anant@php.net",
48 | "role": "Developer"
49 | }
50 | ],
51 | "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
52 | "homepage": "https://github.com/firebase/php-jwt",
53 | "keywords": [
54 | "jwt",
55 | "php"
56 | ],
57 | "support": {
58 | "issues": "https://github.com/firebase/php-jwt/issues",
59 | "source": "https://github.com/firebase/php-jwt/tree/v5.2.1"
60 | },
61 | "time": "2021-02-12T00:02:00+00:00"
62 | }
63 | ],
64 | "packages-dev": [],
65 | "aliases": [],
66 | "minimum-stability": "stable",
67 | "stability-flags": [],
68 | "prefer-stable": false,
69 | "prefer-lowest": false,
70 | "platform": [],
71 | "platform-dev": [],
72 | "plugin-api-version": "2.0.0"
73 | }
74 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/util/scrollbar.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): util/scrollBar.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import SelectorEngine from '../dom/selector-engine';
9 | import Manipulator from '../dom/manipulator';
10 |
11 | const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed';
12 | const SELECTOR_STICKY_CONTENT = '.sticky-top';
13 |
14 | const getWidth = () => {
15 | // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
16 | const documentWidth = document.documentElement.clientWidth;
17 | return Math.abs(window.innerWidth - documentWidth);
18 | };
19 |
20 | const hide = (width = getWidth()) => {
21 | document.body.style.overflow = 'hidden';
22 | _setElementAttributes(
23 | SELECTOR_FIXED_CONTENT,
24 | 'paddingRight',
25 | (calculatedValue) => calculatedValue + width
26 | );
27 | _setElementAttributes(
28 | SELECTOR_STICKY_CONTENT,
29 | 'marginRight',
30 | (calculatedValue) => calculatedValue - width
31 | );
32 | _setElementAttributes('body', 'paddingRight', (calculatedValue) => calculatedValue + width);
33 | };
34 |
35 | const _setElementAttributes = (selector, styleProp, callback) => {
36 | const scrollbarWidth = getWidth();
37 | SelectorEngine.find(selector).forEach((element) => {
38 | if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {
39 | return;
40 | }
41 |
42 | const actualValue = element.style[styleProp];
43 | const calculatedValue = window.getComputedStyle(element)[styleProp];
44 | Manipulator.setDataAttribute(element, styleProp, actualValue);
45 | element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
46 | });
47 | };
48 |
49 | const reset = () => {
50 | document.body.style.overflow = 'auto';
51 | _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
52 | _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
53 | _resetElementAttributes('body', 'paddingRight');
54 | };
55 |
56 | const _resetElementAttributes = (selector, styleProp) => {
57 | SelectorEngine.find(selector).forEach((element) => {
58 | const value = Manipulator.getDataAttribute(element, styleProp);
59 | if (typeof value === 'undefined' && element === document.body) {
60 | element.style.removeProperty(styleProp);
61 | } else {
62 | Manipulator.removeDataAttribute(element, styleProp);
63 | element.style[styleProp] = value;
64 | }
65 | });
66 | };
67 |
68 | const isBodyOverflowing = () => {
69 | return getWidth() > 0;
70 | };
71 |
72 | export { getWidth, hide, isBodyOverflowing, reset };
73 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/util/scrollbar.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): util/scrollBar.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import SelectorEngine from '../dom/selector-engine';
9 | import Manipulator from '../dom/manipulator';
10 |
11 | const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed';
12 | const SELECTOR_STICKY_CONTENT = '.sticky-top';
13 |
14 | const getWidth = () => {
15 | // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
16 | const documentWidth = document.documentElement.clientWidth;
17 | return Math.abs(window.innerWidth - documentWidth);
18 | };
19 |
20 | const hide = (width = getWidth()) => {
21 | document.body.style.overflow = 'hidden';
22 | _setElementAttributes(
23 | SELECTOR_FIXED_CONTENT,
24 | 'paddingRight',
25 | (calculatedValue) => calculatedValue + width
26 | );
27 | _setElementAttributes(
28 | SELECTOR_STICKY_CONTENT,
29 | 'marginRight',
30 | (calculatedValue) => calculatedValue - width
31 | );
32 | _setElementAttributes('body', 'paddingRight', (calculatedValue) => calculatedValue + width);
33 | };
34 |
35 | const _setElementAttributes = (selector, styleProp, callback) => {
36 | const scrollbarWidth = getWidth();
37 | SelectorEngine.find(selector).forEach((element) => {
38 | if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {
39 | return;
40 | }
41 |
42 | const actualValue = element.style[styleProp];
43 | const calculatedValue = window.getComputedStyle(element)[styleProp];
44 | Manipulator.setDataAttribute(element, styleProp, actualValue);
45 | element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
46 | });
47 | };
48 |
49 | const reset = () => {
50 | document.body.style.overflow = 'auto';
51 | _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
52 | _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
53 | _resetElementAttributes('body', 'paddingRight');
54 | };
55 |
56 | const _resetElementAttributes = (selector, styleProp) => {
57 | SelectorEngine.find(selector).forEach((element) => {
58 | const value = Manipulator.getDataAttribute(element, styleProp);
59 | if (typeof value === 'undefined' && element === document.body) {
60 | element.style.removeProperty(styleProp);
61 | } else {
62 | Manipulator.removeDataAttribute(element, styleProp);
63 | element.style[styleProp] = value;
64 | }
65 | });
66 | };
67 |
68 | const isBodyOverflowing = () => {
69 | return getWidth() > 0;
70 | };
71 |
72 | export { getWidth, hide, isBodyOverflowing, reset };
73 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/src/button.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): button.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import { defineJQueryPlugin } from './util/index';
9 | import Data from './dom/data';
10 | import EventHandler from './dom/event-handler';
11 | import BaseComponent from './base-component';
12 |
13 | /**
14 | * ------------------------------------------------------------------------
15 | * Constants
16 | * ------------------------------------------------------------------------
17 | */
18 |
19 | const NAME = 'button';
20 | const DATA_KEY = 'bs.button';
21 | const EVENT_KEY = `.${DATA_KEY}`;
22 | const DATA_API_KEY = '.data-api';
23 |
24 | const CLASS_NAME_ACTIVE = 'active';
25 |
26 | const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
27 |
28 | const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
29 |
30 | /**
31 | * ------------------------------------------------------------------------
32 | * Class Definition
33 | * ------------------------------------------------------------------------
34 | */
35 |
36 | class Button extends BaseComponent {
37 | // Getters
38 |
39 | static get DATA_KEY() {
40 | return DATA_KEY;
41 | }
42 |
43 | // Public
44 |
45 | toggle() {
46 | // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
47 | this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
48 | }
49 |
50 | // Static
51 |
52 | static jQueryInterface(config) {
53 | return this.each(function () {
54 | let data = Data.get(this, DATA_KEY);
55 |
56 | if (!data) {
57 | data = new Button(this);
58 | }
59 |
60 | if (config === 'toggle') {
61 | data[config]();
62 | }
63 | });
64 | }
65 | }
66 |
67 | /**
68 | * ------------------------------------------------------------------------
69 | * Data Api implementation
70 | * ------------------------------------------------------------------------
71 | */
72 |
73 | EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {
74 | event.preventDefault();
75 |
76 | const button = event.target.closest(SELECTOR_DATA_TOGGLE);
77 |
78 | let data = Data.get(button, DATA_KEY);
79 | if (!data) {
80 | data = new Button(button);
81 | }
82 |
83 | data.toggle();
84 | });
85 |
86 | /**
87 | * ------------------------------------------------------------------------
88 | * jQuery
89 | * ------------------------------------------------------------------------
90 | * add .Button to jQuery only if jQuery is present
91 | */
92 |
93 | defineJQueryPlugin(NAME, Button);
94 |
95 | export default Button;
96 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/mdb-prefix/button.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta3): button.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | import { defineJQueryPlugin } from './util/index';
9 | import Data from './dom/data';
10 | import EventHandler from './dom/event-handler';
11 | import BaseComponent from './base-component';
12 |
13 | /**
14 | * ------------------------------------------------------------------------
15 | * Constants
16 | * ------------------------------------------------------------------------
17 | */
18 |
19 | const NAME = 'button';
20 | const DATA_KEY = 'bs.button';
21 | const EVENT_KEY = `.${DATA_KEY}`;
22 | const DATA_API_KEY = '.data-api';
23 |
24 | const CLASS_NAME_ACTIVE = 'active';
25 |
26 | const SELECTOR_DATA_TOGGLE = '[data-mdb-toggle="button"]';
27 |
28 | const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
29 |
30 | /**
31 | * ------------------------------------------------------------------------
32 | * Class Definition
33 | * ------------------------------------------------------------------------
34 | */
35 |
36 | class Button extends BaseComponent {
37 | // Getters
38 |
39 | static get DATA_KEY() {
40 | return DATA_KEY;
41 | }
42 |
43 | // Public
44 |
45 | toggle() {
46 | // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
47 | this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
48 | }
49 |
50 | // Static
51 |
52 | static jQueryInterface(config) {
53 | return this.each(function () {
54 | let data = Data.get(this, DATA_KEY);
55 |
56 | if (!data) {
57 | data = new Button(this);
58 | }
59 |
60 | if (config === 'toggle') {
61 | data[config]();
62 | }
63 | });
64 | }
65 | }
66 |
67 | /**
68 | * ------------------------------------------------------------------------
69 | * Data Api implementation
70 | * ------------------------------------------------------------------------
71 | */
72 |
73 | EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {
74 | event.preventDefault();
75 |
76 | const button = event.target.closest(SELECTOR_DATA_TOGGLE);
77 |
78 | let data = Data.get(button, DATA_KEY);
79 | if (!data) {
80 | data = new Button(button);
81 | }
82 |
83 | data.toggle();
84 | });
85 |
86 | /**
87 | * ------------------------------------------------------------------------
88 | * jQuery
89 | * ------------------------------------------------------------------------
90 | * add .Button to jQuery only if jQuery is present
91 | */
92 |
93 | defineJQueryPlugin(NAME, Button);
94 |
95 | export default Button;
96 |
--------------------------------------------------------------------------------
/vendor/fpdf/tutorial/tuto6.php:
--------------------------------------------------------------------------------
1 | /U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
16 | foreach($a as $i=>$e)
17 | {
18 | if($i%2==0)
19 | {
20 | // Text
21 | if($this->HREF)
22 | $this->PutLink($this->HREF,$e);
23 | else
24 | $this->Write(5,$e);
25 | }
26 | else
27 | {
28 | // Tag
29 | if($e[0]=='/')
30 | $this->CloseTag(strtoupper(substr($e,1)));
31 | else
32 | {
33 | // Extract attributes
34 | $a2 = explode(' ',$e);
35 | $tag = strtoupper(array_shift($a2));
36 | $attr = array();
37 | foreach($a2 as $v)
38 | {
39 | if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
40 | $attr[strtoupper($a3[1])] = $a3[2];
41 | }
42 | $this->OpenTag($tag,$attr);
43 | }
44 | }
45 | }
46 | }
47 |
48 | function OpenTag($tag, $attr)
49 | {
50 | // Opening tag
51 | if($tag=='B' || $tag=='I' || $tag=='U')
52 | $this->SetStyle($tag,true);
53 | if($tag=='A')
54 | $this->HREF = $attr['HREF'];
55 | if($tag=='BR')
56 | $this->Ln(5);
57 | }
58 |
59 | function CloseTag($tag)
60 | {
61 | // Closing tag
62 | if($tag=='B' || $tag=='I' || $tag=='U')
63 | $this->SetStyle($tag,false);
64 | if($tag=='A')
65 | $this->HREF = '';
66 | }
67 |
68 | function SetStyle($tag, $enable)
69 | {
70 | // Modify style and select corresponding font
71 | $this->$tag += ($enable ? 1 : -1);
72 | $style = '';
73 | foreach(array('B', 'I', 'U') as $s)
74 | {
75 | if($this->$s>0)
76 | $style .= $s;
77 | }
78 | $this->SetFont('',$style);
79 | }
80 |
81 | function PutLink($URL, $txt)
82 | {
83 | // Put a hyperlink
84 | $this->SetTextColor(0,0,255);
85 | $this->SetStyle('U',true);
86 | $this->Write(5,$txt,$URL);
87 | $this->SetStyle('U',false);
88 | $this->SetTextColor(0);
89 | }
90 | }
91 |
92 | $html = 'You can now easily print text mixing different styles: bold , italic ,
93 | underlined , or all at once ! You can also insert links on
94 | text, such as www.fpdf.org , or on an image: click on the logo.';
95 |
96 | $pdf = new PDF();
97 | // First page
98 | $pdf->AddPage();
99 | $pdf->SetFont('Arial','',20);
100 | $pdf->Write(5,"To find out what's new in this tutorial, click ");
101 | $pdf->SetFont('','U');
102 | $link = $pdf->AddLink();
103 | $pdf->Write(5,'here',$link);
104 | $pdf->SetFont('');
105 | // Second page
106 | $pdf->AddPage();
107 | $pdf->SetLink($link);
108 | $pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');
109 | $pdf->SetLeftMargin(45);
110 | $pdf->SetFontSize(14);
111 | $pdf->WriteHTML($html);
112 | $pdf->Output();
113 | ?>
114 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/free/scrollspy.js:
--------------------------------------------------------------------------------
1 | import { getjQuery, onDOMContentLoaded } from '../mdb/util/index';
2 | import EventHandler from '../mdb/dom/event-handler';
3 | import SelectorEngine from '../mdb/dom/selector-engine';
4 | import Manipulator from '../mdb/dom/manipulator';
5 | import BSScrollSpy from '../bootstrap/mdb-prefix/scrollspy';
6 |
7 | /**
8 | * ------------------------------------------------------------------------
9 | * Constants
10 | * ------------------------------------------------------------------------
11 | */
12 |
13 | const NAME = 'scrollspy';
14 | const DATA_KEY = `mdb.${NAME}`;
15 | const EVENT_KEY = `.${DATA_KEY}`;
16 | const DATA_API_KEY = '.data-api';
17 |
18 | const EVENT_ACTIVATE_BS = 'activate.bs.scrollspy';
19 |
20 | const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
21 |
22 | const SELECTOR_DATA_SPY = '[data-mdb-spy="scroll"]';
23 | const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
24 |
25 | class ScrollSpy extends BSScrollSpy {
26 | constructor(element, data) {
27 | super(element, data);
28 |
29 | this._scrollElement = element.tagName === 'BODY' ? window : element;
30 |
31 | this._init();
32 | }
33 |
34 | dispose() {
35 | EventHandler.off(this._scrollElement, EVENT_ACTIVATE_BS);
36 | this._scrollElement = null;
37 |
38 | super.dispose();
39 | }
40 |
41 | // Getters
42 | static get NAME() {
43 | return NAME;
44 | }
45 |
46 | // Private
47 | _init() {
48 | this._bindActivateEvent();
49 | }
50 |
51 | _bindActivateEvent() {
52 | EventHandler.on(this._scrollElement, EVENT_ACTIVATE_BS, (e) => {
53 | EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
54 | relatedTarget: e.relatedTarget,
55 | });
56 | });
57 | }
58 | }
59 |
60 | /**
61 | * ------------------------------------------------------------------------
62 | * Data Api implementation - auto initialization
63 | * ------------------------------------------------------------------------
64 | */
65 |
66 | EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
67 | SelectorEngine.find(SELECTOR_DATA_SPY).forEach((el) => {
68 | let instance = ScrollSpy.getInstance(el);
69 | if (!instance) {
70 | instance = new ScrollSpy(el, Manipulator.getDataAttributes(el));
71 | }
72 | });
73 | });
74 |
75 | /**
76 | * ------------------------------------------------------------------------
77 | * jQuery
78 | * ------------------------------------------------------------------------
79 | * add .rating to jQuery only if jQuery is present
80 | */
81 |
82 | onDOMContentLoaded(() => {
83 | const $ = getjQuery();
84 |
85 | if ($) {
86 | const JQUERY_NO_CONFLICT = $.fn[NAME];
87 | $.fn[NAME] = ScrollSpy.jQueryInterface;
88 | $.fn[NAME].Constructor = ScrollSpy;
89 | $.fn[NAME].noConflict = () => {
90 | $.fn[NAME] = JQUERY_NO_CONFLICT;
91 | return ScrollSpy.jQueryInterface;
92 | };
93 | }
94 | });
95 |
96 | export default ScrollSpy;
97 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/focusTrap.js:
--------------------------------------------------------------------------------
1 | import SelectorEngine from '../dom/selector-engine';
2 | import { isVisible } from './index';
3 |
4 | class FocusTrap {
5 | constructor(element, options = {}, toggler) {
6 | this._element = element;
7 | this._toggler = toggler;
8 | this._event = options.event || 'blur';
9 | this._condition = options.condition || (() => true);
10 | this._selector =
11 | options.selector || 'button, a, input, select, textarea, [tabindex]:not([tabindex="-1"])';
12 | this._onlyVisible = options.onlyVisible || false;
13 | this._focusableElements = [];
14 | this._firstElement = null;
15 | this._lastElement = null;
16 |
17 | this.handler = (e) => {
18 | if (this._condition(e) && e.target === this._lastElement) {
19 | e.preventDefault();
20 | this._firstElement.focus();
21 | }
22 | };
23 | }
24 |
25 | trap() {
26 | this._setElements();
27 | this._init();
28 | this._setFocusTrap();
29 | }
30 |
31 | disable() {
32 | this._focusableElements.forEach((element) => {
33 | element.removeEventListener(this._event, this.handler);
34 | });
35 |
36 | if (this._toggler) {
37 | this._toggler.focus();
38 | }
39 | }
40 |
41 | update() {
42 | this._setElements();
43 | this._setFocusTrap();
44 | }
45 |
46 | _init() {
47 | const handler = (e) => {
48 | if (!this._firstElement || e.key !== 'Tab' || this._focusableElements.includes(e.target)) {
49 | return;
50 | }
51 |
52 | e.preventDefault();
53 | this._firstElement.focus();
54 |
55 | window.removeEventListener('keydown', handler);
56 | };
57 |
58 | window.addEventListener('keydown', handler);
59 | }
60 |
61 | _filterVisible(elements) {
62 | return elements.filter((el) => {
63 | if (!isVisible(el)) return false;
64 |
65 | const ancestors = SelectorEngine.parents(el, '*');
66 |
67 | for (let i = 0; i < ancestors.length; i++) {
68 | const style = window.getComputedStyle(ancestors[i]);
69 | if (style && (style.display === 'none' || style.visibility === 'hidden')) return false;
70 | }
71 | return true;
72 | });
73 | }
74 |
75 | _setElements() {
76 | this._focusableElements = SelectorEngine.find(this._selector, this._element);
77 |
78 | if (this._onlyVisible) {
79 | this._focusableElements = this._filterVisible(this._focusableElements);
80 | }
81 |
82 | this._firstElement = this._focusableElements[0];
83 | this._lastElement = this._focusableElements[this._focusableElements.length - 1];
84 | }
85 |
86 | _setFocusTrap() {
87 | this._focusableElements.forEach((element, i) => {
88 | if (i === this._focusableElements.length - 1) {
89 | element.addEventListener(this._event, this.handler);
90 | } else {
91 | element.removeEventListener(this._event, this.handler);
92 | }
93 | });
94 | }
95 | }
96 |
97 | export default FocusTrap;
98 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/dom/selector-engine.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap selector-engine.js v5.0.0-beta3 (https://getbootstrap.com/)
3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | */
6 | (function (global, factory) {
7 | typeof exports === 'object' && typeof module !== 'undefined'
8 | ? (module.exports = factory())
9 | : typeof define === 'function' && define.amd
10 | ? define(factory)
11 | : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),
12 | (global.SelectorEngine = factory()));
13 | })(this, function () {
14 | 'use strict';
15 |
16 | /**
17 | * --------------------------------------------------------------------------
18 | * Bootstrap (v5.0.0-beta3): dom/selector-engine.js
19 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
20 | * --------------------------------------------------------------------------
21 | */
22 |
23 | /**
24 | * ------------------------------------------------------------------------
25 | * Constants
26 | * ------------------------------------------------------------------------
27 | */
28 | const NODE_TEXT = 3;
29 | const SelectorEngine = {
30 | find(selector, element = document.documentElement) {
31 | return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
32 | },
33 |
34 | findOne(selector, element = document.documentElement) {
35 | return Element.prototype.querySelector.call(element, selector);
36 | },
37 |
38 | children(element, selector) {
39 | return [].concat(...element.children).filter((child) => child.matches(selector));
40 | },
41 |
42 | parents(element, selector) {
43 | const parents = [];
44 | let ancestor = element.parentNode;
45 |
46 | while (
47 | ancestor &&
48 | ancestor.nodeType === Node.ELEMENT_NODE &&
49 | ancestor.nodeType !== NODE_TEXT
50 | ) {
51 | if (ancestor.matches(selector)) {
52 | parents.push(ancestor);
53 | }
54 |
55 | ancestor = ancestor.parentNode;
56 | }
57 |
58 | return parents;
59 | },
60 |
61 | prev(element, selector) {
62 | let previous = element.previousElementSibling;
63 |
64 | while (previous) {
65 | if (previous.matches(selector)) {
66 | return [previous];
67 | }
68 |
69 | previous = previous.previousElementSibling;
70 | }
71 |
72 | return [];
73 | },
74 |
75 | next(element, selector) {
76 | let next = element.nextElementSibling;
77 |
78 | while (next) {
79 | if (next.matches(selector)) {
80 | return [next];
81 | }
82 |
83 | next = next.nextElementSibling;
84 | }
85 |
86 | return [];
87 | },
88 | };
89 |
90 | return SelectorEngine;
91 | });
92 | //# sourceMappingURL=selector-engine.js.map
93 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/dom/data.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AAEA,aAAe;EACbC,EAAAA,GAAG,CAACC,OAAD,EAAUC,GAAV,EAAeC,QAAf,EAAyB;EAC1B,QAAI,CAACL,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5BH,MAAAA,UAAU,CAACE,GAAX,CAAeC,OAAf,EAAwB,IAAIF,GAAJ,EAAxB;EACD;;EAED,UAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAL0B;EAQ1B;;EACA,QAAI,CAACI,WAAW,CAACD,GAAZ,CAAgBF,GAAhB,CAAD,IAAyBG,WAAW,CAACE,IAAZ,KAAqB,CAAlD,EAAqD;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAR,CAAe,+EAA8EC,KAAK,CAACC,IAAN,CAAWN,WAAW,CAACO,IAAZ,EAAX,EAA+B,CAA/B,CAAkC,GAA/H;EACA;EACD;;EAEDP,IAAAA,WAAW,CAACL,GAAZ,CAAgBE,GAAhB,EAAqBC,QAArB;EACD,GAjBY;;EAmBbG,EAAAA,GAAG,CAACL,OAAD,EAAUC,GAAV,EAAe;EAChB,QAAIJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAJ,EAA6B;EAC3B,aAAOH,UAAU,CAACQ,GAAX,CAAeL,OAAf,EAAwBK,GAAxB,CAA4BJ,GAA5B,KAAoC,IAA3C;EACD;;EAED,WAAO,IAAP;EACD,GAzBY;;EA2BbW,EAAAA,MAAM,CAACZ,OAAD,EAAUC,GAAV,EAAe;EACnB,QAAI,CAACJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5B;EACD;;EAED,UAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB;EAEAI,IAAAA,WAAW,CAACS,MAAZ,CAAmBZ,GAAnB,EAPmB;;EAUnB,QAAIG,WAAW,CAACE,IAAZ,KAAqB,CAAzB,EAA4B;EAC1BT,MAAAA,UAAU,CAACgB,MAAX,CAAkBb,OAAlB;EACD;EACF;;EAxCY,CAAf;;;;;;;;"}
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/bootstrap/dist/dom/manipulator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap manipulator.js v5.0.0-beta3 (https://getbootstrap.com/)
3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | */
6 | (function (global, factory) {
7 | typeof exports === 'object' && typeof module !== 'undefined'
8 | ? (module.exports = factory())
9 | : typeof define === 'function' && define.amd
10 | ? define(factory)
11 | : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),
12 | (global.Manipulator = factory()));
13 | })(this, function () {
14 | 'use strict';
15 |
16 | /**
17 | * --------------------------------------------------------------------------
18 | * Bootstrap (v5.0.0-beta3): dom/manipulator.js
19 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
20 | * --------------------------------------------------------------------------
21 | */
22 | function normalizeData(val) {
23 | if (val === 'true') {
24 | return true;
25 | }
26 |
27 | if (val === 'false') {
28 | return false;
29 | }
30 |
31 | if (val === Number(val).toString()) {
32 | return Number(val);
33 | }
34 |
35 | if (val === '' || val === 'null') {
36 | return null;
37 | }
38 |
39 | return val;
40 | }
41 |
42 | function normalizeDataKey(key) {
43 | return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
44 | }
45 |
46 | const Manipulator = {
47 | setDataAttribute(element, key, value) {
48 | element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
49 | },
50 |
51 | removeDataAttribute(element, key) {
52 | element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
53 | },
54 |
55 | getDataAttributes(element) {
56 | if (!element) {
57 | return {};
58 | }
59 |
60 | const attributes = {};
61 | Object.keys(element.dataset)
62 | .filter((key) => key.startsWith('bs'))
63 | .forEach((key) => {
64 | let pureKey = key.replace(/^bs/, '');
65 | pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
66 | attributes[pureKey] = normalizeData(element.dataset[key]);
67 | });
68 | return attributes;
69 | },
70 |
71 | getDataAttribute(element, key) {
72 | return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
73 | },
74 |
75 | offset(element) {
76 | const rect = element.getBoundingClientRect();
77 | return {
78 | top: rect.top + document.body.scrollTop,
79 | left: rect.left + document.body.scrollLeft,
80 | };
81 | },
82 |
83 | position(element) {
84 | return {
85 | top: element.offsetTop,
86 | left: element.offsetLeft,
87 | };
88 | },
89 | };
90 |
91 | return Manipulator;
92 | });
93 | //# sourceMappingURL=manipulator.js.map
94 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/util/stack.js:
--------------------------------------------------------------------------------
1 | import SelectorEngine from '../dom/selector-engine';
2 | import { isVisible, typeCheckConfig } from './index';
3 |
4 | const NAME = 'Stack';
5 |
6 | const DEFAULT_OPTIONS = {
7 | position: 'top',
8 | container: null,
9 | refresh: 1000,
10 | filter: (el) => {
11 | return el;
12 | },
13 | };
14 |
15 | const TYPE_OPTIONS = {
16 | position: 'string',
17 | container: '(undefined|null|string)',
18 | refresh: 'number',
19 | filter: 'function',
20 | };
21 |
22 | class Stack {
23 | constructor(element, selector, options) {
24 | this._element = element;
25 | this._selector = selector;
26 | this._options = this._getConfig(options);
27 |
28 | this._offset = null;
29 |
30 | if (this._options.container) {
31 | this._parent = SelectorEngine.findOne(this._options.container);
32 | }
33 | }
34 |
35 | get stackableElements() {
36 | return SelectorEngine.find(this._selector)
37 | .filter((el, i) => this._options.filter(el, i))
38 | .map((el) => ({ el, rect: el.getBoundingClientRect() }))
39 | .filter(({ el, rect }) => {
40 | const basicCondition = el !== this._element && isVisible(el);
41 | if (this._offset === null) {
42 | return basicCondition;
43 | }
44 |
45 | return basicCondition && this._getBoundryOffset(rect) < this._offset;
46 | })
47 | .sort((a, b) => {
48 | return this._getBoundryOffset(b.rect) - this._getBoundryOffset(a.rect);
49 | });
50 | }
51 |
52 | get nextElements() {
53 | return SelectorEngine.find(this._selector)
54 | .filter((el) => el !== this._element)
55 | .filter((el, i) => this._options.filter(el, i))
56 | .filter((el) => {
57 | return this._getBoundryOffset(el.getBoundingClientRect()) > this._offset;
58 | });
59 | }
60 |
61 | _getConfig(options) {
62 | const config = {
63 | ...DEFAULT_OPTIONS,
64 | ...options,
65 | };
66 |
67 | typeCheckConfig(NAME, config, TYPE_OPTIONS);
68 |
69 | return config;
70 | }
71 |
72 | _getBoundryOffset(rect) {
73 | const { position } = this._options;
74 |
75 | let parentTopOffset = 0;
76 | let parentBottomBoundry = window.innerHeight;
77 |
78 | if (this._parent) {
79 | const parentRect = this._parent.getBoundingClientRect();
80 |
81 | parentTopOffset = parentRect.top;
82 | parentBottomBoundry = parentRect.bottom;
83 | }
84 |
85 | if (position === 'top') {
86 | return rect.top - parentTopOffset;
87 | }
88 | return parentBottomBoundry - rect.bottom;
89 | }
90 |
91 | calculateOffset() {
92 | const [previousElement] = this.stackableElements;
93 |
94 | if (!previousElement) {
95 | this._offset = 0;
96 | } else {
97 | this._offset = this._getBoundryOffset(previousElement.rect) + previousElement.rect.height;
98 | }
99 |
100 | return this._offset;
101 | }
102 | }
103 |
104 | export default Stack;
105 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/free/carousel.js:
--------------------------------------------------------------------------------
1 | import { getjQuery, onDOMContentLoaded } from '../mdb/util/index';
2 | import EventHandler from '../mdb/dom/event-handler';
3 | import SelectorEngine from '../mdb/dom/selector-engine';
4 | import BSCarousel from '../bootstrap/mdb-prefix/carousel';
5 |
6 | /**
7 | * ------------------------------------------------------------------------
8 | * Constants
9 | * ------------------------------------------------------------------------
10 | */
11 |
12 | const NAME = 'carousel';
13 | const DATA_KEY = `mdb.${NAME}`;
14 | const EVENT_KEY = `.${DATA_KEY}`;
15 |
16 | const EVENT_SLIDE_BS = 'slide.bs.carousel';
17 | const EVENT_SLID_BS = 'slid.bs.carousel';
18 |
19 | const EVENT_SLIDE = `slide${EVENT_KEY}`;
20 | const EVENT_SLID = `slid${EVENT_KEY}`;
21 |
22 | const SELECTOR_DATA_RIDE = '[data-mdb-ride="carousel"]';
23 |
24 | class Carousel extends BSCarousel {
25 | constructor(element, data) {
26 | super(element, data);
27 |
28 | this._init();
29 | }
30 |
31 | dispose() {
32 | EventHandler.off(this._element, EVENT_SLIDE_BS);
33 | EventHandler.off(this._element, EVENT_SLID_BS);
34 |
35 | super.dispose();
36 | }
37 |
38 | // Getters
39 | static get NAME() {
40 | return NAME;
41 | }
42 |
43 | // Private
44 | _init() {
45 | this._bindSlideEvent();
46 | this._bindSlidEvent();
47 | }
48 |
49 | _bindSlideEvent() {
50 | EventHandler.on(this._element, EVENT_SLIDE_BS, (e) => {
51 | EventHandler.trigger(this._element, EVENT_SLIDE, {
52 | relatedTarget: e.relatedTarget,
53 | direction: e.direction,
54 | from: e.from,
55 | to: e.to,
56 | });
57 | });
58 | }
59 |
60 | _bindSlidEvent() {
61 | EventHandler.on(this._element, EVENT_SLID_BS, (e) => {
62 | EventHandler.trigger(this._element, EVENT_SLID, {
63 | relatedTarget: e.relatedTarget,
64 | direction: e.direction,
65 | from: e.from,
66 | to: e.to,
67 | });
68 | });
69 | }
70 | }
71 |
72 | /**
73 | * ------------------------------------------------------------------------
74 | * Data Api implementation - auto initialization
75 | * ------------------------------------------------------------------------
76 | */
77 |
78 | SelectorEngine.find(SELECTOR_DATA_RIDE).forEach((el) => {
79 | let instance = Carousel.getInstance(el);
80 | if (!instance) {
81 | instance = new Carousel(el);
82 | }
83 | });
84 |
85 | /**
86 | * ------------------------------------------------------------------------
87 | * jQuery
88 | * ------------------------------------------------------------------------
89 | * add .rating to jQuery only if jQuery is present
90 | */
91 |
92 | onDOMContentLoaded(() => {
93 | const $ = getjQuery();
94 |
95 | if ($) {
96 | const JQUERY_NO_CONFLICT = $.fn[NAME];
97 | $.fn[NAME] = Carousel.jQueryInterface;
98 | $.fn[NAME].Constructor = Carousel;
99 | $.fn[NAME].noConflict = () => {
100 | $.fn[NAME] = JQUERY_NO_CONFLICT;
101 | return Carousel.jQueryInterface;
102 | };
103 | }
104 | });
105 |
106 | export default Carousel;
107 |
--------------------------------------------------------------------------------
/frontend/assets/bootstrqp/src/js/mdb/dom/manipulator.js:
--------------------------------------------------------------------------------
1 | /**
2 | * --------------------------------------------------------------------------
3 | * Bootstrap (v5.0.0-beta2): dom/manipulator.js
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5 | * --------------------------------------------------------------------------
6 | */
7 |
8 | function normalizeData(val) {
9 | if (val === 'true') {
10 | return true;
11 | }
12 |
13 | if (val === 'false') {
14 | return false;
15 | }
16 |
17 | if (val === Number(val).toString()) {
18 | return Number(val);
19 | }
20 |
21 | if (val === '' || val === 'null') {
22 | return null;
23 | }
24 |
25 | return val;
26 | }
27 |
28 | function normalizeDataKey(key) {
29 | return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
30 | }
31 |
32 | const Manipulator = {
33 | setDataAttribute(element, key, value) {
34 | element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);
35 | },
36 |
37 | removeDataAttribute(element, key) {
38 | element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);
39 | },
40 |
41 | getDataAttributes(element) {
42 | if (!element) {
43 | return {};
44 | }
45 |
46 | const attributes = {
47 | ...element.dataset,
48 | };
49 |
50 | Object.keys(attributes)
51 | .filter((key) => key.startsWith('mdb'))
52 | .forEach((key) => {
53 | let pureKey = key.replace(/^mdb/, '');
54 | pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
55 | attributes[pureKey] = normalizeData(attributes[key]);
56 | });
57 |
58 | return attributes;
59 | },
60 |
61 | getDataAttribute(element, key) {
62 | return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));
63 | },
64 |
65 | offset(element) {
66 | const rect = element.getBoundingClientRect();
67 |
68 | return {
69 | top: rect.top + document.body.scrollTop,
70 | left: rect.left + document.body.scrollLeft,
71 | };
72 | },
73 |
74 | position(element) {
75 | return {
76 | top: element.offsetTop,
77 | left: element.offsetLeft,
78 | };
79 | },
80 |
81 | style(element, style) {
82 | Object.assign(element.style, style);
83 | },
84 |
85 | toggleClass(element, className) {
86 | if (!element) {
87 | return;
88 | }
89 |
90 | if (element.classList.contains(className)) {
91 | element.classList.remove(className);
92 | } else {
93 | element.classList.add(className);
94 | }
95 | },
96 |
97 | addClass(element, className) {
98 | if (element.classList.contains(className)) return;
99 | element.classList.add(className);
100 | },
101 |
102 | addStyle(element, style) {
103 | Object.keys(style).forEach((property) => {
104 | element.style[property] = style[property];
105 | });
106 | },
107 |
108 | removeClass(element, className) {
109 | if (!element.classList.contains(className)) return;
110 | element.classList.remove(className);
111 | },
112 |
113 | hasClass(element, className) {
114 | return element.classList.contains(className);
115 | },
116 | };
117 |
118 | export default Manipulator;
119 |
--------------------------------------------------------------------------------