Update to mdbootstrap 8
BIN
assets/projects/utpass.png
Normal file
After Width: | Height: | Size: 23 KiB |
1
css/fontawesome.css
vendored
319
index.html
@ -6,16 +6,32 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
<title>Quentin Rouland</title>
|
<title>Quentin Rouland</title>
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css">
|
<link
|
||||||
<!-- Bootstrap core CSS -->
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
|
||||||
<link href="mdb/css/bootstrap.min.css" rel="stylesheet">
|
rel="stylesheet"
|
||||||
<!-- Material Design Bootstrap -->
|
/>
|
||||||
<link href="mdb/css/mdb.min.css" rel="stylesheet">
|
<!-- MDB -->
|
||||||
<!-- Material Design Bootstrap Flags -->
|
<link
|
||||||
<link href="mdb/css/addons/flag.min.css" rel="stylesheet">
|
href="https://cdn.jsdelivr.net/npm/mdb-ui-kit@8.1.0/css/mdb.min.css"
|
||||||
<!-- Your custom styles -->
|
rel="stylesheet"
|
||||||
<link href="mdb/css/style.css" rel="stylesheet">
|
/>
|
||||||
|
<style>
|
||||||
|
.img-project {
|
||||||
|
object-fit: cover;
|
||||||
|
object-position: center;
|
||||||
|
height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.img-me {
|
||||||
|
width: 300px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
padding-bottom: 90px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -23,7 +39,7 @@
|
|||||||
<header>
|
<header>
|
||||||
|
|
||||||
<!-- Navbar -->
|
<!-- Navbar -->
|
||||||
<nav class="navbar fixed-top navbar-expand-lg navbar-light white scrolling-navbar" id="button_menu">
|
<nav class="navbar fixed-top navbar-expand-lg bg-body-tertiary white scrolling-navbar" id="button_menu">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
||||||
<!-- Brand -->
|
<!-- Brand -->
|
||||||
@ -31,17 +47,24 @@
|
|||||||
<strong class="blue-text">Quentin Rouland</strong>
|
<strong class="blue-text">Quentin Rouland</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Collapse -->
|
<!-- Toggle button -->
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
|
<button
|
||||||
aria-expanded="false" aria-label="Toggle navigation">
|
data-mdb-collapse-init
|
||||||
<span class="navbar-toggler-icon"></span>
|
class="navbar-toggler"
|
||||||
|
type="button"
|
||||||
|
data-mdb-target="#navbarSupportedContent"
|
||||||
|
aria-controls="navbarSupportedContent"
|
||||||
|
aria-expanded="false"
|
||||||
|
aria-label="Toggle navigation"
|
||||||
|
>
|
||||||
|
<i class="fas fa-bars"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- Links -->
|
<!-- Links -->
|
||||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||||
|
|
||||||
<!-- Left -->
|
<!-- Left -->
|
||||||
<ul class="navbar-nav mr-auto" id="menu">
|
<ul class="navbar-nav me-auto" id="menu">
|
||||||
<li class="nav-item" id="about_menu">
|
<li class="nav-item" id="about_menu">
|
||||||
<a class="nav-link waves-effect" href="javascript:page_selection('#about');" data-i18n="menu.about"></a>
|
<a class="nav-link waves-effect" href="javascript:page_selection('#about');" data-i18n="menu.about"></a>
|
||||||
</li>
|
</li>
|
||||||
@ -57,20 +80,23 @@
|
|||||||
<li class="nav-item" id="teachings_menu">
|
<li class="nav-item" id="teachings_menu">
|
||||||
<a class="nav-link waves-effect" href="javascript:page_selection('#teachings');" data-i18n="menu.teachings"></a>
|
<a class="nav-link waves-effect" href="javascript:page_selection('#teachings');" data-i18n="menu.teachings"></a>
|
||||||
</li>
|
</li>
|
||||||
<!--li class="nav-item" id="projects_menu">
|
<li class="nav-item" id="projects_menu">
|
||||||
<a class="nav-link waves-effect" href="javascript:page_selection('#projects');" data-i18n="menu.projects"></a>
|
<a class="nav-link waves-effect" href="javascript:page_selection('#projects');" data-i18n="menu.projects"></a>
|
||||||
</li-->
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link waves-effect" href="http://blog.qrouland.com">Blog <i class="fa-solid fa-arrow-up-right-from-square"></i></a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<!-- Right -->
|
<!-- Right -->
|
||||||
<ul class="navbar-nav nav-flex-icons">
|
<div class="navbar-nav d-flex">
|
||||||
<a id="ukflag" href="javascript:i18next.changeLanguage('en');">
|
<a id="ukflag" href="javascript:i18next.changeLanguage('en');">
|
||||||
<i class="uk flag"></i>
|
<i class="flag flag-uk"></i>
|
||||||
</a>
|
</a>
|
||||||
<a id="frflag" href="javascript:i18next.changeLanguage('fr');">
|
<a id="frflag" href="javascript:i18next.changeLanguage('fr');">
|
||||||
<i class="france flag"></i>
|
<i class="flag flag-france"></i>
|
||||||
</a>
|
</a>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -80,8 +106,6 @@
|
|||||||
</header>
|
</header>
|
||||||
<!--Main Navigation-->
|
<!--Main Navigation-->
|
||||||
|
|
||||||
<!--Wrapper layout-->
|
|
||||||
<div class="wrapper">
|
|
||||||
<!--Main layout-->
|
<!--Main layout-->
|
||||||
<main class="mt-5 pt-5">
|
<main class="mt-5 pt-5">
|
||||||
|
|
||||||
@ -95,12 +119,12 @@
|
|||||||
<div class="col-lg-4 col-md-3 mb-4 vcenter">
|
<div class="col-lg-4 col-md-3 mb-4 vcenter">
|
||||||
|
|
||||||
<!-- Card Regular -->
|
<!-- Card Regular -->
|
||||||
<div class="card card-cascade text-justify">
|
<div class="card card-cascade">
|
||||||
|
|
||||||
<!-- Card image -->
|
<!-- Card image -->
|
||||||
<div class="view view-cascade overlay">
|
<div class="view view-cascade overlay py-1">
|
||||||
|
|
||||||
<img class="card-img-top rounded-circle mt-4 pr-5 pl-5" src="assets/me.jpg" alt="Card image cap">
|
<img class="card-img-top rounded-circle mt-4 pr-5 pl-5 img-me" src="assets/me.jpg" alt="Quentin Rouland image profile">
|
||||||
|
|
||||||
<a>
|
<a>
|
||||||
<div class="mask rgba-white-slight"></div>
|
<div class="mask rgba-white-slight"></div>
|
||||||
@ -117,25 +141,25 @@
|
|||||||
<!-- Social -->
|
<!-- Social -->
|
||||||
<div class="pb-2">
|
<div class="pb-2">
|
||||||
<a href="mailto:quentin@qrouland.com" target="_blank">
|
<a href="mailto:quentin@qrouland.com" target="_blank">
|
||||||
<i class="far fa-envelope mr-1 ml-1 fa-lg"></i>
|
<i class="far fa-envelope me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.linkedin.com/in/qrouland" target="_blank">
|
<a href="https://www.linkedin.com/in/qrouland" target="_blank">
|
||||||
<i class="fab fa-linkedin mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-linkedin me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://scholar.google.com/citations?user=X4Cjro0AAAAJ" target="_blank">
|
<a href="https://scholar.google.com/citations?user=X4Cjro0AAAAJ" target="_blank">
|
||||||
<i class="fab fa-google mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-google me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.researchgate.net/profile/Quentin_Rouland/research">
|
<a href="https://www.researchgate.net/profile/Quentin_Rouland/research">
|
||||||
<i class="fab fa-researchgate mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-researchgate me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://orcid.org/0000-0001-8613-1842" target="_blank">
|
<a href="https://orcid.org/0000-0001-8613-1842" target="_blank">
|
||||||
<i class="fab fa-orcid mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-orcid me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://git.rdrive.ovh/QRouland" target="_blank">
|
<a href="https://git.rdrive.ovh/QRouland" target="_blank">
|
||||||
<i class="fab fa-git-square mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-git-square me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/QRouland" target="_blank">
|
<a href="https://github.com/QRouland" target="_blank">
|
||||||
<i class="fab fa-github-square mr-1 ml-1 fa-lg"></i>
|
<i class="fab fa-github-square me-1 ml-1 fa-lg"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<!-- Text -->
|
<!-- Text -->
|
||||||
@ -159,11 +183,11 @@
|
|||||||
<!--Grid column-->
|
<!--Grid column-->
|
||||||
|
|
||||||
<!--Grid column-->
|
<!--Grid column-->
|
||||||
<div class="col-lg-7 col-md-9 vcenter">
|
<div class="col-lg-7 col-md-9 d-flex align-items-center">
|
||||||
<span class="align-middle">
|
<span class="align-middle">
|
||||||
<p class="pb-4 text-justify" data-i18n="[html]about.p1"></p>
|
<p class="pb-4 text-start" data-i18n="[html]about.p1"></p>
|
||||||
<p class="pb-4 text-justify" data-i18n="[html]about.p2"></p>
|
<p class="pb-4 text-start" data-i18n="[html]about.p2"></p>
|
||||||
<p class="pb-4 text-justify" data-i18n="[html]about.p3"> </p>
|
<p class="pb-4 text-start" data-i18n="[html]about.p3"> </p>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<!--Grid column-->
|
<!--Grid column-->
|
||||||
@ -184,23 +208,23 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong data-i18n="experiences.title"></strong>
|
<strong data-i18n="experiences.title"></strong>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.uqo.title"></strong><br>
|
<strong data-i18n="experiences.uqo.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.uqo.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.uqo.location"></span><br>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.carleton.title"></strong><br>
|
<strong data-i18n="experiences.carleton.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.carleton.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.carleton.location"></span><br>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.ater.title"></strong><br>
|
<strong data-i18n="experiences.ater.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.ater.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.ater.location"></span><br>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.phd.title"></strong><br>
|
<strong data-i18n="experiences.phd.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.phd.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.phd.location"></span><br>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.engie.title"></strong> <br>
|
<strong data-i18n="experiences.engie.title"></strong> <br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.engie.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.engie.location"></span><br>
|
||||||
<span class="pl-3" data-i18n="experiences.engie.exp1"></span><br>
|
<span class="pl-3" data-i18n="experiences.engie.exp1"></span><br>
|
||||||
@ -208,13 +232,13 @@
|
|||||||
<span class="pl-3" data-i18n="experiences.engie.exp3"></span><br>
|
<span class="pl-3" data-i18n="experiences.engie.exp3"></span><br>
|
||||||
<span class="pl-3" data-i18n="experiences.engie.exp4"></span>
|
<span class="pl-3" data-i18n="experiences.engie.exp4"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.freescale.title"></strong><br>
|
<strong data-i18n="experiences.freescale.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.freescale.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.freescale.location"></span><br>
|
||||||
<span class="pl-3" data-i18n="experiences.freescale.exp1"></span><br>
|
<span class="pl-3" data-i18n="experiences.freescale.exp1"></span><br>
|
||||||
<span class="pl-3" data-i18n="experiences.freescale.exp2"></span>
|
<span class="pl-3" data-i18n="experiences.freescale.exp2"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="text-justify"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="experiences.panacee.title"></strong><br>
|
<strong data-i18n="experiences.panacee.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]experiences.panacee.location"></span><br>
|
<span class="pl-3 font-small" data-i18n="[html]experiences.panacee.location"></span><br>
|
||||||
<span class="pl-3" data-i18n="experiences.panacee.exp1"></span><br>
|
<span class="pl-3" data-i18n="experiences.panacee.exp1"></span><br>
|
||||||
@ -236,23 +260,23 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong data-i18n="training.title"></strong>
|
<strong data-i18n="training.title"></strong>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="training.phd.title"></strong><br>
|
<strong data-i18n="training.phd.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]training.phd.location"></span>
|
<span class="pl-3 font-small" data-i18n="[html]training.phd.location"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="training.ice.title"></strong><br>
|
<strong data-i18n="training.ice.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]training.ice.location"></span>
|
<span class="pl-3 font-small" data-i18n="[html]training.ice.location"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="training.l3.title"></strong><br>
|
<strong data-i18n="training.l3.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]training.l3.location"></span>
|
<span class="pl-3 font-small" data-i18n="[html]training.l3.location"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="training.iut.title"></strong><br>
|
<strong data-i18n="training.iut.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]training.iut.location"></span>
|
<span class="pl-3 font-small" data-i18n="[html]training.iut.location"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-3"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong data-i18n="training.bac.title"></strong><br>
|
<strong data-i18n="training.bac.title"></strong><br>
|
||||||
<span class="pl-3 font-small" data-i18n="[html]training.bac.location"></span>
|
<span class="pl-3 font-small" data-i18n="[html]training.bac.location"></span>
|
||||||
</p>
|
</p>
|
||||||
@ -273,16 +297,16 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong data-i18n="publications.journal"></strong>
|
<strong data-i18n="publications.journal"></strong>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.jss.2024.112219">A model-driven formal methods approach to software architectural security vulnerabilities specification and verification</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.jss.2024.112219">A model-driven formal methods approach to software architectural security vulnerabilities specification and verification</a>.
|
||||||
Journal of Systems and Software (JSS), 2025.
|
Journal of Systems and Software (JSS), 2025.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.sysarc.2021.102073">Specification, detection, and treatment of STRIDE threats for software components: Modeling, formal methods, and tool support</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.sysarc.2021.102073">Specification, detection, and treatment of STRIDE threats for software components: Modeling, formal methods, and tool support</a>.
|
||||||
Journal of Systems Architecture (JSA), 2021.
|
Journal of Systems Architecture (JSA), 2021.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.future.2020.02.033">Formal Specification and Verification of Reusable Communication Models for Distributed Systems Architecture</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1016/j.future.2020.02.033">Formal Specification and Verification of Reusable Communication Models for Distributed Systems Architecture</a>.
|
||||||
Future Generation Computer Systems (FGCS), 2020.
|
Future Generation Computer Systems (FGCS), 2020.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -298,48 +322,48 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong data-i18n="publications.conference"></strong>
|
<strong data-i18n="publications.conference"></strong>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Kamel Adi, Omer Nguena Timo, Luigi Logrippo. <span class="text-primary" href="#">Toward Automatic Enforcement of Security Patterns in Software Architecture Using Alloy (accepted)</span>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Kamel Adi, Omer Nguena Timo, Luigi Logrippo. <span class="text-primary" href="#">Toward Automatic Enforcement of Security Patterns in Software Architecture Using Alloy (accepted)</span>.
|
||||||
17th International Symposium on Foundations & Practice of Security (FPS), Montreal, Canada, 2024.
|
17th International Symposium on Foundations & Practice of Security (FPS), Montreal, Canada, 2024.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Kamel Adi, Omer Nguena Timo, Luigi Logrippo. <span class="text-primary" href="#">Detecting Information Disclosure Vulnerability in Software Architectures Using Alloy (accepted)</span>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Kamel Adi, Omer Nguena Timo, Luigi Logrippo. <span class="text-primary" href="#">Detecting Information Disclosure Vulnerability in Software Architectures Using Alloy (accepted)</span>.
|
||||||
19th International Conference on Risks and Security of Internet and Systems (CRiSIS), Aix-En-Provence, France, 2024.
|
19th International Conference on Risks and Security of Internet and Systems (CRiSIS), Aix-En-Provence, France, 2024.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i>Luke Newton, Jason Jaskolka, <strong>Quentin Rouland</strong>, Brahim Hamid. <span class="text-primary" href="#">Data-Driven Approximation of Formal Implicit Interaction Analysis for Cyber-Physical System Designs</span>.
|
<i class="fas fa-angle-right me-2"></i>Luke Newton, Jason Jaskolka, <strong>Quentin Rouland</strong>, Brahim Hamid. <span class="text-primary" href="#">Data-Driven Approximation of Formal Implicit Interaction Analysis for Cyber-Physical System Designs</span>.
|
||||||
Resilience Week (RWS), Austin, United States, 2024.
|
Resilience Week (RWS), Austin, United States, 2024.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Stojanche Gjorcheski, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/QRS-C60940.2023.00054">A Security Compliance-by-Design Framework Utilizing Reusable Formal Model</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Stojanche Gjorcheski, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/QRS-C60940.2023.00054">A Security Compliance-by-Design Framework Utilizing Reusable Formal Model</a>.
|
||||||
23rd IEE International Conference on Software Quality, Reliability, and Security Companion (QRS), Chiang Mai, Thailand, 2023.
|
23rd IEE International Conference on Software Quality, Reliability, and Security Companion (QRS), Chiang Mai, Thailand, 2023.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i>James Baak, <strong>Quentin Rouland</strong>, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-031-49333-1_2">A Formal Metamodel for Software Architectures with Composite Components.</a>.
|
<i class="fas fa-angle-right me-2"></i>James Baak, <strong>Quentin Rouland</strong>, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-031-49333-1_2">A Formal Metamodel for Software Architectures with Composite Components.</a>.
|
||||||
12th International Conference on Model and Data Engineering (MEDI), Sousse, Tunisia, 2023.
|
12th International Conference on Model and Data Engineering (MEDI), Sousse, Tunisia, 2023.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Stojanche Gjorcheski, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/REW57809.2023.00045">Eliciting a Security Architecture Requirements Baseline from Standards and Regulations</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Stojanche Gjorcheski, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/REW57809.2023.00045">Eliciting a Security Architecture Requirements Baseline from Standards and Regulations</a>.
|
||||||
10th IEEE International Workshop on Evolving Security & Privacy Requirements Engineering (ESPRE), Hannover, Germany, 2023.
|
10th IEEE International Workshop on Evolving Security & Privacy Requirements Engineering (ESPRE), Hannover, Germany, 2023.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jean-Paul Bodeveix, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/ICSA-C57050.2023.00042 ">Formalizing the Relationship between Security Policies and Objectives in Software Architectures</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jean-Paul Bodeveix, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1109/ICSA-C57050.2023.00042 ">Formalizing the Relationship between Security Policies and Objectives in Software Architectures</a>.
|
||||||
20th IEEE International Conference on Software Architecture Companion (ICSA), L'Aquila, Italy, 2023.
|
20th IEEE International Conference on Software Architecture Companion (ICSA), L'Aquila, Italy, 2023.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-030-64694-3_4">Reusable Formal Models for Threat Specification, Detection, and Treatment</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-030-64694-3_4">Reusable Formal Models for Threat Specification, Detection, and Treatment</a>.
|
||||||
19th International Conference on Software and Systems Reuse (ICSR), Hammamet, Tunisia, 2020.
|
19th International Conference on Software and Systems Reuse (ICSR), Hammamet, Tunisia, 2020.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i>Brahim Hamid, <strong>Quentin Rouland</strong>, Jason Jaskolka. <a class="text-primary" href="https://dx.doi.org/10.1109/PRDC47002.2019.00052">Distributed Maintenance of a Spanning Tree of K-Connected Graphs</a>.
|
<i class="fas fa-angle-right me-2"></i>Brahim Hamid, <strong>Quentin Rouland</strong>, Jason Jaskolka. <a class="text-primary" href="https://dx.doi.org/10.1109/PRDC47002.2019.00052">Distributed Maintenance of a Spanning Tree of K-Connected Graphs</a>.
|
||||||
24th IEEE Pacific Rim International Symposium on Dependable Computing (PRDC), Kyoto, Japan, 2019.
|
24th IEEE Pacific Rim International Symposium on Dependable Computing (PRDC), Kyoto, Japan, 2019.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jean-Paul Bodeveix, Mamoun Filali. <a class="text-primary" href="https://doi.org/10.1109/ICECCS.2019.00033">A Formal Methods Approach to Security Requirements Specification and Verification</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jean-Paul Bodeveix, Mamoun Filali. <a class="text-primary" href="https://doi.org/10.1109/ICECCS.2019.00033">A Formal Methods Approach to Security Requirements Specification and Verification</a>.
|
||||||
24th International Conference on Engineering of Complex Computer Systems (ICECCS), Guangzhou, China, 2019.
|
24th International Conference on Engineering of Complex Computer Systems (ICECCS), Guangzhou, China, 2019.
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-030-00856-7_13">Formalizing Reusable Communication Models for Distributed Systems Architecture</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>, Brahim Hamid, Jason Jaskolka. <a class="text-primary" href="https://doi.org/10.1007/978-3-030-00856-7_13">Formalizing Reusable Communication Models for Distributed Systems Architecture</a>.
|
||||||
8th International Conference on Model and Data Engineering (MEDI), Marrakesh, Morocco, 2018.
|
8th International Conference on Model and Data Engineering (MEDI), Marrakesh, Morocco, 2018.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -356,8 +380,8 @@
|
|||||||
<strong data-i18n="publications.these"></strong>
|
<strong data-i18n="publications.these"></strong>
|
||||||
</h3>
|
</h3>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify">
|
<p class="mb-2">
|
||||||
<i class="fas fa-angle-right mr-2"></i><strong>Quentin Rouland</strong>. <a class="text-primary" href="/assets/Manuscript.pdf">Rigorous development of secure architecture within the negative and positive statements: properties, models, analysis and tool support</a>.
|
<i class="fas fa-angle-right me-2"></i><strong>Quentin Rouland</strong>. <a class="text-primary" href="/assets/Manuscript.pdf">Rigorous development of secure architecture within the negative and positive statements: properties, models, analysis and tool support</a>.
|
||||||
PhD Thesis, Université Toulouse 3 Paul Sabatier, 2021.
|
PhD Thesis, Université Toulouse 3 Paul Sabatier, 2021.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -378,40 +402,40 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong>2020-2021</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse2"></span>
|
<strong>2020-2021</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse2"></span>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Architecture orientée service</strong> - Master 2 (8h Cours)
|
<strong>Architecture orientée service</strong> - Master 2 (8h Cours)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Ouverture à la recherche, veille</strong> - Master 2 (2h Cours)
|
<strong>Ouverture à la recherche, veille</strong> - Master 2 (2h Cours)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Modélisation et conception objet</strong> - Master 1 (16h TD/TP)
|
<strong>Modélisation et conception objet</strong> - Master 1 (16h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Conception et développement orientés objets</strong> - Licence 3 (10h TD/TP, 12h Projet)
|
<strong>Conception et développement orientés objets</strong> - Licence 3 (10h TD/TP, 12h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S3</strong> - Licence 2 (12h Projet)
|
<strong>Projet S3</strong> - Licence 2 (12h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Pix</strong> - Licence 2 (48h TD/TP)
|
<strong>Pix</strong> - Licence 2 (48h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Algorithmique et Programmation</strong> - Licence 1 (17h Cours, 31h TD/TP)
|
<strong>Algorithmique et Programmation</strong> - Licence 1 (17h Cours, 31h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Algorithmique S1</strong> - Licence 1 (28h TD/TP)
|
<strong>Algorithmique S1</strong> - Licence 1 (28h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Base de données</strong> - Licence 1 (19h Cours, 36h TD/TP)
|
<strong>Base de données</strong> - Licence 1 (19h Cours, 36h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Théorie de l’information</strong> - Licence 1 (12h TD/TP)
|
<strong>Théorie de l’information</strong> - Licence 1 (12h TD/TP)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -425,16 +449,16 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong>2019-2020</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
<strong>2019-2020</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Algo</strong> - Licence 1 (28h TP)
|
<strong>Algo</strong> - Licence 1 (28h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -450,19 +474,19 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong>2018-2019</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
<strong>2018-2019</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Algo</strong> - Licence 1 (28h TP)
|
<strong>Algo</strong> - Licence 1 (28h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Théorie de l'information</strong> - Licence 1 (12h TP)
|
<strong>Théorie de l'information</strong> - Licence 1 (12h TP)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -478,19 +502,19 @@
|
|||||||
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
<h3 class="mb-3 font-weight-bold dark-grey-text">
|
||||||
<strong>2017-2018</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
<strong>2017-2018</strong><span class="font-weight-light" data-i18n="teachings.univtoulouse3"></span>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
<strong>Modélisation et conception objet</strong> - Master 1 (16h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
<strong>Génie logiciel</strong> - Licence 3 (20h TP)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S3</strong> - Licence 2 (11h Projet)
|
<strong>Projet S3</strong> - Licence 2 (11h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
<strong>Projet S2</strong> - Licence 1 (12h Projet)
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-2 text-justify"><i class="fas fa-angle-right mr-2"></i>
|
<p class="mb-2"><i class="fas fa-angle-right me-2"></i>
|
||||||
<strong>Théorie de l'information</strong> - Licence 1 (12h TP)
|
<strong>Théorie de l'information</strong> - Licence 1 (12h TP)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -504,19 +528,28 @@
|
|||||||
|
|
||||||
<!-- Projects container-->
|
<!-- Projects container-->
|
||||||
<div class="container" id="projects" style="display:none;">
|
<div class="container" id="projects" style="display:none;">
|
||||||
<!--Section: Jumbotron-->
|
|
||||||
<section class="card blue-gradient wow fadeIn" id="intro">
|
|
||||||
|
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div class="card-body text-white text-center py-5 px-5 my-5">
|
<div class="row">
|
||||||
|
<div class="col col-3 col-sm-3">
|
||||||
|
<a href="https://github.com/QRouland/UTPass">
|
||||||
|
<div class="card">
|
||||||
|
<div class="bg-image hover-overlay" data-mdb-ripple-init data-mdb-ripple-color="light">
|
||||||
|
<img src="assets/projects/utpass.png" class="img-project img-fluid" alt="UTPass app logo"/>
|
||||||
|
<div class="mask" style="background-color: rgba(251, 251, 251, 0.15);"></div>
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">UTPass</h5>
|
||||||
|
<p class="card-text">A Ubuntu Touch password management app aiming to be compatible with pass.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h1 class="">
|
</div>
|
||||||
<strong><p class="text-center mb-5" data-i18n="projects.soon"></p></strong>
|
</a>
|
||||||
</h1>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
</section>
|
|
||||||
<!--Section: Jumbotron-->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!--Projects container-->
|
<!--Projects container-->
|
||||||
@ -524,51 +557,44 @@
|
|||||||
</main>
|
</main>
|
||||||
<!--Main layout-->
|
<!--Main layout-->
|
||||||
|
|
||||||
<div class="push"></div>
|
|
||||||
</div>
|
|
||||||
<!--Wrapper layout-->
|
|
||||||
|
|
||||||
<!--Footer-->
|
<!--Footer-->
|
||||||
<footer class="page-footer footer text-center font-small mdb-color darken-2 mt-4 wow fadeIn fixed-bottom">
|
<footer class="bg-body-tertiary text-center fixed-bottom border-top">
|
||||||
|
|
||||||
<hr class="my-2">
|
|
||||||
|
|
||||||
<!-- Social icons -->
|
<!-- Social icons -->
|
||||||
<div class="pb-1">
|
<div class="pb-1 pt-2">
|
||||||
<a href="mailto:quentin@qrouland.com" target="_blank">
|
<a href="mailto:quentin@qrouland.com" target="_blank">
|
||||||
<i class="far fa-envelope mr-2 ml-2 fa-3x"></i>
|
<i class="far fa-envelope me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.linkedin.com/in/qrouland" target="_blank">
|
<a href="https://www.linkedin.com/in/qrouland" target="_blank">
|
||||||
<i class="fab fa-linkedin mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-linkedin me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://scholar.google.com/citations?user=X4Cjro0AAAAJ" target="_blank">
|
<a href="https://scholar.google.com/citations?user=X4Cjro0AAAAJ" target="_blank">
|
||||||
<i class="fab fa-google mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-google me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.researchgate.net/profile/Quentin_Rouland/research">
|
<a href="https://www.researchgate.net/profile/Quentin_Rouland/research">
|
||||||
<i class="fab fa-researchgate mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-researchgate me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://orcid.org/0000-0001-8613-1842">
|
<a href="https://orcid.org/0000-0001-8613-1842">
|
||||||
<i class="fab fa-orcid mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-orcid me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://git.rdrive.ovh/QRouland" target="_blank">
|
<a href="https://git.rdrive.ovh/QRouland" target="_blank">
|
||||||
<i class="fab fa-git-square mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-git-square me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/QRouland" target="_blank">
|
<a href="https://github.com/QRouland" target="_blank">
|
||||||
<i class="fab fa-github mr-2 ml-2 fa-3x"></i>
|
<i class="fab fa-github me-2 ml-2 fa-3x"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="pb-1">
|
<!-- <div class="">
|
||||||
<a id="ukflag" href="javascript:i18next.changeLanguage('en');">
|
<a id="ukflag" href="javascript:i18next.changeLanguage('en');">
|
||||||
<i class="uk flag"></i>
|
<i class="flag flag-uk"></i>
|
||||||
</a>
|
</a>
|
||||||
<a id="frflag" href="javascript:i18next.changeLanguage('fr');">
|
<a id="frflag" href="javascript:i18next.changeLanguage('fr');">
|
||||||
<i class="france flag"></i>
|
<i class="flag flag-france"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div> -->
|
||||||
<!-- Social icons -->
|
|
||||||
|
|
||||||
<!--Copyright-->
|
<!--Copyright-->
|
||||||
<div class="footer-copyright py-2 ">
|
<div class="footer-copyright pb-1">
|
||||||
<a href="https://qrouland.com" target="_blank"> qrouland.com </a>
|
<a href="https://qrouland.com" target="_blank"> qrouland.com </a>
|
||||||
</div>
|
</div>
|
||||||
<!--/.Copyright-->
|
<!--/.Copyright-->
|
||||||
@ -578,13 +604,14 @@
|
|||||||
|
|
||||||
<!-- SCRIPTS -->
|
<!-- SCRIPTS -->
|
||||||
<!-- JQuery -->
|
<!-- JQuery -->
|
||||||
<script type="text/javascript" src="mdb/js/jquery-3.4.1.min.js"></script>
|
<script
|
||||||
<!-- Bootstrap tooltips -->
|
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
|
||||||
<script type="text/javascript" src="mdb/js/popper.min.js"></script>
|
></script>
|
||||||
<!-- Bootstrap core JavaScript -->
|
<!-- MDB -->
|
||||||
<script type="text/javascript" src="mdb/js/bootstrap.min.js"></script>
|
<script
|
||||||
<!-- MDB core JavaScript -->
|
type="text/javascript"
|
||||||
<script type="text/javascript" src="mdb/js/mdb.min.js"></script>
|
src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/8.1.0/mdb.umd.min.js"
|
||||||
|
></script>
|
||||||
<!-- Page Selection -->
|
<!-- Page Selection -->
|
||||||
<script type="text/javascript" src="js/page_selection.js"></script>
|
<script type="text/javascript" src="js/page_selection.js"></script>
|
||||||
<!-- i18next Translation -->
|
<!-- i18next Translation -->
|
||||||
@ -592,12 +619,6 @@
|
|||||||
<script type="text/javascript" src="js/i18nextBrowserLanguageDetector.min.js"></script>
|
<script type="text/javascript" src="js/i18nextBrowserLanguageDetector.min.js"></script>
|
||||||
<script type="text/javascript" src="js/jquery-i18next.min.js"></script>
|
<script type="text/javascript" src="js/jquery-i18next.min.js"></script>
|
||||||
<script type="text/javascript" src="js/translate.js"></script>
|
<script type="text/javascript" src="js/translate.js"></script>
|
||||||
<!-- Initializations -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
// Animations initialization
|
|
||||||
new WOW().init();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
BIN
mdb/License.pdf
@ -1,26 +0,0 @@
|
|||||||
Material Design for Bootstrap
|
|
||||||
|
|
||||||
Version: MDB Free 4.8.9
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
https://mdbootstrap.com/
|
|
||||||
|
|
||||||
Getting started:
|
|
||||||
https://mdbootstrap.com/docs/jquery/getting-started/download/
|
|
||||||
|
|
||||||
Tutorials:
|
|
||||||
MDB-Bootstrap: https://mdbootstrap.com/education/bootstrap/
|
|
||||||
MDB-Wordpress: https://mdbootstrap.com/education/wordpress/
|
|
||||||
|
|
||||||
Templates:
|
|
||||||
https://mdbootstrap.com/templates/
|
|
||||||
|
|
||||||
License:
|
|
||||||
https://mdbootstrap.com/general/license/
|
|
||||||
|
|
||||||
Support:
|
|
||||||
https://mdbootstrap.com/forums/forum/support/
|
|
||||||
|
|
||||||
Contact:
|
|
||||||
office@mdbootstrap.com
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
|||||||
/*
|
|
||||||
* MDBootstrap integration with Datatables
|
|
||||||
* Learn more: https://mdbootstrap.com/docs/jquery/tables/datatables/
|
|
||||||
* About MDBootstrap: https://mdbootstrap.com/
|
|
||||||
*
|
|
||||||
* This combined file was created taking that code from this webstie:
|
|
||||||
* https://cdn.datatables.net/select/1.2.7/css/select.dataTables.min.css
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
|
||||||
* software please visit:
|
|
||||||
* https://datatables.net/download/#bs4/dt-1.10.18
|
|
||||||
*
|
|
||||||
* Included libraries:
|
|
||||||
* DataTables 1.10.18
|
|
||||||
*/
|
|
||||||
table.dataTable tbody > tr.selected,
|
|
||||||
table.dataTable tbody > tr > .selected {
|
|
||||||
background-color: #B0BED9; }
|
|
||||||
|
|
||||||
table.dataTable.stripe tbody > tr.odd.selected,
|
|
||||||
table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
|
|
||||||
table.dataTable.display tbody > tr.odd > .selected {
|
|
||||||
background-color: #acbad4; }
|
|
||||||
|
|
||||||
table.dataTable.hover tbody > tr.selected:hover,
|
|
||||||
table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
|
|
||||||
table.dataTable.display tbody > tr > .selected:hover {
|
|
||||||
background-color: #aab7d1; }
|
|
||||||
|
|
||||||
table.dataTable.order-column tbody > tr.selected > .sorting_1, table.dataTable.order-column tbody > tr.selected > .sorting_2, table.dataTable.order-column tbody > tr.selected > .sorting_3, table.dataTable.display tbody > tr.selected > .sorting_1, table.dataTable.display tbody > tr.selected > .sorting_2, table.dataTable.display tbody > tr.selected > .sorting_3 {
|
|
||||||
background-color: #acbad5; }
|
|
||||||
|
|
||||||
table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr > .selected {
|
|
||||||
background-color: #acbad5; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
|
|
||||||
background-color: #a6b4cd; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
|
|
||||||
background-color: #a8b5cf; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
|
|
||||||
background-color: #a9b7d1; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
|
|
||||||
background-color: #acbad5; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
|
|
||||||
background-color: #aebcd6; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
|
|
||||||
background-color: #afbdd8; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
|
|
||||||
background-color: #a6b4cd; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
|
|
||||||
background-color: #acbad5; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
|
|
||||||
background-color: #a2aec7; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
|
|
||||||
background-color: #a3b0c9; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
|
|
||||||
background-color: #a5b2cb; }
|
|
||||||
|
|
||||||
table.dataTable.display tbody > tr:hover > .selected, table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected, table.dataTable.order-column.hover tbody > tr > .selected:hover {
|
|
||||||
background-color: #a2aec7; }
|
|
||||||
|
|
||||||
table.dataTable tbody td.select-checkbox, table.dataTable tbody th.select-checkbox {
|
|
||||||
position: relative; }
|
|
||||||
|
|
||||||
table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after, table.dataTable tbody th.select-checkbox:before, table.dataTable tbody th.select-checkbox:after {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 1.2em;
|
|
||||||
left: 50%;
|
|
||||||
width: 12px;
|
|
||||||
height: 12px;
|
|
||||||
-webkit-box-sizing: border-box;
|
|
||||||
box-sizing: border-box; }
|
|
||||||
|
|
||||||
table.dataTable tbody td.select-checkbox:before,
|
|
||||||
table.dataTable tbody th.select-checkbox:before {
|
|
||||||
content: ' ';
|
|
||||||
margin-top: 4px;
|
|
||||||
margin-left: -6px;
|
|
||||||
border: 1px solid black;
|
|
||||||
-webkit-border-radius: 3px;
|
|
||||||
border-radius: 3px; }
|
|
||||||
|
|
||||||
table.dataTable tr.selected td.select-checkbox:after,
|
|
||||||
table.dataTable tr.selected th.select-checkbox:after {
|
|
||||||
content: '\2714';
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-left: -4px;
|
|
||||||
text-align: center;
|
|
||||||
text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper span.select-info, div.dataTables_wrapper span.select-item {
|
|
||||||
margin-left: 0.5em; }
|
|
||||||
|
|
||||||
@media screen and (max-width: 640px) {
|
|
||||||
div.dataTables_wrapper span.select-info, div.dataTables_wrapper span.select-item {
|
|
||||||
margin-left: 0;
|
|
||||||
display: block; } }
|
|
1
mdb/css/addons/datatables-select.min.css
vendored
@ -1 +0,0 @@
|
|||||||
table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected,table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected,table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:after,table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:after,table.dataTable tbody th.select-checkbox:before{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;-webkit-box-sizing:border-box;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:4px;margin-left:-6px;border:1px solid #000;-webkit-border-radius:3px;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:0;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9,-1px -1px #B0BED9,1px -1px #B0BED9,-1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width:640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
|
|
@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* MDBootstrap integration with Datatables
|
|
||||||
* Learn more: https://mdbootstrap.com/docs/jquery/tables/datatables/
|
|
||||||
* About MDBootstrap: https://mdbootstrap.com/
|
|
||||||
*
|
|
||||||
* This combined file was created by the DataTables downloader builder:
|
|
||||||
* https://datatables.net/download
|
|
||||||
*
|
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
|
||||||
* software please visit:
|
|
||||||
* https://datatables.net/download/#bs4/dt-1.10.18
|
|
||||||
*
|
|
||||||
* Included libraries:
|
|
||||||
* DataTables 1.10.18
|
|
||||||
*/
|
|
||||||
table.dataTable thead {
|
|
||||||
cursor: pointer; }
|
|
||||||
table.dataTable thead > tr > th:active,
|
|
||||||
table.dataTable thead > tr > td:active {
|
|
||||||
outline: none; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label {
|
|
||||||
margin-top: 1.2rem;
|
|
||||||
margin-right: 1rem; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span,
|
|
||||||
div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown {
|
|
||||||
margin-top: 1rem; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_length label, div.dataTables_wrapper div.dataTables_filter label {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: normal;
|
|
||||||
padding-top: .5rem;
|
|
||||||
padding-bottom: .5rem; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_length select,
|
|
||||||
div.dataTables_wrapper div.dataTables_length input {
|
|
||||||
width: auto; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
text-align: right; }
|
|
||||||
div.dataTables_wrapper div.dataTables_filter select,
|
|
||||||
div.dataTables_wrapper div.dataTables_filter input {
|
|
||||||
width: auto; }
|
|
||||||
div.dataTables_wrapper div.dataTables_filter input {
|
|
||||||
margin-left: .5rem;
|
|
||||||
display: inline-block; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_info, div.dataTables_wrapper div.dataTables_paginate {
|
|
||||||
font-weight: normal;
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem; }
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_paginate {
|
|
||||||
text-align: right;
|
|
||||||
margin: 0; }
|
|
||||||
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
|
|
||||||
-webkit-box-pack: end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
-ms-flex-pack: end;
|
|
||||||
justify-content: flex-end; }
|
|
||||||
div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus {
|
|
||||||
background-color: #4285f4; }
|
|
||||||
div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus {
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none; }
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
div.dataTables_wrapper div .dataTables_length,
|
|
||||||
div.dataTables_wrapper div .dataTables_filter,
|
|
||||||
div.dataTables_wrapper div .dataTables_info,
|
|
||||||
div.dataTables_wrapper div .dataTables_paginate ul.pagination {
|
|
||||||
text-align: center;
|
|
||||||
-webkit-box-pack: center;
|
|
||||||
-webkit-justify-content: center;
|
|
||||||
-ms-flex-pack: center;
|
|
||||||
justify-content: center; } }
|
|
||||||
|
|
||||||
.bs-select select {
|
|
||||||
display: inline-block !important; }
|
|
||||||
|
|
||||||
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
|
|
||||||
table.dataTable thead > tr > td.sorting_asc,
|
|
||||||
table.dataTable thead > tr > td.sorting_desc,
|
|
||||||
table.dataTable thead > tr > td.sorting {
|
|
||||||
padding-right: 30px; }
|
|
||||||
|
|
||||||
table.dataTable thead > tr > th:active,
|
|
||||||
table.dataTable thead > tr > td:active {
|
|
||||||
outline: none; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting,
|
|
||||||
table.dataTable thead .sorting_asc,
|
|
||||||
table.dataTable thead .sorting_desc,
|
|
||||||
table.dataTable thead .sorting_asc_disabled,
|
|
||||||
table.dataTable thead .sorting_desc_disabled {
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
|
|
||||||
table.dataTable thead .sorting_asc:before,
|
|
||||||
table.dataTable thead .sorting_asc:after,
|
|
||||||
table.dataTable thead .sorting_desc:before,
|
|
||||||
table.dataTable thead .sorting_desc:after,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:before,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:after,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:before,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:after {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0.9em;
|
|
||||||
display: block;
|
|
||||||
opacity: 0.3; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting:before,
|
|
||||||
table.dataTable thead .sorting_asc:before,
|
|
||||||
table.dataTable thead .sorting_desc:before,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:before,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:before {
|
|
||||||
right: 1em;
|
|
||||||
content: "\f0de"; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting:after,
|
|
||||||
table.dataTable thead .sorting_asc:after,
|
|
||||||
table.dataTable thead .sorting_desc:after,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:after,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:after {
|
|
||||||
content: "\f0dd";
|
|
||||||
right: 16px; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting:before,
|
|
||||||
table.dataTable thead .sorting_asc:before,
|
|
||||||
table.dataTable thead .sorting_desc:before,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:before,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:before,
|
|
||||||
table.dataTable thead .sorting:after,
|
|
||||||
table.dataTable thead .sorting_asc:after,
|
|
||||||
table.dataTable thead .sorting_desc:after,
|
|
||||||
table.dataTable thead .sorting_asc_disabled:after,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:after {
|
|
||||||
font-family: 'Font Awesome\ 5 Free';
|
|
||||||
font-weight: 900;
|
|
||||||
font-size: 1rem; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting_asc:before,
|
|
||||||
table.dataTable thead .sorting_desc:after {
|
|
||||||
opacity: 1; }
|
|
||||||
|
|
||||||
table.dataTable thead .sorting_asc_disabled:before,
|
|
||||||
table.dataTable thead .sorting_desc_disabled:after {
|
|
||||||
opacity: 0; }
|
|
1
mdb/css/addons/datatables.min.css
vendored
@ -1 +0,0 @@
|
|||||||
div.dataTables_wrapper div.dataTables_filter input,div.dataTables_wrapper div.dataTables_filter select,div.dataTables_wrapper div.dataTables_length input,div.dataTables_wrapper div.dataTables_length select{width:auto}table.dataTable thead{cursor:pointer}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label{margin-top:1.2rem;margin-right:1rem}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown,div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span{margin-top:1rem}div.dataTables_wrapper div.dataTables_filter label,div.dataTables_wrapper div.dataTables_length label{text-align:left;font-weight:400;padding-top:.5rem;padding-bottom:.5rem}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5rem;display:inline-block}div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{font-weight:400;padding-top:1rem;padding-bottom:1rem}div.dataTables_wrapper div.dataTables_paginate{text-align:right;margin:0}div.dataTables_wrapper div.dataTables_paginate ul.pagination{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus{background-color:#4285f4}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus{-webkit-box-shadow:none;box-shadow:none}@media (max-width:767px){div.dataTables_wrapper div .dataTables_filter,div.dataTables_wrapper div .dataTables_info,div.dataTables_wrapper div .dataTables_length,div.dataTables_wrapper div .dataTables_paginate ul.pagination{text-align:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.bs-select select{display:inline-block!important}table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc{padding-right:30px}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:after,table.dataTable thead .sorting_desc_disabled:before{position:absolute;bottom:.9em;display:block;opacity:.3;font-family:'Font Awesome\ 5 Free';font-weight:900;font-size:1rem}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\f0de"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc_disabled:after{content:"\f0dd";right:16px}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}
|
|
@ -1,32 +0,0 @@
|
|||||||
.opacity-0 {
|
|
||||||
opacity: 0; }
|
|
||||||
|
|
||||||
.opacity-10 {
|
|
||||||
opacity: 0.1; }
|
|
||||||
|
|
||||||
.opacity-20 {
|
|
||||||
opacity: 0.2; }
|
|
||||||
|
|
||||||
.opacity-30 {
|
|
||||||
opacity: 0.3; }
|
|
||||||
|
|
||||||
.opacity-40 {
|
|
||||||
opacity: 0.4; }
|
|
||||||
|
|
||||||
.opacity-50 {
|
|
||||||
opacity: 0.5; }
|
|
||||||
|
|
||||||
.opacity-60 {
|
|
||||||
opacity: 0.6; }
|
|
||||||
|
|
||||||
.opacity-70 {
|
|
||||||
opacity: 0.7; }
|
|
||||||
|
|
||||||
.opacity-80 {
|
|
||||||
opacity: 0.8; }
|
|
||||||
|
|
||||||
.opacity-90 {
|
|
||||||
opacity: 0.9; }
|
|
||||||
|
|
||||||
.opacity-100 {
|
|
||||||
opacity: 1; }
|
|
1
mdb/css/addons/directives.min.css
vendored
@ -1 +0,0 @@
|
|||||||
.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}
|
|
9
mdb/css/addons/flag.min.css
vendored
@ -1,23 +0,0 @@
|
|||||||
.mdb-rating .rate-popover {
|
|
||||||
color: grey; }
|
|
||||||
|
|
||||||
.mdb-rating .live {
|
|
||||||
color: black; }
|
|
||||||
|
|
||||||
.mdb-rating .oneStar {
|
|
||||||
color: #44370f; }
|
|
||||||
|
|
||||||
.mdb-rating .twoStars {
|
|
||||||
color: #96781e; }
|
|
||||||
|
|
||||||
.mdb-rating .threeStars {
|
|
||||||
color: #e2b52e; }
|
|
||||||
|
|
||||||
.mdb-rating .fourStars {
|
|
||||||
color: #f1ba12; }
|
|
||||||
|
|
||||||
.mdb-rating .fiveStars {
|
|
||||||
color: #f3cb06; }
|
|
||||||
|
|
||||||
.mdb-rating .amber-text {
|
|
||||||
color: #ffc107 !important; }
|
|
1
mdb/css/addons/rating.min.css
vendored
@ -1 +0,0 @@
|
|||||||
.mdb-rating .rate-popover{color:grey}.mdb-rating .live{color:#000}.mdb-rating .oneStar{color:#44370f}.mdb-rating .twoStars{color:#96781e}.mdb-rating .threeStars{color:#e2b52e}.mdb-rating .fourStars{color:#f1ba12}.mdb-rating .fiveStars{color:#f3cb06}.mdb-rating .amber-text{color:#ffc107!important}
|
|
@ -1,62 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
|
|
||||||
* License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
|
|
||||||
*/
|
|
||||||
.zmd-hierarchical-display {
|
|
||||||
visibility: hidden; }
|
|
||||||
.zmd-hierarchical-display.in {
|
|
||||||
visibility: visible; }
|
|
||||||
|
|
||||||
.zmd-hierarchical-displaying {
|
|
||||||
visibility: visible; }
|
|
||||||
|
|
||||||
.animation {
|
|
||||||
-webkit-animation-duration: 1s;
|
|
||||||
animation-duration: 1s;
|
|
||||||
-webkit-animation-fill-mode: both;
|
|
||||||
animation-fill-mode: both; }
|
|
||||||
|
|
||||||
.animation.zoomedIn,
|
|
||||||
.animation.zoomedOut {
|
|
||||||
-webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1);
|
|
||||||
animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1); }
|
|
||||||
|
|
||||||
@-webkit-keyframes zoomedIn {
|
|
||||||
from {
|
|
||||||
-webkit-transform: scale(0);
|
|
||||||
transform: scale(0); }
|
|
||||||
to {
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
|
||||||
|
|
||||||
@keyframes zoomedIn {
|
|
||||||
from {
|
|
||||||
-webkit-transform: scale(0);
|
|
||||||
transform: scale(0); }
|
|
||||||
to {
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
|
||||||
|
|
||||||
@-webkit-keyframes zoomedOut {
|
|
||||||
from {
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); }
|
|
||||||
to {
|
|
||||||
-webkit-transform: scale(0);
|
|
||||||
transform: scale(0); } }
|
|
||||||
|
|
||||||
@keyframes zoomedOut {
|
|
||||||
from {
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); }
|
|
||||||
to {
|
|
||||||
-webkit-transform: scale(0);
|
|
||||||
transform: scale(0); } }
|
|
||||||
|
|
||||||
.zoomedIn {
|
|
||||||
-webkit-animation-name: zoomedIn;
|
|
||||||
animation-name: zoomedIn; }
|
|
||||||
|
|
||||||
.zoomedOut {
|
|
||||||
-webkit-animation-name: zoomedOut;
|
|
||||||
animation-name: zoomedOut; }
|
|
@ -1,4 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
|
|
||||||
* License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
|
|
||||||
*/.zmd-hierarchical-display{visibility:hidden}.zmd-hierarchical-display.in{visibility:visible}.zmd-hierarchical-displaying{visibility:visible}.animation{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animation.zoomedIn,.animation.zoomedOut{-webkit-animation-timing-function:cubic-bezier(.55,0,.1,1);animation-timing-function:cubic-bezier(.55,0,.1,1)}@-webkit-keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}.zoomedIn{-webkit-animation-name:zoomedIn;animation-name:zoomedIn}.zoomedOut{-webkit-animation-name:zoomedOut;animation-name:zoomedOut}
|
|
10038
mdb/css/bootstrap.css
vendored
7
mdb/css/bootstrap.min.css
vendored
8464
mdb/css/mdb.css
6144
mdb/css/mdb.lite.css
38
mdb/css/mdb.lite.min.css
vendored
44
mdb/css/mdb.min.css
vendored
7
mdb/css/modules/animations-extended.min.css
vendored
@ -1,13 +0,0 @@
|
|||||||
.wrapper {
|
|
||||||
min-height: 100%;
|
|
||||||
height: 100%;
|
|
||||||
margin: 100 auto -120px; /* the bottom margin is the negative value of the footer's height */
|
|
||||||
}
|
|
||||||
.footer, .push {
|
|
||||||
height: 120px; /* .push must be the same height as .footer */
|
|
||||||
}
|
|
||||||
|
|
||||||
.vcenter {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
0
mdb/css/style.min.css
vendored
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 547 B |
@ -1 +0,0 @@
|
|||||||
<svg width="264" height="88" viewBox="0 0 264 88" xmlns="http://www.w3.org/2000/svg"><title>default-skin 2</title><g fill="none" fill-rule="evenodd"><g><path d="M67.002 59.5v3.768c-6.307.84-9.184 5.75-10.002 9.732 2.22-2.83 5.564-5.098 10.002-5.098V71.5L73 65.585 67.002 59.5z" id="Shape" fill="#fff"/><g fill="#fff"><path d="M13 29v-5h2v3h3v2h-5zM13 15h5v2h-3v3h-2v-5zM31 15v5h-2v-3h-3v-2h5zM31 29h-5v-2h3v-3h2v5z" id="Shape"/></g><g fill="#fff"><path d="M62 24v5h-2v-3h-3v-2h5zM62 20h-5v-2h3v-3h2v5zM70 20v-5h2v3h3v2h-5zM70 24h5v2h-3v3h-2v-5z"/></g><path d="M20.586 66l-5.656-5.656 1.414-1.414L22 64.586l5.656-5.656 1.414 1.414L23.414 66l5.656 5.656-1.414 1.414L22 67.414l-5.656 5.656-1.414-1.414L20.586 66z" fill="#fff"/><path d="M111.785 65.03L110 63.5l3-3.5h-10v-2h10l-3-3.5 1.785-1.468L117 59l-5.215 6.03z" fill="#fff"/><path d="M152.215 65.03L154 63.5l-3-3.5h10v-2h-10l3-3.5-1.785-1.468L147 59l5.215 6.03z" fill="#fff"/><g><path id="Rectangle-11" fill="#fff" d="M160.957 28.543l-3.25-3.25-1.413 1.414 3.25 3.25z"/><path d="M152.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" id="Oval-1" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M150 21h5v1h-5z"/></g><g><path d="M116.957 28.543l-1.414 1.414-3.25-3.25 1.414-1.414 3.25 3.25z" fill="#fff"/><path d="M108.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M106 21h5v1h-5z"/><path fill="#fff" d="M109.043 19.008l-.085 5-1-.017.085-5z"/></g></g></g></svg>
|
|
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 866 B |
Before Width: | Height: | Size: 211 B |
Before Width: | Height: | Size: 213 B |
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 211 B |
Before Width: | Height: | Size: 213 B |
Before Width: | Height: | Size: 211 B |
Before Width: | Height: | Size: 215 B |
Before Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 137 B |
Before Width: | Height: | Size: 200 KiB |
@ -1,4 +0,0 @@
|
|||||||
<svg fill="#FFFFFF" height="36" viewBox="0 0 24 24" width="36" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"/>
|
|
||||||
<path d="M0-.5h24v24H0z" fill="none"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 218 B |
@ -1,4 +0,0 @@
|
|||||||
<svg fill="#FFFFFF" height="36" viewBox="0 0 24 24" width="36" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/>
|
|
||||||
<path d="M0-.25h24v24H0z" fill="none"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 217 B |
Before Width: | Height: | Size: 28 KiB |
@ -1,46 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<title>Material Design Bootstrap</title>
|
|
||||||
<!-- Font Awesome -->
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css">
|
|
||||||
<!-- Bootstrap core CSS -->
|
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<!-- Material Design Bootstrap -->
|
|
||||||
<link href="css/mdb.min.css" rel="stylesheet">
|
|
||||||
<!-- Your custom styles (optional) -->
|
|
||||||
<link href="css/style.css" rel="stylesheet">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<!-- Start your project here-->
|
|
||||||
<div style="height: 100vh">
|
|
||||||
<div class="flex-center flex-column">
|
|
||||||
|
|
||||||
<h1 class="text-hide animated fadeIn mb-4"
|
|
||||||
style="background-image: url('https://mdbootstrap.com/img/logo/mdb-transparent-250px.png'); width: 250px; height: 90px;">
|
|
||||||
MDBootstrap</h1>
|
|
||||||
<h5 class="animated fadeIn mb-3">Thank you for using our product. We're glad you're with us.</h5>
|
|
||||||
|
|
||||||
<p class="animated fadeIn text-muted">MDB Team</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Start your project here-->
|
|
||||||
|
|
||||||
<!-- SCRIPTS -->
|
|
||||||
<!-- JQuery -->
|
|
||||||
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
|
|
||||||
<!-- Bootstrap tooltips -->
|
|
||||||
<script type="text/javascript" src="js/popper.min.js"></script>
|
|
||||||
<!-- Bootstrap core JavaScript -->
|
|
||||||
<script type="text/javascript" src="js/bootstrap.min.js"></script>
|
|
||||||
<!-- MDB core JavaScript -->
|
|
||||||
<script type="text/javascript" src="js/mdb.min.js"></script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
5
mdb/js/addons/datatables-select.min.js
vendored
3
mdb/js/addons/datatables.min.js
vendored
7
mdb/js/addons/imagesloaded.pkgd.min.js
vendored
@ -1,176 +0,0 @@
|
|||||||
/* ========================================================================
|
|
||||||
* Zavoloklom Material Design: jquery.zmd.hierarchical-display.js
|
|
||||||
* http://zavoloklom.github.io/material-design-hierarchical-display/
|
|
||||||
* ========================================================================
|
|
||||||
* Copyright 2014 Zavoloklom.
|
|
||||||
* Licensed under MIT (https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE)
|
|
||||||
* ======================================================================== */
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// CLASS DEFINITION
|
|
||||||
// ======================
|
|
||||||
var HDisplay = function (element, options) {
|
|
||||||
this.$element = $(element);
|
|
||||||
this.$children = this.$element.children();
|
|
||||||
this.options = $.extend({}, HDisplay.DEFAULTS, options);
|
|
||||||
this._time = HDisplay.TRANSITION_DURATION * this.options.speed;
|
|
||||||
|
|
||||||
this.init();
|
|
||||||
if (this.options.debug === true) this._debug();
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.VERSION = '1.0.1';
|
|
||||||
|
|
||||||
HDisplay.TRANSITION_DURATION = 300;
|
|
||||||
|
|
||||||
HDisplay.DEFAULTS = {
|
|
||||||
action: 'show',
|
|
||||||
speed: 5,
|
|
||||||
animationIn: 'zoomedIn',
|
|
||||||
animationOut: 'zoomedOut',
|
|
||||||
debug: false
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype.init = function () {
|
|
||||||
var self = this;
|
|
||||||
var parentElement = this.$element;
|
|
||||||
var children = this.$children;
|
|
||||||
var options = this.options;
|
|
||||||
var time = this._time;
|
|
||||||
var elementOffset, calculatedOffset, elemDelay;
|
|
||||||
|
|
||||||
parentElement.addClass('zmd-hierarchical-display');
|
|
||||||
|
|
||||||
children.each(function () {
|
|
||||||
elementOffset = $(this).position();
|
|
||||||
calculatedOffset = elementOffset.left * 0.8 + elementOffset.top;
|
|
||||||
elemDelay = parseFloat(calculatedOffset / time).toFixed(2);
|
|
||||||
$(this)
|
|
||||||
.css("-webkit-animation-delay", elemDelay + 's')
|
|
||||||
.css("animation-delay", elemDelay + 's');
|
|
||||||
});
|
|
||||||
|
|
||||||
this._delay = elemDelay;
|
|
||||||
|
|
||||||
// Call complete function after animation on last children element ends
|
|
||||||
children.last().on('webkitAnimationEnd animationend', function(){
|
|
||||||
if ($(this).hasClass(options.animationOut)) {self._complete('hidden');}
|
|
||||||
if ($(this).hasClass(options.animationIn)) {self._complete('shown');}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype.show = function () {
|
|
||||||
var parentElement = this.$element;
|
|
||||||
var children = this.$children;
|
|
||||||
var options = this.options;
|
|
||||||
|
|
||||||
if (parentElement.hasClass('in') || parentElement.hasClass('zmd-hierarchical-displaying')) return;
|
|
||||||
|
|
||||||
this._removeAnimations();
|
|
||||||
|
|
||||||
parentElement.trigger($.Event('show.zmd.hierarchicalDisplay'));
|
|
||||||
|
|
||||||
this._addAnimation(options.animationIn);
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype.hide = function () {
|
|
||||||
var parentElement = this.$element;
|
|
||||||
var children = this.$children;
|
|
||||||
var options = this.options;
|
|
||||||
|
|
||||||
if (parentElement.css('visibility') === 'hidden' || parentElement.hasClass('zmd-hierarchical-displaying')) return;
|
|
||||||
|
|
||||||
this._removeAnimations();
|
|
||||||
|
|
||||||
parentElement.trigger($.Event('hide.zmd.hierarchicalDisplay'));
|
|
||||||
|
|
||||||
this._addAnimation(options.animationOut);
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype.toggle = function () {
|
|
||||||
if (this.$element.hasClass('in')) {return this.hide();}
|
|
||||||
return this.show();
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype._removeAnimations = function () {
|
|
||||||
var options = this.options;
|
|
||||||
this.$children.each(function () {
|
|
||||||
$(this)
|
|
||||||
.removeClass(options.animationIn)
|
|
||||||
.removeClass(options.animationOut);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype._addAnimation = function (animation) {
|
|
||||||
this.$element.addClass('zmd-hierarchical-displaying');
|
|
||||||
this.$children.each(function () {
|
|
||||||
$(this)
|
|
||||||
.addClass(animation)
|
|
||||||
.addClass('animation');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype._complete = function (eventName) {
|
|
||||||
this.$element
|
|
||||||
.removeClass('zmd-hierarchical-displaying')
|
|
||||||
.toggleClass('in')
|
|
||||||
.trigger($.Event(eventName+'.zmd.hierarchicalDisplay'));
|
|
||||||
};
|
|
||||||
|
|
||||||
HDisplay.prototype._debug = function () {
|
|
||||||
$(document)
|
|
||||||
.on('show.zmd.hierarchicalDisplay', function (e) {
|
|
||||||
console.log('Event "show.zmd.hierarchicalDisplay". For more information see:');
|
|
||||||
console.log(e);
|
|
||||||
})
|
|
||||||
.on('shown.zmd.hierarchicalDisplay', function (e) {
|
|
||||||
console.log('Event "shown.zmd.hierarchicalDisplay". For more information see:');
|
|
||||||
console.log(e);
|
|
||||||
})
|
|
||||||
.on('hide.zmd.hierarchicalDisplay', function (e) {
|
|
||||||
console.log('Event "hide.zmd.hierarchicalDisplay". For more information see:');
|
|
||||||
console.log(e);
|
|
||||||
})
|
|
||||||
.on('hidden.zmd.hierarchicalDisplay', function (e) {
|
|
||||||
console.log('Event "hidden.zmd.hierarchicalDisplay". For more information see:');
|
|
||||||
console.log(e);
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// PLUGIN DEFINITION
|
|
||||||
// =======================
|
|
||||||
function Plugin(settings) {
|
|
||||||
return this.each(function () {
|
|
||||||
var $this = $(this);
|
|
||||||
var data = $this.data('zmd.hierarchicalDisplay');
|
|
||||||
var options = $.extend({}, HDisplay.DEFAULTS, $this.data(), typeof settings === 'object' && settings);
|
|
||||||
|
|
||||||
if (!data) {$this.data('zmd.hierarchicalDisplay', (data = new HDisplay(this, options)));}
|
|
||||||
if (typeof settings === 'string') {return data[settings]();}
|
|
||||||
if (options.action in data) {return data[options.action]();}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$.fn.hierarchicalDisplay = Plugin;
|
|
||||||
$.fn.hierarchicalDisplay.Constructor = HDisplay;
|
|
||||||
|
|
||||||
// DATA-API
|
|
||||||
// ==============
|
|
||||||
$(document).on('ready', function () {
|
|
||||||
$('[data-animation="hierarchical-display"]').each(function () {
|
|
||||||
Plugin.call($(this));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
$(document).on('click', '[data-toggle="hierarchical-display"]', function (e) {
|
|
||||||
var $this = $(this);
|
|
||||||
var $target = $($this.attr('data-target') || $this.attr('href'));
|
|
||||||
|
|
||||||
if ($this.is('a')) e.preventDefault();
|
|
||||||
|
|
||||||
Plugin.call($target, 'toggle');
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery);
|
|
@ -1 +0,0 @@
|
|||||||
(function(i){"use strict";function t(t){return this.each(function(){var a=i(this),e=a.data("zmd.hierarchicalDisplay"),o=i.extend({},n.DEFAULTS,a.data(),"object"==typeof t&&t);return e||a.data("zmd.hierarchicalDisplay",e=new n(this,o)),"string"==typeof t?e[t]():o.action in e?e[o.action]():void 0})}var n=function(t,a){this.$element=i(t),this.$children=this.$element.children(),this.options=i.extend({},n.DEFAULTS,a),this._time=n.TRANSITION_DURATION*this.options.speed,this.init(),!0===this.options.debug&&this._debug()};n.VERSION="1.0.1",n.TRANSITION_DURATION=300,n.DEFAULTS={action:"show",speed:5,animationIn:"zoomedIn",animationOut:"zoomedOut",debug:!1},n.prototype.init=function(){var t,n,a,e=this,o=this.$element,s=this.$children,h=this.options,l=this._time;o.addClass("zmd-hierarchical-display"),s.each(function(){t=i(this).position(),n=.8*t.left+t.top,a=parseFloat(n/l).toFixed(2),i(this).css("-webkit-animation-delay",a+"s").css("animation-delay",a+"s")}),this._delay=a,s.last().on("webkitAnimationEnd animationend",function(){i(this).hasClass(h.animationOut)&&e._complete("hidden"),i(this).hasClass(h.animationIn)&&e._complete("shown")})},n.prototype.show=function(){var t=this.$element,n=(this.$children,this.options);t.hasClass("in")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("show.zmd.hierarchicalDisplay")),this._addAnimation(n.animationIn))},n.prototype.hide=function(){var t=this.$element,n=(this.$children,this.options);"hidden"===t.css("visibility")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("hide.zmd.hierarchicalDisplay")),this._addAnimation(n.animationOut))},n.prototype.toggle=function(){return this.$element.hasClass("in")?this.hide():this.show()},n.prototype._removeAnimations=function(){var t=this.options;this.$children.each(function(){i(this).removeClass(t.animationIn).removeClass(t.animationOut)})},n.prototype._addAnimation=function(t){this.$element.addClass("zmd-hierarchical-displaying"),this.$children.each(function(){i(this).addClass(t).addClass("animation")})},n.prototype._complete=function(t){this.$element.removeClass("zmd-hierarchical-displaying").toggleClass("in").trigger(i.Event(t+".zmd.hierarchicalDisplay"))},n.prototype._debug=function(){i(document).on("show.zmd.hierarchicalDisplay",function(i){console.log('Event "show.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("shown.zmd.hierarchicalDisplay",function(i){console.log('Event "shown.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hide.zmd.hierarchicalDisplay",function(i){console.log('Event "hide.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hidden.zmd.hierarchicalDisplay",function(i){console.log('Event "hidden.zmd.hierarchicalDisplay". For more information see:'),console.log(i)})},i.fn.hierarchicalDisplay=t,i.fn.hierarchicalDisplay.Constructor=n,i(document).on("ready",function(){i('[data-animation="hierarchical-display"]').each(function(){t.call(i(this))})}),i(document).on("click",'[data-toggle="hierarchical-display"]',function(n){var a=i(this),e=i(a.attr("data-target")||a.attr("href"));a.is("a")&&n.preventDefault(),t.call(e,"toggle")})})(jQuery);
|
|
9
mdb/js/addons/masonry.pkgd.min.js
vendored
@ -1,31 +0,0 @@
|
|||||||
(function ($) {
|
|
||||||
$.fn.progressBar = function (givenValue) {
|
|
||||||
const $this = $(this);
|
|
||||||
|
|
||||||
function init(selector) {
|
|
||||||
const progressValue = selector.children().attr('aria-valuenow');
|
|
||||||
selector.children().width(`${progressValue}%`);
|
|
||||||
selector.children().html('<span></span>');
|
|
||||||
$this.hasClass('md-progress') ? selector.children().children().addClass('md-progress-bar-text') : selector.children().children().addClass('progress-bar-text');
|
|
||||||
(progressValue !== 100) ? selector.children().children().text(`${progressValue}%`) : selector.children().children().html('<i class="fas fa-check"></i>');
|
|
||||||
}
|
|
||||||
|
|
||||||
function set(selector, value) {
|
|
||||||
selector.children().removeClass('success fail active');
|
|
||||||
selector.children().attr('aria-valuenow', value);
|
|
||||||
init(selector);
|
|
||||||
if (value > 100) {
|
|
||||||
return false;
|
|
||||||
} else if (value === 100) {
|
|
||||||
selector.children().addClass('success');
|
|
||||||
} else if (value < 30) {
|
|
||||||
selector.children().addClass('fail');
|
|
||||||
} else {
|
|
||||||
selector.children().addClass('active');
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
set($this, givenValue);
|
|
||||||
};
|
|
||||||
}(jQuery));
|
|
4
mdb/js/addons/progressBar.min.js
vendored
@ -1,4 +0,0 @@
|
|||||||
(function($){$.fn.progressBar=function(givenValue){const $this=$(this);function init(selector){const progressValue=selector.children().attr('aria-valuenow');selector.children().width(`${progressValue}%`);selector.children().html('<span></span>');$this.hasClass('md-progress')?selector.children().children().addClass('md-progress-bar-text'):selector.children().children().addClass('progress-bar-text');(progressValue!==100)?selector.children().children().text(`${progressValue}%`):selector.children().children().html('<i class="fas fa-check"></i>')}
|
|
||||||
function set(selector,value){selector.children().removeClass('success fail active');selector.children().attr('aria-valuenow',value);init(selector);if(value>100){return!1}else if(value===100){selector.children().addClass('success')}else if(value<30){selector.children().addClass('fail')}else{selector.children().addClass('active')}
|
|
||||||
return!0}
|
|
||||||
set($this,givenValue)}}(jQuery))
|
|
@ -1,121 +0,0 @@
|
|||||||
(function ($) {
|
|
||||||
$.fn.mdbRate = function () {
|
|
||||||
var $stars;
|
|
||||||
// Custom whitelist to allow for using HTML tags in popover content
|
|
||||||
var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList
|
|
||||||
myDefaultWhiteList.textarea = [];
|
|
||||||
myDefaultWhiteList.button = [];
|
|
||||||
|
|
||||||
var $container = $(this);
|
|
||||||
|
|
||||||
var titles = ['Very bad', 'Poor', 'OK', 'Good', 'Excellent'];
|
|
||||||
|
|
||||||
for (var i = 0; i < 5; i++) {
|
|
||||||
$container.append(`<i class="py-2 px-1 rate-popover" data-index="${i}" data-html="true" data-toggle="popover"
|
|
||||||
data-placement="top" title="${titles[i]}"></i>`);
|
|
||||||
}
|
|
||||||
|
|
||||||
$stars = $container.children();
|
|
||||||
|
|
||||||
if ($container.hasClass('rating-faces')) {
|
|
||||||
$stars.addClass('far fa-meh-blank');
|
|
||||||
} else if ($container.hasClass('empty-stars')) {
|
|
||||||
$stars.addClass('far fa-star');
|
|
||||||
} else {
|
|
||||||
$stars.addClass('fas fa-star');
|
|
||||||
}
|
|
||||||
|
|
||||||
$stars.on('mouseover', function () {
|
|
||||||
var index = $(this).attr('data-index');
|
|
||||||
markStarsAsActive(index);
|
|
||||||
});
|
|
||||||
|
|
||||||
function markStarsAsActive(index) {
|
|
||||||
unmarkActive();
|
|
||||||
|
|
||||||
for (var i = 0; i <= index; i++) {
|
|
||||||
|
|
||||||
if ($container.hasClass('rating-faces')) {
|
|
||||||
$($stars.get(i)).removeClass('fa-meh-blank');
|
|
||||||
$($stars.get(i)).addClass('live');
|
|
||||||
|
|
||||||
switch (index) {
|
|
||||||
case '0':
|
|
||||||
$($stars.get(i)).addClass('fa-angry');
|
|
||||||
break;
|
|
||||||
case '1':
|
|
||||||
$($stars.get(i)).addClass('fa-frown');
|
|
||||||
break;
|
|
||||||
case '2':
|
|
||||||
$($stars.get(i)).addClass('fa-meh');
|
|
||||||
break;
|
|
||||||
case '3':
|
|
||||||
$($stars.get(i)).addClass('fa-smile');
|
|
||||||
break;
|
|
||||||
case '4':
|
|
||||||
$($stars.get(i)).addClass('fa-laugh');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if ($container.hasClass('empty-stars')) {
|
|
||||||
$($stars.get(i)).addClass('fas');
|
|
||||||
switch (index) {
|
|
||||||
case '0':
|
|
||||||
$($stars.get(i)).addClass('oneStar');
|
|
||||||
break;
|
|
||||||
case '1':
|
|
||||||
$($stars.get(i)).addClass('twoStars');
|
|
||||||
break;
|
|
||||||
case '2':
|
|
||||||
$($stars.get(i)).addClass('threeStars');
|
|
||||||
break;
|
|
||||||
case '3':
|
|
||||||
$($stars.get(i)).addClass('fourStars');
|
|
||||||
break;
|
|
||||||
case '4':
|
|
||||||
$($stars.get(i)).addClass('fiveStars');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$($stars.get(i)).addClass('amber-text');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function unmarkActive() {
|
|
||||||
$stars.parent().hasClass('rating-faces') ? $stars.addClass('fa-meh-blank') : $stars;
|
|
||||||
$container.hasClass('empty-stars') ? $stars.removeClass('fas') : $container;
|
|
||||||
$stars.removeClass('fa-angry fa-frown fa-meh fa-smile fa-laugh live oneStar twoStars threeStars fourStars fiveStars amber-text');
|
|
||||||
}
|
|
||||||
|
|
||||||
$stars.on('click', function () {
|
|
||||||
$stars.popover('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Submit, you can add some extra custom code here
|
|
||||||
// ex. to send the information to the server
|
|
||||||
$container.on('click', '#voteSubmitButton', function () {
|
|
||||||
$stars.popover('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cancel, just close the popover
|
|
||||||
$container.on('click', '#closePopoverButton', function () {
|
|
||||||
$stars.popover('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($container.hasClass('feedback')) {
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
$stars.popover({
|
|
||||||
// Append popover to #rateMe to allow handling form inside the popover
|
|
||||||
container: $container,
|
|
||||||
// Custom content for popover
|
|
||||||
content: `<div class="my-0 py-0"> <textarea type="text" style="font-size: 0.78rem" class="md-textarea form-control py-0" placeholder="Write us what can we improve" rows="3"></textarea> <button id="voteSubmitButton" type="submit" class="btn btn-sm btn-primary">Submit!</button> <button id="closePopoverButton" class="btn btn-flat btn-sm">Close</button> </div>`
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
$stars.tooltip();
|
|
||||||
}
|
|
||||||
})(jQuery);
|
|
8
mdb/js/addons/rating.min.js
vendored
@ -1,8 +0,0 @@
|
|||||||
(function($){$.fn.mdbRate=function(){var $stars;var myDefaultWhiteList=$.fn.tooltip.Constructor.Default.whiteList
|
|
||||||
myDefaultWhiteList.textarea=[];myDefaultWhiteList.button=[];var $container=$(this);var titles=['Very bad','Poor','OK','Good','Excellent'];for(var i=0;i<5;i++){$container.append(`<i class="py-2 px-1 rate-popover" data-index="${i}" data-html="true" data-toggle="popover"
|
|
||||||
data-placement="top" title="${titles[i]}"></i>`)}
|
|
||||||
$stars=$container.children();if($container.hasClass('rating-faces')){$stars.addClass('far fa-meh-blank')}else if($container.hasClass('empty-stars')){$stars.addClass('far fa-star')}else{$stars.addClass('fas fa-star')}
|
|
||||||
$stars.on('mouseover',function(){var index=$(this).attr('data-index');markStarsAsActive(index)});function markStarsAsActive(index){unmarkActive();for(var i=0;i<=index;i++){if($container.hasClass('rating-faces')){$($stars.get(i)).removeClass('fa-meh-blank');$($stars.get(i)).addClass('live');switch(index){case '0':$($stars.get(i)).addClass('fa-angry');break;case '1':$($stars.get(i)).addClass('fa-frown');break;case '2':$($stars.get(i)).addClass('fa-meh');break;case '3':$($stars.get(i)).addClass('fa-smile');break;case '4':$($stars.get(i)).addClass('fa-laugh');break}}else if($container.hasClass('empty-stars')){$($stars.get(i)).addClass('fas');switch(index){case '0':$($stars.get(i)).addClass('oneStar');break;case '1':$($stars.get(i)).addClass('twoStars');break;case '2':$($stars.get(i)).addClass('threeStars');break;case '3':$($stars.get(i)).addClass('fourStars');break;case '4':$($stars.get(i)).addClass('fiveStars');break}}else{$($stars.get(i)).addClass('amber-text')}}}
|
|
||||||
function unmarkActive(){$stars.parent().hasClass('rating-faces')?$stars.addClass('fa-meh-blank'):$stars;$container.hasClass('empty-stars')?$stars.removeClass('fas'):$container;$stars.removeClass('fa-angry fa-frown fa-meh fa-smile fa-laugh live oneStar twoStars threeStars fourStars fiveStars amber-text')}
|
|
||||||
$stars.on('click',function(){$stars.popover('hide')});$container.on('click','#voteSubmitButton',function(){$stars.popover('hide')});$container.on('click','#closePopoverButton',function(){$stars.popover('hide')});if($container.hasClass('feedback')){$(function(){$stars.popover({container:$container,content:`<div class="my-0 py-0"> <textarea type="text" style="font-size: 0.78rem" class="md-textarea form-control py-0" placeholder="Write us what can we improve" rows="3"></textarea> <button id="voteSubmitButton" type="submit" class="btn btn-sm btn-primary">Submit!</button> <button id="closePopoverButton" class="btn btn-flat btn-sm">Close</button> </div>`})})}
|
|
||||||
$stars.tooltip()}})(jQuery)
|
|
4435
mdb/js/bootstrap.js
vendored
7
mdb/js/bootstrap.min.js
vendored
2
mdb/js/jquery-3.4.1.min.js
vendored
15986
mdb/js/mdb.js
1
mdb/js/mdb.min.js
vendored
@ -1,173 +0,0 @@
|
|||||||
/*!
|
|
||||||
* bsCustomFileInput v1.3.2 (https://github.com/Johann-S/bs-custom-file-input)
|
|
||||||
* Copyright 2018 - 2019 Johann-S <johann.servoire@gmail.com>
|
|
||||||
* Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
(function (global, factory) {
|
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
||||||
typeof define === 'function' && define.amd ? define(factory) :
|
|
||||||
(global = global || self, global.bsCustomFileInput = factory());
|
|
||||||
}(this, function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var Selector = {
|
|
||||||
CUSTOMFILE: '.custom-file input[type="file"]',
|
|
||||||
CUSTOMFILELABEL: '.custom-file-label',
|
|
||||||
FORM: 'form',
|
|
||||||
INPUT: 'input'
|
|
||||||
};
|
|
||||||
|
|
||||||
var textNodeType = 3;
|
|
||||||
|
|
||||||
var getDefaultText = function getDefaultText(input) {
|
|
||||||
var defaultText = '';
|
|
||||||
var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL);
|
|
||||||
|
|
||||||
if (label) {
|
|
||||||
defaultText = label.innerHTML;
|
|
||||||
}
|
|
||||||
|
|
||||||
return defaultText;
|
|
||||||
};
|
|
||||||
|
|
||||||
var findFirstChildNode = function findFirstChildNode(element) {
|
|
||||||
if (element.childNodes.length > 0) {
|
|
||||||
var childNodes = [].slice.call(element.childNodes);
|
|
||||||
|
|
||||||
for (var i = 0; i < childNodes.length; i++) {
|
|
||||||
var node = childNodes[i];
|
|
||||||
|
|
||||||
if (node.nodeType !== textNodeType) {
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return element;
|
|
||||||
};
|
|
||||||
|
|
||||||
var restoreDefaultText = function restoreDefaultText(input) {
|
|
||||||
var defaultText = input.bsCustomFileInput.defaultText;
|
|
||||||
var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL);
|
|
||||||
|
|
||||||
if (label) {
|
|
||||||
var element = findFirstChildNode(label);
|
|
||||||
element.innerHTML = defaultText;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var fileApi = !!window.File;
|
|
||||||
var FAKE_PATH = 'fakepath';
|
|
||||||
var FAKE_PATH_SEPARATOR = '\\';
|
|
||||||
|
|
||||||
var getSelectedFiles = function getSelectedFiles(input) {
|
|
||||||
if (input.hasAttribute('multiple') && fileApi) {
|
|
||||||
return [].slice.call(input.files).map(function (file) {
|
|
||||||
return file.name;
|
|
||||||
}).join(', ');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (input.value.indexOf(FAKE_PATH) !== -1) {
|
|
||||||
var splittedValue = input.value.split(FAKE_PATH_SEPARATOR);
|
|
||||||
return splittedValue[splittedValue.length - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return input.value;
|
|
||||||
};
|
|
||||||
|
|
||||||
function handleInputChange() {
|
|
||||||
var label = this.parentNode.querySelector(Selector.CUSTOMFILELABEL);
|
|
||||||
|
|
||||||
if (label) {
|
|
||||||
var element = findFirstChildNode(label);
|
|
||||||
var inputValue = getSelectedFiles(this);
|
|
||||||
|
|
||||||
if (inputValue.length) {
|
|
||||||
element.innerHTML = inputValue;
|
|
||||||
} else {
|
|
||||||
restoreDefaultText(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleFormReset() {
|
|
||||||
var customFileList = [].slice.call(this.querySelectorAll(Selector.INPUT)).filter(function (input) {
|
|
||||||
return !!input.bsCustomFileInput;
|
|
||||||
});
|
|
||||||
|
|
||||||
for (var i = 0, len = customFileList.length; i < len; i++) {
|
|
||||||
restoreDefaultText(customFileList[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var customProperty = 'bsCustomFileInput';
|
|
||||||
var Event = {
|
|
||||||
FORMRESET: 'reset',
|
|
||||||
INPUTCHANGE: 'change'
|
|
||||||
};
|
|
||||||
var bsCustomFileInput = {
|
|
||||||
init: function init(inputSelector, formSelector) {
|
|
||||||
if (inputSelector === void 0) {
|
|
||||||
inputSelector = Selector.CUSTOMFILE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (formSelector === void 0) {
|
|
||||||
formSelector = Selector.FORM;
|
|
||||||
}
|
|
||||||
|
|
||||||
var customFileInputList = [].slice.call(document.querySelectorAll(inputSelector));
|
|
||||||
var formList = [].slice.call(document.querySelectorAll(formSelector));
|
|
||||||
|
|
||||||
for (var i = 0, len = customFileInputList.length; i < len; i++) {
|
|
||||||
var input = customFileInputList[i];
|
|
||||||
Object.defineProperty(input, customProperty, {
|
|
||||||
value: {
|
|
||||||
defaultText: getDefaultText(input)
|
|
||||||
},
|
|
||||||
writable: true
|
|
||||||
});
|
|
||||||
handleInputChange.call(input);
|
|
||||||
input.addEventListener(Event.INPUTCHANGE, handleInputChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var _i = 0, _len = formList.length; _i < _len; _i++) {
|
|
||||||
formList[_i].addEventListener(Event.FORMRESET, handleFormReset);
|
|
||||||
|
|
||||||
Object.defineProperty(formList[_i], customProperty, {
|
|
||||||
value: true,
|
|
||||||
writable: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
destroy: function destroy() {
|
|
||||||
var formList = [].slice.call(document.querySelectorAll(Selector.FORM)).filter(function (form) {
|
|
||||||
return !!form.bsCustomFileInput;
|
|
||||||
});
|
|
||||||
var customFileInputList = [].slice.call(document.querySelectorAll(Selector.INPUT)).filter(function (input) {
|
|
||||||
return !!input.bsCustomFileInput;
|
|
||||||
});
|
|
||||||
|
|
||||||
for (var i = 0, len = customFileInputList.length; i < len; i++) {
|
|
||||||
var input = customFileInputList[i];
|
|
||||||
restoreDefaultText(input);
|
|
||||||
input[customProperty] = undefined;
|
|
||||||
input.removeEventListener(Event.INPUTCHANGE, handleInputChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var _i2 = 0, _len2 = formList.length; _i2 < _len2; _i2++) {
|
|
||||||
formList[_i2].removeEventListener(Event.FORMRESET, handleFormReset);
|
|
||||||
|
|
||||||
formList[_i2][customProperty] = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return bsCustomFileInput;
|
|
||||||
|
|
||||||
}));
|
|
||||||
//# sourceMappingURL=bs-custom-file-input.js.map
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
|
|
||||||
bsCustomFileInput.init()
|
|
||||||
});
|
|
14456
mdb/js/modules/chart.js
@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
Enhanced Bootstrap Modals
|
|
||||||
https://mdbootstrap.com
|
|
||||||
office@mdbootstrap.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function($){
|
|
||||||
$('body').on('shown.bs.modal', '.modal', function() {
|
|
||||||
if(!$('.modal-backdrop').length) {
|
|
||||||
|
|
||||||
$modal_dialog = $(this).children('.modal-dialog')
|
|
||||||
|
|
||||||
if($modal_dialog.hasClass('modal-side')) {
|
|
||||||
$(this).addClass('modal-scrolling');
|
|
||||||
$('body').addClass('scrollable');
|
|
||||||
}
|
|
||||||
|
|
||||||
if($modal_dialog.hasClass('modal-frame')) {
|
|
||||||
$(this).addClass('modal-content-clickable');
|
|
||||||
$('body').addClass('scrollable');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('body').on('hidden.bs.modal', '.modal', function() {
|
|
||||||
$('body').removeClass('scrollable');
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
@ -1,173 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
var _this = void 0;
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
var inputSelector = "".concat(['text', 'password', 'email', 'url', 'tel', 'number', 'search', 'search-md'].map(function (selector) {
|
|
||||||
return "input[type=".concat(selector, "]");
|
|
||||||
}).join(', '), ", textarea");
|
|
||||||
var textAreaSelector = '.materialize-textarea';
|
|
||||||
|
|
||||||
var updateTextFields = function updateTextFields($input) {
|
|
||||||
var $labelAndIcon = $input.siblings('label, i');
|
|
||||||
var hasValue = $input.val().length;
|
|
||||||
var hasPlaceholder = $input.attr('placeholder');
|
|
||||||
var addOrRemove = "".concat(hasValue || hasPlaceholder ? 'add' : 'remove', "Class");
|
|
||||||
$labelAndIcon[addOrRemove]('active');
|
|
||||||
};
|
|
||||||
|
|
||||||
var validateField = function validateField($input) {
|
|
||||||
if ($input.hasClass('validate')) {
|
|
||||||
var value = $input.val();
|
|
||||||
var noValue = !value.length;
|
|
||||||
var isValid = !$input[0].validity.badInput;
|
|
||||||
|
|
||||||
if (noValue && isValid) {
|
|
||||||
$input.removeClass('valid').removeClass('invalid');
|
|
||||||
} else {
|
|
||||||
var valid = $input.is(':valid');
|
|
||||||
var length = Number($input.attr('length')) || 0;
|
|
||||||
|
|
||||||
if (valid && (!length || length > value.length)) {
|
|
||||||
$input.removeClass('invalid').addClass('valid');
|
|
||||||
} else {
|
|
||||||
$input.removeClass('valid').addClass('invalid');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var textAreaAutoResize = function textAreaAutoResize() {
|
|
||||||
var $textarea = $(_this);
|
|
||||||
|
|
||||||
if ($textarea.val().length) {
|
|
||||||
var $hiddenDiv = $('.hiddendiv');
|
|
||||||
var fontFamily = $textarea.css('font-family');
|
|
||||||
var fontSize = $textarea.css('font-size');
|
|
||||||
|
|
||||||
if (fontSize) {
|
|
||||||
$hiddenDiv.css('font-size', fontSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fontFamily) {
|
|
||||||
$hiddenDiv.css('font-family', fontFamily);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($textarea.attr('wrap') === 'off') {
|
|
||||||
$hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre');
|
|
||||||
}
|
|
||||||
|
|
||||||
$hiddenDiv.text("".concat($textarea.val(), "\n"));
|
|
||||||
var content = $hiddenDiv.html().replace(/\n/g, '<br>');
|
|
||||||
$hiddenDiv.html(content); // When textarea is hidden, width goes crazy.
|
|
||||||
// Approximate with half of window size
|
|
||||||
|
|
||||||
$hiddenDiv.css('width', $textarea.is(':visible') ? $textarea.width() : $(window).width() / 2);
|
|
||||||
$textarea.css('height', $hiddenDiv.height());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$(inputSelector).each(function (index, input) {
|
|
||||||
var $this = $(input);
|
|
||||||
var $labelAndIcon = $this.siblings('label, i');
|
|
||||||
updateTextFields($this);
|
|
||||||
var isValid = input.validity.badInput;
|
|
||||||
|
|
||||||
if (isValid) {
|
|
||||||
$labelAndIcon.addClass('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$(document).on('focus', inputSelector, function (e) {
|
|
||||||
$(e.target).siblings('label, i').addClass('active');
|
|
||||||
});
|
|
||||||
$(document).on('blur', inputSelector, function (e) {
|
|
||||||
var $this = $(e.target);
|
|
||||||
var noValue = !$this.val();
|
|
||||||
var invalid = !e.target.validity.badInput;
|
|
||||||
var noPlaceholder = $this.attr('placeholder') === undefined;
|
|
||||||
|
|
||||||
if (noValue && invalid && noPlaceholder) {
|
|
||||||
$this.siblings('label, i').removeClass('active');
|
|
||||||
}
|
|
||||||
|
|
||||||
validateField($this);
|
|
||||||
});
|
|
||||||
$(document).on('change', inputSelector, function (e) {
|
|
||||||
var $this = $(e.target);
|
|
||||||
updateTextFields($this);
|
|
||||||
validateField($this);
|
|
||||||
});
|
|
||||||
$('input[autofocus]').siblings('label, i').addClass('active');
|
|
||||||
$(document).on('reset', function (e) {
|
|
||||||
var $formReset = $(e.target);
|
|
||||||
|
|
||||||
if ($formReset.is('form')) {
|
|
||||||
var $formInputs = $formReset.find(inputSelector);
|
|
||||||
$formInputs.removeClass('valid').removeClass('invalid').each(function (index, input) {
|
|
||||||
var $this = $(input);
|
|
||||||
var noDefaultValue = !$this.val();
|
|
||||||
var noPlaceholder = !$this.attr('placeholder');
|
|
||||||
|
|
||||||
if (noDefaultValue && noPlaceholder) {
|
|
||||||
$this.siblings('label, i').removeClass('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$formReset.find('select.initialized').each(function (index, select) {
|
|
||||||
var $select = $(select);
|
|
||||||
var $visibleInput = $select.siblings('input.select-dropdown');
|
|
||||||
var defaultValue = $select.children('[selected]').val();
|
|
||||||
$select.val(defaultValue);
|
|
||||||
$visibleInput.val(defaultValue);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
var $text = $('.md-textarea-auto');
|
|
||||||
|
|
||||||
if ($text.length) {
|
|
||||||
var observe;
|
|
||||||
|
|
||||||
if (window.attachEvent) {
|
|
||||||
observe = function observe(element, event, handler) {
|
|
||||||
element.attachEvent("on".concat(event), handler);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
observe = function observe(element, event, handler) {
|
|
||||||
element.addEventListener(event, handler, false);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
$text.each(function () {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
function resize() {
|
|
||||||
self.style.height = 'auto';
|
|
||||||
self.style.height = "".concat(self.scrollHeight, "px");
|
|
||||||
}
|
|
||||||
|
|
||||||
function delayedResize() {
|
|
||||||
window.setTimeout(resize, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
observe(self, 'change', resize);
|
|
||||||
observe(self, 'cut', delayedResize);
|
|
||||||
observe(self, 'paste', delayedResize);
|
|
||||||
observe(self, 'drop', delayedResize);
|
|
||||||
observe(self, 'keydown', delayedResize);
|
|
||||||
resize();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
|
||||||
var $body = $('body');
|
|
||||||
|
|
||||||
if (!$('.hiddendiv').first().length) {
|
|
||||||
var $hiddenDiv = $('<div class="hiddendiv common"></div>');
|
|
||||||
$body.append($hiddenDiv);
|
|
||||||
}
|
|
||||||
|
|
||||||
$(textAreaSelector).each(textAreaAutoResize);
|
|
||||||
$body.on('keyup keydown', textAreaSelector, textAreaAutoResize);
|
|
||||||
})(jQuery);
|
|
@ -1,205 +0,0 @@
|
|||||||
/*
|
|
||||||
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
|
||||||
*
|
|
||||||
* Uses the built in easing capabilities added In jQuery 1.1
|
|
||||||
* to offer multiple easing options
|
|
||||||
*
|
|
||||||
* TERMS OF USE - jQuery Easing
|
|
||||||
*
|
|
||||||
* Open source under the BSD License.
|
|
||||||
*
|
|
||||||
* Copyright © 2008 George McGinley Smith
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
* conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
|
||||||
* or promote products derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
||||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// t: current time, b: begInnIng value, c: change In value, d: duration
|
|
||||||
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
|
||||||
|
|
||||||
jQuery.extend( jQuery.easing,
|
|
||||||
{
|
|
||||||
def: 'easeOutQuad',
|
|
||||||
swing: function (x, t, b, c, d) {
|
|
||||||
//alert(jQuery.easing.default);
|
|
||||||
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
|
||||||
},
|
|
||||||
easeInQuad: function (x, t, b, c, d) {
|
|
||||||
return c*(t/=d)*t + b;
|
|
||||||
},
|
|
||||||
easeOutQuad: function (x, t, b, c, d) {
|
|
||||||
return -c *(t/=d)*(t-2) + b;
|
|
||||||
},
|
|
||||||
easeInOutQuad: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d/2) < 1) return c/2*t*t + b;
|
|
||||||
return -c/2 * ((--t)*(t-2) - 1) + b;
|
|
||||||
},
|
|
||||||
easeInCubic: function (x, t, b, c, d) {
|
|
||||||
return c*(t/=d)*t*t + b;
|
|
||||||
},
|
|
||||||
easeOutCubic: function (x, t, b, c, d) {
|
|
||||||
return c*((t=t/d-1)*t*t + 1) + b;
|
|
||||||
},
|
|
||||||
easeInOutCubic: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
|
||||||
return c/2*((t-=2)*t*t + 2) + b;
|
|
||||||
},
|
|
||||||
easeInQuart: function (x, t, b, c, d) {
|
|
||||||
return c*(t/=d)*t*t*t + b;
|
|
||||||
},
|
|
||||||
easeOutQuart: function (x, t, b, c, d) {
|
|
||||||
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
|
||||||
},
|
|
||||||
easeInOutQuart: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
|
|
||||||
return -c/2 * ((t-=2)*t*t*t - 2) + b;
|
|
||||||
},
|
|
||||||
easeInQuint: function (x, t, b, c, d) {
|
|
||||||
return c*(t/=d)*t*t*t*t + b;
|
|
||||||
},
|
|
||||||
easeOutQuint: function (x, t, b, c, d) {
|
|
||||||
return c*((t=t/d-1)*t*t*t*t + 1) + b;
|
|
||||||
},
|
|
||||||
easeInOutQuint: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
|
|
||||||
return c/2*((t-=2)*t*t*t*t + 2) + b;
|
|
||||||
},
|
|
||||||
easeInSine: function (x, t, b, c, d) {
|
|
||||||
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
|
||||||
},
|
|
||||||
easeOutSine: function (x, t, b, c, d) {
|
|
||||||
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
|
||||||
},
|
|
||||||
easeInOutSine: function (x, t, b, c, d) {
|
|
||||||
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
|
||||||
},
|
|
||||||
easeInExpo: function (x, t, b, c, d) {
|
|
||||||
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
|
||||||
},
|
|
||||||
easeOutExpo: function (x, t, b, c, d) {
|
|
||||||
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
|
||||||
},
|
|
||||||
easeInOutExpo: function (x, t, b, c, d) {
|
|
||||||
if (t==0) return b;
|
|
||||||
if (t==d) return b+c;
|
|
||||||
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
|
||||||
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
|
||||||
},
|
|
||||||
easeInCirc: function (x, t, b, c, d) {
|
|
||||||
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
|
||||||
},
|
|
||||||
easeOutCirc: function (x, t, b, c, d) {
|
|
||||||
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
|
||||||
},
|
|
||||||
easeInOutCirc: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
|
|
||||||
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
|
|
||||||
},
|
|
||||||
easeInElastic: function (x, t, b, c, d) {
|
|
||||||
var s=1.70158;var p=0;var a=c;
|
|
||||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
|
||||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
|
||||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
|
||||||
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
|
||||||
},
|
|
||||||
easeOutElastic: function (x, t, b, c, d) {
|
|
||||||
var s=1.70158;var p=0;var a=c;
|
|
||||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
|
||||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
|
||||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
|
||||||
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
|
||||||
},
|
|
||||||
easeInOutElastic: function (x, t, b, c, d) {
|
|
||||||
var s=1.70158;var p=0;var a=c;
|
|
||||||
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
|
|
||||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
|
||||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
|
||||||
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
|
||||||
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
|
|
||||||
},
|
|
||||||
easeInBack: function (x, t, b, c, d, s) {
|
|
||||||
if (s == undefined) s = 1.70158;
|
|
||||||
return c*(t/=d)*t*((s+1)*t - s) + b;
|
|
||||||
},
|
|
||||||
easeOutBack: function (x, t, b, c, d, s) {
|
|
||||||
if (s == undefined) s = 1.70158;
|
|
||||||
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
|
||||||
},
|
|
||||||
easeInOutBack: function (x, t, b, c, d, s) {
|
|
||||||
if (s == undefined) s = 1.70158;
|
|
||||||
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
|
|
||||||
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
|
|
||||||
},
|
|
||||||
easeInBounce: function (x, t, b, c, d) {
|
|
||||||
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
|
||||||
},
|
|
||||||
easeOutBounce: function (x, t, b, c, d) {
|
|
||||||
if ((t/=d) < (1/2.75)) {
|
|
||||||
return c*(7.5625*t*t) + b;
|
|
||||||
} else if (t < (2/2.75)) {
|
|
||||||
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
|
||||||
} else if (t < (2.5/2.75)) {
|
|
||||||
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
|
||||||
} else {
|
|
||||||
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
easeInOutBounce: function (x, t, b, c, d) {
|
|
||||||
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
|
|
||||||
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* TERMS OF USE - EASING EQUATIONS
|
|
||||||
*
|
|
||||||
* Open source under the BSD License.
|
|
||||||
*
|
|
||||||
* Copyright © 2001 Robert Penner
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
* conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
|
||||||
* or promote products derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
||||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
@ -1,16 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
var SCROLLING_NAVBAR_OFFSET_TOP = 50;
|
|
||||||
$(window).on('scroll', function () {
|
|
||||||
var $navbar = $('.navbar');
|
|
||||||
|
|
||||||
if ($navbar.length) {
|
|
||||||
if ($navbar.offset().top > SCROLLING_NAVBAR_OFFSET_TOP) {
|
|
||||||
$('.scrolling-navbar').addClass('top-nav-collapse');
|
|
||||||
} else {
|
|
||||||
$('.scrolling-navbar').removeClass('top-nav-collapse');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
@ -1,67 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
$.fn.mdbTreeview = function () {
|
|
||||||
var $this = $(this);
|
|
||||||
|
|
||||||
if ($this.hasClass('treeview')) {
|
|
||||||
var $toggler = $this.find('.rotate');
|
|
||||||
$.each($toggler, function (e) {
|
|
||||||
$($toggler[e]).off('click');
|
|
||||||
$($toggler[e]).on('click', function () {
|
|
||||||
var $this = $(this);
|
|
||||||
$this.siblings('.nested').toggleClass('active');
|
|
||||||
$this.toggleClass('down');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this.hasClass('treeview-animated')) {
|
|
||||||
var $elements = $this.find('.treeview-animated-element');
|
|
||||||
var $closed = $this.find('.closed');
|
|
||||||
$this.find('.nested').hide();
|
|
||||||
$closed.off('click');
|
|
||||||
$closed.on('click', function () {
|
|
||||||
var $this = $(this);
|
|
||||||
var $target = $this.siblings('.nested');
|
|
||||||
var $pointer = $this.children('.fa-angle-right');
|
|
||||||
$this.toggleClass('open');
|
|
||||||
$pointer.toggleClass('down');
|
|
||||||
!$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$elements.off('click');
|
|
||||||
$elements.on('click', function () {
|
|
||||||
var $this = $(this);
|
|
||||||
$this.hasClass('opened') ? $this.removeClass('opened') : ($elements.removeClass('opened'), $this.addClass('opened'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this.hasClass('treeview-colorful')) {
|
|
||||||
var _$elements = $this.find('.treeview-colorful-element');
|
|
||||||
|
|
||||||
var $header = $this.find('.treeview-colorful-items-header');
|
|
||||||
$this.find('.nested').hide();
|
|
||||||
$header.off('click');
|
|
||||||
$header.on('click', function () {
|
|
||||||
var $this = $(this);
|
|
||||||
var $target = $this.siblings('.nested');
|
|
||||||
var $pointerPlus = $this.children('.fa-plus-circle');
|
|
||||||
var $pointerMinus = $this.children('.fa-minus-circle');
|
|
||||||
$this.toggleClass('open');
|
|
||||||
$pointerPlus.removeClass('fa-plus-circle');
|
|
||||||
$pointerPlus.addClass('fa-minus-circle');
|
|
||||||
$pointerMinus.removeClass('fa-minus-circle');
|
|
||||||
$pointerMinus.addClass('fa-plus-circle');
|
|
||||||
!$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
|
|
||||||
});
|
|
||||||
|
|
||||||
_$elements.off('click');
|
|
||||||
|
|
||||||
_$elements.on('click', function () {
|
|
||||||
var $this = $(this);
|
|
||||||
$this.hasClass('opened') ? _$elements.removeClass('opened') : (_$elements.removeClass('opened'), $this.addClass('opened'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
5
mdb/js/modules/velocity.min.js
vendored
@ -1,609 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Waves v0.7.6
|
|
||||||
* http://fian.my.id/Waves
|
|
||||||
*
|
|
||||||
* Copyright 2014-2018 Alfiana E. Sibuea and other contributors
|
|
||||||
* Released under the MIT license
|
|
||||||
* https://github.com/fians/Waves/blob/master/LICENSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
(function (window, factory) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// AMD. Register as an anonymous module. Wrap in function so we have access
|
|
||||||
// to root via `this`.
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define([], function () {
|
|
||||||
window.Waves = factory.call(window);
|
|
||||||
return window.Waves;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Node. Does not work with strict CommonJS, but only CommonJS-like
|
|
||||||
// environments that support module.exports, like Node.
|
|
||||||
else if (typeof exports === 'object') {
|
|
||||||
module.exports = factory.call(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Browser globals.
|
|
||||||
else {
|
|
||||||
window.Waves = factory.call(window);
|
|
||||||
}
|
|
||||||
})(typeof window === 'object' ? window : this, function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var Waves = Waves || {};
|
|
||||||
var $$ = document.querySelectorAll.bind(document);
|
|
||||||
var toString = Object.prototype.toString;
|
|
||||||
var isTouchAvailable = 'ontouchstart' in window;
|
|
||||||
|
|
||||||
|
|
||||||
// Find exact position of element
|
|
||||||
function isWindow(obj) {
|
|
||||||
return obj !== null && obj === obj.window;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getWindow(elem) {
|
|
||||||
return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isObject(value) {
|
|
||||||
var type = typeof value;
|
|
||||||
return type === 'function' || type === 'object' && !!value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isDOMNode(obj) {
|
|
||||||
return isObject(obj) && obj.nodeType > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getWavesElements(nodes) {
|
|
||||||
var stringRepr = toString.call(nodes);
|
|
||||||
|
|
||||||
if (stringRepr === '[object String]') {
|
|
||||||
return $$(nodes);
|
|
||||||
} else if (isObject(nodes) && /^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) {
|
|
||||||
return nodes;
|
|
||||||
} else if (isDOMNode(nodes)) {
|
|
||||||
return [nodes];
|
|
||||||
}
|
|
||||||
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
function offset(elem) {
|
|
||||||
var docElem, win,
|
|
||||||
box = {
|
|
||||||
top: 0,
|
|
||||||
left: 0
|
|
||||||
},
|
|
||||||
doc = elem && elem.ownerDocument;
|
|
||||||
|
|
||||||
docElem = doc.documentElement;
|
|
||||||
|
|
||||||
if (typeof elem.getBoundingClientRect !== typeof undefined) {
|
|
||||||
box = elem.getBoundingClientRect();
|
|
||||||
}
|
|
||||||
win = getWindow(doc);
|
|
||||||
return {
|
|
||||||
top: box.top + win.pageYOffset - docElem.clientTop,
|
|
||||||
left: box.left + win.pageXOffset - docElem.clientLeft
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertStyle(styleObj) {
|
|
||||||
var style = '';
|
|
||||||
|
|
||||||
for (var prop in styleObj) {
|
|
||||||
if (styleObj.hasOwnProperty(prop)) {
|
|
||||||
style += (prop + ':' + styleObj[prop] + ';');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Effect = {
|
|
||||||
|
|
||||||
// Effect duration
|
|
||||||
duration: 750,
|
|
||||||
|
|
||||||
// Effect delay (check for scroll before showing effect)
|
|
||||||
delay: 200,
|
|
||||||
|
|
||||||
show: function (e, element, velocity) {
|
|
||||||
|
|
||||||
// Disable right click
|
|
||||||
if (e.button === 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
element = element || this;
|
|
||||||
|
|
||||||
// Create ripple
|
|
||||||
var ripple = document.createElement('div');
|
|
||||||
ripple.className = 'waves-ripple waves-rippling';
|
|
||||||
element.appendChild(ripple);
|
|
||||||
|
|
||||||
// Get click coordinate and element width
|
|
||||||
var pos = offset(element);
|
|
||||||
var relativeY = 0;
|
|
||||||
var relativeX = 0;
|
|
||||||
// Support for touch devices
|
|
||||||
if ('touches' in e && e.touches.length) {
|
|
||||||
relativeY = (e.touches[0].pageY - pos.top);
|
|
||||||
relativeX = (e.touches[0].pageX - pos.left);
|
|
||||||
}
|
|
||||||
//Normal case
|
|
||||||
else {
|
|
||||||
relativeY = (e.pageY - pos.top);
|
|
||||||
relativeX = (e.pageX - pos.left);
|
|
||||||
}
|
|
||||||
// Support for synthetic events
|
|
||||||
relativeX = relativeX >= 0 ? relativeX : 0;
|
|
||||||
relativeY = relativeY >= 0 ? relativeY : 0;
|
|
||||||
|
|
||||||
var scale = 'scale(' + ((element.clientWidth / 100) * 3) + ')';
|
|
||||||
var translate = 'translate(0,0)';
|
|
||||||
|
|
||||||
if (velocity) {
|
|
||||||
translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attach data to element
|
|
||||||
ripple.setAttribute('data-hold', Date.now());
|
|
||||||
ripple.setAttribute('data-x', relativeX);
|
|
||||||
ripple.setAttribute('data-y', relativeY);
|
|
||||||
ripple.setAttribute('data-scale', scale);
|
|
||||||
ripple.setAttribute('data-translate', translate);
|
|
||||||
|
|
||||||
// Set ripple position
|
|
||||||
var rippleStyle = {
|
|
||||||
top: relativeY + 'px',
|
|
||||||
left: relativeX + 'px'
|
|
||||||
};
|
|
||||||
|
|
||||||
ripple.classList.add('waves-notransition');
|
|
||||||
ripple.setAttribute('style', convertStyle(rippleStyle));
|
|
||||||
ripple.classList.remove('waves-notransition');
|
|
||||||
|
|
||||||
// Scale the ripple
|
|
||||||
rippleStyle['-webkit-transform'] = scale + ' ' + translate;
|
|
||||||
rippleStyle['-moz-transform'] = scale + ' ' + translate;
|
|
||||||
rippleStyle['-ms-transform'] = scale + ' ' + translate;
|
|
||||||
rippleStyle['-o-transform'] = scale + ' ' + translate;
|
|
||||||
rippleStyle.transform = scale + ' ' + translate;
|
|
||||||
rippleStyle.opacity = '1';
|
|
||||||
|
|
||||||
var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
|
|
||||||
rippleStyle['-webkit-transition-duration'] = duration + 'ms';
|
|
||||||
rippleStyle['-moz-transition-duration'] = duration + 'ms';
|
|
||||||
rippleStyle['-o-transition-duration'] = duration + 'ms';
|
|
||||||
rippleStyle['transition-duration'] = duration + 'ms';
|
|
||||||
|
|
||||||
ripple.setAttribute('style', convertStyle(rippleStyle));
|
|
||||||
},
|
|
||||||
|
|
||||||
hide: function (e, element) {
|
|
||||||
element = element || this;
|
|
||||||
|
|
||||||
var ripples = element.getElementsByClassName('waves-rippling');
|
|
||||||
|
|
||||||
for (var i = 0, len = ripples.length; i < len; i++) {
|
|
||||||
removeRipple(e, element, ripples[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTouchAvailable) {
|
|
||||||
element.removeEventListener('touchend', Effect.hide);
|
|
||||||
element.removeEventListener('touchcancel', Effect.hide);
|
|
||||||
}
|
|
||||||
|
|
||||||
element.removeEventListener('mouseup', Effect.hide);
|
|
||||||
element.removeEventListener('mouseleave', Effect.hide);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Collection of wrapper for HTML element that only have single tag
|
|
||||||
* like <input> and <img>
|
|
||||||
*/
|
|
||||||
var TagWrapper = {
|
|
||||||
|
|
||||||
// Wrap <input> tag so it can perform the effect
|
|
||||||
input: function (element) {
|
|
||||||
|
|
||||||
var parent = element.parentNode;
|
|
||||||
|
|
||||||
// If input already have parent just pass through
|
|
||||||
if (parent.tagName.toLowerCase() === 'span' && parent.classList.contains('waves-effect')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Put element class and style to the specified parent
|
|
||||||
var wrapper = document.createElement('span');
|
|
||||||
wrapper.className = 'waves-input-wrapper';
|
|
||||||
// element.className = 'waves-button-input';
|
|
||||||
|
|
||||||
// Put element as child
|
|
||||||
parent.replaceChild(wrapper, element);
|
|
||||||
wrapper.appendChild(element);
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
// Wrap <img> tag so it can perform the effect
|
|
||||||
img: function (element) {
|
|
||||||
|
|
||||||
var parent = element.parentNode;
|
|
||||||
|
|
||||||
// If input already have parent just pass through
|
|
||||||
if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Put element as child
|
|
||||||
var wrapper = document.createElement('i');
|
|
||||||
parent.replaceChild(wrapper, element);
|
|
||||||
wrapper.appendChild(element);
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hide the effect and remove the ripple. Must be
|
|
||||||
* a separate function to pass the JSLint...
|
|
||||||
*/
|
|
||||||
function removeRipple(e, el, ripple) {
|
|
||||||
|
|
||||||
// Check if the ripple still exist
|
|
||||||
if (!ripple) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ripple.classList.remove('waves-rippling');
|
|
||||||
|
|
||||||
var relativeX = ripple.getAttribute('data-x');
|
|
||||||
var relativeY = ripple.getAttribute('data-y');
|
|
||||||
var scale = ripple.getAttribute('data-scale');
|
|
||||||
var translate = ripple.getAttribute('data-translate');
|
|
||||||
|
|
||||||
// Get delay beetween mousedown and mouse leave
|
|
||||||
var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
|
|
||||||
var delay = 350 - diff;
|
|
||||||
|
|
||||||
if (delay < 0) {
|
|
||||||
delay = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.type === 'mousemove') {
|
|
||||||
delay = 150;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fade out ripple after delay
|
|
||||||
var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
|
|
||||||
var style = {
|
|
||||||
top: relativeY + 'px',
|
|
||||||
left: relativeX + 'px',
|
|
||||||
opacity: '0',
|
|
||||||
|
|
||||||
// Duration
|
|
||||||
'-webkit-transition-duration': duration + 'ms',
|
|
||||||
'-moz-transition-duration': duration + 'ms',
|
|
||||||
'-o-transition-duration': duration + 'ms',
|
|
||||||
'transition-duration': duration + 'ms',
|
|
||||||
'-webkit-transform': scale + ' ' + translate,
|
|
||||||
'-moz-transform': scale + ' ' + translate,
|
|
||||||
'-ms-transform': scale + ' ' + translate,
|
|
||||||
'-o-transform': scale + ' ' + translate,
|
|
||||||
'transform': scale + ' ' + translate
|
|
||||||
};
|
|
||||||
|
|
||||||
ripple.setAttribute('style', convertStyle(style));
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
try {
|
|
||||||
el.removeChild(ripple);
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}, duration);
|
|
||||||
|
|
||||||
}, delay);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disable mousedown event for 500ms during and after touch
|
|
||||||
*/
|
|
||||||
var TouchHandler = {
|
|
||||||
|
|
||||||
/* uses an integer rather than bool so there's no issues with
|
|
||||||
* needing to clear timeouts if another touch event occurred
|
|
||||||
* within the 500ms. Cannot mouseup between touchstart and
|
|
||||||
* touchend, nor in the 500ms after touchend. */
|
|
||||||
touches: 0,
|
|
||||||
|
|
||||||
allowEvent: function (e) {
|
|
||||||
|
|
||||||
var allow = true;
|
|
||||||
|
|
||||||
if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) {
|
|
||||||
allow = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return allow;
|
|
||||||
},
|
|
||||||
registerEvent: function (e) {
|
|
||||||
var eType = e.type;
|
|
||||||
|
|
||||||
if (eType === 'touchstart') {
|
|
||||||
|
|
||||||
TouchHandler.touches += 1; // push
|
|
||||||
|
|
||||||
} else if (/^(touchend|touchcancel)$/.test(eType)) {
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
if (TouchHandler.touches) {
|
|
||||||
TouchHandler.touches -= 1; // pop after 500ms
|
|
||||||
}
|
|
||||||
}, 500);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delegated click handler for .waves-effect element.
|
|
||||||
* returns null when .waves-effect element not in "click tree"
|
|
||||||
*/
|
|
||||||
function getWavesEffectElement(e) {
|
|
||||||
|
|
||||||
if (TouchHandler.allowEvent(e) === false) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var element = null;
|
|
||||||
var target = e.target || e.srcElement;
|
|
||||||
|
|
||||||
while (target.parentElement) {
|
|
||||||
if ((!(target instanceof SVGElement)) && target.classList.contains('waves-effect')) {
|
|
||||||
element = target;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
target = target.parentElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bubble the click and show effect if .waves-effect elem was found
|
|
||||||
*/
|
|
||||||
function showEffect(e) {
|
|
||||||
|
|
||||||
// Disable effect if element has "disabled" property on it
|
|
||||||
// In some cases, the event is not triggered by the current element
|
|
||||||
// if (e.target.getAttribute('disabled') !== null) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
var element = getWavesEffectElement(e);
|
|
||||||
|
|
||||||
if (element !== null) {
|
|
||||||
|
|
||||||
// Make it sure the element has either disabled property, disabled attribute or 'disabled' class
|
|
||||||
if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TouchHandler.registerEvent(e);
|
|
||||||
|
|
||||||
if (e.type === 'touchstart' && Effect.delay) {
|
|
||||||
|
|
||||||
var hidden = false;
|
|
||||||
|
|
||||||
var timer = setTimeout(function () {
|
|
||||||
timer = null;
|
|
||||||
Effect.show(e, element);
|
|
||||||
}, Effect.delay);
|
|
||||||
|
|
||||||
var hideEffect = function (hideEvent) {
|
|
||||||
|
|
||||||
// if touch hasn't moved, and effect not yet started: start effect now
|
|
||||||
if (timer) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
timer = null;
|
|
||||||
Effect.show(e, element);
|
|
||||||
}
|
|
||||||
if (!hidden) {
|
|
||||||
hidden = true;
|
|
||||||
Effect.hide(hideEvent, element);
|
|
||||||
}
|
|
||||||
|
|
||||||
removeListeners();
|
|
||||||
};
|
|
||||||
|
|
||||||
var touchMove = function (moveEvent) {
|
|
||||||
if (timer) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
timer = null;
|
|
||||||
}
|
|
||||||
hideEffect(moveEvent);
|
|
||||||
|
|
||||||
removeListeners();
|
|
||||||
};
|
|
||||||
|
|
||||||
element.addEventListener('touchmove', touchMove, false);
|
|
||||||
element.addEventListener('touchend', hideEffect, false);
|
|
||||||
element.addEventListener('touchcancel', hideEffect, false);
|
|
||||||
|
|
||||||
var removeListeners = function () {
|
|
||||||
element.removeEventListener('touchmove', touchMove);
|
|
||||||
element.removeEventListener('touchend', hideEffect);
|
|
||||||
element.removeEventListener('touchcancel', hideEffect);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
|
|
||||||
Effect.show(e, element);
|
|
||||||
|
|
||||||
if (isTouchAvailable) {
|
|
||||||
element.addEventListener('touchend', Effect.hide, false);
|
|
||||||
element.addEventListener('touchcancel', Effect.hide, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
element.addEventListener('mouseup', Effect.hide, false);
|
|
||||||
element.addEventListener('mouseleave', Effect.hide, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Waves.init = function (options) {
|
|
||||||
var body = document.body;
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
if ('duration' in options) {
|
|
||||||
Effect.duration = options.duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('delay' in options) {
|
|
||||||
Effect.delay = options.delay;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTouchAvailable) {
|
|
||||||
body.addEventListener('touchstart', showEffect, false);
|
|
||||||
body.addEventListener('touchcancel', TouchHandler.registerEvent, false);
|
|
||||||
body.addEventListener('touchend', TouchHandler.registerEvent, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
body.addEventListener('mousedown', showEffect, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attach Waves to dynamically loaded inputs, or add .waves-effect and other
|
|
||||||
* waves classes to a set of elements. Set drag to true if the ripple mouseover
|
|
||||||
* or skimming effect should be applied to the elements.
|
|
||||||
*/
|
|
||||||
Waves.attach = function (elements, classes) {
|
|
||||||
|
|
||||||
elements = getWavesElements(elements);
|
|
||||||
|
|
||||||
if (toString.call(classes) === '[object Array]') {
|
|
||||||
classes = classes.join(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
classes = classes ? ' ' + classes : '';
|
|
||||||
|
|
||||||
var element, tagName;
|
|
||||||
|
|
||||||
for (var i = 0, len = elements.length; i < len; i++) {
|
|
||||||
|
|
||||||
element = elements[i];
|
|
||||||
tagName = element.tagName.toLowerCase();
|
|
||||||
|
|
||||||
if (['input', 'img'].indexOf(tagName) !== -1) {
|
|
||||||
TagWrapper[tagName](element);
|
|
||||||
element = element.parentElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element.className.indexOf('waves-effect') === -1) {
|
|
||||||
element.className += ' waves-effect' + classes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cause a ripple to appear in an element via code.
|
|
||||||
*/
|
|
||||||
Waves.ripple = function (elements, options) {
|
|
||||||
elements = getWavesElements(elements);
|
|
||||||
var elementsLen = elements.length;
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
options.wait = options.wait || 0;
|
|
||||||
options.position = options.position || null; // default = centre of element
|
|
||||||
|
|
||||||
|
|
||||||
if (elementsLen) {
|
|
||||||
var element, pos, off, centre = {},
|
|
||||||
i = 0;
|
|
||||||
var mousedown = {
|
|
||||||
type: 'mousedown',
|
|
||||||
button: 1
|
|
||||||
};
|
|
||||||
var hideRipple = function (mouseup, element) {
|
|
||||||
return function () {
|
|
||||||
Effect.hide(mouseup, element);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
for (; i < elementsLen; i++) {
|
|
||||||
element = elements[i];
|
|
||||||
pos = options.position || {
|
|
||||||
x: element.clientWidth / 2,
|
|
||||||
y: element.clientHeight / 2
|
|
||||||
};
|
|
||||||
|
|
||||||
off = offset(element);
|
|
||||||
centre.x = off.left + pos.x;
|
|
||||||
centre.y = off.top + pos.y;
|
|
||||||
|
|
||||||
mousedown.pageX = centre.x;
|
|
||||||
mousedown.pageY = centre.y;
|
|
||||||
|
|
||||||
Effect.show(mousedown, element);
|
|
||||||
|
|
||||||
if (options.wait >= 0 && options.wait !== null) {
|
|
||||||
var mouseup = {
|
|
||||||
type: 'mouseup',
|
|
||||||
button: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
setTimeout(hideRipple(mouseup, element), options.wait);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove all ripples from an element.
|
|
||||||
*/
|
|
||||||
Waves.calm = function (elements) {
|
|
||||||
elements = getWavesElements(elements);
|
|
||||||
var mouseup = {
|
|
||||||
type: 'mouseup',
|
|
||||||
button: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
for (var i = 0, len = elements.length; i < len; i++) {
|
|
||||||
Effect.hide(mouseup, elements[i]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deprecated API fallback
|
|
||||||
*/
|
|
||||||
Waves.displayEffect = function (options) {
|
|
||||||
console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect');
|
|
||||||
Waves.init(options);
|
|
||||||
};
|
|
||||||
|
|
||||||
return Waves;
|
|
||||||
});
|
|
||||||
$(document).ready(function () {
|
|
||||||
//Initialization
|
|
||||||
Waves.attach('.btn:not(.btn-flat), .btn-floating', ['waves-light']);
|
|
||||||
Waves.attach('.btn-flat', ['waves-effect']);
|
|
||||||
Waves.attach('.chip', ['waves-effect']);
|
|
||||||
Waves.attach('.view a .mask', ['waves-light']);
|
|
||||||
Waves.attach('.waves-light', ['waves-light']);
|
|
||||||
Waves.attach('.navbar-nav a:not(.navbar-brand), .nav-icons li a, .nav-tabs .nav-item:not(.dropdown)', ['waves-light']);
|
|
||||||
Waves.attach('.pager li a', ['waves-light']);
|
|
||||||
Waves.attach('.pagination .page-item .page-link', ['waves-effect']);
|
|
||||||
Waves.init();
|
|
||||||
});
|
|
@ -1,208 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var WOW;
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
|
|
||||||
WOW = function WOW() {
|
|
||||||
|
|
||||||
return {
|
|
||||||
|
|
||||||
init: function init() {
|
|
||||||
|
|
||||||
var animationName = [];
|
|
||||||
|
|
||||||
var once = 1;
|
|
||||||
|
|
||||||
function mdbWow() {
|
|
||||||
|
|
||||||
var windowHeight = window.innerHeight;
|
|
||||||
var scroll = window.scrollY;
|
|
||||||
|
|
||||||
$('.wow').each(function () {
|
|
||||||
|
|
||||||
if ($(this).css('visibility') == 'visible') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (windowHeight + scroll - 100 > getOffset(this) && scroll < getOffset(this) || windowHeight + scroll - 100 > getOffset(this) + $(this).height() && scroll < getOffset(this) + $(this).height() || windowHeight + scroll == $(document).height() && getOffset(this) + 100 > $(document).height()) {
|
|
||||||
|
|
||||||
var index = $(this).index('.wow');
|
|
||||||
|
|
||||||
var delay = $(this).attr('data-wow-delay');
|
|
||||||
|
|
||||||
if (delay) {
|
|
||||||
|
|
||||||
delay = $(this).attr('data-wow-delay').slice(0, -1
|
|
||||||
|
|
||||||
);
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
var timeout = parseFloat(delay) * 1000;
|
|
||||||
|
|
||||||
$(self).addClass('animated');
|
|
||||||
$(self).css({
|
|
||||||
'visibility': 'visible'
|
|
||||||
});
|
|
||||||
$(self).css({
|
|
||||||
'animation-delay': delay
|
|
||||||
});
|
|
||||||
$(self).css({
|
|
||||||
'animation-name': animationName[index]
|
|
||||||
});
|
|
||||||
|
|
||||||
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
|
||||||
|
|
||||||
if ($(this).attr('data-wow-delay')) {
|
|
||||||
|
|
||||||
removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
|
|
||||||
$(self).removeClass('animated');
|
|
||||||
}, removeTime);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$(this).addClass('animated');
|
|
||||||
$(this).css({
|
|
||||||
'visibility': 'visible'
|
|
||||||
});
|
|
||||||
$(this).css({
|
|
||||||
'animation-name': animationName[index]
|
|
||||||
});
|
|
||||||
|
|
||||||
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
|
|
||||||
$(self).removeClass('animated');
|
|
||||||
}, removeTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function appear() {
|
|
||||||
|
|
||||||
$('.wow').each(function () {
|
|
||||||
|
|
||||||
var index = $(this).index('.wow');
|
|
||||||
|
|
||||||
var delay = $(this).attr('data-wow-delay');
|
|
||||||
|
|
||||||
if (delay) {
|
|
||||||
|
|
||||||
delay = $(this).attr('data-wow-delay').slice(0, -1);
|
|
||||||
|
|
||||||
var timeout = parseFloat(delay) * 1000;
|
|
||||||
|
|
||||||
$(this).addClass('animated');
|
|
||||||
$(this).css({
|
|
||||||
'visibility': 'visible'
|
|
||||||
});
|
|
||||||
$(this).css({
|
|
||||||
'animation-delay': delay + 's'
|
|
||||||
});
|
|
||||||
$(this).css({
|
|
||||||
'animation-name': animationName[index]
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$(this).addClass('animated');
|
|
||||||
$(this).css({
|
|
||||||
'visibility': 'visible'
|
|
||||||
});
|
|
||||||
$(this).css({
|
|
||||||
'animation-name': animationName[index]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function hide() {
|
|
||||||
|
|
||||||
var windowHeight = window.innerHeight;
|
|
||||||
var scroll = window.scrollY;
|
|
||||||
|
|
||||||
$('.wow.animated').each(function () {
|
|
||||||
|
|
||||||
if (windowHeight + scroll - 100 > getOffset(this) && scroll > getOffset(this) + 100 || windowHeight + scroll - 100 < getOffset(this) && scroll < getOffset(this) + 100 || getOffset(this) + $(this).height > $(document).height() - 100) {
|
|
||||||
|
|
||||||
$(this).removeClass('animated');
|
|
||||||
$(this).css({
|
|
||||||
'animation-name': 'none'
|
|
||||||
});
|
|
||||||
$(this).css({
|
|
||||||
'visibility': 'hidden'
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
|
|
||||||
var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;
|
|
||||||
|
|
||||||
if ($(this).attr('data-wow-delay')) {
|
|
||||||
|
|
||||||
removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
|
|
||||||
$(self).removeClass('animated');
|
|
||||||
}, removeTime);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mdbWow();
|
|
||||||
|
|
||||||
once--;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getOffset(elem) {
|
|
||||||
|
|
||||||
var box = elem.getBoundingClientRect();
|
|
||||||
|
|
||||||
var body = document.body;
|
|
||||||
var docEl = document.documentElement;
|
|
||||||
|
|
||||||
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
|
|
||||||
|
|
||||||
var clientTop = docEl.clientTop || body.clientTop || 0;
|
|
||||||
|
|
||||||
var top = box.top + scrollTop - clientTop;
|
|
||||||
|
|
||||||
return Math.round(top);
|
|
||||||
}
|
|
||||||
|
|
||||||
$('.wow').each(function () {
|
|
||||||
|
|
||||||
$(this).css({
|
|
||||||
'visibility': 'hidden'
|
|
||||||
});
|
|
||||||
animationName[$(this).index('.wow')] = $(this).css('animation-name');
|
|
||||||
$(this).css({
|
|
||||||
'animation-name': 'none'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(window).scroll(function () {
|
|
||||||
|
|
||||||
if (once) {
|
|
||||||
|
|
||||||
hide();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
mdbWow();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
appear();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
5
mdb/js/popper.min.js
vendored
@ -1 +0,0 @@
|
|||||||
// Your custom styles
|
|
@ -1 +0,0 @@
|
|||||||
// Your custom variables
|
|
@ -1,151 +0,0 @@
|
|||||||
/*
|
|
||||||
* MDBootstrap integration with Datatables
|
|
||||||
* Learn more: https://mdbootstrap.com/docs/jquery/tables/datatables/
|
|
||||||
* About MDBootstrap: https://mdbootstrap.com/
|
|
||||||
*
|
|
||||||
* This combined file was created taking that code from this webstie:
|
|
||||||
* https://cdn.datatables.net/select/1.2.7/css/select.dataTables.min.css
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
|
||||||
* software please visit:
|
|
||||||
* https://datatables.net/download/#bs4/dt-1.10.18
|
|
||||||
*
|
|
||||||
* Included libraries:
|
|
||||||
* DataTables 1.10.18
|
|
||||||
*/
|
|
||||||
|
|
||||||
table {
|
|
||||||
&.dataTable {
|
|
||||||
tbody > tr {
|
|
||||||
&.selected,
|
|
||||||
> .selected {
|
|
||||||
background-color: #b0bed9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.stripe, &.display {
|
|
||||||
tbody > tr.odd {
|
|
||||||
&.selected,
|
|
||||||
> .selected {
|
|
||||||
background-color: #acbad4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.hover, &.display {
|
|
||||||
tbody > tr {
|
|
||||||
&.selected:hover,
|
|
||||||
> .selected:hover {
|
|
||||||
background-color: #aab7d1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.order-column, &.display {
|
|
||||||
tbody > tr {
|
|
||||||
&.selected > {
|
|
||||||
.sorting_1, .sorting_2, .sorting_3 {
|
|
||||||
background-color: #acbad5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
> .selected {
|
|
||||||
background-color: #acbad5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.display, &.order-column.stripe {
|
|
||||||
tbody > tr {
|
|
||||||
&.odd.selected > .sorting_1 {
|
|
||||||
background-color: #a6b4cd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.display tbody > tr.odd.selected > .sorting_2, &.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
|
|
||||||
background-color: #a8b5cf;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.odd.selected > .sorting_3, &.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
|
|
||||||
background-color: #a9b7d1;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.even.selected > .sorting_1, &.order-column.stripe tbody > tr.even.selected > .sorting_1 {
|
|
||||||
background-color: #acbad5;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.even.selected > .sorting_2, &.order-column.stripe tbody > tr.even.selected > .sorting_2 {
|
|
||||||
background-color: #aebcd6;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.even.selected > .sorting_3, &.order-column.stripe tbody > tr.even.selected > .sorting_3 {
|
|
||||||
background-color: #afbdd8;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.odd > .selected, &.order-column.stripe tbody > tr.odd > .selected {
|
|
||||||
background-color: #a6b4cd;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.even > .selected, &.order-column.stripe tbody > tr.even > .selected {
|
|
||||||
background-color: #acbad5;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.selected:hover > .sorting_1, &.order-column.hover tbody > tr.selected:hover > .sorting_1 {
|
|
||||||
background-color: #a2aec7;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.selected:hover > .sorting_2, &.order-column.hover tbody > tr.selected:hover > .sorting_2 {
|
|
||||||
background-color: #a3b0c9;
|
|
||||||
}
|
|
||||||
&.display tbody > tr.selected:hover > .sorting_3, &.order-column.hover tbody > tr.selected:hover > .sorting_3 {
|
|
||||||
background-color: #a5b2cb;
|
|
||||||
}
|
|
||||||
&.display, &.order-column.hover {
|
|
||||||
tbody > tr {
|
|
||||||
&:hover > .selected, > .selected:hover {
|
|
||||||
background-color: #a2aec7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tbody {
|
|
||||||
td.select-checkbox, th.select-checkbox {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
td, th {
|
|
||||||
&.select-checkbox {
|
|
||||||
&:before,
|
|
||||||
&:after {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 1.2em;
|
|
||||||
left: 50%;
|
|
||||||
width: 12px;
|
|
||||||
height: 12px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
td.select-checkbox:before,
|
|
||||||
th.select-checkbox:before {
|
|
||||||
content: ' ';
|
|
||||||
margin-top: 4px;
|
|
||||||
margin-left: -6px;
|
|
||||||
border: 1px solid black;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tr.selected {
|
|
||||||
td.select-checkbox:after,
|
|
||||||
th.select-checkbox:after {
|
|
||||||
content: '\2714';
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-left: -4px;
|
|
||||||
text-align: center;
|
|
||||||
text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper span {
|
|
||||||
&.select-info, &.select-item {
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 640px) {
|
|
||||||
div.dataTables_wrapper span {
|
|
||||||
&.select-info, &.select-item {
|
|
||||||
margin-left: 0;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,157 +0,0 @@
|
|||||||
/*
|
|
||||||
* MDBootstrap integration with Datatables
|
|
||||||
* Learn more: https://mdbootstrap.com/docs/jquery/tables/datatables/
|
|
||||||
* About MDBootstrap: https://mdbootstrap.com/
|
|
||||||
*
|
|
||||||
* This combined file was created by the DataTables downloader builder:
|
|
||||||
* https://datatables.net/download
|
|
||||||
*
|
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
|
||||||
* software please visit:
|
|
||||||
* https://datatables.net/download/#bs4/dt-1.10.18
|
|
||||||
*
|
|
||||||
* Included libraries:
|
|
||||||
* DataTables 1.10.18
|
|
||||||
*/
|
|
||||||
|
|
||||||
table.dataTable thead {
|
|
||||||
cursor: pointer;
|
|
||||||
> tr > {
|
|
||||||
th:active, td:active {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper div {
|
|
||||||
&.dataTables_length {
|
|
||||||
&.d-flex.flex-row {
|
|
||||||
label {
|
|
||||||
margin-top: 1.2rem;
|
|
||||||
margin-right: 1rem;
|
|
||||||
}
|
|
||||||
.select-wrapper.mdb-select {
|
|
||||||
span, .select-dropdown {
|
|
||||||
margin-top: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.dataTables_length,
|
|
||||||
&.dataTables_filter {
|
|
||||||
label {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: normal;
|
|
||||||
padding-top: .5rem;
|
|
||||||
padding-bottom: .5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.dataTables_length {
|
|
||||||
select, input {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.dataTables_filter {
|
|
||||||
select,
|
|
||||||
input {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
input {
|
|
||||||
margin-left: .5rem;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
&.dataTables_info,
|
|
||||||
&.dataTables_paginate {
|
|
||||||
font-weight: normal;
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
}
|
|
||||||
&.dataTables_paginate {
|
|
||||||
text-align: right;
|
|
||||||
margin: 0;
|
|
||||||
ul.pagination {
|
|
||||||
-webkit-box-pack: end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
-ms-flex-pack: end;
|
|
||||||
justify-content: flex-end;
|
|
||||||
.page-item {
|
|
||||||
&.active .page-link:focus {
|
|
||||||
background-color: #4285f4;
|
|
||||||
}
|
|
||||||
.page-link:focus {
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
div.dataTables_wrapper div {
|
|
||||||
.dataTables_length, .dataTables_filter, .dataTables_info, .dataTables_paginate ul.pagination {
|
|
||||||
text-align: center;
|
|
||||||
-webkit-box-pack: center;
|
|
||||||
-webkit-justify-content: center;
|
|
||||||
-ms-flex-pack: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.bs-select select {
|
|
||||||
display: inline-block !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.dataTable thead {
|
|
||||||
> tr > {
|
|
||||||
th,
|
|
||||||
td {
|
|
||||||
&.sorting_asc, &.sorting_desc, &.sorting {
|
|
||||||
padding-right: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
th:active, td:active {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.sorting, .sorting_asc, .sorting_desc, .sorting_asc_disabled, .sorting_desc_disabled {
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.sorting,
|
|
||||||
.sorting_asc,
|
|
||||||
.sorting_desc,
|
|
||||||
.sorting_asc_disabled,
|
|
||||||
.sorting_desc_disabled {
|
|
||||||
&:before, &:after {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0.9em;
|
|
||||||
display: block;
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.sorting:before, .sorting_asc:before, .sorting_desc:before, .sorting_asc_disabled:before, .sorting_desc_disabled:before {
|
|
||||||
right: 1em;
|
|
||||||
content: "\f0de";
|
|
||||||
}
|
|
||||||
.sorting:after, .sorting_asc:after, .sorting_desc:after, .sorting_asc_disabled:after, .sorting_desc_disabled:after {
|
|
||||||
content: "\f0dd";
|
|
||||||
right: 16px;
|
|
||||||
}
|
|
||||||
.sorting:before, .sorting_asc:before, .sorting_desc:before, .sorting_asc_disabled:before, .sorting_desc_disabled:before,
|
|
||||||
.sorting:after, .sorting_asc:after, .sorting_desc:after, .sorting_asc_disabled:after, .sorting_desc_disabled:after {
|
|
||||||
font-family: 'Font Awesome\ 5 Free';
|
|
||||||
font-weight: 900;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sorting_asc:before, .sorting_desc:after {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
.sorting_asc_disabled:before, .sorting_desc_disabled:after {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
// Optional directives
|
|
||||||
@each $key in (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) {
|
|
||||||
.opacity-#{$key} {
|
|
||||||
opacity: $key * .01;
|
|
||||||
}
|
|
||||||
}
|
|